@raketa-cloud/admin 0.0.30 → 0.0.31

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 (163) hide show
  1. package/package.json +1 -1
  2. package/src/cloud/ArticleRevisions.js +30 -1
  3. package/src/cloud/Articles.js +22 -9
  4. package/src/cloud/EventRevisions.js +40 -1
  5. package/src/cloud/Events.js +32 -11
  6. package/src/cloud/PageRevisions.js +20 -1
  7. package/src/cloud/Pages.js +13 -7
  8. package/src/cloud/RaketaClient.js +76 -0
  9. package/src/handlers/article_revisions/CodeHandler.js +18 -34
  10. package/src/handlers/article_revisions/GeneralHandler.js +19 -38
  11. package/src/handlers/article_revisions/LocksHandler.js +11 -6
  12. package/src/handlers/article_revisions/MetaHandler.js +18 -34
  13. package/src/handlers/article_revisions/TagHandler.js +23 -29
  14. package/src/handlers/article_revisions/UnlocksHandler.js +1 -1
  15. package/src/handlers/article_revisions/VisualHandler.js +18 -28
  16. package/src/handlers/articles/ArticlesHandler.js +11 -25
  17. package/src/handlers/articles/DeletesHandler.js +4 -4
  18. package/src/handlers/articles/TranslationsHandler.js +30 -56
  19. package/src/handlers/articles/URLsHandler.js +7 -7
  20. package/src/handlers/event_revisions/CodeHandler.js +22 -36
  21. package/src/handlers/event_revisions/GeneralHandler.js +22 -42
  22. package/src/handlers/event_revisions/LocksHandler.js +7 -6
  23. package/src/handlers/event_revisions/MetaHandler.js +22 -36
  24. package/src/handlers/event_revisions/TagHandler.js +25 -29
  25. package/src/handlers/event_revisions/VisualHandler.js +22 -30
  26. package/src/handlers/events/DeletesHandler.js +4 -4
  27. package/src/handlers/events/EventsHandler.js +13 -27
  28. package/src/handlers/events/TranslationsHandler.js +35 -58
  29. package/src/handlers/events/URLsHandler.js +7 -7
  30. package/src/handlers/page_revisions/CodeHandler.js +8 -34
  31. package/src/handlers/page_revisions/GeneralHandler.js +10 -37
  32. package/src/handlers/page_revisions/LocksHandler.js +11 -6
  33. package/src/handlers/page_revisions/MetaHandler.js +8 -34
  34. package/src/handlers/page_revisions/TagHandler.js +16 -27
  35. package/src/handlers/page_revisions/VisualHandler.js +8 -28
  36. package/src/handlers/pages/DeletesHandler.js +4 -4
  37. package/src/handlers/pages/PagesHandler.js +7 -24
  38. package/src/handlers/pages/TranslationsHandler.js +23 -45
  39. package/src/handlers/pages/URLsHandler.js +7 -7
  40. package/src/helpers/FormBuilder.js +1 -2
  41. package/src/tests/handlers/RedirectsHandler.test/create.test.js +1 -1
  42. package/src/tests/handlers/RedirectsHandler.test/create_form.test.js +1 -1
  43. package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +1 -1
  44. package/src/tests/handlers/RedirectsHandler.test/edit_form.test.js +1 -1
  45. package/src/tests/handlers/RedirectsHandler.test/index.test.js +1 -1
  46. package/src/tests/handlers/RedirectsHandler.test/show.test.js +1 -1
  47. package/src/tests/handlers/RedirectsHandler.test/update.test.js +1 -1
  48. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +1 -1
  49. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +1 -1
  50. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +7 -7
  51. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +37 -19
  52. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +5 -11
  53. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +36 -28
  54. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +7 -8
  55. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +41 -25
  56. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +2 -2
  57. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +2 -2
  58. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +1 -1
  59. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +10 -7
  60. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +20 -14
  61. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +7 -6
  62. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +30 -19
  63. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +2 -2
  64. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +2 -2
  65. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +53 -29
  66. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +3 -3
  67. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +2 -2
  68. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +3 -3
  69. package/src/tests/handlers/articles/ClonesHandler.test/create.test.js +1 -1
  70. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +4 -4
  71. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +2 -2
  72. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +6 -6
  73. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +2 -2
  74. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +11 -7
  75. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +43 -19
  76. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +1 -1
  77. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +1 -1
  78. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +7 -13
  79. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +42 -32
  80. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +11 -8
  81. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +47 -25
  82. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +2 -2
  83. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +2 -2
  84. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +1 -1
  85. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +14 -7
  86. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +26 -14
  87. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +11 -6
  88. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +36 -19
  89. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +2 -2
  90. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +2 -2
  91. package/src/tests/handlers/events/ClonesHandler.test/create.test.js +1 -1
  92. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +4 -4
  93. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +2 -2
  94. package/src/tests/handlers/events/EventsHandler.test/create.test.js +53 -37
  95. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +3 -3
  96. package/src/tests/handlers/events/EventsHandler.test/index.test.js +2 -2
  97. package/src/tests/handlers/events/EventsHandler.test/show.test.js +3 -3
  98. package/src/tests/handlers/events/URLsHandler.test/create.test.js +6 -6
  99. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +2 -2
  100. package/src/tests/handlers/page_revisions/CodesHandler.test/edit_form.test.js +10 -8
  101. package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +30 -17
  102. package/src/tests/handlers/page_revisions/GeneralHandler.test/edit_form.test.js +3 -11
  103. package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +38 -22
  104. package/src/tests/handlers/page_revisions/MetaHandler.test/edit_form.test.js +2 -8
  105. package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +37 -23
  106. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +1 -1
  107. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +1 -1
  108. package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +2 -2
  109. package/src/tests/handlers/page_revisions/PublishesHandler.test/create_form.test.js +2 -2
  110. package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +1 -1
  111. package/src/tests/handlers/page_revisions/TagHandler.test/edit_form.test.js +3 -7
  112. package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +11 -12
  113. package/src/tests/handlers/page_revisions/VisualHandler.test.test/edit_form.test.js +10 -7
  114. package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +23 -17
  115. package/src/tests/handlers/page_revisions/WidgetHandler.test/show.test.js +2 -2
  116. package/src/tests/handlers/page_revisions/WidgetHandler.test/update.test.js +2 -2
  117. package/src/tests/handlers/pages/ConesHandler.test/create.test.js +1 -1
  118. package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +4 -4
  119. package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +2 -2
  120. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +50 -27
  121. package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +3 -3
  122. package/src/tests/handlers/pages/PagesHandler.test/index.test.js +2 -2
  123. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +3 -3
  124. package/src/tests/handlers/pages/URLsHandler.test/create.test.js +6 -6
  125. package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +2 -2
  126. package/src/utils.js +12 -0
  127. package/src/views/_shared/_credentials_input.ejs +31 -0
  128. package/src/views/_shared/_layout_input.ejs +5 -0
  129. package/src/views/article_revisions/_nav.ejs +5 -5
  130. package/src/views/article_revisions/codes/edit_form.ejs +17 -6
  131. package/src/views/article_revisions/general/edit_form.ejs +10 -36
  132. package/src/views/article_revisions/locks/create_form.ejs +4 -4
  133. package/src/views/article_revisions/meta/edit_form.ejs +7 -7
  134. package/src/views/article_revisions/tags/edit_form.ejs +5 -5
  135. package/src/views/article_revisions/visuals/edit_form.ejs +5 -9
  136. package/src/views/articles/_form.ejs +6 -37
  137. package/src/views/articles/deletes/create_form.ejs +9 -9
  138. package/src/views/articles/translations/_form.ejs +14 -46
  139. package/src/views/articles/urls/create_form.ejs +5 -5
  140. package/src/views/event_revisions/_nav.ejs +5 -5
  141. package/src/views/event_revisions/codes/edit_form.ejs +17 -6
  142. package/src/views/event_revisions/general/edit_form.ejs +12 -38
  143. package/src/views/event_revisions/locks/create_form.ejs +4 -4
  144. package/src/views/event_revisions/meta/edit_form.ejs +7 -7
  145. package/src/views/event_revisions/tags/edit_form.ejs +5 -5
  146. package/src/views/event_revisions/visuals/edit_form.ejs +5 -9
  147. package/src/views/events/_form.ejs +8 -39
  148. package/src/views/events/deletes/create_form.ejs +9 -9
  149. package/src/views/events/translations/_form.ejs +16 -47
  150. package/src/views/events/urls/create_form.ejs +5 -5
  151. package/src/views/layouts/application.ejs +57 -35
  152. package/src/views/page_revisions/_nav.ejs +5 -5
  153. package/src/views/page_revisions/codes/edit_form.ejs +17 -6
  154. package/src/views/page_revisions/general/edit_form.ejs +8 -35
  155. package/src/views/page_revisions/locks/create_form.ejs +4 -4
  156. package/src/views/page_revisions/meta/edit_form.ejs +7 -7
  157. package/src/views/page_revisions/publishes/_form.ejs +9 -9
  158. package/src/views/page_revisions/tags/edit_form.ejs +5 -5
  159. package/src/views/page_revisions/visuals/edit_form.ejs +5 -9
  160. package/src/views/pages/_form.ejs +5 -36
  161. package/src/views/pages/deletes/create_form.ejs +9 -9
  162. package/src/views/pages/translations/_form.ejs +13 -45
  163. package/src/views/pages/urls/create_form.ejs +5 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raketa-cloud/admin",
3
- "version": "0.0.30",
3
+ "version": "0.0.31",
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",
@@ -11,8 +11,32 @@ import {
11
11
  UpdateArticleWidgetsDocument,
12
12
  ReopenArticleChangeDocument,
13
13
  } from "./documents/articlesDocuments";
14
+ import { toUTCISO8601String } from "../utils";
14
15
 
15
16
  export default class ArticleRevisions extends RaketaClient {
17
+ selectUpdateParams(revision) {
18
+ return {
19
+ title: revision.title,
20
+ slug: revision.slug,
21
+ publishAt: revision.publishAt,
22
+ widgets: [...revision.widgets],
23
+ settings: {
24
+ ...revision.settings,
25
+ },
26
+ visibility: revision.visibility,
27
+ tags: revision.tags.map((t) => (t.id ? t.id : t)),
28
+ categories: revision.categories.map((c) => (c.id ? c.id : c)),
29
+ };
30
+ }
31
+
32
+ formatDates(params) {
33
+ if (params.publishAt) {
34
+ params.publishAt = toUTCISO8601String(params.publishAt);
35
+ }
36
+
37
+ return { ...params };
38
+ }
39
+
16
40
  async all(articleId, locale) {
17
41
  const { articleRevisions: items } = await this.query(
18
42
  ArticleRevisionsDocument,
@@ -69,13 +93,18 @@ export default class ArticleRevisions extends RaketaClient {
69
93
  }
70
94
 
71
95
  async update(id, locale, params) {
96
+ const copyParams = { ...params };
97
+
98
+ copyParams.widgets = JSON.stringify(params.widgets || []);
99
+ copyParams.settings = JSON.stringify(params.settings || {});
100
+
72
101
  const {
73
102
  updateArticle: { errors, article },
74
103
  } = await this.query(UpdateArticleDocument, {
75
104
  input: {
76
105
  id,
77
106
  locale,
78
- article: params,
107
+ article: copyParams,
79
108
  },
80
109
  });
81
110
 
@@ -8,19 +8,30 @@ import {
8
8
  TranslateArticleDocument,
9
9
  ChangeArticleSlugDocument,
10
10
  } from "./documents/articlesDocuments";
11
- import { toDateTimeInput } from "../utils";
11
+ import { toDateTimeInput, toUTCISO8601String } from "../utils";
12
12
 
13
13
  export default class Articles extends RaketaClient {
14
14
  defaults() {
15
15
  return {
16
16
  visibility: "private",
17
- layout: "default",
18
- publish_at: toDateTimeInput(new Date()),
17
+ publishAt: toDateTimeInput(new Date()),
18
+ settings: {
19
+ layout: "default",
20
+ },
21
+ widgets: [],
19
22
  tags: [],
20
23
  categories: [],
21
24
  };
22
25
  }
23
26
 
27
+ formatDates(params) {
28
+ if (params.publishAt) {
29
+ params.publishAt = toUTCISO8601String(params.publishAt);
30
+ }
31
+
32
+ return { ...params };
33
+ }
34
+
24
35
  visibilityOptions() {
25
36
  return [
26
37
  ["private", "Private"],
@@ -68,15 +79,16 @@ export default class Articles extends RaketaClient {
68
79
  }
69
80
 
70
81
  async create(params, locale, articleTypeSlug) {
71
- params.widgets = JSON.stringify(params.widgets);
72
- params.settings = JSON.stringify(params.settings);
82
+ const paramsCopy = { ...params };
83
+ paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
84
+ paramsCopy.settings = JSON.stringify(paramsCopy.settings);
73
85
 
74
86
  const {
75
87
  createArticle: { errors, article },
76
88
  } = await this.query(CreateArticleDocument, {
77
89
  input: {
78
90
  locale,
79
- article: params,
91
+ article: paramsCopy,
80
92
  articleTypeSlug,
81
93
  },
82
94
  });
@@ -112,8 +124,9 @@ export default class Articles extends RaketaClient {
112
124
  }
113
125
 
114
126
  async translate(id, locale, params) {
115
- params.widgets = JSON.stringify(params.widgets);
116
- params.settings = JSON.stringify(params.settings);
127
+ const paramsCopy = { ...params };
128
+ paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
129
+ paramsCopy.settings = JSON.stringify(paramsCopy.settings);
117
130
 
118
131
  const {
119
132
  translateArticle: { errors, article },
@@ -121,7 +134,7 @@ export default class Articles extends RaketaClient {
121
134
  input: {
122
135
  locale,
123
136
  sourceArticleId: id,
124
- article: params,
137
+ article: paramsCopy,
125
138
  },
126
139
  });
127
140
 
@@ -11,8 +11,42 @@ import {
11
11
  UpdateEventWidgetsDocument,
12
12
  ReopenEventChangeDocument,
13
13
  } from "./documents/eventsDocuments";
14
+ import { toUTCISO8601String } from "../utils";
14
15
 
15
16
  export default class EventRevisions extends RaketaClient {
17
+ selectUpdateParams(revision) {
18
+ return {
19
+ title: revision.title,
20
+ slug: revision.slug,
21
+ publishAt: revision.publishAt,
22
+ startsAt: revision.startsAt,
23
+ endsAt: revision.endsAt,
24
+ widgets: [...revision.widgets],
25
+ settings: {
26
+ ...revision.settings,
27
+ },
28
+ visibility: revision.visibility,
29
+ tags: revision.tags.map((t) => (t.id ? t.id : t)),
30
+ categories: revision.categories.map((c) => (c.id ? c.id : c)),
31
+ };
32
+ }
33
+
34
+ formatDates(params) {
35
+ if (params.publishAt) {
36
+ params.publishAt = toUTCISO8601String(params.publishAt);
37
+ }
38
+
39
+ if (params.startsAt) {
40
+ params.startsAt = toUTCISO8601String(params.startsAt);
41
+ }
42
+
43
+ if (params.endsAt) {
44
+ params.endsAt = toUTCISO8601String(params.endsAt);
45
+ }
46
+
47
+ return { ...params };
48
+ }
49
+
16
50
  async all(eventId, locale) {
17
51
  const { eventRevisions: items } = await this.query(EventRevisionsDocument, {
18
52
  input: {
@@ -66,13 +100,18 @@ export default class EventRevisions extends RaketaClient {
66
100
  }
67
101
 
68
102
  async update(id, locale, params) {
103
+ const copyParams = { ...params };
104
+
105
+ copyParams.widgets = JSON.stringify(params.widgets || []);
106
+ copyParams.settings = JSON.stringify(params.settings || {});
107
+
69
108
  const {
70
109
  updateEvent: { errors, event },
71
110
  } = await this.query(UpdateEventDocument, {
72
111
  input: {
73
112
  id,
74
113
  locale,
75
- event: params,
114
+ event: copyParams,
76
115
  },
77
116
  });
78
117
 
@@ -8,21 +8,40 @@ import {
8
8
  TranslateEventDocument,
9
9
  ChangeEventSlugDocument,
10
10
  } from "./documents/eventsDocuments";
11
- import { toDateTimeInput } from "../utils";
11
+ import { toDateTimeInput, toUTCISO8601String } from "../utils";
12
12
 
13
13
  export default class Events extends RaketaClient {
14
14
  defaults() {
15
15
  return {
16
16
  visibility: "private",
17
- layout: "default",
18
- publish_at: toDateTimeInput(),
19
- starts_at: toDateTimeInput(),
20
- ends_at: toDateTimeInput(),
17
+ publishAt: toDateTimeInput(),
18
+ startsAt: toDateTimeInput(),
19
+ endsAt: toDateTimeInput(),
20
+ settings: {
21
+ layout: "default",
22
+ },
23
+ widgets: [],
21
24
  tags: [],
22
25
  categories: [],
23
26
  };
24
27
  }
25
28
 
29
+ formatDates(params) {
30
+ if (params.publishAt) {
31
+ params.publishAt = toUTCISO8601String(params.publishAt);
32
+ }
33
+
34
+ if (params.startsAt) {
35
+ params.startsAt = toUTCISO8601String(params.startsAt);
36
+ }
37
+
38
+ if (params.endsAt) {
39
+ params.endsAt = toUTCISO8601String(params.endsAt);
40
+ }
41
+
42
+ return { ...params };
43
+ }
44
+
26
45
  visibilityOptions() {
27
46
  return [
28
47
  ["private", "Private"],
@@ -70,15 +89,16 @@ export default class Events extends RaketaClient {
70
89
  }
71
90
 
72
91
  async create(params, locale, eventTypeSlug) {
73
- params.widgets = JSON.stringify(params.widgets);
74
- params.settings = JSON.stringify(params.settings);
92
+ const paramsCopy = { ...params };
93
+ paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
94
+ paramsCopy.settings = JSON.stringify(paramsCopy.settings);
75
95
 
76
96
  const {
77
97
  createEvent: { errors, event },
78
98
  } = await this.query(CreateEventDocument, {
79
99
  input: {
80
100
  locale,
81
- event: params,
101
+ event: paramsCopy,
82
102
  eventTypeSlug,
83
103
  },
84
104
  });
@@ -114,8 +134,9 @@ export default class Events extends RaketaClient {
114
134
  }
115
135
 
116
136
  async translate(id, locale, params) {
117
- params.widgets = JSON.stringify(params.widgets);
118
- params.settings = JSON.stringify(params.settings);
137
+ const paramsCopy = { ...params };
138
+ paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
139
+ paramsCopy.settings = JSON.stringify(paramsCopy.settings);
119
140
 
120
141
  const {
121
142
  translateEvent: { errors, event },
@@ -123,7 +144,7 @@ export default class Events extends RaketaClient {
123
144
  input: {
124
145
  locale,
125
146
  sourceEventId: id,
126
- event: params,
147
+ event: paramsCopy,
127
148
  },
128
149
  });
129
150
 
@@ -13,6 +13,20 @@ import {
13
13
  } from "./documents/pagesDocuments";
14
14
 
15
15
  export default class PageRevisions extends RaketaClient {
16
+ selectUpdateParams(revision) {
17
+ return {
18
+ title: revision.title,
19
+ slug: revision.slug,
20
+ widgets: [...revision.widgets],
21
+ settings: {
22
+ ...revision.settings,
23
+ },
24
+ visibility: revision.visibility,
25
+ tags: revision.tags.map((t) => (t.id ? t.id : t)),
26
+ categories: revision.categories.map((c) => (c.id ? c.id : c)),
27
+ };
28
+ }
29
+
16
30
  async all(pageId, locale) {
17
31
  const { pageRevisions: items } = await this.query(PageRevisionsDocument, {
18
32
  input: {
@@ -66,13 +80,18 @@ export default class PageRevisions extends RaketaClient {
66
80
  }
67
81
 
68
82
  async update(id, locale, params) {
83
+ const copyParams = { ...params };
84
+
85
+ copyParams.widgets = JSON.stringify(params.widgets || []);
86
+ copyParams.settings = JSON.stringify(params.settings || {});
87
+
69
88
  const {
70
89
  updatePage: { errors, page },
71
90
  } = await this.query(UpdatePageDocument, {
72
91
  input: {
73
92
  id,
74
93
  locale,
75
- page: params,
94
+ page: copyParams,
76
95
  },
77
96
  });
78
97
 
@@ -13,9 +13,12 @@ export default class Pages extends RaketaClient {
13
13
  defaults() {
14
14
  return {
15
15
  visibility: "private",
16
- layout: "default",
17
16
  tags: [],
18
17
  categories: [],
18
+ widgets: [],
19
+ settings: {
20
+ layout: "default",
21
+ },
19
22
  };
20
23
  }
21
24
 
@@ -66,15 +69,16 @@ export default class Pages extends RaketaClient {
66
69
  }
67
70
 
68
71
  async create(params, locale, pageTypeSlug) {
69
- params.widgets = JSON.stringify(params.widgets);
70
- params.settings = JSON.stringify(params.settings);
72
+ const paramsCopy = { ...params };
73
+ paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
74
+ paramsCopy.settings = JSON.stringify(paramsCopy.settings);
71
75
 
72
76
  const {
73
77
  createPage: { errors, page },
74
78
  } = await this.query(CreatePageDocument, {
75
79
  input: {
76
80
  locale,
77
- page: params,
81
+ page: paramsCopy,
78
82
  pageTypeSlug,
79
83
  },
80
84
  });
@@ -110,8 +114,10 @@ export default class Pages extends RaketaClient {
110
114
  }
111
115
 
112
116
  async translate(id, locale, params) {
113
- params.widgets = JSON.stringify(params.widgets);
114
- params.settings = JSON.stringify(params.settings);
117
+ const copyParams = { ...params };
118
+
119
+ copyParams.widgets = JSON.stringify(copyParams.widgets);
120
+ copyParams.settings = JSON.stringify(copyParams.settings);
115
121
 
116
122
  const {
117
123
  translatePage: { errors, page },
@@ -119,7 +125,7 @@ export default class Pages extends RaketaClient {
119
125
  input: {
120
126
  locale,
121
127
  sourcePageId: id,
122
- page: params,
128
+ page: copyParams,
123
129
  },
124
130
  });
125
131
 
@@ -8,6 +8,78 @@ function isObjectEmpty(obj) {
8
8
  return true;
9
9
  }
10
10
 
11
+ function deepMerge(target, updates) {
12
+ if (typeof target !== "object" || target === null) {
13
+ return updates;
14
+ }
15
+
16
+ if (typeof updates !== "object" || updates === null) {
17
+ return target;
18
+ }
19
+
20
+ for (let key of Object.keys(updates)) {
21
+ if (Array.isArray(updates[key])) {
22
+ if (!Array.isArray(target[key])) {
23
+ target[key] = [];
24
+ }
25
+ target[key] = updates[key];
26
+ } else if (typeof updates[key] === "object" && updates[key] !== null) {
27
+ if (!target[key] || typeof target[key] !== "object") {
28
+ target[key] = {};
29
+ }
30
+ target[key] = deepMerge(target[key], updates[key]);
31
+ } else {
32
+ target[key] = updates[key];
33
+ }
34
+ }
35
+
36
+ return target;
37
+ }
38
+
39
+ function parseJson(str) {
40
+ if (!str) {
41
+ return str;
42
+ }
43
+
44
+ try {
45
+ const res = JSON.parse(str);
46
+
47
+ if (typeof res === "object") {
48
+ return res;
49
+ }
50
+
51
+ return str;
52
+ } catch (e) {
53
+ return str;
54
+ }
55
+ }
56
+
57
+ function parseJsonFields(params) {
58
+ if (!params) {
59
+ return params;
60
+ }
61
+
62
+ if (typeof params === "string") {
63
+ return parseJson(params);
64
+ }
65
+
66
+ for (let key of Object.keys(params)) {
67
+ if (typeof params[key] === "string") {
68
+ params[key] = parseJson(params[key]);
69
+ }
70
+
71
+ if (Array.isArray(params[key])) {
72
+ params[key] = params[key].map((item) => parseJsonFields(item));
73
+ }
74
+
75
+ if (typeof params[key] === "object") {
76
+ params[key] = parseJsonFields(params[key]);
77
+ }
78
+ }
79
+
80
+ return params;
81
+ }
82
+
11
83
  export default class RaketaClient {
12
84
  constructor(getConfig, token) {
13
85
  this.getConfig = getConfig;
@@ -134,4 +206,8 @@ export default class RaketaClient {
134
206
 
135
207
  return variables;
136
208
  }
209
+
210
+ deepMerge(target, source) {
211
+ return parseJsonFields(deepMerge(structuredClone(target), source));
212
+ }
137
213
  }
@@ -1,27 +1,23 @@
1
+ import { toDateTimeInput } from "../../utils";
2
+
1
3
  const edit_form = async (ctx) => {
2
4
  const { parent_id } = ctx.params;
3
5
 
4
- const revision = await ctx.client.articleRevisions.find(
6
+ const resource = await ctx.client.articleRevisions.find(
5
7
  parent_id,
6
8
  ctx.locale
7
9
  );
8
10
 
9
- if (!revision) {
11
+ if (!resource) {
10
12
  throw new Error(`Missing revision #${parent_id}`);
11
13
  }
12
14
 
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
15
  return {
23
16
  assigns: {
24
- code_settings,
17
+ resource: {
18
+ ...resource,
19
+ publishAt: toDateTimeInput(resource.publishAt),
20
+ },
25
21
  errors: {},
26
22
  _translations: [],
27
23
  },
@@ -40,39 +36,27 @@ const update = async (ctx) => {
40
36
  throw new Error(`Missing revision #${parent_id}`);
41
37
  }
42
38
 
43
- const params = ctx.resourceParams.code_settings;
39
+ const params = ctx.resourceParams.resource;
40
+ const resource = ctx.client.articleRevisions.deepMerge(
41
+ revision,
42
+ ctx.client.articleRevisions.formatDates(params)
43
+ );
44
44
 
45
45
  const { errors } = await ctx.client.articleRevisions.update(
46
46
  revision.id,
47
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
- }
48
+ ctx.client.articleRevisions.selectUpdateParams(resource)
64
49
  );
65
50
 
66
51
  if (errors) {
67
52
  return {
68
53
  assigns: {
69
- code_settings: {
70
- ...params,
71
- id: revision.id,
72
- originalId: revision.originalId,
54
+ resource: {
55
+ ...resource,
56
+ publishAt: toDateTimeInput(resource.publishAt),
73
57
  },
74
58
  errors: {
75
- code_settings: ctx.client.articleRevisions.formatErrors(errors),
59
+ resource: ctx.client.articleRevisions.formatErrors(errors),
76
60
  },
77
61
  _translations: [],
78
62
  },
@@ -1,32 +1,25 @@
1
- import { toDateTimeInput, toUTCISO8601String } from "../../utils";
1
+ import { toDateTimeInput } from "../../utils";
2
+
2
3
  const edit_form = async (ctx) => {
3
4
  const { parent_id } = ctx.params;
4
5
 
5
- const revision = await ctx.client.articleRevisions.find(
6
+ const resource = await ctx.client.articleRevisions.find(
6
7
  parent_id,
7
8
  ctx.locale
8
9
  );
9
10
 
10
- if (!revision) {
11
+ if (!resource) {
11
12
  throw new Error(`Missing revision #${parent_id}`);
12
13
  }
13
14
 
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
15
  return {
26
16
  assigns: {
27
- general_settings,
28
- errors: {},
17
+ resource: {
18
+ ...resource,
19
+ publishAt: toDateTimeInput(resource.publishAt),
20
+ },
29
21
  visibilityOptions: ctx.client.articles.visibilityOptions(),
22
+ errors: {},
30
23
  _translations: [],
31
24
  },
32
25
  };
@@ -44,39 +37,27 @@ const update = async (ctx) => {
44
37
  throw new Error(`Missing revision #${parent_id}`);
45
38
  }
46
39
 
47
- const params = ctx.resourceParams.general_settings;
40
+ const params = ctx.resourceParams.resource;
41
+ const resource = ctx.client.articleRevisions.deepMerge(
42
+ revision,
43
+ ctx.client.articleRevisions.formatDates(params)
44
+ );
48
45
 
49
46
  const { errors } = await ctx.client.articleRevisions.update(
50
47
  revision.id,
51
48
  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
- }
49
+ ctx.client.articleRevisions.selectUpdateParams(resource)
68
50
  );
69
51
 
70
52
  if (errors) {
71
53
  return {
72
54
  assigns: {
73
- general_settings: {
74
- ...params,
75
- id: revision.id,
76
- originalId: revision.originalId,
55
+ resource: {
56
+ ...resource,
57
+ publishAt: toDateTimeInput(resource.publishAt),
77
58
  },
78
59
  errors: {
79
- general_settings: ctx.client.articleRevisions.formatErrors(errors),
60
+ resource: ctx.client.articleRevisions.formatErrors(errors),
80
61
  },
81
62
  visibilityOptions: ctx.client.articles.visibilityOptions(),
82
63
  _translations: [],
@@ -6,14 +6,15 @@ const create_form = async (ctx) => {
6
6
  ctx.locale
7
7
  );
8
8
 
9
- const lock_settings = {
10
- revision,
9
+ const resource = {
10
+ id: revision.id,
11
+ originalId: revision.originalId,
11
12
  message: "",
12
13
  };
13
14
 
14
15
  return {
15
16
  assigns: {
16
- lock_settings,
17
+ resource,
17
18
  errors: {},
18
19
  _translations: [],
19
20
  },
@@ -22,7 +23,7 @@ const create_form = async (ctx) => {
22
23
 
23
24
  const create = async (ctx) => {
24
25
  const { parent_id } = ctx.params;
25
- const { message } = ctx.resourceParams.lock_settings;
26
+ const { message } = ctx.resourceParams.resource;
26
27
 
27
28
  const { revision, errors, articleErrors } =
28
29
  await ctx.client.articleRevisions.lock(parent_id, ctx.locale, message);
@@ -30,9 +31,13 @@ const create = async (ctx) => {
30
31
  if (errors) {
31
32
  return {
32
33
  assigns: {
33
- lock_settings: { revision, message },
34
+ resource: {
35
+ id: revision.id,
36
+ originalId: revision.originalId,
37
+ message,
38
+ },
34
39
  errors: {
35
- lock_settings: ctx.client.articles.formatErrors(errors, "message"),
40
+ resource: ctx.client.articles.formatErrors(errors, "message"),
36
41
  },
37
42
  _translations: [],
38
43
  },