diff --git a/.github/workflows/trigger-action.yml b/.github/workflows/trigger-action.yml
index b3ce5c3e0c..4141db942a 100644
--- a/.github/workflows/trigger-action.yml
+++ b/.github/workflows/trigger-action.yml
@@ -6,6 +6,7 @@ on:
branches:
- 'hotfix/v*'
- 'release/v*'
+ - 'develop'
jobs:
dispatch:
diff --git a/packages/client/src/components/FilesPanels/index.js b/packages/client/src/components/FilesPanels/index.js
index 02e3509a66..fd65f0f5a1 100644
--- a/packages/client/src/components/FilesPanels/index.js
+++ b/packages/client/src/components/FilesPanels/index.js
@@ -101,7 +101,7 @@ const Panels = (props) => {
selectFileFormRoomDialogVisible,
selectFileFormRoomFilterParam,
setSelectFileFormRoomDialogVisible,
- createFromTemplateForm,
+ copyFromTemplateForm,
hotkeyPanelVisible,
invitePanelVisible,
convertPasswordDialogVisible,
@@ -301,7 +301,7 @@ const Panels = (props) => {
key="select-file-form-room-dialog"
onClose={onCloseFileFormRoomDialog}
openRoot={selectFileFormRoomOpenRoot}
- onSelectFile={createFromTemplateForm}
+ onSelectFile={(file) => copyFromTemplateForm(file, t)}
filterParam={selectFileFormRoomFilterParam}
descriptionText={descriptionTextFileFormRoomDialog}
/>
@@ -367,6 +367,7 @@ export default inject(
createEditRoomStore,
pluginStore,
filesStore,
+ filesActionsStore,
}) => {
const {
ownerPanelVisible,
@@ -397,7 +398,6 @@ export default inject(
selectFileFormRoomDialogVisible,
selectFileFormRoomFilterParam,
setSelectFileFormRoomDialogVisible,
- createFromTemplateForm,
invitePanelOptions,
inviteUsersWarningDialogVisible,
changeUserTypeDialogVisible,
@@ -417,6 +417,7 @@ export default inject(
} = dialogsStore;
const { preparationPortalDialogVisible } = backup;
+ const { copyFromTemplateForm } = filesActionsStore;
const { uploadPanelVisible } = uploadDataStore;
const { isVisible: versionHistoryPanelVisible } = versionHistoryStore;
@@ -455,7 +456,7 @@ export default inject(
selectFileFormRoomDialogVisible,
selectFileFormRoomFilterParam,
setSelectFileFormRoomDialogVisible,
- createFromTemplateForm,
+ copyFromTemplateForm,
hotkeyPanelVisible,
restoreAllPanelVisible,
invitePanelVisible: invitePanelOptions.visible,
diff --git a/packages/client/src/components/GlobalEvents/CreateEvent.js b/packages/client/src/components/GlobalEvents/CreateEvent.js
index 256687a5c2..f5c0a97fb9 100644
--- a/packages/client/src/components/GlobalEvents/CreateEvent.js
+++ b/packages/client/src/components/GlobalEvents/CreateEvent.js
@@ -71,6 +71,8 @@ const CreateEvent = ({
publicRoomKey,
actionEdit,
openOnNewPage,
+ openEditor,
+ createFile,
}) => {
const [headerTitle, setHeaderTitle] = React.useState(null);
const [startValue, setStartValue] = React.useState("");
@@ -112,7 +114,7 @@ const CreateEvent = ({
};
}, [extension, title, fromTemplate, withoutDialog]);
- const onSave = (e, value, open = true) => {
+ const onSave = async (e, value, open = true) => {
let item;
let createdFolderId;
@@ -157,46 +159,63 @@ const CreateEvent = ({
return setIsLoading(false);
});
} else {
- const searchParams = new URLSearchParams();
+ try {
+ if (openEditor) {
+ const searchParams = new URLSearchParams();
- searchParams.append("parentId", parentId);
- searchParams.append("fileTitle", `${newValue}.${extension}`);
- searchParams.append("open", open);
- searchParams.append("id", id);
+ searchParams.append("parentId", parentId);
+ searchParams.append("fileTitle", `${newValue}.${extension}`);
+ searchParams.append("open", open);
+ searchParams.append("id", id);
- if (preview) {
- searchParams.append("action", "view");
+ if (preview) {
+ searchParams.append("action", "view");
+ }
+
+ if (actionEdit) {
+ searchParams.append("action", "edit");
+ }
+
+ if (publicRoomKey) {
+ searchParams.append("share", publicRoomKey);
+ }
+
+ if (isMakeFormFromFile) {
+ searchParams.append("fromFile", isMakeFormFromFile);
+ searchParams.append("templateId", templateId);
+ } else if (fromTemplate) {
+ searchParams.append("fromTemplate", fromTemplate);
+ searchParams.append("formId", gallerySelected.id);
+ }
+
+ searchParams.append("hash", new Date().getTime());
+
+ const url = combineUrl(
+ window.location.origin,
+ window.ClientConfig?.proxy?.url,
+ config.homepage,
+ `/doceditor/create?${searchParams.toString()}`,
+ );
+
+ window.open(url, openOnNewPage ? "_blank" : "_self");
+
+ return;
+ }
+
+ return await createFile(
+ +parentId,
+ `${newValue}.${extension}`,
+ templateId,
+ gallerySelected?.id,
+ ).catch((error) => {
+ toastr.error(error);
+ });
+ } catch (error) {
+ toastr.error(error);
+ } finally {
+ setIsLoading(false);
+ onCloseAction();
}
-
- if (actionEdit) {
- searchParams.append("action", "edit");
- }
-
- if (publicRoomKey) {
- searchParams.append("share", publicRoomKey);
- }
-
- if (isMakeFormFromFile) {
- searchParams.append("fromFile", isMakeFormFromFile);
- searchParams.append("templateId", templateId);
- } else if (fromTemplate) {
- searchParams.append("fromTemplate", fromTemplate);
- searchParams.append("formId", gallerySelected.id);
- }
-
- searchParams.append("hash", new Date().getTime());
-
- const url = combineUrl(
- window.location.origin,
- window.ClientConfig?.proxy?.url,
- config.homepage,
- `/doceditor/create?${searchParams.toString()}`,
- );
-
- window.open(url, openOnNewPage ? "_blank" : "_self");
-
- setIsLoading(false);
- onCloseAction();
}
};
diff --git a/packages/client/src/components/GlobalEvents/index.js b/packages/client/src/components/GlobalEvents/index.js
index b0d3ba816f..85680e6abe 100644
--- a/packages/client/src/components/GlobalEvents/index.js
+++ b/packages/client/src/components/GlobalEvents/index.js
@@ -115,6 +115,7 @@ const GlobalEvents = ({ enablePlugins, eventListenerItemsList }) => {
withoutDialog: payload.withoutDialog ?? false,
preview: payload.preview ?? false,
actionEdit: payload.edit ?? false,
+ openEditor: payload.openEditor ?? true,
onClose: () => {
setCreateDialogProps({
visible: false,
@@ -128,6 +129,7 @@ const GlobalEvents = ({ enablePlugins, eventListenerItemsList }) => {
withoutDialog: false,
preview: false,
actionEdit: false,
+ openEditor: true,
});
},
});
diff --git a/packages/client/src/components/dialogs/ConflictResolveDialog/index.tsx b/packages/client/src/components/dialogs/ConflictResolveDialog/index.tsx
index 48202c5ea0..0e5b5b3ba2 100644
--- a/packages/client/src/components/dialogs/ConflictResolveDialog/index.tsx
+++ b/packages/client/src/components/dialogs/ConflictResolveDialog/index.tsx
@@ -63,7 +63,7 @@ const ConflictResolveDialog = (props: ConflictResolveDialogProps) => {
handleFilesUpload,
} = props;
- const { t, ready } = useTranslation(["ConflictResolveDialog", "Common"]);
+ const { t, ready } = useTranslation(["Common"]);
const {
destFolderId,
@@ -198,7 +198,7 @@ const ConflictResolveDialog = (props: ConflictResolveDialogProps) => {
items.length === 1 ? (
}}
@@ -206,7 +206,7 @@ const ConflictResolveDialog = (props: ConflictResolveDialogProps) => {
) : (
}}
@@ -216,20 +216,20 @@ const ConflictResolveDialog = (props: ConflictResolveDialogProps) => {
return (
);
};
diff --git a/packages/client/src/pages/Home/Hooks/useFiles.js b/packages/client/src/pages/Home/Hooks/useFiles.js
index 059b103c5c..188d89a747 100644
--- a/packages/client/src/pages/Home/Hooks/useFiles.js
+++ b/packages/client/src/pages/Home/Hooks/useFiles.js
@@ -34,7 +34,12 @@ import { getGroup } from "@docspace/shared/api/groups";
import { getUserById } from "@docspace/shared/api/people";
import { MEDIA_VIEW_URL } from "@docspace/shared/constants";
-import { Events, RoomSearchArea } from "@docspace/shared/enums";
+import {
+ Events,
+ FolderType,
+ RoomSearchArea,
+ RoomsType,
+} from "@docspace/shared/enums";
import { getObjectByLocation } from "@docspace/shared/utils/common";
import { useParams } from "react-router-dom";
@@ -72,6 +77,7 @@ const useFiles = ({
userId,
scrollToTop,
+ selectedFolderStore,
}) => {
const navigate = useNavigate();
const { id } = useParams();
@@ -298,11 +304,16 @@ const useFiles = ({
const event = new Event(Events.CREATE);
+ const isFormRoom =
+ selectedFolderStore.roomType === RoomsType.FormRoom ||
+ selectedFolderStore.type === FolderType.FormRoom;
+
const payload = {
extension: "pdf",
id: -1,
fromTemplate: true,
title: gallerySelected.attributes.name_form,
+ openEditor: !isFormRoom,
};
event.payload = payload;
diff --git a/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js b/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js
index d0e270602b..3aa44b2349 100644
--- a/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js
+++ b/packages/client/src/pages/Home/InfoPanel/Body/helpers/DetailsHelper.js
@@ -278,12 +278,16 @@ class DetailsHelper {
getAuthorDecoration = (byField = "createdBy") => {
const onClick = () => this.openUser(this.item[byField], this.navigate);
+ const isAnonim = this.item[byField]?.isAnonim;
const displayName = this.item[byField]?.displayName;
- const name = displayName ? decode(displayName) : "";
+
+ let name = displayName ? decode(displayName) : "";
+
+ if (isAnonim) name = this.t("Common:Anonymous");
//console.log("getAuthorDecoration", { name, displayName });
- return this.isVisitor || this.isCollaborator
+ return this.isVisitor || this.isCollaborator || isAnonim
? text(name)
: link(name, onClick);
};
diff --git a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlock.js b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlock.js
index bdcf07bada..b60bedfced 100644
--- a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlock.js
+++ b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlock.js
@@ -83,7 +83,11 @@ const HistoryBlock = ({
/>
- {decode(initiator.displayName)}
+
+ {initiator?.isAnonim
+ ? t("Common:Anonymous")
+ : decode(initiator.displayName)}
+
{initiator.isOwner && (
{t("Common:Owner").toLowerCase()}
diff --git a/packages/client/src/pages/Home/Section/Header/index.js b/packages/client/src/pages/Home/Section/Header/index.js
index 924a69e3e3..f833fd8c15 100644
--- a/packages/client/src/pages/Home/Section/Header/index.js
+++ b/packages/client/src/pages/Home/Section/Header/index.js
@@ -1225,14 +1225,15 @@ export default inject(
const sharedItem = navigationPath.find((r) => r.shared);
- const showNavigationButton = isLoading
- ? false
- : (!isPublicRoom &&
- !isArchive &&
- canCopyPublicLink &&
- (isPublicRoomType || isCustomRoomType || isFormRoomType) &&
- shared) ||
- (sharedItem && sharedItem.canCopyPublicLink);
+ const showNavigationButton =
+ isLoading || !security?.CopyLink
+ ? false
+ : (!isPublicRoom &&
+ !isArchive &&
+ canCopyPublicLink &&
+ (isPublicRoomType || isCustomRoomType || isFormRoomType) &&
+ shared) ||
+ (sharedItem && sharedItem.canCopyPublicLink);
return {
isGracePeriod,
diff --git a/packages/client/src/pages/Home/index.js b/packages/client/src/pages/Home/index.js
index 5e916b582c..ffea1f5615 100644
--- a/packages/client/src/pages/Home/index.js
+++ b/packages/client/src/pages/Home/index.js
@@ -201,6 +201,7 @@ const PureHome = (props) => {
userId,
scrollToTop,
+ selectedFolderStore,
});
const { showUploadPanel } = useOperations({
diff --git a/packages/client/src/pages/PortalSettings/categories/integration/LDAP/sub-components/SyncContainer.js b/packages/client/src/pages/PortalSettings/categories/integration/LDAP/sub-components/SyncContainer.js
index e988decb18..2140600502 100644
--- a/packages/client/src/pages/PortalSettings/categories/integration/LDAP/sub-components/SyncContainer.js
+++ b/packages/client/src/pages/PortalSettings/categories/integration/LDAP/sub-components/SyncContainer.js
@@ -31,7 +31,7 @@ import { useTranslation } from "react-i18next";
import { Box } from "@docspace/shared/components/box";
import { Text } from "@docspace/shared/components/text";
import { Button, ButtonSize } from "@docspace/shared/components/button";
-import { Cron } from "@docspace/shared/components/cron";
+import { Cron, getNextSynchronization } from "@docspace/shared/components/cron";
import { toastr } from "@docspace/shared/components/toast";
import ProgressContainer from "./ProgressContainer";
@@ -50,7 +50,6 @@ const SyncContainer = ({
onChangeCron,
cron,
serverCron,
- nextSyncDate,
theme,
isLdapEnabledOnServer,
@@ -87,6 +86,10 @@ const SyncContainer = ({
const buttonSize = isDesktop() ? ButtonSize.small : ButtonSize.normal;
+ const nextSyncDate = React.useMemo(() => {
+ if (cron) return getNextSynchronization(cron);
+ }, [cron]);
+
const renderBody = () => (
{!isMobileView && (
@@ -144,7 +147,7 @@ const SyncContainer = ({
/>
- {`${t("LdapNextSync")}: ${nextSyncDate.toFormat("DDDD tt")} UTC`}
+ {`${t("LdapNextSync")}: ${nextSyncDate?.toFormat("DDDD tt")} UTC`}