import dayjs from "dayjs"; import React, { useState, useEffect, CSSProperties } from "react"; import TimezoneSelect, { ITimezone } from "react-timezone-select"; import AutoSizer from "react-virtualized-auto-sizer"; import { FixedSizeList as List } from "react-window"; import { getPlaceholderAvatar } from "@lib/getPlaceholderAvatar"; import { trpc, inferQueryOutput } from "@lib/trpc"; import Avatar from "@components/ui/Avatar"; import { DatePicker } from "@components/ui/form/DatePicker"; import MinutesField from "@components/ui/form/MinutesField"; import TeamAvailabilityTimes from "./TeamAvailabilityTimes"; interface Props { team?: inferQueryOutput<"viewer.teams.get">; members?: inferQueryOutput<"viewer.teams.get">["members"]; } // type Member = inferQueryOutput<"viewer.teams.get">["members"][number]; export default function TeamAvailabilityScreen(props: Props) { const utils = trpc.useContext(); const [selectedDate, setSelectedDate] = useState(dayjs()); const [selectedTimeZone, setSelectedTimeZone] = useState(dayjs.tz.guess()); const [frequency, setFrequency] = useState(30); useEffect(() => { utils.invalidateQueries(["viewer.teams.getMemberAvailability"]); // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedTimeZone, selectedDate]); const Item = ({ index, style }: { index: number; style: CSSProperties }) => { const member = props.members?.[index]; if (!member) return <>; return (
} member={member} frequency={frequency} selectedDate={selectedDate} selectedTimeZone={selectedTimeZone} HeaderComponent={
{member?.name} {member?.email}
} />
); }; return (
Date { setSelectedDate(dayjs(newDate)); }} />
Timezone setSelectedTimeZone(timezone.value)} classNamePrefix="react-select" className="w-full border border-gray-300 rounded-sm shadow-sm react-select-container focus:ring-neutral-800 focus:border-neutral-800 sm:text-sm" />
Slot Length { setFrequency(Number(e.target.value)); }} />
{({ height, width }) => ( {Item} )}
); }