@webiny/app-admin 6.6.0-alpha.1 → 6.6.0-alpha.10
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.js +19 -2
- 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/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +21 -4
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +11 -2
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +2 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +14 -5
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +16 -25
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +18 -3
- 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/RadioButtonsRenderer.js +3 -2
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/SelectRenderer.js +4 -2
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base.js +2 -1
- package/base/Base.js.map +1 -1
- package/base/createRootContainer.js +4 -0
- package/base/createRootContainer.js.map +1 -1
- package/base/resolveApiUrl.d.ts +10 -0
- package/base/resolveApiUrl.js +11 -3
- package/base/resolveApiUrl.js.map +1 -1
- 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/base/ui/Layout.d.ts +20 -0
- package/base/ui/Layout.js +2 -1
- package/base/ui/Layout.js.map +1 -1
- 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.js +1 -1
- package/components/IconPicker/IconPickerComponent.js.map +1 -1
- package/components/SplitView/SplitView.d.ts +2 -2
- package/components/SplitView/SplitView.js +7 -7
- package/components/SplitView/SplitView.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/domain/Identity.js +1 -1
- package/domain/Identity.js.map +1 -1
- package/exports/admin/ui.d.ts +4 -0
- package/exports/admin/ui.js +4 -1
- package/exports/admin.d.ts +4 -0
- package/exports/admin.js +2 -0
- package/features/{aiChat/AiChatGateway.d.ts → adminAssistant/AdminAssistantGateway.d.ts} +7 -7
- package/features/{aiChat/AiChatGateway.js → adminAssistant/AdminAssistantGateway.js} +8 -8
- package/features/adminAssistant/AdminAssistantGateway.js.map +1 -0
- package/features/adminAssistant/AdminAssistantPresenter.d.ts +60 -0
- package/features/adminAssistant/AdminAssistantPresenter.js +377 -0
- package/features/adminAssistant/AdminAssistantPresenter.js.map +1 -0
- package/features/adminAssistant/abstractions.d.ts +176 -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/adminAssistant/turnsFromMessages.d.ts +15 -0
- package/features/adminAssistant/turnsFromMessages.js +77 -0
- package/features/adminAssistant/turnsFromMessages.js.map +1 -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/aiChats/AiChatSaveError.d.ts +6 -0
- package/features/aiChats/AiChatSaveError.js +8 -0
- package/features/aiChats/AiChatSaveError.js.map +1 -0
- package/features/aiChats/AiChatsGateway.d.ts +18 -0
- package/features/aiChats/AiChatsGateway.js +132 -0
- package/features/aiChats/AiChatsGateway.js.map +1 -0
- package/features/aiChats/AiChatsRepository.d.ts +36 -0
- package/features/aiChats/AiChatsRepository.js +110 -0
- package/features/aiChats/AiChatsRepository.js.map +1 -0
- package/features/aiChats/AiChatsRequestError.d.ts +9 -0
- package/features/aiChats/AiChatsRequestError.js +8 -0
- package/features/aiChats/AiChatsRequestError.js.map +1 -0
- package/features/aiChats/abstractions.d.ts +76 -0
- package/features/aiChats/abstractions.js +6 -0
- package/features/aiChats/abstractions.js.map +1 -0
- package/features/aiChats/feature.d.ts +3 -0
- package/features/aiChats/feature.js +19 -0
- package/features/aiChats/feature.js.map +1 -0
- package/features/aiChats/index.d.ts +9 -0
- package/features/aiChats/index.js +3 -0
- package/features/aiChats/messageOf.d.ts +2 -0
- package/features/aiChats/messageOf.js +7 -0
- package/features/aiChats/messageOf.js.map +1 -0
- package/features/aiSettings/abstractions.d.ts +16 -0
- package/features/aiSettings/abstractions.js +5 -0
- package/features/aiSettings/abstractions.js.map +1 -0
- package/features/aiSettings/index.d.ts +2 -0
- package/features/aiSettings/index.js +1 -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/dateFormatter/formatUtcOffset.d.ts +1 -0
- package/features/dateFormatter/formatUtcOffset.js +11 -0
- package/features/dateFormatter/formatUtcOffset.js.map +1 -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/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 +14 -1
- package/features/formModel/Field.js +41 -5
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +3 -3
- package/features/formModel/FieldBuilder.js +2 -1
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FieldBuilder.test.js +158 -1
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FocusManager.js +10 -3
- package/features/formModel/FocusManager.js.map +1 -1
- 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 +32 -9
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +835 -4
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/ObjectField.d.ts +12 -1
- package/features/formModel/ObjectField.js +70 -20
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/Rules.test.js +224 -16
- package/features/formModel/Rules.test.js.map +1 -1
- package/features/formModel/abstractions.d.ts +56 -4
- package/features/formModel/abstractions.js +2 -1
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/createFieldRenderer.d.ts +42 -0
- package/features/formModel/createFieldRenderer.js +33 -10
- package/features/formModel/createFieldRenderer.js.map +1 -1
- 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/hasSubtreeFocusRequest.d.ts +12 -0
- package/features/formModel/hasSubtreeFocusRequest.js +15 -0
- package/features/formModel/hasSubtreeFocusRequest.js.map +1 -0
- package/features/formModel/index.d.ts +3 -2
- package/features/formModel/index.js +2 -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/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 +2 -1
- 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/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/wcp/ReactLicense.d.ts +6 -1
- package/features/wcp/ReactLicense.js +17 -2
- package/features/wcp/ReactLicense.js.map +1 -1
- package/features/wcp/WcpGateway.js +4 -0
- package/features/wcp/WcpGateway.js.map +1 -1
- package/hooks/useHotkeys.js +6 -4
- package/hooks/useHotkeys.js.map +1 -1
- package/index.d.ts +27 -3
- package/index.js +23 -6
- package/modules/AccessManagementExtension.js +3 -1
- 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 +41 -41
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +1 -2
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
- package/presentation/accessManagement/roles/RolesPresenter.js +1 -2
- 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.js +6 -216
- package/presentation/accessManagement/roles/components/RolesView.js.map +1 -1
- package/presentation/accessManagement/teams/TeamsPresenter.js +1 -2
- 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.js +6 -198
- package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -1
- 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/aiChats/AiChatsPanelPresenter.d.ts +28 -0
- package/presentation/aiChats/AiChatsPanelPresenter.js +132 -0
- package/presentation/aiChats/AiChatsPanelPresenter.js.map +1 -0
- package/presentation/aiChats/abstractions.d.ts +69 -0
- package/presentation/aiChats/abstractions.js +5 -0
- package/presentation/aiChats/abstractions.js.map +1 -0
- package/presentation/aiChats/feature.d.ts +3 -0
- package/presentation/aiChats/feature.js +17 -0
- package/presentation/aiChats/feature.js.map +1 -0
- package/presentation/aiChats/index.d.ts +2 -0
- package/presentation/aiChats/index.js +2 -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.js +3 -1
- package/presentation/commandPalette/CommandPalettePresenter.js.map +1 -1
- package/presentation/commandPalette/abstractions.d.ts +5 -0
- package/presentation/commandPalette/abstractions.js.map +1 -1
- package/presentation/commandPalette/commands/AiChatsCommand.d.ts +24 -0
- package/presentation/commandPalette/commands/AiChatsCommand.js +41 -0
- package/presentation/commandPalette/commands/AiChatsCommand.js.map +1 -0
- package/presentation/commandPalette/commands/AskAiCommand.d.ts +1 -0
- package/presentation/commandPalette/commands/AskAiCommand.js +3 -2
- package/presentation/commandPalette/commands/AskAiCommand.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/installation/components/SystemInstaller/steps/AdminUserStep.js +4 -3
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -1
- 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 +72 -2
- 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/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.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/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/features/aiChat/AiChatGateway.js.map +0 -1
- package/features/aiChat/AiChatPresenter.d.ts +0 -32
- package/features/aiChat/AiChatPresenter.js +0 -220
- package/features/aiChat/AiChatPresenter.js.map +0 -1
- package/features/aiChat/abstractions.d.ts +0 -124
- package/features/aiChat/abstractions.js +0 -6
- package/features/aiChat/abstractions.js.map +0 -1
- package/features/aiChat/feature.d.ts +0 -3
- package/features/aiChat/feature.js +0 -19
- package/features/aiChat/feature.js.map +0 -1
- package/features/aiChat/index.d.ts +0 -6
- package/features/aiChat/index.js +0 -3
- 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,100 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
4
|
+
import { BulkActionsDeleteItems } from "./DeleteItems.js";
|
|
5
|
+
const mocks = vi.hoisted(()=>({
|
|
6
|
+
deleteItem: vi.fn(),
|
|
7
|
+
refresh: vi.fn(),
|
|
8
|
+
report: {
|
|
9
|
+
success: vi.fn(),
|
|
10
|
+
error: vi.fn()
|
|
11
|
+
}
|
|
12
|
+
}));
|
|
13
|
+
const items = [
|
|
14
|
+
{
|
|
15
|
+
id: "a",
|
|
16
|
+
title: "Item a"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "b",
|
|
20
|
+
title: "Item b"
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
vi.mock("~/index.js", ()=>({
|
|
24
|
+
useSnackbar: ()=>({
|
|
25
|
+
showSnackbar: vi.fn()
|
|
26
|
+
})
|
|
27
|
+
}));
|
|
28
|
+
vi.mock("../../hooks/index.js", ()=>({
|
|
29
|
+
useTrashBinPresenter: ()=>({
|
|
30
|
+
actions: {
|
|
31
|
+
deleteItem: mocks.deleteItem,
|
|
32
|
+
refresh: mocks.refresh
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
}));
|
|
36
|
+
vi.mock("../../configs/index.js", ()=>({
|
|
37
|
+
TrashBinListConfig: {
|
|
38
|
+
Browser: {
|
|
39
|
+
BulkAction: {
|
|
40
|
+
useWorker: ()=>({
|
|
41
|
+
items: items,
|
|
42
|
+
isSelectedAll: false,
|
|
43
|
+
resetItems: vi.fn(),
|
|
44
|
+
results: [],
|
|
45
|
+
processInSeries: async (callback)=>{
|
|
46
|
+
for (const item of items)await callback({
|
|
47
|
+
item,
|
|
48
|
+
report: mocks.report
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}),
|
|
52
|
+
useButtons: ()=>({
|
|
53
|
+
ButtonDefault: (props)=>/*#__PURE__*/ react.createElement("button", {
|
|
54
|
+
onClick: props.onAction
|
|
55
|
+
}, props.children)
|
|
56
|
+
}),
|
|
57
|
+
useDialog: ()=>({
|
|
58
|
+
showConfirmationDialog: (params)=>params.execute(),
|
|
59
|
+
showResultsDialog: vi.fn()
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
vi.mock("@webiny/admin-ui", ()=>({
|
|
66
|
+
Tooltip: (props)=>props.trigger
|
|
67
|
+
}));
|
|
68
|
+
vi.mock("@webiny/icons/delete.svg", ()=>({
|
|
69
|
+
ReactComponent: ()=>null
|
|
70
|
+
}));
|
|
71
|
+
describe("BulkActionsDeleteItems", ()=>{
|
|
72
|
+
afterEach(()=>{
|
|
73
|
+
cleanup();
|
|
74
|
+
vi.clearAllMocks();
|
|
75
|
+
});
|
|
76
|
+
it("reports a deleted item as a success", async ()=>{
|
|
77
|
+
mocks.deleteItem.mockResolvedValue(true);
|
|
78
|
+
render(/*#__PURE__*/ react.createElement(BulkActionsDeleteItems, null));
|
|
79
|
+
fireEvent.click(screen.getByRole("button", {
|
|
80
|
+
name: "Delete"
|
|
81
|
+
}));
|
|
82
|
+
await waitFor(()=>expect(mocks.report.success).toHaveBeenCalledTimes(2));
|
|
83
|
+
expect(mocks.report.error).not.toHaveBeenCalled();
|
|
84
|
+
});
|
|
85
|
+
it("reports an item whose delete returned false as a failure, not a success", async ()=>{
|
|
86
|
+
mocks.deleteItem.mockResolvedValueOnce(false).mockResolvedValueOnce(true);
|
|
87
|
+
render(/*#__PURE__*/ react.createElement(BulkActionsDeleteItems, null));
|
|
88
|
+
fireEvent.click(screen.getByRole("button", {
|
|
89
|
+
name: "Delete"
|
|
90
|
+
}));
|
|
91
|
+
await waitFor(()=>expect(mocks.report.error).toHaveBeenCalledTimes(1));
|
|
92
|
+
expect(mocks.report.error).toHaveBeenCalledWith({
|
|
93
|
+
title: "Item a",
|
|
94
|
+
message: "The item was not deleted."
|
|
95
|
+
});
|
|
96
|
+
expect(mocks.report.success).toHaveBeenCalledTimes(1);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=DeleteItems.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/trashBin/components/BulkActions/DeleteItems.test.js","sources":["../../../../../src/presentation/trashBin/components/BulkActions/DeleteItems.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { afterEach } from \"vitest\";\nimport type { Mock } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { cleanup } from \"@testing-library/react\";\nimport { fireEvent } from \"@testing-library/react\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { waitFor } from \"@testing-library/react\";\n\ninterface TestItem {\n id: string;\n title: string;\n}\n\ninterface TestReport {\n success: Mock;\n error: Mock;\n}\n\nconst mocks = vi.hoisted(() => ({\n deleteItem: vi.fn(),\n refresh: vi.fn(),\n report: { success: vi.fn(), error: vi.fn() }\n}));\n\nconst items: TestItem[] = [\n { id: \"a\", title: \"Item a\" },\n { id: \"b\", title: \"Item b\" }\n];\n\nvi.mock(\"~/index.js\", () => ({\n useSnackbar: () => ({ showSnackbar: vi.fn() })\n}));\n\nvi.mock(\"../../hooks/index.js\", () => ({\n useTrashBinPresenter: () => ({\n actions: { deleteItem: mocks.deleteItem, refresh: mocks.refresh }\n })\n}));\n\nvi.mock(\"../../configs/index.js\", () => ({\n TrashBinListConfig: {\n Browser: {\n BulkAction: {\n useWorker: () => ({\n items,\n isSelectedAll: false,\n resetItems: vi.fn(),\n results: [],\n processInSeries: async (\n callback: (params: { item: TestItem; report: TestReport }) => Promise<void>\n ) => {\n for (const item of items) {\n await callback({ item, report: mocks.report });\n }\n }\n }),\n useButtons: () => ({\n ButtonDefault: (props: { onAction: () => void; children: React.ReactNode }) => (\n <button onClick={props.onAction}>{props.children}</button>\n )\n }),\n useDialog: () => ({\n showConfirmationDialog: (params: { execute: () => Promise<void> }) =>\n params.execute(),\n showResultsDialog: vi.fn()\n })\n }\n }\n }\n}));\n\nvi.mock(\"@webiny/admin-ui\", () => ({\n Tooltip: (props: { trigger: React.ReactNode }) => props.trigger\n}));\n\nvi.mock(\"@webiny/icons/delete.svg\", () => ({ ReactComponent: () => null }));\n\nimport { BulkActionsDeleteItems } from \"./DeleteItems.js\";\n\ndescribe(\"BulkActionsDeleteItems\", () => {\n afterEach(() => {\n cleanup();\n vi.clearAllMocks();\n });\n\n it(\"reports a deleted item as a success\", async () => {\n mocks.deleteItem.mockResolvedValue(true);\n render(<BulkActionsDeleteItems />);\n\n fireEvent.click(screen.getByRole(\"button\", { name: \"Delete\" }));\n\n await waitFor(() => expect(mocks.report.success).toHaveBeenCalledTimes(2));\n expect(mocks.report.error).not.toHaveBeenCalled();\n });\n\n it(\"reports an item whose delete returned false as a failure, not a success\", async () => {\n mocks.deleteItem.mockResolvedValueOnce(false).mockResolvedValueOnce(true);\n render(<BulkActionsDeleteItems />);\n\n fireEvent.click(screen.getByRole(\"button\", { name: \"Delete\" }));\n\n await waitFor(() => expect(mocks.report.error).toHaveBeenCalledTimes(1));\n expect(mocks.report.error).toHaveBeenCalledWith({\n title: \"Item a\",\n message: \"The item was not deleted.\"\n });\n expect(mocks.report.success).toHaveBeenCalledTimes(1);\n });\n});\n"],"names":["mocks","vi","items","callback","item","props","params","describe","afterEach","cleanup","it","render","BulkActionsDeleteItems","fireEvent","screen","waitFor","expect"],"mappings":";;;;AAuBA,MAAMA,QAAQC,GAAG,OAAO,CAAC,IAAO;QAC5B,YAAYA,GAAG,EAAE;QACjB,SAASA,GAAG,EAAE;QACd,QAAQ;YAAE,SAASA,GAAG,EAAE;YAAI,OAAOA,GAAG,EAAE;QAAG;IAC/C;AAEA,MAAMC,QAAoB;IACtB;QAAE,IAAI;QAAK,OAAO;IAAS;IAC3B;QAAE,IAAI;QAAK,OAAO;IAAS;CAC9B;AAEDD,GAAG,IAAI,CAAC,cAAc,IAAO;QACzB,aAAa,IAAO;gBAAE,cAAcA,GAAG,EAAE;YAAG;IAChD;AAEAA,GAAG,IAAI,CAAC,wBAAwB,IAAO;QACnC,sBAAsB,IAAO;gBACzB,SAAS;oBAAE,YAAYD,MAAM,UAAU;oBAAE,SAASA,MAAM,OAAO;gBAAC;YACpE;IACJ;AAEAC,GAAG,IAAI,CAAC,0BAA0B,IAAO;QACrC,oBAAoB;YAChB,SAAS;gBACL,YAAY;oBACR,WAAW,IAAO;4BACdC,OAAAA;4BACA,eAAe;4BACf,YAAYD,GAAG,EAAE;4BACjB,SAAS,EAAE;4BACX,iBAAiB,OACbE;gCAEA,KAAK,MAAMC,QAAQF,MACf,MAAMC,SAAS;oCAAEC;oCAAM,QAAQJ,MAAM,MAAM;gCAAC;4BAEpD;wBACJ;oBACA,YAAY,IAAO;4BACf,eAAe,CAACK,QAAAA,WAAAA,GACZ,oBAAC;oCAAO,SAASA,MAAM,QAAQ;mCAAGA,MAAM,QAAQ;wBAExD;oBACA,WAAW,IAAO;4BACd,wBAAwB,CAACC,SACrBA,OAAO,OAAO;4BAClB,mBAAmBL,GAAG,EAAE;wBAC5B;gBACJ;YACJ;QACJ;IACJ;AAEAA,GAAG,IAAI,CAAC,oBAAoB,IAAO;QAC/B,SAAS,CAACI,QAAwCA,MAAM,OAAO;IACnE;AAEAJ,GAAG,IAAI,CAAC,4BAA4B,IAAO;QAAE,gBAAgB,IAAM;IAAK;AAIxEM,SAAS,0BAA0B;IAC/BC,UAAU;QACNC;QACAR,GAAG,aAAa;IACpB;IAEAS,GAAG,uCAAuC;QACtCV,MAAM,UAAU,CAAC,iBAAiB,CAAC;QACnCW,OAAO,WAADA,GAAC,oBAACC,wBAAsBA;QAE9BC,UAAU,KAAK,CAACC,OAAO,SAAS,CAAC,UAAU;YAAE,MAAM;QAAS;QAE5D,MAAMC,QAAQ,IAAMC,OAAOhB,MAAM,MAAM,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACvEgB,OAAOhB,MAAM,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,gBAAgB;IACnD;IAEAU,GAAG,2EAA2E;QAC1EV,MAAM,UAAU,CAAC,qBAAqB,CAAC,OAAO,qBAAqB,CAAC;QACpEW,OAAO,WAADA,GAAC,oBAACC,wBAAsBA;QAE9BC,UAAU,KAAK,CAACC,OAAO,SAAS,CAAC,UAAU;YAAE,MAAM;QAAS;QAE5D,MAAMC,QAAQ,IAAMC,OAAOhB,MAAM,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC;QACrEgB,OAAOhB,MAAM,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC;YAC5C,OAAO;YACP,SAAS;QACb;QACAgB,OAAOhB,MAAM,MAAM,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACvD;AACJ"}
|
|
@@ -11,7 +11,8 @@ const useDeleteTrashBinItem = ({ item })=>{
|
|
|
11
11
|
});
|
|
12
12
|
const openDialogDeleteItem = useCallback(()=>showConfirmation(async ()=>{
|
|
13
13
|
try {
|
|
14
|
-
await actions.deleteItem(item.id);
|
|
14
|
+
const deleted = await actions.deleteItem(item.id);
|
|
15
|
+
if (false === deleted) return;
|
|
15
16
|
toast.showSuccessToast({
|
|
16
17
|
title: `${item.title} was deleted successfully!`
|
|
17
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation/trashBin/hooks/useDeleteTrashBinItem.js","sources":["../../../../src/presentation/trashBin/hooks/useDeleteTrashBinItem.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useConfirmationDialog } from \"~/index.js\";\nimport type { TrashBinItem } from \"../abstractions.js\";\nimport { useTrashBinPresenter } from \"./useTrashBinPresenter.js\";\nimport { useToast } from \"@webiny/admin-ui\";\n\ninterface UseDeleteItemParams {\n item: TrashBinItem;\n}\n\nexport const useDeleteTrashBinItem = ({ item }: UseDeleteItemParams) => {\n const { actions } = useTrashBinPresenter();\n const toast = useToast();\n\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete item\",\n message: (\n <p>\n You are about to delete this item and all of its revisions!\n <br />\n Are you sure you want to permanently delete <strong>{item.title}</strong>?\n </p>\n )\n });\n\n const openDialogDeleteItem = useCallback(\n () =>\n showConfirmation(async () => {\n try {\n await actions.deleteItem(item.id);\n toast.showSuccessToast({ title: `${item.title} was deleted successfully!` });\n } catch (ex: any) {\n toast.showWarningToast({\n title: ex.message || `Error while deleting ${item.title}`\n });\n }\n }),\n [item, actions]\n );\n\n return { openDialogDeleteItem };\n};\n"],"names":["useDeleteTrashBinItem","item","actions","useTrashBinPresenter","toast","useToast","showConfirmation","useConfirmationDialog","openDialogDeleteItem","useCallback","ex"],"mappings":";;;;AAUO,MAAMA,wBAAwB,CAAC,EAAEC,IAAI,EAAuB;IAC/D,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAMC,QAAQC;IAEd,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,sBAAsB;QAC/C,OAAO;QACP,SAAS,WAAT,GACI,oBAAC,WAAE,6EAEC,oBAAC,aAAK,8DACsC,oBAAC,gBAAQN,KAAK,KAAK,GAAU;IAGrF;IAEA,MAAMO,uBAAuBC,YACzB,IACIH,iBAAiB;YACb,IAAI;gBACA,
|
|
1
|
+
{"version":3,"file":"presentation/trashBin/hooks/useDeleteTrashBinItem.js","sources":["../../../../src/presentation/trashBin/hooks/useDeleteTrashBinItem.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useConfirmationDialog } from \"~/index.js\";\nimport type { TrashBinItem } from \"../abstractions.js\";\nimport { useTrashBinPresenter } from \"./useTrashBinPresenter.js\";\nimport { useToast } from \"@webiny/admin-ui\";\n\ninterface UseDeleteItemParams {\n item: TrashBinItem;\n}\n\nexport const useDeleteTrashBinItem = ({ item }: UseDeleteItemParams) => {\n const { actions } = useTrashBinPresenter();\n const toast = useToast();\n\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete item\",\n message: (\n <p>\n You are about to delete this item and all of its revisions!\n <br />\n Are you sure you want to permanently delete <strong>{item.title}</strong>?\n </p>\n )\n });\n\n const openDialogDeleteItem = useCallback(\n () =>\n showConfirmation(async () => {\n try {\n const deleted = await actions.deleteItem(item.id);\n if (deleted === false) {\n return;\n }\n\n toast.showSuccessToast({ title: `${item.title} was deleted successfully!` });\n } catch (ex: any) {\n toast.showWarningToast({\n title: ex.message || `Error while deleting ${item.title}`\n });\n }\n }),\n [item, actions]\n );\n\n return { openDialogDeleteItem };\n};\n"],"names":["useDeleteTrashBinItem","item","actions","useTrashBinPresenter","toast","useToast","showConfirmation","useConfirmationDialog","openDialogDeleteItem","useCallback","deleted","ex"],"mappings":";;;;AAUO,MAAMA,wBAAwB,CAAC,EAAEC,IAAI,EAAuB;IAC/D,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAMC,QAAQC;IAEd,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,sBAAsB;QAC/C,OAAO;QACP,SAAS,WAAT,GACI,oBAAC,WAAE,6EAEC,oBAAC,aAAK,8DACsC,oBAAC,gBAAQN,KAAK,KAAK,GAAU;IAGrF;IAEA,MAAMO,uBAAuBC,YACzB,IACIH,iBAAiB;YACb,IAAI;gBACA,MAAMI,UAAU,MAAMR,QAAQ,UAAU,CAACD,KAAK,EAAE;gBAChD,IAAIS,AAAY,UAAZA,SACA;gBAGJN,MAAM,gBAAgB,CAAC;oBAAE,OAAO,GAAGH,KAAK,KAAK,CAAC,0BAA0B,CAAC;gBAAC;YAC9E,EAAE,OAAOU,IAAS;gBACdP,MAAM,gBAAgB,CAAC;oBACnB,OAAOO,GAAG,OAAO,IAAI,CAAC,qBAAqB,EAAEV,KAAK,KAAK,EAAE;gBAC7D;YACJ;QACJ,IACJ;QAACA;QAAMC;KAAQ;IAGnB,OAAO;QAAEM;IAAqB;AAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { cleanup, renderHook } from "@testing-library/react";
|
|
3
|
+
import { useDeleteTrashBinItem } from "./useDeleteTrashBinItem.js";
|
|
4
|
+
const mocks = vi.hoisted(()=>({
|
|
5
|
+
deleteItem: vi.fn(),
|
|
6
|
+
showSuccessToast: vi.fn(),
|
|
7
|
+
showWarningToast: vi.fn()
|
|
8
|
+
}));
|
|
9
|
+
vi.mock("~/index.js", ()=>({
|
|
10
|
+
useConfirmationDialog: ()=>({
|
|
11
|
+
showConfirmation: (callback)=>callback()
|
|
12
|
+
})
|
|
13
|
+
}));
|
|
14
|
+
vi.mock("./useTrashBinPresenter.js", ()=>({
|
|
15
|
+
useTrashBinPresenter: ()=>({
|
|
16
|
+
actions: {
|
|
17
|
+
deleteItem: mocks.deleteItem
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
}));
|
|
21
|
+
vi.mock("@webiny/admin-ui", ()=>({
|
|
22
|
+
useToast: ()=>({
|
|
23
|
+
showSuccessToast: mocks.showSuccessToast,
|
|
24
|
+
showWarningToast: mocks.showWarningToast
|
|
25
|
+
})
|
|
26
|
+
}));
|
|
27
|
+
const ITEM = {
|
|
28
|
+
id: "a",
|
|
29
|
+
title: "Item a"
|
|
30
|
+
};
|
|
31
|
+
describe("useDeleteTrashBinItem", ()=>{
|
|
32
|
+
afterEach(()=>{
|
|
33
|
+
cleanup();
|
|
34
|
+
vi.clearAllMocks();
|
|
35
|
+
});
|
|
36
|
+
it("shows the success toast when the item was deleted", async ()=>{
|
|
37
|
+
mocks.deleteItem.mockResolvedValue(true);
|
|
38
|
+
const { result } = renderHook(()=>useDeleteTrashBinItem({
|
|
39
|
+
item: ITEM
|
|
40
|
+
}));
|
|
41
|
+
await result.current.openDialogDeleteItem();
|
|
42
|
+
expect(mocks.showSuccessToast).toHaveBeenCalledWith({
|
|
43
|
+
title: "Item a was deleted successfully!"
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
it("shows no toast when the delete was not carried out (warning dismissed)", async ()=>{
|
|
47
|
+
mocks.deleteItem.mockResolvedValue(false);
|
|
48
|
+
const { result } = renderHook(()=>useDeleteTrashBinItem({
|
|
49
|
+
item: ITEM
|
|
50
|
+
}));
|
|
51
|
+
await result.current.openDialogDeleteItem();
|
|
52
|
+
expect(mocks.showSuccessToast).not.toHaveBeenCalled();
|
|
53
|
+
expect(mocks.showWarningToast).not.toHaveBeenCalled();
|
|
54
|
+
});
|
|
55
|
+
it("shows the warning toast when the delete throws", async ()=>{
|
|
56
|
+
mocks.deleteItem.mockRejectedValue(new Error("Network down"));
|
|
57
|
+
const { result } = renderHook(()=>useDeleteTrashBinItem({
|
|
58
|
+
item: ITEM
|
|
59
|
+
}));
|
|
60
|
+
await result.current.openDialogDeleteItem();
|
|
61
|
+
expect(mocks.showWarningToast).toHaveBeenCalledWith({
|
|
62
|
+
title: "Network down"
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=useDeleteTrashBinItem.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/trashBin/hooks/useDeleteTrashBinItem.test.js","sources":["../../../../src/presentation/trashBin/hooks/useDeleteTrashBinItem.test.tsx"],"sourcesContent":["import { afterEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { cleanup } from \"@testing-library/react\";\nimport { renderHook } from \"@testing-library/react\";\nimport type { TrashBinItem } from \"../abstractions.js\";\n\nconst mocks = vi.hoisted(() => ({\n deleteItem: vi.fn(),\n showSuccessToast: vi.fn(),\n showWarningToast: vi.fn()\n}));\n\nvi.mock(\"~/index.js\", () => ({\n useConfirmationDialog: () => ({\n showConfirmation: (callback: () => Promise<void>) => callback()\n })\n}));\n\nvi.mock(\"./useTrashBinPresenter.js\", () => ({\n useTrashBinPresenter: () => ({ actions: { deleteItem: mocks.deleteItem } })\n}));\n\nvi.mock(\"@webiny/admin-ui\", () => ({\n useToast: () => ({\n showSuccessToast: mocks.showSuccessToast,\n showWarningToast: mocks.showWarningToast\n })\n}));\n\nimport { useDeleteTrashBinItem } from \"./useDeleteTrashBinItem.js\";\n\nconst ITEM = { id: \"a\", title: \"Item a\" } as TrashBinItem;\n\ndescribe(\"useDeleteTrashBinItem\", () => {\n afterEach(() => {\n cleanup();\n vi.clearAllMocks();\n });\n\n it(\"shows the success toast when the item was deleted\", async () => {\n mocks.deleteItem.mockResolvedValue(true);\n const { result } = renderHook(() => useDeleteTrashBinItem({ item: ITEM }));\n\n await result.current.openDialogDeleteItem();\n\n expect(mocks.showSuccessToast).toHaveBeenCalledWith({\n title: \"Item a was deleted successfully!\"\n });\n });\n\n it(\"shows no toast when the delete was not carried out (warning dismissed)\", async () => {\n mocks.deleteItem.mockResolvedValue(false);\n const { result } = renderHook(() => useDeleteTrashBinItem({ item: ITEM }));\n\n await result.current.openDialogDeleteItem();\n\n expect(mocks.showSuccessToast).not.toHaveBeenCalled();\n expect(mocks.showWarningToast).not.toHaveBeenCalled();\n });\n\n it(\"shows the warning toast when the delete throws\", async () => {\n mocks.deleteItem.mockRejectedValue(new Error(\"Network down\"));\n const { result } = renderHook(() => useDeleteTrashBinItem({ item: ITEM }));\n\n await result.current.openDialogDeleteItem();\n\n expect(mocks.showWarningToast).toHaveBeenCalledWith({ title: \"Network down\" });\n });\n});\n"],"names":["mocks","vi","callback","ITEM","describe","afterEach","cleanup","it","result","renderHook","useDeleteTrashBinItem","expect","Error"],"mappings":";;;AASA,MAAMA,QAAQC,GAAG,OAAO,CAAC,IAAO;QAC5B,YAAYA,GAAG,EAAE;QACjB,kBAAkBA,GAAG,EAAE;QACvB,kBAAkBA,GAAG,EAAE;IAC3B;AAEAA,GAAG,IAAI,CAAC,cAAc,IAAO;QACzB,uBAAuB,IAAO;gBAC1B,kBAAkB,CAACC,WAAkCA;YACzD;IACJ;AAEAD,GAAG,IAAI,CAAC,6BAA6B,IAAO;QACxC,sBAAsB,IAAO;gBAAE,SAAS;oBAAE,YAAYD,MAAM,UAAU;gBAAC;YAAE;IAC7E;AAEAC,GAAG,IAAI,CAAC,oBAAoB,IAAO;QAC/B,UAAU,IAAO;gBACb,kBAAkBD,MAAM,gBAAgB;gBACxC,kBAAkBA,MAAM,gBAAgB;YAC5C;IACJ;AAIA,MAAMG,OAAO;IAAE,IAAI;IAAK,OAAO;AAAS;AAExCC,SAAS,yBAAyB;IAC9BC,UAAU;QACNC;QACAL,GAAG,aAAa;IACpB;IAEAM,GAAG,qDAAqD;QACpDP,MAAM,UAAU,CAAC,iBAAiB,CAAC;QACnC,MAAM,EAAEQ,MAAM,EAAE,GAAGC,WAAW,IAAMC,sBAAsB;gBAAE,MAAMP;YAAK;QAEvE,MAAMK,OAAO,OAAO,CAAC,oBAAoB;QAEzCG,OAAOX,MAAM,gBAAgB,EAAE,oBAAoB,CAAC;YAChD,OAAO;QACX;IACJ;IAEAO,GAAG,0EAA0E;QACzEP,MAAM,UAAU,CAAC,iBAAiB,CAAC;QACnC,MAAM,EAAEQ,MAAM,EAAE,GAAGC,WAAW,IAAMC,sBAAsB;gBAAE,MAAMP;YAAK;QAEvE,MAAMK,OAAO,OAAO,CAAC,oBAAoB;QAEzCG,OAAOX,MAAM,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACnDW,OAAOX,MAAM,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;IACvD;IAEAO,GAAG,kDAAkD;QACjDP,MAAM,UAAU,CAAC,iBAAiB,CAAC,IAAIY,MAAM;QAC7C,MAAM,EAAEJ,MAAM,EAAE,GAAGC,WAAW,IAAMC,sBAAsB;gBAAE,MAAMP;YAAK;QAEvE,MAAMK,OAAO,OAAO,CAAC,oBAAoB;QAEzCG,OAAOX,MAAM,gBAAgB,EAAE,oBAAoB,CAAC;YAAE,OAAO;QAAe;IAChF;AACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
|
4
|
+
height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
|
5
|
+
<g id="Header_x2F_BG" display="none">
|
|
6
|
+
<rect x="-358" y="-314" display="inline" fill="#F1F1F2" width="520" height="520"/>
|
|
7
|
+
</g>
|
|
8
|
+
<g id="Bounding_Boxes">
|
|
9
|
+
<g id="ui_x5F_spec_x5F_header_copy_3" display="none">
|
|
10
|
+
</g>
|
|
11
|
+
<path fill="none" d="M0,0h24v24H0V0z"/>
|
|
12
|
+
</g>
|
|
13
|
+
<g id="Rounded">
|
|
14
|
+
<g id="ui_x5F_spec_x5F_header_copy_5" display="none">
|
|
15
|
+
</g>
|
|
16
|
+
<path fill="currentColor" d="M15.5,14h-0.79l-0.28-0.27c1.2-1.4,1.82-3.31,1.48-5.34c-0.47-2.78-2.79-5-5.59-5.34c-4.23-0.52-7.79,3.04-7.27,7.27
|
|
17
|
+
c0.34,2.8,2.56,5.12,5.34,5.59c2.03,0.34,3.94-0.28,5.34-1.48L14,14.71v0.79l4.25,4.25c0.41,0.41,1.08,0.41,1.49,0l0,0
|
|
18
|
+
c0.41-0.41,0.41-1.08,0-1.49L15.5,14z M9.5,14C7.01,14,5,11.99,5,9.5S7.01,5,9.5,5S14,7.01,14,9.5S11.99,14,9.5,14z"/>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import react, { useState } from "react";
|
|
2
|
-
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
3
|
-
import { Button, Dialog, Text } from "@webiny/admin-ui";
|
|
4
|
-
import { ReactComponent } from "@webiny/icons/add.svg";
|
|
5
|
-
import { ReactComponent as add_circle_outline_svg_ReactComponent } from "@webiny/icons/add_circle_outline.svg";
|
|
6
|
-
const normalizeIcon = (icon)=>{
|
|
7
|
-
if (!icon) return;
|
|
8
|
-
return icon.name.split("/");
|
|
9
|
-
};
|
|
10
|
-
const AddTemplateButton = ({ templates, onSelect, label, size = "sm", variant = "tertiary" })=>/*#__PURE__*/ react.createElement("div", {
|
|
11
|
-
className: "flex justify-between items-center"
|
|
12
|
-
}, /*#__PURE__*/ react.createElement(Dialog, {
|
|
13
|
-
size: "lg",
|
|
14
|
-
className: "w-[800px]",
|
|
15
|
-
trigger: /*#__PURE__*/ react.createElement(Button, {
|
|
16
|
-
size: size,
|
|
17
|
-
variant: variant,
|
|
18
|
-
text: label,
|
|
19
|
-
icon: /*#__PURE__*/ react.createElement(ReactComponent, null)
|
|
20
|
-
}),
|
|
21
|
-
title: "Insert a template",
|
|
22
|
-
info: /*#__PURE__*/ react.createElement(react.Fragment, null)
|
|
23
|
-
}, /*#__PURE__*/ react.createElement(TemplateGallery, {
|
|
24
|
-
templates: templates,
|
|
25
|
-
onSelect: onSelect
|
|
26
|
-
})));
|
|
27
|
-
const TemplateGallery = ({ templates, onSelect })=>/*#__PURE__*/ react.createElement("div", {
|
|
28
|
-
className: "gap-md flex flex-wrap p-xs"
|
|
29
|
-
}, templates.map((template)=>/*#__PURE__*/ react.createElement(TemplateCard, {
|
|
30
|
-
key: template.id,
|
|
31
|
-
template: template,
|
|
32
|
-
onSelect: onSelect
|
|
33
|
-
})));
|
|
34
|
-
const TemplateCard = ({ template, onSelect })=>{
|
|
35
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
36
|
-
const icon = normalizeIcon(template.icon);
|
|
37
|
-
return /*#__PURE__*/ react.createElement("div", {
|
|
38
|
-
onMouseEnter: ()=>setIsHovered(true),
|
|
39
|
-
onMouseLeave: ()=>setIsHovered(false),
|
|
40
|
-
className: "flex flex-col justify-between bg-neutral-base overflow-hidden rounded-lg w-[173px] relative shadow-sm"
|
|
41
|
-
}, /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement("div", {
|
|
42
|
-
className: "flex items-center justify-center py-xxl w-full bg-neutral-dimmed"
|
|
43
|
-
}, icon ? /*#__PURE__*/ react.createElement(FontAwesomeIcon, {
|
|
44
|
-
className: "text-neutral-xstrong",
|
|
45
|
-
icon: icon,
|
|
46
|
-
style: {
|
|
47
|
-
width: 40,
|
|
48
|
-
height: 40
|
|
49
|
-
}
|
|
50
|
-
}) : null), /*#__PURE__*/ react.createElement("div", {
|
|
51
|
-
className: "py-sm-extra px-md"
|
|
52
|
-
}, /*#__PURE__*/ react.createElement(Text, {
|
|
53
|
-
size: "md",
|
|
54
|
-
className: "mb-xs text-neutral-primary font-semibold"
|
|
55
|
-
}, template.label))), isHovered && /*#__PURE__*/ react.createElement(Dialog.Close, {
|
|
56
|
-
asChild: true
|
|
57
|
-
}, /*#__PURE__*/ react.createElement("div", {
|
|
58
|
-
className: "absolute inset-0 flex items-center justify-center bg-white/80 cursor-pointer",
|
|
59
|
-
onClick: ()=>onSelect(template)
|
|
60
|
-
}, /*#__PURE__*/ react.createElement(Button, {
|
|
61
|
-
size: "lg",
|
|
62
|
-
variant: "primary",
|
|
63
|
-
icon: /*#__PURE__*/ react.createElement(add_circle_outline_svg_ReactComponent, null)
|
|
64
|
-
}, "Insert"))));
|
|
65
|
-
};
|
|
66
|
-
export { AddTemplateButton };
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=TemplatePicker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js","sources":["../../../../../src/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Button, Dialog, Text } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as PlusIcon } from \"@webiny/icons/add_circle_outline.svg\";\nimport type { ITemplateIcon, ITemplateVM } from \"~/features/formModel/index.js\";\n\nconst normalizeIcon = (icon: ITemplateIcon | undefined): IconProp | undefined => {\n if (!icon) {\n return undefined;\n }\n return icon.name.split(\"/\") as IconProp;\n};\n\nexport interface AddTemplateButtonProps {\n templates: ITemplateVM[];\n onSelect: (template: ITemplateVM) => void;\n label?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n}\n\nexport const AddTemplateButton = ({\n templates,\n onSelect,\n label,\n size = \"sm\",\n variant = \"tertiary\"\n}: AddTemplateButtonProps) => {\n return (\n <div className={\"flex justify-between items-center\"}>\n <Dialog\n size={\"lg\"}\n className={\"w-[800px]\"}\n trigger={<Button size={size} variant={variant} text={label} icon={<AddIcon />} />}\n title={\"Insert a template\"}\n info={<></>}\n >\n <TemplateGallery templates={templates} onSelect={onSelect} />\n </Dialog>\n </div>\n );\n};\n\ninterface TemplateGalleryProps {\n templates: ITemplateVM[];\n onSelect: (template: ITemplateVM) => void;\n}\n\nconst TemplateGallery = ({ templates, onSelect }: TemplateGalleryProps) => {\n return (\n <div className={\"gap-md flex flex-wrap p-xs\"}>\n {templates.map(template => (\n <TemplateCard key={template.id} template={template} onSelect={onSelect} />\n ))}\n </div>\n );\n};\n\ninterface TemplateCardProps {\n template: ITemplateVM;\n onSelect: (template: ITemplateVM) => void;\n}\n\nconst TemplateCard = ({ template, onSelect }: TemplateCardProps) => {\n const [isHovered, setIsHovered] = useState(false);\n const icon = normalizeIcon(template.icon);\n\n return (\n <div\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={\n \"flex flex-col justify-between bg-neutral-base overflow-hidden rounded-lg w-[173px] relative shadow-sm\"\n }\n >\n <div>\n <div className={\"flex items-center justify-center py-xxl w-full bg-neutral-dimmed\"}>\n {icon ? (\n <FontAwesomeIcon\n className={\"text-neutral-xstrong\"}\n icon={icon}\n style={{ width: 40, height: 40 }}\n />\n ) : null}\n </div>\n <div className={\"py-sm-extra px-md\"}>\n <Text size={\"md\"} className={\"mb-xs text-neutral-primary font-semibold\"}>\n {template.label}\n </Text>\n </div>\n </div>\n\n {isHovered && (\n <Dialog.Close asChild>\n <div\n className={\n \"absolute inset-0 flex items-center justify-center bg-white/80 cursor-pointer\"\n }\n onClick={() => onSelect(template)}\n >\n <Button size={\"lg\"} variant={\"primary\"} icon={<PlusIcon />}>\n Insert\n </Button>\n </div>\n </Dialog.Close>\n )}\n </div>\n );\n};\n"],"names":["normalizeIcon","icon","AddTemplateButton","templates","onSelect","label","size","variant","Dialog","Button","AddIcon","TemplateGallery","template","TemplateCard","isHovered","setIsHovered","useState","FontAwesomeIcon","Text","PlusIcon"],"mappings":";;;;;AAQA,MAAMA,gBAAgB,CAACC;IACnB,IAAI,CAACA,MACD;IAEJ,OAAOA,KAAK,IAAI,CAAC,KAAK,CAAC;AAC3B;AAUO,MAAMC,oBAAoB,CAAC,EAC9BC,SAAS,EACTC,QAAQ,EACRC,KAAK,EACLC,OAAO,IAAI,EACXC,UAAU,UAAU,EACC,GACd,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACC,QAAMA;QACH,MAAM;QACN,WAAW;QACX,uBAAS,oBAACC,QAAMA;YAAC,MAAMH;YAAM,SAASC;YAAS,MAAMF;YAAO,oBAAM,oBAACK,gBAAOA;;QAC1E,OAAO;QACP,oBAAM;qBAEN,oBAACC,iBAAeA;QAAC,WAAWR;QAAW,UAAUC;;AAWjE,MAAMO,kBAAkB,CAAC,EAAER,SAAS,EAAEC,QAAQ,EAAwB,GAC3D,WAAP,GACI,oBAAC;QAAI,WAAW;OACXD,UAAU,GAAG,CAACS,CAAAA,WAAAA,WAAAA,GACX,oBAACC,cAAYA;YAAC,KAAKD,SAAS,EAAE;YAAE,UAAUA;YAAU,UAAUR;;AAW9E,MAAMS,eAAe,CAAC,EAAED,QAAQ,EAAER,QAAQ,EAAqB;IAC3D,MAAM,CAACU,WAAWC,aAAa,GAAGC,SAAS;IAC3C,MAAMf,OAAOD,cAAcY,SAAS,IAAI;IAExC,OAAO,WAAP,GACI,oBAAC;QACG,cAAc,IAAMG,aAAa;QACjC,cAAc,IAAMA,aAAa;QACjC,WACI;qBAGJ,oBAAC,2BACG,oBAAC;QAAI,WAAW;OACXd,OAAO,WAAPA,GACG,oBAACgB,iBAAeA;QACZ,WAAW;QACX,MAAMhB;QACN,OAAO;YAAE,OAAO;YAAI,QAAQ;QAAG;SAEnC,qBAER,oBAAC;QAAI,WAAW;qBACZ,oBAACiB,MAAIA;QAAC,MAAM;QAAM,WAAW;OACxBN,SAAS,KAAK,KAK1BE,aAAa,WAAbA,GACG,oBAACN,OAAO,KAAK;QAAC;qBACV,oBAAC;QACG,WACI;QAEJ,SAAS,IAAMJ,SAASQ;qBAExB,oBAACH,QAAMA;QAAC,MAAM;QAAM,SAAS;QAAW,oBAAM,oBAACU,uCAAQA;OAAK;AAQpF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"features/aiChat/AiChatGateway.js","sources":["../../../src/features/aiChat/AiChatGateway.ts"],"sourcesContent":["import { ApiStreamClient } from \"@webiny/app/features/apiStreamClient\";\nimport { readServerSentEvents } from \"@webiny/app/features/apiStreamClient\";\nimport { EnvConfig } from \"@webiny/app/features/envConfig\";\nimport { AiChatGateway as Abstraction } from \"./abstractions.js\";\nimport type { AiChatRequest } from \"./abstractions.js\";\nimport type { AiChatStreamEvent } from \"./abstractions.js\";\nimport { AuthenticationContext } from \"~/features/security/AuthenticationContext/index.js\";\nimport { TenantContext } from \"~/features/tenancy/abstractions.js\";\n\n/*\n * The `/stream/` prefix is required, not cosmetic: it is the CloudFront behavior that targets the\n * Lambda Function URL. Any other path lands on API Gateway and gets buffered.\n */\nconst CHAT_STREAM_PATH = \"/stream/ai/chat\";\n\nconst toBody = (request: AiChatRequest): Record<string, unknown> => {\n const body: Record<string, unknown> = { messages: request.messages };\n\n if (request.approvals?.length) {\n body[\"approvals\"] = request.approvals;\n }\n\n return body;\n};\n\n/**\n * Talks to the API app's chat routes.\n *\n * Streaming goes through `ApiStreamClient`, so auth and tenant headers come from the platform's own\n * decorators — including `x-webiny-authorization`, which the streaming path needs because on AWS\n * SigV4 occupies `Authorization`. Getting that wrong would silently make every streamed request\n * anonymous.\n *\n * The buffered call still uses `fetch`: `ApiStreamClient` hands back an unread `Response` for a caller\n * that owns a read loop, which is the wrong shape for a single JSON answer.\n */\nclass AiChatGatewayImpl implements Abstraction.Interface {\n constructor(\n private authContext: AuthenticationContext.Interface,\n private envConfig: EnvConfig.Interface,\n private tenantContext: TenantContext.Interface,\n private streamClient: ApiStreamClient.Interface\n ) {}\n\n async *stream(request: AiChatRequest, signal?: AbortSignal): AsyncIterable<AiChatStreamEvent> {\n const response = await this.streamClient.execute({\n path: CHAT_STREAM_PATH,\n body: toBody(request),\n signal\n });\n\n yield* readServerSentEvents<AiChatStreamEvent>(response);\n }\n}\n\nexport const AiChatGateway = Abstraction.createImplementation({\n implementation: AiChatGatewayImpl,\n dependencies: [AuthenticationContext, EnvConfig, TenantContext, ApiStreamClient]\n});\n"],"names":["CHAT_STREAM_PATH","toBody","request","body","AiChatGatewayImpl","authContext","envConfig","tenantContext","streamClient","signal","response","readServerSentEvents","AiChatGateway","Abstraction","AuthenticationContext","EnvConfig","TenantContext","ApiStreamClient"],"mappings":";;;;;AAaA,MAAMA,mBAAmB;AAEzB,MAAMC,SAAS,CAACC;IACZ,MAAMC,OAAgC;QAAE,UAAUD,QAAQ,QAAQ;IAAC;IAEnE,IAAIA,QAAQ,SAAS,EAAE,QACnBC,IAAI,CAAC,YAAY,GAAGD,QAAQ,SAAS;IAGzC,OAAOC;AACX;AAaA,MAAMC;IACF,YACYC,WAA4C,EAC5CC,SAA8B,EAC9BC,aAAsC,EACtCC,YAAuC,CACjD;aAJUH,WAAW,GAAXA;aACAC,SAAS,GAATA;aACAC,aAAa,GAAbA;aACAC,YAAY,GAAZA;IACT;IAEH,OAAO,OAAON,OAAsB,EAAEO,MAAoB,EAAoC;QAC1F,MAAMC,WAAW,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C,MAAMV;YACN,MAAMC,OAAOC;YACbO;QACJ;QAEA,OAAOE,qBAAwCD;IACnD;AACJ;AAEO,MAAME,8BAAgBC,cAAAA,oBAAgC,CAAC;IAC1D,gBAAgBT;IAChB,cAAc;QAACU;QAAuBC;QAAWC;QAAeC;KAAgB;AACpF"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { AiChatGateway } from "./abstractions.js";
|
|
2
|
-
import { AiChatPresenter as Abstraction, type IAiChatViewModel } from "./abstractions.js";
|
|
3
|
-
/**
|
|
4
|
-
* Owns the palette's AI conversation.
|
|
5
|
-
*
|
|
6
|
-
* A presenter rather than component state: several pieces change together, a network stream drives
|
|
7
|
-
* them, and an abort has to outlive any one render.
|
|
8
|
-
*
|
|
9
|
-
* Registered as a singleton, so `reset` genuinely clears rather than relying on unmount.
|
|
10
|
-
*/
|
|
11
|
-
declare class AiChatPresenterImpl implements Abstraction.Interface {
|
|
12
|
-
private gateway;
|
|
13
|
-
private turns;
|
|
14
|
-
private busy;
|
|
15
|
-
private controller;
|
|
16
|
-
constructor(gateway: AiChatGateway.Interface);
|
|
17
|
-
get vm(): IAiChatViewModel;
|
|
18
|
-
ask(question: string): void;
|
|
19
|
-
decide(turnIndex: number, approved: boolean): void;
|
|
20
|
-
reset(): void;
|
|
21
|
-
/** Replays settled turns so a follow-up ("and which of those is cheapest?") has context. */
|
|
22
|
-
private historyBefore;
|
|
23
|
-
private run;
|
|
24
|
-
private addTurn;
|
|
25
|
-
private patch;
|
|
26
|
-
private setBusy;
|
|
27
|
-
private clear;
|
|
28
|
-
}
|
|
29
|
-
export declare const AiChatPresenter: typeof AiChatPresenterImpl & {
|
|
30
|
-
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IAiChatPresenter>;
|
|
31
|
-
};
|
|
32
|
-
export {};
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { makeAutoObservable } from "mobx";
|
|
2
|
-
import { AiChatGateway, AiChatPresenter } from "./abstractions.js";
|
|
3
|
-
const emptyTurn = (question)=>({
|
|
4
|
-
question,
|
|
5
|
-
text: "",
|
|
6
|
-
tools: [],
|
|
7
|
-
completed: [],
|
|
8
|
-
failed: [],
|
|
9
|
-
running: false,
|
|
10
|
-
pendingApprovals: [],
|
|
11
|
-
messages: [],
|
|
12
|
-
settled: false
|
|
13
|
-
});
|
|
14
|
-
class AiChatPresenterImpl {
|
|
15
|
-
constructor(gateway){
|
|
16
|
-
this.gateway = gateway;
|
|
17
|
-
this.turns = [];
|
|
18
|
-
this.busy = false;
|
|
19
|
-
this.controller = null;
|
|
20
|
-
makeAutoObservable(this, {
|
|
21
|
-
controller: false
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
get vm() {
|
|
25
|
-
return {
|
|
26
|
-
busy: this.busy,
|
|
27
|
-
turns: this.turns.map((turn)=>({
|
|
28
|
-
question: turn.question,
|
|
29
|
-
text: turn.text,
|
|
30
|
-
tools: turn.tools,
|
|
31
|
-
completed: turn.completed,
|
|
32
|
-
failed: turn.failed,
|
|
33
|
-
running: turn.running,
|
|
34
|
-
pendingApprovals: turn.pendingApprovals,
|
|
35
|
-
settled: turn.settled,
|
|
36
|
-
...void 0 === turn.error ? {} : {
|
|
37
|
-
error: turn.error
|
|
38
|
-
}
|
|
39
|
-
}))
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
ask(question) {
|
|
43
|
-
const trimmed = question.trim();
|
|
44
|
-
if (!trimmed || this.busy) return;
|
|
45
|
-
const index = this.turns.length;
|
|
46
|
-
this.addTurn(trimmed);
|
|
47
|
-
this.run(index, {
|
|
48
|
-
messages: [
|
|
49
|
-
...this.historyBefore(index),
|
|
50
|
-
{
|
|
51
|
-
role: "user",
|
|
52
|
-
content: trimmed
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
decide(turnIndex, approved) {
|
|
58
|
-
const turn = this.turns[turnIndex];
|
|
59
|
-
if (!turn?.pendingApprovals.length || this.busy) return;
|
|
60
|
-
const approvals = turn.pendingApprovals.map((approval)=>({
|
|
61
|
-
approvalId: approval.approvalId,
|
|
62
|
-
approved
|
|
63
|
-
}));
|
|
64
|
-
const messages = [
|
|
65
|
-
...this.historyBefore(turnIndex),
|
|
66
|
-
{
|
|
67
|
-
role: "user",
|
|
68
|
-
content: turn.question
|
|
69
|
-
},
|
|
70
|
-
...turn.messages
|
|
71
|
-
];
|
|
72
|
-
this.patch(turnIndex, {
|
|
73
|
-
pendingApprovals: [],
|
|
74
|
-
settled: false,
|
|
75
|
-
running: true
|
|
76
|
-
});
|
|
77
|
-
this.run(turnIndex, {
|
|
78
|
-
messages,
|
|
79
|
-
approvals
|
|
80
|
-
}, true);
|
|
81
|
-
}
|
|
82
|
-
reset() {
|
|
83
|
-
this.controller?.abort();
|
|
84
|
-
this.controller = null;
|
|
85
|
-
this.clear();
|
|
86
|
-
}
|
|
87
|
-
historyBefore(upTo) {
|
|
88
|
-
const history = [];
|
|
89
|
-
for (const turn of this.turns.slice(0, upTo))if (turn.settled && !turn.error) {
|
|
90
|
-
history.push({
|
|
91
|
-
role: "user",
|
|
92
|
-
content: turn.question
|
|
93
|
-
});
|
|
94
|
-
history.push(...turn.messages);
|
|
95
|
-
}
|
|
96
|
-
return history;
|
|
97
|
-
}
|
|
98
|
-
async run(index, request, resuming = false) {
|
|
99
|
-
this.controller?.abort();
|
|
100
|
-
const controller = new AbortController();
|
|
101
|
-
this.controller = controller;
|
|
102
|
-
this.setBusy(true);
|
|
103
|
-
try {
|
|
104
|
-
const existing = resuming ? this.turns[index] : void 0;
|
|
105
|
-
let text = existing?.text ?? "";
|
|
106
|
-
const tools = existing ? [
|
|
107
|
-
...existing.tools
|
|
108
|
-
] : [];
|
|
109
|
-
const completed = existing ? [
|
|
110
|
-
...existing.completed
|
|
111
|
-
] : [];
|
|
112
|
-
const failed = existing ? [
|
|
113
|
-
...existing.failed
|
|
114
|
-
] : [];
|
|
115
|
-
const priorMessages = existing ? [
|
|
116
|
-
...existing.messages
|
|
117
|
-
] : [];
|
|
118
|
-
for await (const event of this.gateway.stream(request, controller.signal)){
|
|
119
|
-
if ("text" === event.type) {
|
|
120
|
-
text += event.text;
|
|
121
|
-
this.patch(index, {
|
|
122
|
-
text,
|
|
123
|
-
running: false
|
|
124
|
-
});
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
if ("tool-call" === event.type) {
|
|
128
|
-
tools.push(event.name);
|
|
129
|
-
this.patch(index, {
|
|
130
|
-
tools: [
|
|
131
|
-
...tools
|
|
132
|
-
],
|
|
133
|
-
running: true
|
|
134
|
-
});
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
if ("tool-result" === event.type) {
|
|
138
|
-
completed.push(event.name);
|
|
139
|
-
this.patch(index, {
|
|
140
|
-
completed: [
|
|
141
|
-
...completed
|
|
142
|
-
]
|
|
143
|
-
});
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
if ("tool-error" === event.type) {
|
|
147
|
-
failed.push(event.name);
|
|
148
|
-
this.patch(index, {
|
|
149
|
-
failed: [
|
|
150
|
-
...failed
|
|
151
|
-
]
|
|
152
|
-
});
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
if ("approval" === event.type) {
|
|
156
|
-
this.patch(index, {
|
|
157
|
-
pendingApprovals: event.approvals,
|
|
158
|
-
running: false
|
|
159
|
-
});
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
if ("done" === event.type) {
|
|
163
|
-
this.patch(index, {
|
|
164
|
-
messages: [
|
|
165
|
-
...priorMessages,
|
|
166
|
-
...event.messages
|
|
167
|
-
],
|
|
168
|
-
settled: true,
|
|
169
|
-
running: false
|
|
170
|
-
});
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
if ("error" === event.type) return void this.patch(index, {
|
|
174
|
-
error: event.message,
|
|
175
|
-
settled: true,
|
|
176
|
-
running: false
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
} catch (error) {
|
|
180
|
-
if (!controller.signal.aborted) this.patch(index, {
|
|
181
|
-
error: error instanceof Error ? error.message : String(error),
|
|
182
|
-
settled: true,
|
|
183
|
-
running: false
|
|
184
|
-
});
|
|
185
|
-
} finally{
|
|
186
|
-
this.setBusy(false);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
addTurn(question) {
|
|
190
|
-
this.turns = [
|
|
191
|
-
...this.turns,
|
|
192
|
-
{
|
|
193
|
-
...emptyTurn(question),
|
|
194
|
-
running: true
|
|
195
|
-
}
|
|
196
|
-
];
|
|
197
|
-
}
|
|
198
|
-
patch(index, change) {
|
|
199
|
-
this.turns = this.turns.map((turn, i)=>i === index ? {
|
|
200
|
-
...turn,
|
|
201
|
-
...change
|
|
202
|
-
} : turn);
|
|
203
|
-
}
|
|
204
|
-
setBusy(busy) {
|
|
205
|
-
this.busy = busy;
|
|
206
|
-
}
|
|
207
|
-
clear() {
|
|
208
|
-
this.turns = [];
|
|
209
|
-
this.busy = false;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const AiChatPresenter_AiChatPresenter = AiChatPresenter.createImplementation({
|
|
213
|
-
implementation: AiChatPresenterImpl,
|
|
214
|
-
dependencies: [
|
|
215
|
-
AiChatGateway
|
|
216
|
-
]
|
|
217
|
-
});
|
|
218
|
-
export { AiChatPresenter_AiChatPresenter as AiChatPresenter };
|
|
219
|
-
|
|
220
|
-
//# sourceMappingURL=AiChatPresenter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"features/aiChat/AiChatPresenter.js","sources":["../../../src/features/aiChat/AiChatPresenter.ts"],"sourcesContent":["import { makeAutoObservable } from \"mobx\";\nimport { AiChatGateway } from \"./abstractions.js\";\nimport type { AiChatMessage, AiChatRequest } from \"./abstractions.js\";\nimport {\n AiChatPresenter as Abstraction,\n type AiTurnViewModel,\n type IAiChatViewModel\n} from \"./abstractions.js\";\n\n/** A turn plus the conversation state the view never sees. */\ninterface Turn extends AiTurnViewModel {\n /** Server messages replayed to continue this conversation or resume its approval. */\n messages: AiChatMessage[];\n}\n\nconst emptyTurn = (question: string): Turn => ({\n question,\n text: \"\",\n tools: [],\n completed: [],\n failed: [],\n running: false,\n pendingApprovals: [],\n messages: [],\n settled: false\n});\n\n/**\n * Owns the palette's AI conversation.\n *\n * A presenter rather than component state: several pieces change together, a network stream drives\n * them, and an abort has to outlive any one render.\n *\n * Registered as a singleton, so `reset` genuinely clears rather than relying on unmount.\n */\nclass AiChatPresenterImpl implements Abstraction.Interface {\n private turns: Turn[] = [];\n private busy = false;\n private controller: AbortController | null = null;\n\n constructor(private gateway: AiChatGateway.Interface) {\n // The controller is machinery, not state anything renders, so keep it out of the map.\n makeAutoObservable<AiChatPresenterImpl, \"controller\">(this, { controller: false });\n }\n\n get vm(): IAiChatViewModel {\n return {\n busy: this.busy,\n turns: this.turns.map(turn => ({\n question: turn.question,\n text: turn.text,\n tools: turn.tools,\n completed: turn.completed,\n failed: turn.failed,\n running: turn.running,\n pendingApprovals: turn.pendingApprovals,\n settled: turn.settled,\n ...(turn.error === undefined ? {} : { error: turn.error })\n }))\n };\n }\n\n ask(question: string): void {\n const trimmed = question.trim();\n\n if (!trimmed || this.busy) {\n return;\n }\n\n const index = this.turns.length;\n this.addTurn(trimmed);\n\n void this.run(index, {\n messages: [...this.historyBefore(index), { role: \"user\", content: trimmed }]\n });\n }\n\n decide(turnIndex: number, approved: boolean): void {\n const turn = this.turns[turnIndex];\n\n if (!turn?.pendingApprovals.length || this.busy) {\n return;\n }\n\n const approvals = turn.pendingApprovals.map(approval => ({\n approvalId: approval.approvalId,\n approved\n }));\n\n /*\n * The paused assistant message must be replayed unchanged: the approval request lives only in\n * the server's messages, so resuming means sending the same history back plus the decision.\n */\n const messages: AiChatMessage[] = [\n ...this.historyBefore(turnIndex),\n { role: \"user\", content: turn.question },\n ...turn.messages\n ];\n\n // Clear the block immediately so the plan cannot be submitted twice.\n this.patch(turnIndex, { pendingApprovals: [], settled: false, running: true });\n\n void this.run(turnIndex, { messages, approvals }, true);\n }\n\n reset(): void {\n this.controller?.abort();\n this.controller = null;\n this.clear();\n }\n\n /** Replays settled turns so a follow-up (\"and which of those is cheapest?\") has context. */\n private historyBefore(upTo: number): AiChatMessage[] {\n const history: AiChatMessage[] = [];\n\n for (const turn of this.turns.slice(0, upTo)) {\n if (!turn.settled || turn.error) {\n continue;\n }\n history.push({ role: \"user\", content: turn.question });\n history.push(...turn.messages);\n }\n\n return history;\n }\n\n private async run(index: number, request: AiChatRequest, resuming = false): Promise<void> {\n this.controller?.abort();\n const controller = new AbortController();\n this.controller = controller;\n\n this.setBusy(true);\n\n try {\n /*\n * Resuming continues the same turn: the tools already called, the text already shown and\n * the messages already collected all still belong to it. Starting from empty would strand\n * earlier chips as running and, worse, drop the assistant message carrying the `tool_use`\n * that the replayed `tool_result` refers to.\n */\n const existing = resuming ? this.turns[index] : undefined;\n let text = existing?.text ?? \"\";\n const tools: string[] = existing ? [...existing.tools] : [];\n const completed: string[] = existing ? [...existing.completed] : [];\n const failed: string[] = existing ? [...existing.failed] : [];\n const priorMessages: AiChatMessage[] = existing ? [...existing.messages] : [];\n\n for await (const event of this.gateway.stream(request, controller.signal)) {\n if (event.type === \"text\") {\n text += event.text;\n this.patch(index, { text, running: false });\n continue;\n }\n\n if (event.type === \"tool-call\") {\n tools.push(event.name);\n this.patch(index, { tools: [...tools], running: true });\n continue;\n }\n\n if (event.type === \"tool-result\") {\n completed.push(event.name);\n this.patch(index, { completed: [...completed] });\n continue;\n }\n\n if (event.type === \"tool-error\") {\n failed.push(event.name);\n this.patch(index, { failed: [...failed] });\n continue;\n }\n\n if (event.type === \"approval\") {\n this.patch(index, { pendingApprovals: event.approvals, running: false });\n continue;\n }\n\n if (event.type === \"done\") {\n this.patch(index, {\n messages: [...priorMessages, ...event.messages],\n settled: true,\n running: false\n });\n continue;\n }\n\n if (event.type === \"error\") {\n this.patch(index, { error: event.message, settled: true, running: false });\n return;\n }\n }\n } catch (error) {\n // An abort is the palette closing, not a failure worth showing.\n if (!controller.signal.aborted) {\n this.patch(index, {\n error: error instanceof Error ? error.message : String(error),\n settled: true,\n running: false\n });\n }\n } finally {\n this.setBusy(false);\n }\n }\n\n /*\n * Every mutation below is its own method on purpose. `run` awaits, and a mutation after an await\n * has escaped the action it started in; `makeAutoObservable` makes these methods actions, so\n * calling them from there is correct.\n */\n private addTurn(question: string): void {\n this.turns = [...this.turns, { ...emptyTurn(question), running: true }];\n }\n\n private patch(index: number, change: Partial<Turn>): void {\n this.turns = this.turns.map((turn, i) => (i === index ? { ...turn, ...change } : turn));\n }\n\n private setBusy(busy: boolean): void {\n this.busy = busy;\n }\n\n private clear(): void {\n this.turns = [];\n this.busy = false;\n }\n}\n\nexport const AiChatPresenter = Abstraction.createImplementation({\n implementation: AiChatPresenterImpl,\n dependencies: [AiChatGateway]\n});\n"],"names":["emptyTurn","question","AiChatPresenterImpl","gateway","makeAutoObservable","turn","undefined","trimmed","index","turnIndex","approved","approvals","approval","messages","upTo","history","request","resuming","controller","AbortController","existing","text","tools","completed","failed","priorMessages","event","error","Error","String","change","i","busy","AiChatPresenter","Abstraction","AiChatGateway"],"mappings":"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"}
|