diff --git a/apps/web/modules/event-types/components/AddMembersWithSwitch.tsx b/apps/web/modules/event-types/components/AddMembersWithSwitch.tsx index 216487786398d1..a9f1f59bb91e01 100644 --- a/apps/web/modules/event-types/components/AddMembersWithSwitch.tsx +++ b/apps/web/modules/event-types/components/AddMembersWithSwitch.tsx @@ -32,7 +32,7 @@ interface IUserToValue { } export const mapUserToValue = ( - { id, name, username, avatar, email, defaultScheduleId }: IUserToValue, + { id, name, username, avatar, email, defaultScheduleId, isOptional }: IUserToValue & { isOptional?: boolean }, pendingString: string ) => ({ value: `${id || ""}`, @@ -40,6 +40,7 @@ export const mapUserToValue = ( avatar, email, defaultScheduleId, + isOptional: isOptional || false, }); const sortByLabel = (a: ReturnType, b: ReturnType) => { diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 783a940ded1a2f..ddee57d0ba5470 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -4631,5 +4631,9 @@ "last_6_months": "Last 6 months", "last_12_months": "Last 12 months", "calendar_events_disabled_video_limitation": "When calendar events are disabled, meeting links cannot be generated for apps whose link generation is tied to calendar event creation, for example, Google Meet and Microsoft Teams. Other video apps like Cal Video will continue to work.", + "make_optional": "Make optional", + "make_required": "Make required", + "optional": "Optional", + "required": "Required", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" } diff --git a/packages/features/availability/lib/getAggregatedAvailability/getAggregatedAvailability.ts b/packages/features/availability/lib/getAggregatedAvailability/getAggregatedAvailability.ts index 0dc5dfbb6e600d..8e4ba2c3a14acb 100644 --- a/packages/features/availability/lib/getAggregatedAvailability/getAggregatedAvailability.ts +++ b/packages/features/availability/lib/getAggregatedAvailability/getAggregatedAvailability.ts @@ -26,7 +26,7 @@ export const getAggregatedAvailability = ( userAvailability: { dateRanges: DateRange[]; oooExcludedDateRanges: DateRange[]; - user?: { isFixed?: boolean; groupId?: string | null }; + user?: { isFixed?: boolean; groupId?: string | null; isOptional?: boolean }; }[], schedulingType: SchedulingType | null ): DateRange[] => { @@ -36,14 +36,14 @@ export const getAggregatedAvailability = ( userAvailability.length > 1; const fixedHosts = userAvailability.filter( - ({ user }) => !schedulingType || schedulingType === SchedulingType.COLLECTIVE || user?.isFixed + ({ user }) => (!schedulingType || schedulingType === SchedulingType.COLLECTIVE || user?.isFixed) && !user?.isOptional ); const fixedDateRanges = mergeOverlappingDateRanges( intersect(fixedHosts.map((s) => (!isTeamEvent ? s.dateRanges : s.oooExcludedDateRanges))) ); const dateRangesToIntersect = fixedDateRanges.length ? [fixedDateRanges] : []; - const roundRobinHosts = userAvailability.filter(({ user }) => user?.isFixed !== true); + const roundRobinHosts = userAvailability.filter(({ user }) => user?.isFixed !== true && !user?.isOptional); if (roundRobinHosts.length) { // Group round robin hosts by their groupId const hostsByGroup = roundRobinHosts.reduce( diff --git a/packages/features/eventtypes/components/CheckedTeamSelect.tsx b/packages/features/eventtypes/components/CheckedTeamSelect.tsx index 7b27d319b5a0c4..1fc7e7fd32865e 100644 --- a/packages/features/eventtypes/components/CheckedTeamSelect.tsx +++ b/packages/features/eventtypes/components/CheckedTeamSelect.tsx @@ -28,6 +28,7 @@ export type CheckedSelectOption = { priority?: number; weight?: number; isFixed?: boolean; + isOptional?: boolean; disabled?: boolean; defaultScheduleId?: number | null; groupId: string | null; @@ -136,6 +137,23 @@ export const CheckedTeamSelect = ({
{option && !option.isFixed ? ( <> + + +