Skip to content

Commit a6e7034

Browse files
authored
feat: add editor readonly mode (#5010)
1 parent 3ddffc0 commit a6e7034

File tree

39 files changed

+364
-222
lines changed

39 files changed

+364
-222
lines changed

extensions/_wip/idp/MyIdpConfig.ts

Lines changed: 0 additions & 65 deletions
This file was deleted.

extensions/_wip/idp/MyIdpExtension.tsx

Lines changed: 0 additions & 10 deletions
This file was deleted.

extensions/_wip/myOnEntryBeforeCreate.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

packages/admin-ui/src/theme.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,12 @@
346346
@apply pr-xxl pl-xxl mx-auto w-full;
347347
}
348348

349+
@utility fill-grid {
350+
background-image: radial-gradient(var(--color-neutral-strong) 1px, transparent 0px);
351+
background-size: 15px 15px;
352+
@apply bg-neutral-light;
353+
}
354+
349355
@layer base {
350356
a {
351357
@apply text-accent-primary hover:underline focus-visible:outline-none focus-visible:ring-lg focus-visible:ring-primary-dimmed rounded-xs;

packages/app-website-builder-workflows/src/Components/PageEditor/PageEditorConfig.tsx

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,15 @@
11
import React from "react";
22
import { PageEditorConfig as BaseConfig } from "@webiny/app-website-builder";
3-
import { PageEditorAutoSave } from "./PageEditorAutoSave.js";
4-
import { PageEditorSettings } from "./PageEditorSettings.js";
53
import { PageFormWorkflowStateTooltip } from "./PageFormWorkflowStateTooltip.js";
64
import { PageFormWorkflowStatePublishButton } from "./PageFormWorkflowStatePublishButton.js";
7-
import { PageEditorLayout } from "./PageEditorLayout.js";
8-
import { PageEditorToolbar } from "./PageEditorToolbar.js";
9-
import { PageEditorSidebar } from "./PageEditorSidebar.js";
5+
import { PageEditorTopBar } from "./PageEditorTopBar.js";
106

117
export const PageEditorConfig = () => {
128
return (
139
<>
14-
<PageEditorLayout />
10+
{/* Toggle editor "readonly" mode, and add workflow alerts */}
11+
<PageEditorTopBar />
1512
<BaseConfig>
16-
{/* Should remove autosave feature */}
17-
<PageEditorAutoSave />
18-
{/* Should remove settings button */}
19-
<PageEditorSettings />
20-
{/* Should remove left bar in the editor */}
21-
<PageEditorToolbar />
22-
{/* Should remove right bar in the editor */}
23-
<PageEditorSidebar />
2413
{/* Should add a button with list of steps and their states + comment button in each row */}
2514
<PageFormWorkflowStateTooltip />
2615
{/* should remove publish button from the form */}

packages/app-website-builder-workflows/src/Components/PageEditor/PageEditorLayout.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,35 @@
1-
import React from "react";
1+
import React, { useEffect } from "react";
22
import { useSelectFromDocument } from "@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js";
33
import { useApolloClient } from "@apollo/react-hooks";
44
import { useAuthentication } from "@webiny/app-admin";
5-
import { Components } from "@webiny/app-workflows";
5+
import { Components, useWorkflowState } from "@webiny/app-workflows";
66
import { WB_PAGE_APP } from "~/constants.js";
7-
import { PageFormWorkflowState } from "./PageFormWorkflowState.js";
87
import { PageEditorConfig } from "@webiny/app-website-builder";
8+
import { observer } from "mobx-react-lite";
9+
import { useDocumentEditor } from "@webiny/app-website-builder/DocumentEditor/index.js";
910

1011
const { Ui } = PageEditorConfig;
1112

1213
const {
1314
ContentReview: { WorkflowStateProvider }
1415
} = Components;
1516

16-
export const PageEditorLayout = Ui.TopBar.Layout.createDecorator(Original => {
17+
const ToggleReadonly = observer(() => {
18+
const { presenter } = useWorkflowState();
19+
const editor = useDocumentEditor();
20+
21+
const hasState = !!presenter.vm.state?.state;
22+
23+
useEffect(() => {
24+
editor.updateEditor(state => {
25+
state.isReadOnly = hasState;
26+
});
27+
}, [hasState]);
28+
29+
return null;
30+
});
31+
32+
export const PageEditorLayout = Ui.Layout.createDecorator(Original => {
1733
return function PageEditorTopBarWorkflowsState() {
1834
const page = useSelectFromDocument(doc => {
1935
return {
@@ -33,10 +49,8 @@ export const PageEditorLayout = Ui.TopBar.Layout.createDecorator(Original => {
3349
client={client}
3450
title={`Website Builder: ${page.title}`}
3551
>
36-
{/* Original top bar*/}
3752
<Original />
38-
{/* Should render workflow state bar and the alert for storing changes */}
39-
<PageFormWorkflowState />
53+
<ToggleReadonly />
4054
</WorkflowStateProvider>
4155
);
4256
};

packages/app-website-builder-workflows/src/Components/PageEditor/PageEditorSettings.tsx

Lines changed: 0 additions & 28 deletions
This file was deleted.

packages/app-website-builder-workflows/src/Components/PageEditor/PageEditorSidebar.tsx

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/app-website-builder-workflows/src/Components/PageEditor/PageEditorToolbar.tsx

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React from "react";
2+
import { useApolloClient } from "@apollo/react-hooks";
3+
import { PageEditorConfig } from "@webiny/app-website-builder";
4+
import { useSelectFromDocument } from "@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js";
5+
import { useAuthentication } from "@webiny/app-admin";
6+
import { WorkflowStateProvider } from "@webiny/app-workflows/Components/WorkflowState/index.js";
7+
import { WB_PAGE_APP } from "~/constants.js";
8+
import { PageFormWorkflowState } from "~/Components/PageEditor/PageFormWorkflowState.js";
9+
import { ToggleEditorMode } from "~/Components/PageEditor/ToggleEditorMode.js";
10+
11+
const { Ui } = PageEditorConfig;
12+
13+
export const PageEditorTopBar = Ui.TopBar.Layout.createDecorator(Original => {
14+
return function PageEditorTopBarWorkflowsState() {
15+
const page = useSelectFromDocument(doc => {
16+
return {
17+
id: doc.id,
18+
title: doc.properties.title || "unknown page"
19+
};
20+
});
21+
22+
const client = useApolloClient();
23+
const { identity } = useAuthentication();
24+
25+
return (
26+
<WorkflowStateProvider
27+
app={WB_PAGE_APP}
28+
id={page.id}
29+
identity={identity}
30+
client={client}
31+
title={`Website Builder: ${page.title}`}
32+
>
33+
<Original />
34+
<ToggleEditorMode />
35+
<PageFormWorkflowState />
36+
</WorkflowStateProvider>
37+
);
38+
};
39+
});

0 commit comments

Comments
 (0)