@webiny/app-admin 0.0.0-unstable.a4f3e4ea8b → 0.0.0-unstable.a85ef555b2
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 +26 -13
- package/base/Admin.js.map +1 -1
- package/base/Base/DefaultFieldRenderers.js +4 -0
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/AutoCompleteRenderer.js +1 -0
- package/base/Base/FieldRenderers/AutoCompleteRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/BirthdayInputRenderer.d.ts +21 -0
- package/base/Base/FieldRenderers/BirthdayInputRenderer.js +39 -0
- package/base/Base/FieldRenderers/BirthdayInputRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/BirthdayInputRenderer.test.d.ts +1 -0
- package/base/Base/FieldRenderers/BirthdayInputRenderer.test.js +123 -0
- package/base/Base/FieldRenderers/BirthdayInputRenderer.test.js.map +1 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
- package/base/Base/FieldRenderers/InputRenderer.js +1 -0
- package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +10 -4
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +13 -5
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +8 -26
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +52 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +8 -3
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +25 -17
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.d.ts +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.js +106 -0
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.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/VerticalTabsRenderer.d.ts +2 -2
- package/base/Base/Menus.js +4 -4
- package/base/Base/Menus.js.map +1 -1
- package/base/Base.js +2 -1
- package/base/Base.js.map +1 -1
- package/base/createRootContainer.js +10 -5
- package/base/createRootContainer.js.map +1 -1
- package/base/resolveApiUrl.d.ts +13 -0
- package/base/resolveApiUrl.js +26 -0
- package/base/resolveApiUrl.js.map +1 -0
- package/base/ui/AssumedPermissionsSelector.d.ts +47 -0
- package/base/ui/AssumedPermissionsSelector.js +7 -0
- package/base/ui/AssumedPermissionsSelector.js.map +1 -0
- package/base/ui/DebuggerIndicator.d.ts +23 -0
- package/base/ui/DebuggerIndicator.js +5 -0
- package/base/ui/DebuggerIndicator.js.map +1 -0
- package/components/DeveloperMode/DeveloperMode.d.ts +1 -3
- package/components/DeveloperMode/DeveloperMode.js.map +1 -1
- package/components/Filters/Filters.js +7 -1
- package/components/Filters/Filters.js.map +1 -1
- package/components/IconPicker/IconPickerComponent.d.ts +2 -2
- package/components/IconPicker/plugins/customPlugin.js +4 -19
- package/components/IconPicker/plugins/customPlugin.js.map +1 -1
- package/components/ListView/ListViewBulkActions.d.ts +2 -2
- package/components/ListView/ListViewContent.d.ts +2 -2
- package/components/ListView/ListViewFilters.d.ts +2 -2
- package/components/ListView/index.d.ts +6 -6
- 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 +5 -1
- package/components/RolesMultiAutocomplete/index.js +18 -19
- package/components/RolesMultiAutocomplete/index.js.map +1 -1
- package/components/SplitView/SplitView.d.ts +2 -2
- package/components/SplitView/SplitView.js +8 -8
- package/components/SplitView/SplitView.js.map +1 -1
- package/components/Table/components/Table/TableInner.d.ts +2 -2
- package/components/TeamAutocomplete/index.d.ts +5 -1
- package/components/TeamAutocomplete/index.js +13 -14
- package/components/TeamAutocomplete/index.js.map +1 -1
- package/components/TeamsMultiAutocomplete/index.d.ts +5 -1
- package/components/TeamsMultiAutocomplete/index.js +18 -19
- package/components/TeamsMultiAutocomplete/index.js.map +1 -1
- package/components/index.d.ts +0 -1
- package/components/index.js +0 -1
- package/config/AdminConfig/Breadcrumbs.d.ts +42 -0
- package/config/AdminConfig/Breadcrumbs.js +24 -0
- package/config/AdminConfig/Breadcrumbs.js.map +1 -0
- package/config/AdminConfig/SecurityPermissions.js +2 -1
- package/config/AdminConfig/SecurityPermissions.js.map +1 -1
- package/config/AdminConfig/Widget.d.ts +9 -1
- package/config/AdminConfig/Widget.js +6 -2
- package/config/AdminConfig/Widget.js.map +1 -1
- package/config/AdminConfig.d.ts +3 -0
- package/config/AdminConfig.js +3 -0
- package/config/AdminConfig.js.map +1 -1
- package/errors/ErrorOverlayNetworkErrorHandler.js +4 -4
- package/errors/ErrorOverlayNetworkErrorHandler.js.map +1 -1
- package/features/accessManagement/permissions/feature.d.ts +1 -1
- package/features/accessManagement/types.d.ts +3 -3
- package/features/adminAssistant/AdminAssistantGateway.d.ts +30 -0
- package/features/adminAssistant/AdminAssistantGateway.js +41 -0
- package/features/adminAssistant/AdminAssistantGateway.js.map +1 -0
- package/features/adminAssistant/AdminAssistantPresenter.d.ts +32 -0
- package/features/adminAssistant/AdminAssistantPresenter.js +220 -0
- package/features/adminAssistant/AdminAssistantPresenter.js.map +1 -0
- package/features/adminAssistant/abstractions.d.ts +124 -0
- package/features/adminAssistant/abstractions.js +6 -0
- package/features/adminAssistant/abstractions.js.map +1 -0
- package/features/adminAssistant/feature.d.ts +3 -0
- package/features/adminAssistant/feature.js +19 -0
- package/features/adminAssistant/feature.js.map +1 -0
- package/features/adminAssistant/index.d.ts +6 -0
- package/features/adminAssistant/index.js +3 -0
- package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.d.ts +11 -0
- package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.js +44 -0
- package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.js.map +1 -0
- package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.d.ts +10 -0
- package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.js +19 -0
- package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.js.map +1 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.d.ts +16 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.js +5 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.js.map +1 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.d.ts +10 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js +5 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js.map +1 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/index.d.ts +6 -0
- package/features/adminUsers/account/getCurrentUser/abstractions/index.js +2 -0
- package/features/adminUsers/account/getCurrentUser/feature.d.ts +3 -0
- package/features/adminUsers/account/getCurrentUser/feature.js +19 -0
- package/features/adminUsers/account/getCurrentUser/feature.js.map +1 -0
- package/features/adminUsers/account/getCurrentUser/index.d.ts +1 -0
- package/features/adminUsers/account/getCurrentUser/index.js +1 -0
- package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.d.ts +11 -0
- package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.js +48 -0
- package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.js.map +1 -0
- package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.d.ts +10 -0
- package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.js +19 -0
- package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.js.map +1 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.d.ts +26 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js +5 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js.map +1 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.d.ts +13 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js +5 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js.map +1 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/index.d.ts +8 -0
- package/features/adminUsers/account/updateCurrentUser/abstractions/index.js +2 -0
- package/features/adminUsers/account/updateCurrentUser/feature.d.ts +3 -0
- package/features/adminUsers/account/updateCurrentUser/feature.js +19 -0
- package/features/adminUsers/account/updateCurrentUser/feature.js.map +1 -0
- package/features/adminUsers/account/updateCurrentUser/index.d.ts +1 -0
- package/features/adminUsers/account/updateCurrentUser/index.js +1 -0
- package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.d.ts +6 -0
- package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.js +22 -0
- package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.js.map +1 -0
- package/features/adminUsers/passwordPolicy/abstractions.d.ts +20 -0
- package/features/adminUsers/passwordPolicy/abstractions.js +5 -0
- package/features/adminUsers/passwordPolicy/abstractions.js.map +1 -0
- package/features/adminUsers/passwordPolicy/feature.d.ts +8 -0
- package/features/adminUsers/passwordPolicy/feature.js +18 -0
- package/features/adminUsers/passwordPolicy/feature.js.map +1 -0
- package/features/adminUsers/passwordPolicy/index.d.ts +3 -0
- package/features/adminUsers/passwordPolicy/index.js +3 -0
- package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.d.ts +10 -0
- package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.js +11 -0
- package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.js.map +1 -0
- package/features/adminUsers/permissions/abstractions.d.ts +17 -0
- package/features/adminUsers/permissions/abstractions.js +6 -0
- package/features/adminUsers/permissions/abstractions.js.map +1 -0
- package/features/adminUsers/permissions/feature.d.ts +14 -0
- package/features/adminUsers/permissions/feature.js +7 -0
- package/features/adminUsers/permissions/feature.js.map +1 -0
- package/features/adminUsers/permissionsSchema.d.ts +10 -0
- package/features/adminUsers/permissionsSchema.js +18 -0
- package/features/adminUsers/permissionsSchema.js.map +1 -0
- package/features/adminUsers/users/createUser/CreateUserGateway.d.ts +11 -0
- package/features/adminUsers/users/createUser/CreateUserGateway.js +49 -0
- package/features/adminUsers/users/createUser/CreateUserGateway.js.map +1 -0
- package/features/adminUsers/users/createUser/CreateUserUseCase.d.ts +10 -0
- package/features/adminUsers/users/createUser/CreateUserUseCase.js +18 -0
- package/features/adminUsers/users/createUser/CreateUserUseCase.js.map +1 -0
- package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.d.ts +21 -0
- package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.js +5 -0
- package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.js.map +1 -0
- package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.d.ts +14 -0
- package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.js +5 -0
- package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.js.map +1 -0
- package/features/adminUsers/users/createUser/abstractions/index.d.ts +2 -0
- package/features/adminUsers/users/createUser/abstractions/index.js +2 -0
- package/features/adminUsers/users/createUser/feature.d.ts +3 -0
- package/features/adminUsers/users/createUser/feature.js +19 -0
- package/features/adminUsers/users/createUser/feature.js.map +1 -0
- package/features/adminUsers/users/createUser/index.d.ts +2 -0
- package/features/adminUsers/users/createUser/index.js +2 -0
- package/features/adminUsers/users/deleteUser/DeleteUserGateway.d.ts +11 -0
- package/features/adminUsers/users/deleteUser/DeleteUserGateway.js +40 -0
- package/features/adminUsers/users/deleteUser/DeleteUserGateway.js.map +1 -0
- package/features/adminUsers/users/deleteUser/DeleteUserUseCase.d.ts +10 -0
- package/features/adminUsers/users/deleteUser/DeleteUserUseCase.js +18 -0
- package/features/adminUsers/users/deleteUser/DeleteUserUseCase.js.map +1 -0
- package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.d.ts +11 -0
- package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.js +5 -0
- package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.js.map +1 -0
- package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.d.ts +11 -0
- package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.js +5 -0
- package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.js.map +1 -0
- package/features/adminUsers/users/deleteUser/abstractions/index.d.ts +2 -0
- package/features/adminUsers/users/deleteUser/abstractions/index.js +2 -0
- package/features/adminUsers/users/deleteUser/feature.d.ts +3 -0
- package/features/adminUsers/users/deleteUser/feature.js +19 -0
- package/features/adminUsers/users/deleteUser/feature.js.map +1 -0
- package/features/adminUsers/users/deleteUser/index.d.ts +2 -0
- package/features/adminUsers/users/deleteUser/index.js +2 -0
- package/features/adminUsers/users/getUser/GetUserGateway.d.ts +11 -0
- package/features/adminUsers/users/getUser/GetUserGateway.js +57 -0
- package/features/adminUsers/users/getUser/GetUserGateway.js.map +1 -0
- package/features/adminUsers/users/getUser/GetUserUseCase.d.ts +10 -0
- package/features/adminUsers/users/getUser/GetUserUseCase.js +18 -0
- package/features/adminUsers/users/getUser/GetUserUseCase.js.map +1 -0
- package/features/adminUsers/users/getUser/abstractions/GetUserGateway.d.ts +32 -0
- package/features/adminUsers/users/getUser/abstractions/GetUserGateway.js +5 -0
- package/features/adminUsers/users/getUser/abstractions/GetUserGateway.js.map +1 -0
- package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.d.ts +14 -0
- package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.js +5 -0
- package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.js.map +1 -0
- package/features/adminUsers/users/getUser/abstractions/index.d.ts +2 -0
- package/features/adminUsers/users/getUser/abstractions/index.js +2 -0
- package/features/adminUsers/users/getUser/feature.d.ts +3 -0
- package/features/adminUsers/users/getUser/feature.js +19 -0
- package/features/adminUsers/users/getUser/feature.js.map +1 -0
- package/features/adminUsers/users/getUser/index.d.ts +2 -0
- package/features/adminUsers/users/getUser/index.js +2 -0
- package/features/adminUsers/users/listUsers/ListUsersGateway.d.ts +11 -0
- package/features/adminUsers/users/listUsers/ListUsersGateway.js +39 -0
- package/features/adminUsers/users/listUsers/ListUsersGateway.js.map +1 -0
- package/features/adminUsers/users/listUsers/ListUsersUseCase.d.ts +10 -0
- package/features/adminUsers/users/listUsers/ListUsersUseCase.js +18 -0
- package/features/adminUsers/users/listUsers/ListUsersUseCase.js.map +1 -0
- package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.d.ts +17 -0
- package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.js +5 -0
- package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.js.map +1 -0
- package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.d.ts +10 -0
- package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.js +5 -0
- package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.js.map +1 -0
- package/features/adminUsers/users/listUsers/abstractions/index.d.ts +2 -0
- package/features/adminUsers/users/listUsers/abstractions/index.js +2 -0
- package/features/adminUsers/users/listUsers/feature.d.ts +3 -0
- package/features/adminUsers/users/listUsers/feature.js +19 -0
- package/features/adminUsers/users/listUsers/feature.js.map +1 -0
- package/features/adminUsers/users/listUsers/index.d.ts +2 -0
- package/features/adminUsers/users/listUsers/index.js +2 -0
- package/features/adminUsers/users/updateUser/UpdateUserGateway.d.ts +11 -0
- package/features/adminUsers/users/updateUser/UpdateUserGateway.js +59 -0
- package/features/adminUsers/users/updateUser/UpdateUserGateway.js.map +1 -0
- package/features/adminUsers/users/updateUser/UpdateUserUseCase.d.ts +10 -0
- package/features/adminUsers/users/updateUser/UpdateUserUseCase.js +18 -0
- package/features/adminUsers/users/updateUser/UpdateUserUseCase.js.map +1 -0
- package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.d.ts +33 -0
- package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.js +5 -0
- package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.js.map +1 -0
- package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.d.ts +15 -0
- package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.js +5 -0
- package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.js.map +1 -0
- package/features/adminUsers/users/updateUser/abstractions/index.d.ts +2 -0
- package/features/adminUsers/users/updateUser/abstractions/index.js +2 -0
- package/features/adminUsers/users/updateUser/feature.d.ts +3 -0
- package/features/adminUsers/users/updateUser/feature.js +19 -0
- package/features/adminUsers/users/updateUser/feature.js.map +1 -0
- package/features/adminUsers/users/updateUser/index.d.ts +2 -0
- package/features/adminUsers/users/updateUser/index.js +2 -0
- package/features/assumePermissions/ApiStreamClientDecorator.d.ts +16 -0
- package/features/assumePermissions/ApiStreamClientDecorator.js +29 -0
- package/features/assumePermissions/ApiStreamClientDecorator.js.map +1 -0
- package/features/assumePermissions/AssumePermissionsContext.d.ts +17 -0
- package/features/assumePermissions/AssumePermissionsContext.js +32 -0
- package/features/assumePermissions/AssumePermissionsContext.js.map +1 -0
- package/features/assumePermissions/AssumePermissionsUseCase.d.ts +33 -0
- package/features/assumePermissions/AssumePermissionsUseCase.js +48 -0
- package/features/assumePermissions/AssumePermissionsUseCase.js.map +1 -0
- package/features/assumePermissions/GraphQLClientDecorator.d.ts +16 -0
- package/features/assumePermissions/GraphQLClientDecorator.js +29 -0
- package/features/assumePermissions/GraphQLClientDecorator.js.map +1 -0
- package/features/assumePermissions/ListAssumableTargetsGateway.d.ts +13 -0
- package/features/assumePermissions/ListAssumableTargetsGateway.js +74 -0
- package/features/assumePermissions/ListAssumableTargetsGateway.js.map +1 -0
- package/features/assumePermissions/ListAssumableTargetsUseCase.d.ts +16 -0
- package/features/assumePermissions/ListAssumableTargetsUseCase.js +38 -0
- package/features/assumePermissions/ListAssumableTargetsUseCase.js.map +1 -0
- package/features/assumePermissions/LogInUseCaseDecorator.d.ts +33 -0
- package/features/assumePermissions/LogInUseCaseDecorator.js +36 -0
- package/features/assumePermissions/LogInUseCaseDecorator.js.map +1 -0
- package/features/assumePermissions/LogOutUseCaseDecorator.d.ts +16 -0
- package/features/assumePermissions/LogOutUseCaseDecorator.js +21 -0
- package/features/assumePermissions/LogOutUseCaseDecorator.js.map +1 -0
- package/features/assumePermissions/abstractions.d.ts +78 -0
- package/features/assumePermissions/abstractions.js +8 -0
- package/features/assumePermissions/abstractions.js.map +1 -0
- package/features/assumePermissions/assumePermissionsHeader.d.ts +3 -0
- package/features/assumePermissions/assumePermissionsHeader.js +7 -0
- package/features/assumePermissions/assumePermissionsHeader.js.map +1 -0
- package/features/assumePermissions/feature.d.ts +4 -0
- package/features/assumePermissions/feature.js +32 -0
- package/features/assumePermissions/feature.js.map +1 -0
- package/features/assumePermissions/index.d.ts +4 -0
- package/features/assumePermissions/index.js +2 -0
- package/features/banners/Banners.d.ts +15 -0
- package/features/banners/Banners.js +39 -0
- package/features/banners/Banners.js.map +1 -0
- package/features/banners/abstractions.d.ts +34 -0
- package/features/banners/abstractions.js +5 -0
- package/features/banners/abstractions.js.map +1 -0
- package/features/banners/feature.d.ts +3 -0
- package/features/banners/feature.js +17 -0
- package/features/banners/feature.js.map +1 -0
- package/features/banners/index.d.ts +2 -0
- package/features/banners/index.js +2 -0
- package/features/debugger/DebugSessionsRepository.d.ts +35 -0
- package/features/debugger/DebugSessionsRepository.js +57 -0
- package/features/debugger/DebugSessionsRepository.js.map +1 -0
- package/features/debugger/GraphQLExtensionsDebugHandler.d.ts +17 -0
- package/features/debugger/GraphQLExtensionsDebugHandler.js +21 -0
- package/features/debugger/GraphQLExtensionsDebugHandler.js.map +1 -0
- package/features/debugger/GraphQLExtensionsDebugHandler.test.d.ts +1 -0
- package/features/debugger/GraphQLExtensionsDebugHandler.test.js +112 -0
- package/features/debugger/GraphQLExtensionsDebugHandler.test.js.map +1 -0
- package/features/debugger/abstractions.d.ts +50 -0
- package/features/debugger/abstractions.js +5 -0
- package/features/debugger/abstractions.js.map +1 -0
- package/features/debugger/constants.d.ts +1 -0
- package/features/debugger/constants.js +4 -0
- package/features/debugger/constants.js.map +1 -0
- package/features/debugger/feature.d.ts +3 -0
- package/features/debugger/feature.js +19 -0
- package/features/debugger/feature.js.map +1 -0
- package/features/debugger/index.d.ts +3 -0
- package/features/debugger/index.js +3 -0
- package/features/featureFlags/FeatureFlagsGateway.d.ts +10 -0
- package/features/featureFlags/FeatureFlagsGateway.js +40 -0
- package/features/featureFlags/FeatureFlagsGateway.js.map +1 -0
- package/features/featureFlags/FeatureFlagsService.d.ts +16 -0
- package/features/featureFlags/FeatureFlagsService.js +64 -0
- package/features/featureFlags/FeatureFlagsService.js.map +1 -0
- package/features/featureFlags/abstractions.d.ts +19 -0
- package/features/featureFlags/abstractions.js +6 -0
- package/features/featureFlags/abstractions.js.map +1 -0
- package/features/featureFlags/feature.d.ts +3 -0
- package/features/featureFlags/feature.js +19 -0
- package/features/featureFlags/feature.js.map +1 -0
- package/features/formModel/AccessControlRuleEvaluator.d.ts +12 -0
- package/features/formModel/AccessControlRuleEvaluator.js +30 -0
- package/features/formModel/AccessControlRuleEvaluator.js.map +1 -0
- package/features/formModel/AccessControlRuleEvaluator.test.d.ts +1 -0
- package/features/formModel/AccessControlRuleEvaluator.test.js +219 -0
- package/features/formModel/AccessControlRuleEvaluator.test.js.map +1 -0
- package/features/formModel/ConditionRuleEvaluator.js +34 -4
- package/features/formModel/ConditionRuleEvaluator.js.map +1 -1
- package/features/formModel/Field.d.ts +13 -1
- package/features/formModel/Field.js +25 -5
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +1 -0
- package/features/formModel/FieldBuilder.js +4 -0
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FieldBuilder.test.js +153 -1
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FormErrors.d.ts +2 -2
- package/features/formModel/FormErrors.js +1 -1
- package/features/formModel/FormErrors.js.map +1 -1
- package/features/formModel/FormModel.d.ts +2 -0
- package/features/formModel/FormModel.js +25 -0
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +591 -4
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormView.d.ts +8 -4
- package/features/formModel/ObjectField.d.ts +11 -1
- package/features/formModel/ObjectField.js +45 -20
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/PresenterErrors.d.ts +2 -2
- package/features/formModel/Rules.test.js +224 -16
- package/features/formModel/Rules.test.js.map +1 -1
- package/features/formModel/abstractions.d.ts +51 -3
- package/features/formModel/abstractions.js +2 -1
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/createFieldRenderer.js +3 -4
- package/features/formModel/createFieldRenderer.js.map +1 -1
- package/features/formModel/demo/FormModelDemo.d.ts +2 -2
- package/features/formModel/feature.js +2 -0
- package/features/formModel/feature.js.map +1 -1
- package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +67 -4
- package/features/formModel/fieldTypes/DateTimeFieldType.js +88 -22
- package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
- package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js +23 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
- package/features/formModel/fieldTypes/dateLimits.d.ts +37 -0
- package/features/formModel/fieldTypes/dateLimits.js +64 -0
- package/features/formModel/fieldTypes/dateLimits.js.map +1 -0
- package/features/formModel/fieldTypes/dateLimits.test.d.ts +1 -0
- package/features/formModel/fieldTypes/dateLimits.test.js +60 -0
- package/features/formModel/fieldTypes/dateLimits.test.js.map +1 -0
- package/features/formModel/index.d.ts +2 -2
- package/features/formModel/index.js +1 -1
- package/features/formModel/jsonSchema/JsonSchema.d.ts +18 -0
- package/features/formModel/jsonSchema/JsonSchema.js +0 -0
- package/features/formModel/jsonSchema/JsonSchemaFieldOptions.d.ts +4 -0
- package/features/formModel/jsonSchema/JsonSchemaFieldOptions.js +0 -0
- package/features/formModel/jsonSchema/JsonSchemaIssue.d.ts +4 -0
- package/features/formModel/jsonSchema/JsonSchemaIssue.js +0 -0
- package/features/formModel/jsonSchema/JsonSchemaValidationResult.d.ts +5 -0
- package/features/formModel/jsonSchema/JsonSchemaValidationResult.js +0 -0
- package/features/formModel/jsonSchema/JsonSchemaValidator.d.ts +4 -0
- package/features/formModel/jsonSchema/JsonSchemaValidator.js +0 -0
- package/features/formModel/jsonSchema/PlainObject.d.ts +1 -0
- package/features/formModel/jsonSchema/PlainObject.js +0 -0
- package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.d.ts +5 -0
- package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.js +154 -0
- package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.js.map +1 -0
- package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.d.ts +1 -0
- package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.js +643 -0
- package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.js.map +1 -0
- package/features/formModel/jsonSchema/createJsonSchemaValidator.d.ts +3 -0
- package/features/formModel/jsonSchema/createJsonSchemaValidator.js +40 -0
- package/features/formModel/jsonSchema/createJsonSchemaValidator.js.map +1 -0
- package/features/formModel/jsonSchema/createJsonSchemaValidator.test.d.ts +1 -0
- package/features/formModel/jsonSchema/createJsonSchemaValidator.test.js +141 -0
- package/features/formModel/jsonSchema/createJsonSchemaValidator.test.js.map +1 -0
- package/features/formModel/jsonSchema/formDataToJsonSchemaValue.d.ts +3 -0
- package/features/formModel/jsonSchema/formDataToJsonSchemaValue.js +52 -0
- package/features/formModel/jsonSchema/formDataToJsonSchemaValue.js.map +1 -0
- package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.d.ts +1 -0
- package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.js +250 -0
- package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.js.map +1 -0
- package/features/formModel/jsonSchema/getJsonSchemaKind.d.ts +3 -0
- package/features/formModel/jsonSchema/getJsonSchemaKind.js +31 -0
- package/features/formModel/jsonSchema/getJsonSchemaKind.js.map +1 -0
- package/features/formModel/jsonSchema/getJsonSchemaKind.test.d.ts +1 -0
- package/features/formModel/jsonSchema/getJsonSchemaKind.test.js +123 -0
- package/features/formModel/jsonSchema/getJsonSchemaKind.test.js.map +1 -0
- package/features/formModel/jsonSchema/isPlainObject.d.ts +2 -0
- package/features/formModel/jsonSchema/isPlainObject.js +4 -0
- package/features/formModel/jsonSchema/isPlainObject.js.map +1 -0
- package/features/formModel/jsonSchema/jsonSchemaValueToFormData.d.ts +3 -0
- package/features/formModel/jsonSchema/jsonSchemaValueToFormData.js +30 -0
- package/features/formModel/jsonSchema/jsonSchemaValueToFormData.js.map +1 -0
- package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.d.ts +1 -0
- package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.js +207 -0
- package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.js.map +1 -0
- package/features/formModel/jsonSchema/normalizeJsonSchema.d.ts +2 -0
- package/features/formModel/jsonSchema/normalizeJsonSchema.js +10 -0
- package/features/formModel/jsonSchema/normalizeJsonSchema.js.map +1 -0
- package/features/formModel/renderers.d.ts +1 -0
- package/features/formModel/renderers.js +1 -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/notifications/Notifications.d.ts +1 -0
- package/features/notifications/Notifications.js +3 -0
- package/features/notifications/Notifications.js.map +1 -1
- package/features/notifications/Notifications.test.d.ts +1 -0
- package/features/notifications/Notifications.test.js +106 -0
- package/features/notifications/Notifications.test.js.map +1 -0
- package/features/notifications/NotificationsRenderer.d.ts +3 -2
- package/features/notifications/NotificationsRenderer.js +23 -4
- package/features/notifications/NotificationsRenderer.js.map +1 -1
- package/features/notifications/NotificationsRenderer.test.d.ts +1 -0
- package/features/notifications/NotificationsRenderer.test.js +261 -0
- package/features/notifications/NotificationsRenderer.test.js.map +1 -0
- package/features/notifications/abstractions.d.ts +13 -2
- package/features/notifications/abstractions.js.map +1 -1
- package/features/security/AuthenticationContext/ApiStreamClientDecorator.d.ts +22 -0
- package/features/security/AuthenticationContext/ApiStreamClientDecorator.js +32 -0
- package/features/security/AuthenticationContext/ApiStreamClientDecorator.js.map +1 -0
- package/features/security/AuthenticationContext/feature.js +2 -0
- package/features/security/AuthenticationContext/feature.js.map +1 -1
- package/features/security/LogIn/LogInUseCase.d.ts +0 -1
- package/features/security/LogIn/LogInUseCase.js +2 -5
- package/features/security/LogIn/LogInUseCase.js.map +1 -1
- package/features/security/LogIn/hasAppPermissions.d.ts +2 -0
- package/features/security/LogIn/hasAppPermissions.js +8 -0
- package/features/security/LogIn/hasAppPermissions.js.map +1 -0
- package/features/slugify/DefaultSlugify.d.ts +8 -0
- package/features/slugify/DefaultSlugify.js +20 -0
- package/features/slugify/DefaultSlugify.js.map +1 -0
- package/features/slugify/abstractions.d.ts +12 -0
- package/features/slugify/abstractions.js +5 -0
- package/features/slugify/abstractions.js.map +1 -0
- package/features/slugify/feature.d.ts +1 -0
- package/features/slugify/feature.js +11 -0
- package/features/slugify/feature.js.map +1 -0
- package/features/slugify/index.d.ts +3 -0
- package/features/slugify/index.js +3 -0
- package/features/stringFormatter/DefaultStringFormatter.d.ts +17 -0
- package/features/stringFormatter/DefaultStringFormatter.js +19 -0
- package/features/stringFormatter/DefaultStringFormatter.js.map +1 -0
- package/features/stringFormatter/abstractions.d.ts +11 -0
- package/features/stringFormatter/abstractions.js +5 -0
- package/features/stringFormatter/abstractions.js.map +1 -0
- package/features/stringFormatter/feature.d.ts +3 -0
- package/features/stringFormatter/feature.js +19 -0
- package/features/stringFormatter/feature.js.map +1 -0
- package/features/stringFormatter/index.d.ts +4 -0
- package/features/stringFormatter/index.js +4 -0
- package/features/stringFormatter/useStringFormatter.d.ts +5 -0
- package/features/stringFormatter/useStringFormatter.js +8 -0
- package/features/stringFormatter/useStringFormatter.js.map +1 -0
- package/features/tenancy/ApiStreamClientDecorator.d.ts +16 -0
- package/features/tenancy/ApiStreamClientDecorator.js +30 -0
- package/features/tenancy/ApiStreamClientDecorator.js.map +1 -0
- package/features/tenancy/feature.js +2 -0
- package/features/tenancy/feature.js.map +1 -1
- package/features/wcp/ReactLicense.d.ts +8 -0
- package/features/wcp/ReactLicense.js +24 -0
- package/features/wcp/ReactLicense.js.map +1 -1
- package/features/wcp/WcpGateway.js +7 -0
- package/features/wcp/WcpGateway.js.map +1 -1
- package/features/webinySdk/WebinySdk.d.ts +2 -1
- package/features/webinySdk/WebinySdk.js.map +1 -1
- package/hooks/useHotkeys.js +7 -5
- package/hooks/useHotkeys.js.map +1 -1
- package/hooks/useSnackbar.js.map +1 -1
- package/index.d.ts +30 -3
- package/index.js +31 -13
- package/modules/AccessManagementExtension.js +55 -23
- package/modules/AccessManagementExtension.js.map +1 -1
- package/modules/DebuggerExtension.d.ts +2 -0
- package/modules/DebuggerExtension.js +55 -0
- package/modules/DebuggerExtension.js.map +1 -0
- package/package.json +32 -39
- package/permissions/createPermissions.js.map +1 -1
- package/presentation/accessManagement/SecurityPermissions.js +3 -3
- package/presentation/accessManagement/SecurityPermissions.js.map +1 -1
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.d.ts +3 -1
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +13 -16
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.js +13 -7
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.js.map +1 -1
- package/presentation/accessManagement/roles/RolesPresenter.d.ts +3 -1
- package/presentation/accessManagement/roles/RolesPresenter.js +11 -14
- package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
- package/presentation/accessManagement/roles/components/RolesDataList.d.ts +10 -0
- package/presentation/accessManagement/roles/components/RolesDataList.js +146 -0
- package/presentation/accessManagement/roles/components/RolesDataList.js.map +1 -0
- package/presentation/accessManagement/roles/components/RolesForm.d.ts +13 -0
- package/presentation/accessManagement/roles/components/RolesForm.js +114 -0
- package/presentation/accessManagement/roles/components/RolesForm.js.map +1 -0
- package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
- package/presentation/accessManagement/roles/components/RolesView.js +6 -212
- package/presentation/accessManagement/roles/components/RolesView.js.map +1 -1
- 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/teams/TeamsPresenter.d.ts +3 -1
- package/presentation/accessManagement/teams/TeamsPresenter.js +11 -14
- package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
- package/presentation/accessManagement/teams/components/TeamsDataList.d.ts +10 -0
- package/presentation/accessManagement/teams/components/TeamsDataList.js +146 -0
- package/presentation/accessManagement/teams/components/TeamsDataList.js.map +1 -0
- package/presentation/accessManagement/teams/components/TeamsForm.d.ts +13 -0
- package/presentation/accessManagement/teams/components/TeamsForm.js +96 -0
- package/presentation/accessManagement/teams/components/TeamsForm.js.map +1 -0
- package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
- package/presentation/accessManagement/teams/components/TeamsView.js +6 -194
- package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -1
- 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/adminUsers/AdminUsers.d.ts +10 -0
- package/presentation/adminUsers/AdminUsers.js +77 -0
- package/presentation/adminUsers/AdminUsers.js.map +1 -0
- package/presentation/adminUsers/SecurityPermission.d.ts +2 -0
- package/presentation/adminUsers/SecurityPermission.js +15 -0
- package/presentation/adminUsers/SecurityPermission.js.map +1 -0
- package/presentation/adminUsers/UserItem.d.ts +10 -0
- package/presentation/adminUsers/UserItem.js +0 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImage.d.ts +3 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImage.js +31 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImage.js.map +1 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.d.ts +10 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.js +53 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.js.map +1 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.d.ts +7 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.js +28 -0
- package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.js.map +1 -0
- package/presentation/adminUsers/components/AvatarImage/index.d.ts +1 -0
- package/presentation/adminUsers/components/AvatarImage/index.js +1 -0
- package/presentation/adminUsers/routes.d.ts +10 -0
- package/presentation/adminUsers/routes.js +20 -0
- package/presentation/adminUsers/routes.js.map +1 -0
- package/presentation/adminUsers/userMenu/AccountDetails.d.ts +6 -0
- package/presentation/adminUsers/userMenu/AccountDetails.js +20 -0
- package/presentation/adminUsers/userMenu/AccountDetails.js.map +1 -0
- package/presentation/adminUsers/userMenu/useIsDefaultTenant.d.ts +1 -0
- package/presentation/adminUsers/userMenu/useIsDefaultTenant.js +9 -0
- package/presentation/adminUsers/userMenu/useIsDefaultTenant.js.map +1 -0
- package/presentation/adminUsers/views/Account/Account.d.ts +2 -0
- package/presentation/adminUsers/views/Account/Account.js +137 -0
- package/presentation/adminUsers/views/Account/Account.js.map +1 -0
- package/presentation/adminUsers/views/Account/index.d.ts +1 -0
- package/presentation/adminUsers/views/Account/index.js +1 -0
- package/presentation/adminUsers/views/Users/UsersDataList.d.ts +3 -0
- package/presentation/adminUsers/views/Users/UsersDataList.js +180 -0
- package/presentation/adminUsers/views/Users/UsersDataList.js.map +1 -0
- package/presentation/adminUsers/views/Users/UsersForm.d.ts +5 -0
- package/presentation/adminUsers/views/Users/UsersForm.js +175 -0
- package/presentation/adminUsers/views/Users/UsersForm.js.map +1 -0
- package/presentation/adminUsers/views/Users/UsersView.d.ts +2 -0
- package/presentation/adminUsers/views/Users/UsersView.js +15 -0
- package/presentation/adminUsers/views/Users/UsersView.js.map +1 -0
- package/presentation/adminUsers/views/Users/components/DeleteAction.d.ts +7 -0
- package/presentation/adminUsers/views/Users/components/DeleteAction.js +29 -0
- package/presentation/adminUsers/views/Users/components/DeleteAction.js.map +1 -0
- package/presentation/adminUsers/views/Users/hooks/useUserForm.d.ts +27 -0
- package/presentation/adminUsers/views/Users/hooks/useUserForm.js +101 -0
- package/presentation/adminUsers/views/Users/hooks/useUserForm.js.map +1 -0
- package/presentation/adminUsers/views/Users/search.js +21 -0
- package/presentation/adminUsers/views/Users/search.js.map +1 -0
- package/presentation/adminUsers/views/Users/search.svg +20 -0
- package/presentation/adminUsers/views/utils.d.ts +3 -0
- package/presentation/adminUsers/views/utils.js +12 -0
- package/presentation/adminUsers/views/utils.js.map +1 -0
- package/presentation/assumePermissions/AssumePermissionsPresenter.d.ts +36 -0
- package/presentation/assumePermissions/AssumePermissionsPresenter.js +153 -0
- package/presentation/assumePermissions/AssumePermissionsPresenter.js.map +1 -0
- package/presentation/assumePermissions/abstractions.d.ts +30 -0
- package/presentation/assumePermissions/abstractions.js +5 -0
- package/presentation/assumePermissions/abstractions.js.map +1 -0
- package/presentation/assumePermissions/components/AssumePermissionsButton.d.ts +14 -0
- package/presentation/assumePermissions/components/AssumePermissionsButton.js +42 -0
- package/presentation/assumePermissions/components/AssumePermissionsButton.js.map +1 -0
- package/presentation/assumePermissions/components/AssumedPermissionsBanner.d.ts +11 -0
- package/presentation/assumePermissions/components/AssumedPermissionsBanner.js +25 -0
- package/presentation/assumePermissions/components/AssumedPermissionsBanner.js.map +1 -0
- package/presentation/assumePermissions/components/AssumedPermissionsSelector.d.ts +2 -0
- package/presentation/assumePermissions/components/AssumedPermissionsSelector.js +68 -0
- package/presentation/assumePermissions/components/AssumedPermissionsSelector.js.map +1 -0
- package/presentation/assumePermissions/feature.d.ts +3 -0
- package/presentation/assumePermissions/feature.js +17 -0
- package/presentation/assumePermissions/feature.js.map +1 -0
- package/presentation/assumePermissions/index.d.ts +4 -0
- package/presentation/assumePermissions/index.js +4 -0
- package/presentation/banners/BannersPresenter.d.ts +14 -0
- package/presentation/banners/BannersPresenter.js +60 -0
- package/presentation/banners/BannersPresenter.js.map +1 -0
- package/presentation/banners/abstractions.d.ts +24 -0
- package/presentation/banners/abstractions.js +5 -0
- package/presentation/banners/abstractions.js.map +1 -0
- package/presentation/banners/components/Banner.d.ts +10 -0
- package/presentation/banners/components/Banner.js +32 -0
- package/presentation/banners/components/Banner.js.map +1 -0
- package/presentation/banners/components/BannerBar.d.ts +11 -0
- package/presentation/banners/components/BannerBar.js +51 -0
- package/presentation/banners/components/BannerBar.js.map +1 -0
- package/presentation/banners/feature.d.ts +3 -0
- package/presentation/banners/feature.js +17 -0
- package/presentation/banners/feature.js.map +1 -0
- package/presentation/banners/index.d.ts +6 -0
- package/presentation/banners/index.js +4 -0
- package/presentation/banners/useBanner.d.ts +10 -0
- package/presentation/banners/useBanner.js +15 -0
- package/presentation/banners/useBanner.js.map +1 -0
- package/presentation/commandPalette/CommandPalettePresenter.d.ts +5 -0
- package/presentation/commandPalette/CommandPalettePresenter.js +25 -4
- package/presentation/commandPalette/CommandPalettePresenter.js.map +1 -1
- package/presentation/commandPalette/abstractions.d.ts +17 -1
- package/presentation/commandPalette/abstractions.js.map +1 -1
- package/presentation/commandPalette/commands/AskAiCommand.d.ts +25 -0
- package/presentation/commandPalette/commands/AskAiCommand.js +33 -0
- package/presentation/commandPalette/commands/AskAiCommand.js.map +1 -0
- package/presentation/commandPalette/commands/SendMessageCommand.js +1 -1
- package/presentation/commandPalette/commands/SendMessageCommand.js.map +1 -1
- package/presentation/commandPalette/commands/feature.js +2 -0
- package/presentation/commandPalette/commands/feature.js.map +1 -1
- package/presentation/createReactiveComponent.d.ts +1 -0
- package/presentation/createReactiveComponent.js +1 -0
- package/presentation/debugger/DebuggerPresenter.d.ts +14 -0
- package/presentation/debugger/DebuggerPresenter.js +45 -0
- package/presentation/debugger/DebuggerPresenter.js.map +1 -0
- package/presentation/debugger/abstractions.d.ts +17 -0
- package/presentation/debugger/abstractions.js +5 -0
- package/presentation/debugger/abstractions.js.map +1 -0
- package/presentation/debugger/components/DebuggerIndicator.d.ts +2 -0
- package/presentation/debugger/components/DebuggerIndicator.js +45 -0
- package/presentation/debugger/components/DebuggerIndicator.js.map +1 -0
- package/presentation/debugger/components/DebuggerView.d.ts +4 -0
- package/presentation/debugger/components/DebuggerView.js +44 -0
- package/presentation/debugger/components/DebuggerView.js.map +1 -0
- package/presentation/debugger/downloadJson.d.ts +7 -0
- package/presentation/debugger/downloadJson.js +17 -0
- package/presentation/debugger/downloadJson.js.map +1 -0
- package/presentation/debugger/feature.d.ts +3 -0
- package/presentation/debugger/feature.js +17 -0
- package/presentation/debugger/feature.js.map +1 -0
- package/presentation/debugger/routes.d.ts +4 -0
- package/presentation/debugger/routes.js +10 -0
- package/presentation/debugger/routes.js.map +1 -0
- package/presentation/featureFlags/FeatureFlagsProvider.d.ts +7 -0
- package/presentation/featureFlags/FeatureFlagsProvider.js +22 -0
- package/presentation/featureFlags/FeatureFlagsProvider.js.map +1 -0
- package/presentation/featureFlags/useFeatureFlags.d.ts +2 -0
- package/presentation/featureFlags/useFeatureFlags.js +17 -0
- package/presentation/featureFlags/useFeatureFlags.js.map +1 -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.d.ts +2 -2
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js +9 -7
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js +0 -3
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.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 +5 -0
- package/presentation/listPresenter/FolderAwareDataSource.js +4 -3
- package/presentation/listPresenter/FolderAwareDataSource.js.map +1 -1
- package/presentation/listPresenter/QueryMatcher.d.ts +28 -5
- package/presentation/listPresenter/QueryMatcher.js +74 -4
- package/presentation/listPresenter/QueryMatcher.js.map +1 -1
- package/presentation/listPresenter/QueryMatcher.test.d.ts +1 -0
- package/presentation/listPresenter/QueryMatcher.test.js +345 -0
- package/presentation/listPresenter/QueryMatcher.test.js.map +1 -0
- package/presentation/tenancy/TenancyProvider.js +0 -4
- package/presentation/tenancy/TenancyProvider.js.map +1 -1
- package/presentation/trashBin/TrashBinPresenter.js +3 -1
- package/presentation/trashBin/TrashBinPresenter.js.map +1 -1
- package/presentation/trashBin/TrashBinPresenter.test.d.ts +1 -0
- package/presentation/trashBin/TrashBinPresenter.test.js +91 -0
- package/presentation/trashBin/TrashBinPresenter.test.js.map +1 -0
- package/presentation/trashBin/abstractions.d.ts +1 -1
- package/presentation/trashBin/abstractions.js.map +1 -1
- package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
- package/presentation/trashBin/components/BulkActions/DeleteItems.js +5 -1
- package/presentation/trashBin/components/BulkActions/DeleteItems.js.map +1 -1
- package/presentation/trashBin/components/BulkActions/DeleteItems.test.d.ts +1 -0
- package/presentation/trashBin/components/BulkActions/DeleteItems.test.js +100 -0
- package/presentation/trashBin/components/BulkActions/DeleteItems.test.js.map +1 -0
- package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
- package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.js +2 -1
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.js.map +1 -1
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.d.ts +1 -0
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.js +67 -0
- package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.js.map +1 -0
- package/static/svg/search.43fa797c.svg +20 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +0 -1
- package/base/Base/Menus/WebinyVersion.d.ts +0 -2
- package/base/Base/Menus/WebinyVersion.js +0 -23
- package/base/Base/Menus/WebinyVersion.js.map +0 -1
- package/base/WebinyVersion.d.ts +0 -2
- package/base/WebinyVersion.js +0 -23
- package/base/WebinyVersion.js.map +0 -1
- 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/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/components/Wcp.d.ts +0 -19
- package/components/Wcp.js +0 -37
- package/components/Wcp.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/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.d.ts +0 -8
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +0 -17
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +0 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.d.ts +0 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js +0 -16
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js.map +0 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { makeAutoObservable, runInAction } from "mobx";
|
|
2
|
+
import { createImplementation } from "@webiny/di";
|
|
3
|
+
import { LocalStorage } from "@webiny/app/features/localStorage";
|
|
4
|
+
import { FeatureFlags } from "@webiny/feature-flags";
|
|
5
|
+
import { FeatureFlagsGateway, FeatureFlagsService } from "./abstractions.js";
|
|
6
|
+
const LOCAL_STORAGE_KEY = "featureFlags";
|
|
7
|
+
class FeatureFlagsServiceImpl {
|
|
8
|
+
constructor(gateway, localStorage){
|
|
9
|
+
this.gateway = gateway;
|
|
10
|
+
this.localStorage = localStorage;
|
|
11
|
+
this.flags = new FeatureFlags({});
|
|
12
|
+
this.loaded = false;
|
|
13
|
+
makeAutoObservable(this, {}, {
|
|
14
|
+
autoBind: true
|
|
15
|
+
});
|
|
16
|
+
this.initializeFromLocalStorage();
|
|
17
|
+
}
|
|
18
|
+
initializeFromLocalStorage() {
|
|
19
|
+
try {
|
|
20
|
+
const cached = this.localStorage.get(LOCAL_STORAGE_KEY);
|
|
21
|
+
if (cached) {
|
|
22
|
+
this.flags = FeatureFlags.fromDto(cached);
|
|
23
|
+
this.loaded = true;
|
|
24
|
+
}
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.warn("Failed to load feature flags from localStorage:", error);
|
|
27
|
+
}
|
|
28
|
+
this.loadFlags();
|
|
29
|
+
}
|
|
30
|
+
getFlags() {
|
|
31
|
+
return this.flags;
|
|
32
|
+
}
|
|
33
|
+
isLoaded() {
|
|
34
|
+
return this.loaded;
|
|
35
|
+
}
|
|
36
|
+
async loadFlags() {
|
|
37
|
+
try {
|
|
38
|
+
const data = await this.gateway.fetchFlags();
|
|
39
|
+
const dto = data ?? {};
|
|
40
|
+
const flags = FeatureFlags.fromDto(dto);
|
|
41
|
+
runInAction(()=>{
|
|
42
|
+
this.flags = flags;
|
|
43
|
+
this.loaded = true;
|
|
44
|
+
});
|
|
45
|
+
this.localStorage.set(LOCAL_STORAGE_KEY, dto);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
console.error("Failed to load feature flags:", error);
|
|
48
|
+
runInAction(()=>{
|
|
49
|
+
this.loaded = true;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const FeatureFlagsService_FeatureFlagsService = createImplementation({
|
|
55
|
+
abstraction: FeatureFlagsService,
|
|
56
|
+
implementation: FeatureFlagsServiceImpl,
|
|
57
|
+
dependencies: [
|
|
58
|
+
FeatureFlagsGateway,
|
|
59
|
+
LocalStorage
|
|
60
|
+
]
|
|
61
|
+
});
|
|
62
|
+
export { FeatureFlagsService_FeatureFlagsService as FeatureFlagsService };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=FeatureFlagsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/featureFlags/FeatureFlagsService.js","sources":["../../../src/features/featureFlags/FeatureFlagsService.ts"],"sourcesContent":["import { makeAutoObservable, runInAction } from \"mobx\";\nimport { createImplementation } from \"@webiny/di\";\nimport { LocalStorage } from \"@webiny/app/features/localStorage\";\nimport { FeatureFlags } from \"@webiny/feature-flags\";\nimport type { IFeatureFlagsDto } from \"@webiny/feature-flags\";\nimport { FeatureFlagsService as Abstraction, FeatureFlagsGateway } from \"./abstractions.js\";\n\nconst LOCAL_STORAGE_KEY = \"featureFlags\";\n\nclass FeatureFlagsServiceImpl implements Abstraction.Interface {\n private flags: FeatureFlags = new FeatureFlags({});\n private loaded = false;\n\n constructor(\n private gateway: FeatureFlagsGateway.Interface,\n private localStorage: LocalStorage.Interface\n ) {\n makeAutoObservable(this, {}, { autoBind: true });\n this.initializeFromLocalStorage();\n }\n\n private initializeFromLocalStorage(): void {\n try {\n const cached = this.localStorage.get<IFeatureFlagsDto>(LOCAL_STORAGE_KEY);\n if (cached) {\n this.flags = FeatureFlags.fromDto(cached);\n this.loaded = true;\n }\n } catch (error) {\n console.warn(\"Failed to load feature flags from localStorage:\", error);\n }\n\n this.loadFlags();\n }\n\n getFlags(): FeatureFlags {\n return this.flags;\n }\n\n isLoaded(): boolean {\n return this.loaded;\n }\n\n async loadFlags(): Promise<void> {\n try {\n const data = await this.gateway.fetchFlags();\n const dto = data ?? {};\n const flags = FeatureFlags.fromDto(dto);\n\n runInAction(() => {\n this.flags = flags;\n this.loaded = true;\n });\n\n this.localStorage.set(LOCAL_STORAGE_KEY, dto);\n } catch (error) {\n console.error(\"Failed to load feature flags:\", error);\n runInAction(() => {\n this.loaded = true;\n });\n }\n }\n}\n\nexport const FeatureFlagsService = createImplementation({\n abstraction: Abstraction,\n implementation: FeatureFlagsServiceImpl,\n dependencies: [FeatureFlagsGateway, LocalStorage]\n});\n"],"names":["LOCAL_STORAGE_KEY","FeatureFlagsServiceImpl","gateway","localStorage","FeatureFlags","makeAutoObservable","cached","error","console","data","dto","flags","runInAction","FeatureFlagsService","createImplementation","Abstraction","FeatureFlagsGateway","LocalStorage"],"mappings":";;;;;AAOA,MAAMA,oBAAoB;AAE1B,MAAMC;IAIF,YACYC,OAAsC,EACtCC,YAAoC,CAC9C;aAFUD,OAAO,GAAPA;aACAC,YAAY,GAAZA;aALJ,KAAK,GAAiB,IAAIC,aAAa,CAAC;aACxC,MAAM,GAAG;QAMbC,mBAAmB,IAAI,EAAE,CAAC,GAAG;YAAE,UAAU;QAAK;QAC9C,IAAI,CAAC,0BAA0B;IACnC;IAEQ,6BAAmC;QACvC,IAAI;YACA,MAAMC,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAmBN;YACvD,IAAIM,QAAQ;gBACR,IAAI,CAAC,KAAK,GAAGF,aAAa,OAAO,CAACE;gBAClC,IAAI,CAAC,MAAM,GAAG;YAClB;QACJ,EAAE,OAAOC,OAAO;YACZC,QAAQ,IAAI,CAAC,mDAAmDD;QACpE;QAEA,IAAI,CAAC,SAAS;IAClB;IAEA,WAAyB;QACrB,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,WAAoB;QAChB,OAAO,IAAI,CAAC,MAAM;IACtB;IAEA,MAAM,YAA2B;QAC7B,IAAI;YACA,MAAME,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU;YAC1C,MAAMC,MAAMD,QAAQ,CAAC;YACrB,MAAME,QAAQP,aAAa,OAAO,CAACM;YAEnCE,YAAY;gBACR,IAAI,CAAC,KAAK,GAAGD;gBACb,IAAI,CAAC,MAAM,GAAG;YAClB;YAEA,IAAI,CAAC,YAAY,CAAC,GAAG,CAACX,mBAAmBU;QAC7C,EAAE,OAAOH,OAAO;YACZC,QAAQ,KAAK,CAAC,iCAAiCD;YAC/CK,YAAY;gBACR,IAAI,CAAC,MAAM,GAAG;YAClB;QACJ;IACJ;AACJ;AAEO,MAAMC,0CAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgBd;IAChB,cAAc;QAACe;QAAqBC;KAAa;AACrD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Abstraction } from "@webiny/di";
|
|
2
|
+
import type { IFeatureFlagsDto } from "@webiny/feature-flags";
|
|
3
|
+
import { FeatureFlags } from "@webiny/feature-flags";
|
|
4
|
+
export interface IFeatureFlagsGateway {
|
|
5
|
+
fetchFlags(): Promise<IFeatureFlagsDto | null>;
|
|
6
|
+
}
|
|
7
|
+
export declare const FeatureFlagsGateway: Abstraction<IFeatureFlagsGateway>;
|
|
8
|
+
export declare namespace FeatureFlagsGateway {
|
|
9
|
+
type Interface = IFeatureFlagsGateway;
|
|
10
|
+
}
|
|
11
|
+
export interface IFeatureFlagsService {
|
|
12
|
+
getFlags(): FeatureFlags;
|
|
13
|
+
isLoaded(): boolean;
|
|
14
|
+
loadFlags(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare const FeatureFlagsService: Abstraction<IFeatureFlagsService>;
|
|
17
|
+
export declare namespace FeatureFlagsService {
|
|
18
|
+
type Interface = IFeatureFlagsService;
|
|
19
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Abstraction } from "@webiny/di";
|
|
2
|
+
const FeatureFlagsGateway = new Abstraction("FeatureFlagsGateway");
|
|
3
|
+
const FeatureFlagsService = new Abstraction("FeatureFlagsService");
|
|
4
|
+
export { FeatureFlagsGateway, FeatureFlagsService };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/featureFlags/abstractions.js","sources":["../../../src/features/featureFlags/abstractions.ts"],"sourcesContent":["import { Abstraction } from \"@webiny/di\";\nimport type { IFeatureFlagsDto } from \"@webiny/feature-flags\";\nimport { FeatureFlags } from \"@webiny/feature-flags\";\n\nexport interface IFeatureFlagsGateway {\n fetchFlags(): Promise<IFeatureFlagsDto | null>;\n}\n\nexport const FeatureFlagsGateway = new Abstraction<IFeatureFlagsGateway>(\"FeatureFlagsGateway\");\n\nexport namespace FeatureFlagsGateway {\n export type Interface = IFeatureFlagsGateway;\n}\n\nexport interface IFeatureFlagsService {\n getFlags(): FeatureFlags;\n isLoaded(): boolean;\n loadFlags(): Promise<void>;\n}\n\nexport const FeatureFlagsService = new Abstraction<IFeatureFlagsService>(\"FeatureFlagsService\");\n\nexport namespace FeatureFlagsService {\n export type Interface = IFeatureFlagsService;\n}\n"],"names":["FeatureFlagsGateway","Abstraction","FeatureFlagsService"],"mappings":";AAQO,MAAMA,sBAAsB,IAAIC,YAAkC;AAYlE,MAAMC,sBAAsB,IAAID,YAAkC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { FeatureFlagsService } from "./abstractions.js";
|
|
3
|
+
import { FeatureFlagsService as external_FeatureFlagsService_js_FeatureFlagsService } from "./FeatureFlagsService.js";
|
|
4
|
+
import { FeatureFlagsGateway } from "./FeatureFlagsGateway.js";
|
|
5
|
+
const FeatureFlagsFeature = createFeature({
|
|
6
|
+
name: "FeatureFlags",
|
|
7
|
+
register (container) {
|
|
8
|
+
container.register(FeatureFlagsGateway).inSingletonScope();
|
|
9
|
+
container.register(external_FeatureFlagsService_js_FeatureFlagsService).inSingletonScope();
|
|
10
|
+
},
|
|
11
|
+
resolve (container) {
|
|
12
|
+
return {
|
|
13
|
+
service: container.resolve(FeatureFlagsService)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
export { FeatureFlagsFeature };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/featureFlags/feature.js","sources":["../../../src/features/featureFlags/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { Container } from \"@webiny/di\";\nimport { FeatureFlagsService as ServiceAbstraction } from \"./abstractions.js\";\nimport { FeatureFlagsService } from \"./FeatureFlagsService.js\";\nimport { FeatureFlagsGateway } from \"./FeatureFlagsGateway.js\";\n\nexport const FeatureFlagsFeature = createFeature({\n name: \"FeatureFlags\",\n register(container: Container) {\n container.register(FeatureFlagsGateway).inSingletonScope();\n container.register(FeatureFlagsService).inSingletonScope();\n },\n resolve(container: Container) {\n return {\n service: container.resolve(ServiceAbstraction)\n };\n }\n});\n"],"names":["FeatureFlagsFeature","createFeature","container","FeatureFlagsGateway","FeatureFlagsService","ServiceAbstraction"],"mappings":";;;;AAMO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,QAAQ,CAACC,qBAAqB,gBAAgB;QACxDD,UAAU,QAAQ,CAACE,qDAAqB,gBAAgB;IAC5D;IACA,SAAQF,SAAoB;QACxB,OAAO;YACH,SAASA,UAAU,OAAO,CAACG;QAC/B;IACJ;AACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IdentityContext } from "../../features/security/IdentityContext/abstractions.js";
|
|
2
|
+
import { RuleEvaluator } from "./abstractions.js";
|
|
3
|
+
declare class AccessControlRuleEvaluatorImpl implements RuleEvaluator.Interface {
|
|
4
|
+
private identityContext;
|
|
5
|
+
constructor(identityContext: IdentityContext.Interface);
|
|
6
|
+
canEvaluate(rule: RuleEvaluator.Rule): boolean;
|
|
7
|
+
evaluate(rule: RuleEvaluator.Rule): boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const AccessControlRuleEvaluator: typeof AccessControlRuleEvaluatorImpl & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IRuleEvaluator>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IdentityContext } from "../security/IdentityContext/abstractions.js";
|
|
2
|
+
import { RuleEvaluator } from "./abstractions.js";
|
|
3
|
+
class AccessControlRuleEvaluatorImpl {
|
|
4
|
+
constructor(identityContext){
|
|
5
|
+
this.identityContext = identityContext;
|
|
6
|
+
}
|
|
7
|
+
canEvaluate(rule) {
|
|
8
|
+
return "accessControl" === rule.type;
|
|
9
|
+
}
|
|
10
|
+
evaluate(rule) {
|
|
11
|
+
const identity = this.identityContext.getIdentity();
|
|
12
|
+
if (!identity.isAuthenticated || "string" != typeof rule.value) return false;
|
|
13
|
+
const separator = rule.value.indexOf(":");
|
|
14
|
+
const scope = rule.value.slice(0, separator);
|
|
15
|
+
const id = rule.value.slice(separator + 1);
|
|
16
|
+
if (-1 === separator || !id) return false;
|
|
17
|
+
if ("admin" === scope) return identity.id === id;
|
|
18
|
+
if ("team" === scope) return identity.teams.some((team)=>team.slug === id);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const AccessControlRuleEvaluator = RuleEvaluator.createImplementation({
|
|
23
|
+
implementation: AccessControlRuleEvaluatorImpl,
|
|
24
|
+
dependencies: [
|
|
25
|
+
IdentityContext
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
export { AccessControlRuleEvaluator };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=AccessControlRuleEvaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/formModel/AccessControlRuleEvaluator.js","sources":["../../../src/features/formModel/AccessControlRuleEvaluator.ts"],"sourcesContent":["import { IdentityContext } from \"~/features/security/IdentityContext/abstractions.js\";\nimport { RuleEvaluator } from \"./abstractions.js\";\n\nclass AccessControlRuleEvaluatorImpl implements RuleEvaluator.Interface {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n canEvaluate(rule: RuleEvaluator.Rule): boolean {\n return rule.type === \"accessControl\";\n }\n\n // Rule values follow the folder-permission target format: `admin:<userId>` or `team:<teamSlug>`.\n evaluate(rule: RuleEvaluator.Rule): boolean {\n const identity = this.identityContext.getIdentity();\n if (!identity.isAuthenticated || typeof rule.value !== \"string\") {\n return false;\n }\n\n const separator = rule.value.indexOf(\":\");\n const scope = rule.value.slice(0, separator);\n const id = rule.value.slice(separator + 1);\n if (separator === -1 || !id) {\n return false;\n }\n\n if (scope === \"admin\") {\n return identity.id === id;\n }\n if (scope === \"team\") {\n return identity.teams.some(team => team.slug === id);\n }\n return false;\n }\n}\n\nexport const AccessControlRuleEvaluator = RuleEvaluator.createImplementation({\n implementation: AccessControlRuleEvaluatorImpl,\n dependencies: [IdentityContext]\n});\n"],"names":["AccessControlRuleEvaluatorImpl","identityContext","rule","identity","separator","scope","id","team","AccessControlRuleEvaluator","RuleEvaluator","IdentityContext"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,eAA0C,CAAE;aAA5CA,eAAe,GAAfA;IAA6C;IAEjE,YAAYC,IAAwB,EAAW;QAC3C,OAAOA,AAAc,oBAAdA,KAAK,IAAI;IACpB;IAGA,SAASA,IAAwB,EAAW;QACxC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,IAAI,CAACA,SAAS,eAAe,IAAI,AAAsB,YAAtB,OAAOD,KAAK,KAAK,EAC9C,OAAO;QAGX,MAAME,YAAYF,KAAK,KAAK,CAAC,OAAO,CAAC;QACrC,MAAMG,QAAQH,KAAK,KAAK,CAAC,KAAK,CAAC,GAAGE;QAClC,MAAME,KAAKJ,KAAK,KAAK,CAAC,KAAK,CAACE,YAAY;QACxC,IAAIA,AAAc,OAAdA,aAAoB,CAACE,IACrB,OAAO;QAGX,IAAID,AAAU,YAAVA,OACA,OAAOF,SAAS,EAAE,KAAKG;QAE3B,IAAID,AAAU,WAAVA,OACA,OAAOF,SAAS,KAAK,CAAC,IAAI,CAACI,CAAAA,OAAQA,KAAK,IAAI,KAAKD;QAErD,OAAO;IACX;AACJ;AAEO,MAAME,6BAA6BC,cAAc,oBAAoB,CAAC;IACzE,gBAAgBT;IAChB,cAAc;QAACU;KAAgB;AACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { FormModelFeature } from "./feature.js";
|
|
4
|
+
import { FormModelFactory } from "./abstractions.js";
|
|
5
|
+
import { IdentityContext } from "../security/IdentityContext/abstractions.js";
|
|
6
|
+
import { Identity } from "../../domain/Identity.js";
|
|
7
|
+
const createIdentity = (id, teamSlugs = [])=>Identity.createAuthenticated({
|
|
8
|
+
id,
|
|
9
|
+
type: "admin",
|
|
10
|
+
displayName: id,
|
|
11
|
+
roles: [],
|
|
12
|
+
teams: teamSlugs.map((slug)=>({
|
|
13
|
+
id: `${slug}-id`,
|
|
14
|
+
slug,
|
|
15
|
+
name: slug
|
|
16
|
+
})),
|
|
17
|
+
permissions: [],
|
|
18
|
+
profile: {
|
|
19
|
+
external: false
|
|
20
|
+
},
|
|
21
|
+
currentTenant: {
|
|
22
|
+
id: "root",
|
|
23
|
+
name: "Root"
|
|
24
|
+
},
|
|
25
|
+
defaultTenant: {
|
|
26
|
+
id: "root",
|
|
27
|
+
name: "Root"
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const accessRule = (value, action = "hide")=>({
|
|
31
|
+
type: "accessControl",
|
|
32
|
+
target: "identity",
|
|
33
|
+
operator: "matches",
|
|
34
|
+
value,
|
|
35
|
+
action
|
|
36
|
+
});
|
|
37
|
+
const createContainer = (identity)=>{
|
|
38
|
+
const container = new Container();
|
|
39
|
+
FormModelFeature.register(container);
|
|
40
|
+
container.registerInstance(IdentityContext, {
|
|
41
|
+
getIdentity: ()=>identity,
|
|
42
|
+
setIdentity: ()=>{},
|
|
43
|
+
clear: ()=>{}
|
|
44
|
+
});
|
|
45
|
+
return container;
|
|
46
|
+
};
|
|
47
|
+
const createFieldForm = (identity, rules)=>createContainer(identity).resolve(FormModelFactory).create({
|
|
48
|
+
fields: (fields)=>({
|
|
49
|
+
secret: fields.text().label("Secret").rules(rules)
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
describe("AccessControlRuleEvaluator", ()=>{
|
|
53
|
+
it("hides a field from the admin the rule names", ()=>{
|
|
54
|
+
const form = createFieldForm(createIdentity("user-1"), [
|
|
55
|
+
accessRule("admin:user-1")
|
|
56
|
+
]);
|
|
57
|
+
expect(form.field("secret").visible).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
it("leaves the field visible for other admins", ()=>{
|
|
60
|
+
const form = createFieldForm(createIdentity("user-2"), [
|
|
61
|
+
accessRule("admin:user-1")
|
|
62
|
+
]);
|
|
63
|
+
expect(form.field("secret").visible).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
it("hides a field from members of the team the rule names, by team slug", ()=>{
|
|
66
|
+
const form = createFieldForm(createIdentity("user-2", [
|
|
67
|
+
"editors"
|
|
68
|
+
]), [
|
|
69
|
+
accessRule("team:editors")
|
|
70
|
+
]);
|
|
71
|
+
expect(form.field("secret").visible).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
it("leaves the field visible for admins outside the team", ()=>{
|
|
74
|
+
const form = createFieldForm(createIdentity("user-2", [
|
|
75
|
+
"writers"
|
|
76
|
+
]), [
|
|
77
|
+
accessRule("team:editors")
|
|
78
|
+
]);
|
|
79
|
+
expect(form.field("secret").visible).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it("does not match a team by its id", ()=>{
|
|
82
|
+
const form = createFieldForm(createIdentity("user-2", [
|
|
83
|
+
"editors"
|
|
84
|
+
]), [
|
|
85
|
+
accessRule("team:editors-id")
|
|
86
|
+
]);
|
|
87
|
+
expect(form.field("secret").visible).toBe(true);
|
|
88
|
+
});
|
|
89
|
+
it("disables the field for a viewer rule", ()=>{
|
|
90
|
+
const form = createFieldForm(createIdentity("user-1"), [
|
|
91
|
+
accessRule("admin:user-1", "disable")
|
|
92
|
+
]);
|
|
93
|
+
expect(form.field("secret").visible).toBe(true);
|
|
94
|
+
expect(form.field("secret").vm.disabled).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
it("applies when any of several rules matches", ()=>{
|
|
97
|
+
const form = createFieldForm(createIdentity("user-3", [
|
|
98
|
+
"editors"
|
|
99
|
+
]), [
|
|
100
|
+
accessRule("admin:user-1"),
|
|
101
|
+
accessRule("team:editors")
|
|
102
|
+
]);
|
|
103
|
+
expect(form.field("secret").visible).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
describe("read-only and no-access rules on one field", ()=>{
|
|
106
|
+
const rules = [
|
|
107
|
+
accessRule("admin:user-1", "disable"),
|
|
108
|
+
accessRule("team:team-1", "hide")
|
|
109
|
+
];
|
|
110
|
+
it.each([
|
|
111
|
+
[
|
|
112
|
+
"matches only the read-only rule",
|
|
113
|
+
"user-1",
|
|
114
|
+
[],
|
|
115
|
+
true,
|
|
116
|
+
true
|
|
117
|
+
],
|
|
118
|
+
[
|
|
119
|
+
"matches only the no-access rule",
|
|
120
|
+
"user-2",
|
|
121
|
+
[
|
|
122
|
+
"team-1"
|
|
123
|
+
],
|
|
124
|
+
false,
|
|
125
|
+
false
|
|
126
|
+
],
|
|
127
|
+
[
|
|
128
|
+
"matches both rules",
|
|
129
|
+
"user-1",
|
|
130
|
+
[
|
|
131
|
+
"team-1"
|
|
132
|
+
],
|
|
133
|
+
false,
|
|
134
|
+
true
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
"matches neither rule",
|
|
138
|
+
"user-2",
|
|
139
|
+
[
|
|
140
|
+
"team-2"
|
|
141
|
+
],
|
|
142
|
+
true,
|
|
143
|
+
false
|
|
144
|
+
]
|
|
145
|
+
])("%s", (_, id, teams, visible, disabled)=>{
|
|
146
|
+
const form = createFieldForm(createIdentity(id, teams), rules);
|
|
147
|
+
expect(form.field("secret").visible).toBe(visible);
|
|
148
|
+
expect(form.field("secret").disabled).toBe(disabled);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
it("does not match an anonymous identity", ()=>{
|
|
152
|
+
const form = createFieldForm(Identity.createAnonymous(), [
|
|
153
|
+
accessRule("admin:anonymous")
|
|
154
|
+
]);
|
|
155
|
+
expect(form.field("secret").visible).toBe(true);
|
|
156
|
+
});
|
|
157
|
+
it.each([
|
|
158
|
+
[
|
|
159
|
+
"no scope",
|
|
160
|
+
"user-1"
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"unknown scope",
|
|
164
|
+
"role:user-1"
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
"empty id",
|
|
168
|
+
"admin:"
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
"null",
|
|
172
|
+
null
|
|
173
|
+
],
|
|
174
|
+
[
|
|
175
|
+
"non-string",
|
|
176
|
+
1
|
|
177
|
+
]
|
|
178
|
+
])("ignores a malformed value (%s)", (_, value)=>{
|
|
179
|
+
const form = createFieldForm(createIdentity("user-1"), [
|
|
180
|
+
accessRule(value)
|
|
181
|
+
]);
|
|
182
|
+
expect(form.field("secret").visible).toBe(true);
|
|
183
|
+
});
|
|
184
|
+
it("hides a tab from the admin the rule names, alongside a condition rule", ()=>{
|
|
185
|
+
const form = createContainer(createIdentity("user-1")).resolve(FormModelFactory).create({
|
|
186
|
+
fields: (fields)=>({
|
|
187
|
+
options: fields.text().label("Options"),
|
|
188
|
+
map: fields.text().label("Map")
|
|
189
|
+
}),
|
|
190
|
+
layout: (layout)=>[
|
|
191
|
+
layout.tabs("tabs").tab("tab1", (tab)=>{
|
|
192
|
+
tab.label("Tab 1").layout((layout)=>[
|
|
193
|
+
layout.row("options")
|
|
194
|
+
]);
|
|
195
|
+
}).tab("tab2", (tab)=>{
|
|
196
|
+
tab.label("Tab 2").rules([
|
|
197
|
+
{
|
|
198
|
+
type: "condition",
|
|
199
|
+
target: "options",
|
|
200
|
+
operator: "!=",
|
|
201
|
+
value: "map",
|
|
202
|
+
action: "disable"
|
|
203
|
+
},
|
|
204
|
+
accessRule("admin:user-1")
|
|
205
|
+
]).layout((layout)=>[
|
|
206
|
+
layout.row("map")
|
|
207
|
+
]);
|
|
208
|
+
})
|
|
209
|
+
]
|
|
210
|
+
});
|
|
211
|
+
const tabs = form.vm.layout.find((n)=>"tabs" === n.type);
|
|
212
|
+
expect(tabs.tabs.map((t)=>t.id)).toEqual([
|
|
213
|
+
"tab1"
|
|
214
|
+
]);
|
|
215
|
+
expect(form.field("map").visible).toBe(false);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
//# sourceMappingURL=AccessControlRuleEvaluator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/formModel/AccessControlRuleEvaluator.test.js","sources":["../../../src/features/formModel/AccessControlRuleEvaluator.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { FormModelFeature } from \"./feature.js\";\nimport { FormModelFactory, type IRule, type ITabsNodeVM } from \"./abstractions.js\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/abstractions.js\";\nimport { Identity } from \"~/domain/Identity.js\";\n\nconst createIdentity = (id: string, teamSlugs: string[] = []) =>\n Identity.createAuthenticated({\n id,\n type: \"admin\",\n displayName: id,\n roles: [],\n teams: teamSlugs.map(slug => ({ id: `${slug}-id`, slug, name: slug })),\n permissions: [],\n profile: { external: false },\n currentTenant: { id: \"root\", name: \"Root\" },\n defaultTenant: { id: \"root\", name: \"Root\" }\n } as Identity.Data);\n\nconst accessRule = (value: IRule[\"value\"], action: IRule[\"action\"] = \"hide\"): IRule => ({\n type: \"accessControl\",\n target: \"identity\",\n operator: \"matches\",\n value,\n action\n});\n\nconst createContainer = (identity: Identity) => {\n const container = new Container();\n FormModelFeature.register(container);\n container.registerInstance(IdentityContext, {\n getIdentity: () => identity,\n setIdentity: () => {},\n clear: () => {}\n });\n return container;\n};\n\nconst createFieldForm = (identity: Identity, rules: IRule[]) =>\n createContainer(identity)\n .resolve(FormModelFactory)\n .create({\n fields: fields => ({\n secret: fields.text().label(\"Secret\").rules(rules)\n })\n });\n\ndescribe(\"AccessControlRuleEvaluator\", () => {\n it(\"hides a field from the admin the rule names\", () => {\n const form = createFieldForm(createIdentity(\"user-1\"), [accessRule(\"admin:user-1\")]);\n\n expect(form.field(\"secret\").visible).toBe(false);\n });\n\n it(\"leaves the field visible for other admins\", () => {\n const form = createFieldForm(createIdentity(\"user-2\"), [accessRule(\"admin:user-1\")]);\n\n expect(form.field(\"secret\").visible).toBe(true);\n });\n\n it(\"hides a field from members of the team the rule names, by team slug\", () => {\n const form = createFieldForm(createIdentity(\"user-2\", [\"editors\"]), [\n accessRule(\"team:editors\")\n ]);\n\n expect(form.field(\"secret\").visible).toBe(false);\n });\n\n it(\"leaves the field visible for admins outside the team\", () => {\n const form = createFieldForm(createIdentity(\"user-2\", [\"writers\"]), [\n accessRule(\"team:editors\")\n ]);\n\n expect(form.field(\"secret\").visible).toBe(true);\n });\n\n it(\"does not match a team by its id\", () => {\n const form = createFieldForm(createIdentity(\"user-2\", [\"editors\"]), [\n accessRule(\"team:editors-id\")\n ]);\n\n expect(form.field(\"secret\").visible).toBe(true);\n });\n\n it(\"disables the field for a viewer rule\", () => {\n const form = createFieldForm(createIdentity(\"user-1\"), [\n accessRule(\"admin:user-1\", \"disable\")\n ]);\n\n expect(form.field(\"secret\").visible).toBe(true);\n expect(form.field(\"secret\").vm.disabled).toBe(true);\n });\n\n it(\"applies when any of several rules matches\", () => {\n const form = createFieldForm(createIdentity(\"user-3\", [\"editors\"]), [\n accessRule(\"admin:user-1\"),\n accessRule(\"team:editors\")\n ]);\n\n expect(form.field(\"secret\").visible).toBe(false);\n });\n\n describe(\"read-only and no-access rules on one field\", () => {\n const rules = [accessRule(\"admin:user-1\", \"disable\"), accessRule(\"team:team-1\", \"hide\")];\n\n it.each([\n [\"matches only the read-only rule\", \"user-1\", [], true, true],\n [\"matches only the no-access rule\", \"user-2\", [\"team-1\"], false, false],\n [\"matches both rules\", \"user-1\", [\"team-1\"], false, true],\n [\"matches neither rule\", \"user-2\", [\"team-2\"], true, false]\n ])(\"%s\", (_, id, teams, visible, disabled) => {\n const form = createFieldForm(createIdentity(id, teams), rules);\n\n expect(form.field(\"secret\").visible).toBe(visible);\n expect(form.field(\"secret\").disabled).toBe(disabled);\n });\n });\n\n it(\"does not match an anonymous identity\", () => {\n const form = createFieldForm(Identity.createAnonymous(), [accessRule(\"admin:anonymous\")]);\n\n expect(form.field(\"secret\").visible).toBe(true);\n });\n\n it.each([\n [\"no scope\", \"user-1\"],\n [\"unknown scope\", \"role:user-1\"],\n [\"empty id\", \"admin:\"],\n [\"null\", null],\n [\"non-string\", 1]\n ])(\"ignores a malformed value (%s)\", (_, value) => {\n const form = createFieldForm(createIdentity(\"user-1\"), [accessRule(value)]);\n\n expect(form.field(\"secret\").visible).toBe(true);\n });\n\n it(\"hides a tab from the admin the rule names, alongside a condition rule\", () => {\n const form = createContainer(createIdentity(\"user-1\"))\n .resolve(FormModelFactory)\n .create({\n fields: fields => ({\n options: fields.text().label(\"Options\"),\n map: fields.text().label(\"Map\")\n }),\n layout: layout => [\n layout\n .tabs(\"tabs\")\n .tab(\"tab1\", tab => {\n tab.label(\"Tab 1\").layout(layout => [layout.row(\"options\")]);\n })\n .tab(\"tab2\", tab => {\n tab.label(\"Tab 2\")\n .rules([\n {\n type: \"condition\",\n target: \"options\",\n operator: \"!=\",\n value: \"map\",\n action: \"disable\"\n },\n accessRule(\"admin:user-1\")\n ])\n .layout(layout => [layout.row(\"map\")]);\n })\n ]\n });\n\n const tabs = form.vm.layout.find(n => n.type === \"tabs\") as ITabsNodeVM;\n expect(tabs.tabs.map(t => t.id)).toEqual([\"tab1\"]);\n expect(form.field(\"map\").visible).toBe(false);\n });\n});\n"],"names":["createIdentity","id","teamSlugs","Identity","slug","accessRule","value","action","createContainer","identity","container","Container","FormModelFeature","IdentityContext","createFieldForm","rules","FormModelFactory","fields","describe","it","form","expect","_","teams","visible","disabled","layout","tab","tabs","n","t"],"mappings":";;;;;;AAOA,MAAMA,iBAAiB,CAACC,IAAYC,YAAsB,EAAE,GACxDC,SAAS,mBAAmB,CAAC;QACzBF;QACA,MAAM;QACN,aAAaA;QACb,OAAO,EAAE;QACT,OAAOC,UAAU,GAAG,CAACE,CAAAA,OAAS;gBAAE,IAAI,GAAGA,KAAK,GAAG,CAAC;gBAAEA;gBAAM,MAAMA;YAAK;QACnE,aAAa,EAAE;QACf,SAAS;YAAE,UAAU;QAAM;QAC3B,eAAe;YAAE,IAAI;YAAQ,MAAM;QAAO;QAC1C,eAAe;YAAE,IAAI;YAAQ,MAAM;QAAO;IAC9C;AAEJ,MAAMC,aAAa,CAACC,OAAuBC,SAA0B,MAAM,GAAa;QACpF,MAAM;QACN,QAAQ;QACR,UAAU;QACVD;QACAC;IACJ;AAEA,MAAMC,kBAAkB,CAACC;IACrB,MAAMC,YAAY,IAAIC;IACtBC,iBAAiB,QAAQ,CAACF;IAC1BA,UAAU,gBAAgB,CAACG,iBAAiB;QACxC,aAAa,IAAMJ;QACnB,aAAa,KAAO;QACpB,OAAO,KAAO;IAClB;IACA,OAAOC;AACX;AAEA,MAAMI,kBAAkB,CAACL,UAAoBM,QACzCP,gBAAgBC,UACX,OAAO,CAACO,kBACR,MAAM,CAAC;QACJ,QAAQC,CAAAA,SAAW;gBACf,QAAQA,OAAO,IAAI,GAAG,KAAK,CAAC,UAAU,KAAK,CAACF;YAChD;IACJ;AAERG,SAAS,8BAA8B;IACnCC,GAAG,+CAA+C;QAC9C,MAAMC,OAAON,gBAAgBd,eAAe,WAAW;YAACK,WAAW;SAAgB;QAEnFgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,6CAA6C;QAC5C,MAAMC,OAAON,gBAAgBd,eAAe,WAAW;YAACK,WAAW;SAAgB;QAEnFgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,uEAAuE;QACtE,MAAMC,OAAON,gBAAgBd,eAAe,UAAU;YAAC;SAAU,GAAG;YAChEK,WAAW;SACd;QAEDgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,wDAAwD;QACvD,MAAMC,OAAON,gBAAgBd,eAAe,UAAU;YAAC;SAAU,GAAG;YAChEK,WAAW;SACd;QAEDgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,mCAAmC;QAClC,MAAMC,OAAON,gBAAgBd,eAAe,UAAU;YAAC;SAAU,GAAG;YAChEK,WAAW;SACd;QAEDgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,wCAAwC;QACvC,MAAMC,OAAON,gBAAgBd,eAAe,WAAW;YACnDK,WAAW,gBAAgB;SAC9B;QAEDgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;QAC1CC,OAAOD,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC;IAClD;IAEAD,GAAG,6CAA6C;QAC5C,MAAMC,OAAON,gBAAgBd,eAAe,UAAU;YAAC;SAAU,GAAG;YAChEK,WAAW;YACXA,WAAW;SACd;QAEDgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAF,SAAS,8CAA8C;QACnD,MAAMH,QAAQ;YAACV,WAAW,gBAAgB;YAAYA,WAAW,eAAe;SAAQ;QAExFc,GAAG,IAAI,CAAC;YACJ;gBAAC;gBAAmC;gBAAU,EAAE;gBAAE;gBAAM;aAAK;YAC7D;gBAAC;gBAAmC;gBAAU;oBAAC;iBAAS;gBAAE;gBAAO;aAAM;YACvE;gBAAC;gBAAsB;gBAAU;oBAAC;iBAAS;gBAAE;gBAAO;aAAK;YACzD;gBAAC;gBAAwB;gBAAU;oBAAC;iBAAS;gBAAE;gBAAM;aAAM;SAC9D,EAAE,MAAM,CAACG,GAAGrB,IAAIsB,OAAOC,SAASC;YAC7B,MAAML,OAAON,gBAAgBd,eAAeC,IAAIsB,QAAQR;YAExDM,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAACI;YAC1CH,OAAOD,KAAK,KAAK,CAAC,UAAU,QAAQ,EAAE,IAAI,CAACK;QAC/C;IACJ;IAEAN,GAAG,wCAAwC;QACvC,MAAMC,OAAON,gBAAgBX,SAAS,eAAe,IAAI;YAACE,WAAW;SAAmB;QAExFgB,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,IAAI,CAAC;QACJ;YAAC;YAAY;SAAS;QACtB;YAAC;YAAiB;SAAc;QAChC;YAAC;YAAY;SAAS;QACtB;YAAC;YAAQ;SAAK;QACd;YAAC;YAAc;SAAE;KACpB,EAAE,kCAAkC,CAACG,GAAGhB;QACrC,MAAMc,OAAON,gBAAgBd,eAAe,WAAW;YAACK,WAAWC;SAAO;QAE1Ee,OAAOD,KAAK,KAAK,CAAC,UAAU,OAAO,EAAE,IAAI,CAAC;IAC9C;IAEAD,GAAG,yEAAyE;QACxE,MAAMC,OAAOZ,gBAAgBR,eAAe,WACvC,OAAO,CAACgB,kBACR,MAAM,CAAC;YACJ,QAAQC,CAAAA,SAAW;oBACf,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC7B,KAAKA,OAAO,IAAI,GAAG,KAAK,CAAC;gBAC7B;YACA,QAAQS,CAAAA,SAAU;oBACdA,OACK,IAAI,CAAC,QACL,GAAG,CAAC,QAAQC,CAAAA;wBACTA,IAAI,KAAK,CAAC,SAAS,MAAM,CAACD,CAAAA,SAAU;gCAACA,OAAO,GAAG,CAAC;6BAAW;oBAC/D,GACC,GAAG,CAAC,QAAQC,CAAAA;wBACTA,IAAI,KAAK,CAAC,SACL,KAAK,CAAC;4BACH;gCACI,MAAM;gCACN,QAAQ;gCACR,UAAU;gCACV,OAAO;gCACP,QAAQ;4BACZ;4BACAtB,WAAW;yBACd,EACA,MAAM,CAACqB,CAAAA,SAAU;gCAACA,OAAO,GAAG,CAAC;6BAAO;oBAC7C;iBACP;QACL;QAEJ,MAAME,OAAOR,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAACS,CAAAA,IAAKA,AAAW,WAAXA,EAAE,IAAI;QAC5CR,OAAOO,KAAK,IAAI,CAAC,GAAG,CAACE,CAAAA,IAAKA,EAAE,EAAE,GAAG,OAAO,CAAC;YAAC;SAAO;QACjDT,OAAOD,KAAK,KAAK,CAAC,OAAO,OAAO,EAAE,IAAI,CAAC;IAC3C;AACJ"}
|
|
@@ -4,6 +4,10 @@ const isEmpty = (value)=>{
|
|
|
4
4
|
if (Array.isArray(value) && 0 === value.length) return true;
|
|
5
5
|
return false;
|
|
6
6
|
};
|
|
7
|
+
const isEqual = (value, ruleValue)=>{
|
|
8
|
+
if ("boolean" == typeof value || "boolean" == typeof ruleValue) return value === ruleValue;
|
|
9
|
+
return value == ruleValue;
|
|
10
|
+
};
|
|
7
11
|
class ConditionRuleEvaluatorImpl {
|
|
8
12
|
canEvaluate(rule) {
|
|
9
13
|
return "condition" === rule.type;
|
|
@@ -12,14 +16,28 @@ class ConditionRuleEvaluatorImpl {
|
|
|
12
16
|
const field = safeGetField(form, rule.target);
|
|
13
17
|
const value = field?.getValue() ?? null;
|
|
14
18
|
switch(rule.operator){
|
|
19
|
+
case "==":
|
|
20
|
+
case "eq":
|
|
21
|
+
return isEqual(value, rule.value);
|
|
22
|
+
case "!=":
|
|
23
|
+
case "neq":
|
|
24
|
+
return !isEqual(value, rule.value);
|
|
25
|
+
case ">":
|
|
26
|
+
case "gt":
|
|
27
|
+
return Number(value) > Number(rule.value);
|
|
28
|
+
case "<":
|
|
29
|
+
case "lt":
|
|
30
|
+
return Number(value) < Number(rule.value);
|
|
31
|
+
case ">=":
|
|
32
|
+
case "gte":
|
|
33
|
+
return Number(value) >= Number(rule.value);
|
|
34
|
+
case "<=":
|
|
35
|
+
case "lte":
|
|
36
|
+
return Number(value) <= Number(rule.value);
|
|
15
37
|
case "isEmpty":
|
|
16
38
|
return isEmpty(value);
|
|
17
39
|
case "isNotEmpty":
|
|
18
40
|
return !isEmpty(value);
|
|
19
|
-
case "eq":
|
|
20
|
-
return value === rule.value;
|
|
21
|
-
case "neq":
|
|
22
|
-
return value !== rule.value;
|
|
23
41
|
case "isTruthy":
|
|
24
42
|
return !!value;
|
|
25
43
|
case "isFalsy":
|
|
@@ -27,6 +45,18 @@ class ConditionRuleEvaluatorImpl {
|
|
|
27
45
|
case "matches":
|
|
28
46
|
if ("string" != typeof value || null === rule.value) return false;
|
|
29
47
|
return value === rule.value;
|
|
48
|
+
case "contains":
|
|
49
|
+
return String(value ?? "").includes(String(rule.value ?? ""));
|
|
50
|
+
case "notContains":
|
|
51
|
+
return !String(value ?? "").includes(String(rule.value ?? ""));
|
|
52
|
+
case "startsWith":
|
|
53
|
+
return String(value ?? "").startsWith(String(rule.value ?? ""));
|
|
54
|
+
case "notStartsWith":
|
|
55
|
+
return !String(value ?? "").startsWith(String(rule.value ?? ""));
|
|
56
|
+
case "endsWith":
|
|
57
|
+
return String(value ?? "").endsWith(String(rule.value ?? ""));
|
|
58
|
+
case "notEndsWith":
|
|
59
|
+
return !String(value ?? "").endsWith(String(rule.value ?? ""));
|
|
30
60
|
default:
|
|
31
61
|
if ("development" === process.env.NODE_ENV) console.warn(`[FormModel] Unknown operator "${rule.operator}" in condition rule. Returning false.`);
|
|
32
62
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/ConditionRuleEvaluator.js","sources":["../../../src/features/formModel/ConditionRuleEvaluator.ts"],"sourcesContent":["import type { IFormModel } from \"./abstractions.js\";\nimport { RuleEvaluator } from \"./abstractions.js\";\n\nconst isEmpty = (value: unknown): boolean => {\n if (value === null || value === undefined || value === \"\") {\n return true;\n }\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n return false;\n};\n\nexport class ConditionRuleEvaluatorImpl implements RuleEvaluator.Interface {\n canEvaluate(rule: RuleEvaluator.Rule): boolean {\n return rule.type === \"condition\";\n }\n\n evaluate(rule: RuleEvaluator.Rule, form: IFormModel): boolean {\n const field = safeGetField(form, rule.target);\n const value = field?.getValue() ?? null;\n\n switch (rule.operator) {\n case \"
|
|
1
|
+
{"version":3,"file":"features/formModel/ConditionRuleEvaluator.js","sources":["../../../src/features/formModel/ConditionRuleEvaluator.ts"],"sourcesContent":["import type { IFormModel } from \"./abstractions.js\";\nimport { RuleEvaluator } from \"./abstractions.js\";\n\nconst isEmpty = (value: unknown): boolean => {\n if (value === null || value === undefined || value === \"\") {\n return true;\n }\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n return false;\n};\n\n// Loose equality coerces booleans to numbers (\"\" == false, 0 == false), so compare them strictly.\nconst isEqual = (value: unknown, ruleValue: unknown): boolean => {\n if (typeof value === \"boolean\" || typeof ruleValue === \"boolean\") {\n return value === ruleValue;\n }\n return value == ruleValue;\n};\n\nexport class ConditionRuleEvaluatorImpl implements RuleEvaluator.Interface {\n canEvaluate(rule: RuleEvaluator.Rule): boolean {\n return rule.type === \"condition\";\n }\n\n evaluate(rule: RuleEvaluator.Rule, form: IFormModel): boolean {\n const field = safeGetField(form, rule.target);\n const value = field?.getValue() ?? null;\n\n switch (rule.operator) {\n case \"==\":\n case \"eq\":\n return isEqual(value, rule.value);\n case \"!=\":\n case \"neq\":\n return !isEqual(value, rule.value);\n case \">\":\n case \"gt\":\n return Number(value) > Number(rule.value);\n case \"<\":\n case \"lt\":\n return Number(value) < Number(rule.value);\n case \">=\":\n case \"gte\":\n return Number(value) >= Number(rule.value);\n case \"<=\":\n case \"lte\":\n return Number(value) <= Number(rule.value);\n case \"isEmpty\":\n return isEmpty(value);\n case \"isNotEmpty\":\n return !isEmpty(value);\n case \"isTruthy\":\n return !!value;\n case \"isFalsy\":\n return !value;\n case \"matches\":\n if (typeof value !== \"string\" || rule.value === null) {\n return false;\n }\n return value === rule.value;\n case \"contains\":\n return String(value ?? \"\").includes(String(rule.value ?? \"\"));\n case \"notContains\":\n return !String(value ?? \"\").includes(String(rule.value ?? \"\"));\n case \"startsWith\":\n return String(value ?? \"\").startsWith(String(rule.value ?? \"\"));\n case \"notStartsWith\":\n return !String(value ?? \"\").startsWith(String(rule.value ?? \"\"));\n case \"endsWith\":\n return String(value ?? \"\").endsWith(String(rule.value ?? \"\"));\n case \"notEndsWith\":\n return !String(value ?? \"\").endsWith(String(rule.value ?? \"\"));\n default:\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `[FormModel] Unknown operator \"${rule.operator}\" in condition rule. Returning false.`\n );\n }\n return false;\n }\n }\n}\n\nfunction safeGetField(form: IFormModel, name: string) {\n try {\n return form.field(name);\n } catch {\n return undefined;\n }\n}\n\nexport const ConditionRuleEvaluator = RuleEvaluator.createImplementation({\n implementation: ConditionRuleEvaluatorImpl,\n dependencies: []\n});\n"],"names":["isEmpty","value","Array","isEqual","ruleValue","ConditionRuleEvaluatorImpl","rule","form","field","safeGetField","Number","String","process","console","name","ConditionRuleEvaluator","RuleEvaluator"],"mappings":";AAGA,MAAMA,UAAU,CAACC;IACb,IAAIA,QAAAA,SAAyCA,AAAU,OAAVA,OACzC,OAAO;IAEX,IAAIC,MAAM,OAAO,CAACD,UAAUA,AAAiB,MAAjBA,MAAM,MAAM,EACpC,OAAO;IAEX,OAAO;AACX;AAGA,MAAME,UAAU,CAACF,OAAgBG;IAC7B,IAAI,AAAiB,aAAjB,OAAOH,SAAuB,AAAqB,aAArB,OAAOG,WACrC,OAAOH,UAAUG;IAErB,OAAOH,SAASG;AACpB;AAEO,MAAMC;IACT,YAAYC,IAAwB,EAAW;QAC3C,OAAOA,AAAc,gBAAdA,KAAK,IAAI;IACpB;IAEA,SAASA,IAAwB,EAAEC,IAAgB,EAAW;QAC1D,MAAMC,QAAQC,aAAaF,MAAMD,KAAK,MAAM;QAC5C,MAAML,QAAQO,OAAO,cAAc;QAEnC,OAAQF,KAAK,QAAQ;YACjB,KAAK;YACL,KAAK;gBACD,OAAOH,QAAQF,OAAOK,KAAK,KAAK;YACpC,KAAK;YACL,KAAK;gBACD,OAAO,CAACH,QAAQF,OAAOK,KAAK,KAAK;YACrC,KAAK;YACL,KAAK;gBACD,OAAOI,OAAOT,SAASS,OAAOJ,KAAK,KAAK;YAC5C,KAAK;YACL,KAAK;gBACD,OAAOI,OAAOT,SAASS,OAAOJ,KAAK,KAAK;YAC5C,KAAK;YACL,KAAK;gBACD,OAAOI,OAAOT,UAAUS,OAAOJ,KAAK,KAAK;YAC7C,KAAK;YACL,KAAK;gBACD,OAAOI,OAAOT,UAAUS,OAAOJ,KAAK,KAAK;YAC7C,KAAK;gBACD,OAAON,QAAQC;YACnB,KAAK;gBACD,OAAO,CAACD,QAAQC;YACpB,KAAK;gBACD,OAAO,CAAC,CAACA;YACb,KAAK;gBACD,OAAO,CAACA;YACZ,KAAK;gBACD,IAAI,AAAiB,YAAjB,OAAOA,SAAsBK,AAAe,SAAfA,KAAK,KAAK,EACvC,OAAO;gBAEX,OAAOL,UAAUK,KAAK,KAAK;YAC/B,KAAK;gBACD,OAAOK,OAAOV,SAAS,IAAI,QAAQ,CAACU,OAAOL,KAAK,KAAK,IAAI;YAC7D,KAAK;gBACD,OAAO,CAACK,OAAOV,SAAS,IAAI,QAAQ,CAACU,OAAOL,KAAK,KAAK,IAAI;YAC9D,KAAK;gBACD,OAAOK,OAAOV,SAAS,IAAI,UAAU,CAACU,OAAOL,KAAK,KAAK,IAAI;YAC/D,KAAK;gBACD,OAAO,CAACK,OAAOV,SAAS,IAAI,UAAU,CAACU,OAAOL,KAAK,KAAK,IAAI;YAChE,KAAK;gBACD,OAAOK,OAAOV,SAAS,IAAI,QAAQ,CAACU,OAAOL,KAAK,KAAK,IAAI;YAC7D,KAAK;gBACD,OAAO,CAACK,OAAOV,SAAS,IAAI,QAAQ,CAACU,OAAOL,KAAK,KAAK,IAAI;YAC9D;gBACI,IAAIM,AAAyB,kBAAzBA,QAAQ,GAAG,CAAC,QAAQ,EACpBC,QAAQ,IAAI,CACR,CAAC,8BAA8B,EAAEP,KAAK,QAAQ,CAAC,qCAAqC,CAAC;gBAG7F,OAAO;QACf;IACJ;AACJ;AAEA,SAASG,aAAaF,IAAgB,EAAEO,IAAY;IAChD,IAAI;QACA,OAAOP,KAAK,KAAK,CAACO;IACtB,EAAE,OAAM;QACJ;IACJ;AACJ;AAEO,MAAMC,yBAAyBC,cAAc,oBAAoB,CAAC;IACrE,gBAAgBX;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -22,6 +22,7 @@ export declare class Field implements IField {
|
|
|
22
22
|
private _focusRequested;
|
|
23
23
|
private _qualifiedName;
|
|
24
24
|
private _parentPath;
|
|
25
|
+
private _scopePath;
|
|
25
26
|
private _form;
|
|
26
27
|
private _ancestorRules;
|
|
27
28
|
readonly config: IFieldConfig;
|
|
@@ -40,6 +41,12 @@ export declare class Field implements IField {
|
|
|
40
41
|
*/
|
|
41
42
|
setValueSilent(value: unknown): void;
|
|
42
43
|
setDisabled(value: boolean): void;
|
|
44
|
+
/**
|
|
45
|
+
* `form.field()` throws for a path it can't resolve, which happens while a form is
|
|
46
|
+
* still being assembled. Ancestor lookups treat that as "no parent" rather than
|
|
47
|
+
* failing the render.
|
|
48
|
+
*/
|
|
49
|
+
private _safeGetField;
|
|
43
50
|
private _evaluateRules;
|
|
44
51
|
get visible(): boolean;
|
|
45
52
|
get disabled(): boolean;
|
|
@@ -66,7 +73,12 @@ export declare class Field implements IField {
|
|
|
66
73
|
};
|
|
67
74
|
private _resolveRequired;
|
|
68
75
|
blur(): void;
|
|
69
|
-
setForm(form: IFormModel, parentPath?: string): void;
|
|
76
|
+
setForm(form: IFormModel, parentPath?: string, scopePath?: () => string): void;
|
|
77
|
+
/**
|
|
78
|
+
* A path `form.field()` resolves to exactly this field. Same as `qualifiedName`,
|
|
79
|
+
* except inside list items, where it carries the item index (`blocks.2.title`).
|
|
80
|
+
*/
|
|
81
|
+
get scopedName(): string;
|
|
70
82
|
private _callbackParams;
|
|
71
83
|
get qualifiedName(): string;
|
|
72
84
|
focus(): void;
|
|
@@ -48,6 +48,7 @@ class Field {
|
|
|
48
48
|
this._focusRequested = false;
|
|
49
49
|
this._qualifiedName = "";
|
|
50
50
|
this._parentPath = "";
|
|
51
|
+
this._scopePath = ()=>this._parentPath;
|
|
51
52
|
this._form = null;
|
|
52
53
|
this._ancestorRules = [];
|
|
53
54
|
this.config = config;
|
|
@@ -81,7 +82,8 @@ class Field {
|
|
|
81
82
|
else if (config.computedUntilDirty) this._computedUntilDirty = config.computedUntilDirty;
|
|
82
83
|
makeAutoObservable(this, {
|
|
83
84
|
config: false,
|
|
84
|
-
vm: computed
|
|
85
|
+
vm: computed,
|
|
86
|
+
_scopePath: false
|
|
85
87
|
});
|
|
86
88
|
}
|
|
87
89
|
get name() {
|
|
@@ -120,6 +122,13 @@ class Field {
|
|
|
120
122
|
setDisabled(value) {
|
|
121
123
|
this._disabled = value;
|
|
122
124
|
}
|
|
125
|
+
_safeGetField(name) {
|
|
126
|
+
try {
|
|
127
|
+
return this._form?.field(name);
|
|
128
|
+
} catch {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
123
132
|
_evaluateRules() {
|
|
124
133
|
if (!this._form) return {
|
|
125
134
|
visible: true,
|
|
@@ -134,11 +143,12 @@ class Field {
|
|
|
134
143
|
visible: true,
|
|
135
144
|
disabled: false
|
|
136
145
|
};
|
|
137
|
-
|
|
146
|
+
const scopePath = this._scopePath();
|
|
147
|
+
if (scopePath) {
|
|
138
148
|
const resolved = all.map((rule)=>{
|
|
139
149
|
if (rule.target.startsWith("$.")) return {
|
|
140
150
|
...rule,
|
|
141
|
-
target: `${
|
|
151
|
+
target: `${scopePath}.${rule.target.slice(2)}`
|
|
142
152
|
};
|
|
143
153
|
return rule;
|
|
144
154
|
});
|
|
@@ -156,6 +166,10 @@ class Field {
|
|
|
156
166
|
}
|
|
157
167
|
get disabled() {
|
|
158
168
|
if (this._disabled) return true;
|
|
169
|
+
if (this._parentPath && this._form) {
|
|
170
|
+
const parent = this._safeGetField(this._parentPath);
|
|
171
|
+
if (parent?.disabled) return true;
|
|
172
|
+
}
|
|
159
173
|
if (this._form && this._disabledWhenCallbacks.length > 0) {
|
|
160
174
|
const scoped = this._callbackParams();
|
|
161
175
|
for (const cb of this._disabledWhenCallbacks)if (cb(scoped)) return true;
|
|
@@ -235,15 +249,20 @@ class Field {
|
|
|
235
249
|
blur() {
|
|
236
250
|
for (const cb of this._onBlurCallbacks)cb(this._value, this._callbackParams());
|
|
237
251
|
}
|
|
238
|
-
setForm(form, parentPath) {
|
|
252
|
+
setForm(form, parentPath, scopePath) {
|
|
239
253
|
this._form = form;
|
|
240
254
|
this._parentPath = parentPath || "";
|
|
255
|
+
this._scopePath = scopePath ?? (()=>this._parentPath);
|
|
241
256
|
this._qualifiedName = parentPath ? `${parentPath}.${this.config.name}` : this.config.name;
|
|
242
257
|
}
|
|
258
|
+
get scopedName() {
|
|
259
|
+
const scopePath = this._scopePath();
|
|
260
|
+
return scopePath ? `${scopePath}.${this.config.name}` : this.config.name;
|
|
261
|
+
}
|
|
243
262
|
_callbackParams() {
|
|
244
263
|
if (!this._form) throw new Error("Field not attached to a form.");
|
|
245
264
|
return {
|
|
246
|
-
field: new FieldNavigator(this._form, this.
|
|
265
|
+
field: new FieldNavigator(this._form, this.scopedName),
|
|
247
266
|
form: this._form
|
|
248
267
|
};
|
|
249
268
|
}
|
|
@@ -280,6 +299,7 @@ class Field {
|
|
|
280
299
|
description: this.config.description,
|
|
281
300
|
note: this.config.note,
|
|
282
301
|
placeholder: this.config.placeholder,
|
|
302
|
+
autoFocus: this.config.autoFocus,
|
|
283
303
|
value: this.getValue(),
|
|
284
304
|
validation: this.visible ? this._validation : {
|
|
285
305
|
isValid: null
|