@smartbit4all/ng-client 2.2.2 → 3.0.1
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/esm2020/lib/component-factory-service/component-factory-service.module.mjs +17 -0
- package/esm2020/lib/component-factory-service/component-factory-service.service.mjs +35 -0
- package/esm2020/lib/component-factory-service/projects.mjs +6 -0
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +1 -1
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +5 -5
- package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +1 -1
- package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +2 -2
- package/esm2020/lib/session/smart-session.module.mjs +18 -18
- package/esm2020/lib/session/smart-session.service.mjs +2 -2
- package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +2 -2
- package/esm2020/lib/smart-client/smart-authentication.service.mjs +2 -2
- package/esm2020/lib/smart-client/smart-component-api-client.mjs +2 -3
- package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +2 -2
- package/esm2020/lib/smart-component-layout/api/api/api.mjs +4 -0
- package/esm2020/lib/smart-component-layout/api/api/default.service.mjs +133 -0
- package/esm2020/lib/smart-component-layout/api/api.module.mjs +40 -0
- package/esm2020/lib/smart-component-layout/api/configuration.mjs +91 -0
- package/esm2020/lib/smart-component-layout/api/encoder.mjs +19 -0
- package/esm2020/lib/smart-component-layout/api/index.mjs +7 -0
- package/esm2020/lib/smart-component-layout/api/model/componentType.mjs +17 -0
- package/esm2020/lib/smart-component-layout/api/model/componentWidgetType.mjs +17 -0
- package/esm2020/lib/smart-component-layout/api/model/layoutDirection.mjs +16 -0
- package/esm2020/lib/smart-component-layout/api/model/models.mjs +6 -0
- package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +2 -0
- package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +2 -0
- package/esm2020/lib/smart-component-layout/api/param.mjs +2 -0
- package/esm2020/lib/smart-component-layout/api/variables.mjs +9 -0
- package/esm2020/lib/smart-component-layout/projects.mjs +8 -0
- package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +7 -0
- package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +123 -0
- package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +43 -0
- package/esm2020/lib/smart-dialog/projects.mjs +8 -0
- package/esm2020/lib/smart-dialog/smartdialog.component.mjs +54 -0
- package/esm2020/lib/smart-dialog/smartdialog.model.mjs +16 -0
- package/esm2020/lib/smart-dialog/smartdialog.module.mjs +49 -0
- package/esm2020/lib/smart-dialog/smartdialog.service.mjs +60 -0
- package/esm2020/lib/smart-expandable-section/expandable-section.component.mjs +82 -0
- package/esm2020/lib/smart-expandable-section/expandable-section.model.mjs +12 -0
- package/esm2020/lib/smart-expandable-section/projects.mjs +8 -0
- package/esm2020/lib/smart-expandable-section/smart-expandable-section.module.mjs +51 -0
- package/esm2020/lib/smart-expandable-section/smart-expandable-section.service.mjs +14 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +16 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +9 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionData.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +19 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionField.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +25 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionList.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +31 -0
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +19 -0
- package/esm2020/lib/smart-filter/api/filter/model/model.mjs +16 -0
- package/esm2020/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +2 -0
- package/esm2020/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +13 -0
- package/esm2020/lib/smart-filter/api/value/model/value.mjs +13 -0
- package/esm2020/lib/smart-filter/projects.mjs +9 -0
- package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +14 -0
- package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +159 -0
- package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +45 -0
- package/esm2020/lib/smart-filter/smart-filter/smart-filter.component.mjs +36 -0
- package/esm2020/lib/smart-filter/smart-filter/smart-filter.service.mjs +31 -0
- package/esm2020/lib/smart-filter/smart-filter.model.mjs +13 -0
- package/esm2020/lib/smart-filter/smart-filter.module.mjs +33 -0
- package/esm2020/lib/smart-form/api/api/api.mjs +4 -0
- package/esm2020/lib/smart-form/api/api/default.service.mjs +133 -0
- package/esm2020/lib/smart-form/api/api.module.mjs +40 -0
- package/esm2020/lib/smart-form/api/configuration.mjs +91 -0
- package/esm2020/lib/smart-form/api/encoder.mjs +19 -0
- package/esm2020/lib/smart-form/api/index.mjs +7 -0
- package/esm2020/lib/smart-form/api/model/models.mjs +8 -0
- package/esm2020/lib/smart-form/api/model/propertyMapping.mjs +13 -0
- package/esm2020/lib/smart-form/api/model/selectionDefinition.mjs +8 -0
- package/esm2020/lib/smart-form/api/model/smartFormWidgetDirection.mjs +16 -0
- package/esm2020/lib/smart-form/api/model/smartFormWidgetType.mjs +44 -0
- package/esm2020/lib/smart-form/api/model/smartLayoutDefinition.mjs +2 -0
- package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +2 -0
- package/esm2020/lib/smart-form/api/model/smartWidgetDefinition.mjs +2 -0
- package/esm2020/lib/smart-form/api/param.mjs +2 -0
- package/esm2020/lib/smart-form/api/variables.mjs +9 -0
- package/esm2020/lib/smart-form/projects.mjs +13 -0
- package/esm2020/lib/smart-form/services/smartform.layout-definition.service.mjs +397 -0
- package/esm2020/lib/smart-form/services/smartform.service.mjs +483 -0
- package/esm2020/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +14 -0
- package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +78 -0
- package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +2 -0
- package/esm2020/lib/smart-form/smartform.component.mjs +117 -0
- package/esm2020/lib/smart-form/smartform.form-model.mjs +2 -0
- package/esm2020/lib/smart-form/smartform.model.mjs +38 -0
- package/esm2020/lib/smart-form/smartform.module.mjs +146 -0
- package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +76 -0
- package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +589 -0
- package/esm2020/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +59 -0
- package/esm2020/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +31 -0
- package/esm2020/lib/smart-grid/api/grid-api/api/api.mjs +4 -0
- package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +372 -0
- package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +40 -0
- package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +72 -0
- package/esm2020/lib/smart-grid/api/grid-api/encoder.mjs +19 -0
- package/esm2020/lib/smart-grid/api/grid-api/index.mjs +6 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +13 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +21 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridModel.mjs +2 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridPage.mjs +2 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridRow.mjs +2 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +17 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +16 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +2 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +2 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridView.mjs +2 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +8 -0
- package/esm2020/lib/smart-grid/api/grid-api/model/models.mjs +12 -0
- package/esm2020/lib/smart-grid/api/grid-api/variables.mjs +9 -0
- package/esm2020/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +20 -0
- package/esm2020/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +56 -0
- package/esm2020/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +166 -0
- package/esm2020/lib/smart-grid/models/model.mjs +28 -0
- package/esm2020/lib/smart-grid/projects.mjs +9 -0
- package/esm2020/lib/smart-grid/smart-grid.component.mjs +452 -0
- package/esm2020/lib/smart-grid/smart-grid.module.mjs +69 -0
- package/esm2020/lib/smart-grid/smart-grid.service.mjs +71 -0
- package/esm2020/lib/smart-icon/projects.mjs +7 -0
- package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +48 -0
- package/esm2020/lib/smart-icon/smart-icon.module.mjs +22 -0
- package/esm2020/lib/smart-icon/smart-icon.service.mjs +45 -0
- package/esm2020/lib/smart-navbar/projects.mjs +8 -0
- package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +61 -0
- package/esm2020/lib/smart-navbar/smart-navbar.model.mjs +6 -0
- package/esm2020/lib/smart-navbar/smart-navbar.module.mjs +65 -0
- package/esm2020/lib/smart-navbar/smart-navbar.service.mjs +14 -0
- package/esm2020/lib/smart-navigation/projects.mjs +6 -0
- package/esm2020/lib/smart-navigation/smart-navigation.interface.mjs +2 -0
- package/esm2020/lib/smart-navigation/smart-navigation.module.mjs +18 -0
- package/esm2020/lib/smart-navigation/smart-navigation.service.mjs +56 -0
- package/esm2020/lib/smart-ng-client.module.mjs +16 -4
- package/esm2020/lib/smart-subject/projects.mjs +5 -0
- package/esm2020/lib/smart-subject/smart-subject.mjs +21 -0
- package/esm2020/lib/smart-tab-group/projects.mjs +8 -0
- package/esm2020/lib/smart-tab-group/smart-tab-group.component.mjs +43 -0
- package/esm2020/lib/smart-tab-group/smart-tab-group.module.mjs +25 -0
- package/esm2020/lib/smart-tab-group/smart-tab-group.service.mjs +14 -0
- package/esm2020/lib/smart-tab-group/tab-content/tab-content.component.mjs +31 -0
- package/esm2020/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +66 -0
- package/esm2020/lib/smart-tab-group/tabTile.model.mjs +2 -0
- package/esm2020/lib/smart-table/components/loading/loading.component.mjs +15 -0
- package/esm2020/lib/smart-table/projects.mjs +9 -0
- package/esm2020/lib/smart-table/smarttable.component.mjs +98 -0
- package/esm2020/lib/smart-table/smarttable.date-pipe.mjs +43 -0
- package/esm2020/lib/smart-table/smarttable.model.mjs +167 -0
- package/esm2020/lib/smart-table/smarttable.module.mjs +89 -0
- package/esm2020/lib/smart-table/smarttable.service.mjs +14 -0
- package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +36 -0
- package/esm2020/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +22 -0
- package/esm2020/lib/smart-table/tables/table.mjs +411 -0
- package/esm2020/lib/smart-tree/smarttree.component.mjs +2 -2
- package/esm2020/lib/smart-tree/smarttree.model.mjs +1 -1
- package/esm2020/lib/smart-tree/smarttree.module.mjs +2 -2
- package/esm2020/lib/smart-tree/smarttree.service.interface.mjs +1 -1
- package/esm2020/lib/smart-tree/smarttree.service.mjs +1 -1
- package/esm2020/lib/view-context/api/api/api.mjs +1 -1
- package/esm2020/lib/view-context/api/api/view.service.mjs +1 -1
- package/esm2020/lib/view-context/api/api.module.mjs +1 -1
- package/esm2020/lib/view-context/api/configuration.mjs +1 -1
- package/esm2020/lib/view-context/api/encoder.mjs +1 -1
- package/esm2020/lib/view-context/api/index.mjs +1 -1
- package/esm2020/lib/view-context/api/model/closeResult.mjs +1 -1
- package/esm2020/lib/view-context/api/model/componentConstraint.mjs +1 -1
- package/esm2020/lib/view-context/api/model/componentModel.mjs +1 -1
- package/esm2020/lib/view-context/api/model/componentModelChange.mjs +1 -1
- package/esm2020/lib/view-context/api/model/dataChange.mjs +1 -1
- package/esm2020/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
- package/esm2020/lib/view-context/api/model/dataChangeKind.mjs +1 -1
- package/esm2020/lib/view-context/api/model/messageData.mjs +1 -1
- package/esm2020/lib/view-context/api/model/messageOption.mjs +1 -1
- package/esm2020/lib/view-context/api/model/messageOptionType.mjs +1 -1
- package/esm2020/lib/view-context/api/model/messageResult.mjs +1 -1
- package/esm2020/lib/view-context/api/model/messageType.mjs +1 -1
- package/esm2020/lib/view-context/api/model/models.mjs +1 -1
- package/esm2020/lib/view-context/api/model/openPendingData.mjs +1 -1
- package/esm2020/lib/view-context/api/model/smartLinkData.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiAction.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionButtonDescriptor.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionButtonIconPos.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionConstraint.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionFeedbackType.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionInputType.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionRequest.mjs +1 -1
- package/esm2020/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -1
- package/esm2020/lib/view-context/api/model/valueSet.mjs +1 -1
- package/esm2020/lib/view-context/api/model/view.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewApiError.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewConstraint.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewContext.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewContextChange.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewContextData.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewData.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewState.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
- package/esm2020/lib/view-context/api/model/viewType.mjs +1 -1
- package/esm2020/lib/view-context/api/param.mjs +1 -1
- package/esm2020/lib/view-context/api/variables.mjs +1 -1
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +1 -1
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +3 -3
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +3 -3
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +3 -3
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +8 -7
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +3 -3
- package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +4 -3
- package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +2 -2
- package/esm2020/lib/view-context/smart-ui-action/ui-action.model.mjs +1 -1
- package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +2 -2
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +2 -2
- package/esm2020/lib/view-context/smart-view-context.module.mjs +3 -3
- package/esm2020/lib/view-context/smart-view-context.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +9 -9
- package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +1 -1
- package/esm2020/projects.mjs +15 -3
- package/fesm2015/smartbit4all-ng-client.mjs +9465 -3578
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +9275 -3460
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/component-factory-service/component-factory-service.module.d.ts +6 -0
- package/lib/component-factory-service/component-factory-service.service.d.ts +13 -0
- package/lib/component-factory-service/projects.d.ts +2 -0
- package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.d.ts +1 -1
- package/lib/session/smart-session.module.d.ts +1 -1
- package/lib/smart-client/smart-component-api-client.d.ts +3 -4
- package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +3 -3
- package/lib/smart-component-layout/api/api/api.d.ts +3 -0
- package/lib/smart-component-layout/api/api/default.service.d.ts +33 -0
- package/lib/smart-component-layout/api/api.module.d.ts +11 -0
- package/lib/smart-component-layout/api/configuration.d.ts +104 -0
- package/lib/smart-component-layout/api/encoder.d.ts +11 -0
- package/lib/smart-component-layout/api/index.d.ts +6 -0
- package/lib/smart-component-layout/api/model/componentType.d.ts +17 -0
- package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +17 -0
- package/lib/smart-component-layout/api/model/layoutDirection.d.ts +16 -0
- package/lib/smart-component-layout/api/model/models.d.ts +5 -0
- package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +29 -0
- package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +21 -0
- package/lib/smart-component-layout/api/param.d.ts +37 -0
- package/lib/smart-component-layout/api/variables.d.ts +8 -0
- package/lib/smart-component-layout/projects.d.ts +4 -0
- package/lib/smart-component-layout/smart-component-layout-utility.d.ts +4 -0
- package/lib/smart-component-layout/smart-component-layout.component.d.ts +35 -0
- package/lib/smart-component-layout/smart-component-layout.module.d.ts +13 -0
- package/lib/smart-dialog/projects.d.ts +4 -0
- package/lib/smart-dialog/smartdialog.component.d.ts +19 -0
- package/lib/smart-dialog/smartdialog.model.d.ts +67 -0
- package/lib/smart-dialog/smartdialog.module.d.ts +14 -0
- package/lib/smart-dialog/smartdialog.service.d.ts +20 -0
- package/lib/smart-expandable-section/expandable-section.component.d.ts +25 -0
- package/lib/smart-expandable-section/expandable-section.model.d.ts +40 -0
- package/lib/smart-expandable-section/projects.d.ts +4 -0
- package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +15 -0
- package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +6 -0
- package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +16 -0
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +27 -0
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +39 -0
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +21 -0
- package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +27 -0
- package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +19 -0
- package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +37 -0
- package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +21 -0
- package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +25 -0
- package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +18 -0
- package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +24 -0
- package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +31 -0
- package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +28 -0
- package/lib/smart-filter/api/filter/model/model.d.ts +15 -0
- package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +19 -0
- package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +18 -0
- package/lib/smart-filter/api/value/model/value.d.ts +29 -0
- package/lib/smart-filter/projects.d.ts +5 -0
- package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +8 -0
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +31 -0
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +18 -0
- package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +15 -0
- package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +16 -0
- package/lib/smart-filter/smart-filter.model.d.ts +25 -0
- package/lib/smart-filter/smart-filter.module.d.ts +15 -0
- package/lib/smart-form/api/api/api.d.ts +3 -0
- package/lib/smart-form/api/api/default.service.d.ts +33 -0
- package/lib/smart-form/api/api.module.d.ts +11 -0
- package/lib/smart-form/api/configuration.d.ts +104 -0
- package/lib/smart-form/api/encoder.d.ts +11 -0
- package/lib/smart-form/api/index.d.ts +6 -0
- package/lib/smart-form/api/model/models.d.ts +7 -0
- package/lib/smart-form/api/model/propertyMapping.d.ts +24 -0
- package/lib/smart-form/api/model/selectionDefinition.d.ts +40 -0
- package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +16 -0
- package/lib/smart-form/api/model/smartFormWidgetType.d.ts +42 -0
- package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +15 -0
- package/lib/smart-form/api/model/smartMatrixModel.d.ts +28 -0
- package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +77 -0
- package/lib/smart-form/api/param.d.ts +37 -0
- package/lib/smart-form/api/variables.d.ts +8 -0
- package/lib/smart-form/projects.d.ts +9 -0
- package/lib/smart-form/services/smartform.layout-definition.service.d.ts +40 -0
- package/lib/smart-form/services/smartform.service.d.ts +29 -0
- package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +8 -0
- package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +22 -0
- package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +7 -0
- package/lib/smart-form/smartform.component.d.ts +33 -0
- package/lib/smart-form/smartform.form-model.d.ts +521 -0
- package/lib/smart-form/smartform.model.d.ts +120 -0
- package/lib/smart-form/smartform.module.d.ts +34 -0
- package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +29 -0
- package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +84 -0
- package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +20 -0
- package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +9 -0
- package/lib/smart-grid/api/grid-api/api/api.d.ts +3 -0
- package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +140 -0
- package/lib/smart-grid/api/grid-api/api.module.d.ts +11 -0
- package/lib/smart-grid/api/grid-api/configuration.d.ts +80 -0
- package/lib/smart-grid/api/grid-api/encoder.d.ts +11 -0
- package/lib/smart-grid/api/grid-api/index.d.ts +5 -0
- package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +18 -0
- package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +35 -0
- package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +30 -0
- package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +26 -0
- package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +22 -0
- package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +17 -0
- package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +16 -0
- package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +20 -0
- package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +19 -0
- package/lib/smart-grid/api/grid-api/model/gridView.d.ts +21 -0
- package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +33 -0
- package/lib/smart-grid/api/grid-api/model/models.d.ts +11 -0
- package/lib/smart-grid/api/grid-api/variables.d.ts +8 -0
- package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +10 -0
- package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +21 -0
- package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +40 -0
- package/lib/smart-grid/models/model.d.ts +70 -0
- package/lib/smart-grid/projects.d.ts +5 -0
- package/lib/smart-grid/smart-grid.component.d.ts +67 -0
- package/lib/smart-grid/smart-grid.module.d.ts +20 -0
- package/lib/smart-grid/smart-grid.service.d.ts +26 -0
- package/lib/smart-icon/projects.d.ts +3 -0
- package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +17 -0
- package/lib/smart-icon/smart-icon.module.d.ts +10 -0
- package/lib/smart-icon/smart-icon.service.d.ts +21 -0
- package/lib/smart-navbar/projects.d.ts +4 -0
- package/lib/smart-navbar/smart-navbar.component.d.ts +20 -0
- package/lib/smart-navbar/smart-navbar.model.d.ts +48 -0
- package/lib/smart-navbar/smart-navbar.module.d.ts +18 -0
- package/lib/smart-navbar/smart-navbar.service.d.ts +6 -0
- package/lib/smart-navigation/projects.d.ts +2 -0
- package/lib/smart-navigation/smart-navigation.interface.d.ts +11 -0
- package/lib/smart-navigation/smart-navigation.module.d.ts +6 -0
- package/lib/smart-navigation/smart-navigation.service.d.ts +18 -0
- package/lib/smart-ng-client.module.d.ts +9 -6
- package/lib/smart-subject/projects.d.ts +1 -0
- package/lib/smart-subject/smart-subject.d.ts +6 -0
- package/lib/smart-tab-group/projects.d.ts +4 -0
- package/lib/smart-tab-group/smart-tab-group.component.d.ts +21 -0
- package/lib/smart-tab-group/smart-tab-group.module.d.ts +13 -0
- package/lib/smart-tab-group/smart-tab-group.service.d.ts +6 -0
- package/lib/smart-tab-group/tab-content/tab-content.component.d.ts +14 -0
- package/lib/smart-tab-group/tab-group-simplified/tab-group.component.d.ts +29 -0
- package/lib/smart-tab-group/tabTile.model.d.ts +8 -0
- package/lib/smart-table/components/loading/loading.component.d.ts +8 -0
- package/lib/smart-table/projects.d.ts +5 -0
- package/lib/smart-table/smarttable.component.d.ts +34 -0
- package/lib/smart-table/smarttable.date-pipe.d.ts +18 -0
- package/lib/smart-table/smarttable.model.d.ts +183 -0
- package/lib/smart-table/smarttable.module.d.ts +23 -0
- package/lib/smart-table/smarttable.service.d.ts +6 -0
- package/lib/smart-table/tables/material-table/material-table.component.d.ts +8 -0
- package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +8 -0
- package/lib/smart-table/tables/table.d.ts +59 -0
- package/lib/smart-tree/smarttree.component.d.ts +1 -1
- package/lib/smart-tree/smarttree.model.d.ts +1 -1
- package/lib/smart-tree/smarttree.module.d.ts +1 -1
- package/lib/smart-tree/smarttree.service.d.ts +1 -1
- package/lib/smart-tree/smarttree.service.interface.d.ts +1 -1
- package/lib/view-context/api/model/componentModel.d.ts +3 -2
- package/lib/view-context/api/model/view.d.ts +1 -1
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +1 -1
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +1 -1
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +1 -1
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +1 -1
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +1 -1
- package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +1 -1
- package/lib/view-context/smart-ui-action/ui-action.model.d.ts +3 -1
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +1 -1
- package/lib/view-context/smart-view-context.module.d.ts +2 -2
- package/lib/view-context/smart-view-context.service.d.ts +3 -3
- package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +3 -3
- package/lib/view-context/value-api/model/valueSetData.d.ts +1 -1
- package/package.json +1 -4
- package/projects.d.ts +14 -2
- package/smartbit4all-ng-client-3.0.1.tgz +0 -0
- package/src/lib/component-factory-service/README.md +99 -0
- package/src/lib/smart-component-layout/README.md +31 -0
- package/src/lib/smart-component-layout/api/README.md +226 -0
- package/src/lib/smart-dialog/README.md +197 -0
- package/src/lib/smart-expandable-section/README.md +249 -0
- package/src/lib/smart-filter/README.md +101 -0
- package/src/lib/smart-form/README.md +1178 -0
- package/src/lib/smart-form/api/README.md +226 -0
- package/src/lib/smart-grid/README.md +24 -0
- package/src/lib/smart-grid/api/grid-api/README.md +203 -0
- package/src/lib/smart-icon/README.md +116 -0
- package/src/lib/smart-navbar/README.md +119 -0
- package/src/lib/smart-navigation/README.md +141 -0
- package/src/lib/smart-tab-group/README.md +155 -0
- package/src/lib/smart-table/README.md +667 -0
- package/src/lib/view-context/api/README.md +226 -226
- package/esm2020/lib/smart-client/projects.mjs +0 -5
- package/esm2020/lib/smart-client/smart.component.mjs +0 -30
- package/esm2020/lib/smart-client/smart.service.mjs +0 -30
- package/lib/smart-client/projects.d.ts +0 -4
- package/lib/smart-client/smart.component.d.ts +0 -11
- package/lib/smart-client/smart.service.d.ts +0 -11
- package/smartbit4all-ng-client-2.2.2.tgz +0 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
3
|
+
import { SelectionDefinition, SmartFormWidgetType } from '../api';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class SmartFormService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.group = {};
|
|
8
|
+
}
|
|
9
|
+
getSmartFormWidgetByKey(key) {
|
|
10
|
+
return this.findSmartFormWidgetByKey(this.smartForm?.widgets, key);
|
|
11
|
+
}
|
|
12
|
+
collectKeysFromSmartForm(widgets, keys) {
|
|
13
|
+
widgets.forEach((w) => {
|
|
14
|
+
if (w.type !== SmartFormWidgetType.CONTAINER &&
|
|
15
|
+
w.type !== SmartFormWidgetType.LABEL &&
|
|
16
|
+
w.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
17
|
+
w.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
18
|
+
keys.push(w.key);
|
|
19
|
+
}
|
|
20
|
+
if (w.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
|
|
21
|
+
w.type === SmartFormWidgetType.SELECT ||
|
|
22
|
+
w.type === SmartFormWidgetType.SELECT_MULTIPLE ||
|
|
23
|
+
w.type === SmartFormWidgetType.CHECK_BOX ||
|
|
24
|
+
w.type === SmartFormWidgetType.RADIO_BUTTON ||
|
|
25
|
+
w.type === SmartFormWidgetType.CONTAINER) {
|
|
26
|
+
if (w.valueList?.length) {
|
|
27
|
+
keys = this.collectKeysFromSmartForm(w.valueList, keys);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else if (w.type === SmartFormWidgetType.CHECK_BOX_2) {
|
|
31
|
+
if (w.valueList?.length) {
|
|
32
|
+
let childrenKeys = this.collectKeysFromSmartForm(w.valueList, []);
|
|
33
|
+
childrenKeys = childrenKeys
|
|
34
|
+
.filter((key) => key !== w.key)
|
|
35
|
+
.flatMap((key) => `${w.key}.${key}`);
|
|
36
|
+
keys.push(...childrenKeys);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
findSmartFormWidgetByKey(widgets, key) {
|
|
43
|
+
let widgetFoundByKey;
|
|
44
|
+
for (let w of widgets) {
|
|
45
|
+
if (w.key === key) {
|
|
46
|
+
return w;
|
|
47
|
+
}
|
|
48
|
+
else if (w.type === SmartFormWidgetType.CONTAINER && w.valueList?.length) {
|
|
49
|
+
widgetFoundByKey = this.findSmartFormWidgetByKey(w.valueList, key);
|
|
50
|
+
if (widgetFoundByKey) {
|
|
51
|
+
return widgetFoundByKey;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return widgetFoundByKey;
|
|
56
|
+
}
|
|
57
|
+
getValueDeeply(model, key) {
|
|
58
|
+
let splittedKey = key.split('.');
|
|
59
|
+
let value;
|
|
60
|
+
splittedKey.forEach((k) => {
|
|
61
|
+
if (!value) {
|
|
62
|
+
value = model[k];
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
if (value[k] === undefined ||
|
|
66
|
+
value[k] === null ||
|
|
67
|
+
(!value && typeof value[k] !== 'boolean')) {
|
|
68
|
+
value = '';
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
value = value[k];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
setValueDeeply(model, key, value) {
|
|
79
|
+
let splittedKeys = key.split('.');
|
|
80
|
+
let deepModel = [model];
|
|
81
|
+
let tempModel;
|
|
82
|
+
for (let index = 0; index < splittedKeys.length; index++) {
|
|
83
|
+
tempModel = deepModel[index];
|
|
84
|
+
if (typeof tempModel[splittedKeys[index]] !== 'string' &&
|
|
85
|
+
typeof tempModel[splittedKeys[index]] !== 'boolean' &&
|
|
86
|
+
typeof tempModel[splittedKeys[index]] !== 'number' &&
|
|
87
|
+
tempModel[splittedKeys[index]] !== undefined) {
|
|
88
|
+
deepModel.push(tempModel[splittedKeys[index]]);
|
|
89
|
+
}
|
|
90
|
+
if (index === splittedKeys.length - 1) {
|
|
91
|
+
tempModel[splittedKeys[index]] = value;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
getPropertyNamesDeeply(element) {
|
|
97
|
+
let properties = Object.keys(element);
|
|
98
|
+
properties.forEach((property) => {
|
|
99
|
+
if (typeof element[property] === 'string' ||
|
|
100
|
+
typeof element[property] === 'boolean' ||
|
|
101
|
+
typeof element[property] === 'number' ||
|
|
102
|
+
element[property] === undefined ||
|
|
103
|
+
element[property] === null ||
|
|
104
|
+
!element[property] ||
|
|
105
|
+
!element) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
let innerProperties = this.getPropertyNamesDeeply(element[property]);
|
|
109
|
+
innerProperties = innerProperties.map((innerProperty) => `${property}.${innerProperty}`);
|
|
110
|
+
properties.push(...innerProperties);
|
|
111
|
+
});
|
|
112
|
+
return properties;
|
|
113
|
+
}
|
|
114
|
+
setValuesFromModel() {
|
|
115
|
+
const smartForm = this.smartForm;
|
|
116
|
+
const data = this.smartForm?.componentModel?.data;
|
|
117
|
+
if (!data) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const keys = this.collectKeysFromSmartForm(smartForm.widgets, []);
|
|
121
|
+
let widget;
|
|
122
|
+
for (const key of this.getPropertyNamesDeeply(data)) {
|
|
123
|
+
if (keys.includes(key)) {
|
|
124
|
+
widget = this.findSmartFormWidgetByKey(smartForm.widgets, key);
|
|
125
|
+
if (widget) {
|
|
126
|
+
let value = this.getValueDeeply(data, key);
|
|
127
|
+
if (typeof value === 'boolean' && widget.type !== SmartFormWidgetType.TOGGLE) {
|
|
128
|
+
value = `${value}`;
|
|
129
|
+
}
|
|
130
|
+
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
131
|
+
widget.type !== SmartFormWidgetType.LABEL &&
|
|
132
|
+
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
133
|
+
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
134
|
+
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
135
|
+
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
136
|
+
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
137
|
+
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
138
|
+
widget.value = value;
|
|
139
|
+
if (widget.showLabel === undefined && smartForm.showLabel) {
|
|
140
|
+
widget.showLabel = true;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (widget.type === SmartFormWidgetType.SELECT ||
|
|
144
|
+
widget.type === SmartFormWidgetType.TEXT_FIELD) {
|
|
145
|
+
if (widget.selection && smartForm.componentModel.valueSets) {
|
|
146
|
+
if (widget.selection.type === SelectionDefinition.TypeEnum.Property &&
|
|
147
|
+
!widget.selection.mapping.length) {
|
|
148
|
+
let valueSetData = smartForm.componentModel.valueSets[widget.selection.valueSetName].valueSetData;
|
|
149
|
+
widget.valueList = valueSetData.values.map((value) => {
|
|
150
|
+
return {
|
|
151
|
+
key: value[valueSetData.keyProperty],
|
|
152
|
+
label: value[widget.selection?.displayProperty ?? 'displayValue'],
|
|
153
|
+
type: SmartFormWidgetType.ITEM,
|
|
154
|
+
value: value[valueSetData.keyProperty],
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else if (widget.selection.type === SelectionDefinition.TypeEnum.Object &&
|
|
159
|
+
!widget.selection.mapping.length) {
|
|
160
|
+
let valueSetData = smartForm.componentModel.valueSets[widget.selection.valueSetName].valueSetData;
|
|
161
|
+
widget.valueList = valueSetData.values.map((value, index) => {
|
|
162
|
+
return {
|
|
163
|
+
key: `${index}`,
|
|
164
|
+
label: value[widget.selection?.displayProperty ?? 'displayValue'],
|
|
165
|
+
type: SmartFormWidgetType.ITEM,
|
|
166
|
+
value: value,
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (widget &&
|
|
173
|
+
widget.type === SmartFormWidgetType.CHECK_BOX &&
|
|
174
|
+
widget.valueList.length === 1) {
|
|
175
|
+
widget.valueList = widget.valueList.map((item) => {
|
|
176
|
+
let value = this.getValueDeeply(data, key);
|
|
177
|
+
item.value = value;
|
|
178
|
+
return item;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// In case of CheckBox2
|
|
184
|
+
let splittedKeys = key.split('.');
|
|
185
|
+
splittedKeys.splice(splittedKeys.length - 1, 1);
|
|
186
|
+
widget = this.findSmartFormWidgetByKey(smartForm.widgets, splittedKeys.join('.'));
|
|
187
|
+
if (widget && widget.type === SmartFormWidgetType.CHECK_BOX_2 && widget.valueList) {
|
|
188
|
+
widget.valueList = widget.valueList.map((item) => {
|
|
189
|
+
let value = this.getValueDeeply(data, `${widget?.key}.${item.key}`);
|
|
190
|
+
item.value = value;
|
|
191
|
+
return item;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
toFormGroup() {
|
|
199
|
+
this.createFormControls(this.smartForm.widgets);
|
|
200
|
+
let formGroup = new FormGroup(this.group);
|
|
201
|
+
if (this.smartForm.validators && this.smartForm.validators.length) {
|
|
202
|
+
formGroup.setValidators(this.smartForm.validators.map((validator) => {
|
|
203
|
+
return validator.validator;
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
return formGroup;
|
|
207
|
+
}
|
|
208
|
+
createFormControls(widgets, parentKey) {
|
|
209
|
+
widgets.map((widget) => {
|
|
210
|
+
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
211
|
+
widget.type !== SmartFormWidgetType.LABEL &&
|
|
212
|
+
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
213
|
+
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
214
|
+
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
215
|
+
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
216
|
+
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
217
|
+
widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
218
|
+
widget.type !== SmartFormWidgetType.ITEM &&
|
|
219
|
+
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
220
|
+
widget.type !== SmartFormWidgetType.MATRIX &&
|
|
221
|
+
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
222
|
+
let formControl = new FormControl(widget.value || '', widget.validators?.map((validator) => {
|
|
223
|
+
return validator.validator;
|
|
224
|
+
}));
|
|
225
|
+
if (widget.isDisabled) {
|
|
226
|
+
formControl.disable();
|
|
227
|
+
}
|
|
228
|
+
this.group[`${widget.key}`] = formControl;
|
|
229
|
+
}
|
|
230
|
+
if (widget.type === SmartFormWidgetType.MATRIX) {
|
|
231
|
+
if (widget.isMultiple) {
|
|
232
|
+
let dataKeys = Object.keys(widget.value.data);
|
|
233
|
+
let itemKeys = widget.value.columns.map((value) => value.code);
|
|
234
|
+
dataKeys.forEach((key) => {
|
|
235
|
+
itemKeys.forEach((item) => {
|
|
236
|
+
let formControl = new FormControl(widget.value.data[key][item], widget.validators?.map((validator) => {
|
|
237
|
+
return validator.validator;
|
|
238
|
+
}));
|
|
239
|
+
this.group[`${widget.key}.data.${key}.${item}`] = formControl;
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
Object.keys(widget.value.data).map((key) => {
|
|
245
|
+
let formControl = new FormControl(widget.isMultiple ? widget.value.data[key] : widget.value.data[key][0] || '', widget.validators?.map((validator) => {
|
|
246
|
+
return validator.validator;
|
|
247
|
+
}));
|
|
248
|
+
if (widget.isDisabled) {
|
|
249
|
+
formControl.disable();
|
|
250
|
+
}
|
|
251
|
+
this.group[`${widget.key}.${key}`] = formControl;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (widget.type === SmartFormWidgetType.ITEM && parentKey) {
|
|
256
|
+
let formControl = new FormControl(widget.value);
|
|
257
|
+
if (widget.isDisabled) {
|
|
258
|
+
formControl.disable();
|
|
259
|
+
}
|
|
260
|
+
this.group[`${parentKey}.${widget.key}`] = formControl;
|
|
261
|
+
}
|
|
262
|
+
if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
|
|
263
|
+
this.createFormControls(widget.valueList);
|
|
264
|
+
}
|
|
265
|
+
if (widget.type === SmartFormWidgetType.CHECK_BOX_2 && widget.valueList?.length) {
|
|
266
|
+
this.createFormControls(widget.valueList, widget.key);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
isValidatorInList(validator, list) {
|
|
271
|
+
return list !== undefined && list.length > 0 && list.some((v) => v === validator);
|
|
272
|
+
}
|
|
273
|
+
copyValueFromFormToWidgetBeans(widgets, group) {
|
|
274
|
+
widgets.forEach((widget) => {
|
|
275
|
+
if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
|
|
276
|
+
this.copyValueFromFormToWidgetBeans(widget.valueList, group);
|
|
277
|
+
}
|
|
278
|
+
else if (widget.type === SmartFormWidgetType.MATRIX) {
|
|
279
|
+
if (widget.isMultiple) {
|
|
280
|
+
let dataKeys = Object.keys(widget.value.data);
|
|
281
|
+
let itemKeys = widget.value.columns.map((value) => value.code);
|
|
282
|
+
dataKeys.forEach((key) => {
|
|
283
|
+
itemKeys.forEach((item) => {
|
|
284
|
+
widget.value.data[key][item] = [
|
|
285
|
+
group.controls[`${widget.key}.data.${key}.${item}`].value,
|
|
286
|
+
];
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
let datakeys = Object.keys(widget.value.data);
|
|
290
|
+
//Map checkbox key - boolean value to string key array
|
|
291
|
+
let valueKeys = widget.value.columns.map((value) => value.code);
|
|
292
|
+
datakeys.forEach((key) => {
|
|
293
|
+
let newData = [];
|
|
294
|
+
valueKeys.forEach((valueKey) => {
|
|
295
|
+
let value = widget.value.data[key][valueKey];
|
|
296
|
+
if (value[0]) {
|
|
297
|
+
newData.push(valueKey);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
widget.value.data[key] = newData;
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
Object.keys(widget.value.data).map((key) => {
|
|
305
|
+
widget.value.data[key] = [group.controls[`${widget.key}.${key}`].value];
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
310
|
+
widget.type !== SmartFormWidgetType.LABEL &&
|
|
311
|
+
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
312
|
+
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
313
|
+
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
314
|
+
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
315
|
+
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
316
|
+
widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
317
|
+
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
318
|
+
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
319
|
+
widget.value = group.controls[widget.key].value;
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
toSmartForm(group) {
|
|
324
|
+
this.copyValueFromFormToWidgetBeans(this.smartForm.widgets, group);
|
|
325
|
+
const data = this.smartForm?.componentModel?.data;
|
|
326
|
+
if (data) {
|
|
327
|
+
for (const key of this.getPropertyNamesDeeply(data)) {
|
|
328
|
+
if (group.controls[key]) {
|
|
329
|
+
this.setValueDeeply(data, key, group.controls[key].value);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return this.smartForm;
|
|
334
|
+
}
|
|
335
|
+
getModel(group) {
|
|
336
|
+
if (!this.smartForm?.componentModel) {
|
|
337
|
+
return {};
|
|
338
|
+
}
|
|
339
|
+
let originalModel = this.smartForm.componentModel.data;
|
|
340
|
+
let copyOfModel = { ...originalModel };
|
|
341
|
+
// copyOfModel should be the current model
|
|
342
|
+
this.smartForm.componentModel.data = copyOfModel;
|
|
343
|
+
// copy value from FormGroup into model
|
|
344
|
+
this.toSmartForm(group);
|
|
345
|
+
let newModel = this.smartForm.componentModel.data;
|
|
346
|
+
this.smartForm.componentModel.data = originalModel;
|
|
347
|
+
return newModel;
|
|
348
|
+
}
|
|
349
|
+
applyComponentConstraints(widgets, constraints) {
|
|
350
|
+
widgets.forEach((widget) => {
|
|
351
|
+
let constraint = constraints?.filter((constraint) => constraint.dataName === widget.key);
|
|
352
|
+
if (constraint && constraint.length) {
|
|
353
|
+
widget.isVisible = constraint[0].visible === undefined ? true : constraint[0].visible;
|
|
354
|
+
if (constraint[0].mandatory !== undefined && constraint[0].mandatory) {
|
|
355
|
+
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
356
|
+
widget.type !== SmartFormWidgetType.LABEL &&
|
|
357
|
+
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
358
|
+
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
359
|
+
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
360
|
+
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
361
|
+
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
362
|
+
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
363
|
+
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
364
|
+
widget.validators = [
|
|
365
|
+
...(widget.validators ?? []),
|
|
366
|
+
{
|
|
367
|
+
validator: Validators.required,
|
|
368
|
+
isCustom: false,
|
|
369
|
+
errorMessage: '',
|
|
370
|
+
name: 'required',
|
|
371
|
+
},
|
|
372
|
+
];
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
376
|
+
widget.type !== SmartFormWidgetType.LABEL &&
|
|
377
|
+
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
378
|
+
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
379
|
+
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
380
|
+
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
381
|
+
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
382
|
+
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
383
|
+
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
384
|
+
widget.isDisabled = constraint[0].enabled === undefined ? false : !constraint[0].enabled;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (widget.type === SmartFormWidgetType.CONTAINER &&
|
|
388
|
+
widget.valueList &&
|
|
389
|
+
widget.valueList.length) {
|
|
390
|
+
this.applyComponentConstraints(widget.valueList, constraints);
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
applyConstraints() {
|
|
395
|
+
if (this.smartForm.componentModel?.constraints &&
|
|
396
|
+
this.smartForm.componentModel?.constraints.length) {
|
|
397
|
+
this.applyComponentConstraints(this.smartForm.widgets, this.smartForm.componentModel?.constraints);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
filterWidgetsByVisibility(widgets) {
|
|
401
|
+
return widgets.filter((widget) => widget.isVisible === undefined ? true : widget.isVisible);
|
|
402
|
+
}
|
|
403
|
+
async getTranslationOfKey(key) {
|
|
404
|
+
return await this.smartForm.translateService.get(key).toPromise();
|
|
405
|
+
}
|
|
406
|
+
async translateWidgets(widgets) {
|
|
407
|
+
Promise.all(widgets.map(async (widget) => {
|
|
408
|
+
if (widget.type === SmartFormWidgetType.YOUTUBE_PLAYER)
|
|
409
|
+
return;
|
|
410
|
+
if (widget.type !== SmartFormWidgetType.CONTAINER) {
|
|
411
|
+
if (!widget.originalLabel) {
|
|
412
|
+
widget.originalLabel = `${widget.label}`;
|
|
413
|
+
}
|
|
414
|
+
// Label
|
|
415
|
+
widget.label = await this.getTranslationOfKey(widget.originalLabel);
|
|
416
|
+
// Placeholder
|
|
417
|
+
if ((widget.type === SmartFormWidgetType.TEXT_FIELD ||
|
|
418
|
+
widget.type === SmartFormWidgetType.TEXT_FIELD_NUMBER ||
|
|
419
|
+
widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
|
|
420
|
+
widget.type === SmartFormWidgetType.RICH_TEXT ||
|
|
421
|
+
widget.type === SmartFormWidgetType.TEXT_BOX) &&
|
|
422
|
+
widget.placeholder) {
|
|
423
|
+
if (!widget.originalPlaceholder) {
|
|
424
|
+
widget.originalPlaceholder = `${widget.placeholder}`;
|
|
425
|
+
}
|
|
426
|
+
widget.placeholder = await this.getTranslationOfKey(widget.originalPlaceholder);
|
|
427
|
+
}
|
|
428
|
+
// Validators
|
|
429
|
+
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
430
|
+
widget.type !== SmartFormWidgetType.LABEL &&
|
|
431
|
+
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
432
|
+
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
433
|
+
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
434
|
+
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
435
|
+
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
436
|
+
widget.validators) {
|
|
437
|
+
widget.validators = await Promise.all(widget.validators.map(async (validator) => {
|
|
438
|
+
if (!validator.originalErrorMessage) {
|
|
439
|
+
validator.originalErrorMessage = `${validator.errorMessage}`;
|
|
440
|
+
}
|
|
441
|
+
validator.errorMessage = await this.getTranslationOfKey(validator.originalErrorMessage);
|
|
442
|
+
return validator;
|
|
443
|
+
}));
|
|
444
|
+
}
|
|
445
|
+
// Indicator
|
|
446
|
+
if (widget.type === SmartFormWidgetType.INDICATOR && widget.indicator) {
|
|
447
|
+
if (!widget.indicator.originalIndicatorStatusLabels) {
|
|
448
|
+
widget.indicator.originalIndicatorStatusLabels =
|
|
449
|
+
widget.indicator.indicatorStatusLabels.map((label) => label);
|
|
450
|
+
}
|
|
451
|
+
widget.indicator.indicatorStatusLabels = await Promise.all(widget.indicator.indicatorStatusLabels.map(async (label, index) => await this.getTranslationOfKey(widget.indicator.originalIndicatorStatusLabels[index])));
|
|
452
|
+
}
|
|
453
|
+
if ((widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
|
|
454
|
+
widget.type === SmartFormWidgetType.SELECT ||
|
|
455
|
+
widget.type === SmartFormWidgetType.SELECT_MULTIPLE ||
|
|
456
|
+
widget.type === SmartFormWidgetType.CHECK_BOX ||
|
|
457
|
+
widget.type === SmartFormWidgetType.CHECK_BOX_2 ||
|
|
458
|
+
widget.type === SmartFormWidgetType.RADIO_BUTTON) &&
|
|
459
|
+
widget.valueList) {
|
|
460
|
+
this.translateWidgetItems(widget.valueList);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
this.translateWidgets(widget.valueList);
|
|
465
|
+
}
|
|
466
|
+
}));
|
|
467
|
+
}
|
|
468
|
+
async translateWidgetItems(widgets) {
|
|
469
|
+
Promise.all(widgets.map(async (widget) => {
|
|
470
|
+
if (!widget.originalLabel) {
|
|
471
|
+
widget.originalLabel = `${widget.label}`;
|
|
472
|
+
}
|
|
473
|
+
// Label
|
|
474
|
+
widget.label = await this.getTranslationOfKey(widget.originalLabel);
|
|
475
|
+
}));
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
SmartFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
479
|
+
SmartFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFormService });
|
|
480
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFormService, decorators: [{
|
|
481
|
+
type: Injectable
|
|
482
|
+
}] });
|
|
483
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUtsRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRUUsVUFBSyxHQUFRLEVBQUUsQ0FBQztLQXVsQmpCO0lBbmxCQyx1QkFBdUIsQ0FBQyxHQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyx3QkFBd0IsQ0FDOUIsT0FBbUQsRUFDbkQsSUFBYztRQUVkLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixJQUNFLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztnQkFDeEMsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUNwQyxDQUFDLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFdBQVc7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsY0FBYyxFQUM3QztnQkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUNELElBQ0UsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0I7Z0JBQy9D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LENBQUMsQ0FBQzthQUMxQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQTBCO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO2dCQUN6QixNQUFNLENBQUMsYUFBYSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO1lBQ0QsU0FBUztZQUNULE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs2R0F2bEJVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkRlZmluaXRpb24sIFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXQsIFNtYXJ0SXRlbSwgU21hcnRJdGVtcywgU21hcnRTZWxlY3QgfSBmcm9tICcuLi9zbWFydGZvcm0uZm9ybS1tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybSwgU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCwgU21hcnRWYWxpZGF0b3IsIFZhbHVlIH0gZnJvbSAnLi4vc21hcnRmb3JtLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Rm9ybVNlcnZpY2Uge1xyXG4gIGdyb3VwOiBhbnkgPSB7fTtcclxuXHJcbiAgc21hcnRGb3JtPzogU21hcnRGb3JtO1xyXG5cclxuICBnZXRTbWFydEZvcm1XaWRnZXRCeUtleShrZXk6IHN0cmluZyk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh0aGlzLnNtYXJ0Rm9ybT8ud2lkZ2V0cyEsIGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybShcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW1zPGFueT5bXSxcclxuICAgIGtleXM6IHN0cmluZ1tdXHJcbiAgKTogc3RyaW5nW10ge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGtleXMucHVzaCh3LmtleSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGtleXMgPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3LnZhbHVlTGlzdCwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5LZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIFtdKTtcclxuICAgICAgICAgIGNoaWxkcmVuS2V5cyA9IGNoaWxkcmVuS2V5c1xyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSB3LmtleSlcclxuICAgICAgICAgICAgLmZsYXRNYXAoKGtleTogc3RyaW5nKSA9PiBgJHt3LmtleX0uJHtrZXl9YCk7XHJcblxyXG4gICAgICAgICAga2V5cy5wdXNoKC4uLmNoaWxkcmVuS2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHdpZGdldEZvdW5kQnlLZXk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGZvciAobGV0IHcgb2Ygd2lkZ2V0cykge1xyXG4gICAgICBpZiAody5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiB3O1xyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgdy52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldEZvdW5kQnlLZXkgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3LnZhbHVlTGlzdCwga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0Rm91bmRCeUtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Rm91bmRCeUtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBzcGxpdHRlZEtleS5mb3JFYWNoKChrOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gbW9kZWxba107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IG51bGwgfHxcclxuICAgICAgICAgICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2tdICE9PSAnYm9vbGVhbicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSA9IHZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XHJcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgdHlwZW9mIGVsZW1lbnRbcHJvcGVydHldID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID09PSBudWxsIHx8XHJcbiAgICAgICAgIWVsZW1lbnRbcHJvcGVydHldIHx8XHJcbiAgICAgICAgIWVsZW1lbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbm5lclByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudFtwcm9wZXJ0eV0pO1xyXG4gICAgICBpbm5lclByb3BlcnRpZXMgPSBpbm5lclByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgIChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGAke3Byb3BlcnR5fS4ke2lubmVyUHJvcGVydHl9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvcGVydGllcy5wdXNoKC4uLmlubmVyUHJvcGVydGllcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVzRnJvbU1vZGVsKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc21hcnRGb3JtID0gdGhpcy5zbWFydEZvcm0hO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc21hcnRGb3JtPy5jb21wb25lbnRNb2RlbD8uZGF0YTtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybShzbWFydEZvcm0ud2lkZ2V0cywgW10pO1xyXG5cclxuICAgIGxldCB3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleShzbWFydEZvcm0ud2lkZ2V0cywga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0KSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFZhbHVlRGVlcGx5KGRhdGEsIGtleSk7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVE9HR0xFKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWV9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNob3dMYWJlbCA9PT0gdW5kZWZpbmVkICYmIHNtYXJ0Rm9ybS5zaG93TGFiZWwpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuc2hvd0xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNlbGVjdGlvbiAmJiBzbWFydEZvcm0uY29tcG9uZW50TW9kZWwudmFsdWVTZXRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnNlbGVjdGlvbi50eXBlID09PSBTZWxlY3Rpb25EZWZpbml0aW9uLlR5cGVFbnVtLlByb3BlcnR5ICYmXHJcbiAgICAgICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlU2V0RGF0YSA9XHJcbiAgICAgICAgICAgICAgICAgIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHNbd2lkZ2V0LnNlbGVjdGlvbi52YWx1ZVNldE5hbWVdLnZhbHVlU2V0RGF0YTtcclxuICAgICAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB2YWx1ZVNldERhdGEudmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogdmFsdWVbdmFsdWVTZXREYXRhLmtleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0IGFzIFNtYXJ0U2VsZWN0PGFueT4pLnNlbGVjdGlvbj8uZGlzcGxheVByb3BlcnR5ID8/ICdkaXNwbGF5VmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbdmFsdWVTZXREYXRhLmtleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb24uVHlwZUVudW0uT2JqZWN0ICYmXHJcbiAgICAgICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlU2V0RGF0YSA9XHJcbiAgICAgICAgICAgICAgICAgIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHNbd2lkZ2V0LnNlbGVjdGlvbi52YWx1ZVNldE5hbWVdLnZhbHVlU2V0RGF0YTtcclxuICAgICAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB2YWx1ZVNldERhdGEudmFsdWVzLm1hcCgodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0IGFzIFNtYXJ0U2VsZWN0PGFueT4pLnNlbGVjdGlvbj8uZGlzcGxheVByb3BlcnR5ID8/ICdkaXNwbGF5VmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgQ2hlY2tCb3gyXHJcbiAgICAgICAgICBsZXQgc3BsaXR0ZWRLZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICBzcGxpdHRlZEtleXMuc3BsaWNlKHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHNtYXJ0Rm9ybS53aWRnZXRzLCBzcGxpdHRlZEtleXMuam9pbignLicpKTtcclxuICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiYgd2lkZ2V0LnZhbHVlTGlzdCkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBgJHt3aWRnZXQ/LmtleX0uJHtpdGVtLmtleX1gKTtcclxuICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9Gb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuc21hcnRGb3JtIS53aWRnZXRzKTtcclxuXHJcbiAgICBsZXQgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh0aGlzLmdyb3VwKTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMgJiYgdGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMubGVuZ3RoKSB7XHJcbiAgICAgIGZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW08YW55PltdLCBwYXJlbnRLZXk/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHdpZGdldHMubWFwKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgIHdpZGdldC52YWx1ZSB8fCAnJyxcclxuICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgZm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ncm91cFtgJHt3aWRnZXQua2V5fWBdID0gZm9ybUNvbnRyb2w7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWCkge1xyXG4gICAgICAgIGlmICh3aWRnZXQuaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgbGV0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgbGV0IGl0ZW1LZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YUtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaXRlbUtleXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVtpdGVtXSxcclxuICAgICAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cFtgJHt3aWRnZXQua2V5fS5kYXRhLiR7a2V5fS4ke2l0ZW19YF0gPSBmb3JtQ29udHJvbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpLm1hcCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIHdpZGdldC5pc011bHRpcGxlID8gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XSA6IHdpZGdldC52YWx1ZS5kYXRhW2tleV1bMF0gfHwgJycsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnM/Lm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ncm91cFtgJHt3aWRnZXQua2V5fS4ke2tleX1gXSA9IGZvcm1Db250cm9sO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh3aWRnZXQudmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAod2lkZ2V0LmlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgIGZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ3JvdXBbYCR7cGFyZW50S2V5fS4ke3dpZGdldC5rZXl9YF0gPSBmb3JtQ29udHJvbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiYgd2lkZ2V0LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHMod2lkZ2V0LnZhbHVlTGlzdCwgd2lkZ2V0LmtleSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZGF0b3JJbkxpc3QodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvciwgbGlzdD86IFNtYXJ0VmFsaWRhdG9yW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsaXN0ICE9PSB1bmRlZmluZWQgJiYgbGlzdC5sZW5ndGggPiAwICYmIGxpc3Quc29tZSgodikgPT4gdiA9PT0gdmFsaWRhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29weVZhbHVlRnJvbUZvcm1Ub1dpZGdldEJlYW5zKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sIGdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0KSA9PiB7XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgd2lkZ2V0LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnMod2lkZ2V0LnZhbHVlTGlzdCwgZ3JvdXApO1xyXG4gICAgICB9IGVsc2UgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWCkge1xyXG4gICAgICAgIGlmICh3aWRnZXQuaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgbGV0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgbGV0IGl0ZW1LZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YUtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaXRlbUtleXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVtpdGVtXSA9IFtcclxuICAgICAgICAgICAgICAgIGdyb3VwLmNvbnRyb2xzW2Ake3dpZGdldC5rZXl9LmRhdGEuJHtrZXl9LiR7aXRlbX1gXS52YWx1ZSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCBkYXRha2V5cyA9IE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKTtcclxuICAgICAgICAgIC8vTWFwIGNoZWNrYm94IGtleSAtIGJvb2xlYW4gdmFsdWUgdG8gc3RyaW5nIGtleSBhcnJheVxyXG4gICAgICAgICAgbGV0IHZhbHVlS2V5cyA9IHdpZGdldC52YWx1ZS5jb2x1bW5zLm1hcCgodmFsdWU6IFZhbHVlKSA9PiB2YWx1ZS5jb2RlKTtcclxuICAgICAgICAgIGRhdGFrZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBuZXdEYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICB2YWx1ZUtleXMuZm9yRWFjaCgodmFsdWVLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHdpZGdldC52YWx1ZS5kYXRhW2tleV1bdmFsdWVLZXldO1xyXG4gICAgICAgICAgICAgIGlmICh2YWx1ZVswXSkge1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0YS5wdXNoKHZhbHVlS2V5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldID0gbmV3RGF0YTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldID0gW2dyb3VwLmNvbnRyb2xzW2Ake3dpZGdldC5rZXl9LiR7a2V5fWBdLnZhbHVlXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIHdpZGdldC52YWx1ZSA9IGdyb3VwLmNvbnRyb2xzW3dpZGdldC5rZXldLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvU21hcnRGb3JtKGdyb3VwOiBGb3JtR3JvdXApOiBTbWFydEZvcm0ge1xyXG4gICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnModGhpcy5zbWFydEZvcm0hLndpZGdldHMsIGdyb3VwKTtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNtYXJ0Rm9ybT8uY29tcG9uZW50TW9kZWw/LmRhdGE7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZGF0YSkpIHtcclxuICAgICAgICBpZiAoZ3JvdXAuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZURlZXBseShkYXRhLCBrZXksIGdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNtYXJ0Rm9ybSE7XHJcbiAgfVxyXG5cclxuICBnZXRNb2RlbChncm91cDogRm9ybUdyb3VwKTogYW55IHtcclxuICAgIGlmICghdGhpcy5zbWFydEZvcm0/LmNvbXBvbmVudE1vZGVsKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBvcmlnaW5hbE1vZGVsID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCBjb3B5T2ZNb2RlbCA9IHsgLi4ub3JpZ2luYWxNb2RlbCB9O1xyXG5cclxuICAgIC8vIGNvcHlPZk1vZGVsIHNob3VsZCBiZSB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IGNvcHlPZk1vZGVsO1xyXG4gICAgLy8gY29weSB2YWx1ZSBmcm9tIEZvcm1Hcm91cCBpbnRvIG1vZGVsXHJcbiAgICB0aGlzLnRvU21hcnRGb3JtKGdyb3VwKTtcclxuXHJcbiAgICBsZXQgbmV3TW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IG9yaWdpbmFsTW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIG5ld01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGNvbnN0cmFpbnRzOiBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50W11cclxuICApIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICBsZXQgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzPy5maWx0ZXIoXHJcbiAgICAgICAgKGNvbnN0cmFpbnQ6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQuZGF0YU5hbWUgPT09IHdpZGdldC5rZXlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChjb25zdHJhaW50ICYmIGNvbnN0cmFpbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IGNvbnN0cmFpbnRbMF0udmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNvbnN0cmFpbnRbMF0udmlzaWJsZTtcclxuICAgICAgICBpZiAoY29uc3RyYWludFswXS5tYW5kYXRvcnkgIT09IHVuZGVmaW5lZCAmJiBjb25zdHJhaW50WzBdLm1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBbXHJcbiAgICAgICAgICAgICAgLi4uKHdpZGdldC52YWxpZGF0b3JzID8/IFtdKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVpcmVkJyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHdpZGdldC5pc0Rpc2FibGVkID0gY29uc3RyYWludFswXS5lbmFibGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICFjb25zdHJhaW50WzBdLmVuYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0ICYmXHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKHdpZGdldC52YWx1ZUxpc3QsIGNvbnN0cmFpbnRzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhcHBseUNvbnN0cmFpbnRzKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzICYmXHJcbiAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS53aWRnZXRzLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHNcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlcldpZGdldHNCeVZpc2liaWxpdHkod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10ge1xyXG4gICAgcmV0dXJuIHdpZGdldHMuZmlsdGVyKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PlxyXG4gICAgICB3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogd2lkZ2V0LmlzVmlzaWJsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0VHJhbnNsYXRpb25PZktleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zbWFydEZvcm0hLnRyYW5zbGF0ZVNlcnZpY2UhLmdldChrZXkpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0cyh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBQcm9taXNlLmFsbChcclxuICAgICAgd2lkZ2V0cy5tYXAoYXN5bmMgKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pID0+IHtcclxuICAgICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVIpIHJldHVybjtcclxuICAgICAgICBpZiAod2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSKSB7XHJcbiAgICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC5vcmlnaW5hbExhYmVsID0gYCR7d2lkZ2V0LmxhYmVsfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICAgIHdpZGdldC5sYWJlbCA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxMYWJlbCk7XHJcblxyXG4gICAgICAgICAgLy8gUGxhY2Vob2xkZXJcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTEQgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX05VTUJFUiB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SSUNIX1RFWFQgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0JPWCkgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnBsYWNlaG9sZGVyXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKCF3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyID0gYCR7d2lkZ2V0LnBsYWNlaG9sZGVyfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0LnBsYWNlaG9sZGVyID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KHdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBWYWxpZGF0b3JzXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMubWFwKGFzeW5jICh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPSBgJHt2YWxpZGF0b3IuZXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJbmRpY2F0b3JcclxuICAgICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiYgd2lkZ2V0LmluZGljYXRvcikge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzID1cclxuICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzLm1hcCgobGFiZWw6IHN0cmluZykgPT4gbGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleShcclxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yIS5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscyFbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRzKHdpZGdldC52YWx1ZUxpc3QhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0SXRlbXMod2lkZ2V0czogU21hcnRJdGVtczxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEl0ZW1zPGFueT4pID0+IHtcclxuICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class LargeFileSnackBarComponent {
|
|
4
|
+
constructor() { }
|
|
5
|
+
ngOnInit() {
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
LargeFileSnackBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: LargeFileSnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
LargeFileSnackBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: LargeFileSnackBarComponent, selector: "lib-large-file-snack-bar", ngImport: i0, template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"] });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: LargeFileSnackBarComponent, decorators: [{
|
|
11
|
+
type: Component,
|
|
12
|
+
args: [{ selector: 'lib-large-file-snack-bar', template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"] }]
|
|
13
|
+
}], ctorParameters: function () { return []; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFyZ2UtZmlsZS1zbmFjay1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9sYXJnZS1maWxlLXNuYWNrLWJhci9sYXJnZS1maWxlLXNuYWNrLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL2xhcmdlLWZpbGUtc25hY2stYmFyL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT2xELE1BQU0sT0FBTywwQkFBMEI7SUFFckMsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7O3VIQUxVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLGdFQ1B2QyxnSkFHQTsyRkRJYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxhcmdlLWZpbGUtc25hY2stYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGFyZ2UtZmlsZS1zbmFjay1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGFyZ2VGaWxlU25hY2tCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzcGFuIGNsYXNzPVwibGFyZ2VGaWxlU25ha0JhckNvbnRhaW5lclwiIG1hdFNuYWNrQmFyTGFiZWxcclxuICAgID5BIGtpdsOhbGFzenRvdHQgZsOhamwob2spIG3DqXJldGUgdMO6bCBuYWd5Ljwvc3BhblxyXG4+XHJcbiJdfQ==
|