@raketa-cloud/admin 0.0.30 → 0.0.33

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 (173) hide show
  1. package/package.json +1 -1
  2. package/src/Adapter.js +3 -6
  3. package/src/HonoAdapter.js +3 -3
  4. package/src/Logger.js +21 -0
  5. package/src/cloud/ArticleRevisions.js +30 -1
  6. package/src/cloud/Articles.js +22 -9
  7. package/src/cloud/EventRevisions.js +40 -1
  8. package/src/cloud/Events.js +32 -11
  9. package/src/cloud/PageRevisions.js +20 -1
  10. package/src/cloud/Pages.js +13 -7
  11. package/src/cloud/RaketaClient.js +76 -0
  12. package/src/handlers/article_revisions/CodeHandler.js +18 -34
  13. package/src/handlers/article_revisions/GeneralHandler.js +19 -38
  14. package/src/handlers/article_revisions/LocksHandler.js +11 -6
  15. package/src/handlers/article_revisions/MetaHandler.js +18 -34
  16. package/src/handlers/article_revisions/TagHandler.js +23 -29
  17. package/src/handlers/article_revisions/UnlocksHandler.js +1 -1
  18. package/src/handlers/article_revisions/VisualHandler.js +18 -28
  19. package/src/handlers/articles/ArticlesHandler.js +11 -25
  20. package/src/handlers/articles/DeletesHandler.js +4 -4
  21. package/src/handlers/articles/TranslationsHandler.js +30 -56
  22. package/src/handlers/articles/URLsHandler.js +7 -7
  23. package/src/handlers/event_revisions/CodeHandler.js +22 -36
  24. package/src/handlers/event_revisions/GeneralHandler.js +22 -42
  25. package/src/handlers/event_revisions/LocksHandler.js +7 -6
  26. package/src/handlers/event_revisions/MetaHandler.js +22 -36
  27. package/src/handlers/event_revisions/TagHandler.js +25 -29
  28. package/src/handlers/event_revisions/VisualHandler.js +22 -30
  29. package/src/handlers/events/DeletesHandler.js +4 -4
  30. package/src/handlers/events/EventsHandler.js +13 -27
  31. package/src/handlers/events/TranslationsHandler.js +35 -58
  32. package/src/handlers/events/URLsHandler.js +7 -7
  33. package/src/handlers/page_revisions/CodeHandler.js +8 -34
  34. package/src/handlers/page_revisions/GeneralHandler.js +10 -37
  35. package/src/handlers/page_revisions/LocksHandler.js +11 -6
  36. package/src/handlers/page_revisions/MetaHandler.js +8 -34
  37. package/src/handlers/page_revisions/TagHandler.js +16 -27
  38. package/src/handlers/page_revisions/VisualHandler.js +8 -28
  39. package/src/handlers/pages/DeletesHandler.js +4 -4
  40. package/src/handlers/pages/PagesHandler.js +7 -24
  41. package/src/handlers/pages/TranslationsHandler.js +23 -45
  42. package/src/handlers/pages/URLsHandler.js +7 -7
  43. package/src/helpers/FormBuilder.js +1 -2
  44. package/src/helpers/Inflector.js +6 -0
  45. package/src/index.js +2 -0
  46. package/src/styles/application.css +7 -7
  47. package/src/tests/handlers/RedirectsHandler.test/create.test.js +1 -1
  48. package/src/tests/handlers/RedirectsHandler.test/create_form.test.js +1 -1
  49. package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +1 -1
  50. package/src/tests/handlers/RedirectsHandler.test/edit_form.test.js +1 -1
  51. package/src/tests/handlers/RedirectsHandler.test/index.test.js +1 -1
  52. package/src/tests/handlers/RedirectsHandler.test/show.test.js +1 -1
  53. package/src/tests/handlers/RedirectsHandler.test/update.test.js +1 -1
  54. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +1 -1
  55. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +1 -1
  56. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +7 -7
  57. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +37 -19
  58. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +5 -11
  59. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +36 -28
  60. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +7 -8
  61. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +41 -25
  62. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +2 -2
  63. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +2 -2
  64. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +1 -1
  65. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +10 -7
  66. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +20 -14
  67. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +7 -6
  68. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +30 -19
  69. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +2 -2
  70. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +2 -2
  71. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +53 -29
  72. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +3 -3
  73. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +2 -2
  74. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +3 -3
  75. package/src/tests/handlers/articles/ClonesHandler.test/create.test.js +1 -1
  76. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +4 -4
  77. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +2 -2
  78. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +6 -6
  79. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +2 -2
  80. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +11 -7
  81. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +43 -19
  82. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +1 -1
  83. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +1 -1
  84. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +7 -13
  85. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +42 -32
  86. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +11 -8
  87. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +47 -25
  88. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +2 -2
  89. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +2 -2
  90. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +1 -1
  91. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +14 -7
  92. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +26 -14
  93. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +11 -6
  94. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +36 -19
  95. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +2 -2
  96. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +2 -2
  97. package/src/tests/handlers/events/ClonesHandler.test/create.test.js +1 -1
  98. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +4 -4
  99. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +2 -2
  100. package/src/tests/handlers/events/EventsHandler.test/create.test.js +53 -37
  101. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +3 -3
  102. package/src/tests/handlers/events/EventsHandler.test/index.test.js +2 -2
  103. package/src/tests/handlers/events/EventsHandler.test/show.test.js +3 -3
  104. package/src/tests/handlers/events/URLsHandler.test/create.test.js +6 -6
  105. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +2 -2
  106. package/src/tests/handlers/page_revisions/CodesHandler.test/edit_form.test.js +10 -8
  107. package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +30 -17
  108. package/src/tests/handlers/page_revisions/GeneralHandler.test/edit_form.test.js +3 -11
  109. package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +38 -22
  110. package/src/tests/handlers/page_revisions/MetaHandler.test/edit_form.test.js +2 -8
  111. package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +37 -23
  112. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +1 -1
  113. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +1 -1
  114. package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +2 -2
  115. package/src/tests/handlers/page_revisions/PublishesHandler.test/create_form.test.js +2 -2
  116. package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +1 -1
  117. package/src/tests/handlers/page_revisions/TagHandler.test/edit_form.test.js +3 -7
  118. package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +11 -12
  119. package/src/tests/handlers/page_revisions/VisualHandler.test.test/edit_form.test.js +10 -7
  120. package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +23 -17
  121. package/src/tests/handlers/page_revisions/WidgetHandler.test/show.test.js +2 -2
  122. package/src/tests/handlers/page_revisions/WidgetHandler.test/update.test.js +2 -2
  123. package/src/tests/handlers/pages/ConesHandler.test/create.test.js +1 -1
  124. package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +4 -4
  125. package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +2 -2
  126. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +50 -27
  127. package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +3 -3
  128. package/src/tests/handlers/pages/PagesHandler.test/index.test.js +2 -2
  129. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +3 -3
  130. package/src/tests/handlers/pages/URLsHandler.test/create.test.js +6 -6
  131. package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +2 -2
  132. package/src/utils.js +12 -0
  133. package/src/views/_shared/_credentials_input.ejs +31 -0
  134. package/src/views/_shared/_layout_input.ejs +5 -0
  135. package/src/views/article_revisions/_nav.ejs +5 -5
  136. package/src/views/article_revisions/codes/edit_form.ejs +17 -6
  137. package/src/views/article_revisions/general/edit_form.ejs +10 -36
  138. package/src/views/article_revisions/locks/create_form.ejs +4 -4
  139. package/src/views/article_revisions/meta/edit_form.ejs +7 -7
  140. package/src/views/article_revisions/tags/edit_form.ejs +5 -5
  141. package/src/views/article_revisions/visuals/edit_form.ejs +5 -9
  142. package/src/views/articles/_form.ejs +6 -37
  143. package/src/views/articles/deletes/create_form.ejs +9 -9
  144. package/src/views/articles/index.ejs +1 -1
  145. package/src/views/articles/translations/_form.ejs +14 -46
  146. package/src/views/articles/urls/create_form.ejs +5 -5
  147. package/src/views/event_revisions/_nav.ejs +5 -5
  148. package/src/views/event_revisions/codes/edit_form.ejs +17 -6
  149. package/src/views/event_revisions/general/edit_form.ejs +12 -38
  150. package/src/views/event_revisions/locks/create_form.ejs +4 -4
  151. package/src/views/event_revisions/meta/edit_form.ejs +7 -7
  152. package/src/views/event_revisions/tags/edit_form.ejs +5 -5
  153. package/src/views/event_revisions/visuals/edit_form.ejs +5 -9
  154. package/src/views/events/_form.ejs +8 -39
  155. package/src/views/events/deletes/create_form.ejs +9 -9
  156. package/src/views/events/index.ejs +1 -1
  157. package/src/views/events/translations/_form.ejs +16 -47
  158. package/src/views/events/urls/create_form.ejs +5 -5
  159. package/src/views/layouts/application.ejs +57 -35
  160. package/src/views/page_revisions/_nav.ejs +5 -5
  161. package/src/views/page_revisions/codes/edit_form.ejs +17 -6
  162. package/src/views/page_revisions/general/edit_form.ejs +8 -35
  163. package/src/views/page_revisions/locks/create_form.ejs +4 -4
  164. package/src/views/page_revisions/meta/edit_form.ejs +7 -7
  165. package/src/views/page_revisions/publishes/_form.ejs +9 -9
  166. package/src/views/page_revisions/tags/edit_form.ejs +5 -5
  167. package/src/views/page_revisions/visuals/edit_form.ejs +5 -9
  168. package/src/views/pages/_form.ejs +5 -36
  169. package/src/views/pages/deletes/create_form.ejs +9 -9
  170. package/src/views/pages/index.ejs +1 -1
  171. package/src/views/pages/translations/_form.ejs +13 -45
  172. package/src/views/pages/urls/create_form.ejs +5 -5
  173. package/tailwind.config.js +1 -0
@@ -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
  },
@@ -1,26 +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 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
15
  return {
22
16
  assigns: {
23
- meta_settings,
17
+ resource: {
18
+ ...resource,
19
+ publishAt: toDateTimeInput(resource.publishAt),
20
+ },
24
21
  errors: {},
25
22
  _translations: [],
26
23
  },
@@ -39,40 +36,27 @@ const update = async (ctx) => {
39
36
  throw new Error(`Missing revision #${parent_id}`);
40
37
  }
41
38
 
42
- const params = ctx.resourceParams.meta_settings;
39
+ const params = ctx.resourceParams.resource;
40
+ const resource = ctx.client.articleRevisions.deepMerge(
41
+ revision,
42
+ ctx.client.articleRevisions.formatDates(params)
43
+ );
43
44
 
44
45
  const { errors } = await ctx.client.articleRevisions.update(
45
46
  revision.id,
46
47
  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
- }
48
+ ctx.client.articleRevisions.selectUpdateParams(resource)
64
49
  );
65
50
 
66
51
  if (errors) {
67
52
  return {
68
53
  assigns: {
69
- meta_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
- meta_settings: ctx.client.articleRevisions.formatErrors(errors),
59
+ resource: ctx.client.articleRevisions.formatErrors(errors),
76
60
  },
77
61
  _translations: [],
78
62
  },
@@ -1,28 +1,28 @@
1
+ import { toDateTimeInput, checkboxesToArray } 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
15
  const tags = await ctx.client.tags.all(ctx.locale);
14
16
 
15
- const tag_settings = {
16
- id: revision.id,
17
- originalId: revision.originalId,
18
- tags: revision.tags.map((t) => t.id),
19
- };
20
-
21
17
  return {
22
18
  assigns: {
23
- tag_settings,
24
- errors: {},
19
+ resource: {
20
+ ...resource,
21
+ publishAt: toDateTimeInput(resource.publishAt),
22
+ tags: resource.tags.map((t) => t.id),
23
+ },
25
24
  tags: tags.list,
25
+ errors: {},
26
26
  _translations: [],
27
27
  },
28
28
  };
@@ -40,23 +40,18 @@ const update = async (ctx) => {
40
40
  throw new Error(`Missing revision #${parent_id}`);
41
41
  }
42
42
 
43
- const params = ctx.resourceParams.tag_settings;
43
+ const params = ctx.resourceParams.resource ? ctx.resourceParams.resource : {};
44
+ params.tags = checkboxesToArray(params.tags);
45
+
46
+ const resource = ctx.client.articleRevisions.deepMerge(
47
+ revision,
48
+ ctx.client.articleRevisions.formatDates(params)
49
+ );
44
50
 
45
51
  const { errors } = await ctx.client.articleRevisions.update(
46
52
  revision.id,
47
53
  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: params.tags,
55
- categories: revision.categories.map((c) => c.id),
56
- settings: JSON.stringify({
57
- ...revision.settings,
58
- }),
59
- }
54
+ ctx.client.articleRevisions.selectUpdateParams(resource)
60
55
  );
61
56
 
62
57
  if (errors) {
@@ -64,15 +59,14 @@ const update = async (ctx) => {
64
59
 
65
60
  return {
66
61
  assigns: {
67
- tag_settings: {
68
- ...params,
69
- id: revision.id,
70
- originalId: revision.originalId,
62
+ resource: {
63
+ ...resource,
64
+ publishAt: toDateTimeInput(resource.publishAt),
71
65
  },
66
+ tags: tags.list,
72
67
  errors: {
73
- tag_settings: ctx.client.articleRevisions.formatErrors(errors),
68
+ resource: ctx.client.articleRevisions.formatErrors(errors),
74
69
  },
75
- tags: tags.list,
76
70
  _translations: [],
77
71
  },
78
72
  };
@@ -13,7 +13,7 @@ const create = async (ctx) => {
13
13
  }
14
14
 
15
15
  return {
16
- redirect: `/${ctx.locale}/${ctx.resourceConfig.articleType}/${revision.originalId}`,
16
+ redirect: `/${ctx.locale}/${ctx.resourceConfig.articleTypePlural}/${revision.originalId}`,
17
17
  };
18
18
  };
19
19
 
@@ -1,24 +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 visual_settings = {
14
- id: revision.id,
15
- originalId: revision.originalId,
16
- layout: revision.settings.layout,
17
- };
18
-
19
15
  return {
20
16
  assigns: {
21
- visual_settings,
17
+ resource: {
18
+ ...resource,
19
+ publishAt: toDateTimeInput(resource.publishAt),
20
+ },
22
21
  errors: {},
23
22
  _translations: [],
24
23
  },
@@ -37,36 +36,27 @@ const update = async (ctx) => {
37
36
  throw new Error(`Missing revision #${parent_id}`);
38
37
  }
39
38
 
40
- const params = ctx.resourceParams.visual_settings;
39
+ const params = ctx.resourceParams.resource;
40
+ const resource = ctx.client.articleRevisions.deepMerge(
41
+ revision,
42
+ ctx.client.articleRevisions.formatDates(params)
43
+ );
41
44
 
42
45
  const { errors } = await ctx.client.articleRevisions.update(
43
46
  revision.id,
44
47
  ctx.locale,
45
- {
46
- slug: revision.slug,
47
- title: revision.title,
48
- visibility: revision.visibility,
49
- publishAt: revision.publishAt,
50
- widgets: JSON.stringify(revision.widgets),
51
- tags: revision.tags.map((t) => t.id),
52
- categories: revision.categories.map((c) => c.id),
53
- settings: JSON.stringify({
54
- ...revision.settings,
55
- layout: params.layout,
56
- }),
57
- }
48
+ ctx.client.articleRevisions.selectUpdateParams(resource)
58
49
  );
59
50
 
60
51
  if (errors) {
61
52
  return {
62
53
  assigns: {
63
- visual_settings: {
64
- ...params,
65
- id: revision.id,
66
- originalId: revision.originalId,
54
+ resource: {
55
+ ...resource,
56
+ publishAt: toDateTimeInput(resource.publishAt),
67
57
  },
68
58
  errors: {
69
- visual_settings: ctx.client.articleRevisions.formatErrors(errors),
59
+ resource: ctx.client.articleRevisions.formatErrors(errors),
70
60
  },
71
61
  _translations: [],
72
62
  },
@@ -1,4 +1,4 @@
1
- import { toUTCISO8601String } from "../../utils";
1
+ import { toDateTimeInput } from "../../utils";
2
2
 
3
3
  const index = async (ctx) => {
4
4
  const items = await ctx.client.articles.list(
@@ -56,7 +56,7 @@ const create_form = async (ctx) => {
56
56
 
57
57
  return {
58
58
  assigns: {
59
- resource: { ...ctx.client.articles.defaults(), meta_image: {} },
59
+ resource: { ...ctx.client.articles.defaults() },
60
60
  tags: tags.list,
61
61
  errors: {},
62
62
  visibilityOptions: ctx.client.articles.visibilityOptions(),
@@ -68,30 +68,13 @@ const create_form = async (ctx) => {
68
68
  const create = async (ctx) => {
69
69
  const params = { ...ctx.resourceParams.resource };
70
70
 
71
- params.meta_image = JSON.parse(params.meta_image || "{}");
71
+ const resource = ctx.client.articles.deepMerge(
72
+ ctx.client.articles.defaults(),
73
+ ctx.client.articles.formatDates(params)
74
+ );
72
75
 
73
76
  const { errors } = await ctx.client.articles.create(
74
- {
75
- title: params.title,
76
- slug: params.slug,
77
- visibility: params.visibility,
78
- publishAt: toUTCISO8601String(params.publish_at),
79
- settings: {
80
- layout: params.layout,
81
- meta: {
82
- title: params.meta_title,
83
- description: params.meta_description,
84
- image: params.meta_image,
85
- },
86
- credentials: {
87
- user: params.username || "",
88
- password: params.password || "",
89
- },
90
- },
91
- widgets: [],
92
- tags: params.tags || [],
93
- categories: params.categories || [],
94
- },
77
+ resource,
95
78
  ctx.locale,
96
79
  ctx.resourceConfig.articleType
97
80
  );
@@ -101,7 +84,10 @@ const create = async (ctx) => {
101
84
 
102
85
  return {
103
86
  assigns: {
104
- resource: params,
87
+ resource: {
88
+ ...resource,
89
+ publishAt: toDateTimeInput(resource.publishAt),
90
+ },
105
91
  tags: tags.list,
106
92
  errors: { resource: ctx.client.articles.formatErrors(errors) },
107
93
  visibilityOptions: ctx.client.articles.visibilityOptions(),
@@ -8,7 +8,7 @@ const create_form = async (ctx) => {
8
8
 
9
9
  return {
10
10
  assigns: {
11
- deleteAction: {
11
+ resource: {
12
12
  id: article.id,
13
13
  redirect: "",
14
14
  },
@@ -20,7 +20,7 @@ const create_form = async (ctx) => {
20
20
 
21
21
  const create = async (ctx) => {
22
22
  const { parent_id } = ctx.params;
23
- const params = ctx.resourceParams.deleteAction;
23
+ const params = ctx.resourceParams.resource;
24
24
  const article = await ctx.client.articles.find(parent_id, ctx.locale);
25
25
 
26
26
  if (!article) {
@@ -51,9 +51,9 @@ const create = async (ctx) => {
51
51
  if (errors) {
52
52
  return {
53
53
  assigns: {
54
- deleteAction: { ...params, id: article.id },
54
+ resource: { ...params, id: article.id },
55
55
  errors: {
56
- deleteAction: ctx.client.articles.formatErrors(errors, "redirect"),
56
+ resource: ctx.client.articles.formatErrors(errors, "redirect"),
57
57
  },
58
58
  _translations: [],
59
59
  },
@@ -1,38 +1,23 @@
1
- import { toDateTimeInput, toUTCISO8601String } from "../../utils";
1
+ import { toDateTimeInput } from "../../utils";
2
2
 
3
3
  const create_form = async (ctx) => {
4
- // const tags = await ctx.client.tags.all(ctx.locale);
5
4
  const { target_locale } = ctx.query;
6
5
  const target_locate_tags = await ctx.client.tags.all(target_locale);
7
6
 
8
7
  const { parent_id } = ctx.params;
9
- const blueprint_resource = await ctx.client.articles.find(
10
- parent_id,
11
- ctx.locale
12
- );
13
-
14
- const translation = {
15
- title: blueprint_resource.title,
16
- slug: blueprint_resource.slug,
17
- visibility: blueprint_resource.visibility,
18
- publish_at: toDateTimeInput(blueprint_resource.publishAt),
19
- layout: blueprint_resource.settings.layout,
20
- meta_title: blueprint_resource.settings.meta.title,
21
- meta_description: blueprint_resource.settings.meta.description,
22
- meta_image: blueprint_resource.settings.meta?.image || {},
23
- username: blueprint_resource.settings.credentials?.user,
24
- password: blueprint_resource.settings.credentials?.password,
25
- tags: [],
26
- // categories: blueprint_resource.categories, # TODO: this will be added later?
27
- };
8
+ const blueprint = await ctx.client.articles.find(parent_id, ctx.locale);
9
+ const resource = structuredClone(blueprint);
28
10
 
29
11
  return {
30
12
  assigns: {
31
- resource: blueprint_resource,
32
- translation: translation,
13
+ resource: {
14
+ ...resource,
15
+ tags: [],
16
+ publishAt: toDateTimeInput(blueprint.publishAt),
17
+ },
18
+ blueprint,
33
19
  targetLocale: target_locale,
34
20
  tags: target_locate_tags.list,
35
- blueprint_tags: blueprint_resource.tags,
36
21
  errors: {},
37
22
  visibilityOptions: ctx.client.articles.visibilityOptions(),
38
23
  _translations: [],
@@ -42,41 +27,27 @@ const create_form = async (ctx) => {
42
27
 
43
28
  const create = async (ctx) => {
44
29
  const { parent_id } = ctx.params;
45
- const blueprint_resource = await ctx.client.articles.find(
46
- parent_id,
47
- ctx.locale
48
- );
30
+ const blueprint = await ctx.client.articles.find(parent_id, ctx.locale);
49
31
 
50
32
  const { target_locale } = ctx.resourceParams;
51
- const translation = { ...ctx.resourceParams.translation };
33
+ const params = { ...ctx.resourceParams.resource };
52
34
 
53
- translation.meta_image = JSON.parse(translation.meta_image || "{}");
35
+ const resource = ctx.client.articles.deepMerge(
36
+ {
37
+ settings: {
38
+ ...blueprint.settings,
39
+ },
40
+ widgets: blueprint.widgets,
41
+ categories: blueprint.categories.map((category) => category.id),
42
+ tags: [],
43
+ },
44
+ ctx.client.articles.formatDates(params)
45
+ );
54
46
 
55
47
  const { errors } = await ctx.client.articles.translate(
56
48
  parent_id,
57
49
  target_locale,
58
- {
59
- title: translation.title,
60
- slug: translation.slug,
61
- visibility: translation.visibility,
62
- publishAt: toUTCISO8601String(translation.publish_at),
63
- settings: {
64
- ...blueprint_resource.settings,
65
- layout: translation.layout,
66
- meta: {
67
- title: translation.meta_title,
68
- description: translation.meta_description,
69
- image: translation.meta_image || "{}",
70
- },
71
- credentials: {
72
- user: translation.username || "",
73
- password: translation.password || "",
74
- },
75
- },
76
- widgets: blueprint_resource.widgets,
77
- tags: translation.tags || [],
78
- categories: blueprint_resource.categories.map((category) => category.id),
79
- }
50
+ resource
80
51
  );
81
52
 
82
53
  if (errors) {
@@ -84,11 +55,14 @@ const create = async (ctx) => {
84
55
 
85
56
  return {
86
57
  assigns: {
87
- resource: blueprint_resource,
88
- translation: translation,
89
- targetLocale: translation.target_locate,
58
+ resource: {
59
+ ...resource,
60
+ publishAt: toDateTimeInput(resource.publishAt),
61
+ },
62
+ blueprint,
63
+ targetLocale: target_locale,
90
64
  tags: tags.list,
91
- errors: {},
65
+ errors: { resource: ctx.client.pages.formatErrors(errors) },
92
66
  visibilityOptions: ctx.client.articles.visibilityOptions(),
93
67
  _translations: [],
94
68
  },
@@ -10,7 +10,7 @@ const create_form = async (ctx) => {
10
10
 
11
11
  return {
12
12
  assigns: {
13
- change: {
13
+ resource: {
14
14
  id: article.id,
15
15
  slug: article.slug,
16
16
  redirect: null,
@@ -23,7 +23,7 @@ const create_form = async (ctx) => {
23
23
 
24
24
  const create = async (ctx) => {
25
25
  const { parent_id } = ctx.params;
26
- const change = ctx.resourceParams.change;
26
+ const resource = ctx.resourceParams.resource;
27
27
 
28
28
  const article = await ctx.client.articles.find(parent_id, ctx.locale);
29
29
 
@@ -35,7 +35,7 @@ const create = async (ctx) => {
35
35
 
36
36
  let redirectParams = null;
37
37
 
38
- if (change.redirect) {
38
+ if (resource.redirect) {
39
39
  redirectParams = {
40
40
  url: ctx.remoteConfig.resourcePath(
41
41
  article,
@@ -43,7 +43,7 @@ const create = async (ctx) => {
43
43
  ctx.locale
44
44
  ),
45
45
  url: `/${article.slug}`,
46
- destination: change.slug,
46
+ destination: resource.slug,
47
47
  httpResponseCode: 301,
48
48
  note: `Created with changed URL for a resource of type ${ctx.resourceConfig.articleType}`,
49
49
  };
@@ -51,7 +51,7 @@ const create = async (ctx) => {
51
51
 
52
52
  const { errors } = await ctx.client.articles.updateSlug(
53
53
  parent_id,
54
- change.slug,
54
+ resource.slug,
55
55
  ctx.locale,
56
56
  redirectParams
57
57
  );
@@ -59,9 +59,9 @@ const create = async (ctx) => {
59
59
  if (errors) {
60
60
  return {
61
61
  assigns: {
62
- change: { ...change, id: article.id },
62
+ resource: { ...resource, id: article.id },
63
63
  errors: {
64
- change: ctx.client.articles.formatErrors(errors, "redirect"),
64
+ resource: ctx.client.articles.formatErrors(errors, "redirect"),
65
65
  },
66
66
  _translations: [],
67
67
  },