From bda0c950a16823b2a3988a6c7f6e05b0465b5234 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Tue, 18 Jun 2024 14:20:27 +0300 Subject: [PATCH] Web: VDR-lifetime: added changeRoomLifetime --- .../components/GlobalEvents/EditRoomEvent.js | 13 ++++++++++++- .../CreateEditRoomDialog/EditRoomDialog.js | 4 ++-- .../sub-components/FileLifetime.js | 13 +++++++++++-- .../sub-components/VirtualDataRoomBlock.js | 1 + packages/client/src/store/FilesActionsStore.js | 5 +++++ packages/shared/api/rooms/index.ts | 17 ++++++++++++++++- 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/packages/client/src/components/GlobalEvents/EditRoomEvent.js b/packages/client/src/components/GlobalEvents/EditRoomEvent.js index 0c886e5ec0..afb26a4fa7 100644 --- a/packages/client/src/components/GlobalEvents/EditRoomEvent.js +++ b/packages/client/src/components/GlobalEvents/EditRoomEvent.js @@ -27,6 +27,7 @@ import React, { useState, useEffect, useCallback } from "react"; import { inject, observer } from "mobx-react"; import { useTranslation } from "react-i18next"; +import isEqual from "lodash/isEqual"; import { EditRoomDialog } from "../dialogs"; import { Encoder } from "@docspace/shared/utils/encoder"; import api from "@docspace/shared/api"; @@ -75,6 +76,7 @@ const EditRoomEvent = ({ defaultRoomsQuota, isDefaultRoomsQuotaSet, + changeRoomLifetime, }) => { const { t } = useTranslation(["CreateEditRoomDialog", "Common", "Files"]); @@ -141,6 +143,7 @@ const EditRoomEvent = ({ const isTitleChanged = roomParams?.title !== item.title; const isQuotaChanged = quotaLimit !== item.quotaLimit; const isOwnerChanged = roomParams?.roomOwner?.id !== item.createdBy.id; + const lifetimeChanged = !isEqual(roomParams.lifetime, item.lifetime); const tags = roomParams.tags.map((tag) => tag.name); const newTags = roomParams.tags.filter((t) => t.isNew).map((t) => t.name); @@ -178,6 +181,12 @@ const EditRoomEvent = ({ displayName: roomParams.roomOwner.label, }; } + + if (lifetimeChanged) { + actions.push(changeRoomLifetime(room.id, roomParams.lifetime)); + room.lifetime = roomParams.lifetime; + } + if (tags.length) { actions.push(addTagsToRoom(room.id, tags)); room.tags = tags; @@ -339,7 +348,8 @@ export default inject( removeLogoPaths, updateLogoPathsCacheBreaker, } = selectedFolderStore; - const { updateCurrentFolder, changeRoomOwner } = filesActionsStore; + const { updateCurrentFolder, changeRoomOwner, changeRoomLifetime } = + filesActionsStore; const { getThirdPartyIcon } = filesSettingsStore.thirdPartyStore; const { setCreateRoomDialogVisible } = dialogsStore; const { withPaging } = settingsStore; @@ -383,6 +393,7 @@ export default inject( updateInfoPanelSelection, changeRoomOwner, + changeRoomLifetime, }; }, )(observer(EditRoomEvent)); diff --git a/packages/client/src/components/dialogs/CreateEditRoomDialog/EditRoomDialog.js b/packages/client/src/components/dialogs/CreateEditRoomDialog/EditRoomDialog.js index f36727d42a..6807d28ba9 100644 --- a/packages/client/src/components/dialogs/CreateEditRoomDialog/EditRoomDialog.js +++ b/packages/client/src/components/dialogs/CreateEditRoomDialog/EditRoomDialog.js @@ -25,7 +25,7 @@ // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode import React, { useState, useEffect, useRef, useCallback } from "react"; - +import isEqual from "lodash/isEqual"; import TagHandler from "./handlers/TagHandler"; import SetRoomParams from "./sub-components/SetRoomParams"; import DialogHeader from "./sub-components/DialogHeader"; @@ -77,7 +77,7 @@ const EditRoomDialog = ({ prevParams.icon.uploadedFile === currentParams.icon.uploadedFile) && prevParams.quota === currentParams.quota && prevParams.indexing === currentParams.indexing && - prevParams.lifetime === currentParams.lifetime + isEqual(prevParams.lifetime, currentParams.lifetime) ); }; diff --git a/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/FileLifetime.js b/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/FileLifetime.js index e24814e271..8f045b7f37 100644 --- a/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/FileLifetime.js +++ b/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/FileLifetime.js @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import styled from "styled-components"; import { Text } from "@docspace/shared/components/text"; import { TextInput } from "@docspace/shared/components/text-input"; @@ -46,7 +46,7 @@ const StyledFileLifetime = styled.div` const FileLifetime = ({ t, roomParams, setRoomParams }) => { const lifetime = roomParams.lifetime ?? { - value: "12", + value: 12, deletePermanently: false, period: 0, }; @@ -94,6 +94,15 @@ const FileLifetime = ({ t, roomParams, setRoomParams }) => { const [selectedDate, setSelectedDate] = useState(selectedDateOption); const [selectedDelete, setSelectedDelete] = useState(selectedDeleteOptions); + useEffect(() => { + if (!roomParams.lifetime) { + setRoomParams({ + ...roomParams, + lifetime, + }); + } + }, [roomParams.lifetime]); + const onChange = (e) => { // /^(?:[1-9][0-9]*|0)$/ if (e.target.value && !/^(?:[1-9][0-9]*)$/.test(e.target.value)) return; diff --git a/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/VirtualDataRoomBlock.js b/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/VirtualDataRoomBlock.js index 0d24315182..5e5b850fde 100644 --- a/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/VirtualDataRoomBlock.js +++ b/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/VirtualDataRoomBlock.js @@ -78,6 +78,7 @@ const VirtualDataRoomBlock = ({ t, roomParams, setRoomParams }) => { }; const onChangeFileLifetime = () => { + if (fileLifetimeChecked) setRoomParams({ ...roomParams, lifetime: null }); setFileLifetimeChecked(!fileLifetimeChecked); }; diff --git a/packages/client/src/store/FilesActionsStore.js b/packages/client/src/store/FilesActionsStore.js index 0025e1bb7f..52ab80b4f2 100644 --- a/packages/client/src/store/FilesActionsStore.js +++ b/packages/client/src/store/FilesActionsStore.js @@ -87,6 +87,7 @@ import { } from "SRC_DIR/helpers/utils"; import { MEDIA_VIEW_URL } from "@docspace/shared/constants"; import { openingNewTab } from "@docspace/shared/utils/openingNewTab"; +import { changeRoomLifetime } from "@docspace/shared/api/rooms"; class FilesActionStore { settingsStore; @@ -2713,6 +2714,10 @@ class FilesActionStore { await deleteFilesFromRecent(fileIds); await refreshFiles(); }; + + changeRoomLifetime = (roomId, lifetime) => { + return changeRoomLifetime(roomId, lifetime); + }; } export default FilesActionStore; diff --git a/packages/shared/api/rooms/index.ts b/packages/shared/api/rooms/index.ts index f13f4356fc..3db30c3377 100644 --- a/packages/shared/api/rooms/index.ts +++ b/packages/shared/api/rooms/index.ts @@ -35,7 +35,7 @@ import { toUrlParams, } from "../../utils/common"; import RoomsFilter from "./filter"; -import { TGetRooms } from "./types"; +import { TGetRooms, TRoomLifetime } from "./types"; export async function getRooms(filter: RoomsFilter, signal?: AbortSignal) { let params; @@ -477,3 +477,18 @@ export function resetRoomQuota(roomIds) { return request(options); } + +export function changeRoomLifetime( + roomId: string | number, + lifetime: TRoomLifetime, +) { + const options = { + method: "put", + url: `files/rooms/${roomId}/lifetime`, + data: { + ...lifetime, + }, + }; + + return request(options); +}