@alauda-fe/common
Version:
Alauda frontend team common codes.
130 lines • 15.7 kB
JavaScript
/**
* @packageDocumentation
* @module async-data
*/
import { handlePixel } from '@alauda/ui';
import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
import { combineLatest, merge, filter, map, mapTo } from 'rxjs';
import { publishRef } from '../../core/public-api';
import { LoadingMaskComponent } from '../../widget/loading-mask/loading-mask.component';
import { ErrorStateComponent } from '../error-page/component';
import * as i0 from "@angular/core";
function PageStateComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementContainer(1, 2);
i0.ɵɵpipe(2, "async");
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.template)("ngTemplateOutletContext", i0.ɵɵpipeBind1(2, 2, ctx_r0.context$));
} }
function PageStateComponent_div_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelement(1, "acl-loading-mask", 4);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵadvance();
i0.ɵɵproperty("loading", true);
} }
function PageStateComponent_div_2_ng_container_3_Template(rf, ctx) { if (rf & 1) {
const _r2 = i0.ɵɵgetCurrentView();
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "acl-error-state", 5);
i0.ɵɵpipe(2, "async");
i0.ɵɵlistener("reload", function PageStateComponent_div_2_ng_container_3_Template_acl_error_state_reload_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.adapter.reload()); })("redirect", function PageStateComponent_div_2_ng_container_3_Template_acl_error_state_redirect_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.redirect.emit()); });
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("errorCode", i0.ɵɵpipeBind1(2, 4, ctx_r0.errorCode$))("autoRedirect", ctx_r0.autoRedirect)("showBackButton", ctx_r0.showBackButton)("backLink", ctx_r0.backLink);
} }
function PageStateComponent_div_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 3);
i0.ɵɵtemplate(1, PageStateComponent_div_2_ng_container_1_Template, 2, 1, "ng-container", 0);
i0.ɵɵpipe(2, "async");
i0.ɵɵtemplate(3, PageStateComponent_div_2_ng_container_3_Template, 3, 6, "ng-container", 0);
i0.ɵɵpipe(4, "async");
i0.ɵɵpipe(5, "async");
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵstyleProp("margin-top", ctx_r0.marginTop);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 4, ctx_r0.adapter.loading$));
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(4, 6, ctx_r0.adapter.loading$) && !!i0.ɵɵpipeBind1(5, 8, ctx_r0.errorCode$));
} }
export class PageStateComponent {
constructor() {
this.autoRedirect = true;
this.showBackButton = true;
this.redirect = new EventEmitter();
}
set top(top) {
this.marginTop = handlePixel(top ?? 120);
}
ngOnInit() {
this.context$ = this.adapter.rawData$.pipe(map(data => ({ $implicit: data, ...data })), publishRef());
this.errorCode$ = merge(combineLatest([this.adapter.rawData$, this.adapter.loading$]).pipe(filter(([data, loading]) => !data && !loading), mapTo(404)), this.adapter.error$.pipe(filter(error => !!error), map(error => {
if (error.code && typeof error.code === 'number') {
return error.code;
}
if (error.status && typeof error.status === 'number') {
return error.status;
}
return 1;
}))).pipe(publishRef());
}
static { this.ɵfac = function PageStateComponent_Factory(t) { return new (t || PageStateComponent)(); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PageStateComponent, selectors: [["acl-page-state"]], contentQueries: function PageStateComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.template = _t.first);
} }, inputs: { adapter: "adapter", autoRedirect: "autoRedirect", showBackButton: "showBackButton", backLink: "backLink", top: "top" }, outputs: { redirect: "redirect" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 4, vars: 6, consts: [[4, "ngIf"], ["class", "acl-data-state", 3, "marginTop", 4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "acl-data-state"], ["type", "module", 3, "loading"], [3, "reload", "redirect", "errorCode", "autoRedirect", "showBackButton", "backLink"]], template: function PageStateComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PageStateComponent_ng_container_0_Template, 3, 4, "ng-container", 0);
i0.ɵɵpipe(1, "async");
i0.ɵɵtemplate(2, PageStateComponent_div_2_Template, 6, 10, "div", 1);
i0.ɵɵpipe(3, "async");
} if (rf & 2) {
let tmp_0_0;
let tmp_1_0;
i0.ɵɵproperty("ngIf", (tmp_0_0 = i0.ɵɵpipeBind1(1, 2, ctx.context$)) == null ? null : tmp_0_0.$implicit);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", !((tmp_1_0 = i0.ɵɵpipeBind1(3, 4, ctx.context$)) == null ? null : tmp_1_0.$implicit));
} }, dependencies: [NgTemplateOutlet,
NgIf,
LoadingMaskComponent,
AsyncPipe,
ErrorStateComponent], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PageStateComponent, [{
type: Component,
args: [{ selector: 'acl-page-state', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
NgTemplateOutlet,
NgIf,
LoadingMaskComponent,
AsyncPipe,
ErrorStateComponent,
], template: "<ng-container *ngIf=\"(context$ | async)?.$implicit\">\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"context$ | async\"\n ></ng-container>\n</ng-container>\n\n<div\n *ngIf=\"!(context$ | async)?.$implicit\"\n class=\"acl-data-state\"\n [style.marginTop]=\"marginTop\"\n>\n <ng-container *ngIf=\"adapter.loading$ | async\">\n <acl-loading-mask\n [loading]=\"true\"\n type=\"module\"\n ></acl-loading-mask>\n </ng-container>\n <ng-container *ngIf=\"!(adapter.loading$ | async) && !!(errorCode$ | async)\">\n <acl-error-state\n [errorCode]=\"errorCode$ | async\"\n [autoRedirect]=\"autoRedirect\"\n [showBackButton]=\"showBackButton\"\n [backLink]=\"backLink\"\n (reload)=\"adapter.reload()\"\n (redirect)=\"redirect.emit()\"\n ></acl-error-state>\n </ng-container>\n</div>\n" }]
}], null, { adapter: [{
type: Input
}], autoRedirect: [{
type: Input
}], showBackButton: [{
type: Input
}], backLink: [{
type: Input
}], top: [{
type: Input
}], redirect: [{
type: Output
}], template: [{
type: ContentChild,
args: [TemplateRef, { static: true }]
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PageStateComponent, { className: "PageStateComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2FzeW5jLWRhdGEvcGFnZS1zdGF0ZS9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYXN5bmMtZGF0YS9wYWdlLXN0YXRlL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7SUNyQjlELDZCQUFvRDtJQUNsRCwyQkFHZ0I7Ozs7O0lBRmQsY0FBNkI7SUFDN0IsQUFEQSxrREFBNkIsa0VBQ2U7OztJQVM5Qyw2QkFBK0M7SUFDN0Msc0NBR29COzs7SUFGbEIsY0FBZ0I7SUFBaEIsOEJBQWdCOzs7O0lBSXBCLDZCQUE0RTtJQUMxRSwwQ0FPQzs7SUFEQyxBQURBLHlNQUFVLHVCQUFnQixLQUFDLGdNQUNmLHNCQUFlLEtBQUM7SUFDN0IsaUJBQWtCOzs7O0lBTmpCLGNBQWdDO0lBR2hDLEFBREEs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bnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgYXN5bmMtZGF0YVxuICovXG5cbmltcG9ydCB7IGhhbmRsZVBpeGVsIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgbWVyZ2UsIGZpbHRlciwgbWFwLCBtYXBUbyB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBwdWJsaXNoUmVmIH0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IExvYWRpbmdNYXNrQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vd2lkZ2V0L2xvYWRpbmctbWFzay9sb2FkaW5nLW1hc2suY29tcG9uZW50JztcbmltcG9ydCB7IEVycm9yU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9lcnJvci1wYWdlL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhU3RhdGVBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtcGFnZS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBOZ0lmLFxuICAgIExvYWRpbmdNYXNrQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBFcnJvclN0YXRlQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlU3RhdGVDb21wb25lbnQ8VCA9IHVua25vd24+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgYWRhcHRlcjogRGF0YVN0YXRlQWRhcHRlcjxUPjtcblxuICBASW5wdXQoKVxuICBhdXRvUmVkaXJlY3QgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dCYWNrQnV0dG9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBiYWNrTGluazogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB0b3AodG9wOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICB0aGlzLm1hcmdpblRvcCA9IGhhbmRsZVBpeGVsKHRvcCA/PyAxMjApO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHJlZGlyZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBtYXJnaW5Ub3A6IHN0cmluZztcblxuICBjb250ZXh0JDogT2JzZXJ2YWJsZTxcbiAgICB7XG4gICAgICAkaW1wbGljaXQ6IFQ7XG4gICAgfSAmIFRcbiAgPjtcblxuICBlcnJvckNvZGUkOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZXh0JCA9IHRoaXMuYWRhcHRlci5yYXdEYXRhJC5waXBlKFxuICAgICAgbWFwKGRhdGEgPT4gKHsgJGltcGxpY2l0OiBkYXRhLCAuLi5kYXRhIH0pKSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy5lcnJvckNvZGUkID0gbWVyZ2UoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmFkYXB0ZXIucmF3RGF0YSQsIHRoaXMuYWRhcHRlci5sb2FkaW5nJF0pLnBpcGUoXG4gICAgICAgIGZpbHRlcigoW2RhdGEsIGxvYWRpbmddKSA9PiAhZGF0YSAmJiAhbG9hZGluZyksXG4gICAgICAgIG1hcFRvKDQwNCksXG4gICAgICApLFxuICAgICAgdGhpcy5hZGFwdGVyLmVycm9yJC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXJyb3IgPT4gISFlcnJvciksXG4gICAgICAgIG1hcChlcnJvciA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLmNvZGUgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IuY29kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAmJiB0eXBlb2YgZXJyb3Iuc3RhdHVzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLnBpcGUocHVibGlzaFJlZigpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjb250ZXh0JCB8IGFzeW5jKT8uJGltcGxpY2l0XCI+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImNvbnRleHQkIHwgYXN5bmNcIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdlxuICAqbmdJZj1cIiEoY29udGV4dCQgfCBhc3luYyk/LiRpbXBsaWNpdFwiXG4gIGNsYXNzPVwiYWNsLWRhdGEtc3RhdGVcIlxuICBbc3R5bGUubWFyZ2luVG9wXT1cIm1hcmdpblRvcFwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZGFwdGVyLmxvYWRpbmckIHwgYXN5bmNcIj5cbiAgICA8YWNsLWxvYWRpbmctbWFza1xuICAgICAgW2xvYWRpbmddPVwidHJ1ZVwiXG4gICAgICB0eXBlPVwibW9kdWxlXCJcbiAgICA+PC9hY2wtbG9hZGluZy1tYXNrPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoYWRhcHRlci5sb2FkaW5nJCB8IGFzeW5jKSAmJiAhIShlcnJvckNvZGUkIHwgYXN5bmMpXCI+XG4gICAgPGFjbC1lcnJvci1zdGF0ZVxuICAgICAgW2Vycm9yQ29kZV09XCJlcnJvckNvZGUkIHwgYXN5bmNcIlxuICAgICAgW2F1dG9SZWRpcmVjdF09XCJhdXRvUmVkaXJlY3RcIlxuICAgICAgW3Nob3dCYWNrQnV0dG9uXT1cInNob3dCYWNrQnV0dG9uXCJcbiAgICAgIFtiYWNrTGlua109XCJiYWNrTGlua1wiXG4gICAgICAocmVsb2FkKT1cImFkYXB0ZXIucmVsb2FkKClcIlxuICAgICAgKHJlZGlyZWN0KT1cInJlZGlyZWN0LmVtaXQoKVwiXG4gICAgPjwvYWNsLWVycm9yLXN0YXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19