UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

603 lines 92.5 kB
import { Component, QueryList, ViewChildren } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { map } from 'rxjs/operators'; import { AppContextService } from '../../service/app-context.service'; import { DialogService } from '../dialog/dialog.service'; import { ObjectPropertySchemaFieldLoaderComponent, SchemaFieldHostComponent } from './schema-field-host.component'; import { SchemaPrimitiveType } from './schema-models'; import { SchemaDataTypeStore } from './schema-store'; import { SchemaUtilities } from './schema-utilities'; import * as i0 from "@angular/core"; import * as i1 from "../../service/app-context.service"; import * as i2 from "@angular/router"; import * as i3 from "../dialog/dialog.service"; import * as i4 from "@angular/common"; import * as i5 from "../../directives/disabled/disabled.directive"; import * as i6 from "../tooltip/tooltip.directive"; import * as i7 from "./schema-field-host.component"; const _c0 = ["navLink"]; function TabbedFormLoaderComponent_header_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "header", 10)(1, "h3", 11); i0.ɵɵtext(2); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r0.localize(ctx_r0.propertySchema.label)); } } function TabbedFormLoaderComponent_li_7_h5_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "h5", 13); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const group_r3 = i0.ɵɵnextContext().$implicit; const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵproperty("title", ctx_r4.localize(group_r3.displayName)); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r4.localize(group_r3.displayName)); } } function TabbedFormLoaderComponent_li_7_div_3_a_1_span_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } function TabbedFormLoaderComponent_li_7_div_3_a_1_Template(rf, ctx) { if (rf & 1) { const _r14 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "a", 16, 17); i0.ɵɵlistener("click", function TabbedFormLoaderComponent_li_7_div_3_a_1_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r14); const form_r7 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r12.switchForm(form_r7.name)); }); i0.ɵɵelement(2, "div"); i0.ɵɵelementStart(3, "span", 18); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div", 19); i0.ɵɵtemplate(6, TabbedFormLoaderComponent_li_7_div_3_a_1_span_6_Template, 2, 0, "span", 20); i0.ɵɵelementEnd()(); } if (rf & 2) { const form_r7 = i0.ɵɵnextContext().$implicit; const ctx_r8 = i0.ɵɵnextContext(2); i0.ɵɵclassProp("sme-active", form_r7.name === ctx_r8.activeFormName); i0.ɵɵproperty("title", ctx_r8.localize(form_r7.displayName))("routerLink", ctx_r8.baseUrl + "/form/" + form_r7.name); i0.ɵɵadvance(2); i0.ɵɵclassMapInterpolate1("sme-icon sme-margin-right-xs ", form_r7.icon, ""); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", ctx_r8.localize(form_r7.displayName), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r8.isFormDirty(form_r7.name)); } } function TabbedFormLoaderComponent_li_7_div_3_a_2_span_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } function TabbedFormLoaderComponent_li_7_div_3_a_2_Template(rf, ctx) { if (rf & 1) { const _r20 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "a", 21, 17); i0.ɵɵlistener("click", function TabbedFormLoaderComponent_li_7_div_3_a_2_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r20); const form_r7 = i0.ɵɵnextContext().$implicit; const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.switchForm(form_r7.name)); }); i0.ɵɵelement(2, "div"); i0.ɵɵelementStart(3, "span", 18); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div", 19); i0.ɵɵtemplate(6, TabbedFormLoaderComponent_li_7_div_3_a_2_span_6_Template, 2, 0, "span", 20); i0.ɵɵelementEnd()(); } if (rf & 2) { const form_r7 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(2); i0.ɵɵclassProp("sme-active", form_r7.name === ctx_r9.activeFormName); i0.ɵɵproperty("title", ctx_r9.localize(form_r7.displayName)); i0.ɵɵadvance(2); i0.ɵɵclassMapInterpolate1("sme-icon sme-margin-right-xs ", form_r7.icon, ""); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", ctx_r9.localize(form_r7.displayName), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r9.isFormDirty(form_r7.name)); } } function TabbedFormLoaderComponent_li_7_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵtemplate(1, TabbedFormLoaderComponent_li_7_div_3_a_1_Template, 7, 9, "a", 14); i0.ɵɵtemplate(2, TabbedFormLoaderComponent_li_7_div_3_a_2_Template, 7, 8, "a", 15); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx_r5.context.isEditorMode && ctx_r5.propertySchema.options.supportRoute); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !(!ctx_r5.context.isEditorMode && ctx_r5.propertySchema.options.supportRoute)); } } function TabbedFormLoaderComponent_li_7_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "li")(1, "nav"); i0.ɵɵtemplate(2, TabbedFormLoaderComponent_li_7_h5_2_Template, 2, 2, "h5", 12); i0.ɵɵtemplate(3, TabbedFormLoaderComponent_li_7_div_3_Template, 3, 2, "div", 7); i0.ɵɵelementEnd()(); } if (rf & 2) { const group_r3 = ctx.$implicit; i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", group_r3.displayName); i0.ɵɵadvance(1); i0.ɵɵproperty("ngForOf", group_r3.forms); } } function TabbedFormLoaderComponent_form_10_div_4_Template(rf, ctx) { if (rf & 1) { const _r28 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 26)(1, "button", 27); i0.ɵɵlistener("click", function TabbedFormLoaderComponent_form_10_div_4_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r28); const property_r22 = i0.ɵɵnextContext().$implicit; const ctx_r26 = i0.ɵɵnextContext(); ctx_r26.onSaveClick(property_r22.name); return i0.ɵɵresetView($event.preventDefault()); }); i0.ɵɵtext(2); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "button", 28); i0.ɵɵlistener("click", function TabbedFormLoaderComponent_form_10_div_4_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r28); const property_r22 = i0.ɵɵnextContext().$implicit; const ctx_r29 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r29.onDiscardClick(property_r22.name)); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "button", 29); i0.ɵɵlistener("click", function TabbedFormLoaderComponent_form_10_div_4_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r28); const ctx_r31 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r31.onCloseClick()); }); i0.ɵɵtext(6); i0.ɵɵelementEnd()(); } if (rf & 2) { const property_r22 = i0.ɵɵnextContext().$implicit; const ctx_r25 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("smeDisabled", !(ctx_r25.isFormDirty(property_r22.name) && ctx_r25.isFormValid(property_r22.name) && !ctx_r25.isFormBusy(property_r22.name))); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r25.getFooterButtonText(property_r22.name, "save")); i0.ɵɵadvance(1); i0.ɵɵproperty("smeDisabled", !(ctx_r25.isFormDirty(property_r22.name) && !ctx_r25.isFormBusy(property_r22.name))); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r25.getFooterButtonText(property_r22.name, "discard")); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r25.getFooterButtonText(property_r22.name, "close")); } } function TabbedFormLoaderComponent_form_10_Template(rf, ctx) { if (rf & 1) { const _r34 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "form")(1, "div", 22)(2, "sme-schema-field-host", 23, 24); i0.ɵɵlistener("dataChange", function TabbedFormLoaderComponent_form_10_Template_sme_schema_field_host_dataChange_2_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r34); const property_r22 = restoredCtx.$implicit; const ctx_r33 = i0.ɵɵnextContext(); return i0.ɵɵresetView((ctx_r33.data[property_r22.name] = $event)); }); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, TabbedFormLoaderComponent_form_10_div_4_Template, 7, 5, "div", 25); i0.ɵɵelementEnd()(); } if (rf & 2) { const property_r22 = ctx.$implicit; const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵclassProp("sme-layout-none", ctx_r2.activeFormName !== property_r22.name); i0.ɵɵadvance(1); i0.ɵɵproperty("propertySchema", property_r22)("data", ctx_r2.data[property_r22.name])("context", ctx_r2.context); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", !ctx_r2.getFooterButtonHideOption(property_r22.name)); } } export class TabbedFormLoaderComponent extends ObjectPropertySchemaFieldLoaderComponent { constructor(appContextService, activatedRoute, router, dialogService) { super(); this.appContextService = appContextService; this.activatedRoute = activatedRoute; this.router = router; this.dialogService = dialogService; this.cancelNextRouteGuard = false; this.subscriptions = []; } static registerDataType() { SchemaDataTypeStore.registerDataType({ type: SchemaPrimitiveType.Object, format: 'tabbed-form', description: 'It\'s a special form field control that recursively renders all the properties as fields. ' + 'This is like a container of other schema items.', loaderComponent: TabbedFormLoaderComponent, optionProperties: [ { type: SchemaPrimitiveType.Boolean, format: 'checkbox', name: 'supportRoute', label: 'actual_string:Support Route', required: false, options: {} }, { type: SchemaPrimitiveType.Array, format: 'simple-list', name: 'groups', label: 'actual_string:Groups', required: false, options: {}, item: { type: SchemaPrimitiveType.Object, format: 'default', required: false, options: { columnCount: 1, hideHeader: false, collapsible: { yes: false, state: 'collapsed' } }, properties: [ { type: SchemaPrimitiveType.String, format: 'resource-string-picker', name: 'displayName', label: 'actual_string:Display Name', options: {} }, { type: SchemaPrimitiveType.Array, format: 'simple-list', name: 'forms', label: 'actual_string:Forms', required: false, options: {}, item: { type: SchemaPrimitiveType.Object, format: 'default', required: false, options: { columnCount: 1, hideHeader: false, collapsible: { yes: false, state: 'collapsed' } }, properties: [ { type: SchemaPrimitiveType.String, format: 'textbox', name: 'name', label: 'actual_string:Name', required: false, options: { multipleline: false } }, { type: SchemaPrimitiveType.String, format: 'resource-string-picker', name: 'displayName', label: 'actual_string:Display Name', required: false, options: {} }, { type: SchemaPrimitiveType.String, format: 'textbox', name: 'icon', label: 'actual_string:Icon', required: false, options: { multipleline: false } }, { type: SchemaPrimitiveType.String, format: 'resource-string-picker', name: 'saveButtonText', label: 'actual_string:Save button text', required: false, defaultValue: 'resources:strings:MsftSmeShell.Angular.Common.save', options: { multipleline: false } }, { type: SchemaPrimitiveType.String, format: 'resource-string-picker', name: 'discardButtonText', label: 'actual_string:Discard Button Text', required: false, defaultValue: 'resources:strings:MsftSmeShell.Angular.Common.discard', options: { multipleline: false } }, { type: SchemaPrimitiveType.String, format: 'resource-string-picker', name: 'closeButtonText', label: 'actual_string:Cancel Button Text', required: false, defaultValue: 'resources:strings:MsftSmeShell.Angular.Common.close', options: { multipleline: false } }, { type: SchemaPrimitiveType.Boolean, format: 'toggle-switch', name: 'hideFooterActionButton', label: 'actual_string:Hide action buttons in footer' } ], emptyByDefault: false } } ], emptyByDefault: false } } ], predefinedObjectProperties: [ { type: SchemaPrimitiveType.Object, format: 'default', name: '<form 1>', properties: [] }, { type: SchemaPrimitiveType.Object, format: 'default', name: '<form 2>', properties: [] }, { type: SchemaPrimitiveType.Object, format: 'default', name: '<form 3>', properties: [] } ], tags: ['form-container'] }); } ngOnInit() { this.baseUrl = this.getBaseUrl(); if (this.baseUrl.indexOf('?') !== -1) { this.baseUrl = this.baseUrl.split('?')[0]; } this.subscriptions.push(this.activatedRoute.params.subscribe(params => { this.activeFormName = params.name; if (this.activeFormName) { this.executeFormAction('switch form', this.activeFormName); } })); this.originalData = SchemaUtilities.deepCopy(this.data); for (const formName in this.data) { if (this.data.hasOwnProperty(formName)) { ((currentFormName) => { this.executeFormAction('initialize form', { formName: currentFormName, onSucceeded: (formData) => { this.data[currentFormName] = formData; this.originalData[currentFormName] = SchemaUtilities.deepCopy(formData); if (this.fieldHostComponents) { const fieldHostComponents = this.fieldHostComponents.toArray(); const fieldHostComponent = fieldHostComponents.find(item => item.propertySchema.name === currentFormName); if (fieldHostComponent) { fieldHostComponent.markAsPristine(); } } } }); })(formName); } } setTimeout(() => { if (!this.activeFormName) { this.navLinkElements.first.nativeElement.click(); } }); } ngOnDestroy() { this.subscriptions.forEach(sub => sub?.unsubscribe()); } setupSchema(schema) { for (let i = 0; i < schema.properties.length; i++) { schema.properties[i].disabledCondition = 'formController.controller.' + schema.properties[i].name + '.isDisabled'; schema.properties[i].options.busyCondition = 'formController.controller.' + schema.properties[i].name + '.isBusy'; } } switchForm(formName) { this.activeFormName = formName; this.executeFormAction('switch form', this.activeFormName); this.cancelNextRouteGuard = true; } setFormOriginalData(formName, data) { this.originalData[formName] = SchemaUtilities.deepCopy(data); } isFormBusy(formName) { let result = false; const currentFormSchema = SchemaUtilities.getPropertySchemaByName(this.propertySchema, this.activeFormName); if (currentFormSchema && currentFormSchema.options && currentFormSchema.options.busyCondition) { result = this.evalExpression(currentFormSchema.options.busyCondition); } if (!result) { result = this.evalExpression(currentFormSchema.disabledCondition); } return result; } isFormDirty(formName) { let result = false; if (this.fieldHostComponents) { const fieldHostComponents = this.fieldHostComponents.toArray(); const fieldHostComponent = fieldHostComponents.find(item => item.propertySchema.name === formName); if (fieldHostComponent) { result = fieldHostComponent.isDirty(); } } return result; } getFooterButtonHideOption(formName) { let result = false; for (let i = 0; i < this.propertySchema.options.groups.length; i++) { for (let j = 0; j < this.propertySchema.options.groups[i].forms.length; j++) { if (this.propertySchema.options.groups[i].forms[j].name === formName) { result = this.propertySchema.options.groups[i].forms[j].hideFooterActionButton; } } } return result; } getFooterButtonText(formName, button) { let result = ''; for (let i = 0; i < this.propertySchema.options.groups.length; i++) { for (let j = 0; j < this.propertySchema.options.groups[i].forms.length; j++) { if (this.propertySchema.options.groups[i].forms[j].name === formName) { switch (button) { case 'save': result = this.localize(this.propertySchema.options.groups[i].forms[j].saveButtonText); break; case 'discard': result = this.localize(this.propertySchema.options.groups[i].forms[j].discardButtonText); break; case 'close': result = this.localize(this.propertySchema.options.groups[i].forms[j].closeButtonText); break; } } } } return result; } isFormValid(formName) { let result = false; if (this.fieldHostComponents) { const fieldHostComponents = this.fieldHostComponents.toArray(); const fieldHostComponent = fieldHostComponents.find(item => item.propertySchema.name === formName); if (fieldHostComponent) { result = fieldHostComponent.isValid(); } } return result; } onSaveClick(formName) { this.executeFormAction('submit', { formName: formName, onSucceeded: () => { if (this.fieldHostComponents) { const fieldHostComponents = this.fieldHostComponents.toArray(); const fieldHostComponent = fieldHostComponents.find(item => item.propertySchema.name === formName); if (fieldHostComponent) { fieldHostComponent.markAsPristine(); } } } }); } onDiscardClick(formName) { let formDataOverriding = null; this.executeFormAction('reset form', { formName: formName, onSucceeded: (formData) => { formDataOverriding = formData; } }); this.data[formName] = formDataOverriding || SchemaUtilities.deepCopy(this.originalData[formName]); if (this.fieldHostComponents) { const fieldHostComponents = this.fieldHostComponents.toArray(); const fieldHostComponent = fieldHostComponents.find(item => item.propertySchema.name === formName); if (fieldHostComponent) { fieldHostComponent.markAsPristine(); } } } canDeactivate(route, state, confirmationDialogOptions) { let continueNavigation = true; if (!this.cancelNextRouteGuard) { let isFormDirty = false; for (const formName in this.data) { if (this.data.hasOwnProperty(formName)) { if (this.isFormDirty(formName)) { isFormDirty = true; break; } } } if (isFormDirty) { continueNavigation = this.dialogService .showConfirmation(confirmationDialogOptions) .pipe(map((result) => { // The default is to continue editing const discardChanges = !result.confirmed; return discardChanges; })); return continueNavigation; } } this.cancelNextRouteGuard = false; return continueNavigation; } onCloseClick() { this.executeFormAction('close'); } getBaseUrl() { let result = this.router.url; for (let i = 0; i < this.propertySchema.properties.length; i++) { result = result.replace('/form/' + this.propertySchema.properties[i].name, ''); } return decodeURI(result); } } /** @nocollapse */ TabbedFormLoaderComponent.ɵfac = function TabbedFormLoaderComponent_Factory(t) { return new (t || TabbedFormLoaderComponent)(i0.ɵɵdirectiveInject(i1.AppContextService), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.DialogService)); }; /** @nocollapse */ TabbedFormLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TabbedFormLoaderComponent, selectors: [["ng-component"]], viewQuery: function TabbedFormLoaderComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(SchemaFieldHostComponent, 5); i0.ɵɵviewQuery(_c0, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fieldHostComponents = _t); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.navLinkElements = _t); } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 11, vars: 3, consts: [[1, "sme-settings", "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-stack-v", "sme-padding-bottom-lg"], ["class", "sme-position-flex-none sme-layout-tool-header", 4, "ngIf"], [1, "sme-position-flex-auto", "sme-arrange-stack-h", "sme-layout-relative"], [1, "sme-layout-absolute", "sme-position-inset-none", "sme-arrange-stack-h"], [1, "sme-settings-navigation", "sme-position-flex-none"], ["role", "tablist", 1, "sme-padding-horizontal-lg", "sme-arrange-stack-v"], [1, "sme-position-flex-auto", "sme-arrange-stack-v", "sme-arrange-overflow-hide-x", "sme-arrange-overflow-auto-y"], [4, "ngFor", "ngForOf"], [1, "sme-position-flex-auto", "sme-layout-relative"], [1, "sme-layout-absolute", "sme-position-inset-none", "sme-arrange-overflow-auto"], [1, "sme-position-flex-none", "sme-layout-tool-header"], [1, "sme-position-flex-none"], ["class", "sme-margin-top-xs sme-margin-bottom-xs", 3, "title", 4, "ngIf"], [1, "sme-margin-top-xs", "sme-margin-bottom-xs", 3, "title"], ["class", "sme-padding-squish-v-sm sme-arrange-stack-h sme-scheme-nav-item", "role", "tab", 3, "title", "routerLink", "sme-active", "click", 4, "ngIf"], ["class", "sme-padding-squish-v-sm sme-arrange-stack-h sme-scheme-nav-item", "role", "tab", 3, "title", "sme-active", "click", 4, "ngIf"], ["role", "tab", 1, "sme-padding-squish-v-sm", "sme-arrange-stack-h", "sme-scheme-nav-item", 3, "title", "routerLink", "click"], ["navLink", ""], [1, "ellipsis", "sme-position-flex-auto"], [1, "sme-width-sm", "sme-position-center-h-inline"], [4, "ngIf"], ["role", "tab", 1, "sme-padding-squish-v-sm", "sme-arrange-stack-h", "sme-scheme-nav-item", 3, "title", "click"], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-stack-v"], [1, "sme-position-flex-auto", 3, "propertySchema", "data", "context", "dataChange"], ["fieldHost", ""], ["class", "sme-position-flex-none sme-focus-zone", 4, "ngIf"], [1, "sme-position-flex-none", "sme-focus-zone"], ["type", "submit", 1, "sme-button-primary", 3, "smeDisabled", "click"], ["type", "button", 3, "smeDisabled", "click"], ["type", "button", 3, "click"]], template: function TabbedFormLoaderComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, TabbedFormLoaderComponent_header_1_Template, 3, 1, "header", 1); i0.ɵɵelementStart(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "nav", 5)(6, "ul", 6); i0.ɵɵtemplate(7, TabbedFormLoaderComponent_li_7_Template, 4, 2, "li", 7); i0.ɵɵelementEnd()()(); i0.ɵɵelementStart(8, "div", 8)(9, "div", 9); i0.ɵɵtemplate(10, TabbedFormLoaderComponent_form_10_Template, 5, 6, "form", 7); i0.ɵɵelementEnd()()()()(); } if (rf & 2) { i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.propertySchema.label); i0.ɵɵadvance(6); i0.ɵɵproperty("ngForOf", ctx.propertySchema.options.groups); i0.ɵɵadvance(3); i0.ɵɵproperty("ngForOf", ctx.propertySchema.properties); } }, dependencies: [i4.NgForOf, i4.NgIf, i2.RouterLink, i5.DisabledDirective, i6.TooltipDirective, i7.SchemaFieldHostComponent], encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabbedFormLoaderComponent, [{ type: Component, args: [{ template: "<div class=\"sme-settings sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v sme-padding-bottom-lg\">\r\n <header *ngIf=\"propertySchema.label\" class=\"sme-position-flex-none sme-layout-tool-header\">\r\n <h3 class=\"sme-position-flex-none\">{{localize(propertySchema.label)}}</h3>\r\n </header>\r\n <div class=\"sme-position-flex-auto sme-arrange-stack-h sme-layout-relative\">\r\n <div class=\"sme-layout-absolute sme-position-inset-none sme-arrange-stack-h\">\r\n <div class=\"sme-settings-navigation sme-position-flex-none\">\r\n <nav role=\"tablist\" class=\"sme-padding-horizontal-lg sme-arrange-stack-v\">\r\n <ul\r\n class=\"sme-position-flex-auto sme-arrange-stack-v sme-arrange-overflow-hide-x sme-arrange-overflow-auto-y\">\r\n <li *ngFor=\"let group of propertySchema.options.groups\">\r\n <nav>\r\n <h5 class=\"sme-margin-top-xs sme-margin-bottom-xs\" *ngIf=\"group.displayName\"\r\n [title]=\"localize(group.displayName)\">{{localize(group.displayName)}}</h5>\r\n <div *ngFor=\"let form of group.forms\">\r\n <a *ngIf=\"!context.isEditorMode && propertySchema.options.supportRoute\" #navLink\r\n class=\"sme-padding-squish-v-sm sme-arrange-stack-h sme-scheme-nav-item\"\r\n role=\"tab\" [title]=\"localize(form.displayName)\"\r\n [routerLink]=\"baseUrl+'/form/'+form.name\"\r\n [class.sme-active]=\"form.name===activeFormName\" (click)=\"switchForm(form.name)\">\r\n <div class=\"sme-icon sme-margin-right-xs {{form.icon}}\"></div>\r\n <span class=\"ellipsis sme-position-flex-auto\">\r\n {{localize(form.displayName)}}\r\n </span>\r\n <div class=\"sme-width-sm sme-position-center-h-inline\"><span\r\n *ngIf=\"isFormDirty(form.name)\">*</span></div>\r\n </a>\r\n <a *ngIf=\"!(!context.isEditorMode && propertySchema.options.supportRoute)\" #navLink\r\n class=\"sme-padding-squish-v-sm sme-arrange-stack-h sme-scheme-nav-item\"\r\n [title]=\"localize(form.displayName)\" role=\"tab\" (click)=\"switchForm(form.name)\"\r\n [class.sme-active]=\"form.name===activeFormName\">\r\n <div class=\"sme-icon sme-margin-right-xs {{form.icon}}\"></div>\r\n <span class=\"ellipsis sme-position-flex-auto\">\r\n {{localize(form.displayName)}}\r\n </span>\r\n <div class=\"sme-width-sm sme-position-center-h-inline\"><span\r\n *ngIf=\"isFormDirty(form.name)\">*</span></div>\r\n </a>\r\n </div>\r\n </nav>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n <div class=\"sme-position-flex-auto sme-layout-relative\">\r\n <div class=\"sme-layout-absolute sme-position-inset-none sme-arrange-overflow-auto\">\r\n <form *ngFor=\"let property of propertySchema.properties; let i = index\">\r\n <div [class.sme-layout-none]=\"activeFormName!==property.name\"\r\n class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v\">\r\n <!-- <sme-schema-field-host #fieldHost [propertySchema]=\"property\" [(data)]=\"data[property.name]\"\r\n [context]=\"context\" (dataMarkedAsDirty)=\"markDataAsDirty(property.name)\" class=\"sme-position-flex-auto\">\r\n </sme-schema-field-host> -->\r\n <sme-schema-field-host #fieldHost [propertySchema]=\"property\" [(data)]=\"data[property.name]\"\r\n [context]=\"context\" class=\"sme-position-flex-auto\">\r\n </sme-schema-field-host>\r\n <div *ngIf=\"!getFooterButtonHideOption(property.name)\" class=\"sme-position-flex-none sme-focus-zone\">\r\n <button type=\"submit\" class=\"sme-button-primary\"\r\n (click)=\"onSaveClick(property.name);$event.preventDefault()\"\r\n [smeDisabled]=\"!(isFormDirty(property.name) && isFormValid(property.name) && !isFormBusy(property.name))\">{{getFooterButtonText(property.name,'save')}}</button>\r\n <button type=\"button\" (click)=\"onDiscardClick(property.name)\"\r\n [smeDisabled]=\"!(isFormDirty(property.name) && !isFormBusy(property.name))\">{{getFooterButtonText(property.name,'discard')}}</button>\r\n <button type=\"button\"\r\n (click)=\"onCloseClick()\">{{getFooterButtonText(property.name,'close')}}</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }] }], function () { return [{ type: i1.AppContextService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.DialogService }]; }, { fieldHostComponents: [{ type: ViewChildren, args: [SchemaFieldHostComponent] }], navLinkElements: [{ type: ViewChildren, args: ['navLink'] }] }); })(); export class TabbedFormController { constructor() { this.controller = {}; } } export class TabbedFormItemController { constructor() { this.isBusyInternal = true; this.isDisabledInternal = false; } isBusy() { return this.isBusyInternal; } isDisabled() { return this.isDisabledInternal; } initialize() { return new Promise((resolve, reject) => { this.loadData().then(result => { const viewModel = this.convertDataModelToViewModel(result); this.isBusyInternal = false; resolve(viewModel); }); }); } saveData(viewModel) { this.onSaving(viewModel); this.isDisabledInternal = true; return new Promise((resolve, reject) => { this.loadData().then(result => { const newDataModel = this.mergeViewModelToDataModel(viewModel, result); this.submitData(newDataModel).then(() => { this.isDisabledInternal = false; this.onSaveSuccess(viewModel); resolve(); }, reason => { this.isDisabledInternal = false; this.onSaveError(reason); reject(reason); }); }); }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiYmVkLWZvcm0tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NjaGVtYS90YWJiZWQtZm9ybS1sb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2NoZW1hL3RhYmJlZC1mb3JtLWxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25ILE9BQU8sRUFBeUQsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7O0lDVG5ELGtDQUEyRixhQUFBO0lBQ3RELFlBQWtDO0lBQUEsaUJBQUssRUFBQTs7O0lBQXZDLGVBQWtDO0lBQWxDLGtFQUFrQzs7O0lBVXpELDhCQUN3QztJQUFBLFlBQStCO0lBQUEsaUJBQUs7Ozs7SUFBMUUsNkRBQXFDO0lBQUMsZUFBK0I7SUFBL0IsMkRBQStCOzs7SUFXWiw0QkFDcEI7SUFBQSxpQkFBQztJQUFBLGlCQUFPOzs7O0lBVjdDLGlDQUlrRjtJQUFoQywyTkFBUyxlQUFBLGdDQUFxQixDQUFBLElBQUM7SUFDL0Usc0JBQThEO0lBQzlELGdDQUE4QztJQUM1QyxZQUNGO0lBQUEsaUJBQU87SUFDUCwrQkFBdUQ7SUFBQSw0RkFDWjtJQUFBLGlCQUFNLEVBQUE7Ozs7SUFOakQsb0VBQStDO0lBRnBDLDREQUFvQyx3REFBQTtJQUcxQyxlQUFrRDtJQUFsRCw0RUFBa0Q7SUFFckQsZUFDRjtJQURFLHFFQUNGO0lBRUssZUFBNEI7SUFBNUIsdURBQTRCOzs7SUFVc0IsNEJBQ3BCO0lBQUEsaUJBQUM7SUFBQSxpQkFBTzs7OztJQVQ3QyxpQ0FHa0Q7SUFEQSwyTkFBUyxlQUFBLGdDQUFxQixDQUFBLElBQUM7SUFFL0Usc0JBQThEO0lBQzlELGdDQUE4QztJQUM1QyxZQUNGO0lBQUEsaUJBQU87SUFDUCwrQkFBdUQ7SUFBQSw0RkFDWjtJQUFBLGlCQUFNLEVBQUE7Ozs7SUFOakQsb0VBQStDO0lBRC9DLDREQUFvQztJQUUvQixlQUFrRDtJQUFsRCw0RUFBa0Q7SUFFckQsZUFDRjtJQURFLHFFQUNGO0lBRUssZUFBNEI7SUFBNUIsdURBQTRCOzs7SUF0QnJDLDJCQUFzQztJQUNwQyxrRkFXSTtJQUNKLGtGQVVJO0lBQ04saUJBQU07OztJQXZCQSxlQUFrRTtJQUFsRSxpR0FBa0U7SUFZbEUsZUFBcUU7SUFBckUsb0dBQXFFOzs7SUFqQi9FLDBCQUF3RCxVQUFBO0lBRXBELDhFQUM0RTtJQUM1RSwrRUF3Qk07SUFDUixpQkFBTSxFQUFBOzs7SUEzQmdELGVBQXVCO0lBQXZCLDJDQUF1QjtJQUVyRCxlQUFjO0lBQWQsd0NBQWM7Ozs7SUF5Q3RDLCtCQUFxRyxpQkFBQTtJQUVqRyxrT0FBUyxzQ0FBMEIsU0FBQyxlQUFBLHVCQUF1QixDQUFBLElBQUM7SUFDOEMsWUFBNkM7SUFBQSxpQkFBUztJQUNsSyxrQ0FDOEU7SUFEeEQsbU9BQVMsZUFBQSx5Q0FBNkIsQ0FBQSxJQUFDO0lBQ2lCLFlBQWdEO0lBQUEsaUJBQVM7SUFDdkksa0NBQzJCO0lBQXpCLGlMQUFTLGVBQUEsc0JBQWMsQ0FBQSxJQUFDO0lBQUMsWUFBOEM7SUFBQSxpQkFBUyxFQUFBOzs7O0lBSmhGLGVBQXlHO0lBQXpHLDJKQUF5RztJQUFDLGVBQTZDO0lBQTdDLDRFQUE2QztJQUV2SixlQUEyRTtJQUEzRSxpSEFBMkU7SUFBQyxlQUFnRDtJQUFoRCwrRUFBZ0Q7SUFFbkcsZUFBOEM7SUFBOUMsNkVBQThDOzs7O0lBaEIvRSw0QkFBd0UsY0FBQSxvQ0FBQTtJQU1OLHVVQUE4QjtJQUU1RixpQkFBd0I7SUFDeEIsbUZBUU07SUFDUixpQkFBTSxFQUFBOzs7O0lBakJELGVBQXdEO0lBQXhELDhFQUF3RDtJQUt6QixlQUEyQjtJQUEzQiw2Q0FBMkIsd0NBQUEsMkJBQUE7SUFHdkQsZUFBK0M7SUFBL0MsMkVBQStDOztBRHpDbkUsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHdDQUF3QztJQVVuRixZQUNZLGlCQUFvQyxFQUNwQyxjQUE4QixFQUM5QixNQUFjLEVBQ2QsYUFBNEI7UUFDcEMsS0FBSyxFQUFFLENBQUM7UUFKQSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFiaEMseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQWMzQyxDQUFDO0lBRU0sTUFBTSxDQUFDLGdCQUFnQjtRQUMxQixtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNqQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtZQUNoQyxNQUFNLEVBQUUsYUFBYTtZQUNyQixXQUFXLEVBQUUsNEZBQTRGO2tCQUNuRyxpREFBaUQ7WUFDdkQsZUFBZSxFQUFFLHlCQUF5QjtZQUMxQyxnQkFBZ0IsRUFBRTtnQkFDZDtvQkFDSSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsT0FBTztvQkFDakMsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLElBQUksRUFBRSxjQUFjO29CQUNwQixLQUFLLEVBQUUsNkJBQTZCO29CQUNwQyxRQUFRLEVBQUUsS0FBSztvQkFDZixPQUFPLEVBQUUsRUFDUjtpQkFDSjtnQkFDb0I7b0JBQ2pCLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxLQUFLO29CQUMvQixNQUFNLEVBQUUsYUFBYTtvQkFDckIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLHNCQUFzQjtvQkFDN0IsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsT0FBTyxFQUFFLEVBQ1I7b0JBQ0QsSUFBSSxFQUF3Qjt3QkFDeEIsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07d0JBQ2hDLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixRQUFRLEVBQUUsS0FBSzt3QkFDZixPQUFPLEVBQUU7NEJBQ0wsV0FBVyxFQUFFLENBQUM7NEJBQ2QsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLFdBQVcsRUFBRTtnQ0FDVCxHQUFHLEVBQUUsS0FBSztnQ0FDVixLQUFLLEVBQUUsV0FBVzs2QkFDckI7eUJBQ0o7d0JBQ0QsVUFBVSxFQUFFOzRCQUNSO2dDQUNJLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO2dDQUNoQyxNQUFNLEVBQUUsd0JBQXdCO2dDQUNoQyxJQUFJLEVBQUUsYUFBYTtnQ0FDbkIsS0FBSyxFQUFFLDRCQUE0QjtnQ0FDbkMsT0FBTyxFQUFFLEVBQ1I7NkJBQ0o7NEJBQ29CO2dDQUNqQixJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSztnQ0FDL0IsTUFBTSxFQUFFLGFBQWE7Z0NBQ3JCLElBQUksRUFBRSxPQUFPO2dDQUNiLEtBQUssRUFBRSxxQkFBcUI7Z0NBQzVCLFFBQVEsRUFBRSxLQUFLO2dDQUNmLE9BQU8sRUFBRSxFQUNSO2dDQUNELElBQUksRUFBd0I7b0NBQ3hCLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO29DQUNoQyxNQUFNLEVBQUUsU0FBUztvQ0FDakIsUUFBUSxFQUFFLEtBQUs7b0NBQ2YsT0FBTyxFQUFFO3dDQUNMLFdBQVcsRUFBRSxDQUFDO3dDQUNkLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixXQUFXLEVBQUU7NENBQ1QsR0FBRyxFQUFFLEtBQUs7NENBQ1YsS0FBSyxFQUFFLFdBQVc7eUNBQ3JCO3FDQUNKO29DQUNELFVBQVUsRUFBRTt3Q0FDUjs0Q0FDSSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsTUFBTTs0Q0FDaEMsTUFBTSxFQUFFLFNBQVM7NENBQ2pCLElBQUksRUFBRSxNQUFNOzRDQUNaLEtBQUssRUFBRSxvQkFBb0I7NENBQzNCLFFBQVEsRUFBRSxLQUFLOzRDQUNmLE9BQU8sRUFBRTtnREFDTCxZQUFZLEVBQUUsS0FBSzs2Q0FDdEI7eUNBQ0o7d0NBQ0Q7NENBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07NENBQ2hDLE1BQU0sRUFBRSx3QkFBd0I7NENBQ2hDLElBQUksRUFBRSxhQUFhOzRDQUNuQixLQUFLLEVBQUUsNEJBQTRCOzRDQUNuQyxRQUFRLEVBQUUsS0FBSzs0Q0FDZixPQUFPLEVBQUUsRUFDUjt5Q0FDSjt3Q0FDRDs0Q0FDSSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsTUFBTTs0Q0FDaEMsTUFBTSxFQUFFLFNBQVM7NENBQ2pCLElBQUksRUFBRSxNQUFNOzRDQUNaLEtBQUssRUFBRSxvQkFBb0I7NENBQzNCLFFBQVEsRUFBRSxLQUFLOzRDQUNmLE9BQU8sRUFBRTtnREFDTCxZQUFZLEVBQUUsS0FBSzs2Q0FDdEI7eUNBQ0o7d0NBQ0Q7NENBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07NENBQ2hDLE1BQU0sRUFBRSx3QkFBd0I7NENBQ2hDLElBQUksRUFBRSxnQkFBZ0I7NENBQ3RCLEtBQUssRUFBRSxnQ0FBZ0M7NENBQ3ZDLFFBQVEsRUFBRSxLQUFLOzRDQUNmLFlBQVksRUFBRSxvREFBb0Q7NENBQ2xFLE9BQU8sRUFBRTtnREFDTCxZQUFZLEVBQUUsS0FBSzs2Q0FDdEI7eUNBQ0o7d0NBQ0Q7NENBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07NENBQ2hDLE1BQU0sRUFBRSx3QkFBd0I7NENBQ2hDLElBQUksRUFBRSxtQkFBbUI7NENBQ3pCLEtBQUssRUFBRSxtQ0FBbUM7NENBQzFDLFFBQVEsRUFBRSxLQUFLOzRDQUNmLFlBQVksRUFBRSx1REFBdUQ7NENBQ3JFLE9BQU8sRUFBRTtnREFDTCxZQUFZLEVBQUUsS0FBSzs2Q0FDdEI7eUNBQ0o7d0NBQ0Q7NENBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07NENBQ2hDLE1BQU0sRUFBRSx3QkFBd0I7NENBQ2hDLElBQUksRUFBRSxpQkFBaUI7NENBQ3ZCLEtBQUssRUFBRSxrQ0FBa0M7NENBQ3pDLFFBQVEsRUFBRSxLQUFLOzRDQUNmLFlBQVksRUFBRSxxREFBcUQ7NENBQ25FLE9BQU8sRUFBRTtnREFDTCxZQUFZLEVBQUUsS0FBSzs2Q0FDdEI7eUNBQ0o7d0NBQ0Q7NENBQ0ksSUFBSSxFQUFFLG1CQUFtQixDQUFDLE9BQU87NENBQ2pDLE1BQU0sRUFBRSxlQUFlOzRDQUN2QixJQUFJLEVBQUUsd0JBQXdCOzRDQUM5QixLQUFLLEVBQUUsNkNBQTZDO3lDQUN2RDtxQ0FDSjtvQ0FDRCxjQUFjLEVBQUUsS0FBSztpQ0FDeEI7NkJBQ0o7eUJBQ0o7d0JBQ0QsY0FBYyxFQUFFLEtBQUs7cUJBQ3hCO2lCQUNKO2FBQ0o7WUFDRCwwQkFBMEIsRUFBRTtnQkFDRjtvQkFDbEIsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07b0JBQ2hDLE1BQU0sRUFBRSxTQUFTO29CQUNqQixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsVUFBVSxFQUFFLEVBQUU7aUJBQ2pCO2dCQUNxQjtvQkFDbEIsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07b0JBQ2hDLE1BQU0sRUFBRSxTQUFTO29CQUNqQixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsVUFBVSxFQUFFLEVBQUU7aUJBQ2pCO2dCQUNxQjtvQkFDbEIsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07b0JBQ2hDLE1BQU0sRUFBRSxTQUFTO29CQUNqQixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsVUFBVSxFQUFFLEVBQUU7aUJBQ2pCO2FBQ0o7WUFDRCxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztTQUMzQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUM5RDtRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUM5QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNwQyxDQUFDLENBQUMsZUFBdUIsRUFBRSxFQUFFO29CQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUU7d0JBQ3RDLFFBQVEsRUFBRSxlQUFlO3dCQUN6QixXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQVEsRUFBRTs0QkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLENBQUM7NEJBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDeEUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0NBQzFCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dDQUMvRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUFDO2dDQUMxRyxJQUFJLGtCQUFrQixFQUFFO29DQUNwQixrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQ0FDdkM7NkJBQ0o7d0JBQ0wsQ0FBQztxQkFDSixDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEI7U0FDSjtRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3BEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ00sV0FBVztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxNQUFrQjtRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyw0QkFBNEIsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7WUFDbEgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztTQUNySDtJQUNMLENBQUM7SUFFTSxVQUFVLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQVM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDTSxVQUFVLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVHLElBQUksaUJBQWlCLElBQUksaUJBQWlCLENBQUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDM0YsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3pFO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ00sV0FBVyxDQUFDLFFBQWdCO1FBQy9CLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ25HLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN6QztTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLHlCQUF5QixDQUFDLFFBQWdCO1FBQzdDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUNsRSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDbEY7YUFDSjtTQUNKO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNNLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsTUFBYztRQUN2RCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6RSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDbEUsUUFBUSxNQUFNLEVBQUU7d0JBQ1osS0FBSyxNQUFNOzRCQUNQLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7NEJBQ3RGLE1BQU07d0JBQ1YsS0FBSyxTQUFTOzRCQUNWLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQ