@raketa-cloud/admin 0.0.15 → 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 (89) hide show
  1. package/package.json +1 -1
  2. package/src/cloud/EventChanges.js +15 -0
  3. package/src/cloud/EventRevisions.js +149 -0
  4. package/src/cloud/Events.js +135 -0
  5. package/src/cloud/documents/common.js +10 -0
  6. package/src/cloud/documents/eventsDocuments.js +254 -0
  7. package/src/handlers/event_revisions/CodeHandler.js +86 -0
  8. package/src/handlers/event_revisions/EventRevisionsHandler.js +47 -0
  9. package/src/handlers/event_revisions/GeneralHandler.js +93 -0
  10. package/src/handlers/event_revisions/LocksHandler.js +51 -0
  11. package/src/handlers/event_revisions/MetaHandler.js +86 -0
  12. package/src/handlers/event_revisions/PublishesHandler.js +84 -0
  13. package/src/handlers/event_revisions/RevertsHandler.js +26 -0
  14. package/src/handlers/event_revisions/TagHandler.js +85 -0
  15. package/src/handlers/event_revisions/UnlocksHandler.js +22 -0
  16. package/src/handlers/event_revisions/VisualHandler.js +80 -0
  17. package/src/handlers/event_revisions/WidgetHandler.js +41 -0
  18. package/src/handlers/events/ClonesHandler.js +17 -0
  19. package/src/handlers/events/DeletesHandler.js +68 -0
  20. package/src/handlers/events/EventsHandler.js +121 -0
  21. package/src/handlers/events/TranslationsHandler.js +99 -0
  22. package/src/handlers/events/URLsHandler.js +71 -0
  23. package/src/index.js +22 -0
  24. package/src/routeEvents.js +55 -0
  25. package/src/routeStandard.js +2 -0
  26. package/src/setupCloud.js +12 -0
  27. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +56 -0
  28. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +139 -0
  29. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +65 -0
  30. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +150 -0
  31. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +57 -0
  32. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +143 -0
  33. package/src/tests/handlers/article_revisions/PageRevisionsHandler.test/create.test.js +75 -0
  34. package/src/tests/handlers/article_revisions/PageRevisionsHandler.test/destroy.test.js +53 -0
  35. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +136 -0
  36. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +47 -0
  37. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +80 -0
  38. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +69 -0
  39. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +143 -0
  40. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
  41. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +131 -0
  42. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +46 -0
  43. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +103 -0
  44. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +56 -0
  45. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +143 -0
  46. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +69 -0
  47. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +158 -0
  48. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +57 -0
  49. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +147 -0
  50. package/src/tests/handlers/event_revisions/PageRevisionsHandler.test/create.test.js +75 -0
  51. package/src/tests/handlers/event_revisions/PageRevisionsHandler.test/destroy.test.js +53 -0
  52. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +136 -0
  53. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +47 -0
  54. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +80 -0
  55. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +69 -0
  56. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +147 -0
  57. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
  58. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +135 -0
  59. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +46 -0
  60. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +103 -0
  61. package/src/tests/handlers/events/ConesHandler.test/create.test.js +54 -0
  62. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +110 -0
  63. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +54 -0
  64. package/src/tests/handlers/events/EventsHandler.test/create.test.js +152 -0
  65. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +41 -0
  66. package/src/tests/handlers/events/EventsHandler.test/index.test.js +49 -0
  67. package/src/tests/handlers/events/EventsHandler.test/show.test.js +105 -0
  68. package/src/tests/handlers/events/URLsHandler.test/create.test.js +155 -0
  69. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +51 -0
  70. package/src/views/articles/translations/create_form.ejs +2 -2
  71. package/src/views/event_revisions/_nav.ejs +40 -0
  72. package/src/views/event_revisions/codes/edit_form.ejs +39 -0
  73. package/src/views/event_revisions/general/edit_form.ejs +72 -0
  74. package/src/views/event_revisions/locks/create_form.ejs +35 -0
  75. package/src/views/event_revisions/meta/edit_form.ejs +41 -0
  76. package/src/views/event_revisions/publishes/_form.ejs +57 -0
  77. package/src/views/event_revisions/publishes/create_form.ejs +10 -0
  78. package/src/views/event_revisions/tags/edit_form.ejs +64 -0
  79. package/src/views/event_revisions/visuals/edit_form.ejs +42 -0
  80. package/src/views/events/_form.ejs +88 -0
  81. package/src/views/events/create_form.ejs +9 -0
  82. package/src/views/events/deletes/create_form.ejs +55 -0
  83. package/src/views/events/edit_form.ejs +3 -0
  84. package/src/views/events/index.ejs +161 -0
  85. package/src/views/events/show.ejs +281 -0
  86. package/src/views/events/translations/_form.ejs +79 -0
  87. package/src/views/events/translations/create_form.ejs +11 -0
  88. package/src/views/events/urls/create_form.ejs +31 -0
  89. package/test/factory.js +42 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raketa-cloud/admin",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "main": "src/index.js",
5
5
  "scripts": {
6
6
  "dev": "npx tailwindcss -i ./src/styles/application.css -o ../../apps/admin/static/application.css --watch",
@@ -0,0 +1,15 @@
1
+ import RaketaClient from "./RaketaClient";
2
+ import { EventChangesDocument } from "./documents/eventsDocuments";
3
+
4
+ export default class EventChanges extends RaketaClient {
5
+ async all(eventId, locale) {
6
+ const { eventChanges: items } = await this.query(EventChangesDocument, {
7
+ input: {
8
+ id: eventId,
9
+ locale,
10
+ },
11
+ });
12
+
13
+ return items;
14
+ }
15
+ }
@@ -0,0 +1,149 @@
1
+ import RaketaClient from "./RaketaClient";
2
+ import {
3
+ DeleteEventDocument,
4
+ LockEventRevisionDocument,
5
+ MergeEventRevisionDocument,
6
+ EventRevisionDocument,
7
+ EventRevisionsDocument,
8
+ StartEventRevisionDocument,
9
+ UnlockEventRevisionDocument,
10
+ UpdateEventDocument,
11
+ UpdateEventWidgetsDocument,
12
+ ReopenEventChangeDocument,
13
+ } from "./documents/eventsDocuments";
14
+
15
+ export default class EventRevisions extends RaketaClient {
16
+ async all(eventId, locale) {
17
+ const { eventRevisions: items } = await this.query(EventRevisionsDocument, {
18
+ input: {
19
+ id: eventId,
20
+ locale,
21
+ },
22
+ });
23
+
24
+ return items;
25
+ }
26
+
27
+ async find(id, locale) {
28
+ const { eventRevision } = await this.query(EventRevisionDocument, {
29
+ input: {
30
+ id,
31
+ locale,
32
+ },
33
+ });
34
+
35
+ return eventRevision;
36
+ }
37
+
38
+ async publish(id, locale, params, eventParams) {
39
+ const {
40
+ mergeEventRevision: { event, errors },
41
+ } = await this.query(MergeEventRevisionDocument, {
42
+ input: {
43
+ id,
44
+ locale,
45
+ ...params,
46
+ event: { ...eventParams },
47
+ },
48
+ });
49
+
50
+ return { event, errors };
51
+ }
52
+
53
+ async create(eventId, locale) {
54
+ const {
55
+ startEventRevision: { revision, errors, eventErrors },
56
+ } = await this.query(StartEventRevisionDocument, {
57
+ input: {
58
+ id: eventId,
59
+ locale,
60
+ title: "New revision",
61
+ description: "",
62
+ },
63
+ });
64
+
65
+ return { revision, errors, eventErrors };
66
+ }
67
+
68
+ async update(id, locale, params) {
69
+ const {
70
+ updateEvent: { errors, event },
71
+ } = await this.query(UpdateEventDocument, {
72
+ input: {
73
+ id,
74
+ locale,
75
+ event: params,
76
+ },
77
+ });
78
+
79
+ return { event, errors };
80
+ }
81
+
82
+ async updateWidgets(id, locale, widgets) {
83
+ const {
84
+ updateEventWidgets: { errors, event },
85
+ } = await this.query(UpdateEventWidgetsDocument, {
86
+ input: {
87
+ id,
88
+ locale,
89
+ widgets: JSON.stringify(widgets),
90
+ },
91
+ });
92
+
93
+ return { event, errors };
94
+ }
95
+
96
+ async delete(revisionId, locale) {
97
+ const {
98
+ deleteEvent: { event, errors },
99
+ } = await this.query(DeleteEventDocument, {
100
+ input: {
101
+ id: revisionId,
102
+ locale,
103
+ },
104
+ });
105
+
106
+ return { revision: event, errors };
107
+ }
108
+
109
+ async lock(revisionId, locale, message) {
110
+ const {
111
+ lockEventRevision: { revision, errors },
112
+ } = await this.query(LockEventRevisionDocument, {
113
+ input: {
114
+ revisionId,
115
+ message,
116
+ locale,
117
+ },
118
+ });
119
+
120
+ return { revision, errors };
121
+ }
122
+
123
+ async unlock(revisionId, locale) {
124
+ const {
125
+ unlockEventRevision: { revision, errors },
126
+ } = await this.query(UnlockEventRevisionDocument, {
127
+ input: {
128
+ revisionId,
129
+ locale,
130
+ },
131
+ });
132
+
133
+ return { revision, errors };
134
+ }
135
+
136
+ async revert(eventId, version, locale) {
137
+ const {
138
+ reopenEventChange: { revision, errors, eventErrors },
139
+ } = await this.query(ReopenEventChangeDocument, {
140
+ input: {
141
+ eventId,
142
+ locale,
143
+ version,
144
+ },
145
+ });
146
+
147
+ return { revision, errors, eventErrors };
148
+ }
149
+ }
@@ -0,0 +1,135 @@
1
+ import RaketaClient from "./RaketaClient";
2
+ import {
3
+ CreateEventDocument,
4
+ EventByIdDocument,
5
+ EventsDocument,
6
+ CloneEventDocument,
7
+ DeleteEventDocument,
8
+ TranslateEventDocument,
9
+ ChangeEventSlugDocument,
10
+ } from "./documents/eventsDocuments";
11
+ import { toDateTimeInput } from "../utils";
12
+
13
+ export default class Events extends RaketaClient {
14
+ defaults() {
15
+ return {
16
+ visibility: "private",
17
+ layout: "default",
18
+ publish_at: toDateTimeInput(new Date()),
19
+ starts_at: toDateTimeInput(new Date()),
20
+ ends_at: toDateTimeInput(new Date()),
21
+ tags: [],
22
+ categories: [],
23
+ };
24
+ }
25
+
26
+ visibilityOptions() {
27
+ return [
28
+ ["private", "Private"],
29
+ ["public", "Public"],
30
+ ["unlisted", "Unlisted"],
31
+ ["protected", "Password protected"],
32
+ ];
33
+ }
34
+
35
+ async find(id, locale) {
36
+ const { event: item } = await this.query(EventByIdDocument, {
37
+ input: {
38
+ id,
39
+ locale,
40
+ },
41
+ });
42
+
43
+ return item;
44
+ }
45
+
46
+ async list(query, locale) {
47
+ const { events: items } = await this.query(
48
+ EventsDocument,
49
+ this.buildListInput(query, locale)
50
+ );
51
+
52
+ return items;
53
+ }
54
+
55
+ async create(params, locale, eventTypeSlug) {
56
+ params.widgets = JSON.stringify(params.widgets);
57
+ params.settings = JSON.stringify(params.settings);
58
+
59
+ const {
60
+ createEvent: { errors, event },
61
+ } = await this.query(CreateEventDocument, {
62
+ input: {
63
+ locale,
64
+ event: params,
65
+ eventTypeSlug,
66
+ },
67
+ });
68
+
69
+ return { event, errors };
70
+ }
71
+
72
+ async clone(id, locale) {
73
+ const {
74
+ cloneEvent: { errors, event },
75
+ } = await this.query(CloneEventDocument, {
76
+ input: { id: id, locale: locale },
77
+ });
78
+
79
+ return { event, errors };
80
+ }
81
+
82
+ async delete(id, locale, redirect) {
83
+ const input = {
84
+ id,
85
+ locale,
86
+ };
87
+
88
+ if (redirect) {
89
+ input.redirect = redirect;
90
+ }
91
+
92
+ const {
93
+ deleteEvent: { errors, event },
94
+ } = await this.query(DeleteEventDocument, { input });
95
+
96
+ return { event, errors };
97
+ }
98
+
99
+ async translate(id, locale, params) {
100
+ params.widgets = JSON.stringify(params.widgets);
101
+ params.settings = JSON.stringify(params.settings);
102
+
103
+ const {
104
+ translateEvent: { errors, event },
105
+ } = await this.query(TranslateEventDocument, {
106
+ input: {
107
+ locale,
108
+ sourceEventId: id,
109
+ event: params,
110
+ },
111
+ });
112
+
113
+ return { event, errors };
114
+ }
115
+
116
+ async updateSlug(id, slug, locale, redirect) {
117
+ const input = {
118
+ id,
119
+ slug,
120
+ locale,
121
+ };
122
+
123
+ if (redirect) {
124
+ input.redirect = redirect;
125
+ }
126
+
127
+ const {
128
+ changeEventSlug: { errors, event },
129
+ } = await this.query(ChangeEventSlugDocument, {
130
+ input,
131
+ });
132
+
133
+ return { event, errors };
134
+ }
135
+ }
@@ -20,6 +20,16 @@ export function articleTypeFragment() {
20
20
  `;
21
21
  }
22
22
 
23
+ export function eventTypeFragment() {
24
+ return gql`
25
+ {
26
+ id
27
+ slug
28
+ title
29
+ }
30
+ `;
31
+ }
32
+
23
33
  export function tagFragment() {
24
34
  return gql`
25
35
  {
@@ -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,86 @@
1
+ const edit_form = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const revision = await ctx.client.eventRevisions.find(parent_id, ctx.locale);
5
+
6
+ if (!revision) {
7
+ throw new Error(`Missing revision #${parent_id}`);
8
+ }
9
+
10
+ const code_settings = {
11
+ id: revision.id,
12
+ originalId: revision.originalId,
13
+ scripts: JSON.stringify(revision.settings.codes?.scripts || []),
14
+ structured_data: JSON.stringify(
15
+ revision.settings.codes?.structured_data || {}
16
+ ),
17
+ };
18
+
19
+ return {
20
+ assigns: {
21
+ code_settings,
22
+ errors: {},
23
+ _translations: [],
24
+ },
25
+ };
26
+ };
27
+
28
+ const update = async (ctx) => {
29
+ const { parent_id } = ctx.params;
30
+
31
+ const revision = await ctx.client.eventRevisions.find(parent_id, ctx.locale);
32
+
33
+ if (!revision) {
34
+ throw new Error(`Missing revision #${parent_id}`);
35
+ }
36
+
37
+ const params = ctx.resourceParams.code_settings;
38
+
39
+ const { errors } = await ctx.client.eventRevisions.update(
40
+ revision.id,
41
+ ctx.locale,
42
+ {
43
+ slug: revision.slug,
44
+ title: revision.title,
45
+ visibility: revision.visibility,
46
+ publishAt: revision.publishAt,
47
+ startsAt: revision.startsAt,
48
+ endsAt: revision.endsAt,
49
+ widgets: JSON.stringify(revision.widgets),
50
+ tags: revision.tags.map((t) => t.id),
51
+ categories: revision.categories.map((c) => c.id),
52
+ settings: JSON.stringify({
53
+ ...revision.settings,
54
+ codes: {
55
+ scripts: JSON.parse(params.scripts),
56
+ structured_data: JSON.parse(params.structured_data),
57
+ },
58
+ }),
59
+ }
60
+ );
61
+
62
+ if (errors) {
63
+ return {
64
+ assigns: {
65
+ code_settings: {
66
+ ...params,
67
+ id: revision.id,
68
+ originalId: revision.originalId,
69
+ },
70
+ errors: {
71
+ code_settings: ctx.client.eventRevisions.formatErrors(errors),
72
+ },
73
+ _translations: [],
74
+ },
75
+ };
76
+ }
77
+
78
+ return {
79
+ redirect: `/${ctx.locale}/event_revisions/${revision.id}/codes/edit`,
80
+ };
81
+ };
82
+
83
+ export default {
84
+ edit_form,
85
+ update,
86
+ };
@@ -0,0 +1,47 @@
1
+ const create = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+
4
+ const { errors, eventErrors } = await ctx.client.eventRevisions.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 (eventErrors) {
14
+ throw new Error(`Failed to start revision: ${JSON.stringify(eventErrors)}`);
15
+ }
16
+
17
+ return {
18
+ redirect: `/${ctx.locale}/events/${parent_id}`,
19
+ };
20
+ };
21
+
22
+ const destroy = async (ctx) => {
23
+ const { id } = ctx.params;
24
+
25
+ const { errors, revision } = await ctx.client.eventRevisions.delete(
26
+ id,
27
+ ctx.locale
28
+ );
29
+
30
+ if (errors) {
31
+ throw new Error(
32
+ `Failed to delete revision#${id}: ${JSON.stringify(errors)}`
33
+ );
34
+ }
35
+
36
+ return {
37
+ headers: {
38
+ "HX-Redirect": `/${ctx.locale}/events/${revision.originalId}`,
39
+ },
40
+ json: {},
41
+ };
42
+ };
43
+
44
+ export default {
45
+ destroy,
46
+ create,
47
+ };