Co-authored-by: lethemanh <lethemanh@lethemanhs-MacBook-Pro.local>
This commit is contained in:
@@ -14,7 +14,7 @@ import {
|
|||||||
} from "@linagora/twake-mui";
|
} from "@linagora/twake-mui";
|
||||||
import ContentCopyIcon from "@mui/icons-material/ContentCopy";
|
import ContentCopyIcon from "@mui/icons-material/ContentCopy";
|
||||||
import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined";
|
import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
import { useI18n } from "twake-i18n";
|
import { useI18n } from "twake-i18n";
|
||||||
import { ErrorSnackbar } from "../Error/ErrorSnackbar";
|
import { ErrorSnackbar } from "../Error/ErrorSnackbar";
|
||||||
import { FieldWithLabel } from "../Event/components/FieldWithLabel";
|
import { FieldWithLabel } from "../Event/components/FieldWithLabel";
|
||||||
@@ -38,6 +38,11 @@ export function AccessTab({
|
|||||||
|
|
||||||
const calDAVLink = `${window.DAV_BASE_URL}${calendar.link.replace(".json", "")}`;
|
const calDAVLink = `${window.DAV_BASE_URL}${calendar.link.replace(".json", "")}`;
|
||||||
|
|
||||||
|
const isResource = useMemo(
|
||||||
|
() => calendar?.owner?.resource,
|
||||||
|
[calendar?.owner?.resource]
|
||||||
|
);
|
||||||
|
|
||||||
const [secretLink, setSecretLink] = useState("");
|
const [secretLink, setSecretLink] = useState("");
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
@@ -99,7 +104,7 @@ export function AccessTab({
|
|||||||
onInvitesLoaded={onInvitesLoaded}
|
onInvitesLoaded={onInvitesLoaded}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{!!window.DAV_BASE_URL && (
|
{!!window.DAV_BASE_URL && !isResource && (
|
||||||
<FieldWithLabel label={t("calendar.caldav_access")} isExpanded={false}>
|
<FieldWithLabel label={t("calendar.caldav_access")} isExpanded={false}>
|
||||||
<Box mt={2}>
|
<Box mt={2}>
|
||||||
<TextField
|
<TextField
|
||||||
|
|||||||
@@ -219,8 +219,9 @@ export default function CalendarSelection({
|
|||||||
}}
|
}}
|
||||||
showAddButton
|
showAddButton
|
||||||
handleToggle={handleCalendarToggle}
|
handleToggle={handleCalendarToggle}
|
||||||
setOpen={(_) => {
|
setOpen={(id: string) => {
|
||||||
// TO DO: Implement open resource selection
|
setAnchorElCal(document.body);
|
||||||
|
setSelectedCalId(id);
|
||||||
}}
|
}}
|
||||||
defaultExpanded
|
defaultExpanded
|
||||||
hideOwner={true}
|
hideOwner={true}
|
||||||
|
|||||||
@@ -7,13 +7,17 @@ import {
|
|||||||
ToggleButton,
|
ToggleButton,
|
||||||
ToggleButtonGroup,
|
ToggleButtonGroup,
|
||||||
Typography,
|
Typography,
|
||||||
|
useTheme,
|
||||||
} from "@linagora/twake-mui";
|
} from "@linagora/twake-mui";
|
||||||
import LockOutlineIcon from "@mui/icons-material/LockOutline";
|
import LockOutlineIcon from "@mui/icons-material/LockOutline";
|
||||||
|
import LayersOutlinedIcon from "@mui/icons-material/LayersOutlined";
|
||||||
|
import { alpha } from "@mui/material/styles";
|
||||||
import PublicIcon from "@mui/icons-material/Public";
|
import PublicIcon from "@mui/icons-material/Public";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
import { useI18n } from "twake-i18n";
|
import { useI18n } from "twake-i18n";
|
||||||
import { AddDescButton } from "../Event/AddDescButton";
|
import { AddDescButton } from "../Event/AddDescButton";
|
||||||
import { ColorPicker } from "./CalendarColorPicker";
|
import { ColorPicker } from "./CalendarColorPicker";
|
||||||
|
import { InfoRow } from "../Event/InfoRow";
|
||||||
|
|
||||||
export function SettingsTab({
|
export function SettingsTab({
|
||||||
name,
|
name,
|
||||||
@@ -41,6 +45,14 @@ export function SettingsTab({
|
|||||||
const userId =
|
const userId =
|
||||||
useAppSelector((state) => state.user.userData?.openpaasId) ?? "";
|
useAppSelector((state) => state.user.userData?.openpaasId) ?? "";
|
||||||
const isOwn = calendar ? extractEventBaseUuid(calendar.id) === userId : true;
|
const isOwn = calendar ? extractEventBaseUuid(calendar.id) === userId : true;
|
||||||
|
const theme = useTheme();
|
||||||
|
const infoIconColor = alpha(theme.palette.grey[900], 0.9);
|
||||||
|
const infoIconSx = { minWidth: "25px", marginRight: 2, color: infoIconColor };
|
||||||
|
|
||||||
|
const isResource = useMemo(
|
||||||
|
() => calendar?.owner?.resource,
|
||||||
|
[calendar?.owner?.resource]
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (description) setToggleDesc(true);
|
if (description) setToggleDesc(true);
|
||||||
@@ -50,38 +62,63 @@ export function SettingsTab({
|
|||||||
<>
|
<>
|
||||||
{/* Form group 1: Name field - first group, margin top 0 */}
|
{/* Form group 1: Name field - first group, margin top 0 */}
|
||||||
<Box mt={0}>
|
<Box mt={0}>
|
||||||
<Typography variant="h6" sx={{ margin: 0 }}>
|
<Typography
|
||||||
{t("calendarPopover.settings.calendarName")}
|
variant="h6"
|
||||||
|
sx={{ margin: 0, marginBottom: isResource ? "16px" : 0 }}
|
||||||
|
>
|
||||||
|
{t(
|
||||||
|
isResource
|
||||||
|
? "calendarPopover.settings.resourceName"
|
||||||
|
: "calendarPopover.settings.calendarName"
|
||||||
|
)}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Box sx={{ marginTop: "6px" }}>
|
<Box sx={{ marginTop: "6px" }}>
|
||||||
<TextField
|
{isResource ? (
|
||||||
fullWidth
|
<InfoRow
|
||||||
label=""
|
alignItems="flex-start"
|
||||||
inputProps={{ "aria-label": t("common.name") }}
|
icon={
|
||||||
placeholder={t("common.name")}
|
<Box sx={infoIconSx}>
|
||||||
value={name}
|
<LayersOutlinedIcon />
|
||||||
onChange={(e) => setName(e.target.value)}
|
</Box>
|
||||||
size="small"
|
}
|
||||||
sx={{
|
text={name}
|
||||||
"&.MuiFormControl-root": {
|
style={{
|
||||||
marginTop: 0,
|
fontSize: "16px",
|
||||||
marginBottom: 0,
|
fontFamily: "'Inter', sans-serif",
|
||||||
},
|
}}
|
||||||
}}
|
/>
|
||||||
/>
|
) : (
|
||||||
|
<TextField
|
||||||
|
fullWidth
|
||||||
|
label=""
|
||||||
|
inputProps={{ "aria-label": t("common.name") }}
|
||||||
|
placeholder={t("common.name")}
|
||||||
|
value={name}
|
||||||
|
onChange={(e) => setName(e.target.value)}
|
||||||
|
size="small"
|
||||||
|
sx={{
|
||||||
|
"&.MuiFormControl-root": {
|
||||||
|
marginTop: 0,
|
||||||
|
marginBottom: 0,
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
{/* Form group 2: Description */}
|
{/* Form group 2: Description */}
|
||||||
<Box mt={2}>
|
{!isResource && (
|
||||||
<AddDescButton
|
<Box mt={2}>
|
||||||
showDescription={toggleDesc}
|
<AddDescButton
|
||||||
setShowDescription={setToggleDesc}
|
showDescription={toggleDesc}
|
||||||
showMore={false}
|
setShowDescription={setToggleDesc}
|
||||||
description={description}
|
showMore={false}
|
||||||
setDescription={setDescription}
|
description={description}
|
||||||
/>
|
setDescription={setDescription}
|
||||||
</Box>
|
/>
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* Form group 3: Color */}
|
{/* Form group 3: Color */}
|
||||||
<Box mt={2}>
|
<Box mt={2}>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export const addCalendarResourceAsync = createAsyncThunk<
|
|||||||
|
|
||||||
if (resourceId) {
|
if (resourceId) {
|
||||||
try {
|
try {
|
||||||
const resource = await getResourceDetails(resourceId!);
|
const resource = await getResourceDetails(resourceId);
|
||||||
owner = {
|
owner = {
|
||||||
...(await getUserDetails(resource.creator)),
|
...(await getUserDetails(resource.creator)),
|
||||||
resource: true,
|
resource: true,
|
||||||
|
|||||||
@@ -666,6 +666,7 @@ function EventPopover({
|
|||||||
resetAllStateToDefault();
|
resetAllStateToDefault();
|
||||||
setStart("");
|
setStart("");
|
||||||
setEnd("");
|
setEnd("");
|
||||||
|
setSelectedResources([]);
|
||||||
shouldSyncFromRangeRef.current = true; // Reset for next time
|
shouldSyncFromRangeRef.current = true; // Reset for next time
|
||||||
isCalendarIdUserSelectedRef.current = false; // Reset so next open gets fresh default
|
isCalendarIdUserSelectedRef.current = false; // Reset so next open gets fresh default
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-1
@@ -83,7 +83,8 @@
|
|||||||
"import": "Import"
|
"import": "Import"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"calendarName": "Calendar name"
|
"calendarName": "Calendar name",
|
||||||
|
"resourceName": "Resource name"
|
||||||
},
|
},
|
||||||
"access": {
|
"access": {
|
||||||
"grantAccessRights": "Grant Access rights",
|
"grantAccessRights": "Grant Access rights",
|
||||||
|
|||||||
+2
-1
@@ -85,7 +85,8 @@
|
|||||||
"import": "Importer"
|
"import": "Importer"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"calendarName": "Nom du calendrier"
|
"calendarName": "Nom du calendrier",
|
||||||
|
"resourceName": "Nom de la ressource"
|
||||||
},
|
},
|
||||||
"access": {
|
"access": {
|
||||||
"grantAccessRights": "Accorder des droits d'accès",
|
"grantAccessRights": "Accorder des droits d'accès",
|
||||||
|
|||||||
+2
-1
@@ -85,7 +85,8 @@
|
|||||||
"import": "Импорт"
|
"import": "Импорт"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"calendarName": "Название календаря"
|
"calendarName": "Название календаря",
|
||||||
|
"resourceName": "Название ресурса"
|
||||||
},
|
},
|
||||||
"access": {
|
"access": {
|
||||||
"grantAccessRights": "Предоставить права доступа",
|
"grantAccessRights": "Предоставить права доступа",
|
||||||
|
|||||||
+2
-1
@@ -83,7 +83,8 @@
|
|||||||
"import": "Nhập"
|
"import": "Nhập"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"calendarName": "Tên lịch"
|
"calendarName": "Tên lịch",
|
||||||
|
"resourceName": "Tên tài nguyên"
|
||||||
},
|
},
|
||||||
"access": {
|
"access": {
|
||||||
"grantAccessRights": "Cấp quyền truy cập",
|
"grantAccessRights": "Cấp quyền truy cập",
|
||||||
|
|||||||
Reference in New Issue
Block a user