/** @jsxRuntime classic */ /** @jsx jsx */ import { FC, useEffect, useState } from 'react'; import { css, jsx } from '@emotion/react'; import dayjs from 'dayjs'; import { Header } from './muleculos/Header'; import { FilterLine } from './muleculos/FilterLine'; import { SlotContainer } from './layout/slotContainer'; import { SACalendar } from '../../SACalendar/SACalendar'; import { Space } from './Space'; import { SpaceHorizontalView } from './SpaceHorizontalView'; import { getHours, getWeeklyEventHours } from './timeUtils'; import { ECalendarMode, ECalendarView, IDragOverlayComponentProps, IEventComponentProps, ISlotsEventsAndEventsWithSpaces, } from '../../SACalendar/types'; import { newSlots, newSpaces } from './changedDb'; import { fetchData, selectedDate as defaultDate } from './helpers'; import { Slot } from '../../organisms'; const container = css` height: 100%; display: flex; flex-direction: column; `; const bodyContainer = css` position: relative; flex-grow: 1; display: flex; `; const mainContainer = css` position: relative; flex-grow: 1; display: flex; `; const columnContainer = css` flex-grow: 1; display: flex; flex-direction: column; `; const eventComponentStyles = css` height: 100%; background: #edf4fc; border-left: 3px solid #4a90e2; padding-left: 5px; border-radius: 2px; `; const EventComponent: FC = ({ event }) => { return (
{event?.id}
{getHours(event?.startDate, event?.endDate)}
{event?.startDate.slice(0, 10)}
); }; const eventWeeklyComponentStyles = css` display: flex; align-items: center; justify-content: space-between; min-height: 16px; height: 100%; background: #edf4fc; border-left: 3px solid #4a90e2; padding: 0 4px; border-radius: 2px; font-family: Montserrat; font-style: normal; font-weight: 600; font-size: 10px; line-height: 12.19px; label { max-width: 48%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: inherit; } span { max-width: 49%; white-space: nowrap; font-weight: 400; } `; const EventWeeklyComponent: FC = ({ event }) => { return (
{getWeeklyEventHours(event?.startDate, event?.endDate)}
); }; const DragOverlayEventWeeklyComponent: FC = ({ event, }) => { return (
{getWeeklyEventHours(event?.startDate, event?.endDate)}
); }; const dragOverlayComponentStyles = css` height: 100%; background: #fff4fc; border-left: 3px solid #4a90e2; padding-left: 5px; border-radius: 2px; `; const DragOverlayComponent: FC = ({ event, hours, }) => { return (
{event?.id}
{hours}
{event?.startDate.slice(0, 10)}
); }; export const Calendar = ({ isRightWindow, setRightWindow, isLeftWindow, setLeftWindow, widthChangeTrigger, ...props }) => { const [sp, setSp] = useState([]); const [sl, setSl] = useState({}); const [selectedDate, setSelectedDate] = useState(defaultDate); const handleNewBooking = () => { setLeftWindow(!isLeftWindow); }; const handleSearch = () => { setRightWindow(!isRightWindow); }; const handleChange = (data: any): boolean | void => { console.log('SACalendar onChange:', data); if (data?.type === 'SLOT_DROP') { const answer = window.confirm('Do you confirm the changes?'); return answer; } }; const [mode, setMode] = useState(ECalendarMode.DAILY); const [view, setView] = useState(ECalendarView.VERTICAL); const [infinite, setInfinite] = useState(false); const [partial, setPartial] = useState(false); useEffect(() => { if (mode === ECalendarMode.MONTHLY) { setView(ECalendarView.VERTICAL); } }, [view, mode]); useEffect(() => { setSp(newSpaces); if (props.api) { fetchData(mode, selectedDate).then((data) => setSl(data)); } else setSl(newSlots); }, [mode, selectedDate]); const horizontal = view === ECalendarView.HORIZONTAL && mode !== ECalendarMode.MONTHLY; const weeklyComponents = mode == ECalendarMode.WEEKLY || mode == ECalendarMode.MONTHLY; const eventComponent = weeklyComponents ? EventWeeklyComponent : Slot; const dragOverlayComponent = weeklyComponents ? DragOverlayEventWeeklyComponent : Slot; const spaceComponent = horizontal ? SpaceHorizontalView : Space; const [startTime, setStartTime] = useState(); const [endTime, setEndTime] = useState(); const [resourceId, setResourceId] = useState(); const [scrollTo, setScrollTo] = useState(); const handleScrollToClick = () => setScrollTo({ startTime, endTime, resourceId }); const [hourVertical, setHourVertical] = useState(63); const [hourHorizontal, setHourHorizontal] = useState(82); const [hourSize, setHourSize] = useState(); const handleSizeClick = () => setHourSize({ vertical: hourVertical, horizontal: hourHorizontal, }); return (
{props.scrollTo === true && (
Start time setStartTime(e.target.value)} /> End time setEndTime(e.target.value)} /> Resource ID
Hour vertical setHourVertical(Number(e.target.value))} css={{ width: 50 }} /> Hour horizontal setHourHorizontal(Number(e.target.value))} css={{ width: 50 }} />
)}
); };