@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.
- package/package.json +1 -1
- package/src/Adapter.js +3 -6
- package/src/HonoAdapter.js +3 -3
- package/src/Logger.js +21 -0
- package/src/cloud/ArticleRevisions.js +30 -1
- package/src/cloud/Articles.js +22 -9
- package/src/cloud/EventRevisions.js +40 -1
- package/src/cloud/Events.js +32 -11
- package/src/cloud/PageRevisions.js +20 -1
- package/src/cloud/Pages.js +13 -7
- package/src/cloud/RaketaClient.js +76 -0
- package/src/handlers/article_revisions/CodeHandler.js +18 -34
- package/src/handlers/article_revisions/GeneralHandler.js +19 -38
- package/src/handlers/article_revisions/LocksHandler.js +11 -6
- package/src/handlers/article_revisions/MetaHandler.js +18 -34
- package/src/handlers/article_revisions/TagHandler.js +23 -29
- package/src/handlers/article_revisions/UnlocksHandler.js +1 -1
- package/src/handlers/article_revisions/VisualHandler.js +18 -28
- package/src/handlers/articles/ArticlesHandler.js +11 -25
- package/src/handlers/articles/DeletesHandler.js +4 -4
- package/src/handlers/articles/TranslationsHandler.js +30 -56
- package/src/handlers/articles/URLsHandler.js +7 -7
- package/src/handlers/event_revisions/CodeHandler.js +22 -36
- package/src/handlers/event_revisions/GeneralHandler.js +22 -42
- package/src/handlers/event_revisions/LocksHandler.js +7 -6
- package/src/handlers/event_revisions/MetaHandler.js +22 -36
- package/src/handlers/event_revisions/TagHandler.js +25 -29
- package/src/handlers/event_revisions/VisualHandler.js +22 -30
- package/src/handlers/events/DeletesHandler.js +4 -4
- package/src/handlers/events/EventsHandler.js +13 -27
- package/src/handlers/events/TranslationsHandler.js +35 -58
- package/src/handlers/events/URLsHandler.js +7 -7
- package/src/handlers/page_revisions/CodeHandler.js +8 -34
- package/src/handlers/page_revisions/GeneralHandler.js +10 -37
- package/src/handlers/page_revisions/LocksHandler.js +11 -6
- package/src/handlers/page_revisions/MetaHandler.js +8 -34
- package/src/handlers/page_revisions/TagHandler.js +16 -27
- package/src/handlers/page_revisions/VisualHandler.js +8 -28
- package/src/handlers/pages/DeletesHandler.js +4 -4
- package/src/handlers/pages/PagesHandler.js +7 -24
- package/src/handlers/pages/TranslationsHandler.js +23 -45
- package/src/handlers/pages/URLsHandler.js +7 -7
- package/src/helpers/FormBuilder.js +1 -2
- package/src/helpers/Inflector.js +6 -0
- package/src/index.js +2 -0
- package/src/styles/application.css +7 -7
- package/src/tests/handlers/RedirectsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/RedirectsHandler.test/create_form.test.js +1 -1
- package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/RedirectsHandler.test/edit_form.test.js +1 -1
- package/src/tests/handlers/RedirectsHandler.test/index.test.js +1 -1
- package/src/tests/handlers/RedirectsHandler.test/show.test.js +1 -1
- package/src/tests/handlers/RedirectsHandler.test/update.test.js +1 -1
- package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +7 -7
- package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +37 -19
- package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +5 -11
- package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +36 -28
- package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +7 -8
- package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +41 -25
- package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +2 -2
- package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +10 -7
- package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +20 -14
- package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +7 -6
- package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +30 -19
- package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +2 -2
- package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +2 -2
- package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +53 -29
- package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +3 -3
- package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +2 -2
- package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +3 -3
- package/src/tests/handlers/articles/ClonesHandler.test/create.test.js +1 -1
- package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +4 -4
- package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/articles/URLsHandler.test/create.test.js +6 -6
- package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +11 -7
- package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +43 -19
- package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +7 -13
- package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +42 -32
- package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +11 -8
- package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +47 -25
- package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +2 -2
- package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +14 -7
- package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +26 -14
- package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +11 -6
- package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +36 -19
- package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +2 -2
- package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +2 -2
- package/src/tests/handlers/events/ClonesHandler.test/create.test.js +1 -1
- package/src/tests/handlers/events/DeletesHandler.test/create.test.js +4 -4
- package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/events/EventsHandler.test/create.test.js +53 -37
- package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +3 -3
- package/src/tests/handlers/events/EventsHandler.test/index.test.js +2 -2
- package/src/tests/handlers/events/EventsHandler.test/show.test.js +3 -3
- package/src/tests/handlers/events/URLsHandler.test/create.test.js +6 -6
- package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/page_revisions/CodesHandler.test/edit_form.test.js +10 -8
- package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +30 -17
- package/src/tests/handlers/page_revisions/GeneralHandler.test/edit_form.test.js +3 -11
- package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +38 -22
- package/src/tests/handlers/page_revisions/MetaHandler.test/edit_form.test.js +2 -8
- package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +37 -23
- package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +2 -2
- package/src/tests/handlers/page_revisions/PublishesHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +1 -1
- package/src/tests/handlers/page_revisions/TagHandler.test/edit_form.test.js +3 -7
- package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +11 -12
- package/src/tests/handlers/page_revisions/VisualHandler.test.test/edit_form.test.js +10 -7
- package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +23 -17
- package/src/tests/handlers/page_revisions/WidgetHandler.test/show.test.js +2 -2
- package/src/tests/handlers/page_revisions/WidgetHandler.test/update.test.js +2 -2
- package/src/tests/handlers/pages/ConesHandler.test/create.test.js +1 -1
- package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +4 -4
- package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +2 -2
- package/src/tests/handlers/pages/PagesHandler.test/create.test.js +50 -27
- package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +3 -3
- package/src/tests/handlers/pages/PagesHandler.test/index.test.js +2 -2
- package/src/tests/handlers/pages/PagesHandler.test/show.test.js +3 -3
- package/src/tests/handlers/pages/URLsHandler.test/create.test.js +6 -6
- package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +2 -2
- package/src/utils.js +12 -0
- package/src/views/_shared/_credentials_input.ejs +31 -0
- package/src/views/_shared/_layout_input.ejs +5 -0
- package/src/views/article_revisions/_nav.ejs +5 -5
- package/src/views/article_revisions/codes/edit_form.ejs +17 -6
- package/src/views/article_revisions/general/edit_form.ejs +10 -36
- package/src/views/article_revisions/locks/create_form.ejs +4 -4
- package/src/views/article_revisions/meta/edit_form.ejs +7 -7
- package/src/views/article_revisions/tags/edit_form.ejs +5 -5
- package/src/views/article_revisions/visuals/edit_form.ejs +5 -9
- package/src/views/articles/_form.ejs +6 -37
- package/src/views/articles/deletes/create_form.ejs +9 -9
- package/src/views/articles/index.ejs +1 -1
- package/src/views/articles/translations/_form.ejs +14 -46
- package/src/views/articles/urls/create_form.ejs +5 -5
- package/src/views/event_revisions/_nav.ejs +5 -5
- package/src/views/event_revisions/codes/edit_form.ejs +17 -6
- package/src/views/event_revisions/general/edit_form.ejs +12 -38
- package/src/views/event_revisions/locks/create_form.ejs +4 -4
- package/src/views/event_revisions/meta/edit_form.ejs +7 -7
- package/src/views/event_revisions/tags/edit_form.ejs +5 -5
- package/src/views/event_revisions/visuals/edit_form.ejs +5 -9
- package/src/views/events/_form.ejs +8 -39
- package/src/views/events/deletes/create_form.ejs +9 -9
- package/src/views/events/index.ejs +1 -1
- package/src/views/events/translations/_form.ejs +16 -47
- package/src/views/events/urls/create_form.ejs +5 -5
- package/src/views/layouts/application.ejs +57 -35
- package/src/views/page_revisions/_nav.ejs +5 -5
- package/src/views/page_revisions/codes/edit_form.ejs +17 -6
- package/src/views/page_revisions/general/edit_form.ejs +8 -35
- package/src/views/page_revisions/locks/create_form.ejs +4 -4
- package/src/views/page_revisions/meta/edit_form.ejs +7 -7
- package/src/views/page_revisions/publishes/_form.ejs +9 -9
- package/src/views/page_revisions/tags/edit_form.ejs +5 -5
- package/src/views/page_revisions/visuals/edit_form.ejs +5 -9
- package/src/views/pages/_form.ejs +5 -36
- package/src/views/pages/deletes/create_form.ejs +9 -9
- package/src/views/pages/index.ejs +1 -1
- package/src/views/pages/translations/_form.ejs +13 -45
- package/src/views/pages/urls/create_form.ejs +5 -5
- package/tailwind.config.js +1 -0
package/package.json
CHANGED
package/src/Adapter.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import ejs from "ejs";
|
|
4
|
+
import Logger from "./Logger";
|
|
4
5
|
import currentPath from "./currentPath.cjs";
|
|
5
6
|
import FormBuilder from "./helpers/FormBuilder";
|
|
6
7
|
import HTMLBuilder from "./helpers/HTMLBuilder";
|
|
7
8
|
import form_for from "./helpers/form_for";
|
|
8
9
|
import pagination from "./helpers/pagination_helper";
|
|
9
10
|
import sort_button from "./helpers/sort_button";
|
|
11
|
+
import Inflector from "./helpers/Inflector";
|
|
10
12
|
|
|
11
13
|
function escapeHtml(string) {
|
|
12
14
|
var matchHtmlRegExp = /["'&<>]/;
|
|
@@ -66,12 +68,6 @@ const renderError = (message, stack) => {
|
|
|
66
68
|
return `<style>${errorCSS}</style><div class="fail-squid">🦑</div><h1>${message}</h1><pre>${escapeHtml(stack)}</pre>`;
|
|
67
69
|
};
|
|
68
70
|
|
|
69
|
-
const Logger = {
|
|
70
|
-
error: (msg) => {
|
|
71
|
-
console.error(`\x1b[31m🦑 ${msg}\x1b[0m`);
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
|
|
75
71
|
function putIn(result, key, value) {
|
|
76
72
|
const segments = key.split(/[\[\]]+/).filter(Boolean);
|
|
77
73
|
let current = result;
|
|
@@ -164,6 +160,7 @@ export default class Adapter {
|
|
|
164
160
|
form_for: form_for(viewHelpersConfig),
|
|
165
161
|
sort_button,
|
|
166
162
|
pagination,
|
|
163
|
+
Inflector,
|
|
167
164
|
};
|
|
168
165
|
}
|
|
169
166
|
|
package/src/HonoAdapter.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Adapter from "./Adapter";
|
|
2
|
+
import Logger from "./Logger";
|
|
2
3
|
import RaketaContext from "./RaketaContext";
|
|
3
4
|
import setupAuthentication from "./setupAuthentication";
|
|
4
5
|
|
|
@@ -101,6 +102,7 @@ export default class HonoAdapter extends Adapter {
|
|
|
101
102
|
ctx.defaultLocale = this.globalConfig.i18n.defaultLocale;
|
|
102
103
|
ctx.locale = currentLocale;
|
|
103
104
|
ctx.remoteConfig = { ...this.globalConfig.remoteConfig };
|
|
105
|
+
ctx.logger = Logger;
|
|
104
106
|
|
|
105
107
|
const _context = {
|
|
106
108
|
timezones: this.globalConfig.i18n.timezones,
|
|
@@ -115,9 +117,7 @@ export default class HonoAdapter extends Adapter {
|
|
|
115
117
|
resourceConfig: resourceConfig,
|
|
116
118
|
};
|
|
117
119
|
|
|
118
|
-
|
|
119
|
-
`\x1b[35m[${ctx.method}] ${ctx.rawPath}\x1b[0m -> ${resource}/${action} | ${JSON.stringify(ctx.params)}`
|
|
120
|
-
);
|
|
120
|
+
ctx.logger.info(`${ctx.method} "${ctx.rawPath}" -> ${resource}/${action} | ${JSON.stringify(ctx.params)}`);
|
|
121
121
|
|
|
122
122
|
const assigns = {
|
|
123
123
|
beforeFilterAssigns: {},
|
package/src/Logger.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { inspect } from 'node:util';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const dump = (item) => inspect(item, { depth: null }).replace(/^\'/, '').replace(/\'$/, '')
|
|
5
|
+
|
|
6
|
+
const Logger = {
|
|
7
|
+
error: (item) => {
|
|
8
|
+
console.error('[ERROR]', dump(item));
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
info: (item) => {
|
|
12
|
+
console.info('[INFO]', dump(item));
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
debug: (item) => {
|
|
16
|
+
console.debug('[DEBUG]', dump(item));
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default Logger;
|
|
21
|
+
|
|
@@ -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:
|
|
107
|
+
article: copyParams,
|
|
79
108
|
},
|
|
80
109
|
});
|
|
81
110
|
|
package/src/cloud/Articles.js
CHANGED
|
@@ -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
|
-
|
|
18
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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:
|
|
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
|
-
|
|
116
|
-
|
|
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:
|
|
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:
|
|
114
|
+
event: copyParams,
|
|
76
115
|
},
|
|
77
116
|
});
|
|
78
117
|
|
package/src/cloud/Events.js
CHANGED
|
@@ -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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
74
|
-
|
|
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:
|
|
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
|
-
|
|
118
|
-
|
|
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:
|
|
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:
|
|
94
|
+
page: copyParams,
|
|
76
95
|
},
|
|
77
96
|
});
|
|
78
97
|
|
package/src/cloud/Pages.js
CHANGED
|
@@ -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
|
-
|
|
70
|
-
|
|
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:
|
|
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
|
-
|
|
114
|
-
|
|
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:
|
|
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
|
|
6
|
+
const resource = await ctx.client.articleRevisions.find(
|
|
5
7
|
parent_id,
|
|
6
8
|
ctx.locale
|
|
7
9
|
);
|
|
8
10
|
|
|
9
|
-
if (!
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
70
|
-
...
|
|
71
|
-
|
|
72
|
-
originalId: revision.originalId,
|
|
54
|
+
resource: {
|
|
55
|
+
...resource,
|
|
56
|
+
publishAt: toDateTimeInput(resource.publishAt),
|
|
73
57
|
},
|
|
74
58
|
errors: {
|
|
75
|
-
|
|
59
|
+
resource: ctx.client.articleRevisions.formatErrors(errors),
|
|
76
60
|
},
|
|
77
61
|
_translations: [],
|
|
78
62
|
},
|