@raketa-cloud/admin 0.0.96 → 0.0.98

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 (69) hide show
  1. package/package.json +1 -1
  2. package/src/Adapter.js +3 -1
  3. package/src/cloud/ArticleChanges.js +24 -3
  4. package/src/cloud/EventChanges.js +24 -3
  5. package/src/cloud/PageChanges.js +24 -3
  6. package/src/cloud/Pages.js +1 -1
  7. package/src/cloud/documents/articlesDocuments.js +18 -5
  8. package/src/cloud/documents/common.js +2 -0
  9. package/src/cloud/documents/eventsDocuments.js +17 -4
  10. package/src/cloud/documents/pagesDocuments.js +17 -4
  11. package/src/handlers/articles/ArticlesHandler.js +2 -2
  12. package/src/handlers/articles/HistoryHandler.js +31 -0
  13. package/src/handlers/events/EventsHandler.js +2 -2
  14. package/src/handlers/events/HistoryHandler.js +31 -0
  15. package/src/handlers/pages/HistoryHandler.js +31 -0
  16. package/src/handlers/pages/PagesHandler.js +2 -2
  17. package/src/helpers/historyUtils.js +133 -0
  18. package/src/routeArticlesModule.js +19 -13
  19. package/src/routeEventsModule.js +18 -12
  20. package/src/routePagesModule.js +7 -1
  21. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +5 -5
  22. package/src/tests/handlers/articles/ArticlesHistoryHandler.test/index.test.js +87 -0
  23. package/src/tests/handlers/events/EventsHandler.test/show.test.js +5 -5
  24. package/src/tests/handlers/events/EventsHistoryHandler.test/index.test.js +87 -0
  25. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +5 -5
  26. package/src/tests/handlers/pages/PagesHistoryHandler.test/index.test.js +87 -0
  27. package/src/tests/helpers/historyUtils.test.js +107 -0
  28. package/src/views/article_revisions/codes/_form.ejs +13 -0
  29. package/src/views/article_revisions/codes/edit_form.ejs +1 -13
  30. package/src/views/article_revisions/locks/_form.ejs +11 -0
  31. package/src/views/article_revisions/locks/create_form.ejs +2 -12
  32. package/src/views/article_revisions/meta/_form.ejs +15 -0
  33. package/src/views/article_revisions/meta/edit_form.ejs +2 -16
  34. package/src/views/article_revisions/tags/_form.ejs +12 -0
  35. package/src/views/article_revisions/tags/edit_form.ejs +2 -13
  36. package/src/views/article_revisions/visuals/_form.ejs +12 -0
  37. package/src/views/article_revisions/visuals/edit_form.ejs +2 -13
  38. package/src/views/articles/_shared/_history_toolbar.ejs +9 -8
  39. package/src/views/articles/_shared/history_table.ejs +68 -0
  40. package/src/views/articles/history/index.ejs +87 -0
  41. package/src/views/articles/show.ejs +12 -52
  42. package/src/views/event_revisions/codes/_form.ejs +13 -0
  43. package/src/views/event_revisions/codes/edit_form.ejs +1 -13
  44. package/src/views/event_revisions/locks/_form.ejs +11 -0
  45. package/src/views/event_revisions/locks/create_form.ejs +2 -12
  46. package/src/views/event_revisions/meta/_form.ejs +15 -0
  47. package/src/views/event_revisions/meta/edit_form.ejs +2 -16
  48. package/src/views/event_revisions/tags/_form.ejs +12 -0
  49. package/src/views/event_revisions/tags/edit_form.ejs +2 -13
  50. package/src/views/event_revisions/visuals/_form.ejs +12 -0
  51. package/src/views/event_revisions/visuals/edit_form.ejs +2 -13
  52. package/src/views/events/_shared/_history_toolbar.ejs +9 -8
  53. package/src/views/events/_shared/history_table.ejs +68 -0
  54. package/src/views/events/history/index.ejs +87 -0
  55. package/src/views/events/show.ejs +12 -52
  56. package/src/views/page_revisions/codes/_form.ejs +13 -0
  57. package/src/views/page_revisions/codes/edit_form.ejs +1 -13
  58. package/src/views/page_revisions/locks/_form.ejs +11 -0
  59. package/src/views/page_revisions/locks/create_form.ejs +2 -12
  60. package/src/views/page_revisions/meta/_form.ejs +15 -0
  61. package/src/views/page_revisions/meta/edit_form.ejs +1 -15
  62. package/src/views/page_revisions/tags/_form.ejs +12 -0
  63. package/src/views/page_revisions/tags/edit_form.ejs +3 -14
  64. package/src/views/page_revisions/visuals/_form.ejs +12 -0
  65. package/src/views/page_revisions/visuals/edit_form.ejs +1 -12
  66. package/src/views/pages/_shared/_history_toolbar.ejs +8 -7
  67. package/src/views/pages/_shared/history_table.ejs +68 -0
  68. package/src/views/pages/history/index.ejs +87 -0
  69. package/src/views/pages/show.ejs +12 -52
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raketa-cloud/admin",
3
- "version": "0.0.96",
3
+ "version": "0.0.98",
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",
package/src/Adapter.js CHANGED
@@ -5,10 +5,11 @@ import Logger from "./Logger";
5
5
  import currentPath from "./currentPath.cjs";
6
6
  import FormBuilder from "./helpers/FormBuilder";
7
7
  import HTMLBuilder from "./helpers/HTMLBuilder";
8
+ import Inflector from "./helpers/Inflector";
8
9
  import form_for from "./helpers/form_for";
10
+ import history from "./helpers/historyUtils";
9
11
  import pagination from "./helpers/pagination_helper";
10
12
  import sort_button from "./helpers/sort_button";
11
- import Inflector from "./helpers/Inflector";
12
13
 
13
14
  function escapeHtml(string) {
14
15
  var matchHtmlRegExp = /["'&<>]/;
@@ -170,6 +171,7 @@ export default class Adapter {
170
171
  t,
171
172
  f,
172
173
  form_for: form_for(viewHelpersConfig),
174
+ history,
173
175
  sort_button,
174
176
  pagination,
175
177
  Inflector,
@@ -1,15 +1,36 @@
1
1
  import RaketaClient from "./RaketaClient";
2
- import { ArticleChangesDocument } from "./documents/articlesDocuments";
2
+
3
+ import {
4
+ ArticleHistoryDocument,
5
+ ArticleEditorsDocument,
6
+ } from "./documents/articlesDocuments";
3
7
 
4
8
  export default class ArticleChanges extends RaketaClient {
5
- async all(articleId, locale) {
6
- const { articleChanges: items } = await this.query(ArticleChangesDocument, {
9
+ async list(query, articleId, locale) {
10
+ const vars = this.buildListInput(query, locale);
11
+
12
+ const { articleHistory: items } = await this.query(ArticleHistoryDocument, {
7
13
  input: {
14
+ ...vars.input,
8
15
  id: articleId,
9
16
  locale,
17
+ pagination: {
18
+ ...(vars.input.pagination || {}),
19
+ },
10
20
  },
11
21
  });
12
22
 
13
23
  return items;
14
24
  }
25
+
26
+ async all_editors(articleId, locale) {
27
+ const { articleEditors } = await this.query(ArticleEditorsDocument, {
28
+ input: {
29
+ id: articleId,
30
+ locale,
31
+ },
32
+ });
33
+
34
+ return articleEditors?.list;
35
+ }
15
36
  }
@@ -1,15 +1,36 @@
1
1
  import RaketaClient from "./RaketaClient";
2
- import { EventChangesDocument } from "./documents/eventsDocuments";
2
+ import {
3
+ EventHistoryDocument,
4
+ EventEditorsDocument,
5
+ } from "./documents/eventsDocuments";
3
6
 
4
7
  export default class EventChanges extends RaketaClient {
5
- async all(eventId, locale) {
6
- const { eventChanges: items } = await this.query(EventChangesDocument, {
8
+ async list(query, eventId, locale) {
9
+ const vars = this.buildListInput(query, locale);
10
+
11
+ const { eventHistory: items } = await this.query(EventHistoryDocument, {
7
12
  input: {
13
+ ...vars.input,
8
14
  id: eventId,
9
15
  locale,
16
+ pagination: {
17
+ ...(vars.input.pagination || {}),
18
+ page_size: 50,
19
+ },
10
20
  },
11
21
  });
12
22
 
13
23
  return items;
14
24
  }
25
+
26
+ async all_editors(eventId, locale) {
27
+ const { eventEditors } = await this.query(EventEditorsDocument, {
28
+ input: {
29
+ id: eventId,
30
+ locale,
31
+ },
32
+ });
33
+
34
+ return eventEditors?.list;
35
+ }
15
36
  }
@@ -1,15 +1,36 @@
1
1
  import RaketaClient from "./RaketaClient";
2
- import { PageChangesDocument } from "./documents/pagesDocuments";
2
+ import {
3
+ PageHistoryDocument,
4
+ PageEditorsDocument,
5
+ } from "./documents/pagesDocuments";
3
6
 
4
7
  export default class PageChanges extends RaketaClient {
5
- async all(pageId, locale) {
6
- const { pageChanges: items } = await this.query(PageChangesDocument, {
8
+ async list(query, pageId, locale) {
9
+ const vars = this.buildListInput(query, locale);
10
+
11
+ const { pageHistory: items } = await this.query(PageHistoryDocument, {
7
12
  input: {
13
+ ...vars.input,
8
14
  id: pageId,
9
15
  locale,
16
+ pagination: {
17
+ ...(vars.input.pagination || {}),
18
+ page_size: 50,
19
+ },
10
20
  },
11
21
  });
12
22
 
13
23
  return items;
14
24
  }
25
+
26
+ async all_editors(pageId, locale) {
27
+ const { pageEditors } = await this.query(PageEditorsDocument, {
28
+ input: {
29
+ id: pageId,
30
+ locale,
31
+ },
32
+ });
33
+
34
+ return pageEditors?.list;
35
+ }
15
36
  }
@@ -1,6 +1,5 @@
1
1
  import RaketaClient from "./RaketaClient";
2
2
  import {
3
- buildBatchTranslatePageDocument,
4
3
  ChangePageSlugDocument,
5
4
  ClonePageDocument,
6
5
  CreatePageDocument,
@@ -9,6 +8,7 @@ import {
9
8
  PageByIdDocument,
10
9
  PagesDocument,
11
10
  TranslatePageDocument,
11
+ buildBatchTranslatePageDocument,
12
12
  } from "./documents/pagesDocuments";
13
13
 
14
14
  export default class Pages extends RaketaClient {
@@ -72,10 +72,22 @@ const ArticleByIdDocument = gql`
72
72
  }
73
73
  `;
74
74
 
75
- const ArticleChangesDocument = gql`
76
- query ArticleChanges($input: IdInput!) {
77
- articleChanges(input: $input) {
75
+ const ArticleHistoryDocument = gql`
76
+ query ArticleHistory($input: HistoryInput!) {
77
+ articleHistory(input: $input) {
78
78
  list ${summaryChangeFragment()}
79
+ pagination ${paginationFragment()}
80
+ }
81
+ }
82
+ `;
83
+
84
+ const ArticleEditorsDocument = gql`
85
+ query ArticleEditors($input: EditorsInput!) {
86
+ articleEditors(input: $input) {
87
+ list {
88
+ id
89
+ name
90
+ }
79
91
  }
80
92
  }
81
93
  `;
@@ -278,7 +290,7 @@ const ReopenArticleChangeDocument = gql`
278
290
  reopenArticleChange(input: $input) {
279
291
  revision ${articleRevisionFragment()}
280
292
  errors ${errorsFragment()}
281
- aticleErrors ${errorsFragment()}
293
+ articleErrors ${errorsFragment()}
282
294
  }
283
295
  }
284
296
  `;
@@ -320,11 +332,12 @@ export {
320
332
  MergeArticleRevisionDocument,
321
333
  ScheduleArticleRevisionDocument,
322
334
  CancelArticleRevisionScheduleDocument,
323
- ArticleChangesDocument,
324
335
  ChangeArticleSlugDocument,
325
336
  ReopenArticleChangeDocument,
326
337
  LockArticleRevisionDocument,
327
338
  UnlockArticleRevisionDocument,
339
+ ArticleHistoryDocument,
328
340
  buildBatchTranslateArticleDocument,
329
341
  buildBatchStartArticleRevisionDocument,
342
+ ArticleEditorsDocument,
330
343
  };
@@ -126,6 +126,8 @@ export function summaryChangeFragment() {
126
126
  operatorMeta
127
127
  source
128
128
  insertedAt
129
+ changeType
130
+ revisionId
129
131
  }
130
132
  `;
131
133
  }
@@ -78,10 +78,22 @@ const EventByIdDocument = gql`
78
78
  }
79
79
  `;
80
80
 
81
- const EventChangesDocument = gql`
82
- query EventChanges($input: IdInput!) {
83
- eventChanges(input: $input) {
81
+ const EventHistoryDocument = gql`
82
+ query EventHistory($input: HistoryInput!) {
83
+ eventHistory(input: $input) {
84
84
  list ${summaryChangeFragment()}
85
+ pagination ${paginationFragment()}
86
+ }
87
+ }
88
+ `;
89
+
90
+ const EventEditorsDocument = gql`
91
+ query EventEditors($input: EditorsInput!) {
92
+ eventEditors(input: $input) {
93
+ list {
94
+ id
95
+ name
96
+ }
85
97
  }
86
98
  }
87
99
  `;
@@ -328,11 +340,12 @@ export {
328
340
  MergeEventRevisionDocument,
329
341
  ScheduleEventRevisionDocument,
330
342
  CancelEventRevisionScheduleDocument,
331
- EventChangesDocument,
332
343
  ChangeEventSlugDocument,
333
344
  ReopenEventChangeDocument,
334
345
  LockEventRevisionDocument,
335
346
  UnlockEventRevisionDocument,
336
347
  buildBatchStartEventRevisionDocument,
337
348
  buildBatchTranslateEventDocument,
349
+ EventHistoryDocument,
350
+ EventEditorsDocument,
338
351
  };
@@ -69,10 +69,22 @@ const PageByIdDocument = gql`
69
69
  }
70
70
  `;
71
71
 
72
- const PageChangesDocument = gql`
73
- query PageChanges($input: IdInput!) {
74
- pageChanges(input: $input) {
72
+ const PageHistoryDocument = gql`
73
+ query PageHistory($input: HistoryInput!) {
74
+ pageHistory(input: $input) {
75
75
  list ${summaryChangeFragment()}
76
+ pagination ${paginationFragment()}
77
+ }
78
+ }
79
+ `;
80
+
81
+ const PageEditorsDocument = gql`
82
+ query PageEditors($input: EditorsInput!) {
83
+ pageEditors(input: $input) {
84
+ list {
85
+ id
86
+ name
87
+ }
76
88
  }
77
89
  }
78
90
  `;
@@ -316,11 +328,12 @@ export {
316
328
  MergePageRevisionDocument,
317
329
  SchedulePageRevisionDocument,
318
330
  CancelPageRevisionScheduleDocument,
319
- PageChangesDocument,
320
331
  ChangePageSlugDocument,
321
332
  ReopenPageChangeDocument,
322
333
  LockPageRevisionDocument,
323
334
  UnlockPageRevisionDocument,
324
335
  buildBatchTranslatePageDocument,
336
+ PageHistoryDocument,
325
337
  buildBatchStartPageRevisionDocument,
338
+ PageEditorsDocument,
326
339
  };
@@ -26,13 +26,13 @@ const show = async (ctx) => {
26
26
  }
27
27
 
28
28
  const revisions = await ctx.client.articleRevisions.all(id, ctx.locale);
29
- const changes = await ctx.client.articleChanges.all(id, ctx.locale);
29
+ const changes = await ctx.client.articleChanges.list({}, id, ctx.locale);
30
30
 
31
31
  return {
32
32
  assigns: {
33
33
  resource,
34
34
  revisions: revisions.list,
35
- changes: changes.list,
35
+ changes: changes,
36
36
  _translations: Object.keys(ctx.locales)
37
37
  .map((locale) => {
38
38
  const translation = resource.translations[locale];
@@ -0,0 +1,31 @@
1
+ const index = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+ const resource = await ctx.client.articles.find(parent_id, ctx.locale);
4
+
5
+ if (!resource) {
6
+ throw new Error(`Missing ${ctx.resourceConfig.articleType} #${parent_id}`);
7
+ }
8
+
9
+ const changes = await ctx.client.articleChanges.list(
10
+ ctx.query,
11
+ parent_id,
12
+ ctx.locale
13
+ );
14
+
15
+ const editors = await ctx.client.articleChanges.all_editors(
16
+ parent_id,
17
+ ctx.locale
18
+ );
19
+
20
+ return {
21
+ assigns: {
22
+ resource,
23
+ changes: changes,
24
+ editors,
25
+ },
26
+ };
27
+ };
28
+
29
+ export default {
30
+ index,
31
+ };
@@ -26,13 +26,13 @@ const show = async (ctx) => {
26
26
  }
27
27
 
28
28
  const revisions = await ctx.client.eventRevisions.all(id, ctx.locale);
29
- const changes = await ctx.client.eventChanges.all(id, ctx.locale);
29
+ const changes = await ctx.client.eventChanges.list({}, id, ctx.locale);
30
30
 
31
31
  return {
32
32
  assigns: {
33
33
  resource,
34
34
  revisions: revisions.list,
35
- changes: changes.list,
35
+ changes: changes,
36
36
  _translations: Object.keys(ctx.locales)
37
37
  .map((locale) => {
38
38
  const translation = resource.translations[locale];
@@ -0,0 +1,31 @@
1
+ const index = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+ const resource = await ctx.client.events.find(parent_id, ctx.locale);
4
+
5
+ if (!resource) {
6
+ throw new Error(`Missing ${ctx.resourceConfig.eventType} #${parent_id}`);
7
+ }
8
+
9
+ const changes = await ctx.client.eventChanges.list(
10
+ ctx.query,
11
+ parent_id,
12
+ ctx.locale
13
+ );
14
+
15
+ const editors = await ctx.client.eventChanges.all_editors(
16
+ parent_id,
17
+ ctx.locale
18
+ );
19
+
20
+ return {
21
+ assigns: {
22
+ resource,
23
+ changes: changes,
24
+ editors,
25
+ },
26
+ };
27
+ };
28
+
29
+ export default {
30
+ index,
31
+ };
@@ -0,0 +1,31 @@
1
+ const index = async (ctx) => {
2
+ const { parent_id } = ctx.params;
3
+ const resource = await ctx.client.pages.find(parent_id, ctx.locale);
4
+
5
+ if (!resource) {
6
+ throw new Error(`Missing ${ctx.resourceConfig.pageType} #${parent_id}`);
7
+ }
8
+
9
+ const changes = await ctx.client.pageChanges.list(
10
+ ctx.query,
11
+ parent_id,
12
+ ctx.locale
13
+ );
14
+
15
+ const editors = await ctx.client.pageChanges.all_editors(
16
+ parent_id,
17
+ ctx.locale
18
+ );
19
+
20
+ return {
21
+ assigns: {
22
+ resource,
23
+ changes: changes,
24
+ editors,
25
+ },
26
+ };
27
+ };
28
+
29
+ export default {
30
+ index,
31
+ };
@@ -25,13 +25,13 @@ const show = async (ctx) => {
25
25
  }
26
26
 
27
27
  const revisions = await ctx.client.pageRevisions.all(id, ctx.locale);
28
- const changes = await ctx.client.pageChanges.all(id, ctx.locale);
28
+ const changes = await ctx.client.pageChanges.list({}, id, ctx.locale);
29
29
 
30
30
  return {
31
31
  assigns: {
32
32
  resource,
33
33
  revisions: revisions.list,
34
- changes: changes.list,
34
+ changes: changes,
35
35
  _translations: Object.keys(ctx.locales)
36
36
  .map((locale) => {
37
37
  const translation = resource.translations[locale];
@@ -0,0 +1,133 @@
1
+ import Inflector from "./Inflector";
2
+
3
+ const CHANGE_TYEPS = {
4
+ revision_publish: {
5
+ label: "Revision published",
6
+ displayAction: "#RESOURCE_TYPE# updated by revision #{rev}",
7
+ canRevert: true,
8
+ canRevertAsLast: false,
9
+ requiresReason: true,
10
+ },
11
+ revision_create: {
12
+ label: "Revision created",
13
+ displayAction: "Revision #{rev} created",
14
+ canRevert: false,
15
+ canRevertAsLast: false,
16
+ requiresReason: false,
17
+ },
18
+ create: {
19
+ label: "#RESOURCE_TYPE# created",
20
+ displayAction: "#RESOURCE_TYPE# created",
21
+ canRevert: true,
22
+ canRevertAsLast: false,
23
+ requiresReason: false,
24
+ },
25
+ revision_lock: {
26
+ label: "Revision locked",
27
+ displayAction: "Revision #{rev} locked",
28
+ canRevert: false,
29
+ canRevertAsLast: false,
30
+ requiresReason: true,
31
+ },
32
+ revision_unlock: {
33
+ label: "Revision unlocked",
34
+ displayAction: "Revision #{rev} unlocked",
35
+ canRevert: false,
36
+ canRevertAsLast: false,
37
+ requiresReason: false,
38
+ },
39
+ revision_delete: {
40
+ label: "Revision deleted",
41
+ displayAction: "Revision #{rev} deleted",
42
+ canRevert: true,
43
+ canRevertAsLast: true,
44
+ requiresReason: false,
45
+ },
46
+ update: {
47
+ label: "Updated by script",
48
+ displayAction: "#RESOURCE_TYPE# updated",
49
+ canRevert: true,
50
+ canRevertAsLast: false,
51
+ requiresReason: true,
52
+ },
53
+ };
54
+
55
+ function changeTypes(resourceType = "page") {
56
+ return Object.entries(CHANGE_TYEPS).reduce((acc, [key, value]) => {
57
+ acc[key] = {
58
+ ...value,
59
+ label: value.label.replace(
60
+ "#RESOURCE_TYPE#",
61
+ Inflector.capitalize(resourceType)
62
+ ),
63
+ displayAction: value.displayAction.replace(
64
+ "#RESOURCE_TYPE#",
65
+ Inflector.capitalize(resourceType)
66
+ ),
67
+ };
68
+ return acc;
69
+ }, {});
70
+ }
71
+
72
+ function changeAction(change, resourceType) {
73
+ const changeType = CHANGE_TYEPS[change.changeType];
74
+
75
+ const displayAction = changeType?.displayAction;
76
+
77
+ if (!displayAction) {
78
+ return change.changeType;
79
+ }
80
+
81
+ const formattedAction = displayAction
82
+ .replace("#RESOURCE_TYPE#", Inflector.capitalize(resourceType))
83
+ .replace(
84
+ "#{rev}",
85
+ (function () {
86
+ if (change.revisionId) {
87
+ return `#${change.revisionId}`;
88
+ } else {
89
+ return "";
90
+ }
91
+ })()
92
+ );
93
+
94
+ return change.source === "revert"
95
+ ? `${formattedAction} by revert`
96
+ : formattedAction;
97
+ }
98
+
99
+ // Since we are not deleting anything from the history and the version numbers are
100
+ // a sequence with increments of 1 this means that the max version is the number of history entries
101
+ function getMaxVersion(changes) {
102
+ const { pagination } = changes;
103
+
104
+ return pagination.entriesCount;
105
+ }
106
+
107
+ function changeReason(change) {
108
+ const changeType = CHANGE_TYEPS[change.changeType];
109
+
110
+ if (changeType.requiresReason) {
111
+ return change.title;
112
+ }
113
+
114
+ return "";
115
+ }
116
+
117
+ function isChangeRevertable(change, maxVersion) {
118
+ const changeType = CHANGE_TYEPS[change.changeType];
119
+
120
+ return (
121
+ changeType.canRevert &&
122
+ ((changeType.canRevertAsLast && maxVersion === change.version) ||
123
+ maxVersion !== change.version)
124
+ );
125
+ }
126
+
127
+ export default {
128
+ changeTypes,
129
+ getMaxVersion,
130
+ changeAction,
131
+ isChangeRevertable,
132
+ changeReason,
133
+ };
@@ -1,23 +1,24 @@
1
- import routeCollection from "./routeCollection";
2
- import routeNestedCollection from "./routeNestedCollection";
3
- import routeNestedMember from "./routeNestedMember";
4
- import TranslationsHandler from "./handlers/articles/TranslationsHandler";
5
1
  import ArticleRevisionsHandler from "./handlers/article_revisions/ArticleRevisionsHandler";
6
- import GeneralHandler from "./handlers/article_revisions/GeneralHandler";
7
- import VisualHandler from "./handlers/article_revisions/VisualHandler";
2
+ import CancelSchedulesHandler from "./handlers/article_revisions/CancelSchedulesHandler";
8
3
  import CodeHandler from "./handlers/article_revisions/CodeHandler";
4
+ import GeneralHandler from "./handlers/article_revisions/GeneralHandler";
5
+ import LocksHandler from "./handlers/article_revisions/LocksHandler";
9
6
  import MetaHandler from "./handlers/article_revisions/MetaHandler";
7
+ import PublishesHandler from "./handlers/article_revisions/PublishesHandler";
8
+ import RevertsHandler from "./handlers/article_revisions/RevertsHandler";
10
9
  import TagHandler from "./handlers/article_revisions/TagHandler";
11
- import LocksHandler from "./handlers/article_revisions/LocksHandler";
12
10
  import UnlocksHandler from "./handlers/article_revisions/UnlocksHandler";
13
- import ClonesHandler from "./handlers/articles/ClonesHandler";
14
- import URLsHandler from "./handlers/articles/URLsHandler";
15
- import DeletesHandler from "./handlers/articles/DeletesHandler";
16
- import RevertsHandler from "./handlers/article_revisions/RevertsHandler";
17
- import PublishesHandler from "./handlers/article_revisions/PublishesHandler";
11
+ import VisualHandler from "./handlers/article_revisions/VisualHandler";
18
12
  import WidgetHandler from "./handlers/article_revisions/WidgetHandler";
19
13
  import ArticlesHandler from "./handlers/articles/ArticlesHandler";
20
- import CancelSchedulesHandler from "./handlers/article_revisions/CancelSchedulesHandler";
14
+ import ClonesHandler from "./handlers/articles/ClonesHandler";
15
+ import DeletesHandler from "./handlers/articles/DeletesHandler";
16
+ import HistoryHandler from "./handlers/articles/HistoryHandler";
17
+ import TranslationsHandler from "./handlers/articles/TranslationsHandler";
18
+ import URLsHandler from "./handlers/articles/URLsHandler";
19
+ import routeCollection from "./routeCollection";
20
+ import routeNestedCollection from "./routeNestedCollection";
21
+ import routeNestedMember from "./routeNestedMember";
21
22
 
22
23
  function routeArticlesModule(
23
24
  adapter,
@@ -45,6 +46,11 @@ function routeArticlesModule(
45
46
  { ...resourceConfig, viewsFallback: "articles/translations" }
46
47
  );
47
48
 
49
+ routeNestedCollection(adapter, baseResource, "history", HistoryHandler, {
50
+ ...resourceConfig,
51
+ viewsFallback: "articles/history",
52
+ });
53
+
48
54
  routeNestedCollection(
49
55
  adapter,
50
56
  baseResource,
@@ -1,23 +1,24 @@
1
- import routeCollection from "./routeCollection";
2
- import routeNestedCollection from "./routeNestedCollection";
3
- import routeNestedMember from "./routeNestedMember";
4
- import TranslationsHandler from "./handlers/events/TranslationsHandler";
1
+ import CancelSchedulesHandler from "./handlers/event_revisions/CancelSchedulesHandler";
2
+ import CodeHandler from "./handlers/event_revisions/CodeHandler";
5
3
  import EventRevisionsHandler from "./handlers/event_revisions/EventRevisionsHandler";
6
4
  import GeneralHandler from "./handlers/event_revisions/GeneralHandler";
7
- import VisualHandler from "./handlers/event_revisions/VisualHandler";
8
- import CodeHandler from "./handlers/event_revisions/CodeHandler";
5
+ import LocksHandler from "./handlers/event_revisions/LocksHandler";
9
6
  import MetaHandler from "./handlers/event_revisions/MetaHandler";
7
+ import PublishesHandler from "./handlers/event_revisions/PublishesHandler";
8
+ import RevertsHandler from "./handlers/event_revisions/RevertsHandler";
10
9
  import TagHandler from "./handlers/event_revisions/TagHandler";
11
- import LocksHandler from "./handlers/event_revisions/LocksHandler";
12
10
  import UnlocksHandler from "./handlers/event_revisions/UnlocksHandler";
11
+ import VisualHandler from "./handlers/event_revisions/VisualHandler";
12
+ import WidgetHandler from "./handlers/event_revisions/WidgetHandler";
13
13
  import ClonesHandler from "./handlers/events/ClonesHandler";
14
- import URLsHandler from "./handlers/events/URLsHandler";
15
14
  import DeletesHandler from "./handlers/events/DeletesHandler";
16
- import RevertsHandler from "./handlers/event_revisions/RevertsHandler";
17
- import PublishesHandler from "./handlers/event_revisions/PublishesHandler";
18
- import WidgetHandler from "./handlers/event_revisions/WidgetHandler";
19
15
  import EventsHandler from "./handlers/events/EventsHandler";
20
- import CancelSchedulesHandler from "./handlers/event_revisions/CancelSchedulesHandler";
16
+ import HistoryHandler from "./handlers/events/HistoryHandler";
17
+ import TranslationsHandler from "./handlers/events/TranslationsHandler";
18
+ import URLsHandler from "./handlers/events/URLsHandler";
19
+ import routeCollection from "./routeCollection";
20
+ import routeNestedCollection from "./routeNestedCollection";
21
+ import routeNestedMember from "./routeNestedMember";
21
22
 
22
23
  function routeEventsModule(
23
24
  adapter,
@@ -48,6 +49,11 @@ function routeEventsModule(
48
49
  }
49
50
  );
50
51
 
52
+ routeNestedCollection(adapter, baseResource, "history", HistoryHandler, {
53
+ ...resourceConfig,
54
+ viewsFallback: "events/history",
55
+ });
56
+
51
57
  routeNestedCollection(
52
58
  adapter,
53
59
  baseResource,