export type UserWithLegacySelectedCalendars = TUser & { selectedCalendars: TCalendar[]; }; type UserWithSelectedCalendars = Omit & { allSelectedCalendars: TCalendar[]; userLevelSelectedCalendars: TCalendar[]; }; export function withSelectedCalendars< TCalendar extends { eventTypeId: number | null; }, TUser extends { selectedCalendars: TCalendar[]; }, >(user: UserWithLegacySelectedCalendars): UserWithSelectedCalendars { // We are renaming selectedCalendars to allSelectedCalendars to make it clear that it contains all the calendars including eventType calendars const { selectedCalendars, ...restUser } = user; return { ...restUser, allSelectedCalendars: selectedCalendars, userLevelSelectedCalendars: selectedCalendars.filter((calendar) => !calendar.eventTypeId), }; }