Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x | import { Injectable } from '@angular/core';
import { Store, select } from '@ngrx/store';
import { Observable, combineLatest } from 'rxjs';
import { delay, switchMap, tap } from 'rxjs/operators';
import { CallParameters } from 'ish-core/models/call-parameters/call-parameters.model';
import { CategoryHelper } from 'ish-core/models/category/category.helper';
import { getDesignViewSelectedPageletId } from 'ish-core/store/content/design-view';
import { getContentInclude, loadContentInclude } from 'ish-core/store/content/includes';
import { getCompleteContentPageTree, getContentPageTree, loadContentPageTree } from 'ish-core/store/content/page-tree';
import { getContentPagelet } from 'ish-core/store/content/pagelets';
import {
getContentPageLoading,
getSelectedContentPage,
setBreadcrumbForContentPage,
} from 'ish-core/store/content/pages';
import { getParametersProductList, loadParametersProductListFilter } from 'ish-core/store/content/parameters';
import { getViewContext, loadViewContextEntrypoint } from 'ish-core/store/content/viewcontexts';
import { getPGID } from 'ish-core/store/customer/user';
import { whenTruthy } from 'ish-core/utils/operators';
import { URLFormParams } from 'ish-core/utils/url-form-params';
@Injectable({ providedIn: 'root' })
export class CMSFacade {
constructor(private store: Store) {}
contentPage$ = this.store.pipe(select(getSelectedContentPage));
contentPageLoading$ = this.store.pipe(select(getContentPageLoading));
designViewSelectedPageletId$ = this.store.pipe(select(getDesignViewSelectedPageletId));
contentInclude$(includeId$: Observable<string>) {
return combineLatest([includeId$.pipe(whenTruthy()), this.store.pipe(select(getPGID))]).pipe(
delay(0), // delay ensures the apiToken cookie is deleted before a cms request without a pgid is triggered
tap(([includeId]) => this.store.dispatch(loadContentInclude({ includeId }))),
switchMap(([includeId]) => this.store.pipe(select(getContentInclude(includeId)), whenTruthy()))
);
}
pagelet$(id: string) {
return this.store.pipe(select(getContentPagelet(id)));
}
viewContext$(viewContextId: string, callParameters: CallParameters) {
this.store.dispatch(loadViewContextEntrypoint({ viewContextId, callParameters }));
return this.store.pipe(select(getViewContext(viewContextId, callParameters)));
}
contentPageTree$(rootId: string, depth: number) {
// fetch only the depth that is actually needed, depth=0 returns already the next child level
this.store.dispatch(loadContentPageTree({ rootId, depth: depth > 0 ? depth - 1 : 0 }));
return this.store.pipe(select(getContentPageTree(rootId)));
}
completeContentPageTree$(rootId: string, depth: number) {
// fetch only the depth that is actually needed, depth=0 returns already the next child level
this.store.dispatch(loadContentPageTree({ rootId, depth: depth > 0 ? depth - 1 : 0 }));
return this.store.pipe(select(getCompleteContentPageTree(rootId, depth)));
}
/**
*
* @param rootId is taken into consideration as first element of breadcrumb for content page
*
* NOTE: use 'COMPLETE' as value of rootId to get complete available page path as breadcrumb
*/
setBreadcrumbForContentPage(rootId: string): void {
this.store.dispatch(setBreadcrumbForContentPage({ rootId }));
}
parameterProductListFilter$(categoryId?: string, productFilter?: string, scope?: string, amount?: number) {
const listConfiguration = this.getProductListConfiguration(categoryId, productFilter, scope, amount);
this.store.dispatch(
loadParametersProductListFilter({
id: listConfiguration.id,
searchParameter: listConfiguration.searchParameter,
amount,
})
);
return this.store.pipe(select(getParametersProductList(listConfiguration.id)));
}
private getProductListConfiguration(
categoryId?: string,
productFilter?: string,
scope?: string,
amount?: number
): { id: string; searchParameter: URLFormParams } {
let id = '';
const searchParameter: URLFormParams = {};
id = categoryId ? `${id}@${categoryId}` : id;
id = productFilter ? `${id}@${productFilter}` : id;
id = scope ? `${id}@${scope}` : id;
id = amount ? `${id}@${amount}` : id;
Iif (categoryId && scope !== 'GlobalScope') {
searchParameter.category = [CategoryHelper.getCategoryPath(categoryId)];
}
searchParameter.productFilter = productFilter ? [productFilter] : ['fallback_searchquerydefinition'];
return { id, searchParameter };
}
}
|