Web: Client/Shared: Added getting information about watermarks.

This commit is contained in:
Tatiana Lopaeva 2024-05-06 13:42:09 +03:00
parent 8bac9a7e0b
commit be153f7d2c
8 changed files with 136 additions and 60 deletions

View File

@ -30,7 +30,7 @@ import { useTranslation } from "react-i18next";
import { EditRoomDialog } from "../dialogs";
import { Encoder } from "@docspace/shared/utils/encoder";
import api from "@docspace/shared/api";
import { getRoomInfo } from "@docspace/shared/api/rooms";
import { getRoomInfo, getWatermarkSettings } from "@docspace/shared/api/rooms";
import { toastr } from "@docspace/shared/components/toast";
const EditRoomEvent = ({
@ -75,12 +75,15 @@ const EditRoomEvent = ({
defaultRoomsQuota,
isDefaultRoomsQuotaSet,
setWatermarksSettings,
}) => {
const { t } = useTranslation(["CreateEditRoomDialog", "Common", "Files"]);
const [fetchedTags, setFetchedTags] = useState([]);
const [fetchedImage, setFetchedImage] = useState(null);
const [isLoading, setIsLoading] = useState(false);
const [isInitLoading, setIsInitLoading] = useState(false);
const startTags = Object.values(item.tags);
const startObjTags = startTags.map((tag, i) => ({ id: i, name: tag }));
@ -268,24 +271,27 @@ const EditRoomEvent = ({
setFetchedImage(file);
}, []);
useEffect(() => {
const logo = item?.logo?.large ? item.logo.large : "";
if (logo) {
fetchLogoAction(logo);
}
}, []);
const fetchTagsAction = useCallback(async () => {
const tags = await fetchTags();
setFetchedTags(tags);
}, []);
useEffect(() => {
fetchTagsAction();
}, [fetchTagsAction]);
useEffect(() => {
setCreateRoomDialogVisible(true);
setIsInitLoading(true);
const logo = item?.logo?.large ? item.logo.large : "";
const requests = [fetchTags(), getWatermarkSettings(item.id)];
if (logo) requests.push(fetchLogoAction);
const fetchInfo = async () => {
const [tags, watermarks] = await Promise.all(requests);
setFetchedTags(tags);
setWatermarksSettings(watermarks);
setIsInitLoading(false);
};
fetchInfo();
return () => setCreateRoomDialogVisible(false);
}, []);
@ -299,6 +305,7 @@ const EditRoomEvent = ({
fetchedTags={fetchedTags}
fetchedImage={fetchedImage}
isLoading={isLoading}
isInitLoading={isInitLoading}
/>
);
};
@ -314,6 +321,7 @@ export default inject(
filesSettingsStore,
infoPanelStore,
currentQuotaStore,
createEditRoomStore,
}) => {
const {
editRoom,
@ -345,6 +353,7 @@ export default inject(
const { updateInfoPanelSelection } = infoPanelStore;
const { defaultRoomsQuota, isDefaultRoomsQuotaSet } = currentQuotaStore;
const { setWatermarksSettings } = createEditRoomStore;
return {
defaultRoomsQuota,
@ -382,6 +391,7 @@ export default inject(
updateInfoPanelSelection,
changeRoomOwner,
setWatermarksSettings,
};
},
)(observer(EditRoomEvent));

View File

@ -42,6 +42,7 @@ const EditRoomDialog = ({
fetchedRoomParams,
fetchedTags,
fetchedImage,
isInitLoading,
}) => {
const [isScrollLocked, setIsScrollLocked] = useState(false);
const [isValidTitle, setIsValidTitle] = useState(true);
@ -131,6 +132,7 @@ const EditRoomDialog = ({
visible={visible}
onClose={onCloseAction}
isScrollLocked={isScrollLocked}
isLoading={isInitLoading}
withFooterBorder
>
<ModalDialog.Header>

View File

@ -222,6 +222,7 @@ const SetRoomParams = ({
t={t}
roomParams={roomParams}
setRoomParams={setRoomParams}
isEdit={isEdit}
/>
)}

View File

@ -1,8 +1,11 @@
import { useState } from "react";
import { Trans } from "react-i18next";
import styled from "styled-components";
import { inject, observer } from "mobx-react";
import { Text } from "@docspace/shared/components/text";
import { ToggleButton } from "@docspace/shared/components/toggle-button";
import FileLifetime from "./FileLifetime";
import Watermarks from "../sub-components/Watermarks";
@ -68,12 +71,18 @@ const Block = ({
);
};
const VirtualDataRoomBlock = ({ t, roomParams, setRoomParams }) => {
const VirtualDataRoomBlock = ({
t,
roomParams,
setRoomParams,
isEdit,
isWatermarks,
}) => {
const role = t("Translations:RoleViewer");
const [fileLifetimeChecked, setFileLifetimeChecked] = useState(false);
const [copyAndDownloadChecked, setCopyAndDownloadChecked] = useState(false);
const [watermarksChecked, setWatermarksChecked] = useState(false);
const [watermarksChecked, setWatermarksChecked] = useState(isWatermarks);
const onChangeAutomaticIndexing = () => {
setRoomParams({ ...roomParams, indexing: !roomParams.indexing });
@ -128,10 +137,16 @@ const VirtualDataRoomBlock = ({ t, roomParams, setRoomParams }) => {
isDisabled={false}
isChecked={watermarksChecked}
>
<Watermarks setRoomParams={setRoomParams} />
<Watermarks setRoomParams={setRoomParams} isEdit={isEdit} />
</Block>
</StyledVirtualDataRoomBlock>
);
};
export default VirtualDataRoomBlock;
export default inject(({ createEditRoomStore }) => {
const { watermarksSettings } = createEditRoomStore;
return {
isWatermarks: watermarksSettings?.enabled,
};
})(observer(VirtualDataRoomBlock));

View File

@ -26,13 +26,15 @@
import { useState, useRef } from "react";
import { useTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { TabsContainer } from "@docspace/shared/components/tabs-container";
import { TextInput } from "@docspace/shared/components/text-input";
import { Text } from "@docspace/shared/components/text";
import { ComboBox } from "@docspace/shared/components/combobox";
import { WatermarkAdditions } from "@docspace/shared/enums";
import { StyledWatermark } from "./StyledComponent";
import { WatermarkAdditions } from "@docspace/shared/enums";
const getInitialState = (initialTab) => {
const state = {
@ -51,7 +53,7 @@ const getInitialState = (initialTab) => {
};
const ViewerInfoWatermark = ({
setParams,
setWatermarksSettings,
initialPosition,
dataPosition,
dataTabs,
@ -79,20 +81,20 @@ const ViewerInfoWatermark = ({
}
}
setParams({ additions: flagsCount });
setWatermarksSettings({ additions: flagsCount });
};
const onPositionChange = (item) => {
setSelectedPosition(item);
setParams({ rotate: item.key });
setWatermarksSettings({ rotate: item.key });
};
const onTextChange = (e) => {
const { value } = e.target;
setTextValue(value);
setParams({ text: value });
setWatermarksSettings({ text: value });
};
return (
@ -132,4 +134,10 @@ const ViewerInfoWatermark = ({
</StyledWatermark>
);
};
export default ViewerInfoWatermark;
export default inject(({ createEditRoomStore }) => {
const { setWatermarksSettings } = createEditRoomStore;
return {
setWatermarksSettings,
};
})(observer(ViewerInfoWatermark));

View File

@ -24,8 +24,9 @@
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
import { useState, useEffect } from "react";
import { useState, useEffect, useRef } from "react";
import { useTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { RadioButtonGroup } from "@docspace/shared/components/radio-button-group";
@ -47,12 +48,12 @@ const options = (t) => [
},
];
const positionOptions = (t) => [
const rotateOptions = (t) => [
{ key: -45, label: t("Diagonal") },
{ key: 0, label: t("Horizontal") },
];
const elementsOptions = (t) => [
const tabsOptions = (t) => [
{
key: "UserName",
title: t("UserName"),
@ -79,29 +80,49 @@ const elementsOptions = (t) => [
index: 4,
},
];
const Watermarks = ({ setRoomParams }) => {
const getInitialTabs = (additions, t) => {
const dataTabs = tabsOptions(t);
if (!additions) return [dataTabs[0]];
return dataTabs.filter((item) => additions & WatermarkAdditions[item.key]);
};
const getInitialRotate = (rotate, t) => {
const dataRotate = rotateOptions(t);
if (!rotate) return dataRotate[0];
return dataRotate.filter((item) => item.key === rotate);
};
const Watermarks = ({ setWatermarksSettings, watermarksSettings, isEdit }) => {
const { t } = useTranslation(["CreateEditRoomDialog", "Common"]);
const [type, setType] = useState(viewerInfoWatermark);
const dataPosition = positionOptions(t);
const initialPosition = dataPosition[0];
const initialInfo = useRef(null);
const dataTabs = elementsOptions(t);
const initialTab = [dataTabs[0]];
if (initialInfo.current === null) {
initialInfo.current = {
dataRotate: rotateOptions(t),
dataTabs: tabsOptions(t),
initialRotate: getInitialRotate(watermarksSettings?.rotate, t),
initialTabs: getInitialTabs(watermarksSettings?.additions, t),
};
}
const initialInfoRef = initialInfo.current;
useEffect(() => {
let additions = 0;
initialTab.map((item) => (additions += WatermarkAdditions[item.key]));
setRoomParams((prevState) => ({
...prevState,
watermarks: {
if (!isEdit) {
setWatermarksSettings({
enabled: true,
rotate: initialPosition.key,
rotate: initialInfoRef.initialRotate.key,
text: "",
additions,
},
}));
additions: WatermarkAdditions.UserEmail,
});
}
}, []);
const onSelectType = (e) => {
@ -110,14 +131,10 @@ const Watermarks = ({ setRoomParams }) => {
setType(value);
};
const setParams = (info) => {
setRoomParams((prevState) => ({
...prevState,
watermarks: { ...prevState.watermarks, ...info },
}));
};
const typeOptions = options(t);
console.log("============Watermarks render", watermarksSettings);
return (
<StyledBody>
<RadioButtonGroup
@ -132,15 +149,20 @@ const Watermarks = ({ setRoomParams }) => {
{type === viewerInfoWatermark && (
<ViewerInfoWatermark
setParams={setParams}
initialPosition={initialPosition}
dataPosition={dataPosition}
dataTabs={dataTabs}
initialTab={initialTab}
initialPosition={initialInfoRef.initialRotate}
dataPosition={initialInfoRef.dataRotate}
dataTabs={initialInfoRef.dataTabs}
initialTab={initialInfoRef.initialTabs}
/>
)}
</StyledBody>
);
};
export default Watermarks;
export default inject(({ createEditRoomStore }) => {
const { setWatermarksSettings, watermarksSettings } = createEditRoomStore;
return {
setWatermarksSettings,
watermarksSettings,
};
})(observer(Watermarks));

View File

@ -47,6 +47,7 @@ class CreateEditRoomStore {
settingsStore = null;
infoPanelStore = null;
currentQuotaStore = null;
watermarksSettings = null;
constructor(
filesStore,
@ -92,6 +93,18 @@ class CreateEditRoomStore {
this.onClose = onClose;
};
setWatermarksSettings = (watermarksSettings) => {
if (!watermarksSettings) {
this.watermarksSettings = null;
return;
}
this.watermarksSettings = {
...this.watermarksSettings,
...watermarksSettings,
};
};
onCreateRoom = async (withConfirm = false, t) => {
const roomParams = this.roomParams;
@ -158,9 +171,7 @@ class CreateEditRoomStore {
const actions = [];
const watermarks = roomParams.watermarks;
if (watermarks) {
if (this.watermarksSettings) {
await setRoomWatermarks(room.id, watermarks);
}
// delete thirdparty account if not needed

View File

@ -499,3 +499,10 @@ export function setRoomWatermarks(
return request(options);
}
export function getWatermarkSettings(roomId: number | string) {
return request({
method: "get",
url: `files/rooms/${roomId}/watermark`,
});
}