diff --git a/__test__/features/Events/EventUpdateModal.recurring.test.tsx b/__test__/features/Events/EventUpdateModal.recurring.test.tsx index a33ef31..5454fe0 100644 --- a/__test__/features/Events/EventUpdateModal.recurring.test.tsx +++ b/__test__/features/Events/EventUpdateModal.recurring.test.tsx @@ -129,6 +129,10 @@ describe("EventUpdateModal - Recurring Event 'Edit All' Handling", () => { screen.queryByDisplayValue("Modified Instance Title") ).not.toBeInTheDocument(); + // Expand more options to show timezone (normal mode shows summary first) + fireEvent.click( + screen.getByRole("button", { name: "common.moreOptions" }) + ); // Verify timezone dropdown shows master timezone await waitFor(() => { expect(screen.getByDisplayValue(/New York/i)).toBeDefined(); @@ -493,8 +497,12 @@ describe("EventUpdateModal - Recurring Event 'Edit All' Handling", () => { expect(screen.getByDisplayValue("Daily Standup")).toBeInTheDocument(); }); + // Expand more options to show date/time inputs (normal mode shows DateTimeSummary first) + fireEvent.click( + screen.getByRole("button", { name: "common.moreOptions" }) + ); + const input = await waitFor(() => screen.getByTestId("start-time-input")); // Change time to 2:00 PM (14:00) - const input = screen.getByTestId("start-time-input"); await userEvent.click(input); await userEvent.clear(input); await userEvent.type(input, "14:00{enter}"); diff --git a/package-lock.json b/package-lock.json index b606c01..bcee84c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@fullcalendar/moment-timezone": "^6.1.19", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", - "@linagora/twake-mui": "1.1.7", + "@linagora/twake-mui": "1.1.8", "@lottiefiles/dotlottie-react": "^0.17.13", "@mui/icons-material": "^7.1.2", "@mui/material": "^7.1.2", @@ -2712,9 +2712,10 @@ } }, "node_modules/@linagora/twake-mui": { - "version": "1.1.7", - "resolved": "https://npm.pkg.github.com/download/@linagora/twake-mui/1.1.7/dd45fa10aeb5c7e6b6e89f59ff9d88c7d2f7e507", - "integrity": "sha512-9ZRCeWUWObbIk9h2jg3N0fZlJ+QRBouXzhMNMC4rjQBgFvnCZxZHiMt6kGXQmOov8JsHFKSRhunwfNBYy1cv8Q==", + "version": "1.1.8", + "resolved": "https://npm.pkg.github.com/download/@linagora/twake-mui/1.1.8/e629a126e62dffd939a8d3d8de3ce024de5a2154", + "integrity": "sha512-H2MxtZIy5w1A8VNTNAoM4Pjuph/et4YP8DfzQ+5HCsjRJn6SA/T3nZRZOqC26SxY9kl3XJCKIEKklL+x5af7Vg==", + "license": "MIT", "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/package.json b/package.json index e0352ba..416d7d8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@fullcalendar/moment-timezone": "^6.1.19", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", - "@linagora/twake-mui": "1.1.7", + "@linagora/twake-mui": "1.1.8", "@lottiefiles/dotlottie-react": "^0.17.13", "@mui/icons-material": "^7.1.2", "@mui/material": "^7.1.2", diff --git a/src/components/Calendar/Calendar.styl b/src/components/Calendar/Calendar.styl index fe3e3bf..6dc8972 100644 --- a/src/components/Calendar/Calendar.styl +++ b/src/components/Calendar/Calendar.styl @@ -117,7 +117,7 @@ margin-top 2px width 6px height 6px - background-color #d93025 + background-color #1D192B1F border-radius 50% margin-left auto margin-right auto diff --git a/src/components/Calendar/CustomCalendar.styl b/src/components/Calendar/CustomCalendar.styl index 633fe5b..ac59fd0 100644 --- a/src/components/Calendar/CustomCalendar.styl +++ b/src/components/Calendar/CustomCalendar.styl @@ -73,7 +73,7 @@ span.fc-daygrid-day-number.current-date color #fff span.fc-daygrid-day-number.current-date:after - background-color #f67e35 + background-color #FB9E3A td.fc-timegrid-slot.fc-timegrid-slot-label.fc-scrollgrid-shrink, td.fc-timegrid-slot.fc-timegrid-slot-label.fc-timegrid-slot-minor diff --git a/src/components/Calendar/SettingsTab.tsx b/src/components/Calendar/SettingsTab.tsx index 08951c2..c445093 100644 --- a/src/components/Calendar/SettingsTab.tsx +++ b/src/components/Calendar/SettingsTab.tsx @@ -50,21 +50,26 @@ export function SettingsTab({ <> {/* Form group 1: Name field - first group, margin top 0 */} - setName(e.target.value)} - size="small" - sx={{ - "&.MuiFormControl-root": { - marginTop: 0, - marginBottom: 0, - }, - }} - /> + + {t("calendarPopover.settings.calendarName")} + + + setName(e.target.value)} + size="small" + sx={{ + "&.MuiFormControl-root": { + marginTop: 0, + marginBottom: 0, + }, + }} + /> + {/* Form group 2: Description */} diff --git a/src/components/Event/components/DateTimeSummary.tsx b/src/components/Event/components/DateTimeSummary.tsx index 88cff4e..91c1d11 100644 --- a/src/components/Event/components/DateTimeSummary.tsx +++ b/src/components/Event/components/DateTimeSummary.tsx @@ -80,11 +80,12 @@ export const DateTimeSummary: React.FC = ({ return `${toHHmm(startTimeStr)} - ${toHHmm(endTimeStr)}`; }; - // Format timezone: "(UTC+2) Paris" - const formatTimezone = (tz: string): string => { + // Format timezone: "(UTC+2) Paris". Use event date for offset (DST correctness). + const formatTimezone = (tz: string, dateStr?: string): string => { if (!tz) return ""; try { - const offset = getTimezoneOffset(tz, new Date()); + const dateForOffset = dateStr ? dayjs(dateStr).toDate() : new Date(); + const offset = getTimezoneOffset(tz, dateForOffset); const tzName = tz.replace(/_/g, " "); return `(${offset}) ${tzName}`; } catch (error) { @@ -127,7 +128,7 @@ export const DateTimeSummary: React.FC = ({ const dateText = formatDateText(); const timeText = formatTime(startTime, endTime); - const timezoneText = formatTimezone(timezone); + const timezoneText = formatTimezone(timezone, startDate); const repeatText = formatRepeat(repetition); // Don't render if no date diff --git a/src/components/Event/utils/eventUtils.tsx b/src/components/Event/utils/eventUtils.tsx index bcf0e5b..3c490e5 100644 --- a/src/components/Event/utils/eventUtils.tsx +++ b/src/components/Event/utils/eventUtils.tsx @@ -13,13 +13,6 @@ import { Avatar, Badge, Box, Typography } from "@linagora/twake-mui"; import CancelIcon from "@mui/icons-material/Cancel"; import CheckCircleIcon from "@mui/icons-material/CheckCircle"; -const EMAIL_DISPLAY_MAX_LENGTH = 50; - -function truncateDisplayText(text: string, maxLength: number): string { - if (text.length <= maxLength) return text; - return `${text.slice(0, maxLength)}...`; -} - export function renderAttendeeBadge( a: userAttendee, key: string, @@ -73,10 +66,7 @@ export function renderAttendeeBadge( - {truncateDisplayText( - a.cn || a.cal_address, - EMAIL_DISPLAY_MAX_LENGTH - )} + {a.cn || a.cal_address} {isOrganizer && ( diff --git a/src/locales/en.json b/src/locales/en.json index 85c8b6a..041356e 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -76,6 +76,9 @@ "addNew": "Add new calendar", "access": "Access", "import": "Import" + }, + "settings": { + "calendarName": "Calendar name" } }, "colorPicker": { diff --git a/src/locales/fr.json b/src/locales/fr.json index 1dfd600..7cde95b 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -78,6 +78,9 @@ "addNew": "Ajouter un nouveau calendrier", "access": "Accès", "import": "Importer" + }, + "settings": { + "calendarName": "Nom du calendrier" } }, "colorPicker": { diff --git a/src/locales/ru.json b/src/locales/ru.json index 0a7db5a..1eff762 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -78,6 +78,9 @@ "addNew": "Добавить новый календарь", "access": "Доступ", "import": "Импорт" + }, + "settings": { + "calendarName": "Название календаря" } }, "colorPicker": { diff --git a/src/locales/vi.json b/src/locales/vi.json index a5b1cf7..b717413 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -76,6 +76,9 @@ "addNew": "Thêm lịch mới", "access": "Quyền truy cập", "import": "Nhập" + }, + "settings": { + "calendarName": "Tên lịch" } }, "colorPicker": {