@webiny/app-website-builder 6.4.12-beta.1 → 6.4.12-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Extension.js +2 -0
- package/Extension.js.map +1 -1
- package/domain/Page/Page.d.ts +2 -0
- package/domain/Page/Page.js +1 -0
- package/domain/Page/Page.js.map +1 -1
- package/domain/PageRevision/PageRevision.d.ts +11 -0
- package/domain/PageRevision/PageRevision.js +20 -0
- package/domain/PageRevision/PageRevision.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js +41 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.d.ts +3 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js +8 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevision.test.d.ts +1 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js +67 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js.map +1 -0
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.d.ts +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js +2 -3
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.d.ts +4 -2
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js +7 -3
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js.map +1 -1
- package/features/pages/deletePageRevision/abstractions.d.ts +2 -3
- package/features/pages/deletePageRevision/abstractions.js.map +1 -1
- package/features/pages/getPage/PageGatewayDto.d.ts +2 -0
- package/features/pages/publishPage/PublishPage.test.js +41 -1
- package/features/pages/publishPage/PublishPage.test.js.map +1 -1
- package/features/pages/publishPage/PublishPageRepository.d.ts +3 -2
- package/features/pages/publishPage/PublishPageRepository.js +15 -4
- package/features/pages/publishPage/PublishPageRepository.js.map +1 -1
- package/features/pages/shared/pageGraphQLFields.js +1 -0
- package/features/pages/shared/pageGraphQLFields.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js +4 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPageRepository.d.ts +3 -2
- package/features/pages/unpublishPage/UnpublishPageRepository.js +12 -4
- package/features/pages/unpublishPage/UnpublishPageRepository.js.map +1 -1
- package/modules/pages/PageEditor/Revisions/RevisionListDrawer.js +4 -0
- package/modules/pages/PageEditor/Revisions/RevisionListDrawer.js.map +1 -1
- package/modules/pages/PageEditor/Revisions/RevisionListItem.d.ts +3 -3
- package/modules/pages/PageEditor/Revisions/RevisionListItem.js +9 -20
- package/modules/pages/PageEditor/Revisions/RevisionListItem.js.map +1 -1
- package/modules/pages/PageEditor/Revisions/RevisionsList.js +7 -19
- package/modules/pages/PageEditor/Revisions/RevisionsList.js.map +1 -1
- package/modules/pages/PageEditor/Revisions/useRevision.d.ts +1 -1
- package/modules/pages/PageEditor/Revisions/useRevision.js +84 -14
- package/modules/pages/PageEditor/Revisions/useRevision.js.map +1 -1
- package/modules/pages/PageEditor/Revisions/useRevisionList.d.ts +3 -0
- package/modules/pages/PageEditor/Revisions/useRevisionList.js +31 -0
- package/modules/pages/PageEditor/Revisions/useRevisionList.js.map +1 -0
- package/modules/pages/PageEditor/TopBar/RevisionsMenu.js +9 -21
- package/modules/pages/PageEditor/TopBar/RevisionsMenu.js.map +1 -1
- package/modules/pages/PagesList/PagesList.js +5 -1
- package/modules/pages/PagesList/PagesList.js.map +1 -1
- package/modules/pages/PagesList/useDocumentList.d.ts +12 -0
- package/modules/pages/PagesList/useDocumentList.js +15 -11
- package/modules/pages/PagesList/useDocumentList.js.map +1 -1
- package/modules/redirects/RedirectsList/DocumentList.js +7 -2
- package/modules/redirects/RedirectsList/DocumentList.js.map +1 -1
- package/modules/redirects/RedirectsList/useDocumentList.d.ts +14 -0
- package/modules/redirects/RedirectsList/useDocumentList.js +14 -10
- package/modules/redirects/RedirectsList/useDocumentList.js.map +1 -1
- package/package.json +23 -23
- package/presentation/pages/RevisionList/RevisionListPresenter.d.ts +27 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js +73 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js.map +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.d.ts +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js +219 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js.map +1 -0
- package/presentation/pages/RevisionList/abstractions.d.ts +34 -0
- package/presentation/pages/RevisionList/abstractions.js +5 -0
- package/presentation/pages/RevisionList/abstractions.js.map +1 -0
- package/presentation/pages/RevisionList/feature.d.ts +3 -0
- package/presentation/pages/RevisionList/feature.js +17 -0
- package/presentation/pages/RevisionList/feature.js.map +1 -0
- package/presentation/pages/RevisionList/index.d.ts +2 -0
- package/presentation/pages/RevisionList/index.js +1 -0
|
@@ -1,29 +1,17 @@
|
|
|
1
|
-
import react
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { List, OverlayLoader } from "@webiny/admin-ui";
|
|
3
3
|
import RevisionListItem from "./RevisionListItem.js";
|
|
4
|
-
import {
|
|
5
|
-
import { parseIdentifier } from "@webiny/utils/parseIdentifier.js";
|
|
4
|
+
import { useRevisionList } from "./useRevisionList.js";
|
|
6
5
|
const RevisionsList = (props)=>{
|
|
7
6
|
const { page } = props;
|
|
8
|
-
const
|
|
9
|
-
const { loading, getPageRevisions } = useGetPageRevisions();
|
|
10
|
-
useEffect(()=>{
|
|
11
|
-
const { id: entryId } = parseIdentifier(page.id);
|
|
12
|
-
getPageRevisions({
|
|
13
|
-
entryId
|
|
14
|
-
}).then((revisions)=>{
|
|
15
|
-
setRevisions(revisions.sort((a, b)=>new Date(a.savedOn).getTime() - new Date(b.savedOn).getTime()).reverse());
|
|
16
|
-
});
|
|
17
|
-
}, [
|
|
18
|
-
page.id
|
|
19
|
-
]);
|
|
7
|
+
const { vm } = useRevisionList(page.id);
|
|
20
8
|
return /*#__PURE__*/ react.createElement("div", {
|
|
21
9
|
className: "relative"
|
|
22
|
-
},
|
|
10
|
+
}, (vm.isLoading || vm.isMutating) && /*#__PURE__*/ react.createElement(OverlayLoader, null), vm.revisions.length ? /*#__PURE__*/ react.createElement(List, {
|
|
23
11
|
"data-testid": "cms.content-form.revisions"
|
|
24
|
-
}, revisions.map((
|
|
25
|
-
|
|
26
|
-
key: revision.id
|
|
12
|
+
}, vm.revisions.map((item)=>/*#__PURE__*/ react.createElement(RevisionListItem, {
|
|
13
|
+
item: item,
|
|
14
|
+
key: item.revision.id
|
|
27
15
|
}))) : /*#__PURE__*/ react.createElement("div", {
|
|
28
16
|
className: "p-lg"
|
|
29
17
|
}, "No revisions to show."));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/pages/PageEditor/Revisions/RevisionsList.js","sources":["../../../../../src/modules/pages/PageEditor/Revisions/RevisionsList.tsx"],"sourcesContent":["import React
|
|
1
|
+
{"version":3,"file":"modules/pages/PageEditor/Revisions/RevisionsList.js","sources":["../../../../../src/modules/pages/PageEditor/Revisions/RevisionsList.tsx"],"sourcesContent":["import React from \"react\";\nimport { List, OverlayLoader } from \"@webiny/admin-ui\";\nimport RevisionListItem from \"./RevisionListItem.js\";\nimport type { Page } from \"~/domain/Page/index.js\";\nimport { useRevisionList } from \"./useRevisionList.js\";\n\ninterface IRevisionsListProps {\n page: Pick<Page, \"id\">;\n}\n\nexport const RevisionsList = (props: IRevisionsListProps) => {\n const { page } = props;\n const { vm } = useRevisionList(page.id);\n\n return (\n <div className={\"relative\"}>\n {(vm.isLoading || vm.isMutating) && <OverlayLoader />}\n {vm.revisions.length ? (\n <List data-testid={\"cms.content-form.revisions\"}>\n {vm.revisions.map(item => (\n <RevisionListItem item={item} key={item.revision.id} />\n ))}\n </List>\n ) : (\n <div className={\"p-lg\"}>No revisions to show.</div>\n )}\n </div>\n );\n};\n"],"names":["RevisionsList","props","page","vm","useRevisionList","OverlayLoader","List","item","RevisionListItem"],"mappings":";;;;AAUO,MAAMA,gBAAgB,CAACC;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGD;IACjB,MAAM,EAAEE,EAAE,EAAE,GAAGC,gBAAgBF,KAAK,EAAE;IAEtC,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;OACVC,AAAAA,CAAAA,GAAG,SAAS,IAAIA,GAAG,UAAS,mBAAM,oBAACE,eAAaA,OACjDF,GAAG,SAAS,CAAC,MAAM,GAAG,WAAH,GAChB,oBAACG,MAAIA;QAAC,eAAa;OACdH,GAAG,SAAS,CAAC,GAAG,CAACI,CAAAA,OAAAA,WAAAA,GACd,oBAACC,kBAAgBA;YAAC,MAAMD;YAAM,KAAKA,KAAK,QAAQ,CAAC,EAAE;6BAI3D,oBAAC;QAAI,WAAW;OAAQ;AAIxC"}
|
|
@@ -3,7 +3,7 @@ export interface UseRevisionProps {
|
|
|
3
3
|
revision: PageRevision;
|
|
4
4
|
}
|
|
5
5
|
export declare const useRevision: (props: UseRevisionProps) => {
|
|
6
|
-
createRevision: () => void
|
|
6
|
+
createRevision: () => Promise<void>;
|
|
7
7
|
editRevision: () => void;
|
|
8
8
|
deleteRevision: () => void;
|
|
9
9
|
publishRevision: () => void;
|
|
@@ -1,49 +1,119 @@
|
|
|
1
|
+
import react, { useCallback } from "react";
|
|
1
2
|
import { useCreatePageRevisionFrom, useDeletePageRevision, usePublishPage, useUnpublishPage } from "../../../../features/pages/index.js";
|
|
2
|
-
import {
|
|
3
|
+
import { Text, useToast } from "@webiny/admin-ui";
|
|
4
|
+
import { useDialogs } from "@webiny/app-admin";
|
|
5
|
+
import { ReactComponent } from "@webiny/icons/visibility.svg";
|
|
6
|
+
import { ReactComponent as visibility_off_svg_ReactComponent } from "@webiny/icons/visibility_off.svg";
|
|
7
|
+
import { ReactComponent as delete_svg_ReactComponent } from "@webiny/icons/delete.svg";
|
|
3
8
|
import { Routes } from "../../../../routes.js";
|
|
4
9
|
import { useRouter } from "@webiny/app";
|
|
10
|
+
import { usePageEditorDrawer } from "./usePageEditorDrawer.js";
|
|
5
11
|
const useRevision = (props)=>{
|
|
6
12
|
const { revision } = props;
|
|
7
13
|
const { goToRoute } = useRouter();
|
|
14
|
+
const { openRevisionList } = usePageEditorDrawer();
|
|
15
|
+
const { showDialog } = useDialogs();
|
|
16
|
+
const { showSuccessToast, showWarningToast } = useToast();
|
|
8
17
|
const { createPageRevisionFrom } = useCreatePageRevisionFrom();
|
|
9
18
|
const { deletePageRevision } = useDeletePageRevision();
|
|
10
19
|
const { publishPage } = usePublishPage();
|
|
11
20
|
const { unpublishPage } = useUnpublishPage();
|
|
12
|
-
const createRevision = useCallback(()=>{
|
|
13
|
-
createPageRevisionFrom({
|
|
21
|
+
const createRevision = useCallback(async ()=>{
|
|
22
|
+
await createPageRevisionFrom({
|
|
14
23
|
id: revision.id
|
|
15
24
|
});
|
|
16
25
|
}, [
|
|
17
26
|
revision.id
|
|
18
27
|
]);
|
|
19
28
|
const deleteRevision = useCallback(()=>{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
showDialog({
|
|
30
|
+
title: "Delete revision",
|
|
31
|
+
icon: /*#__PURE__*/ react.createElement(delete_svg_ReactComponent, null),
|
|
32
|
+
content: /*#__PURE__*/ react.createElement(Text, null, `You are about to delete revision #${revision.version}. This cannot be undone. Are you sure you want to continue?`),
|
|
33
|
+
acceptLabel: "Yes, delete this revision!",
|
|
34
|
+
cancelLabel: "Cancel",
|
|
35
|
+
onAccept: async ()=>{
|
|
36
|
+
try {
|
|
37
|
+
await deletePageRevision({
|
|
38
|
+
id: revision.id
|
|
39
|
+
});
|
|
40
|
+
showSuccessToast({
|
|
41
|
+
title: `Revision #${revision.version} was deleted successfully!`
|
|
42
|
+
});
|
|
43
|
+
} catch (ex) {
|
|
44
|
+
showWarningToast({
|
|
45
|
+
title: "Could not delete the revision.",
|
|
46
|
+
description: ex.message
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
23
50
|
});
|
|
24
51
|
}, [
|
|
25
|
-
revision.id
|
|
52
|
+
revision.id,
|
|
53
|
+
revision.version
|
|
26
54
|
]);
|
|
27
55
|
const publishRevision = useCallback(()=>{
|
|
28
|
-
|
|
29
|
-
|
|
56
|
+
showDialog({
|
|
57
|
+
title: "Publish revision",
|
|
58
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
59
|
+
content: /*#__PURE__*/ react.createElement(Text, null, `You are about to publish revision #${revision.version}. Are you sure you want to continue?`),
|
|
60
|
+
acceptLabel: "Yes, publish this revision!",
|
|
61
|
+
cancelLabel: "Cancel",
|
|
62
|
+
onAccept: async ()=>{
|
|
63
|
+
try {
|
|
64
|
+
await publishPage({
|
|
65
|
+
id: revision.id
|
|
66
|
+
});
|
|
67
|
+
showSuccessToast({
|
|
68
|
+
title: `Revision #${revision.version} was published successfully!`
|
|
69
|
+
});
|
|
70
|
+
} catch (ex) {
|
|
71
|
+
showWarningToast({
|
|
72
|
+
title: "Could not publish the revision.",
|
|
73
|
+
description: ex.message
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
30
77
|
});
|
|
31
78
|
}, [
|
|
32
|
-
revision.id
|
|
79
|
+
revision.id,
|
|
80
|
+
revision.version
|
|
33
81
|
]);
|
|
34
82
|
const unpublishRevision = useCallback(()=>{
|
|
35
|
-
|
|
36
|
-
|
|
83
|
+
showDialog({
|
|
84
|
+
title: "Unpublish revision",
|
|
85
|
+
icon: /*#__PURE__*/ react.createElement(visibility_off_svg_ReactComponent, null),
|
|
86
|
+
content: /*#__PURE__*/ react.createElement(Text, null, `You are about to unpublish revision #${revision.version}, which will take the page off the live website. Are you sure you want to continue?`),
|
|
87
|
+
acceptLabel: "Yes, unpublish this revision!",
|
|
88
|
+
cancelLabel: "Cancel",
|
|
89
|
+
onAccept: async ()=>{
|
|
90
|
+
try {
|
|
91
|
+
await unpublishPage({
|
|
92
|
+
id: revision.id
|
|
93
|
+
});
|
|
94
|
+
showSuccessToast({
|
|
95
|
+
title: `Revision #${revision.version} was unpublished successfully!`
|
|
96
|
+
});
|
|
97
|
+
} catch (ex) {
|
|
98
|
+
showWarningToast({
|
|
99
|
+
title: "Could not unpublish the revision.",
|
|
100
|
+
description: ex.message
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
37
104
|
});
|
|
38
105
|
}, [
|
|
39
|
-
revision.id
|
|
106
|
+
revision.id,
|
|
107
|
+
revision.version
|
|
40
108
|
]);
|
|
41
109
|
const editRevision = useCallback(()=>{
|
|
110
|
+
openRevisionList(false);
|
|
42
111
|
goToRoute(Routes.Pages.Editor, {
|
|
43
112
|
id: revision.id
|
|
44
113
|
});
|
|
45
114
|
}, [
|
|
46
|
-
revision.id
|
|
115
|
+
revision.id,
|
|
116
|
+
openRevisionList
|
|
47
117
|
]);
|
|
48
118
|
return {
|
|
49
119
|
createRevision,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/pages/PageEditor/Revisions/useRevision.js","sources":["../../../../../src/modules/pages/PageEditor/Revisions/useRevision.tsx"],"sourcesContent":["import type { PageRevision } from \"~/domain/PageRevision/index.js\";\nimport {\n usePublishPage,\n useUnpublishPage,\n useCreatePageRevisionFrom,\n useDeletePageRevision\n} from \"~/features/pages/index.js\";\nimport { useCallback } from \"react\";\nimport { Routes } from \"~/routes.js\";\nimport { useRouter } from \"@webiny/app\";\n\nexport interface UseRevisionProps {\n revision: PageRevision;\n}\n\nexport const useRevision = (props: UseRevisionProps) => {\n const { revision } = props;\n\n const { goToRoute } = useRouter();\n\n const { createPageRevisionFrom } = useCreatePageRevisionFrom();\n const { deletePageRevision } = useDeletePageRevision();\n const { publishPage } = usePublishPage();\n const { unpublishPage } = useUnpublishPage();\n\n const createRevision = useCallback(() => {\n createPageRevisionFrom({\n id: revision.id\n });\n }, [revision.id]);\n\n const deleteRevision = useCallback(() => {\n deletePageRevision({\n
|
|
1
|
+
{"version":3,"file":"modules/pages/PageEditor/Revisions/useRevision.js","sources":["../../../../../src/modules/pages/PageEditor/Revisions/useRevision.tsx"],"sourcesContent":["import React from \"react\";\nimport type { PageRevision } from \"~/domain/PageRevision/index.js\";\nimport {\n usePublishPage,\n useUnpublishPage,\n useCreatePageRevisionFrom,\n useDeletePageRevision\n} from \"~/features/pages/index.js\";\nimport { useCallback } from \"react\";\nimport { Text, useToast } from \"@webiny/admin-ui\";\nimport { useDialogs } from \"@webiny/app-admin\";\nimport { ReactComponent as PublishIcon } from \"@webiny/icons/visibility.svg\";\nimport { ReactComponent as UnpublishIcon } from \"@webiny/icons/visibility_off.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { Routes } from \"~/routes.js\";\nimport { useRouter } from \"@webiny/app\";\nimport { usePageEditorDrawer } from \"./usePageEditorDrawer.js\";\n\nexport interface UseRevisionProps {\n revision: PageRevision;\n}\n\nexport const useRevision = (props: UseRevisionProps) => {\n const { revision } = props;\n\n const { goToRoute } = useRouter();\n const { openRevisionList } = usePageEditorDrawer();\n const { showDialog } = useDialogs();\n const { showSuccessToast, showWarningToast } = useToast();\n\n const { createPageRevisionFrom } = useCreatePageRevisionFrom();\n const { deletePageRevision } = useDeletePageRevision();\n const { publishPage } = usePublishPage();\n const { unpublishPage } = useUnpublishPage();\n\n const createRevision = useCallback(async () => {\n await createPageRevisionFrom({\n id: revision.id\n });\n }, [revision.id]);\n\n const deleteRevision = useCallback(() => {\n showDialog({\n title: \"Delete revision\",\n icon: <DeleteIcon />,\n content: (\n <Text>\n {`You are about to delete revision #${revision.version}. This cannot be undone. Are you sure you want to continue?`}\n </Text>\n ),\n acceptLabel: \"Yes, delete this revision!\",\n cancelLabel: \"Cancel\",\n onAccept: async () => {\n try {\n await deletePageRevision({\n id: revision.id\n });\n\n showSuccessToast({\n title: `Revision #${revision.version} was deleted successfully!`\n });\n } catch (ex) {\n showWarningToast({\n title: \"Could not delete the revision.\",\n description: ex.message\n });\n }\n }\n });\n }, [revision.id, revision.version]);\n\n const publishRevision = useCallback(() => {\n showDialog({\n title: \"Publish revision\",\n icon: <PublishIcon />,\n content: (\n <Text>\n {`You are about to publish revision #${revision.version}. Are you sure you want to continue?`}\n </Text>\n ),\n acceptLabel: \"Yes, publish this revision!\",\n cancelLabel: \"Cancel\",\n onAccept: async () => {\n try {\n await publishPage({\n id: revision.id\n });\n\n showSuccessToast({\n title: `Revision #${revision.version} was published successfully!`\n });\n } catch (ex) {\n showWarningToast({\n title: \"Could not publish the revision.\",\n description: ex.message\n });\n }\n }\n });\n }, [revision.id, revision.version]);\n\n const unpublishRevision = useCallback(() => {\n showDialog({\n title: \"Unpublish revision\",\n icon: <UnpublishIcon />,\n content: (\n <Text>\n {`You are about to unpublish revision #${revision.version}, which will take the page off the live website. Are you sure you want to continue?`}\n </Text>\n ),\n acceptLabel: \"Yes, unpublish this revision!\",\n cancelLabel: \"Cancel\",\n onAccept: async () => {\n try {\n await unpublishPage({\n id: revision.id\n });\n\n showSuccessToast({\n title: `Revision #${revision.version} was unpublished successfully!`\n });\n } catch (ex) {\n showWarningToast({\n title: \"Could not unpublish the revision.\",\n description: ex.message\n });\n }\n }\n });\n }, [revision.id, revision.version]);\n\n const editRevision = useCallback(() => {\n // The drawer lives outside the editor, so it would stay open across the navigation.\n openRevisionList(false);\n\n goToRoute(Routes.Pages.Editor, {\n id: revision.id\n });\n }, [revision.id, openRevisionList]);\n\n return {\n createRevision,\n editRevision,\n deleteRevision,\n publishRevision,\n unpublishRevision\n };\n};\n"],"names":["useRevision","props","revision","goToRoute","useRouter","openRevisionList","usePageEditorDrawer","showDialog","useDialogs","showSuccessToast","showWarningToast","useToast","createPageRevisionFrom","useCreatePageRevisionFrom","deletePageRevision","useDeletePageRevision","publishPage","usePublishPage","unpublishPage","useUnpublishPage","createRevision","useCallback","deleteRevision","DeleteIcon","Text","ex","publishRevision","PublishIcon","unpublishRevision","UnpublishIcon","editRevision","Routes"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { autorun } from "mobx";
|
|
3
|
+
import { useFeature } from "@webiny/app";
|
|
4
|
+
import { parseIdentifier } from "@webiny/utils/parseIdentifier.js";
|
|
5
|
+
import { RevisionListFeature } from "../../../../presentation/pages/RevisionList/feature.js";
|
|
6
|
+
const useRevisionList = (pageId)=>{
|
|
7
|
+
const { presenter } = useFeature(RevisionListFeature);
|
|
8
|
+
const { id: entryId } = useMemo(()=>parseIdentifier(pageId), [
|
|
9
|
+
pageId
|
|
10
|
+
]);
|
|
11
|
+
useEffect(()=>{
|
|
12
|
+
presenter.init({
|
|
13
|
+
entryId
|
|
14
|
+
});
|
|
15
|
+
}, [
|
|
16
|
+
entryId,
|
|
17
|
+
presenter
|
|
18
|
+
]);
|
|
19
|
+
const [vm, setVm] = useState(presenter.vm);
|
|
20
|
+
useEffect(()=>autorun(()=>{
|
|
21
|
+
setVm(presenter.vm);
|
|
22
|
+
}), [
|
|
23
|
+
presenter
|
|
24
|
+
]);
|
|
25
|
+
return {
|
|
26
|
+
vm
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export { useRevisionList };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=useRevisionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules/pages/PageEditor/Revisions/useRevisionList.js","sources":["../../../../../src/modules/pages/PageEditor/Revisions/useRevisionList.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { autorun } from \"mobx\";\nimport { useFeature } from \"@webiny/app\";\nimport { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { RevisionListFeature } from \"~/presentation/pages/RevisionList/feature.js\";\n\nexport const useRevisionList = (pageId: string) => {\n const { presenter } = useFeature(RevisionListFeature);\n\n const { id: entryId } = useMemo(() => parseIdentifier(pageId), [pageId]);\n\n useEffect(() => {\n presenter.init({ entryId });\n }, [entryId, presenter]);\n\n const [vm, setVm] = useState(presenter.vm);\n\n useEffect(() => {\n return autorun(() => {\n setVm(presenter.vm);\n });\n }, [presenter]);\n\n return { vm };\n};\n"],"names":["useRevisionList","pageId","presenter","useFeature","RevisionListFeature","entryId","useMemo","parseIdentifier","useEffect","vm","setVm","useState","autorun"],"mappings":";;;;;AAMO,MAAMA,kBAAkB,CAACC;IAC5B,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IAEjC,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,QAAQ,IAAMC,gBAAgBN,SAAS;QAACA;KAAO;IAEvEO,UAAU;QACNN,UAAU,IAAI,CAAC;YAAEG;QAAQ;IAC7B,GAAG;QAACA;QAASH;KAAU;IAEvB,MAAM,CAACO,IAAIC,MAAM,GAAGC,SAAST,UAAU,EAAE;IAEzCM,UAAU,IACCI,QAAQ;YACXF,MAAMR,UAAU,EAAE;QACtB,IACD;QAACA;KAAU;IAEd,OAAO;QAAEO;IAAG;AAChB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import react, { useCallback
|
|
1
|
+
import react, { useCallback } from "react";
|
|
2
2
|
import { Button, DropdownMenu, Text } from "@webiny/admin-ui";
|
|
3
3
|
import { ReactComponent } from "@webiny/icons/keyboard_arrow_down.svg";
|
|
4
4
|
import { ReactComponent as draw_svg_ReactComponent } from "@webiny/icons/draw.svg";
|
|
5
5
|
import { ReactComponent as lock_svg_ReactComponent } from "@webiny/icons/lock.svg";
|
|
6
6
|
import { ReactComponent as remove_red_eye_svg_ReactComponent } from "@webiny/icons/remove_red_eye.svg";
|
|
7
|
-
import { useGetPageRevisions } from "../../../../features/pages/index.js";
|
|
8
7
|
import { useSelectFromDocument } from "../../../../BaseEditor/hooks/useSelectFromDocument.js";
|
|
8
|
+
import { useRevisionList } from "../Revisions/useRevisionList.js";
|
|
9
9
|
import { useRouter } from "@webiny/app-admin";
|
|
10
10
|
import { Routes } from "../../../../routes.js";
|
|
11
11
|
import { usePageEditorDrawer } from "../Revisions/usePageEditorDrawer.js";
|
|
@@ -17,23 +17,11 @@ const statusIcon = {
|
|
|
17
17
|
};
|
|
18
18
|
const RevisionsMenu = ()=>{
|
|
19
19
|
const { getLink } = useRouter();
|
|
20
|
-
const [revisions, setRevisions] = useState([]);
|
|
21
|
-
const { loading, getPageRevisions } = useGetPageRevisions();
|
|
22
20
|
const id = useSelectFromDocument((document)=>document.id);
|
|
23
|
-
const status = useSelectFromDocument((document)=>document.status);
|
|
24
21
|
const { openRevisionList } = usePageEditorDrawer();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
entryId
|
|
29
|
-
}).then((revisions)=>{
|
|
30
|
-
setRevisions(revisions.sort((a, b)=>new Date(a.savedOn).getTime() - new Date(b.savedOn).getTime()).reverse());
|
|
31
|
-
});
|
|
32
|
-
}, [
|
|
33
|
-
id,
|
|
34
|
-
status
|
|
35
|
-
]);
|
|
36
|
-
const currentRevision = revisions.find((r)=>r.id === id);
|
|
22
|
+
const { vm } = useRevisionList(id);
|
|
23
|
+
const { revisions, isLoading } = vm;
|
|
24
|
+
const currentRevision = revisions.find((item)=>item.revision.id === id)?.revision;
|
|
37
25
|
const goToRevision = useCallback((id)=>{
|
|
38
26
|
window.location.pathname = getLink(Routes.Pages.Editor, {
|
|
39
27
|
id
|
|
@@ -44,13 +32,13 @@ const RevisionsMenu = ()=>{
|
|
|
44
32
|
}, []);
|
|
45
33
|
return /*#__PURE__*/ react.createElement(DropdownMenu, {
|
|
46
34
|
trigger: /*#__PURE__*/ react.createElement(Button, {
|
|
47
|
-
disabled:
|
|
35
|
+
disabled: isLoading,
|
|
48
36
|
variant: "ghost",
|
|
49
37
|
text: currentRevision ? currentRevision.getLabel() : "Loading...",
|
|
50
38
|
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
51
39
|
iconPosition: "end"
|
|
52
40
|
})
|
|
53
|
-
}, revisions.slice(0, 5).map((revision)=>/*#__PURE__*/ react.createElement(Item, {
|
|
41
|
+
}, revisions.slice(0, 5).map(({ revision })=>/*#__PURE__*/ react.createElement(Item, {
|
|
54
42
|
key: revision.id,
|
|
55
43
|
className: "cursor-pointer",
|
|
56
44
|
onClick: ()=>goToRevision(revision.id),
|
|
@@ -61,13 +49,13 @@ const RevisionsMenu = ()=>{
|
|
|
61
49
|
text: /*#__PURE__*/ react.createElement(Text, {
|
|
62
50
|
size: "sm"
|
|
63
51
|
}, revision.getLabel())
|
|
64
|
-
})),
|
|
52
|
+
})), /*#__PURE__*/ react.createElement(DropdownMenu.Separator, null), /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
|
|
65
53
|
key: "revisions-all",
|
|
66
54
|
onClick: onOpenRevisionList,
|
|
67
55
|
text: /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Text, {
|
|
68
56
|
size: "sm"
|
|
69
57
|
}, "Show All Revisions"))
|
|
70
|
-
}))
|
|
58
|
+
}));
|
|
71
59
|
};
|
|
72
60
|
export { RevisionsMenu };
|
|
73
61
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/pages/PageEditor/TopBar/RevisionsMenu.js","sources":["../../../../../src/modules/pages/PageEditor/TopBar/RevisionsMenu.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"modules/pages/PageEditor/TopBar/RevisionsMenu.js","sources":["../../../../../src/modules/pages/PageEditor/TopBar/RevisionsMenu.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Button, DropdownMenu, Text } from \"@webiny/admin-ui\";\nimport { ReactComponent as ArrowDown } from \"@webiny/icons/keyboard_arrow_down.svg\";\nimport { ReactComponent as Draft } from \"@webiny/icons/draw.svg\";\nimport { ReactComponent as Unpublished } from \"@webiny/icons/lock.svg\";\nimport { ReactComponent as Published } from \"@webiny/icons/remove_red_eye.svg\";\nimport { useSelectFromDocument } from \"~/BaseEditor/hooks/useSelectFromDocument.js\";\nimport { useRevisionList } from \"~/modules/pages/PageEditor/Revisions/useRevisionList.js\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\nimport { usePageEditorDrawer } from \"~/modules/pages/PageEditor/Revisions/usePageEditorDrawer.js\";\n\nconst { Item } = DropdownMenu;\n\nconst statusIcon: Record<string, React.JSX.Element> = {\n draft: <Draft />,\n published: <Published />,\n unpublished: <Unpublished />\n};\n\nexport const RevisionsMenu = () => {\n const { getLink } = useRouter();\n const id = useSelectFromDocument(document => document.id);\n\n const { openRevisionList } = usePageEditorDrawer();\n\n // Shares the presenter with the revisions drawer, so mutations made there are reflected here.\n const { vm } = useRevisionList(id);\n const { revisions, isLoading } = vm;\n\n const currentRevision = revisions.find(item => item.revision.id === id)?.revision;\n\n const goToRevision = useCallback((id: string) => {\n // TODO: make this work without a full app reload\n window.location.pathname = getLink(Routes.Pages.Editor, { id });\n }, []);\n\n const onOpenRevisionList = useCallback(() => {\n openRevisionList(true);\n }, []);\n\n return (\n <DropdownMenu\n trigger={\n <Button\n disabled={isLoading}\n variant=\"ghost\"\n text={currentRevision ? currentRevision.getLabel() : \"Loading...\"}\n icon={<ArrowDown />}\n iconPosition={\"end\"}\n />\n }\n >\n {revisions.slice(0, 5).map(({ revision }) => (\n <Item\n key={revision.id}\n className={\"cursor-pointer\"}\n onClick={() => goToRevision(revision.id)}\n icon={\n <Item.Icon\n label={revision.getLabel()}\n element={statusIcon[revision.status]}\n />\n }\n text={<Text size={\"sm\"}>{revision.getLabel()}</Text>}\n />\n ))}\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n key={\"revisions-all\"}\n onClick={onOpenRevisionList}\n text={\n <>\n <Text size={\"sm\"}>Show All Revisions</Text>\n </>\n }\n />\n </DropdownMenu>\n );\n};\n"],"names":["Item","DropdownMenu","statusIcon","Draft","Published","Unpublished","RevisionsMenu","getLink","useRouter","id","useSelectFromDocument","document","openRevisionList","usePageEditorDrawer","vm","useRevisionList","revisions","isLoading","currentRevision","item","goToRevision","useCallback","window","Routes","onOpenRevisionList","Button","ArrowDown","revision","Text"],"mappings":";;;;;;;;;;;AAYA,MAAM,EAAEA,MAAAA,IAAI,EAAE,GAAGC;AAEjB,MAAMC,aAAgD;IAClD,OAAO,WAAP,GAAO,oBAACC,yBAAKA;IACb,WAAW,WAAX,GAAW,oBAACC,mCAASA;IACrB,aAAa,WAAb,GAAa,oBAACC,yBAAWA;AAC7B;AAEO,MAAMC,gBAAgB;IACzB,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAMC,KAAKC,sBAAsBC,CAAAA,WAAYA,SAAS,EAAE;IAExD,MAAM,EAAEC,gBAAgB,EAAE,GAAGC;IAG7B,MAAM,EAAEC,EAAE,EAAE,GAAGC,gBAAgBN;IAC/B,MAAM,EAAEO,SAAS,EAAEC,SAAS,EAAE,GAAGH;IAEjC,MAAMI,kBAAkBF,UAAU,IAAI,CAACG,CAAAA,OAAQA,KAAK,QAAQ,CAAC,EAAE,KAAKV,KAAK;IAEzE,MAAMW,eAAeC,YAAY,CAACZ;QAE9Ba,OAAO,QAAQ,CAAC,QAAQ,GAAGf,QAAQgB,OAAO,KAAK,CAAC,MAAM,EAAE;YAAEd;QAAG;IACjE,GAAG,EAAE;IAEL,MAAMe,qBAAqBH,YAAY;QACnCT,iBAAiB;IACrB,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACX,cAAYA;QACT,uBACI,oBAACwB,QAAMA;YACH,UAAUR;YACV,SAAQ;YACR,MAAMC,kBAAkBA,gBAAgB,QAAQ,KAAK;YACrD,oBAAM,oBAACQ,gBAASA;YAChB,cAAc;;OAIrBV,UAAU,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAEW,QAAQ,EAAE,iBACpC,oBAAC3B,MAAIA;YACD,KAAK2B,SAAS,EAAE;YAChB,WAAW;YACX,SAAS,IAAMP,aAAaO,SAAS,EAAE;YACvC,oBACI,oBAAC3B,KAAK,IAAI;gBACN,OAAO2B,SAAS,QAAQ;gBACxB,SAASzB,UAAU,CAACyB,SAAS,MAAM,CAAC;;YAG5C,oBAAM,oBAACC,MAAIA;gBAAC,MAAM;eAAOD,SAAS,QAAQ;2BAGlD,oBAAC1B,aAAa,SAAS,uBACvB,oBAACA,aAAa,IAAI;QACd,KAAK;QACL,SAASuB;QACT,oBACI,wDACI,oBAACI,MAAIA;YAAC,MAAM;WAAM;;AAM1C"}
|
|
@@ -2,10 +2,14 @@ import react from "react";
|
|
|
2
2
|
import { Layout } from "./components/Layout/index.js";
|
|
3
3
|
import { Main } from "./components/Main/index.js";
|
|
4
4
|
import { Sidebar } from "./components/Sidebar/index.js";
|
|
5
|
-
|
|
5
|
+
import { useDocumentListController } from "./useDocumentList.js";
|
|
6
|
+
const PagesList = ()=>{
|
|
7
|
+
useDocumentListController();
|
|
8
|
+
return /*#__PURE__*/ react.createElement(Layout, {
|
|
6
9
|
main: /*#__PURE__*/ react.createElement(Main, null),
|
|
7
10
|
sidebar: /*#__PURE__*/ react.createElement(Sidebar, null)
|
|
8
11
|
});
|
|
12
|
+
};
|
|
9
13
|
export { PagesList };
|
|
10
14
|
|
|
11
15
|
//# sourceMappingURL=PagesList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/pages/PagesList/PagesList.js","sources":["../../../../src/modules/pages/PagesList/PagesList.tsx"],"sourcesContent":["import React from \"react\";\nimport { Layout } from \"~/modules/pages/PagesList/components/Layout/index.js\";\nimport { Main } from \"~/modules/pages/PagesList/components/Main/index.js\";\nimport { Sidebar } from \"~/modules/pages/PagesList/components/Sidebar/index.js\";\n\nexport const PagesList = () => {\n return <Layout main={<Main />} sidebar={<Sidebar />} />;\n};\n"],"names":["PagesList","Layout","Main","Sidebar"],"mappings":"
|
|
1
|
+
{"version":3,"file":"modules/pages/PagesList/PagesList.js","sources":["../../../../src/modules/pages/PagesList/PagesList.tsx"],"sourcesContent":["import React from \"react\";\nimport { Layout } from \"~/modules/pages/PagesList/components/Layout/index.js\";\nimport { Main } from \"~/modules/pages/PagesList/components/Main/index.js\";\nimport { Sidebar } from \"~/modules/pages/PagesList/components/Sidebar/index.js\";\nimport { useDocumentListController } from \"~/modules/pages/PagesList/useDocumentList.js\";\n\nexport const PagesList = () => {\n useDocumentListController();\n\n return <Layout main={<Main />} sidebar={<Sidebar />} />;\n};\n"],"names":["PagesList","useDocumentListController","Layout","Main","Sidebar"],"mappings":";;;;;AAMO,MAAMA,YAAY;IACrBC;IAEA,OAAO,WAAP,GAAO,oBAACC,QAAMA;QAAC,oBAAM,oBAACC,MAAIA;QAAK,uBAAS,oBAACC,SAAOA;;AACpD"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads the list view model. Safe to call from any number of components: it performs no data
|
|
3
|
+
* loading, so an extra consumer costs nothing.
|
|
4
|
+
*
|
|
5
|
+
* Loading belongs to `useDocumentListController`, which the list root calls exactly once. Keeping it
|
|
6
|
+
* here would mean every consumer issued its own `listPages` request on mount.
|
|
7
|
+
*/
|
|
1
8
|
export declare const useDocumentList: import("@webiny/react-composition").GenericHook<unknown, {
|
|
2
9
|
vm: import("../../../presentation/pages/PageList").IDocumentListVm;
|
|
3
10
|
showFilters: (show: boolean) => void;
|
|
@@ -13,3 +20,8 @@ export declare const useDocumentList: import("@webiny/react-composition").Generi
|
|
|
13
20
|
showFilters: (show: boolean) => void;
|
|
14
21
|
}>) => () => React.JSX.Element;
|
|
15
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Owns the loading of the current folder. Must be called exactly once, by the list root - every call
|
|
25
|
+
* site runs its own copy of the effect below, and each copy issues a `listPages` request.
|
|
26
|
+
*/
|
|
27
|
+
export declare const useDocumentListController: () => void;
|
|
@@ -7,13 +7,8 @@ import { makeDecoratableHook } from "@webiny/react-composition";
|
|
|
7
7
|
import { useFeature } from "@webiny/app";
|
|
8
8
|
import { PageListFeature } from "../../../presentation/pages/PageList/feature.js";
|
|
9
9
|
const useDocumentList = makeDecoratableHook(()=>{
|
|
10
|
-
const isFirstLoad = useRef(true);
|
|
11
|
-
const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();
|
|
12
|
-
const { listFoldersByParentIds } = useListFoldersByParentIds();
|
|
13
10
|
const { currentFolderId } = useNavigateFolder();
|
|
14
|
-
const { loadPages: listDocuments } = useLoadPages();
|
|
15
11
|
const { filterPages: filterDocuments } = useFilterPages();
|
|
16
|
-
const { selectPages: selectDocuments } = useSelectPages();
|
|
17
12
|
const { presenter } = useFeature(PageListFeature);
|
|
18
13
|
const params = useMemo(()=>({
|
|
19
14
|
folderId: currentFolderId
|
|
@@ -38,6 +33,19 @@ const useDocumentList = makeDecoratableHook(()=>{
|
|
|
38
33
|
}, [
|
|
39
34
|
presenter
|
|
40
35
|
]);
|
|
36
|
+
return {
|
|
37
|
+
vm,
|
|
38
|
+
showFilters
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
const useDocumentListController = ()=>{
|
|
42
|
+
const isFirstLoad = useRef(true);
|
|
43
|
+
const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();
|
|
44
|
+
const { listFoldersByParentIds } = useListFoldersByParentIds();
|
|
45
|
+
const { loadPages: listDocuments } = useLoadPages();
|
|
46
|
+
const { selectPages: selectDocuments } = useSelectPages();
|
|
47
|
+
const { presenter } = useFeature(PageListFeature);
|
|
48
|
+
const { vm } = useDocumentList();
|
|
41
49
|
useEffect(()=>{
|
|
42
50
|
if (0 === folders.length) loadFolderHierarchy(vm.folderId);
|
|
43
51
|
else listFoldersByParentIds([
|
|
@@ -53,11 +61,7 @@ const useDocumentList = makeDecoratableHook(()=>{
|
|
|
53
61
|
}, [
|
|
54
62
|
vm.folderId
|
|
55
63
|
]);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
showFilters
|
|
59
|
-
};
|
|
60
|
-
});
|
|
61
|
-
export { useDocumentList };
|
|
64
|
+
};
|
|
65
|
+
export { useDocumentList, useDocumentListController };
|
|
62
66
|
|
|
63
67
|
//# sourceMappingURL=useDocumentList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/pages/PagesList/useDocumentList.js","sources":["../../../../src/modules/pages/PagesList/useDocumentList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { autorun } from \"mobx\";\nimport {\n useListFoldersByParentIds,\n useLoadFolderHierarchy,\n useNavigateFolder\n} from \"@webiny/app-aco\";\nimport { useFilterPages, useLoadPages } from \"~/features/pages/index.js\";\nimport { useSelectPages } from \"~/features/pages/selectPages/useSelectPages.js\";\nimport { makeDecoratableHook } from \"@webiny/react-composition\";\nimport { useFeature } from \"@webiny/app\";\nimport { PageListFeature } from \"~/presentation/pages/PageList/feature.js\";\n\
|
|
1
|
+
{"version":3,"file":"modules/pages/PagesList/useDocumentList.js","sources":["../../../../src/modules/pages/PagesList/useDocumentList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { autorun } from \"mobx\";\nimport {\n useListFoldersByParentIds,\n useLoadFolderHierarchy,\n useNavigateFolder\n} from \"@webiny/app-aco\";\nimport { useFilterPages, useLoadPages } from \"~/features/pages/index.js\";\nimport { useSelectPages } from \"~/features/pages/selectPages/useSelectPages.js\";\nimport { makeDecoratableHook } from \"@webiny/react-composition\";\nimport { useFeature } from \"@webiny/app\";\nimport { PageListFeature } from \"~/presentation/pages/PageList/feature.js\";\n\n/**\n * Reads the list view model. Safe to call from any number of components: it performs no data\n * loading, so an extra consumer costs nothing.\n *\n * Loading belongs to `useDocumentListController`, which the list root calls exactly once. Keeping it\n * here would mean every consumer issued its own `listPages` request on mount.\n */\nexport const useDocumentList = makeDecoratableHook(() => {\n const { currentFolderId } = useNavigateFolder();\n const { filterPages: filterDocuments } = useFilterPages();\n const { presenter } = useFeature(PageListFeature);\n\n const params = useMemo(\n () => ({\n folderId: currentFolderId\n }),\n [currentFolderId]\n );\n\n /**\n * Stays here rather than in the controller: it is idempotent and makes no request, and child\n * effects run before the parent's - so a consumer would otherwise render one frame against an\n * uninitialized view model.\n */\n useEffect(() => {\n presenter.init(params);\n }, [params, presenter]);\n\n const [vm, setVm] = useState(presenter.vm);\n\n useEffect(() => {\n return autorun(() => {\n setVm(presenter.vm);\n });\n }, [presenter]);\n\n const showFilters = useCallback(\n (show: boolean) => {\n presenter.showFilters(show);\n\n // When set to false, it will also clear any applied document filters for the current folder.\n if (!show) {\n filterDocuments({}, currentFolderId);\n }\n },\n [presenter]\n );\n\n return {\n vm,\n showFilters\n };\n});\n\n/**\n * Owns the loading of the current folder. Must be called exactly once, by the list root - every call\n * site runs its own copy of the effect below, and each copy issues a `listPages` request.\n */\nexport const useDocumentListController = () => {\n const isFirstLoad = useRef(true);\n const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();\n const { listFoldersByParentIds } = useListFoldersByParentIds();\n const { loadPages: listDocuments } = useLoadPages();\n const { selectPages: selectDocuments } = useSelectPages();\n const { presenter } = useFeature(PageListFeature);\n const { vm } = useDocumentList();\n\n useEffect(() => {\n // The folders collection is empty, it must be the first render, let's load the full hierarchy.\n if (folders.length === 0) {\n loadFolderHierarchy(vm.folderId);\n } else {\n // Otherwise let's load only the current folder sub-tree\n listFoldersByParentIds([vm.folderId]);\n }\n\n // Close the filter list\n presenter.showFilters(false);\n\n // Unselect any selected items\n selectDocuments([]);\n\n // List all documents when the current folder changes.\n listDocuments({\n folderId: vm.folderId,\n resetSearch: !isFirstLoad.current\n });\n isFirstLoad.current = false;\n }, [vm.folderId]);\n};\n"],"names":["useDocumentList","makeDecoratableHook","currentFolderId","useNavigateFolder","filterDocuments","useFilterPages","presenter","useFeature","PageListFeature","params","useMemo","useEffect","vm","setVm","useState","autorun","showFilters","useCallback","show","useDocumentListController","isFirstLoad","useRef","folders","loadFolderHierarchy","useLoadFolderHierarchy","listFoldersByParentIds","useListFoldersByParentIds","listDocuments","useLoadPages","selectDocuments","useSelectPages"],"mappings":";;;;;;;;AAoBO,MAAMA,kBAAkBC,oBAAoB;IAC/C,MAAM,EAAEC,eAAe,EAAE,GAAGC;IAC5B,MAAM,EAAE,aAAaC,eAAe,EAAE,GAAGC;IACzC,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IAEjC,MAAMC,SAASC,QACX,IAAO;YACH,UAAUR;QACd,IACA;QAACA;KAAgB;IAQrBS,UAAU;QACNL,UAAU,IAAI,CAACG;IACnB,GAAG;QAACA;QAAQH;KAAU;IAEtB,MAAM,CAACM,IAAIC,MAAM,GAAGC,SAASR,UAAU,EAAE;IAEzCK,UAAU,IACCI,QAAQ;YACXF,MAAMP,UAAU,EAAE;QACtB,IACD;QAACA;KAAU;IAEd,MAAMU,cAAcC,YAChB,CAACC;QACGZ,UAAU,WAAW,CAACY;QAGtB,IAAI,CAACA,MACDd,gBAAgB,CAAC,GAAGF;IAE5B,GACA;QAACI;KAAU;IAGf,OAAO;QACHM;QACAI;IACJ;AACJ;AAMO,MAAMG,4BAA4B;IACrC,MAAMC,cAAcC,OAAO;IAC3B,MAAM,EAAEC,OAAO,EAAEC,mBAAmB,EAAE,GAAGC;IACzC,MAAM,EAAEC,sBAAsB,EAAE,GAAGC;IACnC,MAAM,EAAE,WAAWC,aAAa,EAAE,GAAGC;IACrC,MAAM,EAAE,aAAaC,eAAe,EAAE,GAAGC;IACzC,MAAM,EAAExB,SAAS,EAAE,GAAGC,WAAWC;IACjC,MAAM,EAAEI,EAAE,EAAE,GAAGZ;IAEfW,UAAU;QAEN,IAAIW,AAAmB,MAAnBA,QAAQ,MAAM,EACdC,oBAAoBX,GAAG,QAAQ;aAG/Ba,uBAAuB;YAACb,GAAG,QAAQ;SAAC;QAIxCN,UAAU,WAAW,CAAC;QAGtBuB,gBAAgB,EAAE;QAGlBF,cAAc;YACV,UAAUf,GAAG,QAAQ;YACrB,aAAa,CAACQ,YAAY,OAAO;QACrC;QACAA,YAAY,OAAO,GAAG;IAC1B,GAAG;QAACR,GAAG,QAAQ;KAAC;AACpB"}
|
|
@@ -3,10 +3,15 @@ import { Layout } from "./components/Layout/index.js";
|
|
|
3
3
|
import { Main } from "./components/Main/index.js";
|
|
4
4
|
import { Sidebar } from "./components/Sidebar/index.js";
|
|
5
5
|
import { DocumentListPresenterProvider } from "./presenters/DocumentListPresenterContext.js";
|
|
6
|
-
|
|
6
|
+
import { useDocumentListController } from "./useDocumentList.js";
|
|
7
|
+
const DocumentListContent = ()=>{
|
|
8
|
+
useDocumentListController();
|
|
9
|
+
return /*#__PURE__*/ react.createElement(Layout, {
|
|
7
10
|
main: /*#__PURE__*/ react.createElement(Main, null),
|
|
8
11
|
sidebar: /*#__PURE__*/ react.createElement(Sidebar, null)
|
|
9
|
-
})
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
const DocumentList = ()=>/*#__PURE__*/ react.createElement(DocumentListPresenterProvider, null, /*#__PURE__*/ react.createElement(DocumentListContent, null));
|
|
10
15
|
export { DocumentList };
|
|
11
16
|
|
|
12
17
|
//# sourceMappingURL=DocumentList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules/redirects/RedirectsList/DocumentList.js","sources":["../../../../src/modules/redirects/RedirectsList/DocumentList.tsx"],"sourcesContent":["import React from \"react\";\nimport { Layout } from \"~/modules/redirects/RedirectsList/components/Layout/index.js\";\nimport { Main } from \"~/modules/redirects/RedirectsList/components/Main/index.js\";\nimport { Sidebar } from \"~/modules/redirects/RedirectsList/components/Sidebar/index.js\";\nimport { DocumentListPresenterProvider } from \"~/modules/redirects/RedirectsList/presenters/DocumentListPresenterContext.js\";\n\
|
|
1
|
+
{"version":3,"file":"modules/redirects/RedirectsList/DocumentList.js","sources":["../../../../src/modules/redirects/RedirectsList/DocumentList.tsx"],"sourcesContent":["import React from \"react\";\nimport { Layout } from \"~/modules/redirects/RedirectsList/components/Layout/index.js\";\nimport { Main } from \"~/modules/redirects/RedirectsList/components/Main/index.js\";\nimport { Sidebar } from \"~/modules/redirects/RedirectsList/components/Sidebar/index.js\";\nimport { DocumentListPresenterProvider } from \"~/modules/redirects/RedirectsList/presenters/DocumentListPresenterContext.js\";\nimport { useDocumentListController } from \"~/modules/redirects/RedirectsList/useDocumentList.js\";\n\n/**\n * Separate component because the controller reads the presenter from context, so it has to run\n * below the provider.\n */\nconst DocumentListContent = () => {\n useDocumentListController();\n\n return <Layout main={<Main />} sidebar={<Sidebar />} />;\n};\n\nexport const DocumentList = () => {\n return (\n <DocumentListPresenterProvider>\n <DocumentListContent />\n </DocumentListPresenterProvider>\n );\n};\n"],"names":["DocumentListContent","useDocumentListController","Layout","Main","Sidebar","DocumentList","DocumentListPresenterProvider"],"mappings":";;;;;;AAWA,MAAMA,sBAAsB;IACxBC;IAEA,OAAO,WAAP,GAAO,oBAACC,QAAMA;QAAC,oBAAM,oBAACC,MAAIA;QAAK,uBAAS,oBAACC,SAAOA;;AACpD;AAEO,MAAMC,eAAe,IACjB,WAAP,GACI,oBAACC,+BAA6BA,MAAAA,WAAAA,GAC1B,oBAACN,qBAAmBA"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads the list view model. Safe to call from any number of components: it performs no data
|
|
3
|
+
* loading, so an extra consumer costs nothing.
|
|
4
|
+
*
|
|
5
|
+
* Loading belongs to `useDocumentListController`, which the list root calls exactly once. Keeping it
|
|
6
|
+
* here would mean every consumer issued its own `listRedirects` request on mount - Apollo's query
|
|
7
|
+
* deduplication collapses those into a single network request, so the cost is invisible rather than
|
|
8
|
+
* absent.
|
|
9
|
+
*/
|
|
1
10
|
export declare const useDocumentList: () => {
|
|
2
11
|
vm: {
|
|
3
12
|
folderId: string;
|
|
@@ -20,3 +29,8 @@ export declare const useDocumentList: () => {
|
|
|
20
29
|
};
|
|
21
30
|
showFilters: (show: boolean) => void;
|
|
22
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* Owns the loading of the current folder. Must be called exactly once, by the list root - every call
|
|
34
|
+
* site runs its own copy of the effect below, and each copy issues a `listRedirects` request.
|
|
35
|
+
*/
|
|
36
|
+
export declare const useDocumentListController: () => void;
|
|
@@ -5,13 +5,8 @@ import { useDocumentListPresenter } from "./presenters/DocumentListPresenterCont
|
|
|
5
5
|
import { useFilterRedirects, useLoadRedirects } from "../../../features/redirects/index.js";
|
|
6
6
|
import { useSelectRedirects } from "../../../features/redirects/selectRedirects/useSelectRedirects.js";
|
|
7
7
|
const useDocumentList = ()=>{
|
|
8
|
-
const isFirstLoad = useRef(true);
|
|
9
|
-
const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();
|
|
10
|
-
const { listFoldersByParentIds } = useListFoldersByParentIds();
|
|
11
8
|
const { currentFolderId } = useNavigateFolder();
|
|
12
|
-
const { loadRedirects: listDocuments } = useLoadRedirects();
|
|
13
9
|
const { filterRedirects: filterDocuments } = useFilterRedirects();
|
|
14
|
-
const { selectRedirects: selectDocuments } = useSelectRedirects();
|
|
15
10
|
const presenter = useDocumentListPresenter();
|
|
16
11
|
const params = useMemo(()=>({
|
|
17
12
|
folderId: currentFolderId
|
|
@@ -36,6 +31,19 @@ const useDocumentList = ()=>{
|
|
|
36
31
|
}, [
|
|
37
32
|
presenter
|
|
38
33
|
]);
|
|
34
|
+
return {
|
|
35
|
+
vm,
|
|
36
|
+
showFilters
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const useDocumentListController = ()=>{
|
|
40
|
+
const isFirstLoad = useRef(true);
|
|
41
|
+
const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();
|
|
42
|
+
const { listFoldersByParentIds } = useListFoldersByParentIds();
|
|
43
|
+
const { loadRedirects: listDocuments } = useLoadRedirects();
|
|
44
|
+
const { selectRedirects: selectDocuments } = useSelectRedirects();
|
|
45
|
+
const presenter = useDocumentListPresenter();
|
|
46
|
+
const { vm } = useDocumentList();
|
|
39
47
|
useEffect(()=>{
|
|
40
48
|
if (0 === folders.length) loadFolderHierarchy(vm.folderId);
|
|
41
49
|
else listFoldersByParentIds([
|
|
@@ -51,11 +59,7 @@ const useDocumentList = ()=>{
|
|
|
51
59
|
}, [
|
|
52
60
|
vm.folderId
|
|
53
61
|
]);
|
|
54
|
-
return {
|
|
55
|
-
vm,
|
|
56
|
-
showFilters
|
|
57
|
-
};
|
|
58
62
|
};
|
|
59
|
-
export { useDocumentList };
|
|
63
|
+
export { useDocumentList, useDocumentListController };
|
|
60
64
|
|
|
61
65
|
//# sourceMappingURL=useDocumentList.js.map
|