import { useState, useRef, Fragment } from 'react'; import { useTranslation } from 'react-i18next'; import { useLocaleUpdateStore } from 'stores'; import dayjs from 'dayjs'; import localeData from 'dayjs/plugin/localeData'; import customParseFormat from 'dayjs/plugin/customParseFormat'; import isBetween from 'dayjs/plugin/isBetween'; import { Wrapper, ScrollWrapper, Container, Date, Times, DateLabel, DayLabel, Spacer, TimeLabels, TimeLabel, TimeSpace, StyledMain, } from 'components/AvailabilityViewer/availabilityViewerStyle'; import { Time } from './availabilityEditorStyle'; import { GoogleCalendar, Center } from 'components'; dayjs.extend(localeData); dayjs.extend(customParseFormat); dayjs.extend(isBetween); const AvailabilityEditor = ({ times, timeLabels, dates, timezone, isSpecificDates, value = [], onChange, ...props }) => { const { t } = useTranslation('event'); const locale = useLocaleUpdateStore(state => state.locale); const [selectingTimes, _setSelectingTimes] = useState([]); const staticSelectingTimes = useRef([]); const setSelectingTimes = newTimes => { staticSelectingTimes.current = newTimes; _setSelectingTimes(newTimes); }; const startPos = useRef({}); const staticMode = useRef(null); const [mode, _setMode] = useState(staticMode.current); const setMode = newMode => { staticMode.current = newMode; _setMode(newMode); }; return ( <>
{t('event:you.info')}
{isSpecificDates && ( onChange( times.filter(time => !busyArray.some(busy => dayjs(time, 'HHmm-DDMMYYYY').isBetween(busy.start, busy.end, null, '[)') )) )} /> )} {!!timeLabels.length && timeLabels.map((label, i) => {label.label?.length !== '' && {label.label}} )} {dates.map((date, x) => { const parsedDate = isSpecificDates ? dayjs(date, 'DDMMYYYY') : dayjs().day(date); const last = dates.length === x+1 || (isSpecificDates ? dayjs(dates[x+1], 'DDMMYYYY') : dayjs().day(dates[x+1])).diff(parsedDate, 'day') > 1; return ( {isSpecificDates && {parsedDate.format('MMM D')}} {parsedDate.format('ddd')} 1} > {timeLabels.map((timeLabel, y) => { if (!timeLabel.time) return null; if (!times.includes(`${timeLabel.time}-${date}`)) { return ( ); } const time = `${timeLabel.time}-${date}`; return ( {last && dates.length !== x+1 && ( )} ); })} ); }; export default AvailabilityEditor;