From 3ac140fad50baff6797317d205eb9501baf38671 Mon Sep 17 00:00:00 2001 From: Adam Garbowski Date: Wed, 3 Aug 2022 11:03:01 +0200 Subject: [PATCH] [Proposal] Event type error popover proposal (#3627) --- apps/web/package.json | 4 +- apps/web/pages/event-types/index.tsx | 38 +++++++++++++++++-- apps/web/public/static/locales/en/common.json | 3 +- packages/trpc/server/routers/viewer.tsx | 2 + 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index b05aa848e3..1e9d74e124 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -32,10 +32,10 @@ "@calcom/app-store-cli": "*", "@calcom/core": "*", "@calcom/dayjs": "*", - "@calcom/features": "*", "@calcom/embed-core": "*", "@calcom/embed-react": "*", "@calcom/embed-snippet": "*", + "@calcom/features": "*", "@calcom/lib": "*", "@calcom/prisma": "*", "@calcom/trpc": "*", @@ -147,7 +147,7 @@ "autoprefixer": "^10.4.7", "babel-jest": "^27.3.1", "env-cmd": "10.1.0", - "eslint": "^8.15.0", + "eslint": "^8.16.0", "jest": "^26.0.0", "mockdate": "^3.0.5", "module-alias": "^2.2.2", diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index fd21b31b19..d43ea0b2ab 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -40,6 +40,8 @@ import { TRPCClientError } from "@trpc/react"; type EventTypeGroups = inferQueryOutput<"viewer.eventTypes">["eventTypeGroups"]; type EventTypeGroupProfile = EventTypeGroups[number]["profile"]; +type ConnectedCalendars = inferQueryOutput<"viewer.connectedCalendars">["connectedCalendars"][number]; + interface EventTypeListHeadingProps { profile: EventTypeGroupProfile; membershipCount: number; @@ -54,9 +56,23 @@ interface EventTypeListProps { types: EventType[]; } -const Item = ({ type, group, readOnly }: { type: EventType; group: EventTypeGroup; readOnly: boolean }) => { +const Item = ({ + type, + group, + readOnly, + connectedCalendars, +}: { + type: EventType; + group: EventTypeGroup; + readOnly: boolean; + connectedCalendars: ConnectedCalendars[] | undefined; +}) => { const { t } = useLocale(); + function isCalendarConnectedMissing() { + return connectedCalendars?.length && !type.team && !type.destinationCalendar; + } + return ( )} + {isCalendarConnectedMissing() && ( + + {t("missing_connected_calendar") as string} + + )} {readOnly && ( {t("readonly") as string} @@ -124,7 +145,11 @@ export const EventTypeList = ({ group, groupIndex, readOnly, types }: EventTypeL utils.setQueryData(["viewer.eventTypes"], (data) => { // tRPC is very strict with the return signature... if (!data) - return { eventTypeGroups: [], profiles: [], viewer: { canAddEvents: false, plan: UserPlan.FREE } }; + return { + eventTypeGroups: [], + profiles: [], + viewer: { canAddEvents: false, plan: UserPlan.FREE }, + }; return { ...data, eventTypesGroups: [ @@ -196,6 +221,8 @@ export const EventTypeList = ({ group, groupIndex, readOnly, types }: EventTypeL } }, []); + const connectedCalendarsQuery = trpc.useQuery(["viewer.connectedCalendars"]); + return (
    @@ -229,7 +256,12 @@ export const EventTypeList = ({ group, groupIndex, readOnly, types }: EventTypeL )} - +
    {type.users?.length > 1 && ( diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index be69266202..d135f9d113 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -1009,5 +1009,6 @@ "pro_feature_workflows": "This is a Pro feature. Upgrade to Pro to automate your event notifications and reminders with Workflows.", "embed": "Embed", "new_username": "New username", - "current_username": "Current username" + "current_username": "Current username", + "missing_connected_calendar": "No calendar connected" } diff --git a/packages/trpc/server/routers/viewer.tsx b/packages/trpc/server/routers/viewer.tsx index e87e0be16c..1cb0c998e8 100644 --- a/packages/trpc/server/routers/viewer.tsx +++ b/packages/trpc/server/routers/viewer.tsx @@ -135,6 +135,8 @@ const loggedInViewerRouter = createProtectedRouter() position: true, successRedirectUrl: true, hashedLink: true, + destinationCalendar: true, + team: true, users: { select: { id: true,