@raketa-cloud/admin 0.0.6 → 0.0.8
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 +3 -2
- package/src/Adapter.js +1 -1
- package/src/cloud/ChangePageURL.js +24 -0
- package/src/cloud/ClonesPage.js +14 -0
- package/src/cloud/DeletePage.js +35 -0
- package/src/cloud/PageChanges.js +15 -0
- package/src/cloud/PageRevisions.js +135 -0
- package/src/cloud/PageTranslations.js +22 -0
- package/src/cloud/Pages.js +63 -0
- package/src/cloud/RaketaClient.js +118 -0
- package/src/cloud/Redirects.js +81 -0
- package/src/cloud/RevertPageRevision.js +18 -0
- package/src/cloud/Settings.js +30 -0
- package/src/cloud/Tags.js +80 -0
- package/src/cloud/documents/articlesDocuments.js +608 -0
- package/src/cloud/documents/categoryDocuments.js +64 -0
- package/src/cloud/documents/common.js +84 -0
- package/src/cloud/documents/pagesDocuments.js +245 -0
- package/src/cloud/documents/redirectsDocuments.js +82 -0
- package/src/cloud/documents/settingsDocuments.js +23 -0
- package/src/cloud/documents/tagsDocuments.js +63 -0
- package/src/handlers/PageCloneHandler.js +17 -0
- package/src/handlers/PageCloneHandler.test/create.test.js +55 -0
- package/src/handlers/PageDeleteHandler.js +68 -0
- package/src/handlers/PageDeleteHandler.test/create.test.js +112 -0
- package/src/handlers/PageDeleteHandler.test/create_form.test.js +54 -0
- package/src/handlers/PageRevisionsCodesHandler.js +83 -0
- package/src/handlers/PageRevisionsCodesHandler.test/edit_form.test.js +56 -0
- package/src/handlers/PageRevisionsCodesHandler.test/update.test.js +137 -0
- package/src/handlers/PageRevisionsGeneralHandler.js +86 -0
- package/src/handlers/PageRevisionsGeneralHandler.test/edit_form.test.js +62 -0
- package/src/handlers/PageRevisionsGeneralHandler.test/update.test.js +147 -0
- package/src/handlers/PageRevisionsHandler.js +47 -0
- package/src/handlers/PageRevisionsHandler.test/create.test.js +67 -0
- package/src/handlers/PageRevisionsHandler.test/destroy.test.js +54 -0
- package/src/handlers/PageRevisionsLockHandler.js +54 -0
- package/src/handlers/PageRevisionsMetaHandler.js +83 -0
- package/src/handlers/PageRevisionsMetaHandler.test/edit_form.test.js +57 -0
- package/src/handlers/PageRevisionsMetaHandler.test/update.test.js +141 -0
- package/src/handlers/PageRevisionsTagsHandler.js +80 -0
- package/src/handlers/PageRevisionsTagsHandler.test/edit_form.test.js +69 -0
- package/src/handlers/PageRevisionsTagsHandler.test/update.test.js +141 -0
- package/src/handlers/PageRevisionsUnlockHandler.js +22 -0
- package/src/handlers/PageRevisionsVisualsHandler.js +77 -0
- package/src/handlers/PageRevisionsVisualsHandler.test/edit_form.test.js +55 -0
- package/src/handlers/PageRevisionsVisualsHandler.test/update.test.js +129 -0
- package/src/handlers/PageRevisionsWidgetsHandler.js +41 -0
- package/src/handlers/PageRevisionsWidgetsHandler.test/show.test.js +47 -0
- package/src/handlers/PageRevisionsWidgetsHandler.test/update.test.js +104 -0
- package/src/handlers/PageTranslationsHandler.js +91 -0
- package/src/handlers/PageURLsHandler.js +69 -0
- package/src/handlers/PageURLsHandler.test/create.test.js +157 -0
- package/src/handlers/PageURLsHandler.test/create_form.test.js +51 -0
- package/src/handlers/PagesHandler.js +114 -0
- package/src/handlers/PagesHandler.test/create.test.js +140 -0
- package/src/handlers/PagesHandler.test/create_form.test.js +41 -0
- package/src/handlers/PagesHandler.test/index.test.js +49 -0
- package/src/handlers/PagesHandler.test/show.test.js +103 -0
- package/src/handlers/PublishPageRevisionHandler.js +84 -0
- package/src/handlers/PublishPageRevisionHandler.test/create.test.js +136 -0
- package/src/handlers/PublishPageRevisionHandler.test/create_form.test.js +47 -0
- package/src/handlers/RedirectsHandler.js +124 -0
- package/src/handlers/RedirectsHandler.test/create.test.js +84 -0
- package/src/handlers/RedirectsHandler.test/create_form.test.js +29 -0
- package/src/handlers/RedirectsHandler.test/destroy.test.js +54 -0
- package/src/handlers/RedirectsHandler.test/edit_form.test.js +38 -0
- package/src/handlers/RedirectsHandler.test/index.test.js +42 -0
- package/src/handlers/RedirectsHandler.test/show.test.js +41 -0
- package/src/handlers/RedirectsHandler.test/update.test.js +89 -0
- package/src/handlers/RevertPageRevisionHandler.js +26 -0
- package/src/handlers/RevertPageRevisionHandler.test/create.test.js +80 -0
- package/src/handlers/SettingsGeneralHandler.js +13 -0
- package/src/handlers/SettingsLayoutHandler.js +51 -0
- package/src/handlers/SettingsMetaHandler.js +52 -0
- package/src/handlers/TagsHandler.js +113 -0
- package/src/helpers/FormBuilder.js +12 -4
- package/src/index.js +33 -0
- package/src/setupAuthentication.js +3 -0
- package/src/styles/application.css +55 -19
- package/src/views/layouts/application.ejs +30 -31
- package/src/views/layouts/header.ejs +6 -7
- package/src/views/page_deletes/create_form.ejs +55 -0
- package/src/views/page_lock/create_form.ejs +35 -0
- package/src/views/page_publish/_form.ejs +57 -0
- package/src/views/page_publish/create_form.ejs +11 -0
- package/src/views/page_revisions/_nav.ejs +40 -0
- package/src/views/page_revisions/codes/edit_form.ejs +39 -0
- package/src/views/page_revisions/general/edit_form.ejs +69 -0
- package/src/views/page_revisions/meta/edit_form.ejs +41 -0
- package/src/views/page_revisions/tags/edit_form.ejs +64 -0
- package/src/views/page_revisions/visuals/edit_form.ejs +42 -0
- package/src/views/page_translations/_form.ejs +76 -0
- package/src/views/page_translations/create_form.ejs +11 -0
- package/src/views/page_urls/create_form.ejs +31 -0
- package/src/views/pages/_form.ejs +84 -0
- package/src/views/pages/create_form.ejs +9 -0
- package/src/views/pages/edit_form.ejs +3 -0
- package/src/views/pages/index.ejs +161 -0
- package/src/views/pages/show.ejs +281 -0
- package/src/views/redirects/_form.ejs +40 -0
- package/src/views/redirects/create_form.ejs +9 -0
- package/src/views/redirects/edit_form.ejs +9 -0
- package/src/views/redirects/index.ejs +75 -1
- package/src/views/redirects/show.ejs +60 -0
- package/src/views/settings/_nav.ejs +28 -0
- package/src/views/settings/general/edit_form.ejs +26 -0
- package/src/views/settings/layout/edit_form.ejs +22 -0
- package/src/views/settings/meta/edit_form.ejs +38 -0
- package/src/views/tags/_form.ejs +39 -0
- package/src/views/tags/create_form.ejs +9 -0
- package/src/views/tags/edit_form.ejs +9 -0
- package/src/views/tags/index.ejs +43 -0
- package/test/factory.js +91 -0
- package/test/handlersHelper.js +9 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { gql } from "graphql-request";
|
|
2
|
+
|
|
3
|
+
export function pageTypeFragment() {
|
|
4
|
+
return gql`
|
|
5
|
+
{
|
|
6
|
+
id
|
|
7
|
+
slug
|
|
8
|
+
title
|
|
9
|
+
}
|
|
10
|
+
`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function tagFragment() {
|
|
14
|
+
return gql`
|
|
15
|
+
{
|
|
16
|
+
id
|
|
17
|
+
name
|
|
18
|
+
slug
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function paginationFragment() {
|
|
24
|
+
return gql`
|
|
25
|
+
{
|
|
26
|
+
currentPage
|
|
27
|
+
pagesCount
|
|
28
|
+
entriesCount
|
|
29
|
+
pageSize
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function errorsFragment() {
|
|
35
|
+
return gql`
|
|
36
|
+
{
|
|
37
|
+
key
|
|
38
|
+
message
|
|
39
|
+
codes {
|
|
40
|
+
key
|
|
41
|
+
placeholders
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function revisionMetaFragment() {
|
|
48
|
+
return gql`
|
|
49
|
+
{
|
|
50
|
+
id
|
|
51
|
+
title
|
|
52
|
+
description
|
|
53
|
+
operator
|
|
54
|
+
operatorMeta
|
|
55
|
+
locked
|
|
56
|
+
lockMessage
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function revisionFragment() {
|
|
62
|
+
return gql`
|
|
63
|
+
{
|
|
64
|
+
id
|
|
65
|
+
title
|
|
66
|
+
slug
|
|
67
|
+
settings
|
|
68
|
+
widgets
|
|
69
|
+
visibility
|
|
70
|
+
}
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function categoryFragment() {
|
|
75
|
+
return gql`
|
|
76
|
+
{
|
|
77
|
+
id
|
|
78
|
+
type
|
|
79
|
+
slug
|
|
80
|
+
name
|
|
81
|
+
settings
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { gql } from "graphql-request";
|
|
2
|
+
import {
|
|
3
|
+
categoryFragment,
|
|
4
|
+
errorsFragment,
|
|
5
|
+
pageTypeFragment,
|
|
6
|
+
paginationFragment,
|
|
7
|
+
revisionMetaFragment,
|
|
8
|
+
tagFragment,
|
|
9
|
+
} from "./common";
|
|
10
|
+
|
|
11
|
+
function pageFragment() {
|
|
12
|
+
return gql`
|
|
13
|
+
{
|
|
14
|
+
id
|
|
15
|
+
slug
|
|
16
|
+
title
|
|
17
|
+
widgets
|
|
18
|
+
settings
|
|
19
|
+
visibility
|
|
20
|
+
originalId
|
|
21
|
+
translations
|
|
22
|
+
revisionsCount
|
|
23
|
+
tags ${tagFragment()}
|
|
24
|
+
pageType ${pageTypeFragment()}
|
|
25
|
+
categories ${categoryFragment()}
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function pageRevisionFragment() {
|
|
31
|
+
return gql`
|
|
32
|
+
{
|
|
33
|
+
id
|
|
34
|
+
slug
|
|
35
|
+
title
|
|
36
|
+
widgets
|
|
37
|
+
settings
|
|
38
|
+
visibility
|
|
39
|
+
originalId
|
|
40
|
+
insertedAt
|
|
41
|
+
tags ${tagFragment()}
|
|
42
|
+
pageType ${pageTypeFragment()}
|
|
43
|
+
meta ${revisionMetaFragment()}
|
|
44
|
+
categories ${categoryFragment()}
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const PageByIdDocument = gql`
|
|
50
|
+
query PageByID($input: IdInput!) {
|
|
51
|
+
page(input: $input) ${pageFragment()}
|
|
52
|
+
}
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
const PageChangesDocument = gql`
|
|
56
|
+
query PageChanges($input: IdInput!) {
|
|
57
|
+
pageChanges(input: $input) {
|
|
58
|
+
list {
|
|
59
|
+
version
|
|
60
|
+
title
|
|
61
|
+
description
|
|
62
|
+
operator
|
|
63
|
+
operatorMeta
|
|
64
|
+
source
|
|
65
|
+
insertedAt
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
`;
|
|
70
|
+
|
|
71
|
+
const PagesDocument = gql`
|
|
72
|
+
query Pages($input: PagesInput!) {
|
|
73
|
+
pages(input: $input) {
|
|
74
|
+
list ${pageFragment()}
|
|
75
|
+
pagination ${paginationFragment()}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
`;
|
|
79
|
+
|
|
80
|
+
const CreatePageDocument = gql`
|
|
81
|
+
mutation CreatePage($input: CreatePageInput!) {
|
|
82
|
+
createPage(input: $input) {
|
|
83
|
+
page ${pageFragment()}
|
|
84
|
+
errors ${errorsFragment()}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
const UpdatePageDocument = gql`
|
|
90
|
+
mutation UpdatePage($input: UpdatePageInput!) {
|
|
91
|
+
updatePage(input: $input) {
|
|
92
|
+
page ${pageFragment()}
|
|
93
|
+
errors ${errorsFragment()}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
`;
|
|
97
|
+
|
|
98
|
+
const UpdatePageWidgetsDocument = gql`
|
|
99
|
+
mutation updatePageWidgets($input: UpdatePageWidgetsInput!) {
|
|
100
|
+
updatePageWidgets(input: $input) {
|
|
101
|
+
page ${pageFragment()}
|
|
102
|
+
errors ${errorsFragment()}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
`;
|
|
106
|
+
|
|
107
|
+
const ClonePageDocument = gql`
|
|
108
|
+
mutation ClonePage($input: IdInput!) {
|
|
109
|
+
clonePage(input: $input) {
|
|
110
|
+
page ${pageFragment()}
|
|
111
|
+
errors ${errorsFragment()}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
`;
|
|
115
|
+
|
|
116
|
+
const DeletePageDocument = gql`
|
|
117
|
+
mutation DeletePage($input: PageDeleteInput!) {
|
|
118
|
+
deletePage(input: $input) {
|
|
119
|
+
page ${pageFragment()}
|
|
120
|
+
errors ${errorsFragment()}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
`;
|
|
124
|
+
|
|
125
|
+
const PageAndSiteDocument = gql`
|
|
126
|
+
query PageAndSite($input: SlugInput!) {
|
|
127
|
+
pageAndSite(input: $input) {
|
|
128
|
+
id
|
|
129
|
+
slug
|
|
130
|
+
title
|
|
131
|
+
widgets
|
|
132
|
+
settings
|
|
133
|
+
visibility
|
|
134
|
+
originalId
|
|
135
|
+
translations
|
|
136
|
+
tags ${tagFragment()}
|
|
137
|
+
pageType ${pageTypeFragment()}
|
|
138
|
+
categories ${categoryFragment()}
|
|
139
|
+
websiteSettings
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
`;
|
|
143
|
+
|
|
144
|
+
const TranslatePageDocument = gql`
|
|
145
|
+
mutation TranslatePage($input: TranslatePageInput!) {
|
|
146
|
+
translatePage(input: $input) {
|
|
147
|
+
page ${pageFragment()}
|
|
148
|
+
errors ${errorsFragment()}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
|
|
153
|
+
const PageRevisionsDocument = gql`
|
|
154
|
+
query PageRevisions($input: IdInput!) {
|
|
155
|
+
pageRevisions(input: $input) {
|
|
156
|
+
list ${pageRevisionFragment()}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
`;
|
|
160
|
+
|
|
161
|
+
const PageRevisionDocument = gql`
|
|
162
|
+
query PageRevision($input: IdInput!) {
|
|
163
|
+
pageRevision(input: $input) ${pageRevisionFragment()}
|
|
164
|
+
}
|
|
165
|
+
`;
|
|
166
|
+
|
|
167
|
+
const StartPageRevisionDocument = gql`
|
|
168
|
+
mutation StartPageRevision($input: StartPageRevisionInput!) {
|
|
169
|
+
startPageRevision(input: $input) {
|
|
170
|
+
revision ${pageRevisionFragment()}
|
|
171
|
+
errors ${errorsFragment()}
|
|
172
|
+
pageErrors ${errorsFragment()}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
`;
|
|
176
|
+
|
|
177
|
+
const MergePageRevisionDocument = gql`
|
|
178
|
+
mutation MergePageRevision($input: MergePageRevisionInput!) {
|
|
179
|
+
mergePageRevision(input: $input) {
|
|
180
|
+
page ${pageFragment()}
|
|
181
|
+
errors ${errorsFragment()}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
`;
|
|
185
|
+
|
|
186
|
+
const ChangePageSlugDocument = gql`
|
|
187
|
+
mutation ($input: ChangePageSlugInput!) {
|
|
188
|
+
changePageSlug(input: $input) {
|
|
189
|
+
page ${pageFragment()}
|
|
190
|
+
errors ${errorsFragment()}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
`;
|
|
194
|
+
|
|
195
|
+
const ReopenPageChangeDocument = gql`
|
|
196
|
+
mutation($input: ReopenPageChangeInput!)
|
|
197
|
+
{
|
|
198
|
+
reopenPageChange(input: $input) {
|
|
199
|
+
revision ${pageRevisionFragment()}
|
|
200
|
+
errors ${errorsFragment()}
|
|
201
|
+
pageErrors ${errorsFragment()}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
`;
|
|
205
|
+
|
|
206
|
+
const LockPageRevisionDocument = gql`
|
|
207
|
+
mutation LockPageRevision($input: LockPageRevisionInput!) {
|
|
208
|
+
lockPageRevision(input: $input) {
|
|
209
|
+
revision ${pageRevisionFragment()}
|
|
210
|
+
errors ${errorsFragment()}
|
|
211
|
+
pageErrors ${errorsFragment()}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
`;
|
|
215
|
+
|
|
216
|
+
const UnlockPageRevisionDocument = gql`
|
|
217
|
+
mutation UnlockPageRevision($input: UnlockPageRevisionInput!) {
|
|
218
|
+
unlockPageRevision(input: $input) {
|
|
219
|
+
revision ${pageRevisionFragment()}
|
|
220
|
+
errors ${errorsFragment()}
|
|
221
|
+
pageErrors ${errorsFragment()}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
`;
|
|
225
|
+
|
|
226
|
+
export {
|
|
227
|
+
PageByIdDocument,
|
|
228
|
+
PagesDocument,
|
|
229
|
+
CreatePageDocument,
|
|
230
|
+
UpdatePageDocument,
|
|
231
|
+
UpdatePageWidgetsDocument,
|
|
232
|
+
ClonePageDocument,
|
|
233
|
+
DeletePageDocument,
|
|
234
|
+
PageAndSiteDocument,
|
|
235
|
+
TranslatePageDocument,
|
|
236
|
+
PageRevisionDocument,
|
|
237
|
+
PageRevisionsDocument,
|
|
238
|
+
StartPageRevisionDocument,
|
|
239
|
+
MergePageRevisionDocument,
|
|
240
|
+
PageChangesDocument,
|
|
241
|
+
ChangePageSlugDocument,
|
|
242
|
+
ReopenPageChangeDocument,
|
|
243
|
+
LockPageRevisionDocument,
|
|
244
|
+
UnlockPageRevisionDocument,
|
|
245
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { gql } from "graphql-request";
|
|
2
|
+
import { errorsFragment, paginationFragment } from "./common";
|
|
3
|
+
|
|
4
|
+
function redirectFragment() {
|
|
5
|
+
return gql`
|
|
6
|
+
{
|
|
7
|
+
id
|
|
8
|
+
url
|
|
9
|
+
destination
|
|
10
|
+
httpResponseCode
|
|
11
|
+
note
|
|
12
|
+
updatedAt
|
|
13
|
+
createdAt
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const RedirectsDocument = gql`
|
|
19
|
+
query Redirects($input: RedirectsInput) {
|
|
20
|
+
redirects(input: $input) {
|
|
21
|
+
list ${redirectFragment()}
|
|
22
|
+
pagination ${paginationFragment()}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
const RedirectByIdDocument = gql`
|
|
28
|
+
query RedirectByID($input: SimpleIdInput!) {
|
|
29
|
+
redirect(input: $input) ${redirectFragment()}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
const CreateRedirectDocument = gql`
|
|
34
|
+
mutation CreateRedirect($input: CreateRedirectInput!) {
|
|
35
|
+
createRedirect(input: $input) {
|
|
36
|
+
redirect ${redirectFragment()}
|
|
37
|
+
errors ${errorsFragment()}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
const UpdateRedirectDocument = gql`
|
|
43
|
+
mutation UpdateRedirect($input: UpdateRedirectInput!) {
|
|
44
|
+
updateRedirect(input: $input) {
|
|
45
|
+
redirect ${redirectFragment()}
|
|
46
|
+
errors ${errorsFragment()}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
const DeleteRedirectDocument = gql`
|
|
52
|
+
mutation DeleteRedirect($input: SimpleIdInput!) {
|
|
53
|
+
deleteRedirect(input: $input) {
|
|
54
|
+
redirect ${redirectFragment()}
|
|
55
|
+
errors ${errorsFragment()}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
|
|
60
|
+
const RedirectChangesDocument = gql`
|
|
61
|
+
query RedirectChanges($input: IdInput!) {
|
|
62
|
+
redirectChanges(input: $input) {
|
|
63
|
+
list {
|
|
64
|
+
version
|
|
65
|
+
title
|
|
66
|
+
description
|
|
67
|
+
operator
|
|
68
|
+
operatorMeta
|
|
69
|
+
insertedAt
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`;
|
|
74
|
+
|
|
75
|
+
export {
|
|
76
|
+
RedirectsDocument,
|
|
77
|
+
RedirectByIdDocument,
|
|
78
|
+
CreateRedirectDocument,
|
|
79
|
+
UpdateRedirectDocument,
|
|
80
|
+
DeleteRedirectDocument,
|
|
81
|
+
RedirectChangesDocument,
|
|
82
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { gql } from "graphql-request";
|
|
2
|
+
import { errorsFragment } from "./common";
|
|
3
|
+
|
|
4
|
+
const SettingDocument = gql`
|
|
5
|
+
query Setting($locale: String!) {
|
|
6
|
+
setting(locale: $locale) {
|
|
7
|
+
value
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
`;
|
|
11
|
+
|
|
12
|
+
const UpdateSettingDocument = gql`
|
|
13
|
+
mutation updateSetting($input: UpdateSettingInput!) {
|
|
14
|
+
updateSetting(input: $input) {
|
|
15
|
+
setting {
|
|
16
|
+
value
|
|
17
|
+
}
|
|
18
|
+
errors ${errorsFragment()}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
export { SettingDocument, UpdateSettingDocument };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { gql } from "graphql-request";
|
|
2
|
+
import { errorsFragment, paginationFragment } from "./common";
|
|
3
|
+
|
|
4
|
+
function tagFragment() {
|
|
5
|
+
return gql`
|
|
6
|
+
{
|
|
7
|
+
id
|
|
8
|
+
slug
|
|
9
|
+
name
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const TagsDocument = gql`
|
|
15
|
+
query Tags($input: TagsInput!) {
|
|
16
|
+
tags(input: $input) {
|
|
17
|
+
list ${tagFragment()}
|
|
18
|
+
pagination ${paginationFragment()}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
const CreateTagDocument = gql`
|
|
24
|
+
mutation CreateTag($input: CreateTagInput!) {
|
|
25
|
+
createTag(input: $input) {
|
|
26
|
+
tag ${tagFragment()}
|
|
27
|
+
errors ${errorsFragment()}
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
const UpdateTagDocument = gql`
|
|
34
|
+
mutation UpdateTag($input: UpdateTagInput!) {
|
|
35
|
+
updateTag(input: $input) {
|
|
36
|
+
tag ${tagFragment()}
|
|
37
|
+
errors ${errorsFragment()}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
const DeleteTagDocument = gql`
|
|
43
|
+
mutation DeleteTag($input: IdInput!) {
|
|
44
|
+
deleteTag(input: $input) {
|
|
45
|
+
tag ${tagFragment()}
|
|
46
|
+
errors ${errorsFragment()}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
const TagByIdDocument = gql`
|
|
52
|
+
query TagByID($input: IdInput!) {
|
|
53
|
+
tag(input: $input) ${tagFragment()}
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
|
|
57
|
+
export {
|
|
58
|
+
TagsDocument,
|
|
59
|
+
CreateTagDocument,
|
|
60
|
+
UpdateTagDocument,
|
|
61
|
+
DeleteTagDocument,
|
|
62
|
+
TagByIdDocument,
|
|
63
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const create = async (ctx) => {
|
|
2
|
+
const { parent_id } = ctx.params;
|
|
3
|
+
|
|
4
|
+
const { errors } = await ctx.client.clonePage.clone(parent_id, ctx.locale);
|
|
5
|
+
|
|
6
|
+
if (errors) {
|
|
7
|
+
throw new Error(`Error cloning page: ${JSON.stringify(errors)}`);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
redirect: `/${ctx.locale}/pages`,
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default {
|
|
16
|
+
create,
|
|
17
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import ClonesPage from "../../cloud/ClonesPage";
|
|
2
|
+
import PageCloneHandler from "../PageCloneHandler";
|
|
3
|
+
|
|
4
|
+
import Factory from "../../../../../apps/admin/test/factory";
|
|
5
|
+
import { testConfig } from "../../../../../apps/admin/test/handlersHelper";
|
|
6
|
+
|
|
7
|
+
function buildCtx(page) {
|
|
8
|
+
return {
|
|
9
|
+
client: {
|
|
10
|
+
clonePage: new ClonesPage(testConfig, "token"),
|
|
11
|
+
},
|
|
12
|
+
params: { parent_id: page.id },
|
|
13
|
+
locale: "en",
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe("Clone page", () => {
|
|
18
|
+
test("clone successful", async () => {
|
|
19
|
+
const page = Factory.build("page");
|
|
20
|
+
const ctx = buildCtx(page);
|
|
21
|
+
|
|
22
|
+
const mockClone = jest
|
|
23
|
+
.spyOn(ctx.client.clonePage, "clone")
|
|
24
|
+
.mockImplementation(() => page);
|
|
25
|
+
|
|
26
|
+
const result = await PageCloneHandler.create(ctx);
|
|
27
|
+
|
|
28
|
+
expect(mockClone).toHaveBeenCalledWith(page.id, "en");
|
|
29
|
+
|
|
30
|
+
expect(result).toEqual({
|
|
31
|
+
redirect: "/en/pages",
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("clone failed", async () => {
|
|
36
|
+
const page = Factory.build("page");
|
|
37
|
+
|
|
38
|
+
const ctx = buildCtx(page);
|
|
39
|
+
|
|
40
|
+
const mockClone = jest
|
|
41
|
+
.spyOn(ctx.client.clonePage, "clone")
|
|
42
|
+
.mockImplementation(() => ({
|
|
43
|
+
page: null,
|
|
44
|
+
errors: [{ key: "generalError", message: "some error" }],
|
|
45
|
+
}));
|
|
46
|
+
|
|
47
|
+
expect(async () => {
|
|
48
|
+
await PageCloneHandler.create(ctx);
|
|
49
|
+
}).rejects.toThrow(
|
|
50
|
+
`Error cloning page: ${JSON.stringify([{ key: "generalError", message: "some error" }])}`
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
expect(mockClone).toHaveBeenCalledWith(page.id, "en");
|
|
54
|
+
});
|
|
55
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const create_form = async (ctx) => {
|
|
2
|
+
const { parent_id } = ctx.params;
|
|
3
|
+
const page = await ctx.client.pages.find(parent_id, ctx.locale);
|
|
4
|
+
|
|
5
|
+
if (!page) {
|
|
6
|
+
throw new Error(`Missing page #${parent_id}`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
assigns: {
|
|
11
|
+
deleteAction: {
|
|
12
|
+
id: page.id,
|
|
13
|
+
redirect: "",
|
|
14
|
+
},
|
|
15
|
+
errors: {},
|
|
16
|
+
_translations: [],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const create = async (ctx) => {
|
|
22
|
+
const { parent_id } = ctx.params;
|
|
23
|
+
const params = ctx.resourceParams.deleteAction;
|
|
24
|
+
const page = await ctx.client.pages.find(parent_id, ctx.locale);
|
|
25
|
+
|
|
26
|
+
if (!page) {
|
|
27
|
+
throw new Error(`Missing page #${parent_id}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let redirect = null;
|
|
31
|
+
|
|
32
|
+
if (params.redirect === "301" || params.redirect === "410") {
|
|
33
|
+
redirect = {
|
|
34
|
+
// TODO: fix url with consideration of locale & defaultLocale in the frontend project
|
|
35
|
+
url: `/${page.slug}`,
|
|
36
|
+
destination: params.redirect === "301" ? params.destination : "/",
|
|
37
|
+
httpResponseCode: Number.parseInt(params.redirect, 10),
|
|
38
|
+
note: "Created via page deletion process",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const { errors } = await ctx.client.deletePage.delete(
|
|
43
|
+
page.id,
|
|
44
|
+
ctx.locale,
|
|
45
|
+
redirect
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
if (errors) {
|
|
49
|
+
return {
|
|
50
|
+
assigns: {
|
|
51
|
+
deleteAction: { ...params, id: page.id },
|
|
52
|
+
errors: {
|
|
53
|
+
deleteAction: ctx.client.deletePage.formatErrors(errors, "redirect"),
|
|
54
|
+
},
|
|
55
|
+
_translations: [],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
redirect: `/${ctx.locale}/pages`,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default {
|
|
66
|
+
create_form,
|
|
67
|
+
create,
|
|
68
|
+
};
|