This commit is contained in:
@@ -2,6 +2,8 @@ import { useAppDispatch, useAppSelector } from "@/app/hooks";
|
|||||||
import { getCalendars } from "@/features/Calendars/CalendarApi";
|
import { getCalendars } from "@/features/Calendars/CalendarApi";
|
||||||
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
||||||
import { addSharedCalendarAsync } from "@/features/Calendars/services";
|
import { addSharedCalendarAsync } from "@/features/Calendars/services";
|
||||||
|
import { CalendarData } from "@/features/Calendars/types/CalendarData";
|
||||||
|
import { renameDefault } from "@/utils/renameDefault";
|
||||||
import {
|
import {
|
||||||
Avatar,
|
Avatar,
|
||||||
Box,
|
Box,
|
||||||
@@ -21,7 +23,7 @@ import { ColorPicker } from "./CalendarColorPicker";
|
|||||||
import { defaultColors, getAccessiblePair } from "./utils/calendarColorsUtils";
|
import { defaultColors, getAccessiblePair } from "./utils/calendarColorsUtils";
|
||||||
|
|
||||||
interface CalendarWithOwner {
|
interface CalendarWithOwner {
|
||||||
cal: Record<string, unknown>;
|
cal: CalendarData;
|
||||||
owner: User;
|
owner: User;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ function CalendarItem({
|
|||||||
onColorChange: (color: Record<string, string>) => void;
|
onColorChange: (color: Record<string, string>) => void;
|
||||||
}) {
|
}) {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
const { t } = useI18n();
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
key={cal.owner.email + cal.cal["dav:name"]}
|
key={cal.owner.email + cal.cal["dav:name"]}
|
||||||
@@ -61,9 +63,12 @@ function CalendarItem({
|
|||||||
/>
|
/>
|
||||||
<Box>
|
<Box>
|
||||||
<Typography variant="body1">
|
<Typography variant="body1">
|
||||||
{cal.cal["dav:name"] === "#default"
|
{renameDefault(
|
||||||
? cal.owner.displayName + "'s calendar"
|
cal.cal["dav:name"],
|
||||||
: cal.cal["dav:name"]}
|
cal.owner.displayName,
|
||||||
|
t,
|
||||||
|
false
|
||||||
|
)}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2" color="textSecondary">
|
<Typography variant="body2" color="textSecondary">
|
||||||
{cal.owner.email}
|
{cal.owner.email}
|
||||||
@@ -120,7 +125,7 @@ function SelectedCalendarsList({
|
|||||||
(existing: Calendar) =>
|
(existing: Calendar) =>
|
||||||
existing.id ===
|
existing.id ===
|
||||||
cal.cal?._links?.self?.href
|
cal.cal?._links?.self?.href
|
||||||
.replace("/calendars/", "")
|
?.replace("/calendars/", "")
|
||||||
.replace(".json", "")
|
.replace(".json", "")
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -218,7 +223,7 @@ export default function CalendarSearch({
|
|||||||
(existing: Calendar) =>
|
(existing: Calendar) =>
|
||||||
existing.id ===
|
existing.id ===
|
||||||
cal.cal?._links?.self?.href
|
cal.cal?._links?.self?.href
|
||||||
.replace("/calendars/", "")
|
?.replace("/calendars/", "")
|
||||||
.replace(".json", "")
|
.replace(".json", "")
|
||||||
);
|
);
|
||||||
if (!exists && cal.cal) {
|
if (!exists && cal.cal) {
|
||||||
@@ -237,15 +242,15 @@ export default function CalendarSearch({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
return cal.cal._links.self.href
|
return cal.cal._links.self?.href
|
||||||
.replace("/calendars/", "")
|
?.replace("/calendars/", "")
|
||||||
.replace(".json", "");
|
.replace(".json", "");
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
onClose(idList.filter(Boolean));
|
onClose(idList.filter(Boolean) as string[]);
|
||||||
setSelectedCalendars([]);
|
setSelectedCalendars([]);
|
||||||
setSelectedUsers([]);
|
setSelectedUsers([]);
|
||||||
}
|
}
|
||||||
@@ -286,20 +291,23 @@ export default function CalendarSearch({
|
|||||||
const cals = await Promise.all(
|
const cals = await Promise.all(
|
||||||
value.map(async (user: User) => {
|
value.map(async (user: User) => {
|
||||||
if (user?.openpaasId) {
|
if (user?.openpaasId) {
|
||||||
const cals = (await getCalendars(
|
const cals = await getCalendars(
|
||||||
user.openpaasId,
|
user.openpaasId,
|
||||||
"sharedPublic=true&"
|
"sharedPublic=true&"
|
||||||
)) as Record<string, unknown>;
|
);
|
||||||
return cals._embedded?.["dav:calendar"]
|
return cals._embedded?.["dav:calendar"]
|
||||||
? cals._embedded["dav:calendar"].map(
|
? cals._embedded["dav:calendar"].map((cal) => ({
|
||||||
(cal: Record<string, unknown>) => ({ cal, owner: user })
|
cal,
|
||||||
)
|
owner: user,
|
||||||
|
}))
|
||||||
: { cal: undefined, owner: user };
|
: { cal: undefined, owner: user };
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setSelectedCalendars(cals.flat().filter(Boolean));
|
setSelectedCalendars(
|
||||||
|
cals.flat().filter(Boolean) as CalendarWithOwner[]
|
||||||
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -310,14 +318,14 @@ export default function CalendarSearch({
|
|||||||
if (!cal.cal?._links?.self?.href) return;
|
if (!cal.cal?._links?.self?.href) return;
|
||||||
setSelectedCalendars((prev) =>
|
setSelectedCalendars((prev) =>
|
||||||
prev.filter(
|
prev.filter(
|
||||||
(c) => c.cal?._links?.self?.href !== cal.cal._links.self.href
|
(c) => c.cal?._links?.self?.href !== cal.cal._links.self?.href
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (
|
if (
|
||||||
!selectedCal.find(
|
!selectedCal.find(
|
||||||
(c) =>
|
(c) =>
|
||||||
cal.owner.email === c.owner.email &&
|
cal.owner.email === c.owner.email &&
|
||||||
c.cal?._links?.self?.href !== cal.cal._links.self.href
|
c.cal?._links?.self?.href !== cal.cal._links.self?.href
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
setSelectedUsers((prev) =>
|
setSelectedUsers((prev) =>
|
||||||
@@ -329,7 +337,7 @@ export default function CalendarSearch({
|
|||||||
setSelectedCalendars((prev) =>
|
setSelectedCalendars((prev) =>
|
||||||
prev.map((prevcal) =>
|
prev.map((prevcal) =>
|
||||||
prevcal.owner.email === cal.owner.email &&
|
prevcal.owner.email === cal.owner.email &&
|
||||||
prevcal.cal._links.self.href === cal.cal._links.self.href
|
prevcal.cal._links.self?.href === cal.cal._links.self?.href
|
||||||
? {
|
? {
|
||||||
...prevcal,
|
...prevcal,
|
||||||
cal: {
|
cal: {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useAppDispatch, useAppSelector } from "@/app/hooks";
|
|||||||
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
import { Calendar } from "@/features/Calendars/CalendarTypes";
|
||||||
import { removeCalendarAsync } from "@/features/Calendars/services";
|
import { removeCalendarAsync } from "@/features/Calendars/services";
|
||||||
import { extractEventBaseUuid } from "@/utils/extractEventBaseUuid";
|
import { extractEventBaseUuid } from "@/utils/extractEventBaseUuid";
|
||||||
|
import { renameDefault } from "@/utils/renameDefault";
|
||||||
import { trimLongTextWithoutSpace } from "@/utils/textUtils";
|
import { trimLongTextWithoutSpace } from "@/utils/textUtils";
|
||||||
import {
|
import {
|
||||||
Accordion,
|
Accordion,
|
||||||
@@ -298,7 +299,7 @@ function CalendarSelector({
|
|||||||
wordBreak: "break-word",
|
wordBreak: "break-word",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{trimmedName}
|
{renameDefault(trimmedName, calendars[id].owner, t, isPersonal)}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<IconButton className="MoreBtn" onClick={handleClick}>
|
<IconButton className="MoreBtn" onClick={handleClick}>
|
||||||
|
|||||||
@@ -36,12 +36,7 @@ export const addSharedCalendarAsync = createAsyncThunk<
|
|||||||
color: cal.color,
|
color: cal.color,
|
||||||
link: `/calendars/${userId}/${calId}.json`,
|
link: `/calendars/${userId}/${calId}.json`,
|
||||||
desc: cal.cal["caldav:description"] ?? "",
|
desc: cal.cal["caldav:description"] ?? "",
|
||||||
name:
|
name: cal.cal["dav:name"] ?? "",
|
||||||
ownerData.id !== userId && cal.cal["dav:name"] === "#default"
|
|
||||||
? `${ownerData.firstname ? `${ownerData.firstname} ` : ""}${
|
|
||||||
ownerData.lastname ?? ""
|
|
||||||
}` + "'s calendar"
|
|
||||||
: (cal.cal["dav:name"] ?? ""),
|
|
||||||
owner: `${ownerData.firstname ? `${ownerData.firstname} ` : ""}${
|
owner: `${ownerData.firstname ? `${ownerData.firstname} ` : ""}${
|
||||||
ownerData.lastname ?? ""
|
ownerData.lastname ?? ""
|
||||||
}`,
|
}`,
|
||||||
|
|||||||
@@ -65,11 +65,6 @@ export const getCalendarsListAsync = createAsyncThunk<
|
|||||||
lastname: "Unknown User",
|
lastname: "Unknown User",
|
||||||
emails: [],
|
emails: [],
|
||||||
};
|
};
|
||||||
const name =
|
|
||||||
ownerId !== user.id && cal["dav:name"] === "#default"
|
|
||||||
? `${ownerData.firstname ? `${ownerData.firstname} ` : ""}${ownerData.lastname}` +
|
|
||||||
"'s calendar"
|
|
||||||
: cal["dav:name"];
|
|
||||||
|
|
||||||
const color = {
|
const color = {
|
||||||
light: cal["apple:color"] ?? "#006BD8",
|
light: cal["apple:color"] ?? "#006BD8",
|
||||||
@@ -77,7 +72,7 @@ export const getCalendarsListAsync = createAsyncThunk<
|
|||||||
};
|
};
|
||||||
fetchedCalendars[id] = {
|
fetchedCalendars[id] = {
|
||||||
id,
|
id,
|
||||||
name,
|
name: cal["dav:name"] ?? "",
|
||||||
link,
|
link,
|
||||||
owner: `${ownerData.firstname ? `${ownerData.firstname} ` : ""}${ownerData.lastname}`,
|
owner: `${ownerData.firstname ? `${ownerData.firstname} ` : ""}${ownerData.lastname}`,
|
||||||
ownerEmails: ownerData.emails,
|
ownerEmails: ownerData.emails,
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
"locale": "en-gb",
|
"locale": "en-gb",
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"personal": "My calendars",
|
"personal": "My calendars",
|
||||||
|
"defaultPersonalCalendarName": "My calendar",
|
||||||
|
"defaultCalendarName": "%{name}'s calendar",
|
||||||
"delegated": "Delegated calendars",
|
"delegated": "Delegated calendars",
|
||||||
"other": "Other calendars",
|
"other": "Other calendars",
|
||||||
"caldav_access": "CalDAV access",
|
"caldav_access": "CalDAV access",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
"locale": "fr-fr",
|
"locale": "fr-fr",
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"personal": "Mes calendriers",
|
"personal": "Mes calendriers",
|
||||||
|
"defaultPersonalCalendarName": "Mon calendrier",
|
||||||
|
"defaultCalendarName": "Calendrier de %{name}",
|
||||||
"delegated": "Calendriers délégués",
|
"delegated": "Calendriers délégués",
|
||||||
"other": "Autres calendriers",
|
"other": "Autres calendriers",
|
||||||
"caldav_access": "Accès CalDAV",
|
"caldav_access": "Accès CalDAV",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
"locale": "ru-ru",
|
"locale": "ru-ru",
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"personal": "Личные",
|
"personal": "Личные",
|
||||||
|
"defaultPersonalCalendarName": "Мой календарь",
|
||||||
|
"defaultCalendarName": "Календарь %{name}",
|
||||||
"delegated": "Делегированные",
|
"delegated": "Делегированные",
|
||||||
"other": "Другие",
|
"other": "Другие",
|
||||||
"caldav_access": "Доступ CalDAV",
|
"caldav_access": "Доступ CalDAV",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
"locale": "vi",
|
"locale": "vi",
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"personal": "Lịch cá nhân",
|
"personal": "Lịch cá nhân",
|
||||||
|
"defaultPersonalCalendarName": "Lịch của tôi",
|
||||||
|
"defaultCalendarName": "Lịch của %{name}",
|
||||||
"delegated": "Lịch được ủy quyền",
|
"delegated": "Lịch được ủy quyền",
|
||||||
"other": "Lịch khác",
|
"other": "Lịch khác",
|
||||||
"caldav_access": "Truy cập CalDAV",
|
"caldav_access": "Truy cập CalDAV",
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
export function renameDefault(
|
||||||
|
davName: string | undefined,
|
||||||
|
ownerName: string,
|
||||||
|
t: (key: string, params?: object) => string,
|
||||||
|
isOwnCalendar?: boolean
|
||||||
|
) {
|
||||||
|
if (!davName) {
|
||||||
|
return t("calendar.defaultCalendarName", { name: ownerName });
|
||||||
|
}
|
||||||
|
if (davName !== "#default") {
|
||||||
|
return davName;
|
||||||
|
}
|
||||||
|
if (isOwnCalendar) {
|
||||||
|
return t("calendar.defaultPersonalCalendarName");
|
||||||
|
}
|
||||||
|
return t("calendar.defaultCalendarName", { name: ownerName });
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user