@nascentdigital/funnel-editor-contentful 4.6.7 → 5.0.2
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/dist/Editor.d.ts +6 -1
- package/dist/Editor.js +17 -1
- package/dist/EditorApp.js +11 -9
- package/dist/EditorPageRouter.d.ts +1 -0
- package/dist/EditorPageRouter.js +40 -0
- package/dist/EntryEditor.js +43 -1
- package/dist/EntrySidebar.js +18 -1
- package/dist/asset/index.d.ts +1 -0
- package/dist/{page/hooks → asset}/index.js +1 -1
- package/dist/asset/repository/AssetRepository.d.ts +10 -0
- package/dist/asset/repository/AssetRepository.js +33 -0
- package/dist/asset/repository/index.d.ts +1 -0
- package/dist/{core/api → asset/repository}/index.js +1 -3
- package/dist/collection/controller/ContentfulCollectionController.d.ts +41 -0
- package/dist/collection/controller/ContentfulCollectionController.js +278 -0
- package/dist/collection/controller/ContentfulCollectionControllerContainer.d.ts +5 -0
- package/dist/collection/controller/ContentfulCollectionControllerContainer.js +28 -0
- package/dist/collection/controller/index.d.ts +3 -0
- package/dist/collection/controller/index.js +19 -0
- package/dist/collection/controller/useContentfulCollectionController.d.ts +2 -0
- package/dist/collection/controller/useContentfulCollectionController.js +8 -0
- package/dist/collection/domain/Collection.d.ts +108 -0
- package/dist/collection/domain/Collection.js +386 -0
- package/dist/collection/domain/index.d.ts +1 -0
- package/dist/collection/domain/index.js +17 -0
- package/dist/collection/index.d.ts +3 -0
- package/dist/collection/index.js +19 -0
- package/dist/collection/repository/CollectionRepository.d.ts +49 -0
- package/dist/collection/repository/CollectionRepository.js +210 -0
- package/dist/collection/repository/index.d.ts +1 -0
- package/dist/collection/repository/index.js +17 -0
- package/dist/collection/screens/CollectionEditor.d.ts +1 -0
- package/dist/collection/screens/CollectionEditor.js +59 -0
- package/dist/collection/screens/index.d.ts +1 -0
- package/dist/collection/screens/index.js +17 -0
- package/dist/core/bridge/AppBridgeContainer.d.ts +9 -0
- package/dist/core/bridge/AppBridgeContainer.js +55 -0
- package/dist/core/bridge/AppBridgeContext.d.ts +8 -0
- package/dist/core/bridge/AppBridgeContext.js +11 -0
- package/dist/core/bridge/AppMessage.d.ts +19 -0
- package/dist/core/bridge/AppMessage.js +19 -0
- package/dist/core/bridge/index.d.ts +4 -0
- package/dist/core/bridge/index.js +20 -0
- package/dist/core/bridge/useAppBridge.d.ts +8 -0
- package/dist/core/bridge/useAppBridge.js +24 -0
- package/dist/core/client/ContentfulClientContainer.d.ts +8 -0
- package/dist/core/client/ContentfulClientContainer.js +43 -0
- package/dist/core/client/ContentfulClientContext.d.ts +8 -0
- package/dist/core/client/ContentfulClientContext.js +8 -0
- package/dist/core/client/index.d.ts +3 -0
- package/dist/core/client/index.js +19 -0
- package/dist/core/client/useContentfulClient.d.ts +4 -0
- package/dist/core/client/useContentfulClient.js +24 -0
- package/dist/core/contentful/Contentful.d.ts +33 -0
- package/dist/core/contentful/Contentful.js +67 -0
- package/dist/core/contentful/ContentfulAsset.d.ts +23 -0
- package/dist/core/contentful/ContentfulAsset.js +89 -0
- package/dist/core/contentful/ContentfulCollection.d.ts +29 -0
- package/dist/core/contentful/ContentfulCollection.js +97 -0
- package/dist/core/contentful/ContentfulPage.d.ts +31 -0
- package/dist/core/contentful/ContentfulPage.js +84 -0
- package/dist/core/contentful/ContentfulRefs.d.ts +16 -0
- package/dist/core/contentful/ContentfulRefs.js +152 -0
- package/dist/core/contentful/index.d.ts +5 -0
- package/dist/core/contentful/index.js +21 -0
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.js +3 -2
- package/dist/core/repository/CollectionSerializer.d.ts +9 -0
- package/dist/core/repository/CollectionSerializer.js +41 -0
- package/dist/core/repository/LocalCollectionRepository.d.ts +27 -0
- package/dist/core/repository/LocalCollectionRepository.js +143 -0
- package/dist/core/repository/LocalPageRepository.d.ts +16 -0
- package/dist/core/repository/LocalPageRepository.js +153 -0
- package/dist/core/repository/PageSerializer.d.ts +3 -3
- package/dist/core/repository/PageSerializer.js +18 -14
- package/dist/core/repository/RemoteCollectionRepository.d.ts +19 -0
- package/dist/core/repository/RemoteCollectionRepository.js +236 -0
- package/dist/core/repository/RemotePageRepository.d.ts +14 -0
- package/dist/core/repository/RemotePageRepository.js +113 -0
- package/dist/core/repository/index.d.ts +4 -1
- package/dist/core/repository/index.js +4 -1
- package/dist/explore/components/Header.d.ts +26 -0
- package/dist/explore/components/Header.js +31 -0
- package/dist/explore/components/index.d.ts +1 -0
- package/dist/explore/components/index.js +17 -0
- package/dist/explore/index.d.ts +1 -0
- package/dist/explore/index.js +17 -0
- package/dist/explore/screens/Dashboard.d.ts +1 -0
- package/dist/explore/screens/Dashboard.js +22 -0
- package/dist/explore/screens/PageExplorer.d.ts +1 -0
- package/dist/explore/screens/PageExplorer.js +9 -0
- package/dist/explore/screens/SiteExplorer.d.ts +1 -0
- package/dist/explore/screens/SiteExplorer.js +24 -0
- package/dist/explore/screens/index.d.ts +3 -0
- package/dist/explore/screens/index.js +19 -0
- package/dist/page/{hooks/PageController.d.ts → controller/ContentfulPageController.d.ts} +17 -6
- package/dist/page/controller/ContentfulPageController.js +277 -0
- package/dist/page/controller/ContentfulPageControllerContainer.d.ts +5 -0
- package/dist/page/controller/ContentfulPageControllerContainer.js +28 -0
- package/dist/page/controller/index.d.ts +3 -0
- package/dist/page/controller/index.js +19 -0
- package/dist/page/controller/useContentfulPageController.d.ts +2 -0
- package/dist/page/controller/useContentfulPageController.js +8 -0
- package/dist/{core → page}/domain/Page.d.ts +71 -10
- package/dist/page/domain/Page.js +631 -0
- package/dist/page/index.d.ts +3 -0
- package/dist/page/index.js +3 -0
- package/dist/page/repository/PageRepository.d.ts +45 -0
- package/dist/page/repository/PageRepository.js +224 -0
- package/dist/page/repository/index.d.ts +1 -0
- package/dist/page/repository/index.js +17 -0
- package/dist/page/screens/PageEditor.js +29 -15
- package/package.json +10 -4
- package/dist/core/api/EditorApiClient.d.ts +0 -7
- package/dist/core/api/EditorApiClient.js +0 -29
- package/dist/core/api/EditorApiContainer.d.ts +0 -5
- package/dist/core/api/EditorApiContainer.js +0 -16
- package/dist/core/api/EditorApiContext.d.ts +0 -7
- package/dist/core/api/EditorApiContext.js +0 -6
- package/dist/core/api/index.d.ts +0 -3
- package/dist/core/api/useEditorApi.d.ts +0 -2
- package/dist/core/api/useEditorApi.js +0 -12
- package/dist/core/domain/Page.js +0 -180
- package/dist/core/repository/PageRepository.d.ts +0 -12
- package/dist/core/repository/PageRepository.js +0 -23
- package/dist/page/hooks/PageController.js +0 -107
- package/dist/page/hooks/index.d.ts +0 -1
- /package/dist/{core → page}/domain/index.d.ts +0 -0
- /package/dist/{core → page}/domain/index.js +0 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContentfulPageController = void 0;
|
|
4
|
+
const funnel_core_1 = require("@nascentdigital/funnel-core");
|
|
5
|
+
const components_1 = require("@nascentdigital/funnel-editor/components");
|
|
6
|
+
const rxjs_1 = require("rxjs");
|
|
7
|
+
// class
|
|
8
|
+
class ContentfulPageController {
|
|
9
|
+
constructor(args) {
|
|
10
|
+
// initialize instance variables
|
|
11
|
+
this.pageRepository = args.pageRepository;
|
|
12
|
+
this._eventBus = new funnel_core_1.EventBus();
|
|
13
|
+
this._state = 'uninitialized';
|
|
14
|
+
}
|
|
15
|
+
get events$() {
|
|
16
|
+
return this._eventBus.events$.pipe((0, rxjs_1.filter)((e) => components_1.IPageController.Event.filter(e) || components_1.IPage.Event.filter(e)));
|
|
17
|
+
}
|
|
18
|
+
get saved$() {
|
|
19
|
+
return this._eventBus.events$.pipe((0, rxjs_1.filter)(components_1.IPageController.StateChangedEvent.filter), (0, rxjs_1.pairwise)(), (0, rxjs_1.filter)(([previous, current]) => previous.state === 'saving' && current.state === 'ready'));
|
|
20
|
+
}
|
|
21
|
+
get state() {
|
|
22
|
+
return this._state;
|
|
23
|
+
}
|
|
24
|
+
set state(value) {
|
|
25
|
+
// skip if unchanged
|
|
26
|
+
if (this._state === value) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// or update
|
|
30
|
+
this._state = value;
|
|
31
|
+
// raise event
|
|
32
|
+
this._eventBus.publish(components_1.IPageController.StateChangedEvent.create({
|
|
33
|
+
state: value,
|
|
34
|
+
controller: this
|
|
35
|
+
}));
|
|
36
|
+
// process queues if ready (might be noop)
|
|
37
|
+
if (value === 'ready') {
|
|
38
|
+
this.processQueues().catch(console.error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
get ready() {
|
|
42
|
+
const { _state } = this;
|
|
43
|
+
return _state !== 'uninitialized' && _state !== 'initializing';
|
|
44
|
+
}
|
|
45
|
+
get languages() {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
return (_b = (_a = this._pageSummary) === null || _a === void 0 ? void 0 : _a.pages.map(page => page.language)) !== null && _b !== void 0 ? _b : [];
|
|
48
|
+
}
|
|
49
|
+
get pageSummary() {
|
|
50
|
+
return this._pageSummary;
|
|
51
|
+
}
|
|
52
|
+
set pageSummary(pageSummary) {
|
|
53
|
+
// skip if summary is the same
|
|
54
|
+
if (this._pageSummary === pageSummary) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// update summary
|
|
58
|
+
this._pageSummary = pageSummary;
|
|
59
|
+
// raise event
|
|
60
|
+
this.raiseEvent('pageSummary.changed');
|
|
61
|
+
}
|
|
62
|
+
get page() {
|
|
63
|
+
return this._page;
|
|
64
|
+
}
|
|
65
|
+
set page(page) {
|
|
66
|
+
// skip if page is the same
|
|
67
|
+
if (this._page === page) {
|
|
68
|
+
console.debug('[ContentfulPageController/setPage] skipping page set, same instance');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// unbind previous page subscription (if any)
|
|
72
|
+
if (this._pageSubscription) {
|
|
73
|
+
this._pageSubscription.unsubscribe();
|
|
74
|
+
delete this._pageSubscription;
|
|
75
|
+
}
|
|
76
|
+
console.debug('[ContentfulPageController/setPage] new page instance set');
|
|
77
|
+
// update page
|
|
78
|
+
this._page = page;
|
|
79
|
+
// subscribe to page changes
|
|
80
|
+
if (page) {
|
|
81
|
+
// subscribe to page events
|
|
82
|
+
this._pageSubscription = page.events$
|
|
83
|
+
.pipe((0, rxjs_1.filter)(e => {
|
|
84
|
+
// handle page events
|
|
85
|
+
if (components_1.IPage.Event.filter(e)) {
|
|
86
|
+
return e.type === 'modified';
|
|
87
|
+
}
|
|
88
|
+
// or item/object/list events
|
|
89
|
+
else if (components_1.Item.Event.filter(e)
|
|
90
|
+
|| components_1.Item.Event.filter(e)
|
|
91
|
+
|| funnel_core_1.ObjectField.Event.filter(e)
|
|
92
|
+
|| funnel_core_1.FieldList.Event.filter(e)) {
|
|
93
|
+
return e.type === 'changed';
|
|
94
|
+
}
|
|
95
|
+
// or field
|
|
96
|
+
else {
|
|
97
|
+
return funnel_core_1.Field.Event.filter(e) && (e.type === 'changed' || e.type === 'reset');
|
|
98
|
+
}
|
|
99
|
+
}), (0, rxjs_1.debounce)(e => {
|
|
100
|
+
return (0, rxjs_1.interval)(1000);
|
|
101
|
+
}))
|
|
102
|
+
.subscribe(async (e) => {
|
|
103
|
+
if (page.modified && this._page === page) {
|
|
104
|
+
await this.save(page);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// raise state change
|
|
109
|
+
this.raiseEvent('page.changed');
|
|
110
|
+
}
|
|
111
|
+
get pageSys() {
|
|
112
|
+
return this._pageSys;
|
|
113
|
+
}
|
|
114
|
+
set pageSys(sys) {
|
|
115
|
+
this._pageSys = sys;
|
|
116
|
+
}
|
|
117
|
+
async sync(updatedSys) {
|
|
118
|
+
// skip if there's no active page/sys
|
|
119
|
+
const { page, pageSys, state, pageRepository } = this;
|
|
120
|
+
if (!page || !pageSys) {
|
|
121
|
+
console.warn('[ContentfulPageController/sync] ignoring update before initial load');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// or skip if page version is unchanged
|
|
125
|
+
else if (page.id === updatedSys.id && pageSys.version >= updatedSys.version) {
|
|
126
|
+
console.debug('[ContentfulPageController/sync] ignoring update - current version is fresh');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// or ignore if booting up
|
|
130
|
+
else if (state === 'uninitialized' || state === 'initializing' || state === 'loading') {
|
|
131
|
+
console.debug('[ContentfulPageController/sync] ignoring sync while loading');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// or queue if saving
|
|
135
|
+
else if (this.state === 'saving') {
|
|
136
|
+
console.debug('[ContentfulPageController/sync] queueing page sync - updated while saving');
|
|
137
|
+
this._queuedSync = updatedSys;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// try to sync
|
|
141
|
+
try {
|
|
142
|
+
console.debug('[ContentfulPageController/sync] starting sync');
|
|
143
|
+
// update state
|
|
144
|
+
this.state = 'loading';
|
|
145
|
+
// perform sync
|
|
146
|
+
const result = await pageRepository.sync({ page, sys: updatedSys });
|
|
147
|
+
// update sys
|
|
148
|
+
this.pageSys = result.sys;
|
|
149
|
+
// update page (if unchanged)
|
|
150
|
+
if (this.page !== result.page) {
|
|
151
|
+
this.page = result.page;
|
|
152
|
+
}
|
|
153
|
+
// update summary (if any)
|
|
154
|
+
if (result.pageSummary) {
|
|
155
|
+
this.pageSummary = result.pageSummary;
|
|
156
|
+
}
|
|
157
|
+
console.debug('[ContentfulPageController/sync] sync complete');
|
|
158
|
+
// clear state
|
|
159
|
+
this.state = 'ready';
|
|
160
|
+
}
|
|
161
|
+
// catch error
|
|
162
|
+
catch (e) {
|
|
163
|
+
console.error('[ContentfulPageController/sync] sync failed', e);
|
|
164
|
+
this.state = 'error';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async load() {
|
|
168
|
+
// mark as loading (or initialing if loading for first time)
|
|
169
|
+
this.state = this._state === 'uninitialized'
|
|
170
|
+
? 'initializing'
|
|
171
|
+
: 'loading';
|
|
172
|
+
// try to load page
|
|
173
|
+
try {
|
|
174
|
+
// fetch page
|
|
175
|
+
const { pageSummary, page, sys } = await this.pageRepository.load();
|
|
176
|
+
console.debug('[ContentfulPageController/load] fetched page', { pageSummary, page, sys });
|
|
177
|
+
// set page/summary
|
|
178
|
+
this.pageSummary = pageSummary;
|
|
179
|
+
this.page = page;
|
|
180
|
+
this._pageSys = sys;
|
|
181
|
+
// update state
|
|
182
|
+
this.state = 'ready';
|
|
183
|
+
}
|
|
184
|
+
// handle error
|
|
185
|
+
catch (e) {
|
|
186
|
+
console.error('[ContentfulPageController/load] failed to load page', e);
|
|
187
|
+
// set error state
|
|
188
|
+
this.state = 'error';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async create(target) {
|
|
192
|
+
throw new funnel_core_1.NotImplementedError();
|
|
193
|
+
}
|
|
194
|
+
async save(page) {
|
|
195
|
+
// ignore if not ready
|
|
196
|
+
if (this._state !== 'ready') {
|
|
197
|
+
console.debug(`[ContentfulPageController/save] queuing save while in "${this._state}" state`);
|
|
198
|
+
this._queuedSave = page;
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// clear save if queued
|
|
202
|
+
delete this._queuedSave;
|
|
203
|
+
// skip if page isn't modified
|
|
204
|
+
if (!page.modified) {
|
|
205
|
+
console.debug('[ContentfulPageController/save] ignore unmodified page');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// try to save page
|
|
209
|
+
try {
|
|
210
|
+
console.debug('[ContentfulPageController/save] starting save');
|
|
211
|
+
// mark as syncing
|
|
212
|
+
page.syncing = true;
|
|
213
|
+
// update state
|
|
214
|
+
this.state = 'saving';
|
|
215
|
+
// save page
|
|
216
|
+
this.page = await this.pageRepository.save(page);
|
|
217
|
+
// update state
|
|
218
|
+
this.state = 'ready';
|
|
219
|
+
console.debug('[ContentfulPageController/save] save finished');
|
|
220
|
+
}
|
|
221
|
+
// handle error
|
|
222
|
+
catch (e) {
|
|
223
|
+
console.error('[ContentfulPageController/save] save failed', e);
|
|
224
|
+
// update state
|
|
225
|
+
this.state = 'error';
|
|
226
|
+
}
|
|
227
|
+
// complete
|
|
228
|
+
finally {
|
|
229
|
+
page.syncing = false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
async reload() {
|
|
233
|
+
throw new funnel_core_1.NotImplementedError();
|
|
234
|
+
}
|
|
235
|
+
async unpublish() {
|
|
236
|
+
throw new funnel_core_1.NotImplementedError();
|
|
237
|
+
}
|
|
238
|
+
async processQueues() {
|
|
239
|
+
// try to save (if queued)
|
|
240
|
+
const { _queuedSave, _page } = this;
|
|
241
|
+
if (_queuedSave) {
|
|
242
|
+
// nuke if page differs (keep going afterward)
|
|
243
|
+
if (_page !== _queuedSave) {
|
|
244
|
+
console.debug('[ContentfulPageController/processQueues] ignoring queued save for old page');
|
|
245
|
+
delete this._queuedSave;
|
|
246
|
+
}
|
|
247
|
+
// otherwise, try to save
|
|
248
|
+
else {
|
|
249
|
+
console.debug('[ContentfulPageController/processQueues] restarting queued save');
|
|
250
|
+
// save
|
|
251
|
+
this.save(_page).catch(console.error);
|
|
252
|
+
// stop processing
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// try to sync
|
|
257
|
+
const { _queuedSync, _pageSys } = this;
|
|
258
|
+
if (_queuedSync) {
|
|
259
|
+
// clear sync
|
|
260
|
+
delete this._queuedSync;
|
|
261
|
+
// reload if entity is different
|
|
262
|
+
if (_queuedSync.id !== (_pageSys === null || _pageSys === void 0 ? void 0 : _pageSys.id)) {
|
|
263
|
+
console.debug('[ContentfulPageController/processQueues] reloading on entity change');
|
|
264
|
+
this.load().catch(console.error);
|
|
265
|
+
}
|
|
266
|
+
// otherwise, try to sync
|
|
267
|
+
else {
|
|
268
|
+
console.debug('[ContentfulPageController/processQueues] retrying sync');
|
|
269
|
+
this.sync(_queuedSync).catch(console.error);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
raiseEvent(type) {
|
|
274
|
+
this._eventBus.publish(components_1.IPageController.Event.create({ type, controller: this }));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
exports.ContentfulPageController = ContentfulPageController;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
export declare function ContentfulPageControllerContainer({ children }: PageControllerContainer.Props): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare namespace PageControllerContainer {
|
|
4
|
+
type Props = PropsWithChildren;
|
|
5
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContentfulPageControllerContainer = ContentfulPageControllerContainer;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_apps_toolkit_1 = require("@contentful/react-apps-toolkit");
|
|
6
|
+
const components_1 = require("@nascentdigital/funnel-editor/components");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const ContentfulPageController_1 = require("./ContentfulPageController");
|
|
9
|
+
// container
|
|
10
|
+
function ContentfulPageControllerContainer({ children }) {
|
|
11
|
+
// bind context
|
|
12
|
+
const pageRepository = (0, components_1.usePageRepository)();
|
|
13
|
+
const sdk = (0, react_apps_toolkit_1.useSDK)();
|
|
14
|
+
const context = (0, react_1.useMemo)(() => ({
|
|
15
|
+
controller: new ContentfulPageController_1.ContentfulPageController({ pageRepository })
|
|
16
|
+
}), [pageRepository]);
|
|
17
|
+
// listen to page changes
|
|
18
|
+
(0, react_1.useEffect)(() => {
|
|
19
|
+
// get controller
|
|
20
|
+
const { controller } = context;
|
|
21
|
+
// sync on change (return unsubscribe)
|
|
22
|
+
return sdk.entry.onSysChanged(sys => {
|
|
23
|
+
controller.sync(sys).catch(console.error);
|
|
24
|
+
});
|
|
25
|
+
}, [sdk, context]);
|
|
26
|
+
// render
|
|
27
|
+
return ((0, jsx_runtime_1.jsx)(components_1.PageControllerContext.Provider, { value: context, children: children }));
|
|
28
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ContentfulPageController"), exports);
|
|
18
|
+
__exportStar(require("./ContentfulPageControllerContainer"), exports);
|
|
19
|
+
__exportStar(require("./useContentfulPageController"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useContentfulPageController = useContentfulPageController;
|
|
4
|
+
const components_1 = require("@nascentdigital/funnel-editor/components");
|
|
5
|
+
// hook
|
|
6
|
+
function useContentfulPageController() {
|
|
7
|
+
return (0, components_1.usePageController)();
|
|
8
|
+
}
|
|
@@ -1,53 +1,90 @@
|
|
|
1
|
-
import { AssetClient } from '@nascentdigital/funnel-cms';
|
|
2
|
-
import {
|
|
1
|
+
import { AssetClient, PageClient } from '@nascentdigital/funnel-cms';
|
|
2
|
+
import { ContentfulData, ContentfulPageData } from '@nascentdigital/funnel-cms/contentful';
|
|
3
|
+
import { EventBus, FieldModel, Language, Schema } from '@nascentdigital/funnel-core';
|
|
3
4
|
import { Asset, Block, IPage, PageSettings, Section, SectionBlock } from '@nascentdigital/funnel-editor/components';
|
|
4
5
|
import { Observable } from 'rxjs';
|
|
5
6
|
export declare class Page implements IPage {
|
|
6
7
|
readonly id: Schema.Page.Id;
|
|
7
8
|
readonly template: Schema.Page;
|
|
8
9
|
readonly eventBus: EventBus;
|
|
10
|
+
readonly settings: PageSettings;
|
|
9
11
|
readonly groupId: Schema.Page.GroupId;
|
|
10
12
|
readonly brand: string;
|
|
11
13
|
readonly language: Language;
|
|
12
14
|
readonly region: string;
|
|
13
|
-
readonly url: string;
|
|
14
15
|
readonly publishedOn?: number;
|
|
15
16
|
readonly createdOn: number;
|
|
16
|
-
|
|
17
|
+
private _state;
|
|
18
|
+
private _initialErrors;
|
|
19
|
+
private readonly _discover;
|
|
17
20
|
private readonly _content;
|
|
18
21
|
private readonly _assets;
|
|
19
22
|
private readonly _pages;
|
|
20
23
|
private readonly _collections;
|
|
21
|
-
private readonly _tags;
|
|
22
24
|
private _initialTags;
|
|
25
|
+
private readonly _tags;
|
|
26
|
+
private _initialName;
|
|
27
|
+
private _name;
|
|
23
28
|
private _initialSlug;
|
|
29
|
+
private _url;
|
|
24
30
|
private _slug;
|
|
25
|
-
private
|
|
31
|
+
private _initialPublication?;
|
|
32
|
+
private _publication?;
|
|
33
|
+
private _updatedOn;
|
|
26
34
|
private _modifiedOn?;
|
|
35
|
+
private _deletedBlocks;
|
|
36
|
+
private _syncing;
|
|
37
|
+
private readonly _subscription;
|
|
38
|
+
private _savingOn?;
|
|
39
|
+
readonly references: ReadonlyArray<ContentfulData.Link.Entry | ContentfulData.Link.Asset>;
|
|
27
40
|
constructor(args: Page.ConstructorArgs);
|
|
28
|
-
settings: PageSettings;
|
|
29
|
-
publication: number | undefined;
|
|
30
41
|
get events$(): Observable<IPage.Events>;
|
|
31
42
|
get stable$(): Observable<boolean>;
|
|
43
|
+
get state(): Schema.Page.State;
|
|
44
|
+
private set state(value);
|
|
32
45
|
get modified(): boolean;
|
|
46
|
+
get updatedOn(): number;
|
|
47
|
+
get changes(): Page.Changes;
|
|
33
48
|
get published(): boolean;
|
|
49
|
+
get type(): Schema.Page.Type;
|
|
34
50
|
get syncing(): boolean;
|
|
51
|
+
set syncing(syncing: boolean);
|
|
52
|
+
repair(): void;
|
|
53
|
+
get url(): string;
|
|
54
|
+
get initialSlug(): string | undefined;
|
|
35
55
|
get hasSlug(): boolean;
|
|
56
|
+
set slug(slug: string | undefined);
|
|
36
57
|
get slug(): string | undefined;
|
|
58
|
+
get initialName(): string;
|
|
59
|
+
get name(): string;
|
|
60
|
+
set name(name: string);
|
|
61
|
+
get initialPublication(): number | undefined;
|
|
62
|
+
get publication(): number | undefined;
|
|
63
|
+
set publication(publication: number | undefined);
|
|
64
|
+
get initialErrors(): boolean;
|
|
65
|
+
get errors(): Page.Errors;
|
|
66
|
+
get valid(): boolean;
|
|
67
|
+
get hasErrors(): boolean;
|
|
68
|
+
get asRef(): IPage.Ref;
|
|
37
69
|
get discover(): ReadonlyArray<Block>;
|
|
70
|
+
get seo(): Block<Schema.Block<string, any, any>>;
|
|
71
|
+
getPreviewBlock(): Block | undefined;
|
|
38
72
|
get content(): ReadonlyArray<Section | Block>;
|
|
39
73
|
get blocks(): (Block<Schema.Block<string, any, any>> | SectionBlock<Schema.Block<string, any, any>>)[];
|
|
74
|
+
get deleteBlocks(): ReadonlyArray<Block>;
|
|
40
75
|
get firstBlock(): Block<Schema.Block<string, any, any>> | SectionBlock<Schema.Block<string, any, any>> | undefined;
|
|
41
76
|
get firstItem(): Block<Schema.Block<string, any, any>> | Section;
|
|
42
77
|
get items(): Array<Block | Section>;
|
|
43
78
|
get assets(): Asset[];
|
|
44
79
|
get collections(): ReadonlyArray<Schema.Collection.Data.AsLink>;
|
|
80
|
+
get pages(): ReadonlyArray<Schema.Page.Data.AsRef>;
|
|
45
81
|
get initialTags(): ReadonlySet<Schema.Tag<string, string>>;
|
|
46
82
|
get tagGroups(): ReadonlyArray<Schema.TagGroup>;
|
|
47
83
|
get tags(): ReadonlySet<Schema.Tag>;
|
|
84
|
+
hydrateStores(references: IPage.References): void;
|
|
48
85
|
getItem(identifier: string | undefined): Block | SectionBlock | Section | PageSettings | undefined;
|
|
49
86
|
coerceItem(identifier: string | undefined): Block | SectionBlock | Section | PageSettings;
|
|
50
|
-
deleteBlock(area: IPage.Area, key: string):
|
|
87
|
+
deleteBlock(area: IPage.Area, key: string): boolean;
|
|
51
88
|
getAsset(assetId: Asset.Id): Asset | undefined;
|
|
52
89
|
getAssetScope(range: Schema.AssetScope.Range): Schema.AssetScope;
|
|
53
90
|
getSearchScope(): AssetClient.GetAssets.Scope;
|
|
@@ -61,8 +98,23 @@ export declare class Page implements IPage {
|
|
|
61
98
|
removePageRef(pageId: Schema.Page.Id): boolean;
|
|
62
99
|
addTag(tag: Schema.Tag): void;
|
|
63
100
|
removeTag(tag: Schema.Tag): void;
|
|
101
|
+
onSaveStart(): void;
|
|
102
|
+
onSaveComplete(updatedOn: number): void;
|
|
103
|
+
private getBlock;
|
|
104
|
+
private raiseEvent;
|
|
64
105
|
}
|
|
65
106
|
export declare namespace Page {
|
|
107
|
+
type Blocks = Block[];
|
|
108
|
+
type Content = Array<Block | Section>;
|
|
109
|
+
type Errors = {
|
|
110
|
+
page: Page;
|
|
111
|
+
items: Array<Block | Section>;
|
|
112
|
+
};
|
|
113
|
+
type Changes = {
|
|
114
|
+
page: Page;
|
|
115
|
+
items: Array<Block | Section>;
|
|
116
|
+
};
|
|
117
|
+
type Target = Block | SectionBlock | Section | FieldModel;
|
|
66
118
|
type ConstructorArgs = {
|
|
67
119
|
template: Schema.Page;
|
|
68
120
|
eventBus: EventBus;
|
|
@@ -75,15 +127,24 @@ export declare namespace Page {
|
|
|
75
127
|
slug?: string;
|
|
76
128
|
name: string;
|
|
77
129
|
tags: Schema.Tag[];
|
|
130
|
+
discover: Blocks;
|
|
78
131
|
content: Content;
|
|
79
132
|
files?: Asset[];
|
|
80
133
|
pages?: IPage.Ref[];
|
|
81
134
|
collections?: Schema.Collection.Data.AsLink[];
|
|
82
135
|
state: Schema.Page.State;
|
|
136
|
+
errors: boolean;
|
|
83
137
|
createdOn: number;
|
|
84
138
|
updatedOn: number;
|
|
85
139
|
publishedOn?: number;
|
|
86
140
|
publication?: number;
|
|
141
|
+
references: ContentfulData.References;
|
|
87
142
|
};
|
|
88
|
-
type
|
|
143
|
+
type FromSchemaData = {
|
|
144
|
+
data: ContentfulPageData.ForSchema;
|
|
145
|
+
references?: Schema.Page.References;
|
|
146
|
+
eventBus?: EventBus;
|
|
147
|
+
};
|
|
148
|
+
function fromSchemaData({ data, references, eventBus }: FromSchemaData): Page;
|
|
149
|
+
function toUpdates(page: Page, savables: IPage.Savable[]): PageClient.Update.Args;
|
|
89
150
|
}
|