@webiny/app-admin 6.4.5 → 6.6.0-alpha.0
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/base/Admin.d.ts +2 -4
- package/base/Admin.js +9 -12
- package/base/Admin.js.map +1 -1
- package/base/Base/DefaultFieldRenderers.js +24 -0
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/ApiKeyTokenRenderer.d.ts +4 -0
- package/base/Base/FieldRenderers/ApiKeyTokenRenderer.js +26 -0
- package/base/Base/FieldRenderers/ApiKeyTokenRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js +1 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +5 -1
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/FilePickerRenderer.js +2 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +1 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +2 -1
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/InputRenderer.js +2 -0
- package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/LexicalEditorsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/LexicalEditorsRenderer.js +78 -0
- package/base/Base/FieldRenderers/LexicalEditorsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/MultiAutoCompleteRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/MultiAutoCompleteRenderer.js +29 -0
- package/base/Base/FieldRenderers/MultiAutoCompleteRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js +1 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/NumberInputsRenderer.js +19 -9
- package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +2 -1
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +46 -5
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +6 -4
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +2 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +8 -6
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +4 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +31 -4
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +45 -6
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +3 -2
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +10 -1
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -1
- package/base/Base/FieldRenderers/PasswordInputRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/PasswordInputRenderer.js +22 -0
- package/base/Base/FieldRenderers/PasswordInputRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/PermissionsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/PermissionsRenderer.js +18 -0
- package/base/Base/FieldRenderers/PermissionsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js +1 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/RolesMultiSelectRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/RolesMultiSelectRenderer.js +21 -0
- package/base/Base/FieldRenderers/RolesMultiSelectRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/SelectRenderer.js +1 -0
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TagsRenderer.js +1 -0
- package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextInputsRenderer.js +19 -9
- package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextareaRenderer.js +1 -0
- package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextareasRenderer.js +5 -1
- package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -1
- package/base/Base.d.ts +3 -1
- package/base/Base.js +2 -1
- package/base/Base.js.map +1 -1
- package/base/createRootContainer.js +10 -3
- package/base/createRootContainer.js.map +1 -1
- package/base/resolveApiUrl.d.ts +3 -0
- package/base/resolveApiUrl.js +18 -0
- package/base/resolveApiUrl.js.map +1 -0
- package/base/ui/FileManager.d.ts +2 -1
- package/components/BulkActions/BulkActionButton.d.ts +6 -0
- package/components/BulkActions/BulkActionButton.js +17 -0
- package/components/BulkActions/BulkActionButton.js.map +1 -0
- package/components/BulkActions/BulkActionRunner.d.ts +41 -0
- package/components/BulkActions/BulkActionRunner.js +32 -0
- package/components/BulkActions/BulkActionRunner.js.map +1 -0
- package/components/BulkActions/Worker.d.ts +9 -57
- package/components/BulkActions/Worker.js +5 -9
- package/components/BulkActions/Worker.js.map +1 -1
- package/components/BulkActions/index.d.ts +3 -0
- package/components/BulkActions/index.js +3 -0
- package/components/ConfirmationDialog/ConfirmationDialog.d.ts +11 -0
- package/components/ConfirmationDialog/ConfirmationDialog.js +41 -0
- package/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -0
- package/components/ConfirmationDialog/index.d.ts +1 -0
- package/components/ConfirmationDialog/index.js +1 -0
- package/components/Dialogs/DialogsContext.js +2 -1
- package/components/Dialogs/DialogsContext.js.map +1 -1
- package/components/IconPicker/IconPicker.d.ts +7 -5
- package/components/IconPicker/components/IconPickerTrigger.d.ts +1 -1
- package/components/IconPicker/config/index.d.ts +2 -1
- package/components/IconPicker/plugins/customPlugin.js +4 -19
- package/components/IconPicker/plugins/customPlugin.js.map +1 -1
- package/components/ListView/ListView.d.ts +17 -0
- package/components/ListView/ListView.js +36 -0
- package/components/ListView/ListView.js.map +1 -0
- package/components/ListView/ListViewBottomBar.d.ts +14 -0
- package/components/ListView/ListViewBottomBar.js +45 -0
- package/components/ListView/ListViewBottomBar.js.map +1 -0
- package/components/ListView/ListViewBulkActions.d.ts +11 -0
- package/components/ListView/ListViewBulkActions.js +41 -0
- package/components/ListView/ListViewBulkActions.js.map +1 -0
- package/components/ListView/ListViewContent.d.ts +12 -0
- package/components/ListView/ListViewContent.js +25 -0
- package/components/ListView/ListViewContent.js.map +1 -0
- package/components/ListView/ListViewFilters.d.ts +15 -0
- package/components/ListView/ListViewFilters.js +21 -0
- package/components/ListView/ListViewFilters.js.map +1 -0
- package/components/ListView/ListViewHeader.d.ts +17 -0
- package/components/ListView/ListViewHeader.js +72 -0
- package/components/ListView/ListViewHeader.js.map +1 -0
- package/components/ListView/ListViewSidebar.d.ts +17 -0
- package/components/ListView/ListViewSidebar.js +25 -0
- package/components/ListView/ListViewSidebar.js.map +1 -0
- package/components/ListView/ListViewTable.d.ts +18 -0
- package/components/ListView/ListViewTable.js +33 -0
- package/components/ListView/ListViewTable.js.map +1 -0
- package/components/ListView/context.d.ts +3 -0
- package/components/ListView/context.js +11 -0
- package/components/ListView/context.js.map +1 -0
- package/components/ListView/index.d.ts +24 -0
- package/components/ListView/index.js +22 -0
- package/components/ListView/index.js.map +1 -0
- package/components/ListView/types.d.ts +7 -0
- package/components/ListView/types.js +0 -0
- package/components/OptionsMenu/OptionsMenuItem.d.ts +1 -0
- package/components/OptionsMenu/OptionsMenuItem.js +1 -0
- package/components/OptionsMenu/OptionsMenuItem.js.map +1 -1
- package/components/OverlayLayout/OverlayLayout.js +2 -4
- package/components/OverlayLayout/OverlayLayout.js.map +1 -1
- package/components/OverlayLayout/components/OverlayContent.js +0 -1
- package/components/OverlayLayout/components/OverlayContent.js.map +1 -1
- package/components/OverlayLayout/components/OverlayHeader.d.ts +1 -1
- package/components/Permissions/Permissions.js +2 -1
- package/components/Permissions/Permissions.js.map +1 -1
- package/components/Permissions/index.d.ts +1 -0
- package/components/Permissions/index.js +1 -0
- package/components/Permissions/mergeByName.d.ts +11 -0
- package/components/Permissions/mergeByName.js +33 -0
- package/components/Permissions/mergeByName.js.map +1 -0
- package/components/RolesMultiAutocomplete/index.d.ts +3 -1
- package/components/RolesMultiAutocomplete/index.js +24 -14
- package/components/RolesMultiAutocomplete/index.js.map +1 -1
- package/components/SimpleForm/SimpleForm.d.ts +1 -1
- package/components/SimpleUI/InputField.d.ts +2 -1
- package/components/SingleImageUpload.d.ts +1 -2
- package/components/SingleImageUpload.js +1 -2
- package/components/SingleImageUpload.js.map +1 -1
- package/components/Table/cells/CellAuthor.d.ts +2 -0
- package/components/Table/cells/CellAuthor.js +10 -0
- package/components/Table/cells/CellAuthor.js.map +1 -0
- package/components/Table/cells/CellCreated.d.ts +2 -0
- package/components/Table/cells/CellCreated.js +13 -0
- package/components/Table/cells/CellCreated.js.map +1 -0
- package/components/Table/cells/CellModified.d.ts +2 -0
- package/components/Table/cells/CellModified.js +13 -0
- package/components/Table/cells/CellModified.js.map +1 -0
- package/components/Table/cells/index.d.ts +3 -0
- package/components/Table/cells/index.js +3 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.d.ts +9 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.js +23 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.js.map +1 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.d.ts +9 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.js +21 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.js.map +1 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.d.ts +1 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.js +128 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.js.map +1 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.d.ts +10 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.js +30 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.js.map +1 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.d.ts +9 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.js +18 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.js.map +1 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.d.ts +8 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.js +16 -0
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.js.map +1 -0
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityRepository.d.ts +5 -0
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityRepository.js +0 -0
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityUpdater.d.ts +4 -0
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityUpdater.js +0 -0
- package/components/Table/components/Table/ColumnVisibility/index.d.ts +7 -0
- package/components/Table/components/Table/ColumnVisibility/index.js +5 -0
- package/components/Table/components/Table/Columns/Column.d.ts +42 -0
- package/components/Table/components/Table/Columns/Column.js +21 -0
- package/components/Table/components/Table/Columns/Column.js.map +1 -0
- package/components/Table/components/Table/Columns/ColumnMapper.d.ts +7 -0
- package/components/Table/components/Table/Columns/ColumnMapper.js +34 -0
- package/components/Table/components/Table/Columns/ColumnMapper.js.map +1 -0
- package/components/Table/components/Table/Columns/ColumnsPresenter.d.ts +9 -0
- package/components/Table/components/Table/Columns/ColumnsPresenter.js +18 -0
- package/components/Table/components/Table/Columns/ColumnsPresenter.js.map +1 -0
- package/components/Table/components/Table/Columns/ColumnsPresenter.test.d.ts +1 -0
- package/components/Table/components/Table/Columns/ColumnsPresenter.test.js +73 -0
- package/components/Table/components/Table/Columns/ColumnsPresenter.test.js.map +1 -0
- package/components/Table/components/Table/Columns/ColumnsRepository.d.ts +9 -0
- package/components/Table/components/Table/Columns/ColumnsRepository.js +19 -0
- package/components/Table/components/Table/Columns/ColumnsRepository.js.map +1 -0
- package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.d.ts +9 -0
- package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.js +21 -0
- package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.js.map +1 -0
- package/components/Table/components/Table/Columns/IColumnsRepository.d.ts +5 -0
- package/components/Table/components/Table/Columns/IColumnsRepository.js +0 -0
- package/components/Table/components/Table/Columns/index.d.ts +6 -0
- package/components/Table/components/Table/Columns/index.js +5 -0
- package/components/Table/components/Table/Table.d.ts +17 -0
- package/components/Table/components/Table/Table.js +47 -0
- package/components/Table/components/Table/Table.js.map +1 -0
- package/components/Table/components/Table/TableInner.d.ts +24 -0
- package/components/Table/components/Table/TableInner.js +40 -0
- package/components/Table/components/Table/TableInner.js.map +1 -0
- package/components/Table/components/Table/TablePresenter.d.ts +15 -0
- package/components/Table/components/Table/TablePresenter.js +15 -0
- package/components/Table/components/Table/TablePresenter.js.map +1 -0
- package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.d.ts +9 -0
- package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.js +15 -0
- package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.js.map +1 -0
- package/components/Table/components/Table/gateways/IColumnsVisibilityGateway.d.ts +4 -0
- package/components/Table/components/Table/gateways/IColumnsVisibilityGateway.js +0 -0
- package/components/Table/components/Table/gateways/index.d.ts +2 -0
- package/components/Table/components/Table/gateways/index.js +1 -0
- package/components/Table/components/Table/index.d.ts +1 -0
- package/components/Table/components/Table/index.js +1 -0
- package/components/Table/components/index.d.ts +1 -0
- package/components/Table/components/index.js +1 -0
- package/components/Table/createTableData.d.ts +5 -0
- package/components/Table/createTableData.js +9 -0
- package/components/Table/createTableData.js.map +1 -0
- package/components/Table/index.d.ts +5 -0
- package/components/Table/index.js +5 -0
- package/components/Table/table.types.d.ts +9 -0
- package/components/Table/table.types.js +0 -0
- package/components/Table/useTableRow.d.ts +18 -0
- package/components/Table/useTableRow.js +22 -0
- package/components/Table/useTableRow.js.map +1 -0
- package/components/TeamAutocomplete/index.d.ts +3 -1
- package/components/TeamAutocomplete/index.js +13 -14
- package/components/TeamAutocomplete/index.js.map +1 -1
- package/components/TeamsMultiAutocomplete/index.d.ts +3 -1
- package/components/TeamsMultiAutocomplete/index.js +24 -14
- package/components/TeamsMultiAutocomplete/index.js.map +1 -1
- package/components/index.d.ts +3 -2
- package/components/index.js +3 -2
- package/config/AdminConfig/Dashboard.d.ts +2 -1
- package/config/AdminConfig/Form.d.ts +4 -2
- package/config/AdminConfig/LexicalTheme/Typography.d.ts +4 -4
- package/config/AdminConfig/LexicalTheme.d.ts +6 -6
- package/config/AdminConfig/LexicalTheme.js +0 -2
- package/config/AdminConfig/LexicalTheme.js.map +1 -1
- package/config/AdminConfig/Logo.d.ts +8 -6
- package/config/AdminConfig/Menu/MenuGroup.d.ts +13 -12
- package/config/AdminConfig/Menu/MenuItem.d.ts +7 -6
- package/config/AdminConfig/Menu/MenuLink.d.ts +7 -6
- package/config/AdminConfig/Menu/SupportMenu/SupportMenuItem.d.ts +13 -12
- package/config/AdminConfig/Menu/SupportMenu/SupportMenuLink.d.ts +7 -6
- package/config/AdminConfig/Menu/SupportMenu.d.ts +8 -6
- package/config/AdminConfig/Menu/UserMenu.d.ts +8 -6
- package/config/AdminConfig/Menu.d.ts +15 -12
- package/config/AdminConfig/Security.d.ts +2 -1
- package/config/AdminConfig/SecurityPermissions.js +2 -1
- package/config/AdminConfig/SecurityPermissions.js.map +1 -1
- package/config/AdminConfig/Tenant/TenantLogo.d.ts +8 -6
- package/config/AdminConfig/Tenant/TenantName.d.ts +8 -6
- package/config/AdminConfig/Tenant.d.ts +3 -1
- package/config/AdminConfig/Title.d.ts +8 -6
- package/config/AdminConfig.d.ts +16 -30
- package/config/AdminConfig.js +1 -2
- package/config/AdminConfig.js.map +1 -1
- package/config/table/Column.d.ts +34 -0
- package/config/table/Column.js +69 -0
- package/config/table/Column.js.map +1 -0
- package/config/table/Sorting.d.ts +11 -0
- package/config/table/Sorting.js +28 -0
- package/config/table/Sorting.js.map +1 -0
- package/config/table/index.d.ts +13 -0
- package/config/table/index.js +9 -0
- package/config/table/index.js.map +1 -0
- package/domain/securityPermissionsSchema.d.ts +20 -0
- package/domain/securityPermissionsSchema.js +34 -0
- package/domain/securityPermissionsSchema.js.map +1 -0
- package/errors/ErrorOverlayNetworkErrorHandler.js +4 -4
- package/errors/ErrorOverlayNetworkErrorHandler.js.map +1 -1
- package/exports/admin/form.d.ts +2 -0
- package/exports/admin/form.js +1 -0
- package/exports/admin/ui.d.ts +4 -0
- package/exports/admin/ui.js +2 -1
- package/exports/admin.d.ts +1 -0
- package/exports/admin.js +1 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyGateway.d.ts +12 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyGateway.js +50 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyGateway.js.map +1 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyRepository.d.ts +13 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyRepository.js +25 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyRepository.js.map +1 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyUseCase.d.ts +11 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyUseCase.js +18 -0
- package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyUseCase.js.map +1 -0
- package/features/accessManagement/apiKeys/createApiKey/abstractions.d.ts +29 -0
- package/features/accessManagement/apiKeys/createApiKey/abstractions.js +7 -0
- package/features/accessManagement/apiKeys/createApiKey/abstractions.js.map +1 -0
- package/features/accessManagement/apiKeys/createApiKey/feature.d.ts +3 -0
- package/features/accessManagement/apiKeys/createApiKey/feature.js +21 -0
- package/features/accessManagement/apiKeys/createApiKey/feature.js.map +1 -0
- package/features/accessManagement/apiKeys/createApiKey/index.d.ts +3 -0
- package/features/accessManagement/apiKeys/createApiKey/index.js +2 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyGateway.d.ts +11 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyGateway.js +39 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyGateway.js.map +1 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyRepository.d.ts +12 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyRepository.js +22 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyRepository.js.map +1 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyUseCase.d.ts +10 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyUseCase.js +18 -0
- package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyUseCase.js.map +1 -0
- package/features/accessManagement/apiKeys/deleteApiKey/abstractions.d.ts +21 -0
- package/features/accessManagement/apiKeys/deleteApiKey/abstractions.js +7 -0
- package/features/accessManagement/apiKeys/deleteApiKey/abstractions.js.map +1 -0
- package/features/accessManagement/apiKeys/deleteApiKey/feature.d.ts +3 -0
- package/features/accessManagement/apiKeys/deleteApiKey/feature.js +21 -0
- package/features/accessManagement/apiKeys/deleteApiKey/feature.js.map +1 -0
- package/features/accessManagement/apiKeys/deleteApiKey/index.d.ts +3 -0
- package/features/accessManagement/apiKeys/deleteApiKey/index.js +2 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyGateway.d.ts +12 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyGateway.js +49 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyGateway.js.map +1 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyRepository.d.ts +11 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyRepository.js +18 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyRepository.js.map +1 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyUseCase.d.ts +11 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyUseCase.js +18 -0
- package/features/accessManagement/apiKeys/getApiKey/GetApiKeyUseCase.js.map +1 -0
- package/features/accessManagement/apiKeys/getApiKey/abstractions.d.ts +22 -0
- package/features/accessManagement/apiKeys/getApiKey/abstractions.js +7 -0
- package/features/accessManagement/apiKeys/getApiKey/abstractions.js.map +1 -0
- package/features/accessManagement/apiKeys/getApiKey/feature.d.ts +3 -0
- package/features/accessManagement/apiKeys/getApiKey/feature.js +21 -0
- package/features/accessManagement/apiKeys/getApiKey/feature.js.map +1 -0
- package/features/accessManagement/apiKeys/getApiKey/index.d.ts +3 -0
- package/features/accessManagement/apiKeys/getApiKey/index.js +2 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysGateway.d.ts +11 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysGateway.js +44 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysGateway.js.map +1 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysRepository.d.ts +11 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysRepository.js +22 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysRepository.js.map +1 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysUseCase.d.ts +10 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysUseCase.js +18 -0
- package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysUseCase.js.map +1 -0
- package/features/accessManagement/apiKeys/listApiKeys/abstractions.d.ts +30 -0
- package/features/accessManagement/apiKeys/listApiKeys/abstractions.js +8 -0
- package/features/accessManagement/apiKeys/listApiKeys/abstractions.js.map +1 -0
- package/features/accessManagement/apiKeys/listApiKeys/feature.d.ts +3 -0
- package/features/accessManagement/apiKeys/listApiKeys/feature.js +23 -0
- package/features/accessManagement/apiKeys/listApiKeys/feature.js.map +1 -0
- package/features/accessManagement/apiKeys/listApiKeys/index.d.ts +3 -0
- package/features/accessManagement/apiKeys/listApiKeys/index.js +2 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyGateway.d.ts +12 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyGateway.js +51 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyGateway.js.map +1 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyRepository.d.ts +13 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyRepository.js +23 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyRepository.js.map +1 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyUseCase.d.ts +11 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyUseCase.js +18 -0
- package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyUseCase.js.map +1 -0
- package/features/accessManagement/apiKeys/updateApiKey/abstractions.d.ts +28 -0
- package/features/accessManagement/apiKeys/updateApiKey/abstractions.js +7 -0
- package/features/accessManagement/apiKeys/updateApiKey/abstractions.js.map +1 -0
- package/features/accessManagement/apiKeys/updateApiKey/feature.d.ts +3 -0
- package/features/accessManagement/apiKeys/updateApiKey/feature.js +21 -0
- package/features/accessManagement/apiKeys/updateApiKey/feature.js.map +1 -0
- package/features/accessManagement/apiKeys/updateApiKey/index.d.ts +3 -0
- package/features/accessManagement/apiKeys/updateApiKey/index.js +2 -0
- package/features/accessManagement/constants.d.ts +5 -0
- package/features/accessManagement/constants.js +9 -0
- package/features/accessManagement/constants.js.map +1 -0
- package/features/accessManagement/permissions/abstractions.d.ts +17 -0
- package/features/accessManagement/permissions/abstractions.js +6 -0
- package/features/accessManagement/permissions/abstractions.js.map +1 -0
- package/features/accessManagement/permissions/feature.d.ts +14 -0
- package/features/accessManagement/permissions/feature.js +7 -0
- package/features/accessManagement/permissions/feature.js.map +1 -0
- package/features/accessManagement/roles/createRole/CreateRoleGateway.d.ts +12 -0
- package/features/accessManagement/roles/createRole/CreateRoleGateway.js +51 -0
- package/features/accessManagement/roles/createRole/CreateRoleGateway.js.map +1 -0
- package/features/accessManagement/roles/createRole/CreateRoleRepository.d.ts +13 -0
- package/features/accessManagement/roles/createRole/CreateRoleRepository.js +25 -0
- package/features/accessManagement/roles/createRole/CreateRoleRepository.js.map +1 -0
- package/features/accessManagement/roles/createRole/CreateRoleUseCase.d.ts +11 -0
- package/features/accessManagement/roles/createRole/CreateRoleUseCase.js +18 -0
- package/features/accessManagement/roles/createRole/CreateRoleUseCase.js.map +1 -0
- package/features/accessManagement/roles/createRole/abstractions.d.ts +29 -0
- package/features/accessManagement/roles/createRole/abstractions.js +7 -0
- package/features/accessManagement/roles/createRole/abstractions.js.map +1 -0
- package/features/accessManagement/roles/createRole/feature.d.ts +3 -0
- package/features/accessManagement/roles/createRole/feature.js +21 -0
- package/features/accessManagement/roles/createRole/feature.js.map +1 -0
- package/features/accessManagement/roles/createRole/index.d.ts +3 -0
- package/features/accessManagement/roles/createRole/index.js +2 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleGateway.d.ts +11 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleGateway.js +40 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleGateway.js.map +1 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleRepository.d.ts +12 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleRepository.js +22 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleRepository.js.map +1 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleUseCase.d.ts +10 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleUseCase.js +18 -0
- package/features/accessManagement/roles/deleteRole/DeleteRoleUseCase.js.map +1 -0
- package/features/accessManagement/roles/deleteRole/abstractions.d.ts +21 -0
- package/features/accessManagement/roles/deleteRole/abstractions.js +7 -0
- package/features/accessManagement/roles/deleteRole/abstractions.js.map +1 -0
- package/features/accessManagement/roles/deleteRole/feature.d.ts +3 -0
- package/features/accessManagement/roles/deleteRole/feature.js +21 -0
- package/features/accessManagement/roles/deleteRole/feature.js.map +1 -0
- package/features/accessManagement/roles/deleteRole/index.d.ts +3 -0
- package/features/accessManagement/roles/deleteRole/index.js +2 -0
- package/features/accessManagement/roles/getRole/GetRoleGateway.d.ts +12 -0
- package/features/accessManagement/roles/getRole/GetRoleGateway.js +50 -0
- package/features/accessManagement/roles/getRole/GetRoleGateway.js.map +1 -0
- package/features/accessManagement/roles/getRole/GetRoleRepository.d.ts +11 -0
- package/features/accessManagement/roles/getRole/GetRoleRepository.js +18 -0
- package/features/accessManagement/roles/getRole/GetRoleRepository.js.map +1 -0
- package/features/accessManagement/roles/getRole/GetRoleUseCase.d.ts +11 -0
- package/features/accessManagement/roles/getRole/GetRoleUseCase.js +18 -0
- package/features/accessManagement/roles/getRole/GetRoleUseCase.js.map +1 -0
- package/features/accessManagement/roles/getRole/abstractions.d.ts +22 -0
- package/features/accessManagement/roles/getRole/abstractions.js +7 -0
- package/features/accessManagement/roles/getRole/abstractions.js.map +1 -0
- package/features/accessManagement/roles/getRole/feature.d.ts +3 -0
- package/features/accessManagement/roles/getRole/feature.js +21 -0
- package/features/accessManagement/roles/getRole/feature.js.map +1 -0
- package/features/accessManagement/roles/getRole/index.d.ts +3 -0
- package/features/accessManagement/roles/getRole/index.js +2 -0
- package/features/accessManagement/roles/listRoles/ListRolesGateway.d.ts +11 -0
- package/features/accessManagement/roles/listRoles/ListRolesGateway.js +45 -0
- package/features/accessManagement/roles/listRoles/ListRolesGateway.js.map +1 -0
- package/features/accessManagement/roles/listRoles/ListRolesRepository.d.ts +11 -0
- package/features/accessManagement/roles/listRoles/ListRolesRepository.js +22 -0
- package/features/accessManagement/roles/listRoles/ListRolesRepository.js.map +1 -0
- package/features/accessManagement/roles/listRoles/ListRolesUseCase.d.ts +10 -0
- package/features/accessManagement/roles/listRoles/ListRolesUseCase.js +18 -0
- package/features/accessManagement/roles/listRoles/ListRolesUseCase.js.map +1 -0
- package/features/accessManagement/roles/listRoles/abstractions.d.ts +30 -0
- package/features/accessManagement/roles/listRoles/abstractions.js +8 -0
- package/features/accessManagement/roles/listRoles/abstractions.js.map +1 -0
- package/features/accessManagement/roles/listRoles/feature.d.ts +3 -0
- package/features/accessManagement/roles/listRoles/feature.js +23 -0
- package/features/accessManagement/roles/listRoles/feature.js.map +1 -0
- package/features/accessManagement/roles/listRoles/index.d.ts +3 -0
- package/features/accessManagement/roles/listRoles/index.js +2 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleGateway.d.ts +12 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleGateway.js +52 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleGateway.js.map +1 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleRepository.d.ts +13 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleRepository.js +23 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleRepository.js.map +1 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleUseCase.d.ts +11 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleUseCase.js +18 -0
- package/features/accessManagement/roles/updateRole/UpdateRoleUseCase.js.map +1 -0
- package/features/accessManagement/roles/updateRole/abstractions.d.ts +28 -0
- package/features/accessManagement/roles/updateRole/abstractions.js +7 -0
- package/features/accessManagement/roles/updateRole/abstractions.js.map +1 -0
- package/features/accessManagement/roles/updateRole/feature.d.ts +3 -0
- package/features/accessManagement/roles/updateRole/feature.js +21 -0
- package/features/accessManagement/roles/updateRole/feature.js.map +1 -0
- package/features/accessManagement/roles/updateRole/index.d.ts +3 -0
- package/features/accessManagement/roles/updateRole/index.js +2 -0
- package/features/accessManagement/teams/createTeam/CreateTeamGateway.d.ts +12 -0
- package/features/accessManagement/teams/createTeam/CreateTeamGateway.js +55 -0
- package/features/accessManagement/teams/createTeam/CreateTeamGateway.js.map +1 -0
- package/features/accessManagement/teams/createTeam/CreateTeamRepository.d.ts +13 -0
- package/features/accessManagement/teams/createTeam/CreateTeamRepository.js +25 -0
- package/features/accessManagement/teams/createTeam/CreateTeamRepository.js.map +1 -0
- package/features/accessManagement/teams/createTeam/CreateTeamUseCase.d.ts +11 -0
- package/features/accessManagement/teams/createTeam/CreateTeamUseCase.js +18 -0
- package/features/accessManagement/teams/createTeam/CreateTeamUseCase.js.map +1 -0
- package/features/accessManagement/teams/createTeam/abstractions.d.ts +28 -0
- package/features/accessManagement/teams/createTeam/abstractions.js +7 -0
- package/features/accessManagement/teams/createTeam/abstractions.js.map +1 -0
- package/features/accessManagement/teams/createTeam/feature.d.ts +3 -0
- package/features/accessManagement/teams/createTeam/feature.js +21 -0
- package/features/accessManagement/teams/createTeam/feature.js.map +1 -0
- package/features/accessManagement/teams/createTeam/index.d.ts +3 -0
- package/features/accessManagement/teams/createTeam/index.js +2 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamGateway.d.ts +11 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamGateway.js +40 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamGateway.js.map +1 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamRepository.d.ts +12 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamRepository.js +22 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamRepository.js.map +1 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamUseCase.d.ts +10 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamUseCase.js +18 -0
- package/features/accessManagement/teams/deleteTeam/DeleteTeamUseCase.js.map +1 -0
- package/features/accessManagement/teams/deleteTeam/abstractions.d.ts +21 -0
- package/features/accessManagement/teams/deleteTeam/abstractions.js +7 -0
- package/features/accessManagement/teams/deleteTeam/abstractions.js.map +1 -0
- package/features/accessManagement/teams/deleteTeam/feature.d.ts +3 -0
- package/features/accessManagement/teams/deleteTeam/feature.js +21 -0
- package/features/accessManagement/teams/deleteTeam/feature.js.map +1 -0
- package/features/accessManagement/teams/deleteTeam/index.d.ts +3 -0
- package/features/accessManagement/teams/deleteTeam/index.js +2 -0
- package/features/accessManagement/teams/getTeam/GetTeamGateway.d.ts +12 -0
- package/features/accessManagement/teams/getTeam/GetTeamGateway.js +54 -0
- package/features/accessManagement/teams/getTeam/GetTeamGateway.js.map +1 -0
- package/features/accessManagement/teams/getTeam/GetTeamRepository.d.ts +11 -0
- package/features/accessManagement/teams/getTeam/GetTeamRepository.js +18 -0
- package/features/accessManagement/teams/getTeam/GetTeamRepository.js.map +1 -0
- package/features/accessManagement/teams/getTeam/GetTeamUseCase.d.ts +11 -0
- package/features/accessManagement/teams/getTeam/GetTeamUseCase.js +18 -0
- package/features/accessManagement/teams/getTeam/GetTeamUseCase.js.map +1 -0
- package/features/accessManagement/teams/getTeam/abstractions.d.ts +22 -0
- package/features/accessManagement/teams/getTeam/abstractions.js +7 -0
- package/features/accessManagement/teams/getTeam/abstractions.js.map +1 -0
- package/features/accessManagement/teams/getTeam/feature.d.ts +3 -0
- package/features/accessManagement/teams/getTeam/feature.js +21 -0
- package/features/accessManagement/teams/getTeam/feature.js.map +1 -0
- package/features/accessManagement/teams/getTeam/index.d.ts +3 -0
- package/features/accessManagement/teams/getTeam/index.js +2 -0
- package/features/accessManagement/teams/listTeams/ListTeamsGateway.d.ts +11 -0
- package/features/accessManagement/teams/listTeams/ListTeamsGateway.js +49 -0
- package/features/accessManagement/teams/listTeams/ListTeamsGateway.js.map +1 -0
- package/features/accessManagement/teams/listTeams/ListTeamsRepository.d.ts +11 -0
- package/features/accessManagement/teams/listTeams/ListTeamsRepository.js +22 -0
- package/features/accessManagement/teams/listTeams/ListTeamsRepository.js.map +1 -0
- package/features/accessManagement/teams/listTeams/ListTeamsUseCase.d.ts +10 -0
- package/features/accessManagement/teams/listTeams/ListTeamsUseCase.js +18 -0
- package/features/accessManagement/teams/listTeams/ListTeamsUseCase.js.map +1 -0
- package/features/accessManagement/teams/listTeams/abstractions.d.ts +30 -0
- package/features/accessManagement/teams/listTeams/abstractions.js +8 -0
- package/features/accessManagement/teams/listTeams/abstractions.js.map +1 -0
- package/features/accessManagement/teams/listTeams/feature.d.ts +3 -0
- package/features/accessManagement/teams/listTeams/feature.js +23 -0
- package/features/accessManagement/teams/listTeams/feature.js.map +1 -0
- package/features/accessManagement/teams/listTeams/index.d.ts +3 -0
- package/features/accessManagement/teams/listTeams/index.js +2 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamGateway.d.ts +12 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamGateway.js +56 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamGateway.js.map +1 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamRepository.d.ts +13 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamRepository.js +23 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamRepository.js.map +1 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamUseCase.d.ts +11 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamUseCase.js +18 -0
- package/features/accessManagement/teams/updateTeam/UpdateTeamUseCase.js.map +1 -0
- package/features/accessManagement/teams/updateTeam/abstractions.d.ts +27 -0
- package/features/accessManagement/teams/updateTeam/abstractions.js +7 -0
- package/features/accessManagement/teams/updateTeam/abstractions.js.map +1 -0
- package/features/accessManagement/teams/updateTeam/feature.d.ts +3 -0
- package/features/accessManagement/teams/updateTeam/feature.js +21 -0
- package/features/accessManagement/teams/updateTeam/feature.js.map +1 -0
- package/features/accessManagement/teams/updateTeam/index.d.ts +3 -0
- package/features/accessManagement/teams/updateTeam/index.js +2 -0
- package/features/accessManagement/types.d.ts +34 -0
- package/features/accessManagement/types.js +0 -0
- package/features/clipboard/ClipboardService.d.ts +15 -0
- package/features/clipboard/ClipboardService.js +51 -0
- package/features/clipboard/ClipboardService.js.map +1 -0
- package/features/clipboard/abstractions.d.ts +14 -0
- package/features/clipboard/abstractions.js +5 -0
- package/features/clipboard/abstractions.js.map +1 -0
- package/features/clipboard/feature.d.ts +3 -0
- package/features/clipboard/feature.js +17 -0
- package/features/clipboard/feature.js.map +1 -0
- package/features/clipboard/index.d.ts +2 -0
- package/features/clipboard/index.js +2 -0
- package/features/confirmation/Confirmation.d.ts +11 -0
- package/features/confirmation/Confirmation.js +29 -0
- package/features/confirmation/Confirmation.js.map +1 -0
- package/features/confirmation/ConfirmationBridge.d.ts +1 -0
- package/features/confirmation/ConfirmationBridge.js +20 -0
- package/features/confirmation/ConfirmationBridge.js.map +1 -0
- package/features/confirmation/abstractions.d.ts +15 -0
- package/features/confirmation/abstractions.js +6 -0
- package/features/confirmation/abstractions.js.map +1 -0
- package/features/confirmation/feature.d.ts +1 -0
- package/features/confirmation/feature.js +11 -0
- package/features/confirmation/feature.js.map +1 -0
- package/features/confirmation/index.d.ts +3 -0
- package/features/confirmation/index.js +3 -0
- package/features/formModel/Field.d.ts +5 -5
- package/features/formModel/Field.js +69 -23
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +8 -3
- package/features/formModel/FieldBuilder.js +20 -1
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FormErrors.d.ts +2 -1
- package/features/formModel/FormErrors.js +4 -3
- package/features/formModel/FormErrors.js.map +1 -1
- package/features/formModel/FormModel.d.ts +8 -2
- package/features/formModel/FormModel.js +33 -10
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +248 -53
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormView.js +25 -6
- package/features/formModel/FormView.js.map +1 -1
- package/features/formModel/LayoutBuilderFactory.d.ts +3 -2
- package/features/formModel/LayoutBuilderFactory.js +58 -5
- package/features/formModel/LayoutBuilderFactory.js.map +1 -1
- package/features/formModel/LayoutMutator.js +6 -0
- package/features/formModel/LayoutMutator.js.map +1 -1
- package/features/formModel/LayoutResolver.d.ts +1 -0
- package/features/formModel/LayoutResolver.js +27 -6
- package/features/formModel/LayoutResolver.js.map +1 -1
- package/features/formModel/ObjectField.d.ts +4 -2
- package/features/formModel/ObjectField.js +43 -3
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/abstractions.d.ts +86 -19
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/demo/FormModelPhase11Presenter.js +5 -5
- package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -1
- package/features/formModel/feature.js +4 -1
- package/features/formModel/feature.js.map +1 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js +2 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
- package/features/formModel/fieldTypes/PasswordFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/PasswordFieldType.js +23 -0
- package/features/formModel/fieldTypes/PasswordFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/PermissionsFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/PermissionsFieldType.js +27 -0
- package/features/formModel/fieldTypes/PermissionsFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/RolesMultiSelectFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/RolesMultiSelectFieldType.js +24 -0
- package/features/formModel/fieldTypes/RolesMultiSelectFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/index.d.ts +3 -0
- package/features/formModel/fieldTypes/index.js +3 -0
- package/features/formModel/index.d.ts +2 -3
- package/features/formModel/index.js +3 -4
- package/features/formModel/renderers.d.ts +4 -0
- package/features/formModel/renderers.js +4 -0
- package/features/iconPicker/listCustomIcons/ListCustomIconsGateway.d.ts +11 -0
- package/features/iconPicker/listCustomIcons/ListCustomIconsGateway.js +49 -0
- package/features/iconPicker/listCustomIcons/ListCustomIconsGateway.js.map +1 -0
- package/features/iconPicker/listCustomIcons/abstractions.d.ts +12 -0
- package/features/iconPicker/listCustomIcons/abstractions.js +5 -0
- package/features/iconPicker/listCustomIcons/abstractions.js.map +1 -0
- package/features/iconPicker/listCustomIcons/feature.d.ts +1 -0
- package/features/iconPicker/listCustomIcons/feature.js +11 -0
- package/features/iconPicker/listCustomIcons/feature.js.map +1 -0
- package/features/iconPicker/listCustomIcons/index.d.ts +3 -0
- package/features/iconPicker/listCustomIcons/index.js +2 -0
- package/features/listCache/ListCache.d.ts +4 -1
- package/features/listCache/ListCache.js +13 -3
- package/features/listCache/ListCache.js.map +1 -1
- package/features/notifications/Notifications.d.ts +16 -0
- package/features/notifications/Notifications.js +39 -0
- package/features/notifications/Notifications.js.map +1 -0
- package/features/notifications/NotificationsPresenter.d.ts +11 -0
- package/features/notifications/NotificationsPresenter.js +27 -0
- package/features/notifications/NotificationsPresenter.js.map +1 -0
- package/features/notifications/NotificationsRenderer.d.ts +7 -0
- package/features/notifications/NotificationsRenderer.js +38 -0
- package/features/notifications/NotificationsRenderer.js.map +1 -0
- package/features/notifications/abstractions.d.ts +38 -0
- package/features/notifications/abstractions.js +6 -0
- package/features/notifications/abstractions.js.map +1 -0
- package/features/notifications/feature.d.ts +4 -0
- package/features/notifications/feature.js +20 -0
- package/features/notifications/feature.js.map +1 -0
- package/features/notifications/index.d.ts +3 -0
- package/features/notifications/index.js +3 -0
- package/features/webinySdk/WebinySdk.d.ts +2 -1
- package/features/webinySdk/WebinySdk.js.map +1 -1
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +1 -0
- package/hooks/useNamedConfirmationDialog.d.ts +9 -0
- package/hooks/useNamedConfirmationDialog.js +20 -0
- package/hooks/useNamedConfirmationDialog.js.map +1 -0
- package/index.d.ts +34 -1
- package/index.js +39 -8
- package/modules/AccessManagementExtension.d.ts +2 -0
- package/modules/AccessManagementExtension.js +151 -0
- package/modules/AccessManagementExtension.js.map +1 -0
- package/package.json +29 -37
- package/permissions/createPermissions.js.map +1 -1
- package/presentation/accessManagement/SecurityPermissions.d.ts +2 -0
- package/presentation/accessManagement/SecurityPermissions.js +54 -0
- package/presentation/accessManagement/SecurityPermissions.js.map +1 -0
- package/presentation/accessManagement/apiKeys/ApiKeysDataSource.d.ts +13 -0
- package/presentation/accessManagement/apiKeys/ApiKeysDataSource.js +23 -0
- package/presentation/accessManagement/apiKeys/ApiKeysDataSource.js.map +1 -0
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.d.ts +38 -0
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +193 -0
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -0
- package/presentation/accessManagement/apiKeys/abstractions.d.ts +25 -0
- package/presentation/accessManagement/apiKeys/abstractions.js +5 -0
- package/presentation/accessManagement/apiKeys/abstractions.js.map +1 -0
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +4 -0
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.js +234 -0
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.js.map +1 -0
- package/presentation/accessManagement/apiKeys/feature.d.ts +3 -0
- package/presentation/accessManagement/apiKeys/feature.js +17 -0
- package/presentation/accessManagement/apiKeys/feature.js.map +1 -0
- package/presentation/accessManagement/roles/RolesDataSource.d.ts +13 -0
- package/presentation/accessManagement/roles/RolesDataSource.js +23 -0
- package/presentation/accessManagement/roles/RolesDataSource.js.map +1 -0
- package/presentation/accessManagement/roles/RolesPresenter.d.ts +38 -0
- package/presentation/accessManagement/roles/RolesPresenter.js +201 -0
- package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -0
- package/presentation/accessManagement/roles/abstractions.d.ts +27 -0
- package/presentation/accessManagement/roles/abstractions.js +5 -0
- package/presentation/accessManagement/roles/abstractions.js.map +1 -0
- package/presentation/accessManagement/roles/components/RolesView.d.ts +4 -0
- package/presentation/accessManagement/roles/components/RolesView.js +232 -0
- package/presentation/accessManagement/roles/components/RolesView.js.map +1 -0
- package/presentation/accessManagement/roles/feature.d.ts +3 -0
- package/presentation/accessManagement/roles/feature.js +17 -0
- package/presentation/accessManagement/roles/feature.js.map +1 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/RolesAutocompletePresenter.d.ts +15 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/RolesAutocompletePresenter.js +42 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/RolesAutocompletePresenter.js.map +1 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/abstractions.d.ts +18 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/abstractions.js +5 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/abstractions.js.map +1 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/feature.d.ts +3 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/feature.js +17 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/feature.js.map +1 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/index.d.ts +3 -0
- package/presentation/accessManagement/roles/rolesAutocomplete/index.js +2 -0
- package/presentation/accessManagement/routes.d.ts +21 -0
- package/presentation/accessManagement/routes.js +36 -0
- package/presentation/accessManagement/routes.js.map +1 -0
- package/presentation/accessManagement/teams/TeamsDataSource.d.ts +13 -0
- package/presentation/accessManagement/teams/TeamsDataSource.js +23 -0
- package/presentation/accessManagement/teams/TeamsDataSource.js.map +1 -0
- package/presentation/accessManagement/teams/TeamsPresenter.d.ts +39 -0
- package/presentation/accessManagement/teams/TeamsPresenter.js +200 -0
- package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -0
- package/presentation/accessManagement/teams/abstractions.d.ts +26 -0
- package/presentation/accessManagement/teams/abstractions.js +5 -0
- package/presentation/accessManagement/teams/abstractions.js.map +1 -0
- package/presentation/accessManagement/teams/components/TeamsView.d.ts +4 -0
- package/presentation/accessManagement/teams/components/TeamsView.js +214 -0
- package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -0
- package/presentation/accessManagement/teams/feature.d.ts +3 -0
- package/presentation/accessManagement/teams/feature.js +17 -0
- package/presentation/accessManagement/teams/feature.js.map +1 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/TeamsAutocompletePresenter.d.ts +15 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/TeamsAutocompletePresenter.js +42 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/TeamsAutocompletePresenter.js.map +1 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/abstractions.d.ts +18 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/abstractions.js +5 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/abstractions.js.map +1 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/feature.d.ts +3 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/feature.js +17 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/feature.js.map +1 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/index.d.ts +3 -0
- package/presentation/accessManagement/teams/teamsAutocomplete/index.js +2 -0
- package/presentation/iconPicker/customIcons/CustomIconsPresenter.d.ts +16 -0
- package/presentation/iconPicker/customIcons/CustomIconsPresenter.js +40 -0
- package/presentation/iconPicker/customIcons/CustomIconsPresenter.js.map +1 -0
- package/presentation/iconPicker/customIcons/abstractions.d.ts +14 -0
- package/presentation/iconPicker/customIcons/abstractions.js +5 -0
- package/presentation/iconPicker/customIcons/abstractions.js.map +1 -0
- package/presentation/iconPicker/customIcons/feature.d.ts +3 -0
- package/presentation/iconPicker/customIcons/feature.js +17 -0
- package/presentation/iconPicker/customIcons/feature.js.map +1 -0
- package/presentation/iconPicker/customIcons/index.d.ts +3 -0
- package/presentation/iconPicker/customIcons/index.js +2 -0
- package/presentation/installation/components/SystemInstaller/SystemInstaller.js +3 -1
- package/presentation/installation/components/SystemInstaller/SystemInstaller.js.map +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.d.ts +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js +5 -4
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js +1 -1
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js.map +1 -1
- package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js +7 -5
- package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
- package/presentation/listPresenter/FolderAwareDataSource.d.ts +50 -0
- package/presentation/listPresenter/FolderAwareDataSource.js +132 -0
- package/presentation/listPresenter/FolderAwareDataSource.js.map +1 -0
- package/presentation/listPresenter/ListPresenter.d.ts +4 -0
- package/presentation/listPresenter/ListPresenter.js +30 -4
- package/presentation/listPresenter/ListPresenter.js.map +1 -1
- package/presentation/listPresenter/QueryMatcher.d.ts +56 -0
- package/presentation/listPresenter/QueryMatcher.js +59 -0
- package/presentation/listPresenter/QueryMatcher.js.map +1 -0
- package/presentation/listPresenter/SimpleDataSource.d.ts +15 -0
- package/presentation/listPresenter/SimpleDataSource.js +70 -0
- package/presentation/listPresenter/SimpleDataSource.js.map +1 -0
- package/presentation/listPresenter/abstractions.d.ts +9 -0
- package/presentation/listPresenter/abstractions.js.map +1 -1
- package/presentation/listPresenter/index.d.ts +5 -0
- package/presentation/listPresenter/index.js +3 -0
- package/presentation/security/components/HasPermission.d.ts +1 -1
- package/presentation/tenancy/TenancyProvider.js +0 -4
- package/presentation/tenancy/TenancyProvider.js.map +1 -1
- package/presentation/trashBin/TrashBinDataSource.d.ts +16 -0
- package/presentation/trashBin/TrashBinDataSource.js +82 -0
- package/presentation/trashBin/TrashBinDataSource.js.map +1 -0
- package/presentation/trashBin/TrashBinPresenter.d.ts +20 -0
- package/presentation/trashBin/TrashBinPresenter.js +114 -0
- package/presentation/trashBin/TrashBinPresenter.js.map +1 -0
- package/presentation/trashBin/abstractions.d.ts +105 -0
- package/presentation/trashBin/abstractions.js +9 -0
- package/presentation/trashBin/abstractions.js.map +1 -0
- package/presentation/trashBin/components/Actions/DeleteItemAction.d.ts +2 -0
- package/presentation/trashBin/components/Actions/DeleteItemAction.js +20 -0
- package/presentation/trashBin/components/Actions/DeleteItemAction.js.map +1 -0
- package/presentation/trashBin/components/Actions/RestoreItemAction.d.ts +2 -0
- package/presentation/trashBin/components/Actions/RestoreItemAction.js +19 -0
- package/presentation/trashBin/components/Actions/RestoreItemAction.js.map +1 -0
- package/presentation/trashBin/components/Actions/index.d.ts +2 -0
- package/presentation/trashBin/components/Actions/index.js +2 -0
- package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +4 -0
- package/presentation/trashBin/components/BulkActions/DeleteItems.js +72 -0
- package/presentation/trashBin/components/BulkActions/DeleteItems.js.map +1 -0
- package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +4 -0
- package/presentation/trashBin/components/BulkActions/RestoreItems.js +81 -0
- package/presentation/trashBin/components/BulkActions/RestoreItems.js.map +1 -0
- package/presentation/trashBin/components/BulkActions/RestoreItemsReportMessage.d.ts +5 -0
- package/presentation/trashBin/components/BulkActions/RestoreItemsReportMessage.js +12 -0
- package/presentation/trashBin/components/BulkActions/RestoreItemsReportMessage.js.map +1 -0
- package/presentation/trashBin/components/BulkActions/index.d.ts +2 -0
- package/presentation/trashBin/components/BulkActions/index.js +2 -0
- package/presentation/trashBin/components/Cells/CellActions.d.ts +2 -0
- package/presentation/trashBin/components/Cells/CellActions.js +18 -0
- package/presentation/trashBin/components/Cells/CellActions.js.map +1 -0
- package/presentation/trashBin/components/Cells/CellCreatedBy.d.ts +2 -0
- package/presentation/trashBin/components/Cells/CellCreatedBy.js +11 -0
- package/presentation/trashBin/components/Cells/CellCreatedBy.js.map +1 -0
- package/presentation/trashBin/components/Cells/CellDeletedBy.d.ts +2 -0
- package/presentation/trashBin/components/Cells/CellDeletedBy.js +11 -0
- package/presentation/trashBin/components/Cells/CellDeletedBy.js.map +1 -0
- package/presentation/trashBin/components/Cells/CellDeletedOn.d.ts +2 -0
- package/presentation/trashBin/components/Cells/CellDeletedOn.js +14 -0
- package/presentation/trashBin/components/Cells/CellDeletedOn.js.map +1 -0
- package/presentation/trashBin/components/Cells/CellTitle.d.ts +2 -0
- package/presentation/trashBin/components/Cells/CellTitle.js +21 -0
- package/presentation/trashBin/components/Cells/CellTitle.js.map +1 -0
- package/presentation/trashBin/components/Cells/index.d.ts +5 -0
- package/presentation/trashBin/components/Cells/index.js +5 -0
- package/presentation/trashBin/components/TrashBinConfigs.d.ts +2 -0
- package/presentation/trashBin/components/TrashBinConfigs.js +55 -0
- package/presentation/trashBin/components/TrashBinConfigs.js.map +1 -0
- package/presentation/trashBin/components/TrashBinOverlay.d.ts +12 -0
- package/presentation/trashBin/components/TrashBinOverlay.js +139 -0
- package/presentation/trashBin/components/TrashBinOverlay.js.map +1 -0
- package/presentation/trashBin/components/TrashBinTable.d.ts +2 -0
- package/presentation/trashBin/components/TrashBinTable.js +48 -0
- package/presentation/trashBin/components/TrashBinTable.js.map +1 -0
- package/presentation/trashBin/configs/Browser/BulkAction.d.ts +34 -0
- package/presentation/trashBin/configs/Browser/BulkAction.js +59 -0
- package/presentation/trashBin/configs/Browser/BulkAction.js.map +1 -0
- package/presentation/trashBin/configs/Browser/EntryAction.d.ts +18 -0
- package/presentation/trashBin/configs/Browser/EntryAction.js +36 -0
- package/presentation/trashBin/configs/Browser/EntryAction.js.map +1 -0
- package/presentation/trashBin/configs/Browser/Table/Column.d.ts +16 -0
- package/presentation/trashBin/configs/Browser/Table/Column.js +9 -0
- package/presentation/trashBin/configs/Browser/Table/Column.js.map +1 -0
- package/presentation/trashBin/configs/Browser/Table/Sorting.d.ts +5 -0
- package/presentation/trashBin/configs/Browser/Table/Sorting.js +6 -0
- package/presentation/trashBin/configs/Browser/Table/Sorting.js.map +1 -0
- package/presentation/trashBin/configs/Browser/Table/index.d.ts +18 -0
- package/presentation/trashBin/configs/Browser/Table/index.js +9 -0
- package/presentation/trashBin/configs/Browser/Table/index.js.map +1 -0
- package/presentation/trashBin/configs/Browser/index.d.ts +40 -0
- package/presentation/trashBin/configs/Browser/index.js +11 -0
- package/presentation/trashBin/configs/Browser/index.js.map +1 -0
- package/presentation/trashBin/configs/TrashBinListConfig.d.ts +46 -0
- package/presentation/trashBin/configs/TrashBinListConfig.js +43 -0
- package/presentation/trashBin/configs/TrashBinListConfig.js.map +1 -0
- package/presentation/trashBin/configs/index.d.ts +1 -0
- package/presentation/trashBin/configs/index.js +1 -0
- package/presentation/trashBin/feature.d.ts +3 -0
- package/presentation/trashBin/feature.js +17 -0
- package/presentation/trashBin/feature.js.map +1 -0
- package/presentation/trashBin/hooks/index.d.ts +4 -0
- package/presentation/trashBin/hooks/index.js +4 -0
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.d.ts +8 -0
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.js +33 -0
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.js.map +1 -0
- package/presentation/trashBin/hooks/useRestoreTrashBinItem.d.ts +8 -0
- package/presentation/trashBin/hooks/useRestoreTrashBinItem.js +35 -0
- package/presentation/trashBin/hooks/useRestoreTrashBinItem.js.map +1 -0
- package/presentation/trashBin/hooks/useTrashBinItem.d.ts +11 -0
- package/presentation/trashBin/hooks/useTrashBinItem.js +7 -0
- package/presentation/trashBin/hooks/useTrashBinItem.js.map +1 -0
- package/presentation/trashBin/hooks/useTrashBinPresenter.d.ts +13 -0
- package/presentation/trashBin/hooks/useTrashBinPresenter.js +7 -0
- package/presentation/trashBin/hooks/useTrashBinPresenter.js.map +1 -0
- package/presentation/trashBin/index.d.ts +6 -0
- package/presentation/trashBin/index.js +6 -0
- package/base/plugins/AddGraphQLQuerySelection.d.ts +0 -8
- package/base/plugins/AddGraphQLQuerySelection.js +0 -19
- package/base/plugins/AddGraphQLQuerySelection.js.map +0 -1
- package/base/providers/ApolloProvider.d.ts +0 -13
- package/base/providers/ApolloProvider.js +0 -10
- package/base/providers/ApolloProvider.js.map +0 -1
- package/components/IconPicker/plugins/graphql.d.ts +0 -20
- package/components/IconPicker/plugins/graphql.js +0 -22
- package/components/IconPicker/plugins/graphql.js.map +0 -1
- package/components/RoleAutocomplete/graphql.d.ts +0 -1
- package/components/RoleAutocomplete/graphql.js +0 -19
- package/components/RoleAutocomplete/graphql.js.map +0 -1
- package/components/RoleAutocomplete/index.d.ts +0 -7
- package/components/RoleAutocomplete/index.js +0 -26
- package/components/RoleAutocomplete/index.js.map +0 -1
- package/components/RolesMultiAutocomplete/graphql.d.ts +0 -1
- package/components/RolesMultiAutocomplete/graphql.js +0 -24
- package/components/RolesMultiAutocomplete/graphql.js.map +0 -1
- package/components/TeamAutocomplete/graphql.d.ts +0 -1
- package/components/TeamAutocomplete/graphql.js +0 -19
- package/components/TeamAutocomplete/graphql.js.map +0 -1
- package/components/TeamsMultiAutocomplete/graphql.d.ts +0 -1
- package/components/TeamsMultiAutocomplete/graphql.js +0 -24
- package/components/TeamsMultiAutocomplete/graphql.js.map +0 -1
- package/config/AdminConfig/LexicalTheme/AllowCustomColors.d.ts +0 -5
- package/config/AdminConfig/LexicalTheme/AllowCustomColors.js +0 -18
- package/config/AdminConfig/LexicalTheme/AllowCustomColors.js.map +0 -1
- package/features/apolloClient/abstraction.d.ts +0 -5
- package/features/apolloClient/abstraction.js +0 -5
- package/features/apolloClient/abstraction.js.map +0 -1
- package/features/apolloClient/feature.d.ts +0 -2
- package/features/apolloClient/feature.js +0 -31
- package/features/apolloClient/feature.js.map +0 -1
- package/plugins/MenuPlugin.d.ts +0 -37
- package/plugins/MenuPlugin.js +0 -20
- package/plugins/MenuPlugin.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import react, { createContext, useContext, useMemo } from "react";
|
|
2
2
|
import { observer } from "mobx-react-lite";
|
|
3
|
-
import { Grid, IconButton, Tabs, Tooltip, useToast } from "@webiny/admin-ui";
|
|
3
|
+
import { Alert, Grid, IconButton, Separator, Tabs, Text, Tooltip, useToast } from "@webiny/admin-ui";
|
|
4
4
|
import { ReactComponent } from "@webiny/icons/content_copy.svg";
|
|
5
5
|
import { ReactComponent as content_paste_svg_ReactComponent } from "@webiny/icons/content_paste.svg";
|
|
6
6
|
import { DevToolsSection } from "@webiny/react-properties";
|
|
@@ -9,7 +9,7 @@ import { DeveloperMode } from "../../components/DeveloperMode/DeveloperMode.js";
|
|
|
9
9
|
import { useFieldRenderers } from "./useFieldRenderers.js";
|
|
10
10
|
import { useLayoutRenderers } from "./useLayoutRenderers.js";
|
|
11
11
|
function renderTabIcon(icon) {
|
|
12
|
-
if (!icon) return;
|
|
12
|
+
if (!icon || "string" != typeof icon.name) return;
|
|
13
13
|
return /*#__PURE__*/ react.createElement(FontAwesomeIcon, {
|
|
14
14
|
icon: icon.name.split("/")
|
|
15
15
|
});
|
|
@@ -55,7 +55,13 @@ const LayoutNodeRenderer = observer(({ node })=>{
|
|
|
55
55
|
node: node
|
|
56
56
|
});
|
|
57
57
|
case "separator":
|
|
58
|
-
return /*#__PURE__*/ react.createElement(FormView_SeparatorNodeRenderer,
|
|
58
|
+
return /*#__PURE__*/ react.createElement(FormView_SeparatorNodeRenderer, {
|
|
59
|
+
node: node
|
|
60
|
+
});
|
|
61
|
+
case "alert":
|
|
62
|
+
return /*#__PURE__*/ react.createElement(FormView_AlertNodeRenderer, {
|
|
63
|
+
node: node
|
|
64
|
+
});
|
|
59
65
|
case "tabs":
|
|
60
66
|
return /*#__PURE__*/ react.createElement(TabsNodeRenderer, {
|
|
61
67
|
node: node
|
|
@@ -91,11 +97,24 @@ const FieldRenderer = observer(({ field, renderers })=>{
|
|
|
91
97
|
field: field
|
|
92
98
|
});
|
|
93
99
|
});
|
|
94
|
-
const FormView_SeparatorNodeRenderer = observer(function() {
|
|
95
|
-
return /*#__PURE__*/ react.createElement("
|
|
96
|
-
|
|
100
|
+
const FormView_SeparatorNodeRenderer = observer(function({ node }) {
|
|
101
|
+
if (node.title) return /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement(Separator, {
|
|
102
|
+
variant: "accent",
|
|
103
|
+
labelPosition: "start"
|
|
104
|
+
}, node.title), node.description ? /*#__PURE__*/ react.createElement(Text, {
|
|
105
|
+
size: "sm",
|
|
106
|
+
className: "mt-xs"
|
|
107
|
+
}, node.description) : null);
|
|
108
|
+
return /*#__PURE__*/ react.createElement(Separator, {
|
|
109
|
+
variant: "dimmed"
|
|
97
110
|
});
|
|
98
111
|
});
|
|
112
|
+
const FormView_AlertNodeRenderer = observer(function({ node }) {
|
|
113
|
+
if (!node.message) return null;
|
|
114
|
+
return /*#__PURE__*/ react.createElement(Alert, {
|
|
115
|
+
type: node.alertType
|
|
116
|
+
}, node.message);
|
|
117
|
+
});
|
|
99
118
|
const TabsNodeRenderer = observer(({ node })=>{
|
|
100
119
|
const { layoutRenderers } = useFormViewRenderers();
|
|
101
120
|
if (node.renderer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/FormView.js","sources":["../../../src/features/formModel/FormView.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Grid, IconButton, Tabs, Tooltip, useToast } from \"@webiny/admin-ui\";\nimport { ReactComponent as CopyIcon } from \"@webiny/icons/content_copy.svg\";\nimport { ReactComponent as PasteIcon } from \"@webiny/icons/content_paste.svg\";\nimport { DevToolsSection } from \"@webiny/react-properties\";\nimport type {\n IFormVM,\n LayoutNodeVM,\n IRowNodeVM,\n IFieldVM,\n ITabsNodeVM,\n IElementNodeVM\n} from \"./abstractions.js\";\nimport type { Icon } from \"~/components/IconPicker/types.js\";\nimport type { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { DeveloperMode } from \"~/components/DeveloperMode/DeveloperMode.js\";\nimport { useFieldRenderers } from \"~/features/formModel/useFieldRenderers.js\";\nimport { useLayoutRenderers } from \"~/features/formModel/useLayoutRenderers.js\";\n\nexport function renderTabIcon(icon: Icon | undefined): React.ReactElement | undefined {\n if (!icon) {\n return undefined;\n }\n return <FontAwesomeIcon icon={icon.name.split(\"/\") as IconProp} />;\n}\n\n/**\n * A field renderer component receives a FieldVM and renders the appropriate UI.\n */\nexport type FieldRendererComponent = React.ComponentType<{ field: IFieldVM }>;\n\n/**\n * Map of renderer keys to React components for fields.\n * Lookup order: `{type}:{renderer}` → `{type}`.\n */\nexport type FieldRenderers = Record<string, FieldRendererComponent>;\n\n/**\n * Map of renderer keys to React components for layout nodes.\n */\nexport type LayoutRenderers = Record<string, React.ComponentType<any>>;\n\ninterface FormViewRenderers {\n fieldRenderers: FieldRenderers;\n layoutRenderers: LayoutRenderers;\n}\n\nconst FormViewRenderersContext = createContext<FormViewRenderers | null>(null);\n\nconst useFormViewRenderers = (): FormViewRenderers => {\n const ctx = useContext(FormViewRenderersContext);\n if (!ctx) {\n throw new Error(\"useFormViewRenderers must be used within a FormView.\");\n }\n return ctx;\n};\n\nexport { useFormViewRenderers };\n\ninterface FormViewProps {\n name: string;\n form: IFormVM;\n renderers?: FieldRenderers;\n layoutRenderers?: LayoutRenderers;\n}\n\n/**\n * Generic form view that walks layout nodes and renders fields.\n * This component is stateless — it reads from the FormVM and delegates to renderers.\n */\nexport const FormView = observer(({ name, form, renderers, layoutRenderers }: FormViewProps) => {\n const defaultFieldRenderers = useFieldRenderers();\n const defaultLayoutRenderers = useLayoutRenderers();\n\n const value = useMemo(\n () => ({\n fieldRenderers: renderers ?? defaultFieldRenderers,\n layoutRenderers: layoutRenderers ?? defaultLayoutRenderers\n }),\n [renderers, defaultFieldRenderers, layoutRenderers, defaultLayoutRenderers]\n );\n\n return (\n <FormViewRenderersContext.Provider value={value}>\n <DevToolsSection name={name} group=\"Forms\" data={form.getData()} views={\"raw\"} />\n <div className=\"w-full relative flex flex-col gap-4\">\n <DevModeTools form={form} />\n {form.layout.map((node, index) => (\n <LayoutNodeRenderer key={index} node={node} />\n ))}\n </div>\n </FormViewRenderersContext.Provider>\n );\n});\n\nexport const LayoutNodeRenderer = observer(({ node }: { node: LayoutNodeVM }) => {\n switch (node.type) {\n case \"row\":\n return <RowNodeRenderer node={node} />;\n case \"separator\":\n return <SeparatorNodeRenderer />;\n case \"tabs\":\n return <TabsNodeRenderer node={node} />;\n case \"element\":\n return <ElementNodeRenderer node={node} />;\n default:\n return null;\n }\n});\n\nconst RowNodeRenderer = observer(({ node }: { node: IRowNodeVM }) => {\n const { fieldRenderers } = useFormViewRenderers();\n\n return (\n <Grid>\n {node.fields.map(field => {\n const span = Math.floor(12 / node.fields.length) as React.ComponentProps<\n typeof Grid.Column\n >[\"span\"];\n\n return (\n <Grid.Column key={field.name} span={span}>\n <FieldRenderer field={field} renderers={fieldRenderers} />\n </Grid.Column>\n );\n })}\n </Grid>\n );\n});\n\ninterface FieldRendererProps {\n field: IFieldVM;\n renderers: FieldRenderers;\n}\n\nconst FieldRenderer = observer(({ field, renderers }: FieldRendererProps) => {\n const Renderer = field.renderer ? renderers[field.renderer] : undefined;\n\n if (!Renderer) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `[FormView] No renderer found for field \"${field.name}\" (renderer: \"${field.renderer || \"none\"}\").`\n );\n }\n return null;\n }\n\n return <Renderer field={field} />;\n});\n\nconst SeparatorNodeRenderer = observer(function SeparatorNodeRenderer() {\n return <hr className=\"border-neutral-dimmed my-2\" />;\n});\n\nexport interface TabsNodeRendererProps {\n node: ITabsNodeVM;\n}\n\nconst TabsNodeRenderer = observer(({ node }: TabsNodeRendererProps) => {\n const { layoutRenderers } = useFormViewRenderers();\n\n if (node.renderer) {\n const CustomRenderer = layoutRenderers[node.renderer];\n if (CustomRenderer) {\n return <CustomRenderer node={node} />;\n }\n }\n\n return (\n <Tabs\n value={node.activeTabId}\n onValueChange={id => node.setActiveTab(id)}\n tabs={node.tabs.map(tab => (\n <Tabs.Tab\n key={tab.id}\n value={tab.id}\n icon={renderTabIcon(tab.icon)}\n trigger={\n <>\n {tab.label}\n {tab.hasErrors && (\n <span className=\"ml-1 text-destructive-default text-xs\">*</span>\n )}\n </>\n }\n disabled={tab.disabled}\n content={\n <div className={\"flex flex-col gap-4 mt-md\"}>\n {tab.layout.map((childNode, index) => (\n <LayoutNodeRenderer key={index} node={childNode} />\n ))}\n </div>\n }\n />\n ))}\n />\n );\n});\n\nconst ElementNodeRenderer = observer(({ node }: { node: IElementNodeVM }) => {\n const { fieldRenderers } = useFormViewRenderers();\n const Renderer = fieldRenderers[`element:${node.renderer}`];\n\n if (!Renderer) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(`[FormView] No renderer found for element \"${node.renderer}\".`);\n }\n return null;\n }\n\n return <Renderer field={{ ...node.props } as any} />;\n});\n\ninterface DevModelToolsProps {\n form: IFormVM;\n}\n\nconst DevModeTools = ({ form }: DevModelToolsProps) => {\n const toast = useToast();\n\n const handleCopy = () => {\n const data = form.getData();\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n toast.showSuccessToast({ title: \"Form data copied to clipboard.\" });\n };\n\n const handlePaste = async () => {\n try {\n const text = await navigator.clipboard.readText();\n const data = JSON.parse(text);\n form.setData(data);\n toast.showSuccessToast({ title: \"Form data imported from clipboard.\" });\n } catch {\n toast.showWarningToast({\n title: \"Failed to import. Make sure clipboard contains valid JSON.\"\n });\n }\n };\n return (\n <DeveloperMode>\n <div className=\"absolute top-0 right-0 w-[200px] h-[80px] z-10 group/devtools\">\n <div className=\"absolute top-0 right-0 flex gap-xs opacity-0 group-hover/devtools:opacity-100 transition-opacity\">\n <Tooltip\n content=\"Copy form data to clipboard\"\n trigger={\n <IconButton\n variant={\"secondary\"}\n icon={<CopyIcon />}\n onClick={handleCopy}\n size=\"sm\"\n />\n }\n />\n <Tooltip\n content=\"Paste form data from clipboard\"\n trigger={\n <IconButton\n variant={\"secondary\"}\n icon={<PasteIcon />}\n onClick={handlePaste}\n size=\"sm\"\n />\n }\n />\n </div>\n </div>\n </DeveloperMode>\n );\n};\n"],"names":["renderTabIcon","icon","FontAwesomeIcon","FormViewRenderersContext","createContext","useFormViewRenderers","ctx","useContext","Error","FormView","observer","name","form","renderers","layoutRenderers","defaultFieldRenderers","useFieldRenderers","defaultLayoutRenderers","useLayoutRenderers","value","useMemo","DevToolsSection","DevModeTools","node","index","LayoutNodeRenderer","RowNodeRenderer","SeparatorNodeRenderer","TabsNodeRenderer","ElementNodeRenderer","fieldRenderers","Grid","field","span","Math","FieldRenderer","Renderer","undefined","process","console","CustomRenderer","Tabs","id","tab","childNode","toast","useToast","handleCopy","data","navigator","JSON","handlePaste","text","DeveloperMode","Tooltip","IconButton","CopyIcon","PasteIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/formModel/FormView.js","sources":["../../../src/features/formModel/FormView.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport {\n Alert,\n Grid,\n IconButton,\n Separator,\n Tabs,\n Text,\n Tooltip,\n useToast\n} from \"@webiny/admin-ui\";\nimport { ReactComponent as CopyIcon } from \"@webiny/icons/content_copy.svg\";\nimport { ReactComponent as PasteIcon } from \"@webiny/icons/content_paste.svg\";\nimport { DevToolsSection } from \"@webiny/react-properties\";\nimport type {\n IFormVM,\n LayoutNodeVM,\n IRowNodeVM,\n IFieldVM,\n ITabsNodeVM,\n ISeparatorNodeVM,\n IAlertNodeVM,\n IElementNodeVM\n} from \"./abstractions.js\";\nimport type { Icon } from \"~/components/IconPicker/types.js\";\nimport type { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { DeveloperMode } from \"~/components/DeveloperMode/DeveloperMode.js\";\nimport { useFieldRenderers } from \"~/features/formModel/useFieldRenderers.js\";\nimport { useLayoutRenderers } from \"~/features/formModel/useLayoutRenderers.js\";\n\nexport function renderTabIcon(icon: Icon | undefined): React.ReactElement | undefined {\n if (!icon || typeof icon.name !== \"string\") {\n return undefined;\n }\n return <FontAwesomeIcon icon={icon.name.split(\"/\") as IconProp} />;\n}\n\n/**\n * A field renderer component receives a FieldVM and renders the appropriate UI.\n */\nexport type FieldRendererComponent = React.ComponentType<{ field: IFieldVM }>;\n\n/**\n * Map of renderer keys to React components for fields.\n * Lookup order: `{type}:{renderer}` → `{type}`.\n */\nexport type FieldRenderers = Record<string, FieldRendererComponent>;\n\n/**\n * Map of renderer keys to React components for layout nodes.\n */\nexport type LayoutRenderers = Record<string, React.ComponentType<any>>;\n\ninterface FormViewRenderers {\n fieldRenderers: FieldRenderers;\n layoutRenderers: LayoutRenderers;\n}\n\nconst FormViewRenderersContext = createContext<FormViewRenderers | null>(null);\n\nconst useFormViewRenderers = (): FormViewRenderers => {\n const ctx = useContext(FormViewRenderersContext);\n if (!ctx) {\n throw new Error(\"useFormViewRenderers must be used within a FormView.\");\n }\n return ctx;\n};\n\nexport { useFormViewRenderers };\n\ninterface FormViewProps {\n name: string;\n form: IFormVM;\n renderers?: FieldRenderers;\n layoutRenderers?: LayoutRenderers;\n}\n\n/**\n * Generic form view that walks layout nodes and renders fields.\n * This component is stateless — it reads from the FormVM and delegates to renderers.\n */\nexport const FormView = observer(({ name, form, renderers, layoutRenderers }: FormViewProps) => {\n const defaultFieldRenderers = useFieldRenderers();\n const defaultLayoutRenderers = useLayoutRenderers();\n\n const value = useMemo(\n () => ({\n fieldRenderers: renderers ?? defaultFieldRenderers,\n layoutRenderers: layoutRenderers ?? defaultLayoutRenderers\n }),\n [renderers, defaultFieldRenderers, layoutRenderers, defaultLayoutRenderers]\n );\n\n return (\n <FormViewRenderersContext.Provider value={value}>\n <DevToolsSection name={name} group=\"Forms\" data={form.getData()} views={\"raw\"} />\n <div className=\"w-full relative flex flex-col gap-4\">\n <DevModeTools form={form} />\n {form.layout.map((node, index) => (\n <LayoutNodeRenderer key={index} node={node} />\n ))}\n </div>\n </FormViewRenderersContext.Provider>\n );\n});\n\nexport const LayoutNodeRenderer = observer(({ node }: { node: LayoutNodeVM }) => {\n switch (node.type) {\n case \"row\":\n return <RowNodeRenderer node={node} />;\n case \"separator\":\n return <SeparatorNodeRenderer node={node} />;\n case \"alert\":\n return <AlertNodeRenderer node={node} />;\n case \"tabs\":\n return <TabsNodeRenderer node={node} />;\n case \"element\":\n return <ElementNodeRenderer node={node} />;\n default:\n return null;\n }\n});\n\nconst RowNodeRenderer = observer(({ node }: { node: IRowNodeVM }) => {\n const { fieldRenderers } = useFormViewRenderers();\n\n return (\n <Grid>\n {node.fields.map(field => {\n const span = Math.floor(12 / node.fields.length) as React.ComponentProps<\n typeof Grid.Column\n >[\"span\"];\n\n return (\n <Grid.Column key={field.name} span={span}>\n <FieldRenderer field={field} renderers={fieldRenderers} />\n </Grid.Column>\n );\n })}\n </Grid>\n );\n});\n\ninterface FieldRendererProps {\n field: IFieldVM;\n renderers: FieldRenderers;\n}\n\nconst FieldRenderer = observer(({ field, renderers }: FieldRendererProps) => {\n const Renderer = field.renderer ? renderers[field.renderer] : undefined;\n\n if (!Renderer) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `[FormView] No renderer found for field \"${field.name}\" (renderer: \"${field.renderer || \"none\"}\").`\n );\n }\n return null;\n }\n\n return <Renderer field={field} />;\n});\n\nconst SeparatorNodeRenderer = observer(function SeparatorNodeRenderer({\n node\n}: {\n node: ISeparatorNodeVM;\n}) {\n if (node.title) {\n return (\n <div>\n <Separator variant={\"accent\"} labelPosition={\"start\"}>\n {node.title}\n </Separator>\n {node.description ? (\n <Text size={\"sm\"} className={\"mt-xs\"}>\n {node.description}\n </Text>\n ) : null}\n </div>\n );\n }\n return <Separator variant={\"dimmed\"} />;\n});\n\nconst AlertNodeRenderer = observer(function AlertNodeRenderer({ node }: { node: IAlertNodeVM }) {\n if (!node.message) {\n return null;\n }\n return <Alert type={node.alertType}>{node.message}</Alert>;\n});\n\nexport interface TabsNodeRendererProps {\n node: ITabsNodeVM;\n}\n\nconst TabsNodeRenderer = observer(({ node }: TabsNodeRendererProps) => {\n const { layoutRenderers } = useFormViewRenderers();\n\n if (node.renderer) {\n const CustomRenderer = layoutRenderers[node.renderer];\n if (CustomRenderer) {\n return <CustomRenderer node={node} />;\n }\n }\n\n return (\n <Tabs\n value={node.activeTabId}\n onValueChange={id => node.setActiveTab(id)}\n tabs={node.tabs.map(tab => (\n <Tabs.Tab\n key={tab.id}\n value={tab.id}\n icon={renderTabIcon(tab.icon)}\n trigger={\n <>\n {tab.label}\n {tab.hasErrors && (\n <span className=\"ml-1 text-destructive-default text-xs\">*</span>\n )}\n </>\n }\n disabled={tab.disabled}\n content={\n <div className={\"flex flex-col gap-4 mt-md\"}>\n {tab.layout.map((childNode, index) => (\n <LayoutNodeRenderer key={index} node={childNode} />\n ))}\n </div>\n }\n />\n ))}\n />\n );\n});\n\nconst ElementNodeRenderer = observer(({ node }: { node: IElementNodeVM }) => {\n const { fieldRenderers } = useFormViewRenderers();\n const Renderer = fieldRenderers[`element:${node.renderer}`];\n\n if (!Renderer) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(`[FormView] No renderer found for element \"${node.renderer}\".`);\n }\n return null;\n }\n\n return <Renderer field={{ ...node.props } as any} />;\n});\n\ninterface DevModelToolsProps {\n form: IFormVM;\n}\n\nconst DevModeTools = ({ form }: DevModelToolsProps) => {\n const toast = useToast();\n\n const handleCopy = () => {\n const data = form.getData();\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n toast.showSuccessToast({ title: \"Form data copied to clipboard.\" });\n };\n\n const handlePaste = async () => {\n try {\n const text = await navigator.clipboard.readText();\n const data = JSON.parse(text);\n form.setData(data);\n toast.showSuccessToast({ title: \"Form data imported from clipboard.\" });\n } catch {\n toast.showWarningToast({\n title: \"Failed to import. Make sure clipboard contains valid JSON.\"\n });\n }\n };\n return (\n <DeveloperMode>\n <div className=\"absolute top-0 right-0 w-[200px] h-[80px] z-10 group/devtools\">\n <div className=\"absolute top-0 right-0 flex gap-xs opacity-0 group-hover/devtools:opacity-100 transition-opacity\">\n <Tooltip\n content=\"Copy form data to clipboard\"\n trigger={\n <IconButton\n variant={\"secondary\"}\n icon={<CopyIcon />}\n onClick={handleCopy}\n size=\"sm\"\n />\n }\n />\n <Tooltip\n content=\"Paste form data from clipboard\"\n trigger={\n <IconButton\n variant={\"secondary\"}\n icon={<PasteIcon />}\n onClick={handlePaste}\n size=\"sm\"\n />\n }\n />\n </div>\n </div>\n </DeveloperMode>\n );\n};\n"],"names":["renderTabIcon","icon","FontAwesomeIcon","FormViewRenderersContext","createContext","useFormViewRenderers","ctx","useContext","Error","FormView","observer","name","form","renderers","layoutRenderers","defaultFieldRenderers","useFieldRenderers","defaultLayoutRenderers","useLayoutRenderers","value","useMemo","DevToolsSection","DevModeTools","node","index","LayoutNodeRenderer","RowNodeRenderer","SeparatorNodeRenderer","AlertNodeRenderer","TabsNodeRenderer","ElementNodeRenderer","fieldRenderers","Grid","field","span","Math","FieldRenderer","Renderer","undefined","process","console","Separator","Text","Alert","CustomRenderer","Tabs","id","tab","childNode","toast","useToast","handleCopy","data","navigator","JSON","handlePaste","text","DeveloperMode","Tooltip","IconButton","CopyIcon","PasteIcon"],"mappings":"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"}
|
|
@@ -21,11 +21,12 @@ export declare class TabBuilder implements TabBuilderInternal {
|
|
|
21
21
|
export declare class TabsBuilder implements ITabsBuilder {
|
|
22
22
|
private _id;
|
|
23
23
|
private _renderer;
|
|
24
|
+
private _rendererSettings;
|
|
24
25
|
private _rules;
|
|
25
26
|
private _pendingTabs;
|
|
26
27
|
private _lastAddedIdx;
|
|
27
28
|
constructor(id?: string);
|
|
28
|
-
renderer(name: string): this;
|
|
29
|
+
renderer(name: string, settings?: Record<string, unknown>): this;
|
|
29
30
|
tab(tabId: string, configure: (tab: ITabBuilder) => void): this;
|
|
30
31
|
before(_target: string): this;
|
|
31
32
|
after(_target: string): this;
|
|
@@ -36,7 +37,7 @@ export declare class TabsAccessBuilder implements ITabsBuilder {
|
|
|
36
37
|
private _node;
|
|
37
38
|
private _lastAddedIdx;
|
|
38
39
|
constructor(_node: ITabsNode);
|
|
39
|
-
renderer(name: string): this;
|
|
40
|
+
renderer(name: string, settings?: Record<string, unknown>): this;
|
|
40
41
|
tab(tabId: string, configure: (tab: ITabBuilder) => void): this;
|
|
41
42
|
before(target: string): this;
|
|
42
43
|
after(target: string): this;
|
|
@@ -47,8 +47,9 @@ class TabsBuilder {
|
|
|
47
47
|
this._lastAddedIdx = -1;
|
|
48
48
|
this._id = id;
|
|
49
49
|
}
|
|
50
|
-
renderer(name) {
|
|
50
|
+
renderer(name, settings) {
|
|
51
51
|
this._renderer = name;
|
|
52
|
+
this._rendererSettings = settings;
|
|
52
53
|
return this;
|
|
53
54
|
}
|
|
54
55
|
tab(tabId, configure) {
|
|
@@ -76,6 +77,7 @@ class TabsBuilder {
|
|
|
76
77
|
type: "tabs",
|
|
77
78
|
id: this._id,
|
|
78
79
|
renderer: this._renderer,
|
|
80
|
+
rendererSettings: this._rendererSettings,
|
|
79
81
|
tabs: this._pendingTabs.map((p)=>p.tabBuilder._build(p.tabId)),
|
|
80
82
|
rules: this._rules
|
|
81
83
|
};
|
|
@@ -86,8 +88,9 @@ class TabsAccessBuilder {
|
|
|
86
88
|
this._node = _node;
|
|
87
89
|
this._lastAddedIdx = -1;
|
|
88
90
|
}
|
|
89
|
-
renderer(name) {
|
|
91
|
+
renderer(name, settings) {
|
|
90
92
|
this._node.renderer = name;
|
|
93
|
+
this._node.rendererSettings = settings;
|
|
91
94
|
return this;
|
|
92
95
|
}
|
|
93
96
|
tab(tabId, configure) {
|
|
@@ -158,13 +161,60 @@ class LayoutBuilderFactory {
|
|
|
158
161
|
return builder;
|
|
159
162
|
},
|
|
160
163
|
separator () {
|
|
161
|
-
|
|
164
|
+
let _title;
|
|
165
|
+
let _description;
|
|
166
|
+
let _rules;
|
|
167
|
+
const builder = {
|
|
168
|
+
title (text) {
|
|
169
|
+
_title = text;
|
|
170
|
+
return builder;
|
|
171
|
+
},
|
|
172
|
+
description (text) {
|
|
173
|
+
_description = text;
|
|
174
|
+
return builder;
|
|
175
|
+
},
|
|
176
|
+
rules (r) {
|
|
177
|
+
_rules = r;
|
|
178
|
+
return builder;
|
|
179
|
+
},
|
|
162
180
|
build () {
|
|
163
181
|
return {
|
|
164
|
-
type: "separator"
|
|
182
|
+
type: "separator",
|
|
183
|
+
title: _title,
|
|
184
|
+
description: _description,
|
|
185
|
+
rules: _rules
|
|
165
186
|
};
|
|
166
187
|
}
|
|
167
188
|
};
|
|
189
|
+
return builder;
|
|
190
|
+
},
|
|
191
|
+
alert () {
|
|
192
|
+
let _message;
|
|
193
|
+
let _alertType = "info";
|
|
194
|
+
let _rules;
|
|
195
|
+
const builder = {
|
|
196
|
+
message (text) {
|
|
197
|
+
_message = text;
|
|
198
|
+
return builder;
|
|
199
|
+
},
|
|
200
|
+
alertType (type) {
|
|
201
|
+
_alertType = type;
|
|
202
|
+
return builder;
|
|
203
|
+
},
|
|
204
|
+
rules (r) {
|
|
205
|
+
_rules = r;
|
|
206
|
+
return builder;
|
|
207
|
+
},
|
|
208
|
+
build () {
|
|
209
|
+
return {
|
|
210
|
+
type: "alert",
|
|
211
|
+
message: _message,
|
|
212
|
+
alertType: _alertType,
|
|
213
|
+
rules: _rules
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
return builder;
|
|
168
218
|
},
|
|
169
219
|
tabs (id) {
|
|
170
220
|
return new TabsBuilder(id);
|
|
@@ -291,6 +341,7 @@ class LayoutBuilderFactory {
|
|
|
291
341
|
static collectBuilders(fields, builders, predicate, result) {
|
|
292
342
|
const entries = builders instanceof Map ? builders.entries() : Object.entries(builders);
|
|
293
343
|
for (const [name, builder] of entries){
|
|
344
|
+
if (!builder || "object" != typeof builder) continue;
|
|
294
345
|
if (predicate(builder)) result.push(builder);
|
|
295
346
|
const field = fields instanceof Map ? fields.get(name) : void 0;
|
|
296
347
|
if (field && isObjectField(field)) {
|
|
@@ -308,7 +359,9 @@ class LayoutBuilderFactory {
|
|
|
308
359
|
return ids;
|
|
309
360
|
}
|
|
310
361
|
static collectBuildersFlat(builders, predicate, result) {
|
|
311
|
-
for (const builder of Object.values(builders))if (
|
|
362
|
+
for (const builder of Object.values(builders))if (builder && "object" == typeof builder) {
|
|
363
|
+
if (predicate(builder)) result.push(builder);
|
|
364
|
+
}
|
|
312
365
|
}
|
|
313
366
|
}
|
|
314
367
|
export { LayoutBuilderFactory, TabBuilder, TabsAccessBuilder, TabsBuilder };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/LayoutBuilderFactory.js","sources":["../../../src/features/formModel/LayoutBuilderFactory.ts"],"sourcesContent":["import type { Icon } from \"~/components/IconPicker/types.js\";\nimport type {\n IField,\n IFieldBuilder,\n ILayoutBuilder,\n ILayoutNodeBuilder,\n ILayoutNodeHandle,\n IPositionedLayoutNode,\n IRule,\n ITabBuilder,\n ITabDefinition,\n ITabDefinitionInput,\n ITabsBuilder,\n ITabsNode,\n IRowBuilder,\n ISeparatorBuilder,\n IElementBuilder,\n IObjectBuilder,\n IRowNode,\n ISeparatorNode,\n IElementNode,\n IObjectNode,\n LayoutNode,\n LayoutPosition,\n LayoutNodeHandleMap,\n ILayoutNodeAccessHandle\n} from \"./abstractions.js\";\nimport { isObjectField } from \"./ObjectField.js\";\nimport type { IObjectFieldConfig } from \"./abstractions.js\";\n\ninterface TabBuilderInternal extends ITabBuilder {\n _build(id: string): ITabDefinition;\n}\n\nexport class TabBuilder implements TabBuilderInternal {\n private _existing: ITabDefinition | undefined;\n private _label = \"\";\n private _description: string | undefined;\n private _icon: ITabDefinition[\"icon\"];\n private _layoutFactory: ((l: ILayoutBuilder) => ILayoutNodeBuilder[]) | undefined;\n private _rules: IRule[] | undefined;\n\n constructor(existing?: ITabDefinition) {\n this._existing = existing;\n }\n\n label(text: string): this {\n if (this._existing) {\n this._existing.label = text;\n } else {\n this._label = text;\n }\n return this;\n }\n\n description(text: string): this {\n if (this._existing) {\n this._existing.description = text;\n } else {\n this._description = text;\n }\n return this;\n }\n\n icon(icon: Icon): this {\n if (this._existing) {\n this._existing.icon = icon;\n } else {\n this._icon = icon;\n }\n return this;\n }\n\n layout(factory: (l: ILayoutBuilder) => ILayoutNodeBuilder[]): this {\n if (this._existing) {\n this._existing.layout.push(\n ...LayoutBuilderFactory.buildNodes(factory(LayoutBuilderFactory.create()))\n );\n } else {\n this._layoutFactory = factory;\n }\n return this;\n }\n\n rules(r: IRule[]): this {\n if (this._existing) {\n this._existing.rules = r;\n } else {\n this._rules = r;\n }\n return this;\n }\n\n _build(id: string): ITabDefinition {\n if (this._existing) {\n return this._existing;\n }\n return {\n id,\n label: this._label,\n description: this._description,\n icon: this._icon,\n layout: this._layoutFactory\n ? LayoutBuilderFactory.buildNodes(\n this._layoutFactory(LayoutBuilderFactory.create())\n )\n : [],\n rules: this._rules\n };\n }\n}\n\nexport class TabsBuilder implements ITabsBuilder {\n private _id: string | undefined;\n private _renderer: string | undefined;\n private _rules: IRule[] | undefined;\n private _pendingTabs: { tabId: string; tabBuilder: TabBuilderInternal }[] = [];\n private _lastAddedIdx = -1;\n\n constructor(id?: string) {\n this._id = id;\n }\n\n renderer(name: string): this {\n this._renderer = name;\n return this;\n }\n\n tab(tabId: string, configure: (tab: ITabBuilder) => void): this {\n const tb = new TabBuilder();\n configure(tb);\n this._pendingTabs.push({ tabId, tabBuilder: tb });\n this._lastAddedIdx = this._pendingTabs.length - 1;\n return this;\n }\n\n before(_target: string): this {\n return this;\n }\n\n after(_target: string): this {\n return this;\n }\n\n rules(r: IRule[]): this {\n this._rules = r;\n return this;\n }\n\n build(): ITabsNode {\n return {\n type: \"tabs\",\n id: this._id,\n renderer: this._renderer,\n tabs: this._pendingTabs.map(p => p.tabBuilder._build(p.tabId)),\n rules: this._rules\n };\n }\n}\n\nexport class TabsAccessBuilder implements ITabsBuilder {\n private _lastAddedIdx = -1;\n\n constructor(private _node: ITabsNode) {}\n\n renderer(name: string): this {\n this._node.renderer = name;\n return this;\n }\n\n tab(tabId: string, configure: (tab: ITabBuilder) => void): this {\n const existing = this._node.tabs.find(t => t.id === tabId);\n if (existing) {\n configure(new TabBuilder(existing));\n } else {\n const tb = new TabBuilder();\n configure(tb);\n this._node.tabs.push(tb._build(tabId));\n this._lastAddedIdx = this._node.tabs.length - 1;\n }\n return this;\n }\n\n before(target: string): this {\n if (this._lastAddedIdx >= 0) {\n const tab = this._node.tabs.splice(this._lastAddedIdx, 1)[0];\n const targetIdx = this._node.tabs.findIndex(t => t.id === target);\n if (targetIdx !== -1) {\n this._node.tabs.splice(targetIdx, 0, tab);\n } else {\n this._node.tabs.push(tab);\n }\n }\n return this;\n }\n\n after(target: string): this {\n if (this._lastAddedIdx >= 0) {\n const tab = this._node.tabs.splice(this._lastAddedIdx, 1)[0];\n const targetIdx = this._node.tabs.findIndex(t => t.id === target);\n if (targetIdx !== -1) {\n this._node.tabs.splice(targetIdx + 1, 0, tab);\n } else {\n this._node.tabs.push(tab);\n }\n }\n return this;\n }\n\n rules(r: IRule[]): this {\n this._node.rules = r;\n return this;\n }\n\n build(): ITabsNode {\n return this._node;\n }\n}\n\nexport class LayoutBuilderFactory {\n static create(): ILayoutBuilder {\n return {\n row(...fieldIds: string[]): IRowBuilder {\n let position: LayoutPosition | undefined;\n const builder: IRowBuilder = {\n before(target: string) {\n position = { type: \"before\", target };\n return builder;\n },\n after(target: string) {\n position = { type: \"after\", target };\n return builder;\n },\n build(): IRowNode {\n return { type: \"row\", fieldIds, position };\n }\n };\n return builder;\n },\n separator(): ISeparatorBuilder {\n return {\n build(): ISeparatorNode {\n return { type: \"separator\" };\n }\n };\n },\n tabs(id?: string): ITabsBuilder {\n return new TabsBuilder(id);\n },\n element(renderer: string, props?: Record<string, unknown>): IElementBuilder {\n return {\n build(): IElementNode {\n return { type: \"element\", renderer, props };\n }\n };\n },\n object(\n fieldName: string,\n inner:\n | ((layout: ILayoutBuilder) => ILayoutNodeBuilder[])\n | Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): IObjectBuilder {\n return {\n build(): IObjectNode {\n return {\n type: \"object\",\n fieldName,\n inner: LayoutBuilderFactory.resolveObjectInner(inner)\n };\n }\n };\n }\n };\n }\n\n static buildNodes(builders: ILayoutNodeBuilder[]): LayoutNode[] {\n return builders.map(b => b.build());\n }\n\n static resolvePositionedRows(nodes: LayoutNode[]): LayoutNode[] {\n const result: LayoutNode[] = [];\n const deferred: { node: LayoutNode; position: LayoutPosition }[] = [];\n\n for (const node of nodes) {\n if (node.type === \"row\" && node.position) {\n deferred.push({ node, position: node.position });\n } else {\n result.push(node);\n }\n }\n\n for (const { node, position } of deferred) {\n const targetIndex = result.findIndex(\n n => n.type === \"row\" && (n as IRowNode).fieldIds.includes(position.target)\n );\n if (targetIndex === -1) {\n result.push(node);\n continue;\n }\n const insertAt = position.type === \"after\" ? targetIndex + 1 : targetIndex;\n result.splice(insertAt, 0, node);\n }\n\n return result;\n }\n\n static resolveObjectInner(\n inner:\n | ((layout: ILayoutBuilder) => ILayoutNodeBuilder[])\n | Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): LayoutNode[] | Record<string, LayoutNode[]> {\n const api = LayoutBuilderFactory.create();\n if (typeof inner === \"function\") {\n return LayoutBuilderFactory.resolvePositionedRows(\n LayoutBuilderFactory.buildNodes(inner(api))\n );\n }\n const resolved: Record<string, LayoutNode[]> = {};\n for (const [tplId, factory] of Object.entries(inner)) {\n resolved[tplId] = LayoutBuilderFactory.resolvePositionedRows(\n LayoutBuilderFactory.buildNodes(factory(api))\n );\n }\n return resolved;\n }\n\n static createNodeHandle(node: LayoutNode): ILayoutNodeHandle {\n const handle: ILayoutNodeHandle = {\n node,\n before(target: string): IPositionedLayoutNode {\n handle.position = { type: \"before\", target };\n return handle;\n },\n after(target: string): IPositionedLayoutNode {\n handle.position = { type: \"after\", target };\n return handle;\n },\n replace(target: string): IPositionedLayoutNode {\n handle.position = { type: \"replace\", target };\n return handle;\n }\n };\n return handle;\n }\n\n static matchesNodeId(node: LayoutNode, nodeId: string): boolean {\n if (\"id\" in node && node.id === nodeId) {\n return true;\n }\n if (node.type === \"object\" && node.fieldName === nodeId) {\n return true;\n }\n return false;\n }\n\n static findNodeById(layout: LayoutNode[], nodeId: string): LayoutNode | undefined {\n for (const node of layout) {\n if (LayoutBuilderFactory.matchesNodeId(node, nodeId)) {\n return node;\n }\n if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n const found = LayoutBuilderFactory.findNodeById(tab.layout, nodeId);\n if (found) {\n return found;\n }\n }\n }\n }\n return undefined;\n }\n\n static resolveTabDefinition(input: ITabDefinitionInput): ITabDefinition {\n const api = LayoutBuilderFactory.create();\n return {\n id: input.id,\n label: input.label,\n description: input.description,\n icon: input.icon,\n rules: input.rules,\n layout: LayoutBuilderFactory.buildNodes(input.layout(api))\n };\n }\n\n static tabsNodeKey(node: ITabsNode): string {\n return `__tabs_${node.tabs.map(t => t.id).join(\"_\")}`;\n }\n\n static accessNode(layout: LayoutNode[], nodeId: string): ILayoutNodeAccessHandle {\n return {\n as: <T extends keyof LayoutNodeHandleMap>(type: T): LayoutNodeHandleMap[T] => {\n const node = LayoutBuilderFactory.findNodeById(layout, nodeId);\n if (!node) {\n throw new Error(`Layout node \"${nodeId}\" not found.`);\n }\n if (node.type !== type) {\n throw new Error(\n `Layout node \"${nodeId}\" is type \"${node.type}\", not \"${type}\".`\n );\n }\n\n if (type === \"tabs\") {\n return new TabsAccessBuilder(\n node as ITabsNode\n ) as unknown as LayoutNodeHandleMap[T];\n }\n\n return node as unknown as LayoutNodeHandleMap[T];\n }\n };\n }\n\n static collectBuilders(\n fields: Map<string, IField>,\n builders: Map<string, IFieldBuilder> | Record<string, IFieldBuilder>,\n predicate: (builder: IFieldBuilder) => boolean,\n result: IFieldBuilder[]\n ): void {\n const entries = builders instanceof Map ? builders.entries() : Object.entries(builders);\n for (const [name, builder] of entries) {\n if (predicate(builder)) {\n result.push(builder);\n }\n const field = fields instanceof Map ? fields.get(name) : undefined;\n if (field && isObjectField(field)) {\n LayoutBuilderFactory.collectBuilders(\n field.children,\n field.config.childBuilders,\n predicate,\n result\n );\n const templates = (field.config as IObjectFieldConfig).templates;\n if (templates) {\n for (const tpl of templates) {\n LayoutBuilderFactory.collectBuildersFlat(\n tpl.childBuilders,\n predicate,\n result\n );\n }\n }\n }\n }\n }\n\n static collectFieldIds(layout: LayoutNode[]): string[] {\n const ids: string[] = [];\n for (const node of layout) {\n if (node.type === \"row\") {\n ids.push(...node.fieldIds);\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n ids.push(...LayoutBuilderFactory.collectFieldIds(tab.layout));\n }\n } else if (node.type === \"object\") {\n ids.push(node.fieldName);\n }\n }\n return ids;\n }\n\n static collectBuildersFlat(\n builders: Record<string, IFieldBuilder>,\n predicate: (builder: IFieldBuilder) => boolean,\n result: IFieldBuilder[]\n ): void {\n for (const builder of Object.values(builders)) {\n if (predicate(builder)) {\n result.push(builder);\n }\n }\n }\n}\n"],"names":["TabBuilder","existing","text","icon","factory","LayoutBuilderFactory","r","id","TabsBuilder","name","tabId","configure","tb","_target","p","TabsAccessBuilder","_node","t","target","tab","targetIdx","fieldIds","position","builder","renderer","props","fieldName","inner","builders","b","nodes","result","deferred","node","targetIndex","n","insertAt","api","resolved","tplId","Object","handle","nodeId","layout","found","input","type","Error","fields","predicate","entries","Map","field","undefined","isObjectField","templates","tpl","ids"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/formModel/LayoutBuilderFactory.js","sources":["../../../src/features/formModel/LayoutBuilderFactory.ts"],"sourcesContent":["import type { Icon } from \"~/components/IconPicker/types.js\";\nimport type {\n IField,\n IFieldBuilder,\n ILayoutBuilder,\n ILayoutNodeBuilder,\n ILayoutNodeHandle,\n IPositionedLayoutNode,\n IRule,\n ITabBuilder,\n ITabDefinition,\n ITabDefinitionInput,\n ITabsBuilder,\n ITabsNode,\n IRowBuilder,\n ISeparatorBuilder,\n IAlertBuilder,\n IElementBuilder,\n IObjectBuilder,\n IRowNode,\n ISeparatorNode,\n IAlertNode,\n IElementNode,\n IObjectNode,\n LayoutNode,\n LayoutPosition,\n LayoutNodeHandleMap,\n ILayoutNodeAccessHandle\n} from \"./abstractions.js\";\nimport { isObjectField } from \"./ObjectField.js\";\nimport type { IObjectFieldConfig } from \"./abstractions.js\";\n\ninterface TabBuilderInternal extends ITabBuilder {\n _build(id: string): ITabDefinition;\n}\n\nexport class TabBuilder implements TabBuilderInternal {\n private _existing: ITabDefinition | undefined;\n private _label = \"\";\n private _description: string | undefined;\n private _icon: ITabDefinition[\"icon\"];\n private _layoutFactory: ((l: ILayoutBuilder) => ILayoutNodeBuilder[]) | undefined;\n private _rules: IRule[] | undefined;\n\n constructor(existing?: ITabDefinition) {\n this._existing = existing;\n }\n\n label(text: string): this {\n if (this._existing) {\n this._existing.label = text;\n } else {\n this._label = text;\n }\n return this;\n }\n\n description(text: string): this {\n if (this._existing) {\n this._existing.description = text;\n } else {\n this._description = text;\n }\n return this;\n }\n\n icon(icon: Icon): this {\n if (this._existing) {\n this._existing.icon = icon;\n } else {\n this._icon = icon;\n }\n return this;\n }\n\n layout(factory: (l: ILayoutBuilder) => ILayoutNodeBuilder[]): this {\n if (this._existing) {\n this._existing.layout.push(\n ...LayoutBuilderFactory.buildNodes(factory(LayoutBuilderFactory.create()))\n );\n } else {\n this._layoutFactory = factory;\n }\n return this;\n }\n\n rules(r: IRule[]): this {\n if (this._existing) {\n this._existing.rules = r;\n } else {\n this._rules = r;\n }\n return this;\n }\n\n _build(id: string): ITabDefinition {\n if (this._existing) {\n return this._existing;\n }\n return {\n id,\n label: this._label,\n description: this._description,\n icon: this._icon,\n layout: this._layoutFactory\n ? LayoutBuilderFactory.buildNodes(\n this._layoutFactory(LayoutBuilderFactory.create())\n )\n : [],\n rules: this._rules\n };\n }\n}\n\nexport class TabsBuilder implements ITabsBuilder {\n private _id: string | undefined;\n private _renderer: string | undefined;\n private _rendererSettings: Record<string, unknown> | undefined;\n private _rules: IRule[] | undefined;\n private _pendingTabs: { tabId: string; tabBuilder: TabBuilderInternal }[] = [];\n private _lastAddedIdx = -1;\n\n constructor(id?: string) {\n this._id = id;\n }\n\n renderer(name: string, settings?: Record<string, unknown>): this {\n this._renderer = name;\n this._rendererSettings = settings;\n return this;\n }\n\n tab(tabId: string, configure: (tab: ITabBuilder) => void): this {\n const tb = new TabBuilder();\n configure(tb);\n this._pendingTabs.push({ tabId, tabBuilder: tb });\n this._lastAddedIdx = this._pendingTabs.length - 1;\n return this;\n }\n\n before(_target: string): this {\n return this;\n }\n\n after(_target: string): this {\n return this;\n }\n\n rules(r: IRule[]): this {\n this._rules = r;\n return this;\n }\n\n build(): ITabsNode {\n return {\n type: \"tabs\",\n id: this._id,\n renderer: this._renderer,\n rendererSettings: this._rendererSettings,\n tabs: this._pendingTabs.map(p => p.tabBuilder._build(p.tabId)),\n rules: this._rules\n };\n }\n}\n\nexport class TabsAccessBuilder implements ITabsBuilder {\n private _lastAddedIdx = -1;\n\n constructor(private _node: ITabsNode) {}\n\n renderer(name: string, settings?: Record<string, unknown>): this {\n this._node.renderer = name;\n this._node.rendererSettings = settings;\n return this;\n }\n\n tab(tabId: string, configure: (tab: ITabBuilder) => void): this {\n const existing = this._node.tabs.find(t => t.id === tabId);\n if (existing) {\n configure(new TabBuilder(existing));\n } else {\n const tb = new TabBuilder();\n configure(tb);\n this._node.tabs.push(tb._build(tabId));\n this._lastAddedIdx = this._node.tabs.length - 1;\n }\n return this;\n }\n\n before(target: string): this {\n if (this._lastAddedIdx >= 0) {\n const tab = this._node.tabs.splice(this._lastAddedIdx, 1)[0];\n const targetIdx = this._node.tabs.findIndex(t => t.id === target);\n if (targetIdx !== -1) {\n this._node.tabs.splice(targetIdx, 0, tab);\n } else {\n this._node.tabs.push(tab);\n }\n }\n return this;\n }\n\n after(target: string): this {\n if (this._lastAddedIdx >= 0) {\n const tab = this._node.tabs.splice(this._lastAddedIdx, 1)[0];\n const targetIdx = this._node.tabs.findIndex(t => t.id === target);\n if (targetIdx !== -1) {\n this._node.tabs.splice(targetIdx + 1, 0, tab);\n } else {\n this._node.tabs.push(tab);\n }\n }\n return this;\n }\n\n rules(r: IRule[]): this {\n this._node.rules = r;\n return this;\n }\n\n build(): ITabsNode {\n return this._node;\n }\n}\n\nexport class LayoutBuilderFactory {\n static create(): ILayoutBuilder {\n return {\n row(...fieldIds: string[]): IRowBuilder {\n let position: LayoutPosition | undefined;\n const builder: IRowBuilder = {\n before(target: string) {\n position = { type: \"before\", target };\n return builder;\n },\n after(target: string) {\n position = { type: \"after\", target };\n return builder;\n },\n build(): IRowNode {\n return { type: \"row\", fieldIds, position };\n }\n };\n return builder;\n },\n separator(): ISeparatorBuilder {\n let _title: string | undefined;\n let _description: string | undefined;\n let _rules: IRule[] | undefined;\n const builder: ISeparatorBuilder = {\n title(text: string) {\n _title = text;\n return builder;\n },\n description(text: string) {\n _description = text;\n return builder;\n },\n rules(r: IRule[]) {\n _rules = r;\n return builder;\n },\n build(): ISeparatorNode {\n return {\n type: \"separator\",\n title: _title,\n description: _description,\n rules: _rules\n };\n }\n };\n return builder;\n },\n alert(): IAlertBuilder {\n let _message: string | undefined;\n let _alertType: \"info\" | \"success\" | \"warning\" | \"danger\" = \"info\";\n let _rules: IRule[] | undefined;\n const builder: IAlertBuilder = {\n message(text: string) {\n _message = text;\n return builder;\n },\n alertType(type: \"info\" | \"success\" | \"warning\" | \"danger\") {\n _alertType = type;\n return builder;\n },\n rules(r: IRule[]) {\n _rules = r;\n return builder;\n },\n build(): IAlertNode {\n return {\n type: \"alert\",\n message: _message,\n alertType: _alertType,\n rules: _rules\n };\n }\n };\n return builder;\n },\n tabs(id?: string): ITabsBuilder {\n return new TabsBuilder(id);\n },\n element(renderer: string, props?: Record<string, unknown>): IElementBuilder {\n return {\n build(): IElementNode {\n return { type: \"element\", renderer, props };\n }\n };\n },\n object(\n fieldName: string,\n inner:\n | ((layout: ILayoutBuilder) => ILayoutNodeBuilder[])\n | Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): IObjectBuilder {\n return {\n build(): IObjectNode {\n return {\n type: \"object\",\n fieldName,\n inner: LayoutBuilderFactory.resolveObjectInner(inner)\n };\n }\n };\n }\n };\n }\n\n static buildNodes(builders: ILayoutNodeBuilder[]): LayoutNode[] {\n return builders.map(b => b.build());\n }\n\n static resolvePositionedRows(nodes: LayoutNode[]): LayoutNode[] {\n const result: LayoutNode[] = [];\n const deferred: { node: LayoutNode; position: LayoutPosition }[] = [];\n\n for (const node of nodes) {\n if (node.type === \"row\" && node.position) {\n deferred.push({ node, position: node.position });\n } else {\n result.push(node);\n }\n }\n\n for (const { node, position } of deferred) {\n const targetIndex = result.findIndex(\n n => n.type === \"row\" && (n as IRowNode).fieldIds.includes(position.target)\n );\n if (targetIndex === -1) {\n result.push(node);\n continue;\n }\n const insertAt = position.type === \"after\" ? targetIndex + 1 : targetIndex;\n result.splice(insertAt, 0, node);\n }\n\n return result;\n }\n\n static resolveObjectInner(\n inner:\n | ((layout: ILayoutBuilder) => ILayoutNodeBuilder[])\n | Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): LayoutNode[] | Record<string, LayoutNode[]> {\n const api = LayoutBuilderFactory.create();\n if (typeof inner === \"function\") {\n return LayoutBuilderFactory.resolvePositionedRows(\n LayoutBuilderFactory.buildNodes(inner(api))\n );\n }\n const resolved: Record<string, LayoutNode[]> = {};\n for (const [tplId, factory] of Object.entries(inner)) {\n resolved[tplId] = LayoutBuilderFactory.resolvePositionedRows(\n LayoutBuilderFactory.buildNodes(factory(api))\n );\n }\n return resolved;\n }\n\n static createNodeHandle(node: LayoutNode): ILayoutNodeHandle {\n const handle: ILayoutNodeHandle = {\n node,\n before(target: string): IPositionedLayoutNode {\n handle.position = { type: \"before\", target };\n return handle;\n },\n after(target: string): IPositionedLayoutNode {\n handle.position = { type: \"after\", target };\n return handle;\n },\n replace(target: string): IPositionedLayoutNode {\n handle.position = { type: \"replace\", target };\n return handle;\n }\n };\n return handle;\n }\n\n static matchesNodeId(node: LayoutNode, nodeId: string): boolean {\n if (\"id\" in node && node.id === nodeId) {\n return true;\n }\n if (node.type === \"object\" && node.fieldName === nodeId) {\n return true;\n }\n return false;\n }\n\n static findNodeById(layout: LayoutNode[], nodeId: string): LayoutNode | undefined {\n for (const node of layout) {\n if (LayoutBuilderFactory.matchesNodeId(node, nodeId)) {\n return node;\n }\n if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n const found = LayoutBuilderFactory.findNodeById(tab.layout, nodeId);\n if (found) {\n return found;\n }\n }\n }\n }\n return undefined;\n }\n\n static resolveTabDefinition(input: ITabDefinitionInput): ITabDefinition {\n const api = LayoutBuilderFactory.create();\n return {\n id: input.id,\n label: input.label,\n description: input.description,\n icon: input.icon,\n rules: input.rules,\n layout: LayoutBuilderFactory.buildNodes(input.layout(api))\n };\n }\n\n static tabsNodeKey(node: ITabsNode): string {\n return `__tabs_${node.tabs.map(t => t.id).join(\"_\")}`;\n }\n\n static accessNode(layout: LayoutNode[], nodeId: string): ILayoutNodeAccessHandle {\n return {\n as: <T extends keyof LayoutNodeHandleMap>(type: T): LayoutNodeHandleMap[T] => {\n const node = LayoutBuilderFactory.findNodeById(layout, nodeId);\n if (!node) {\n throw new Error(`Layout node \"${nodeId}\" not found.`);\n }\n if (node.type !== type) {\n throw new Error(\n `Layout node \"${nodeId}\" is type \"${node.type}\", not \"${type}\".`\n );\n }\n\n if (type === \"tabs\") {\n return new TabsAccessBuilder(\n node as ITabsNode\n ) as unknown as LayoutNodeHandleMap[T];\n }\n\n return node as unknown as LayoutNodeHandleMap[T];\n }\n };\n }\n\n static collectBuilders(\n fields: Map<string, IField>,\n builders: Map<string, IFieldBuilder> | Record<string, IFieldBuilder>,\n predicate: (builder: IFieldBuilder) => boolean,\n result: IFieldBuilder[]\n ): void {\n const entries = builders instanceof Map ? builders.entries() : Object.entries(builders);\n for (const [name, builder] of entries) {\n if (!builder || typeof builder !== \"object\") {\n continue;\n }\n if (predicate(builder)) {\n result.push(builder);\n }\n const field = fields instanceof Map ? fields.get(name) : undefined;\n if (field && isObjectField(field)) {\n LayoutBuilderFactory.collectBuilders(\n field.children,\n field.config.childBuilders,\n predicate,\n result\n );\n const templates = (field.config as IObjectFieldConfig).templates;\n if (templates) {\n for (const tpl of templates) {\n LayoutBuilderFactory.collectBuildersFlat(\n tpl.childBuilders,\n predicate,\n result\n );\n }\n }\n }\n }\n }\n\n static collectFieldIds(layout: LayoutNode[]): string[] {\n const ids: string[] = [];\n for (const node of layout) {\n if (node.type === \"row\") {\n ids.push(...node.fieldIds);\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n ids.push(...LayoutBuilderFactory.collectFieldIds(tab.layout));\n }\n } else if (node.type === \"object\") {\n ids.push(node.fieldName);\n }\n }\n return ids;\n }\n\n static collectBuildersFlat(\n builders: Record<string, IFieldBuilder>,\n predicate: (builder: IFieldBuilder) => boolean,\n result: IFieldBuilder[]\n ): void {\n for (const builder of Object.values(builders)) {\n if (!builder || typeof builder !== \"object\") {\n continue;\n }\n if (predicate(builder)) {\n result.push(builder);\n }\n }\n }\n}\n"],"names":["TabBuilder","existing","text","icon","factory","LayoutBuilderFactory","r","id","TabsBuilder","name","settings","tabId","configure","tb","_target","p","TabsAccessBuilder","_node","t","target","tab","targetIdx","fieldIds","position","builder","_title","_description","_rules","_message","_alertType","type","renderer","props","fieldName","inner","builders","b","nodes","result","deferred","node","targetIndex","n","insertAt","api","resolved","tplId","Object","handle","nodeId","layout","found","input","Error","fields","predicate","entries","Map","field","undefined","isObjectField","templates","tpl","ids"],"mappings":"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"}
|
|
@@ -15,6 +15,12 @@ class LayoutMutator {
|
|
|
15
15
|
};
|
|
16
16
|
return LayoutBuilderFactory.createNodeHandle(node);
|
|
17
17
|
},
|
|
18
|
+
alert () {
|
|
19
|
+
const node = {
|
|
20
|
+
type: "alert"
|
|
21
|
+
};
|
|
22
|
+
return LayoutBuilderFactory.createNodeHandle(node);
|
|
23
|
+
},
|
|
18
24
|
tabs (config) {
|
|
19
25
|
const node = {
|
|
20
26
|
type: "tabs",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/LayoutMutator.js","sources":["../../../src/features/formModel/LayoutMutator.ts"],"sourcesContent":["import { LayoutBuilderFactory } from \"./LayoutBuilderFactory.js\";\nimport type {\n ILayoutModifier,\n ILayoutNodeHandle,\n IPositionedLayoutNode,\n ILayoutNodeAccessHandle,\n ITabDefinitionInput,\n IRule,\n LayoutNode,\n LayoutPosition,\n IRowNode,\n ISeparatorNode,\n ITabsNode,\n IElementNode,\n IObjectNode,\n ILayoutBuilder,\n ILayoutNodeBuilder\n} from \"./abstractions.js\";\n\nexport class LayoutMutator {\n createModifierAPI(removals: string[]): ILayoutModifier {\n return {\n row(...fieldIds: string[]): ILayoutNodeHandle {\n const node: IRowNode = { type: \"row\", fieldIds };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n separator(): ILayoutNodeHandle {\n const node: ISeparatorNode = { type: \"separator\" };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n tabs(config: {\n id?: string;\n renderer?: string;\n tabs: ITabDefinitionInput[];\n rules?: IRule[];\n }): ILayoutNodeHandle {\n const node: ITabsNode = {\n type: \"tabs\",\n id: config.id,\n renderer: config.renderer,\n tabs: config.tabs.map(LayoutBuilderFactory.resolveTabDefinition),\n rules: config.rules\n };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle {\n const node: IElementNode = { type: \"element\", renderer, props };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n object(\n fieldName: string,\n inner:\n | ((layout: ILayoutBuilder) => ILayoutNodeBuilder[])\n | Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): ILayoutNodeHandle {\n const node: IObjectNode = {\n type: \"object\",\n fieldName,\n inner: LayoutBuilderFactory.resolveObjectInner(inner)\n };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n remove(target: string): void {\n removals.push(target);\n }\n };\n }\n\n applyModifications(\n layout: LayoutNode[],\n factory: (modifier: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]\n ): LayoutNode[] {\n const removals: string[] = [];\n const modifierAPI = this.createModifierAPI(removals);\n const entries = factory(modifierAPI);\n\n let result = layout;\n\n for (const target of removals) {\n result = this.removeFromLayout(result, target);\n }\n\n for (const entry of entries) {\n if (this.isPositionedNode(entry)) {\n const { node, position } = entry;\n if (position) {\n result = this.insertIntoLayout(result, node, position);\n } else {\n result = [...result, node];\n }\n } else {\n result = [...result, entry];\n }\n }\n\n return result;\n }\n\n accessNode(layout: LayoutNode[], nodeId: string): ILayoutNodeAccessHandle {\n return LayoutBuilderFactory.accessNode(layout, nodeId);\n }\n\n removeFromLayout(layout: LayoutNode[], target: string): LayoutNode[] {\n return layout\n .map(node => {\n if (node.type === \"row\") {\n const filtered = node.fieldIds.filter(id => id !== target);\n if (filtered.length === 0) {\n return null;\n }\n return { ...node, fieldIds: filtered };\n }\n if (\n (node.type === \"tabs\" && node.id === target) ||\n (node.type === \"element\" && (node.id === target || node.renderer === target)) ||\n (node.type === \"object\" && node.fieldName === target)\n ) {\n return null;\n }\n return node;\n })\n .filter(Boolean) as LayoutNode[];\n }\n\n insertIntoLayout(\n layout: LayoutNode[],\n node: LayoutNode,\n position: LayoutPosition\n ): LayoutNode[] {\n const targetIndex = this.findIndex(layout, position.target);\n\n if (targetIndex === -1) {\n return [...layout, node];\n }\n\n const result = [...layout];\n\n switch (position.type) {\n case \"before\":\n result.splice(targetIndex, 0, node);\n break;\n case \"after\":\n result.splice(targetIndex + 1, 0, node);\n break;\n case \"replace\":\n result.splice(targetIndex, 1, node);\n break;\n }\n\n return result;\n }\n\n isPositionedNode(entry: LayoutNode | IPositionedLayoutNode): entry is IPositionedLayoutNode {\n return \"node\" in entry;\n }\n\n private findIndex(layout: LayoutNode[], target: string): number {\n return layout.findIndex(node => this.nodeMatchesTarget(node, target));\n }\n\n private nodeMatchesTarget(node: LayoutNode, target: string): boolean {\n switch (node.type) {\n case \"row\":\n return node.fieldIds.includes(target);\n case \"tabs\":\n return node.id === target;\n case \"element\":\n return node.id === target || node.renderer === target;\n case \"object\":\n return node.fieldName === target;\n default:\n return false;\n }\n }\n}\n"],"names":["LayoutMutator","removals","fieldIds","node","LayoutBuilderFactory","config","renderer","props","fieldName","inner","target","layout","factory","modifierAPI","entries","result","entry","position","nodeId","filtered","id","Boolean","targetIndex"],"mappings":";
|
|
1
|
+
{"version":3,"file":"features/formModel/LayoutMutator.js","sources":["../../../src/features/formModel/LayoutMutator.ts"],"sourcesContent":["import { LayoutBuilderFactory } from \"./LayoutBuilderFactory.js\";\nimport type {\n ILayoutModifier,\n ILayoutNodeHandle,\n IPositionedLayoutNode,\n ILayoutNodeAccessHandle,\n ITabDefinitionInput,\n IRule,\n LayoutNode,\n LayoutPosition,\n IRowNode,\n ISeparatorNode,\n IAlertNode,\n ITabsNode,\n IElementNode,\n IObjectNode,\n ILayoutBuilder,\n ILayoutNodeBuilder\n} from \"./abstractions.js\";\n\nexport class LayoutMutator {\n createModifierAPI(removals: string[]): ILayoutModifier {\n return {\n row(...fieldIds: string[]): ILayoutNodeHandle {\n const node: IRowNode = { type: \"row\", fieldIds };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n separator(): ILayoutNodeHandle {\n const node: ISeparatorNode = { type: \"separator\" };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n alert(): ILayoutNodeHandle {\n const node: IAlertNode = { type: \"alert\" };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n tabs(config: {\n id?: string;\n renderer?: string;\n tabs: ITabDefinitionInput[];\n rules?: IRule[];\n }): ILayoutNodeHandle {\n const node: ITabsNode = {\n type: \"tabs\",\n id: config.id,\n renderer: config.renderer,\n tabs: config.tabs.map(LayoutBuilderFactory.resolveTabDefinition),\n rules: config.rules\n };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle {\n const node: IElementNode = { type: \"element\", renderer, props };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n object(\n fieldName: string,\n inner:\n | ((layout: ILayoutBuilder) => ILayoutNodeBuilder[])\n | Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): ILayoutNodeHandle {\n const node: IObjectNode = {\n type: \"object\",\n fieldName,\n inner: LayoutBuilderFactory.resolveObjectInner(inner)\n };\n return LayoutBuilderFactory.createNodeHandle(node);\n },\n remove(target: string): void {\n removals.push(target);\n }\n };\n }\n\n applyModifications(\n layout: LayoutNode[],\n factory: (modifier: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]\n ): LayoutNode[] {\n const removals: string[] = [];\n const modifierAPI = this.createModifierAPI(removals);\n const entries = factory(modifierAPI);\n\n let result = layout;\n\n for (const target of removals) {\n result = this.removeFromLayout(result, target);\n }\n\n for (const entry of entries) {\n if (this.isPositionedNode(entry)) {\n const { node, position } = entry;\n if (position) {\n result = this.insertIntoLayout(result, node, position);\n } else {\n result = [...result, node];\n }\n } else {\n result = [...result, entry];\n }\n }\n\n return result;\n }\n\n accessNode(layout: LayoutNode[], nodeId: string): ILayoutNodeAccessHandle {\n return LayoutBuilderFactory.accessNode(layout, nodeId);\n }\n\n removeFromLayout(layout: LayoutNode[], target: string): LayoutNode[] {\n return layout\n .map(node => {\n if (node.type === \"row\") {\n const filtered = node.fieldIds.filter(id => id !== target);\n if (filtered.length === 0) {\n return null;\n }\n return { ...node, fieldIds: filtered };\n }\n if (\n (node.type === \"tabs\" && node.id === target) ||\n (node.type === \"element\" && (node.id === target || node.renderer === target)) ||\n (node.type === \"object\" && node.fieldName === target)\n ) {\n return null;\n }\n return node;\n })\n .filter(Boolean) as LayoutNode[];\n }\n\n insertIntoLayout(\n layout: LayoutNode[],\n node: LayoutNode,\n position: LayoutPosition\n ): LayoutNode[] {\n const targetIndex = this.findIndex(layout, position.target);\n\n if (targetIndex === -1) {\n return [...layout, node];\n }\n\n const result = [...layout];\n\n switch (position.type) {\n case \"before\":\n result.splice(targetIndex, 0, node);\n break;\n case \"after\":\n result.splice(targetIndex + 1, 0, node);\n break;\n case \"replace\":\n result.splice(targetIndex, 1, node);\n break;\n }\n\n return result;\n }\n\n isPositionedNode(entry: LayoutNode | IPositionedLayoutNode): entry is IPositionedLayoutNode {\n return \"node\" in entry;\n }\n\n private findIndex(layout: LayoutNode[], target: string): number {\n return layout.findIndex(node => this.nodeMatchesTarget(node, target));\n }\n\n private nodeMatchesTarget(node: LayoutNode, target: string): boolean {\n switch (node.type) {\n case \"row\":\n return node.fieldIds.includes(target);\n case \"tabs\":\n return node.id === target;\n case \"element\":\n return node.id === target || node.renderer === target;\n case \"object\":\n return node.fieldName === target;\n default:\n return false;\n }\n }\n}\n"],"names":["LayoutMutator","removals","fieldIds","node","LayoutBuilderFactory","config","renderer","props","fieldName","inner","target","layout","factory","modifierAPI","entries","result","entry","position","nodeId","filtered","id","Boolean","targetIndex"],"mappings":"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"}
|
|
@@ -21,7 +21,9 @@ class LayoutResolver {
|
|
|
21
21
|
case "row":
|
|
22
22
|
return this.resolveRowNode(node);
|
|
23
23
|
case "separator":
|
|
24
|
-
return this.resolveSeparatorNode();
|
|
24
|
+
return this.resolveSeparatorNode(node);
|
|
25
|
+
case "alert":
|
|
26
|
+
return this.resolveAlertNode(node);
|
|
25
27
|
case "tabs":
|
|
26
28
|
return this.resolveTabsNode(node);
|
|
27
29
|
case "element":
|
|
@@ -40,9 +42,26 @@ class LayoutResolver {
|
|
|
40
42
|
fields
|
|
41
43
|
};
|
|
42
44
|
}
|
|
43
|
-
resolveSeparatorNode() {
|
|
45
|
+
resolveSeparatorNode(node) {
|
|
46
|
+
if (node.rules) {
|
|
47
|
+
const state = this._evaluateRules(node.rules);
|
|
48
|
+
if (!state.visible) return null;
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
type: "separator",
|
|
52
|
+
title: node.title,
|
|
53
|
+
description: node.description
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
resolveAlertNode(node) {
|
|
57
|
+
if (node.rules) {
|
|
58
|
+
const state = this._evaluateRules(node.rules);
|
|
59
|
+
if (!state.visible) return null;
|
|
60
|
+
}
|
|
44
61
|
return {
|
|
45
|
-
type: "
|
|
62
|
+
type: "alert",
|
|
63
|
+
message: node.message,
|
|
64
|
+
alertType: node.alertType ?? "info"
|
|
46
65
|
};
|
|
47
66
|
}
|
|
48
67
|
resolveTabsNode(node) {
|
|
@@ -70,6 +89,7 @@ class LayoutResolver {
|
|
|
70
89
|
type: "tabs",
|
|
71
90
|
id: node.id,
|
|
72
91
|
renderer: node.renderer,
|
|
92
|
+
rendererSettings: node.rendererSettings,
|
|
73
93
|
tabs,
|
|
74
94
|
disabled: containerState.disabled,
|
|
75
95
|
activeTabId: validActive,
|
|
@@ -109,9 +129,9 @@ class LayoutResolver {
|
|
|
109
129
|
};
|
|
110
130
|
}
|
|
111
131
|
case "separator":
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
|
|
132
|
+
return this.resolveSeparatorNode(node);
|
|
133
|
+
case "alert":
|
|
134
|
+
return this.resolveAlertNode(node);
|
|
115
135
|
case "element":
|
|
116
136
|
return this.resolveElementNode(node);
|
|
117
137
|
case "object":
|
|
@@ -156,6 +176,7 @@ class LayoutResolver {
|
|
|
156
176
|
type: "tabs",
|
|
157
177
|
id: node.id,
|
|
158
178
|
renderer: node.renderer,
|
|
179
|
+
rendererSettings: node.rendererSettings,
|
|
159
180
|
tabs,
|
|
160
181
|
disabled: containerState.disabled,
|
|
161
182
|
activeTabId: validActive,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/LayoutResolver.js","sources":["../../../src/features/formModel/LayoutResolver.ts"],"sourcesContent":["import { runInAction } from \"mobx\";\nimport type { ObservableMap } from \"mobx\";\nimport { isObjectField } from \"./ObjectField.js\";\nimport { LayoutBuilderFactory } from \"./LayoutBuilderFactory.js\";\nimport type {\n IField,\n IRule,\n LayoutNode,\n LayoutNodeVM,\n IRowNode,\n IRowNodeVM,\n ISeparatorNodeVM,\n ITabsNode,\n ITabsNodeVM,\n ITabDefinitionVM,\n IElementNode,\n IElementNodeVM,\n IObjectNode\n} from \"./abstractions.js\";\n\ntype RuleEvaluatorFn = (rules: IRule[] | undefined) => { visible: boolean; disabled: boolean };\n\nexport class LayoutResolver {\n constructor(\n private _fields: Map<string, IField>,\n private _activeTabs: ObservableMap<string, string>,\n private _evaluateRules: RuleEvaluatorFn\n ) {}\n\n resolve(layout: LayoutNode[]): LayoutNodeVM[] {\n return layout.map(node => this.resolveNode(node)).filter(Boolean) as LayoutNodeVM[];\n }\n\n resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[] {\n return layout\n .map(node => this.resolveChildNode(node, children))\n .filter(Boolean) as LayoutNodeVM[];\n }\n\n collectFieldIds(layout: LayoutNode[]): string[] {\n return LayoutBuilderFactory.collectFieldIds(layout);\n }\n\n private resolveNode(node: LayoutNode): LayoutNodeVM | null {\n switch (node.type) {\n case \"row\":\n return this.resolveRowNode(node);\n case \"separator\":\n return this.resolveSeparatorNode();\n case \"tabs\":\n return this.resolveTabsNode(node);\n case \"element\":\n return this.resolveElementNode(node);\n case \"object\":\n return this.resolveObjectNode(node);\n default:\n return null;\n }\n }\n\n private resolveRowNode(node: IRowNode): IRowNodeVM | null {\n const fields = node.fieldIds\n .map(id => this._fields.get(id))\n .filter((f): f is IField => f !== undefined && f.visible)\n .map(f => f.vm);\n\n if (fields.length === 0) {\n return null;\n }\n\n return { type: \"row\", fields };\n }\n\n private resolveSeparatorNode(): ISeparatorNodeVM {\n return { type: \"separator\" };\n }\n\n private resolveTabsNode(node: ITabsNode): ITabsNodeVM | null {\n if (node.tabs.length === 0) {\n return null;\n }\n\n const containerState = this._evaluateRules(node.rules);\n if (!containerState.visible) {\n return null;\n }\n\n const tabKey = node.id || LayoutBuilderFactory.tabsNodeKey(node);\n\n const tabs: ITabDefinitionVM[] = [];\n for (const tab of node.tabs) {\n const tabState = this._evaluateRules(tab.rules);\n if (!tabState.visible) {\n continue;\n }\n tabs.push({\n id: tab.id,\n label: tab.label,\n description: tab.description,\n icon: tab.icon,\n hasErrors: this.tabHasErrors(tab.layout),\n disabled: containerState.disabled || tabState.disabled,\n layout: tab.layout\n .map(child => this.resolveNode(child))\n .filter(Boolean) as LayoutNodeVM[]\n });\n }\n\n if (tabs.length === 0) {\n return null;\n }\n\n const storedActive = this._activeTabs.get(tabKey);\n const validActive = tabs.find(t => t.id === storedActive) ? storedActive! : tabs[0].id;\n\n return {\n type: \"tabs\",\n id: node.id,\n renderer: node.renderer,\n tabs,\n disabled: containerState.disabled,\n activeTabId: validActive,\n setActiveTab: (id: string) => {\n runInAction(() => {\n this._activeTabs.set(tabKey, id);\n });\n }\n };\n }\n\n private resolveElementNode(node: IElementNode): IElementNodeVM {\n return {\n type: \"element\",\n renderer: node.renderer,\n props: node.props\n };\n }\n\n private resolveObjectNode(node: IObjectNode): IRowNodeVM | null {\n const field = this._fields.get(node.fieldName);\n if (!field || !field.visible) {\n return null;\n }\n return { type: \"row\", fields: [field.vm] };\n }\n\n private resolveChildNode(node: LayoutNode, children: Map<string, IField>): LayoutNodeVM | null {\n switch (node.type) {\n case \"row\": {\n const fields = node.fieldIds\n .map(id => children.get(id))\n .filter((f): f is IField => f !== undefined && f.visible)\n .map(f => f.vm);\n if (fields.length === 0) {\n return null;\n }\n return { type: \"row\", fields };\n }\n case \"separator\":\n return { type: \"separator\" };\n case \"element\":\n return this.resolveElementNode(node);\n case \"object\": {\n const field = children.get(node.fieldName);\n if (!field || !field.visible) {\n return null;\n }\n return { type: \"row\", fields: [field.vm] };\n }\n case \"tabs\":\n return this.resolveChildTabsNode(node, children);\n default:\n return null;\n }\n }\n\n private resolveChildTabsNode(\n node: ITabsNode,\n children: Map<string, IField>\n ): ITabsNodeVM | null {\n if (node.tabs.length === 0) {\n return null;\n }\n const containerState = this._evaluateRules(node.rules);\n if (!containerState.visible) {\n return null;\n }\n const tabKey = node.id || LayoutBuilderFactory.tabsNodeKey(node);\n const tabs: ITabDefinitionVM[] = [];\n for (const tab of node.tabs) {\n const tabState = this._evaluateRules(tab.rules);\n if (!tabState.visible) {\n continue;\n }\n tabs.push({\n id: tab.id,\n label: tab.label,\n description: tab.description,\n icon: tab.icon,\n hasErrors: this.childTabHasErrors(tab.layout, children),\n disabled: containerState.disabled || tabState.disabled,\n layout: tab.layout\n .map(child => this.resolveChildNode(child, children))\n .filter(Boolean) as LayoutNodeVM[]\n });\n }\n if (tabs.length === 0) {\n return null;\n }\n const storedActive = this._activeTabs.get(tabKey);\n const validActive = tabs.find(t => t.id === storedActive) ? storedActive! : tabs[0].id;\n return {\n type: \"tabs\",\n id: node.id,\n renderer: node.renderer,\n tabs,\n disabled: containerState.disabled,\n activeTabId: validActive,\n setActiveTab: (id: string) => {\n runInAction(() => {\n this._activeTabs.set(tabKey, id);\n });\n }\n };\n }\n\n private tabHasErrors(layout: LayoutNode[]): boolean {\n const fieldIds = this.collectFieldIds(layout);\n for (const id of fieldIds) {\n const field = this._fields.get(id);\n if (!field) {\n continue;\n }\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n return false;\n }\n\n private childTabHasErrors(layout: LayoutNode[], children: Map<string, IField>): boolean {\n for (const node of layout) {\n if (node.type === \"row\") {\n for (const id of node.fieldIds) {\n const field = children.get(id);\n if (!field) {\n continue;\n }\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n } else if (node.type === \"object\") {\n const field = children.get(node.fieldName);\n if (field && isObjectField(field) && field.hasErrors) {\n return true;\n }\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n if (this.childTabHasErrors(tab.layout, children)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n}\n"],"names":["LayoutResolver","_fields","_activeTabs","_evaluateRules","layout","node","Boolean","children","LayoutBuilderFactory","fields","id","f","undefined","containerState","tabKey","tabs","tab","tabState","child","storedActive","validActive","t","runInAction","field","fieldIds","isObjectField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/formModel/LayoutResolver.js","sources":["../../../src/features/formModel/LayoutResolver.ts"],"sourcesContent":["import { runInAction } from \"mobx\";\nimport type { ObservableMap } from \"mobx\";\nimport { isObjectField } from \"./ObjectField.js\";\nimport { LayoutBuilderFactory } from \"./LayoutBuilderFactory.js\";\nimport type {\n IField,\n IRule,\n LayoutNode,\n LayoutNodeVM,\n IRowNode,\n IRowNodeVM,\n ISeparatorNode,\n ISeparatorNodeVM,\n IAlertNode,\n IAlertNodeVM,\n ITabsNode,\n ITabsNodeVM,\n ITabDefinitionVM,\n IElementNode,\n IElementNodeVM,\n IObjectNode\n} from \"./abstractions.js\";\n\ntype RuleEvaluatorFn = (rules: IRule[] | undefined) => { visible: boolean; disabled: boolean };\n\nexport class LayoutResolver {\n constructor(\n private _fields: Map<string, IField>,\n private _activeTabs: ObservableMap<string, string>,\n private _evaluateRules: RuleEvaluatorFn\n ) {}\n\n resolve(layout: LayoutNode[]): LayoutNodeVM[] {\n return layout.map(node => this.resolveNode(node)).filter(Boolean) as LayoutNodeVM[];\n }\n\n resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[] {\n return layout\n .map(node => this.resolveChildNode(node, children))\n .filter(Boolean) as LayoutNodeVM[];\n }\n\n collectFieldIds(layout: LayoutNode[]): string[] {\n return LayoutBuilderFactory.collectFieldIds(layout);\n }\n\n private resolveNode(node: LayoutNode): LayoutNodeVM | null {\n switch (node.type) {\n case \"row\":\n return this.resolveRowNode(node);\n case \"separator\":\n return this.resolveSeparatorNode(node);\n case \"alert\":\n return this.resolveAlertNode(node);\n case \"tabs\":\n return this.resolveTabsNode(node);\n case \"element\":\n return this.resolveElementNode(node);\n case \"object\":\n return this.resolveObjectNode(node);\n default:\n return null;\n }\n }\n\n private resolveRowNode(node: IRowNode): IRowNodeVM | null {\n const fields = node.fieldIds\n .map(id => this._fields.get(id))\n .filter((f): f is IField => f !== undefined && f.visible)\n .map(f => f.vm);\n\n if (fields.length === 0) {\n return null;\n }\n\n return { type: \"row\", fields };\n }\n\n private resolveSeparatorNode(node: ISeparatorNode): ISeparatorNodeVM | null {\n if (node.rules) {\n const state = this._evaluateRules(node.rules);\n if (!state.visible) {\n return null;\n }\n }\n return { type: \"separator\", title: node.title, description: node.description };\n }\n\n private resolveAlertNode(node: IAlertNode): IAlertNodeVM | null {\n if (node.rules) {\n const state = this._evaluateRules(node.rules);\n if (!state.visible) {\n return null;\n }\n }\n return { type: \"alert\", message: node.message, alertType: node.alertType ?? \"info\" };\n }\n\n private resolveTabsNode(node: ITabsNode): ITabsNodeVM | null {\n if (node.tabs.length === 0) {\n return null;\n }\n\n const containerState = this._evaluateRules(node.rules);\n if (!containerState.visible) {\n return null;\n }\n\n const tabKey = node.id || LayoutBuilderFactory.tabsNodeKey(node);\n\n const tabs: ITabDefinitionVM[] = [];\n for (const tab of node.tabs) {\n const tabState = this._evaluateRules(tab.rules);\n if (!tabState.visible) {\n continue;\n }\n tabs.push({\n id: tab.id,\n label: tab.label,\n description: tab.description,\n icon: tab.icon,\n hasErrors: this.tabHasErrors(tab.layout),\n disabled: containerState.disabled || tabState.disabled,\n layout: tab.layout\n .map(child => this.resolveNode(child))\n .filter(Boolean) as LayoutNodeVM[]\n });\n }\n\n if (tabs.length === 0) {\n return null;\n }\n\n const storedActive = this._activeTabs.get(tabKey);\n const validActive = tabs.find(t => t.id === storedActive) ? storedActive! : tabs[0].id;\n\n return {\n type: \"tabs\",\n id: node.id,\n renderer: node.renderer,\n rendererSettings: node.rendererSettings,\n tabs,\n disabled: containerState.disabled,\n activeTabId: validActive,\n setActiveTab: (id: string) => {\n runInAction(() => {\n this._activeTabs.set(tabKey, id);\n });\n }\n };\n }\n\n private resolveElementNode(node: IElementNode): IElementNodeVM {\n return {\n type: \"element\",\n renderer: node.renderer,\n props: node.props\n };\n }\n\n private resolveObjectNode(node: IObjectNode): IRowNodeVM | null {\n const field = this._fields.get(node.fieldName);\n if (!field || !field.visible) {\n return null;\n }\n return { type: \"row\", fields: [field.vm] };\n }\n\n private resolveChildNode(node: LayoutNode, children: Map<string, IField>): LayoutNodeVM | null {\n switch (node.type) {\n case \"row\": {\n const fields = node.fieldIds\n .map(id => children.get(id))\n .filter((f): f is IField => f !== undefined && f.visible)\n .map(f => f.vm);\n if (fields.length === 0) {\n return null;\n }\n return { type: \"row\", fields };\n }\n case \"separator\":\n return this.resolveSeparatorNode(node);\n case \"alert\":\n return this.resolveAlertNode(node);\n case \"element\":\n return this.resolveElementNode(node);\n case \"object\": {\n const field = children.get(node.fieldName);\n if (!field || !field.visible) {\n return null;\n }\n return { type: \"row\", fields: [field.vm] };\n }\n case \"tabs\":\n return this.resolveChildTabsNode(node, children);\n default:\n return null;\n }\n }\n\n private resolveChildTabsNode(\n node: ITabsNode,\n children: Map<string, IField>\n ): ITabsNodeVM | null {\n if (node.tabs.length === 0) {\n return null;\n }\n const containerState = this._evaluateRules(node.rules);\n if (!containerState.visible) {\n return null;\n }\n const tabKey = node.id || LayoutBuilderFactory.tabsNodeKey(node);\n const tabs: ITabDefinitionVM[] = [];\n for (const tab of node.tabs) {\n const tabState = this._evaluateRules(tab.rules);\n if (!tabState.visible) {\n continue;\n }\n tabs.push({\n id: tab.id,\n label: tab.label,\n description: tab.description,\n icon: tab.icon,\n hasErrors: this.childTabHasErrors(tab.layout, children),\n disabled: containerState.disabled || tabState.disabled,\n layout: tab.layout\n .map(child => this.resolveChildNode(child, children))\n .filter(Boolean) as LayoutNodeVM[]\n });\n }\n if (tabs.length === 0) {\n return null;\n }\n const storedActive = this._activeTabs.get(tabKey);\n const validActive = tabs.find(t => t.id === storedActive) ? storedActive! : tabs[0].id;\n return {\n type: \"tabs\",\n id: node.id,\n renderer: node.renderer,\n rendererSettings: node.rendererSettings,\n tabs,\n disabled: containerState.disabled,\n activeTabId: validActive,\n setActiveTab: (id: string) => {\n runInAction(() => {\n this._activeTabs.set(tabKey, id);\n });\n }\n };\n }\n\n private tabHasErrors(layout: LayoutNode[]): boolean {\n const fieldIds = this.collectFieldIds(layout);\n for (const id of fieldIds) {\n const field = this._fields.get(id);\n if (!field) {\n continue;\n }\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n return false;\n }\n\n private childTabHasErrors(layout: LayoutNode[], children: Map<string, IField>): boolean {\n for (const node of layout) {\n if (node.type === \"row\") {\n for (const id of node.fieldIds) {\n const field = children.get(id);\n if (!field) {\n continue;\n }\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n } else if (node.type === \"object\") {\n const field = children.get(node.fieldName);\n if (field && isObjectField(field) && field.hasErrors) {\n return true;\n }\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n if (this.childTabHasErrors(tab.layout, children)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n}\n"],"names":["LayoutResolver","_fields","_activeTabs","_evaluateRules","layout","node","Boolean","children","LayoutBuilderFactory","fields","id","f","undefined","state","containerState","tabKey","tabs","tab","tabState","child","storedActive","validActive","t","runInAction","field","fieldIds","isObjectField"],"mappings":"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"}
|