From e90e060739c20f8abb6ad9c746286ef4e0ee86b5 Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Wed, 16 Oct 2024 15:54:13 +0530 Subject: [PATCH] feat: Event availability platform wrapper (#17091) * moved listSchedules to schedule repository * Create EventAvailabilityTabPlatformWrapper.tsx * Revert "moved listSchedules to schedule repository" This reverts commit b5feacfabbadbf9d75eb205dfad8f70b7773a5cb. * fix: active state of tabs items * added event availability platform wrapper * Update event-types.tsx * better types only pick the types we need and omit the rest * fix: type-check failing --------- Co-authored-by: Morgan Vernay Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> --- .../routing-forms/__tests__/config.test.ts | 1 - .../config/BasicConfig.ts | 10 +-- .../availability/EventAvailabilityTab.tsx | 66 ++++++++++--------- .../transformApiScheduleForAtom.ts | 1 + .../atoms/event-types/hooks/useSchedule.ts | 36 ++++++++++ .../atoms/event-types/hooks/useSchedules.ts | 35 ++++++++++ .../EventAvailabilityTabPlatformWrapper.tsx | 66 +++++++++++++++++++ .../EventAvailabilityTabWebWrapper.tsx | 12 ++-- .../wrappers/EventTypePlatformWrapper.tsx | 11 +++- .../wrappers/EventTypeWebWrapper.tsx | 6 +- .../examples/base/src/pages/event-types.tsx | 2 +- 11 files changed, 193 insertions(+), 53 deletions(-) create mode 100644 packages/platform/atoms/event-types/hooks/useSchedule.ts create mode 100644 packages/platform/atoms/event-types/hooks/useSchedules.ts create mode 100644 packages/platform/atoms/event-types/wrappers/EventAvailabilityTabPlatformWrapper.tsx diff --git a/packages/app-store/routing-forms/__tests__/config.test.ts b/packages/app-store/routing-forms/__tests__/config.test.ts index db9c427c3e..d1112f3911 100644 --- a/packages/app-store/routing-forms/__tests__/config.test.ts +++ b/packages/app-store/routing-forms/__tests__/config.test.ts @@ -42,7 +42,6 @@ const assertSelectOperators = (config: any) => { expect(config.types.select.widgets.multiselect.operators).not.toContain("select_equals"); expect(config.types.select.widgets.multiselect.operators).not.toContain("select_not_equals"); - expect(config.types.select.widgets.select.operators).toContain("select_equals"); expect(config.types.select.widgets.select.operators).toContain("select_not_equals"); diff --git a/packages/app-store/routing-forms/components/react-awesome-query-builder/config/BasicConfig.ts b/packages/app-store/routing-forms/components/react-awesome-query-builder/config/BasicConfig.ts index 6cfabbea3c..c3876cb9ce 100644 --- a/packages/app-store/routing-forms/components/react-awesome-query-builder/config/BasicConfig.ts +++ b/packages/app-store/routing-forms/components/react-awesome-query-builder/config/BasicConfig.ts @@ -340,10 +340,7 @@ const types: Types = { defaultOperator: "select_equals", widgets: { select: { - operators: [ - "select_equals", - "select_not_equals", - ], + operators: ["select_equals", "select_not_equals"], widgetProps: { customProps: { showSearch: true, @@ -351,10 +348,7 @@ const types: Types = { }, }, multiselect: { - operators: [ - "select_any_in", - "select_not_any_in", - ], + operators: ["select_any_in", "select_not_any_in"], }, }, }, diff --git a/packages/features/eventtypes/components/tabs/availability/EventAvailabilityTab.tsx b/packages/features/eventtypes/components/tabs/availability/EventAvailabilityTab.tsx index 10cc891fe8..0f4e34b4e3 100644 --- a/packages/features/eventtypes/components/tabs/availability/EventAvailabilityTab.tsx +++ b/packages/features/eventtypes/components/tabs/availability/EventAvailabilityTab.tsx @@ -4,10 +4,7 @@ import { Controller, useFormContext } from "react-hook-form"; import type { OptionProps, SingleValueProps } from "react-select"; import { components } from "react-select"; -import type { - EventAvailabilityTabWebWrapperProps, - GetAllSchedulesByUserIdQueryType, -} from "@calcom/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper"; +import type { GetAllSchedulesByUserIdQueryType } from "@calcom/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper"; import dayjs from "@calcom/dayjs"; import { SelectSkeletonLoader } from "@calcom/features/availability/components/SkeletonLoader"; import useLockedFieldsManager from "@calcom/features/ee/managed-event-types/hooks/useLockedFieldsManager"; @@ -27,10 +24,14 @@ import type { RouterOutputs } from "@calcom/trpc/react"; import { Avatar, Badge, Button, Icon, Label, Select, SettingsToggle, SkeletonText } from "@calcom/ui"; import { Spinner } from "@calcom/ui/components/icon/Spinner"; +type ScheduleQueryData = RouterOutputs["viewer"]["availability"]["schedule"]["get"]; + type EventTypeScheduleDetailsProps = { - scheduleQueryData?: RouterOutputs["viewer"]["availability"]["schedule"]["get"]; + scheduleQueryData?: Pick & { + schedule: Array>; + }; isSchedulePending?: boolean; - loggedInUser?: RouterOutputs["viewer"]["me"]; + user?: Pick; editAvailabilityRedirectUrl?: string; }; @@ -40,13 +41,20 @@ type EventTypeTeamScheduleProps = { }; type EventTypeScheduleProps = { - availabilityQueryData?: RouterOutputs["viewer"]["availability"]["list"]; - isAvailabilityPending?: boolean; + schedulesQueryData?: Array< + Omit + >; + isSchedulesPending?: boolean; eventType: EventTypeSetup; + teamMembers: TeamMembers; } & EventTypeScheduleDetailsProps & EventTypeTeamScheduleProps; -type EventAvailabilityTabProps = EventAvailabilityTabWebWrapperProps & EventTypeScheduleProps; +export type EventAvailabilityTabBaserProps = { + isTeamEvent: boolean; +}; + +type EventAvailabilityTabProps = EventAvailabilityTabBaserProps & EventTypeScheduleProps; const Option = ({ ...props }: OptionProps) => { const { label, isDefault, isManaged = false } = props.data; @@ -99,16 +107,16 @@ const EventTypeScheduleDetails = memo( ({ scheduleQueryData, isSchedulePending, - loggedInUser, + user, editAvailabilityRedirectUrl, }: EventTypeScheduleDetailsProps) => { - const timeFormat = loggedInUser?.timeFormat; + const timeFormat = user?.timeFormat; const { t, i18n } = useLocale(); - const weekStart = weekStartNum(loggedInUser?.weekStart); + const weekStart = weekStartNum(user?.weekStart); const filterDays = (dayNum: number) => - scheduleQueryData?.schedule.filter((item) => item.days.includes((dayNum + weekStart) % 7)) || []; + scheduleQueryData?.schedule?.filter((item) => item.days.includes((dayNum + weekStart) % 7)) || []; return (
@@ -157,7 +165,6 @@ const EventTypeScheduleDetails = memo( !scheduleQueryData.readOnly && !!editAvailabilityRedirectUrl && (