Skip to content

Commit 50721ef

Browse files
author
Alexa Snyder
committed
add pre document upload hook on page list component
1 parent 088d979 commit 50721ef

4 files changed

Lines changed: 28 additions & 6 deletions

File tree

projects/lib/src/admin/components/page-editor/page-editor.component.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export class PageEditorComponent implements OnInit, OnChanges {
6262
@Input() additionalAssetFilters?: TemplateRef<any>;
6363
@Input() defaultListOptions?: ListArgs<Asset> = { filters: { Active: true } };
6464
@Input() beforeAssetUpload?: (asset: AssetUpload) => Promise<AssetUpload>;
65+
@Input() beforeDocumentSave?: (page: Partial<PageContentDoc>) => Promise<Partial<PageContentDoc>>;
6566
@Output() selectedAssetChange = new EventEmitter<Asset | Asset[]>();
6667
@Output() backClicked = new EventEmitter<MouseEvent>();
6768
@Output() pageSaved = new EventEmitter<JDocument>();
@@ -196,17 +197,27 @@ export class PageEditorComponent implements OnInit, OnChanges {
196197
}
197198

198199
async saveChanges(): Promise<RequiredDeep<JDocument>> {
200+
if (this.beforeDocumentSave) {
201+
return this.beforeDocumentSave(this.page).then(async (page) => {
202+
this.document.Doc = page;
203+
return await this.saveDocument(this.document);
204+
});
205+
} else {
206+
return await this.saveDocument(this.document);
207+
}
208+
}
209+
210+
async saveDocument(document): Promise<RequiredDeep<JDocument>> {
199211
const me = await OrderCloudSDK.Me.Get();
200212
const nowDate = new Date().toISOString();
201213
const fullName = `${me.FirstName} ${me.LastName}`;
202214
let updated: RequiredDeep<JDocument>;
203-
204-
if (this.document && this.document.ID) {
215+
if (document && document.ID) {
205216
updated = await HeadStartSDK.Documents.Save(
206217
this.pageSchemaID,
207-
this.document.ID,
218+
document.ID,
208219
{
209-
ID: this.document.ID,
220+
ID: document.ID,
210221
Doc: {
211222
...this.page,
212223
DateLastUpdated: nowDate,

projects/lib/src/admin/components/page-list/page-list.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
[additionalAssetFilters]="additionalAssetFilters"
151151
[defaultListOptions]="defaultListOptions"
152152
[beforeAssetUpload]="beforeAssetUpload"
153+
[beforeDocumentSave]="beforeDocumentSave"
153154
(selectedAssetChange)="selectedAssetChange.emit($event)"
154155
>
155156
</cms-page-editor>

projects/lib/src/admin/components/page-list/page-list.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { PAGE_SCHEMA } from '../../constants/page-schema.constants';
2323
import DEFAULT_ASSET_TYPES, {
2424
ASSET_TYPES,
2525
} from '../../constants/asset-types.constants';
26+
import { PageContentDoc } from '../../models/page-content-doc.interface';
2627

2728
@Component({
2829
selector: 'cms-page-list',
@@ -43,6 +44,7 @@ export class PageListComponent implements OnInit, OnChanges {
4344
@Input() additionalAssetFilters?: TemplateRef<any>;
4445
@Input() defaultListOptions?: ListArgs<Asset> = { filters: { Active: true } };
4546
@Input() beforeAssetUpload?: (asset: AssetUpload) => Promise<AssetUpload>;
47+
@Input() beforeDocumentSave?: (page: Partial<PageContentDoc>) => Promise<Partial<PageContentDoc>>;
4648
@Output() selectedAssetChange = new EventEmitter<Asset | Asset[]>();
4749
@Output() backClicked = new EventEmitter<MouseEvent>();
4850
@Output() pageSaved = new EventEmitter<JDocument>();

projects/lib/src/stories/page-list.stories.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,18 +149,26 @@ export const WithBeforeAssetUpload = () => ({
149149
[resourceID]="resourceID"
150150
[editorOptions]="editorOptions"
151151
[beforeAssetUpload]="beforeAssetUpload"
152+
[beforeDocumentSave]="beforeDocumentSave"
152153
>
153154
</cms-page-list>
154155
</div>`,
155156
props: {
156157
renderSiteUrl: 'https://www.my-awesome-website.com',
157-
resourceType: 'Suppliers',
158-
resourceID: '41106',
158+
resourceType: 'Buyers',
159+
resourceID: 'sedev',
159160
lockedSlugs: ['', 'about-us'],
160161
editorOptions: {},
161162
beforeAssetUpload: (asset) => {
162163
console.log('before asset upload was hit');
163164
return Promise.resolve(asset);
164165
},
166+
beforeDocumentSave: (page) => {
167+
const span = document.createElement('span');
168+
span.innerHTML = page.Content;
169+
const images = span.getElementsByTagName('img');
170+
page.HeroImage = images.length ? images[0].currentSrc : null;
171+
return Promise.resolve(page);
172+
}
165173
},
166174
});

0 commit comments

Comments
 (0)