@raketa-cloud/admin 0.0.6 → 0.0.8

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.
Files changed (114) hide show
  1. package/package.json +3 -2
  2. package/src/Adapter.js +1 -1
  3. package/src/cloud/ChangePageURL.js +24 -0
  4. package/src/cloud/ClonesPage.js +14 -0
  5. package/src/cloud/DeletePage.js +35 -0
  6. package/src/cloud/PageChanges.js +15 -0
  7. package/src/cloud/PageRevisions.js +135 -0
  8. package/src/cloud/PageTranslations.js +22 -0
  9. package/src/cloud/Pages.js +63 -0
  10. package/src/cloud/RaketaClient.js +118 -0
  11. package/src/cloud/Redirects.js +81 -0
  12. package/src/cloud/RevertPageRevision.js +18 -0
  13. package/src/cloud/Settings.js +30 -0
  14. package/src/cloud/Tags.js +80 -0
  15. package/src/cloud/documents/articlesDocuments.js +608 -0
  16. package/src/cloud/documents/categoryDocuments.js +64 -0
  17. package/src/cloud/documents/common.js +84 -0
  18. package/src/cloud/documents/pagesDocuments.js +245 -0
  19. package/src/cloud/documents/redirectsDocuments.js +82 -0
  20. package/src/cloud/documents/settingsDocuments.js +23 -0
  21. package/src/cloud/documents/tagsDocuments.js +63 -0
  22. package/src/handlers/PageCloneHandler.js +17 -0
  23. package/src/handlers/PageCloneHandler.test/create.test.js +55 -0
  24. package/src/handlers/PageDeleteHandler.js +68 -0
  25. package/src/handlers/PageDeleteHandler.test/create.test.js +112 -0
  26. package/src/handlers/PageDeleteHandler.test/create_form.test.js +54 -0
  27. package/src/handlers/PageRevisionsCodesHandler.js +83 -0
  28. package/src/handlers/PageRevisionsCodesHandler.test/edit_form.test.js +56 -0
  29. package/src/handlers/PageRevisionsCodesHandler.test/update.test.js +137 -0
  30. package/src/handlers/PageRevisionsGeneralHandler.js +86 -0
  31. package/src/handlers/PageRevisionsGeneralHandler.test/edit_form.test.js +62 -0
  32. package/src/handlers/PageRevisionsGeneralHandler.test/update.test.js +147 -0
  33. package/src/handlers/PageRevisionsHandler.js +47 -0
  34. package/src/handlers/PageRevisionsHandler.test/create.test.js +67 -0
  35. package/src/handlers/PageRevisionsHandler.test/destroy.test.js +54 -0
  36. package/src/handlers/PageRevisionsLockHandler.js +54 -0
  37. package/src/handlers/PageRevisionsMetaHandler.js +83 -0
  38. package/src/handlers/PageRevisionsMetaHandler.test/edit_form.test.js +57 -0
  39. package/src/handlers/PageRevisionsMetaHandler.test/update.test.js +141 -0
  40. package/src/handlers/PageRevisionsTagsHandler.js +80 -0
  41. package/src/handlers/PageRevisionsTagsHandler.test/edit_form.test.js +69 -0
  42. package/src/handlers/PageRevisionsTagsHandler.test/update.test.js +141 -0
  43. package/src/handlers/PageRevisionsUnlockHandler.js +22 -0
  44. package/src/handlers/PageRevisionsVisualsHandler.js +77 -0
  45. package/src/handlers/PageRevisionsVisualsHandler.test/edit_form.test.js +55 -0
  46. package/src/handlers/PageRevisionsVisualsHandler.test/update.test.js +129 -0
  47. package/src/handlers/PageRevisionsWidgetsHandler.js +41 -0
  48. package/src/handlers/PageRevisionsWidgetsHandler.test/show.test.js +47 -0
  49. package/src/handlers/PageRevisionsWidgetsHandler.test/update.test.js +104 -0
  50. package/src/handlers/PageTranslationsHandler.js +91 -0
  51. package/src/handlers/PageURLsHandler.js +69 -0
  52. package/src/handlers/PageURLsHandler.test/create.test.js +157 -0
  53. package/src/handlers/PageURLsHandler.test/create_form.test.js +51 -0
  54. package/src/handlers/PagesHandler.js +114 -0
  55. package/src/handlers/PagesHandler.test/create.test.js +140 -0
  56. package/src/handlers/PagesHandler.test/create_form.test.js +41 -0
  57. package/src/handlers/PagesHandler.test/index.test.js +49 -0
  58. package/src/handlers/PagesHandler.test/show.test.js +103 -0
  59. package/src/handlers/PublishPageRevisionHandler.js +84 -0
  60. package/src/handlers/PublishPageRevisionHandler.test/create.test.js +136 -0
  61. package/src/handlers/PublishPageRevisionHandler.test/create_form.test.js +47 -0
  62. package/src/handlers/RedirectsHandler.js +124 -0
  63. package/src/handlers/RedirectsHandler.test/create.test.js +84 -0
  64. package/src/handlers/RedirectsHandler.test/create_form.test.js +29 -0
  65. package/src/handlers/RedirectsHandler.test/destroy.test.js +54 -0
  66. package/src/handlers/RedirectsHandler.test/edit_form.test.js +38 -0
  67. package/src/handlers/RedirectsHandler.test/index.test.js +42 -0
  68. package/src/handlers/RedirectsHandler.test/show.test.js +41 -0
  69. package/src/handlers/RedirectsHandler.test/update.test.js +89 -0
  70. package/src/handlers/RevertPageRevisionHandler.js +26 -0
  71. package/src/handlers/RevertPageRevisionHandler.test/create.test.js +80 -0
  72. package/src/handlers/SettingsGeneralHandler.js +13 -0
  73. package/src/handlers/SettingsLayoutHandler.js +51 -0
  74. package/src/handlers/SettingsMetaHandler.js +52 -0
  75. package/src/handlers/TagsHandler.js +113 -0
  76. package/src/helpers/FormBuilder.js +12 -4
  77. package/src/index.js +33 -0
  78. package/src/setupAuthentication.js +3 -0
  79. package/src/styles/application.css +55 -19
  80. package/src/views/layouts/application.ejs +30 -31
  81. package/src/views/layouts/header.ejs +6 -7
  82. package/src/views/page_deletes/create_form.ejs +55 -0
  83. package/src/views/page_lock/create_form.ejs +35 -0
  84. package/src/views/page_publish/_form.ejs +57 -0
  85. package/src/views/page_publish/create_form.ejs +11 -0
  86. package/src/views/page_revisions/_nav.ejs +40 -0
  87. package/src/views/page_revisions/codes/edit_form.ejs +39 -0
  88. package/src/views/page_revisions/general/edit_form.ejs +69 -0
  89. package/src/views/page_revisions/meta/edit_form.ejs +41 -0
  90. package/src/views/page_revisions/tags/edit_form.ejs +64 -0
  91. package/src/views/page_revisions/visuals/edit_form.ejs +42 -0
  92. package/src/views/page_translations/_form.ejs +76 -0
  93. package/src/views/page_translations/create_form.ejs +11 -0
  94. package/src/views/page_urls/create_form.ejs +31 -0
  95. package/src/views/pages/_form.ejs +84 -0
  96. package/src/views/pages/create_form.ejs +9 -0
  97. package/src/views/pages/edit_form.ejs +3 -0
  98. package/src/views/pages/index.ejs +161 -0
  99. package/src/views/pages/show.ejs +281 -0
  100. package/src/views/redirects/_form.ejs +40 -0
  101. package/src/views/redirects/create_form.ejs +9 -0
  102. package/src/views/redirects/edit_form.ejs +9 -0
  103. package/src/views/redirects/index.ejs +75 -1
  104. package/src/views/redirects/show.ejs +60 -0
  105. package/src/views/settings/_nav.ejs +28 -0
  106. package/src/views/settings/general/edit_form.ejs +26 -0
  107. package/src/views/settings/layout/edit_form.ejs +22 -0
  108. package/src/views/settings/meta/edit_form.ejs +38 -0
  109. package/src/views/tags/_form.ejs +39 -0
  110. package/src/views/tags/create_form.ejs +9 -0
  111. package/src/views/tags/edit_form.ejs +9 -0
  112. package/src/views/tags/index.ejs +43 -0
  113. package/test/factory.js +91 -0
  114. package/test/handlersHelper.js +9 -0
@@ -0,0 +1,84 @@
1
+ import { gql } from "graphql-request";
2
+
3
+ export function pageTypeFragment() {
4
+ return gql`
5
+ {
6
+ id
7
+ slug
8
+ title
9
+ }
10
+ `;
11
+ }
12
+
13
+ export function tagFragment() {
14
+ return gql`
15
+ {
16
+ id
17
+ name
18
+ slug
19
+ }
20
+ `;
21
+ }
22
+
23
+ export function paginationFragment() {
24
+ return gql`
25
+ {
26
+ currentPage
27
+ pagesCount
28
+ entriesCount
29
+ pageSize
30
+ }
31
+ `;
32
+ }
33
+
34
+ export function errorsFragment() {
35
+ return gql`
36
+ {
37
+ key
38
+ message
39
+ codes {
40
+ key
41
+ placeholders
42
+ }
43
+ }
44
+ `;
45
+ }
46
+
47
+ export function revisionMetaFragment() {
48
+ return gql`
49
+ {
50
+ id
51
+ title
52
+ description
53
+ operator
54
+ operatorMeta
55
+ locked
56
+ lockMessage
57
+ }
58
+ `;
59
+ }
60
+
61
+ export function revisionFragment() {
62
+ return gql`
63
+ {
64
+ id
65
+ title
66
+ slug
67
+ settings
68
+ widgets
69
+ visibility
70
+ }
71
+ `;
72
+ }
73
+
74
+ export function categoryFragment() {
75
+ return gql`
76
+ {
77
+ id
78
+ type
79
+ slug
80
+ name
81
+ settings
82
+ }
83
+ `;
84
+ }
@@ -0,0 +1,245 @@
1
+ import { gql } from "graphql-request";
2
+ import {
3
+ categoryFragment,
4
+ errorsFragment,
5
+ pageTypeFragment,
6
+ paginationFragment,
7
+ revisionMetaFragment,
8
+ tagFragment,
9
+ } from "./common";
10
+
11
+ function pageFragment() {
12
+ return gql`
13
+ {
14
+ id
15
+ slug
16
+ title
17
+ widgets
18
+ settings
19
+ visibility
20
+ originalId
21
+ translations
22
+ revisionsCount
23
+ tags ${tagFragment()}
24
+ pageType ${pageTypeFragment()}
25
+ categories ${categoryFragment()}
26
+ }
27
+ `;
28
+ }
29
+
30
+ function pageRevisionFragment() {
31
+ return gql`
32
+ {
33
+ id
34
+ slug
35
+ title
36
+ widgets
37
+ settings
38
+ visibility
39
+ originalId
40
+ insertedAt
41
+ tags ${tagFragment()}
42
+ pageType ${pageTypeFragment()}
43
+ meta ${revisionMetaFragment()}
44
+ categories ${categoryFragment()}
45
+ }
46
+ `;
47
+ }
48
+
49
+ const PageByIdDocument = gql`
50
+ query PageByID($input: IdInput!) {
51
+ page(input: $input) ${pageFragment()}
52
+ }
53
+ `;
54
+
55
+ const PageChangesDocument = gql`
56
+ query PageChanges($input: IdInput!) {
57
+ pageChanges(input: $input) {
58
+ list {
59
+ version
60
+ title
61
+ description
62
+ operator
63
+ operatorMeta
64
+ source
65
+ insertedAt
66
+ }
67
+ }
68
+ }
69
+ `;
70
+
71
+ const PagesDocument = gql`
72
+ query Pages($input: PagesInput!) {
73
+ pages(input: $input) {
74
+ list ${pageFragment()}
75
+ pagination ${paginationFragment()}
76
+ }
77
+ }
78
+ `;
79
+
80
+ const CreatePageDocument = gql`
81
+ mutation CreatePage($input: CreatePageInput!) {
82
+ createPage(input: $input) {
83
+ page ${pageFragment()}
84
+ errors ${errorsFragment()}
85
+ }
86
+ }
87
+ `;
88
+
89
+ const UpdatePageDocument = gql`
90
+ mutation UpdatePage($input: UpdatePageInput!) {
91
+ updatePage(input: $input) {
92
+ page ${pageFragment()}
93
+ errors ${errorsFragment()}
94
+ }
95
+ }
96
+ `;
97
+
98
+ const UpdatePageWidgetsDocument = gql`
99
+ mutation updatePageWidgets($input: UpdatePageWidgetsInput!) {
100
+ updatePageWidgets(input: $input) {
101
+ page ${pageFragment()}
102
+ errors ${errorsFragment()}
103
+ }
104
+ }
105
+ `;
106
+
107
+ const ClonePageDocument = gql`
108
+ mutation ClonePage($input: IdInput!) {
109
+ clonePage(input: $input) {
110
+ page ${pageFragment()}
111
+ errors ${errorsFragment()}
112
+ }
113
+ }
114
+ `;
115
+
116
+ const DeletePageDocument = gql`
117
+ mutation DeletePage($input: PageDeleteInput!) {
118
+ deletePage(input: $input) {
119
+ page ${pageFragment()}
120
+ errors ${errorsFragment()}
121
+ }
122
+ }
123
+ `;
124
+
125
+ const PageAndSiteDocument = gql`
126
+ query PageAndSite($input: SlugInput!) {
127
+ pageAndSite(input: $input) {
128
+ id
129
+ slug
130
+ title
131
+ widgets
132
+ settings
133
+ visibility
134
+ originalId
135
+ translations
136
+ tags ${tagFragment()}
137
+ pageType ${pageTypeFragment()}
138
+ categories ${categoryFragment()}
139
+ websiteSettings
140
+ }
141
+ }
142
+ `;
143
+
144
+ const TranslatePageDocument = gql`
145
+ mutation TranslatePage($input: TranslatePageInput!) {
146
+ translatePage(input: $input) {
147
+ page ${pageFragment()}
148
+ errors ${errorsFragment()}
149
+ }
150
+ }
151
+ `;
152
+
153
+ const PageRevisionsDocument = gql`
154
+ query PageRevisions($input: IdInput!) {
155
+ pageRevisions(input: $input) {
156
+ list ${pageRevisionFragment()}
157
+ }
158
+ }
159
+ `;
160
+
161
+ const PageRevisionDocument = gql`
162
+ query PageRevision($input: IdInput!) {
163
+ pageRevision(input: $input) ${pageRevisionFragment()}
164
+ }
165
+ `;
166
+
167
+ const StartPageRevisionDocument = gql`
168
+ mutation StartPageRevision($input: StartPageRevisionInput!) {
169
+ startPageRevision(input: $input) {
170
+ revision ${pageRevisionFragment()}
171
+ errors ${errorsFragment()}
172
+ pageErrors ${errorsFragment()}
173
+ }
174
+ }
175
+ `;
176
+
177
+ const MergePageRevisionDocument = gql`
178
+ mutation MergePageRevision($input: MergePageRevisionInput!) {
179
+ mergePageRevision(input: $input) {
180
+ page ${pageFragment()}
181
+ errors ${errorsFragment()}
182
+ }
183
+ }
184
+ `;
185
+
186
+ const ChangePageSlugDocument = gql`
187
+ mutation ($input: ChangePageSlugInput!) {
188
+ changePageSlug(input: $input) {
189
+ page ${pageFragment()}
190
+ errors ${errorsFragment()}
191
+ }
192
+ }
193
+ `;
194
+
195
+ const ReopenPageChangeDocument = gql`
196
+ mutation($input: ReopenPageChangeInput!)
197
+ {
198
+ reopenPageChange(input: $input) {
199
+ revision ${pageRevisionFragment()}
200
+ errors ${errorsFragment()}
201
+ pageErrors ${errorsFragment()}
202
+ }
203
+ }
204
+ `;
205
+
206
+ const LockPageRevisionDocument = gql`
207
+ mutation LockPageRevision($input: LockPageRevisionInput!) {
208
+ lockPageRevision(input: $input) {
209
+ revision ${pageRevisionFragment()}
210
+ errors ${errorsFragment()}
211
+ pageErrors ${errorsFragment()}
212
+ }
213
+ }
214
+ `;
215
+
216
+ const UnlockPageRevisionDocument = gql`
217
+ mutation UnlockPageRevision($input: UnlockPageRevisionInput!) {
218
+ unlockPageRevision(input: $input) {
219
+ revision ${pageRevisionFragment()}
220
+ errors ${errorsFragment()}
221
+ pageErrors ${errorsFragment()}
222
+ }
223
+ }
224
+ `;
225
+
226
+ export {
227
+ PageByIdDocument,
228
+ PagesDocument,
229
+ CreatePageDocument,
230
+ UpdatePageDocument,
231
+ UpdatePageWidgetsDocument,
232
+ ClonePageDocument,
233
+ DeletePageDocument,
234
+ PageAndSiteDocument,
235
+ TranslatePageDocument,
236
+ PageRevisionDocument,
237
+ PageRevisionsDocument,
238
+ StartPageRevisionDocument,
239
+ MergePageRevisionDocument,
240
+ PageChangesDocument,
241
+ ChangePageSlugDocument,
242
+ ReopenPageChangeDocument,
243
+ LockPageRevisionDocument,
244
+ UnlockPageRevisionDocument,
245
+ };
@@ -0,0 +1,82 @@
1
+ import { gql } from "graphql-request";
2
+ import { errorsFragment, paginationFragment } from "./common";
3
+
4
+ function redirectFragment() {
5
+ return gql`
6
+ {
7
+ id
8
+ url
9
+ destination
10
+ httpResponseCode
11
+ note
12
+ updatedAt
13
+ createdAt
14
+ }
15
+ `;
16
+ }
17
+
18
+ const RedirectsDocument = gql`
19
+ query Redirects($input: RedirectsInput) {
20
+ redirects(input: $input) {
21
+ list ${redirectFragment()}
22
+ pagination ${paginationFragment()}
23
+ }
24
+ }
25
+ `;
26
+
27
+ const RedirectByIdDocument = gql`
28
+ query RedirectByID($input: SimpleIdInput!) {
29
+ redirect(input: $input) ${redirectFragment()}
30
+ }
31
+ `;
32
+
33
+ const CreateRedirectDocument = gql`
34
+ mutation CreateRedirect($input: CreateRedirectInput!) {
35
+ createRedirect(input: $input) {
36
+ redirect ${redirectFragment()}
37
+ errors ${errorsFragment()}
38
+ }
39
+ }
40
+ `;
41
+
42
+ const UpdateRedirectDocument = gql`
43
+ mutation UpdateRedirect($input: UpdateRedirectInput!) {
44
+ updateRedirect(input: $input) {
45
+ redirect ${redirectFragment()}
46
+ errors ${errorsFragment()}
47
+ }
48
+ }
49
+ `;
50
+
51
+ const DeleteRedirectDocument = gql`
52
+ mutation DeleteRedirect($input: SimpleIdInput!) {
53
+ deleteRedirect(input: $input) {
54
+ redirect ${redirectFragment()}
55
+ errors ${errorsFragment()}
56
+ }
57
+ }
58
+ `;
59
+
60
+ const RedirectChangesDocument = gql`
61
+ query RedirectChanges($input: IdInput!) {
62
+ redirectChanges(input: $input) {
63
+ list {
64
+ version
65
+ title
66
+ description
67
+ operator
68
+ operatorMeta
69
+ insertedAt
70
+ }
71
+ }
72
+ }
73
+ `;
74
+
75
+ export {
76
+ RedirectsDocument,
77
+ RedirectByIdDocument,
78
+ CreateRedirectDocument,
79
+ UpdateRedirectDocument,
80
+ DeleteRedirectDocument,
81
+ RedirectChangesDocument,
82
+ };
@@ -0,0 +1,23 @@
1
+ import { gql } from "graphql-request";
2
+ import { errorsFragment } from "./common";
3
+
4
+ const SettingDocument = gql`
5
+ query Setting($locale: String!) {
6
+ setting(locale: $locale) {
7
+ value
8
+ }
9
+ }
10
+ `;
11
+
12
+ const UpdateSettingDocument = gql`
13
+ mutation updateSetting($input: UpdateSettingInput!) {
14
+ updateSetting(input: $input) {
15
+ setting {
16
+ value
17
+ }
18
+ errors ${errorsFragment()}
19
+ }
20
+ }
21
+ `;
22
+
23
+ export { SettingDocument, UpdateSettingDocument };
@@ -0,0 +1,63 @@
1
+ import { gql } from "graphql-request";
2
+ import { errorsFragment, paginationFragment } from "./common";
3
+
4
+ function tagFragment() {
5
+ return gql`
6
+ {
7
+ id
8
+ slug
9
+ name
10
+ }
11
+ `;
12
+ }
13
+
14
+ const TagsDocument = gql`
15
+ query Tags($input: TagsInput!) {
16
+ tags(input: $input) {
17
+ list ${tagFragment()}
18
+ pagination ${paginationFragment()}
19
+ }
20
+ }
21
+ `;
22
+
23
+ const CreateTagDocument = gql`
24
+ mutation CreateTag($input: CreateTagInput!) {
25
+ createTag(input: $input) {
26
+ tag ${tagFragment()}
27
+ errors ${errorsFragment()}
28
+
29
+ }
30
+ }
31
+ `;
32
+
33
+ const UpdateTagDocument = gql`
34
+ mutation UpdateTag($input: UpdateTagInput!) {
35
+ updateTag(input: $input) {
36
+ tag ${tagFragment()}
37
+ errors ${errorsFragment()}
38
+ }
39
+ }
40
+ `;
41
+
42
+ const DeleteTagDocument = gql`
43
+ mutation DeleteTag($input: IdInput!) {
44
+ deleteTag(input: $input) {
45
+ tag ${tagFragment()}
46
+ errors ${errorsFragment()}
47
+ }
48
+ }
49
+ `;
50
+
51
+ const TagByIdDocument = gql`
52
+ query TagByID($input: IdInput!) {
53
+ tag(input: $input) ${tagFragment()}
54
+ }
55
+ `;
56
+
57
+ export {
58
+ TagsDocument,
59
+ CreateTagDocument,
60
+ UpdateTagDocument,
61
+ DeleteTagDocument,
62
+ TagByIdDocument,
63
+ };
@@ -0,0 +1,17 @@
1
+ const create = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const { errors } = await ctx.client.clonePage.clone(parent_id, ctx.locale);
5
+
6
+ if (errors) {
7
+ throw new Error(`Error cloning page: ${JSON.stringify(errors)}`);
8
+ }
9
+
10
+ return {
11
+ redirect: `/${ctx.locale}/pages`,
12
+ };
13
+ };
14
+
15
+ export default {
16
+ create,
17
+ };
@@ -0,0 +1,55 @@
1
+ import ClonesPage from "../../cloud/ClonesPage";
2
+ import PageCloneHandler from "../PageCloneHandler";
3
+
4
+ import Factory from "../../../../../apps/admin/test/factory";
5
+ import { testConfig } from "../../../../../apps/admin/test/handlersHelper";
6
+
7
+ function buildCtx(page) {
8
+ return {
9
+ client: {
10
+ clonePage: new ClonesPage(testConfig, "token"),
11
+ },
12
+ params: { parent_id: page.id },
13
+ locale: "en",
14
+ };
15
+ }
16
+
17
+ describe("Clone page", () => {
18
+ test("clone successful", async () => {
19
+ const page = Factory.build("page");
20
+ const ctx = buildCtx(page);
21
+
22
+ const mockClone = jest
23
+ .spyOn(ctx.client.clonePage, "clone")
24
+ .mockImplementation(() => page);
25
+
26
+ const result = await PageCloneHandler.create(ctx);
27
+
28
+ expect(mockClone).toHaveBeenCalledWith(page.id, "en");
29
+
30
+ expect(result).toEqual({
31
+ redirect: "/en/pages",
32
+ });
33
+ });
34
+
35
+ test("clone failed", async () => {
36
+ const page = Factory.build("page");
37
+
38
+ const ctx = buildCtx(page);
39
+
40
+ const mockClone = jest
41
+ .spyOn(ctx.client.clonePage, "clone")
42
+ .mockImplementation(() => ({
43
+ page: null,
44
+ errors: [{ key: "generalError", message: "some error" }],
45
+ }));
46
+
47
+ expect(async () => {
48
+ await PageCloneHandler.create(ctx);
49
+ }).rejects.toThrow(
50
+ `Error cloning page: ${JSON.stringify([{ key: "generalError", message: "some error" }])}`
51
+ );
52
+
53
+ expect(mockClone).toHaveBeenCalledWith(page.id, "en");
54
+ });
55
+ });
@@ -0,0 +1,68 @@
1
+ const create_form = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+ const page = await ctx.client.pages.find(parent_id, ctx.locale);
4
+
5
+ if (!page) {
6
+ throw new Error(`Missing page #${parent_id}`);
7
+ }
8
+
9
+ return {
10
+ assigns: {
11
+ deleteAction: {
12
+ id: page.id,
13
+ redirect: "",
14
+ },
15
+ errors: {},
16
+ _translations: [],
17
+ },
18
+ };
19
+ };
20
+
21
+ const create = async (ctx) => {
22
+ const { parent_id } = ctx.params;
23
+ const params = ctx.resourceParams.deleteAction;
24
+ const page = await ctx.client.pages.find(parent_id, ctx.locale);
25
+
26
+ if (!page) {
27
+ throw new Error(`Missing page #${parent_id}`);
28
+ }
29
+
30
+ let redirect = null;
31
+
32
+ if (params.redirect === "301" || params.redirect === "410") {
33
+ redirect = {
34
+ // TODO: fix url with consideration of locale & defaultLocale in the frontend project
35
+ url: `/${page.slug}`,
36
+ destination: params.redirect === "301" ? params.destination : "/",
37
+ httpResponseCode: Number.parseInt(params.redirect, 10),
38
+ note: "Created via page deletion process",
39
+ };
40
+ }
41
+
42
+ const { errors } = await ctx.client.deletePage.delete(
43
+ page.id,
44
+ ctx.locale,
45
+ redirect
46
+ );
47
+
48
+ if (errors) {
49
+ return {
50
+ assigns: {
51
+ deleteAction: { ...params, id: page.id },
52
+ errors: {
53
+ deleteAction: ctx.client.deletePage.formatErrors(errors, "redirect"),
54
+ },
55
+ _translations: [],
56
+ },
57
+ };
58
+ }
59
+
60
+ return {
61
+ redirect: `/${ctx.locale}/pages`,
62
+ };
63
+ };
64
+
65
+ export default {
66
+ create_form,
67
+ create,
68
+ };