@raketa-cloud/admin 0.0.14 → 0.0.16

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 (141) hide show
  1. package/package.json +1 -1
  2. package/src/cloud/ArticleChanges.js +15 -0
  3. package/src/cloud/ArticleRevisions.js +152 -0
  4. package/src/cloud/Articles.js +133 -0
  5. package/src/cloud/EventChanges.js +15 -0
  6. package/src/cloud/EventRevisions.js +149 -0
  7. package/src/cloud/Events.js +135 -0
  8. package/src/cloud/documents/articlesDocuments.js +109 -469
  9. package/src/cloud/documents/common.js +20 -0
  10. package/src/cloud/documents/eventsDocuments.js +254 -0
  11. package/src/handlers/article_revisions/ArticleRevisionsHandler.js +49 -0
  12. package/src/handlers/article_revisions/CodeHandler.js +90 -0
  13. package/src/handlers/article_revisions/GeneralHandler.js +95 -0
  14. package/src/handlers/article_revisions/LocksHandler.js +54 -0
  15. package/src/handlers/article_revisions/MetaHandler.js +90 -0
  16. package/src/handlers/article_revisions/PublishesHandler.js +90 -0
  17. package/src/handlers/article_revisions/RevertsHandler.js +28 -0
  18. package/src/handlers/article_revisions/TagHandler.js +89 -0
  19. package/src/handlers/article_revisions/UnlocksHandler.js +22 -0
  20. package/src/handlers/article_revisions/VisualHandler.js +84 -0
  21. package/src/handlers/article_revisions/WidgetHandler.js +47 -0
  22. package/src/handlers/articles/ArticlesHandler.js +119 -0
  23. package/src/handlers/articles/ClonesHandler.js +17 -0
  24. package/src/handlers/articles/DeletesHandler.js +68 -0
  25. package/src/handlers/articles/TranslationsHandler.js +103 -0
  26. package/src/handlers/articles/URLsHandler.js +71 -0
  27. package/src/handlers/event_revisions/CodeHandler.js +86 -0
  28. package/src/handlers/event_revisions/EventRevisionsHandler.js +47 -0
  29. package/src/handlers/event_revisions/GeneralHandler.js +93 -0
  30. package/src/handlers/event_revisions/LocksHandler.js +51 -0
  31. package/src/handlers/event_revisions/MetaHandler.js +86 -0
  32. package/src/handlers/event_revisions/PublishesHandler.js +84 -0
  33. package/src/handlers/event_revisions/RevertsHandler.js +26 -0
  34. package/src/handlers/event_revisions/TagHandler.js +85 -0
  35. package/src/handlers/event_revisions/UnlocksHandler.js +22 -0
  36. package/src/handlers/event_revisions/VisualHandler.js +80 -0
  37. package/src/handlers/event_revisions/WidgetHandler.js +41 -0
  38. package/src/handlers/events/ClonesHandler.js +17 -0
  39. package/src/handlers/events/DeletesHandler.js +68 -0
  40. package/src/handlers/events/EventsHandler.js +121 -0
  41. package/src/handlers/events/TranslationsHandler.js +99 -0
  42. package/src/handlers/events/URLsHandler.js +71 -0
  43. package/src/handlers/pages/PagesHandler.js +4 -2
  44. package/src/handlers/pages/TranslationsHandler.js +7 -5
  45. package/src/index.js +44 -0
  46. package/src/routeArticles.js +65 -0
  47. package/src/routeEvents.js +55 -0
  48. package/src/routeStandard.js +4 -0
  49. package/src/setupCloud.js +24 -0
  50. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +56 -0
  51. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +139 -0
  52. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +65 -0
  53. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +150 -0
  54. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +57 -0
  55. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +143 -0
  56. package/src/tests/handlers/article_revisions/PageRevisionsHandler.test/create.test.js +75 -0
  57. package/src/tests/handlers/article_revisions/PageRevisionsHandler.test/destroy.test.js +53 -0
  58. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +136 -0
  59. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +47 -0
  60. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +80 -0
  61. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +69 -0
  62. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +143 -0
  63. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
  64. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +131 -0
  65. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +46 -0
  66. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +103 -0
  67. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +144 -0
  68. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +41 -0
  69. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +49 -0
  70. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +105 -0
  71. package/src/tests/handlers/articles/ConesHandler.test/create.test.js +54 -0
  72. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +110 -0
  73. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +54 -0
  74. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +155 -0
  75. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +51 -0
  76. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +56 -0
  77. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +143 -0
  78. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +69 -0
  79. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +158 -0
  80. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +57 -0
  81. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +147 -0
  82. package/src/tests/handlers/event_revisions/PageRevisionsHandler.test/create.test.js +75 -0
  83. package/src/tests/handlers/event_revisions/PageRevisionsHandler.test/destroy.test.js +53 -0
  84. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +136 -0
  85. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +47 -0
  86. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +80 -0
  87. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +69 -0
  88. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +147 -0
  89. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
  90. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +135 -0
  91. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +46 -0
  92. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +103 -0
  93. package/src/tests/handlers/events/ConesHandler.test/create.test.js +54 -0
  94. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +110 -0
  95. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +54 -0
  96. package/src/tests/handlers/events/EventsHandler.test/create.test.js +152 -0
  97. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +41 -0
  98. package/src/tests/handlers/events/EventsHandler.test/index.test.js +49 -0
  99. package/src/tests/handlers/events/EventsHandler.test/show.test.js +105 -0
  100. package/src/tests/handlers/events/URLsHandler.test/create.test.js +155 -0
  101. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +51 -0
  102. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +3 -3
  103. package/src/utils.js +46 -0
  104. package/src/views/article_revisions/_nav.ejs +40 -0
  105. package/src/views/article_revisions/codes/edit_form.ejs +39 -0
  106. package/src/views/article_revisions/general/edit_form.ejs +70 -0
  107. package/src/views/article_revisions/locks/create_form.ejs +35 -0
  108. package/src/views/article_revisions/meta/edit_form.ejs +41 -0
  109. package/src/views/article_revisions/publishes/_form.ejs +57 -0
  110. package/src/views/article_revisions/publishes/create_form.ejs +10 -0
  111. package/src/views/article_revisions/tags/edit_form.ejs +64 -0
  112. package/src/views/article_revisions/visuals/edit_form.ejs +42 -0
  113. package/src/views/articles/_form.ejs +86 -0
  114. package/src/views/articles/create_form.ejs +9 -0
  115. package/src/views/articles/deletes/create_form.ejs +55 -0
  116. package/src/views/articles/edit_form.ejs +3 -0
  117. package/src/views/articles/index.ejs +161 -0
  118. package/src/views/articles/show.ejs +281 -0
  119. package/src/views/articles/translations/_form.ejs +77 -0
  120. package/src/views/articles/translations/create_form.ejs +11 -0
  121. package/src/views/articles/urls/create_form.ejs +31 -0
  122. package/src/views/event_revisions/_nav.ejs +40 -0
  123. package/src/views/event_revisions/codes/edit_form.ejs +39 -0
  124. package/src/views/event_revisions/general/edit_form.ejs +72 -0
  125. package/src/views/event_revisions/locks/create_form.ejs +35 -0
  126. package/src/views/event_revisions/meta/edit_form.ejs +41 -0
  127. package/src/views/event_revisions/publishes/_form.ejs +57 -0
  128. package/src/views/event_revisions/publishes/create_form.ejs +10 -0
  129. package/src/views/event_revisions/tags/edit_form.ejs +64 -0
  130. package/src/views/event_revisions/visuals/edit_form.ejs +42 -0
  131. package/src/views/events/_form.ejs +88 -0
  132. package/src/views/events/create_form.ejs +9 -0
  133. package/src/views/events/deletes/create_form.ejs +55 -0
  134. package/src/views/events/edit_form.ejs +3 -0
  135. package/src/views/events/index.ejs +161 -0
  136. package/src/views/events/show.ejs +281 -0
  137. package/src/views/events/translations/_form.ejs +79 -0
  138. package/src/views/events/translations/create_form.ejs +11 -0
  139. package/src/views/events/urls/create_form.ejs +31 -0
  140. package/src/views/page_revisions/locks/create_form.ejs +1 -1
  141. package/test/factory.js +76 -0
@@ -0,0 +1,254 @@
1
+ import { gql } from "graphql-request";
2
+ import {
3
+ categoryFragment,
4
+ errorsFragment,
5
+ eventTypeFragment,
6
+ paginationFragment,
7
+ revisionMetaFragment,
8
+ tagFragment,
9
+ } from "./common";
10
+
11
+ function eventFragment() {
12
+ return gql`
13
+ {
14
+ id
15
+ slug
16
+ title
17
+ widgets
18
+ settings
19
+ visibility
20
+ publishAt
21
+ startsAt
22
+ endsAt
23
+ originalId
24
+ translations
25
+ revisionsCount
26
+ tags ${tagFragment()}
27
+ eventType ${eventTypeFragment()}
28
+ categories ${categoryFragment()}
29
+ }
30
+ `;
31
+ }
32
+
33
+ function eventRevisionFragment() {
34
+ return gql`
35
+ {
36
+ id
37
+ slug
38
+ title
39
+ widgets
40
+ settings
41
+ visibility
42
+ publishAt
43
+ startsAt
44
+ endsAt
45
+ originalId
46
+ insertedAt
47
+ tags ${tagFragment()}
48
+ eventType ${eventTypeFragment()}
49
+ meta ${revisionMetaFragment()}
50
+ categories ${categoryFragment()}
51
+ }
52
+ `;
53
+ }
54
+
55
+ const EventByIdDocument = gql`
56
+ query EventByID($input: IdInput!) {
57
+ event(input: $input) ${eventFragment()}
58
+ }
59
+ `;
60
+
61
+ const EventChangesDocument = gql`
62
+ query EventChanges($input: IdInput!) {
63
+ eventChanges(input: $input) {
64
+ list {
65
+ version
66
+ title
67
+ description
68
+ operator
69
+ operatorMeta
70
+ source
71
+ insertedAt
72
+ }
73
+ }
74
+ }
75
+ `;
76
+
77
+ const EventsDocument = gql`
78
+ query Events($input: EventsInput!) {
79
+ events(input: $input) {
80
+ list ${eventFragment()}
81
+ pagination ${paginationFragment()}
82
+ }
83
+ }
84
+ `;
85
+
86
+ const CreateEventDocument = gql`
87
+ mutation CreateEvent($input: CreateEventInput!) {
88
+ createEvent(input: $input) {
89
+ event ${eventFragment()}
90
+ errors ${errorsFragment()}
91
+ }
92
+ }
93
+ `;
94
+
95
+ const UpdateEventDocument = gql`
96
+ mutation UpdateEvent($input: UpdateEventInput!) {
97
+ updateEvent(input: $input) {
98
+ event ${eventFragment()}
99
+ errors ${errorsFragment()}
100
+ }
101
+ }
102
+ `;
103
+
104
+ const UpdateEventWidgetsDocument = gql`
105
+ mutation updateEventWidgets($input: UpdateEventWidgetsInput!) {
106
+ updateEventWidgets(input: $input) {
107
+ event ${eventFragment()}
108
+ errors ${errorsFragment()}
109
+ }
110
+ }
111
+ `;
112
+
113
+ const CloneEventDocument = gql`
114
+ mutation CloneEvent($input: IdInput!) {
115
+ cloneEvent(input: $input) {
116
+ event ${eventFragment()}
117
+ errors ${errorsFragment()}
118
+ }
119
+ }
120
+ `;
121
+
122
+ const DeleteEventDocument = gql`
123
+ mutation DeleteEvent($input: EventDeleteInput!) {
124
+ deleteEvent(input: $input) {
125
+ event ${eventFragment()}
126
+ errors ${errorsFragment()}
127
+ }
128
+ }
129
+ `;
130
+
131
+ const EventAndSiteDocument = gql`
132
+ query EventAndSite($input: SlugInput!) {
133
+ eventAndSite(input: $input) {
134
+ id
135
+ slug
136
+ title
137
+ widgets
138
+ settings
139
+ visibility
140
+ publishAt
141
+ startsAt
142
+ endsAt
143
+ originalId
144
+ translations
145
+ tags ${tagFragment()}
146
+ eventType ${eventTypeFragment()}
147
+ categories ${categoryFragment()}
148
+ websiteSettings
149
+ }
150
+ }
151
+ `;
152
+
153
+ const TranslateEventDocument = gql`
154
+ mutation TranslateEvent($input: TranslateEventInput!) {
155
+ translateEvent(input: $input) {
156
+ event ${eventFragment()}
157
+ errors ${errorsFragment()}
158
+ }
159
+ }
160
+ `;
161
+
162
+ const EventRevisionsDocument = gql`
163
+ query EventRevisions($input: IdInput!) {
164
+ eventRevisions(input: $input) {
165
+ list ${eventRevisionFragment()}
166
+ }
167
+ }
168
+ `;
169
+
170
+ const EventRevisionDocument = gql`
171
+ query EventRevision($input: IdInput!) {
172
+ eventRevision(input: $input) ${eventRevisionFragment()}
173
+ }
174
+ `;
175
+
176
+ const StartEventRevisionDocument = gql`
177
+ mutation StartEventRevision($input: StartEventRevisionInput!) {
178
+ startEventRevision(input: $input) {
179
+ revision ${eventRevisionFragment()}
180
+ errors ${errorsFragment()}
181
+ eventErrors ${errorsFragment()}
182
+ }
183
+ }
184
+ `;
185
+
186
+ const MergeEventRevisionDocument = gql`
187
+ mutation MergeEventRevision($input: MergeEventRevisionInput!) {
188
+ mergeEventRevision(input: $input) {
189
+ event ${eventFragment()}
190
+ errors ${errorsFragment()}
191
+ }
192
+ }
193
+ `;
194
+
195
+ const ChangeEventSlugDocument = gql`
196
+ mutation ($input: ChangeEventSlugInput!) {
197
+ changeEventSlug(input: $input) {
198
+ event ${eventFragment()}
199
+ errors ${errorsFragment()}
200
+ }
201
+ }
202
+ `;
203
+
204
+ const ReopenEventChangeDocument = gql`
205
+ mutation($input: ReopenEventChangeInput!)
206
+ {
207
+ reopenEventChange(input: $input) {
208
+ revision ${eventRevisionFragment()}
209
+ errors ${errorsFragment()}
210
+ eventErrors ${errorsFragment()}
211
+ }
212
+ }
213
+ `;
214
+
215
+ const LockEventRevisionDocument = gql`
216
+ mutation LockEventRevision($input: LockEventRevisionInput!) {
217
+ lockEventRevision(input: $input) {
218
+ revision ${eventRevisionFragment()}
219
+ errors ${errorsFragment()}
220
+ eventErrors ${errorsFragment()}
221
+ }
222
+ }
223
+ `;
224
+
225
+ const UnlockEventRevisionDocument = gql`
226
+ mutation UnlockEventRevision($input: UnlockEventRevisionInput!) {
227
+ unlockEventRevision(input: $input) {
228
+ revision ${eventRevisionFragment()}
229
+ errors ${errorsFragment()}
230
+ eventErrors ${errorsFragment()}
231
+ }
232
+ }
233
+ `;
234
+
235
+ export {
236
+ EventByIdDocument,
237
+ EventsDocument,
238
+ CreateEventDocument,
239
+ UpdateEventDocument,
240
+ UpdateEventWidgetsDocument,
241
+ CloneEventDocument,
242
+ DeleteEventDocument,
243
+ EventAndSiteDocument,
244
+ TranslateEventDocument,
245
+ EventRevisionDocument,
246
+ EventRevisionsDocument,
247
+ StartEventRevisionDocument,
248
+ MergeEventRevisionDocument,
249
+ EventChangesDocument,
250
+ ChangeEventSlugDocument,
251
+ ReopenEventChangeDocument,
252
+ LockEventRevisionDocument,
253
+ UnlockEventRevisionDocument,
254
+ };
@@ -0,0 +1,49 @@
1
+ const create = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const { errors, articleErrors } = await ctx.client.articleRevisions.create(
5
+ parent_id,
6
+ ctx.locale
7
+ );
8
+
9
+ if (errors) {
10
+ throw new Error(`Failed to start revision: ${JSON.stringify(errors)}`);
11
+ }
12
+
13
+ if (articleErrors) {
14
+ throw new Error(
15
+ `Failed to start revision: ${JSON.stringify(articleErrors)}`
16
+ );
17
+ }
18
+
19
+ return {
20
+ redirect: `/${ctx.locale}/articles/${parent_id}`,
21
+ };
22
+ };
23
+
24
+ const destroy = async (ctx) => {
25
+ const { id } = ctx.params;
26
+
27
+ const { errors, revision } = await ctx.client.articleRevisions.delete(
28
+ id,
29
+ ctx.locale
30
+ );
31
+
32
+ if (errors) {
33
+ throw new Error(
34
+ `Failed to delete revision#${id}: ${JSON.stringify(errors)}`
35
+ );
36
+ }
37
+
38
+ return {
39
+ headers: {
40
+ "HX-Redirect": `/${ctx.locale}/articles/${revision.originalId}`,
41
+ },
42
+ json: {},
43
+ };
44
+ };
45
+
46
+ export default {
47
+ destroy,
48
+ create,
49
+ };
@@ -0,0 +1,90 @@
1
+ const edit_form = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const revision = await ctx.client.articleRevisions.find(
5
+ parent_id,
6
+ ctx.locale
7
+ );
8
+
9
+ if (!revision) {
10
+ throw new Error(`Missing revision #${parent_id}`);
11
+ }
12
+
13
+ const code_settings = {
14
+ id: revision.id,
15
+ originalId: revision.originalId,
16
+ scripts: JSON.stringify(revision.settings.codes?.scripts || []),
17
+ structured_data: JSON.stringify(
18
+ revision.settings.codes?.structured_data || {}
19
+ ),
20
+ };
21
+
22
+ return {
23
+ assigns: {
24
+ code_settings,
25
+ errors: {},
26
+ _translations: [],
27
+ },
28
+ };
29
+ };
30
+
31
+ const update = async (ctx) => {
32
+ const { parent_id } = ctx.params;
33
+
34
+ const revision = await ctx.client.articleRevisions.find(
35
+ parent_id,
36
+ ctx.locale
37
+ );
38
+
39
+ if (!revision) {
40
+ throw new Error(`Missing revision #${parent_id}`);
41
+ }
42
+
43
+ const params = ctx.resourceParams.code_settings;
44
+
45
+ const { errors } = await ctx.client.articleRevisions.update(
46
+ revision.id,
47
+ ctx.locale,
48
+ {
49
+ slug: revision.slug,
50
+ title: revision.title,
51
+ visibility: revision.visibility,
52
+ publishAt: revision.publishAt,
53
+ widgets: JSON.stringify(revision.widgets),
54
+ tags: revision.tags.map((t) => t.id),
55
+ categories: revision.categories.map((c) => c.id),
56
+ settings: JSON.stringify({
57
+ ...revision.settings,
58
+ codes: {
59
+ scripts: JSON.parse(params.scripts),
60
+ structured_data: JSON.parse(params.structured_data),
61
+ },
62
+ }),
63
+ }
64
+ );
65
+
66
+ if (errors) {
67
+ return {
68
+ assigns: {
69
+ code_settings: {
70
+ ...params,
71
+ id: revision.id,
72
+ originalId: revision.originalId,
73
+ },
74
+ errors: {
75
+ code_settings: ctx.client.articleRevisions.formatErrors(errors),
76
+ },
77
+ _translations: [],
78
+ },
79
+ };
80
+ }
81
+
82
+ return {
83
+ redirect: `/${ctx.locale}/article_revisions/${revision.id}/codes/edit`,
84
+ };
85
+ };
86
+
87
+ export default {
88
+ edit_form,
89
+ update,
90
+ };
@@ -0,0 +1,95 @@
1
+ import { toDateTimeInput, toUTCISO8601String } from "../../utils";
2
+ const edit_form = async (ctx) => {
3
+ const { parent_id } = ctx.params;
4
+
5
+ const revision = await ctx.client.articleRevisions.find(
6
+ parent_id,
7
+ ctx.locale
8
+ );
9
+
10
+ if (!revision) {
11
+ throw new Error(`Missing revision #${parent_id}`);
12
+ }
13
+
14
+ const general_settings = {
15
+ id: revision.id,
16
+ originalId: revision.originalId,
17
+ title: revision.title,
18
+ slug: revision.slug,
19
+ publish_at: toDateTimeInput(revision.publishAt),
20
+ visibility: revision.visibility,
21
+ username: revision.settings?.credentials?.user || "",
22
+ password: revision.settings?.credentials?.password || "",
23
+ };
24
+
25
+ return {
26
+ assigns: {
27
+ general_settings,
28
+ errors: {},
29
+ visibilityOptions: ctx.client.articles.visibilityOptions(),
30
+ _translations: [],
31
+ },
32
+ };
33
+ };
34
+
35
+ const update = async (ctx) => {
36
+ const { parent_id } = ctx.params;
37
+
38
+ const revision = await ctx.client.articleRevisions.find(
39
+ parent_id,
40
+ ctx.locale
41
+ );
42
+
43
+ if (!revision) {
44
+ throw new Error(`Missing revision #${parent_id}`);
45
+ }
46
+
47
+ const params = ctx.resourceParams.general_settings;
48
+
49
+ const { errors } = await ctx.client.articleRevisions.update(
50
+ revision.id,
51
+ ctx.locale,
52
+ {
53
+ slug: params.slug,
54
+ title: params.title,
55
+ visibility: params.visibility,
56
+ publishAt: toUTCISO8601String(params.publish_at),
57
+ widgets: JSON.stringify(revision.widgets),
58
+ tags: revision.tags.map((t) => t.id),
59
+ categories: revision.categories.map((c) => c.id),
60
+ settings: JSON.stringify({
61
+ ...revision.settings,
62
+ credentials: {
63
+ user: params.username,
64
+ password: params.password,
65
+ },
66
+ }),
67
+ }
68
+ );
69
+
70
+ if (errors) {
71
+ return {
72
+ assigns: {
73
+ general_settings: {
74
+ ...params,
75
+ id: revision.id,
76
+ originalId: revision.originalId,
77
+ },
78
+ errors: {
79
+ general_settings: ctx.client.articleRevisions.formatErrors(errors),
80
+ },
81
+ visibilityOptions: ctx.client.articles.visibilityOptions(),
82
+ _translations: [],
83
+ },
84
+ };
85
+ }
86
+
87
+ return {
88
+ redirect: `/${ctx.locale}/article_revisions/${revision.id}/general/edit`,
89
+ };
90
+ };
91
+
92
+ export default {
93
+ edit_form,
94
+ update,
95
+ };
@@ -0,0 +1,54 @@
1
+ const create_form = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const revision = await ctx.client.articleRevisions.find(
5
+ parent_id,
6
+ ctx.locale
7
+ );
8
+
9
+ const lock_settings = {
10
+ revision,
11
+ message: "",
12
+ };
13
+
14
+ return {
15
+ assigns: {
16
+ lock_settings,
17
+ errors: {},
18
+ _translations: [],
19
+ },
20
+ };
21
+ };
22
+
23
+ const create = async (ctx) => {
24
+ const { parent_id } = ctx.params;
25
+ const { message } = ctx.resourceParams.lock_settings;
26
+
27
+ const { revision, errors, articleErrors } =
28
+ await ctx.client.articleRevisions.lock(parent_id, ctx.locale, message);
29
+
30
+ if (errors) {
31
+ return {
32
+ assigns: {
33
+ lock_settings: { revision, message },
34
+ errors: {
35
+ lock_settings: ctx.client.articles.formatErrors(errors, "message"),
36
+ },
37
+ _translations: [],
38
+ },
39
+ };
40
+ }
41
+
42
+ if (articleErrors) {
43
+ throw `Failed to lock revisions: ${JSON.stringify(articleErrors)}`;
44
+ }
45
+
46
+ return {
47
+ redirect: `/${ctx.locale}/articles/${revision.originalId}`,
48
+ };
49
+ };
50
+
51
+ export default {
52
+ create_form,
53
+ create,
54
+ };
@@ -0,0 +1,90 @@
1
+ const edit_form = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const revision = await ctx.client.articleRevisions.find(
5
+ parent_id,
6
+ ctx.locale
7
+ );
8
+
9
+ if (!revision) {
10
+ throw new Error(`Missing revision #${parent_id}`);
11
+ }
12
+
13
+ const meta_settings = {
14
+ id: revision.id,
15
+ originalId: revision.originalId,
16
+ title: revision.settings.meta?.title || "",
17
+ description: revision.settings.meta?.description || "",
18
+ image: revision.settings.meta?.image || {},
19
+ };
20
+
21
+ return {
22
+ assigns: {
23
+ meta_settings,
24
+ errors: {},
25
+ _translations: [],
26
+ },
27
+ };
28
+ };
29
+
30
+ const update = async (ctx) => {
31
+ const { parent_id } = ctx.params;
32
+
33
+ const revision = await ctx.client.articleRevisions.find(
34
+ parent_id,
35
+ ctx.locale
36
+ );
37
+
38
+ if (!revision) {
39
+ throw new Error(`Missing revision #${parent_id}`);
40
+ }
41
+
42
+ const params = ctx.resourceParams.meta_settings;
43
+
44
+ const { errors } = await ctx.client.articleRevisions.update(
45
+ revision.id,
46
+ ctx.locale,
47
+ {
48
+ slug: revision.slug,
49
+ title: revision.title,
50
+ visibility: revision.visibility,
51
+ publishAt: revision.publishAt,
52
+ widgets: JSON.stringify(revision.widgets),
53
+ tags: revision.tags.map((t) => t.id),
54
+ categories: revision.categories.map((c) => c.id),
55
+ settings: JSON.stringify({
56
+ ...revision.settings,
57
+ meta: {
58
+ title: params.title,
59
+ description: params.description,
60
+ image: JSON.parse(params.image),
61
+ },
62
+ }),
63
+ }
64
+ );
65
+
66
+ if (errors) {
67
+ return {
68
+ assigns: {
69
+ meta_settings: {
70
+ ...params,
71
+ id: revision.id,
72
+ originalId: revision.originalId,
73
+ },
74
+ errors: {
75
+ meta_settings: ctx.client.articleRevisions.formatErrors(errors),
76
+ },
77
+ _translations: [],
78
+ },
79
+ };
80
+ }
81
+
82
+ return {
83
+ redirect: `/${ctx.locale}/article_revisions/${revision.id}/meta/edit`,
84
+ };
85
+ };
86
+
87
+ export default {
88
+ edit_form,
89
+ update,
90
+ };
@@ -0,0 +1,90 @@
1
+ const create_form = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const revision = await ctx.client.articleRevisions.find(
5
+ parent_id,
6
+ ctx.locale
7
+ );
8
+
9
+ return {
10
+ assigns: {
11
+ publishing: {
12
+ id: revision.id,
13
+ originalId: revision.originalId,
14
+ title: revision.meta.title,
15
+ description: revision.meta.description,
16
+ visibility: revision.visibility,
17
+ username: revision.settings?.credentials?.user,
18
+ password: revision.settings?.credentials?.password,
19
+ },
20
+ visibilityOptions: ctx.client.articles.visibilityOptions(),
21
+ errors: {},
22
+ _translations: [],
23
+ },
24
+ };
25
+ };
26
+
27
+ function publishArticleParams(
28
+ { visibility, username, password },
29
+ currentSettings
30
+ ) {
31
+ if (visibility === "protected") {
32
+ const credentials = {
33
+ user: username,
34
+ password: password,
35
+ };
36
+
37
+ return {
38
+ visibility,
39
+ settings: JSON.stringify({
40
+ ...currentSettings,
41
+ credentials,
42
+ }),
43
+ };
44
+ }
45
+
46
+ return { visibility };
47
+ }
48
+
49
+ const create = async (ctx) => {
50
+ const { parent_id } = ctx.params;
51
+ const publishing = ctx.resourceParams.publishing;
52
+
53
+ const revision = await ctx.client.articleRevisions.find(
54
+ parent_id,
55
+ ctx.locale
56
+ );
57
+ const { errors } = await ctx.client.articleRevisions.publish(
58
+ revision.id,
59
+ ctx.locale,
60
+ {
61
+ title: publishing.title || "",
62
+ description: publishing.description || "",
63
+ },
64
+ publishArticleParams(publishing, revision.settings)
65
+ );
66
+
67
+ if (errors) {
68
+ return {
69
+ assigns: {
70
+ publishing: {
71
+ ...publishing,
72
+ id: revision.id,
73
+ originalId: revision.originalId,
74
+ },
75
+ visibilityOptions: ctx.client.articles.visibilityOptions(),
76
+ errors: ctx.client.articleRevisions.formatErrors(errors),
77
+ _translations: [],
78
+ },
79
+ };
80
+ }
81
+
82
+ return {
83
+ redirect: `/${ctx.locale}/articles/${revision.originalId}`,
84
+ };
85
+ };
86
+
87
+ export default {
88
+ create,
89
+ create_form,
90
+ };