[fix] removed added calendars old naming convention (#567)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
This commit is contained in:
@@ -11,7 +11,8 @@ import {
|
||||
import { useState, useEffect } from "react";
|
||||
import { HexColorPicker } from "react-colorful";
|
||||
import { useI18n } from "twake-i18n";
|
||||
import { defaultColors, getAccessiblePair } from "./utils/calendarColorsUtils";
|
||||
import { getAccessiblePair } from "./utils/calendarColorsUtils";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
|
||||
export function ColorPicker({
|
||||
selectedColor,
|
||||
|
||||
@@ -14,7 +14,7 @@ import { ResponsiveDialog } from "../Dialog";
|
||||
import { AccessTab } from "./AccessTab";
|
||||
import { ImportTab } from "./ImportTab";
|
||||
import { SettingsTab } from "./SettingsTab";
|
||||
import { defaultColors } from "./utils/calendarColorsUtils";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
|
||||
function CalendarPopover({
|
||||
open,
|
||||
|
||||
@@ -1,17 +1,42 @@
|
||||
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
||||
import { Box, Typography } from "@linagora/twake-mui";
|
||||
import SquareRoundedIcon from "@mui/icons-material/SquareRounded";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
import { makeDisplayName } from "@/utils/makeDisplayName";
|
||||
import { OwnerCaption } from "./OwnerCaption";
|
||||
import { useAppSelector } from "@/app/hooks";
|
||||
|
||||
export function CalendarName({ calendar }: { calendar: Calendar }) {
|
||||
const userData = useAppSelector((state) => state.user.userData);
|
||||
const showCaption =
|
||||
calendar.name !== "#default" &&
|
||||
userData.openpaasId !== calendar.id.split("/")[0];
|
||||
|
||||
return (
|
||||
<Box style={{ display: "flex", flexDirection: "row", gap: 8 }}>
|
||||
<Box
|
||||
style={{
|
||||
display: "flex",
|
||||
flexDirection: "row",
|
||||
gap: 8,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<SquareRoundedIcon
|
||||
style={{
|
||||
color: calendar.color?.light ?? "#3788D8",
|
||||
color: calendar.color?.light ?? defaultColors[0].light,
|
||||
width: 24,
|
||||
height: 24,
|
||||
}}
|
||||
/>
|
||||
<Typography sx={{ wordBreak: "break-word" }}>{calendar.name}</Typography>
|
||||
<Box style={{ display: "flex", flexDirection: "column" }}>
|
||||
<Typography sx={{ wordBreak: "break-word" }}>
|
||||
{calendar.name}
|
||||
</Typography>
|
||||
<OwnerCaption
|
||||
showCaption={showCaption}
|
||||
ownerDisplayName={makeDisplayName(calendar) ?? ""}
|
||||
/>
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ import { PeopleSearch, User } from "../Attendees/PeopleSearch";
|
||||
import { ResponsiveDialog } from "../Dialog";
|
||||
import { stringAvatar } from "../Event/utils/eventUtils";
|
||||
import { ColorPicker } from "./CalendarColorPicker";
|
||||
import { defaultColors, getAccessiblePair } from "./utils/calendarColorsUtils";
|
||||
import { getAccessiblePair } from "./utils/calendarColorsUtils";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
|
||||
interface CalendarWithOwner {
|
||||
cal: CalendarData;
|
||||
|
||||
@@ -2,6 +2,7 @@ import { useAppDispatch, useAppSelector } from "@/app/hooks";
|
||||
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
||||
import { removeCalendarAsync } from "@/features/Calendars/services";
|
||||
import { extractEventBaseUuid } from "@/utils/extractEventBaseUuid";
|
||||
import { makeDisplayName } from "@/utils/makeDisplayName";
|
||||
import { renameDefault } from "@/utils/renameDefault";
|
||||
import { trimLongTextWithoutSpace } from "@/utils/textUtils";
|
||||
import {
|
||||
@@ -23,6 +24,7 @@ import { useI18n } from "twake-i18n";
|
||||
import CalendarPopover from "./CalendarModal";
|
||||
import CalendarSearch from "./CalendarSearch";
|
||||
import { DeleteCalendarDialog } from "./DeleteCalendarDialog";
|
||||
import { OwnerCaption } from "./OwnerCaption";
|
||||
|
||||
function CalendarAccordion({
|
||||
title,
|
||||
@@ -260,6 +262,20 @@ function CalendarSelector({
|
||||
() => trimLongTextWithoutSpace(calendars[id].name),
|
||||
[calendars, id]
|
||||
);
|
||||
|
||||
const ownerDisplayName = useMemo(
|
||||
() => makeDisplayName(calendars[id]),
|
||||
[calendars, id]
|
||||
);
|
||||
|
||||
const displayName = useMemo(
|
||||
() => renameDefault(trimmedName, ownerDisplayName ?? "", t, isPersonal),
|
||||
[trimmedName, ownerDisplayName, t, isPersonal]
|
||||
);
|
||||
|
||||
const showCaption =
|
||||
!isPersonal && trimmedName !== "#default" && ownerDisplayName != null;
|
||||
|
||||
return (
|
||||
<>
|
||||
<ListItem
|
||||
@@ -291,16 +307,30 @@ function CalendarSelector({
|
||||
size="small"
|
||||
checked={selectedCalendars.includes(id)}
|
||||
onChange={() => handleCalendarToggle(id)}
|
||||
inputProps={{ "aria-label": displayName }}
|
||||
/>
|
||||
<span
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
wordBreak: "break-word",
|
||||
padding: showCaption ? "6px" : undefined,
|
||||
}}
|
||||
>
|
||||
{renameDefault(trimmedName, calendars[id].owner, t, isPersonal)}
|
||||
</span>
|
||||
<span
|
||||
style={{
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
wordBreak: "break-word",
|
||||
}}
|
||||
>
|
||||
{displayName}
|
||||
</span>
|
||||
<OwnerCaption
|
||||
showCaption={showCaption}
|
||||
ownerDisplayName={ownerDisplayName ?? ""}
|
||||
/>
|
||||
</div>
|
||||
</label>
|
||||
<IconButton className="MoreBtn" onClick={handleClick}>
|
||||
<MoreHorizIcon />
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import { Typography } from "@linagora/twake-mui";
|
||||
|
||||
export function OwnerCaption({
|
||||
showCaption,
|
||||
ownerDisplayName,
|
||||
}: {
|
||||
showCaption: boolean;
|
||||
ownerDisplayName: string;
|
||||
}) {
|
||||
return (
|
||||
<Typography
|
||||
variant="caption"
|
||||
color="text.secondary"
|
||||
style={{
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
wordBreak: "break-word",
|
||||
}}
|
||||
>
|
||||
{showCaption && ownerDisplayName}
|
||||
</Typography>
|
||||
);
|
||||
}
|
||||
@@ -2,6 +2,7 @@ import { AppDispatch } from "@/app/store";
|
||||
import { updateCalColor } from "@/features/Calendars/CalendarSlice";
|
||||
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
||||
import { darken, getContrastRatio, lighten, Theme } from "@linagora/twake-mui";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
|
||||
export function updateDarkColor(
|
||||
calendars: Record<string, Calendar>,
|
||||
@@ -53,10 +54,3 @@ export function getAccessiblePair(baseColor: string, theme: Theme): string {
|
||||
|
||||
return theme.palette.getContrastText(baseColor);
|
||||
}
|
||||
|
||||
export const defaultColors = [
|
||||
{ light: "#D0ECDA", dark: "#329655" },
|
||||
{ light: "#FAE3CE", dark: "#E15300" },
|
||||
{ light: "#F5CFD0", dark: "#BE0103" },
|
||||
{ light: "#AFCBEF", dark: "#0654B1" },
|
||||
];
|
||||
|
||||
@@ -2,6 +2,8 @@ import { Calendar } from "@/features/Calendars/CalendarTypes";
|
||||
import { RepetitionObject } from "@/features/Events/EventsTypes";
|
||||
import { userAttendee } from "@/features/User/models/attendee";
|
||||
import iconCamera from "@/static/images/icon-camera.svg";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
import { makeDisplayName } from "@/utils/makeDisplayName";
|
||||
import {
|
||||
addVideoConferenceToDescription,
|
||||
generateMeetingLink,
|
||||
@@ -35,6 +37,7 @@ import React from "react";
|
||||
import { useI18n } from "twake-i18n";
|
||||
import AttendeeSelector from "../Attendees/AttendeeSearch";
|
||||
import { CalendarItemList } from "../Calendar/CalendarItemList";
|
||||
import { OwnerCaption } from "../Calendar/OwnerCaption";
|
||||
import { SnackbarAlert } from "../Loading/SnackBarAlert";
|
||||
import { TimezoneAutocomplete } from "../Timezone/TimezoneAutocomplete";
|
||||
import { AddDescButton } from "./AddDescButton";
|
||||
@@ -775,7 +778,7 @@ export default function EventFormFields({
|
||||
sx={{
|
||||
color:
|
||||
userPersonalCalendars.find((cal) => cal.id === calendarid)
|
||||
?.color?.light ?? "#3788D8",
|
||||
?.color?.light ?? defaultColors[0].light,
|
||||
width: 24,
|
||||
height: 24,
|
||||
}}
|
||||
@@ -783,8 +786,34 @@ export default function EventFormFields({
|
||||
}
|
||||
onClick={() => setHasClickedCalendarSection(true)}
|
||||
>
|
||||
{userPersonalCalendars.find((cal) => cal.id === calendarid)?.name ||
|
||||
t("event.form.calendar")}
|
||||
{userPersonalCalendars.find((cal) => cal.id === calendarid)
|
||||
?.name ? (
|
||||
<Box style={{ display: "flex", flexDirection: "column" }}>
|
||||
<Typography sx={{ wordBreak: "break-word" }}>
|
||||
{
|
||||
userPersonalCalendars.find((cal) => cal.id === calendarid)
|
||||
?.name
|
||||
}
|
||||
</Typography>
|
||||
<OwnerCaption
|
||||
showCaption={
|
||||
delegatedCalendars.find((cal) => cal.id === calendarid) !==
|
||||
undefined &&
|
||||
userPersonalCalendars.find((cal) => cal.id === calendarid)
|
||||
?.name !== "#default"
|
||||
}
|
||||
ownerDisplayName={
|
||||
makeDisplayName(
|
||||
userPersonalCalendars.find(
|
||||
(cal) => cal.id === calendarid
|
||||
) ?? ({} as Calendar)
|
||||
) ?? ""
|
||||
}
|
||||
/>
|
||||
</Box>
|
||||
) : (
|
||||
t("event.form.calendar")
|
||||
)}
|
||||
</SectionPreviewRow>
|
||||
) : (
|
||||
<FormControl fullWidth margin="dense" size="small">
|
||||
|
||||
@@ -69,15 +69,10 @@ export async function addSharedCalendar(
|
||||
body: JSON.stringify({
|
||||
id: calId,
|
||||
...cal.cal,
|
||||
"dav:name":
|
||||
cal.cal["dav:name"] === "#default"
|
||||
? (cal.owner?.displayName ?? "Unknown") + "'s calendar"
|
||||
: cal.cal["dav:name"],
|
||||
"calendarserver:source": {
|
||||
acl: cal.cal.acl,
|
||||
calendarHomeId: cal.cal.id,
|
||||
color: cal.cal["apple:color"],
|
||||
|
||||
description: cal.cal["caldav:description"],
|
||||
href: cal.cal._links.self.href,
|
||||
id: cal.cal.id,
|
||||
|
||||
@@ -8,7 +8,7 @@ import { createAsyncThunk } from "@reduxjs/toolkit";
|
||||
import { getCalendar } from "../CalendarApi";
|
||||
import { RejectedError } from "../types/RejectedError";
|
||||
import { extractCalendarEvents } from "../utils/extractCalendarEvents";
|
||||
import { defaultColors } from "@/components/Calendar/utils/calendarColorsUtils";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
import { type RootState } from "@/app/store";
|
||||
|
||||
export const getCalendarDetailAsync = createAsyncThunk<
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { RootState } from "@/app/store";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
import { OpenPaasUserData } from "@/features/User/type/OpenPaasUserData";
|
||||
import { getOpenPaasUser, getUserDetails } from "@/features/User/userAPI";
|
||||
import { formatReduxError } from "@/utils/errorUtils";
|
||||
@@ -75,10 +76,12 @@ export const getCalendarsListAsync = createAsyncThunk<
|
||||
emails: [],
|
||||
};
|
||||
|
||||
const color = {
|
||||
light: cal["apple:color"] ?? "#006BD8",
|
||||
dark: "#FFF",
|
||||
};
|
||||
const color = cal["apple:color"]
|
||||
? {
|
||||
light: cal["apple:color"],
|
||||
dark: "#FFF",
|
||||
}
|
||||
: defaultColors[0];
|
||||
fetchedCalendars[id] = {
|
||||
id,
|
||||
name: cal["dav:name"] ?? "",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { defaultColors } from "@/components/Calendar/utils/calendarColorsUtils";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
import { CalendarEvent } from "@/features/Events/EventsTypes";
|
||||
import { parseCalendarEvent } from "@/features/Events/eventUtils";
|
||||
import { CalDavItem } from "../api/types";
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { useAppDispatch, useAppSelector } from "@/app/hooks";
|
||||
import { AppDispatch } from "@/app/store";
|
||||
import { defaultColors } from "@/utils/defaultColors";
|
||||
import { browserDefaultTimeZone } from "@/utils/timezone";
|
||||
import {
|
||||
Box,
|
||||
@@ -239,7 +240,7 @@ function ResultItem({
|
||||
|
||||
<SquareRoundedIcon
|
||||
style={{
|
||||
color: calendarColor ?? "#3788D8",
|
||||
color: calendarColor ?? defaultColors[0].light,
|
||||
width: 24,
|
||||
height: 24,
|
||||
flexShrink: 0,
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
export const defaultColors = [
|
||||
{ light: "#D0ECDA", dark: "#329655" },
|
||||
{ light: "#FAE3CE", dark: "#E15300" },
|
||||
{ light: "#F5CFD0", dark: "#BE0103" },
|
||||
{ light: "#AFCBEF", dark: "#0654B1" },
|
||||
];
|
||||
@@ -4,6 +4,9 @@ export function renameDefault(
|
||||
t: (key: string, params?: object) => string,
|
||||
isOwnCalendar?: boolean
|
||||
) {
|
||||
if (!ownerName) {
|
||||
if (davName && davName !== "#default") return davName;
|
||||
}
|
||||
if (!davName) {
|
||||
return t("calendar.defaultCalendarName", { name: ownerName });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user