@devtron-labs/devtron-fe-common-lib 0.0.59-beta-5 → 0.0.59-beta-8
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/.eslintignore +96 -0
- package/.eslintrc.js +109 -0
- package/.github/pull_request_template.md +25 -0
- package/.github/workflows/ci.yml +31 -0
- package/.github/workflows/release-package.yml +48 -0
- package/.husky/pre-commit +5 -0
- package/.lintstagedrc +3 -0
- package/.nvmrc +1 -0
- package/.prettierrc.js +7 -0
- package/dist/Common/AddCDButton/AddCDButton.d.ts +3 -3
- package/dist/Common/AddCDButton/index.d.ts +2 -2
- package/dist/Common/AddCDButton/types.d.ts +26 -26
- package/dist/Common/AddCDButton/utils.d.ts +2 -2
- package/dist/Common/Api.d.ts +14 -5
- package/dist/Common/AppStatus/AppStatus.d.ts +3 -3
- package/dist/Common/AppStatus/constants.d.ts +51 -51
- package/dist/Common/AppStatus/index.d.ts +1 -1
- package/dist/Common/AppStatus/types.d.ts +12 -12
- package/dist/Common/AppStatus/utils.d.ts +1 -1
- package/dist/Common/BreadCrumb/BreadCrumb.d.ts +5 -5
- package/dist/Common/BreadCrumb/BreadcrumbStore.d.ts +17 -17
- package/dist/Common/BreadCrumb/Types.d.ts +28 -28
- package/dist/Common/CIPipeline.Types.d.ts +265 -265
- package/dist/Common/ChartVersionAndTypeSelector.d.ts +4 -3
- package/dist/Common/Checkbox.d.ts +5 -5
- package/dist/Common/ClipboardButton/ClipboardButton.d.ts +10 -10
- package/dist/Common/ClipboardButton/types.d.ts +8 -8
- package/dist/Common/Common.service.d.ts +20 -20
- package/dist/Common/Constants.d.ts +89 -81
- package/dist/Common/CustomInput/CustomInput.d.ts +3 -2
- package/dist/Common/CustomInput/Types.d.ts +31 -31
- package/dist/Common/CustomInput/index.d.ts +2 -2
- package/dist/Common/CustomTagSelector/PropagateTagInfo.d.ts +4 -4
- package/dist/Common/CustomTagSelector/ResizableTagTextArea.d.ts +3 -2
- package/dist/Common/CustomTagSelector/TagDetails.d.ts +3 -2
- package/dist/Common/CustomTagSelector/TagLabelSelect.d.ts +3 -2
- package/dist/Common/CustomTagSelector/TagLabelValueSelector.d.ts +3 -2
- package/dist/Common/CustomTagSelector/TagSelector.utils.d.ts +12 -12
- package/dist/Common/CustomTagSelector/Types.d.ts +68 -68
- package/dist/Common/CustomTagSelector/ValidationRules.d.ts +10 -10
- package/dist/Common/CustomTagSelector/index.d.ts +6 -6
- package/dist/Common/DebouncedSearch/DebouncedSearch.d.ts +17 -17
- package/dist/Common/DebouncedSearch/Types.d.ts +14 -14
- package/dist/Common/DebouncedSearch/Utils.d.ts +1 -1
- package/dist/Common/DeleteComponentModal/DeleteComponent.d.ts +4 -3
- package/dist/Common/DeleteComponentModal/types.d.ts +15 -15
- package/dist/Common/DevtronProgressing/DevtronProgressing.d.ts +3 -2
- package/dist/Common/DevtronProgressing/index.d.ts +1 -1
- package/dist/Common/DevtronProgressing/types.d.ts +4 -4
- package/dist/Common/Dialogs/ConfirmationDialog.d.ts +9 -8
- package/dist/Common/Dialogs/DeleteDialog.d.ts +5 -5
- package/dist/Common/Dialogs/DialogForm.d.ts +14 -14
- package/dist/Common/Dialogs/ForceDeleteDialog.d.ts +3 -3
- package/dist/Common/Dialogs/Types.d.ts +45 -45
- package/dist/Common/Dialogs/index.d.ts +4 -4
- package/dist/Common/DraggableWrapper/DraggableButton.d.ts +3 -3
- package/dist/Common/DraggableWrapper/DraggableWrapper.d.ts +9 -9
- package/dist/Common/DraggableWrapper/index.d.ts +3 -3
- package/dist/Common/DraggableWrapper/types.d.ts +23 -23
- package/dist/Common/Drawer/Drawer.d.ts +16 -14
- package/dist/Common/EmptyState/EmptyState.d.ts +25 -0
- package/dist/Common/EmptyState/GenericEmptyState.d.ts +5 -3
- package/dist/Common/Error.d.ts +17 -17
- package/dist/Common/ErrorScreenNotFound.d.ts +3 -2
- package/dist/Common/Grid/Grid.d.ts +3 -3
- package/dist/Common/Grid/types.d.ts +10 -10
- package/dist/Common/Helper.d.ts +64 -65
- package/dist/Common/Hooks/UseClickOutside/UseClickOutside.d.ts +1 -1
- package/dist/Common/Hooks/UseSuperAdmin/UseSuperAdmin.d.ts +6 -6
- package/dist/Common/Hooks/UseSuperAdmin/types.d.ts +3 -3
- package/dist/Common/Hooks/UseWindowSize/UseWindowSize.d.ts +4 -4
- package/dist/Common/Hooks/index.d.ts +4 -3
- package/dist/Common/Hooks/useUrlFilters/constants.d.ts +8 -0
- package/dist/Common/Hooks/useUrlFilters/index.d.ts +2 -0
- package/dist/Common/Hooks/useUrlFilters/types.d.ts +6 -0
- package/dist/Common/Hooks/useUrlFilters/useUrlFilters.d.ts +32 -0
- package/dist/Common/ImageTags.Types.d.ts +40 -40
- package/dist/Common/ImageTags.d.ts +4 -3
- package/dist/Common/InfoColorBar/InfoColourbar.d.ts +5 -3
- package/dist/Common/Modals/Modal.d.ts +3 -3
- package/dist/Common/Modals/OpaqueModal.d.ts +12 -12
- package/dist/Common/Modals/VisibleModal.d.ts +15 -15
- package/dist/Common/Modals/VisibleModal2.d.ts +12 -12
- package/dist/Common/MultiSelectCustomization.d.ts +37 -37
- package/dist/Common/Pagination/PageSizeSelector.d.ts +4 -3
- package/dist/Common/Pagination/Pagination.d.ts +5 -3
- package/dist/Common/Pagination/constants.d.ts +5 -5
- package/dist/Common/Pagination/index.d.ts +1 -1
- package/dist/Common/Pagination/types.d.ts +51 -51
- package/dist/Common/Pagination/utils.d.ts +6 -6
- package/dist/Common/Policy.Types.d.ts +56 -56
- package/dist/Common/PopupMenu.d.ts +8 -7
- package/dist/Common/Progressing.d.ts +4 -3
- package/dist/Common/RJSF/Form.d.ts +4 -2
- package/dist/Common/RJSF/common/FieldRow.d.ts +6 -5
- package/dist/Common/RJSF/common/types.d.ts +8 -8
- package/dist/Common/RJSF/config.d.ts +4 -4
- package/dist/Common/RJSF/constants.d.ts +7 -7
- package/dist/Common/RJSF/index.d.ts +3 -3
- package/dist/Common/RJSF/templates/ArrayFieldItemTemplate.d.ts +3 -2
- package/dist/Common/RJSF/templates/ArrayFieldTemplate.d.ts +3 -2
- package/dist/Common/RJSF/templates/BaseInput.d.ts +3 -2
- package/dist/Common/RJSF/templates/ButtonTemplates/AddButton.d.ts +3 -2
- package/dist/Common/RJSF/templates/ButtonTemplates/RemoveButton.d.ts +3 -2
- package/dist/Common/RJSF/templates/ButtonTemplates/SubmitButton.d.ts +3 -2
- package/dist/Common/RJSF/templates/ButtonTemplates/index.d.ts +3 -3
- package/dist/Common/RJSF/templates/Description.d.ts +3 -2
- package/dist/Common/RJSF/templates/Field.d.ts +3 -2
- package/dist/Common/RJSF/templates/FieldErrorTemplate.d.ts +3 -2
- package/dist/Common/RJSF/templates/ObjectFieldTemplate.d.ts +3 -2
- package/dist/Common/RJSF/templates/TitleField.d.ts +3 -2
- package/dist/Common/RJSF/templates/WrapIfAdditionalTemplate.d.ts +3 -2
- package/dist/Common/RJSF/templates/index.d.ts +10 -10
- package/dist/Common/RJSF/types.d.ts +3 -3
- package/dist/Common/RJSF/utils.d.ts +26 -25
- package/dist/Common/RJSF/widgets/Checkbox.d.ts +3 -2
- package/dist/Common/RJSF/widgets/Select.d.ts +3 -2
- package/dist/Common/RJSF/widgets/index.d.ts +2 -2
- package/dist/Common/RadioGroup/RadioGroup.d.ts +17 -16
- package/dist/Common/RadioGroup.d.ts +8 -8
- package/dist/Common/Reload.d.ts +3 -3
- package/dist/Common/ResizableTextarea.d.ts +3 -3
- package/dist/Common/SearchBar/SearchBar.component.d.ts +39 -37
- package/dist/Common/SearchBar/index.d.ts +2 -2
- package/dist/Common/SearchBar/types.d.ts +35 -35
- package/dist/Common/Security/ScanVulnerabilitiesTable.d.ts +4 -3
- package/dist/Common/ServerError.d.ts +15 -15
- package/dist/Common/SortableTableHeaderCell/SortableTableHeaderCell.d.ts +18 -0
- package/dist/Common/SortableTableHeaderCell/index.d.ts +2 -0
- package/dist/Common/SortableTableHeaderCell/types.d.ts +25 -0
- package/dist/Common/TippyCustomized.d.ts +4 -2
- package/dist/Common/ToastBody.d.ts +23 -23
- package/dist/Common/Toggle/Toggle.d.ts +14 -12
- package/dist/Common/Types.d.ts +703 -691
- package/dist/Common/index.d.ts +51 -50
- package/dist/Pages/GlobalConfigurations/Authorization/constants.d.ts +15 -0
- package/dist/Pages/GlobalConfigurations/Authorization/index.d.ts +1 -0
- package/dist/Pages/GlobalConfigurations/index.d.ts +1 -0
- package/dist/Pages/index.d.ts +1 -0
- package/dist/index.d.ts +2 -7
- package/dist/index.js +29110 -162
- package/package.json +23 -34
- package/rollup.config.js +31 -0
- package/src/Assets/Icon/ic-add.svg +3 -0
- package/src/Assets/Icon/ic-appstatus-cancelled.svg +6 -0
- package/src/Assets/Icon/ic-arrow-counter-clockwise.svg +5 -0
- package/src/Assets/Icon/ic-arrow-up-down.svg +3 -0
- package/src/Assets/Icon/ic-check.svg +5 -0
- package/src/Assets/Icon/ic-chevron-down.svg +5 -0
- package/src/Assets/Icon/ic-copy.svg +3 -0
- package/src/Assets/Icon/ic-cross.svg +3 -0
- package/src/Assets/Icon/ic-drag.svg +8 -0
- package/src/Assets/Icon/ic-enter.svg +3 -0
- package/src/Assets/Icon/ic-error-cross.svg +8 -0
- package/src/Assets/Icon/ic-error-exclamation.svg +6 -0
- package/src/Assets/Icon/ic-error-medium.svg +6 -0
- package/src/Assets/Icon/ic-help-outline.svg +3 -0
- package/src/Assets/Icon/ic-help.svg +3 -0
- package/src/Assets/Icon/ic-info-filled.svg +7 -0
- package/src/Assets/Icon/ic-info-outlined.svg +13 -0
- package/src/Assets/Icon/ic-minus.svg +3 -0
- package/src/Assets/Icon/ic-pencil.svg +3 -0
- package/src/Assets/Icon/ic-progressing.svg +6 -0
- package/src/Assets/Icon/ic-rotate-devtron.svg +103 -0
- package/src/Assets/Icon/ic-search.svg +6 -0
- package/src/Assets/Icon/ic-sort-arrow-down.svg +3 -0
- package/src/Assets/Icon/ic-warning.svg +7 -0
- package/src/Assets/Icon/inject-tag.svg +5 -0
- package/src/Assets/Img/app-not-deployed.png +0 -0
- package/src/Assets/Img/delete-medium.svg +15 -0
- package/src/Assets/Img/ic-empty-error@2x.png +0 -0
- package/src/Assets/Img/ic-loading-failure.png +0 -0
- package/src/Assets/Img/ic-not-authorized.svg +62 -0
- package/src/Common/AddCDButton/AddCDButton.tsx +68 -0
- package/src/Common/AddCDButton/index.ts +2 -0
- package/src/Common/AddCDButton/types.ts +38 -0
- package/src/Common/AddCDButton/utils.tsx +35 -0
- package/src/Common/Api.ts +251 -0
- package/src/Common/AppStatus/AppStatus.tsx +64 -0
- package/src/Common/AppStatus/constants.ts +53 -0
- package/src/Common/AppStatus/index.ts +1 -0
- package/src/Common/AppStatus/types.ts +12 -0
- package/src/Common/AppStatus/utils.ts +14 -0
- package/src/Common/BreadCrumb/BreadCrumb.tsx +105 -0
- package/src/Common/BreadCrumb/BreadcrumbStore.tsx +25 -0
- package/src/Common/BreadCrumb/Types.ts +30 -0
- package/src/Common/CIPipeline.Types.ts +277 -0
- package/src/Common/ChartVersionAndTypeSelector.tsx +78 -0
- package/src/Common/Checkbox.tsx +36 -0
- package/src/Common/ClipboardButton/ClipboardButton.tsx +61 -0
- package/src/Common/ClipboardButton/__tests__/ClipboardButton.test.tsx +43 -0
- package/src/Common/ClipboardButton/types.ts +7 -0
- package/src/Common/Common.service.ts +315 -0
- package/src/Common/Constants.ts +270 -0
- package/src/Common/CustomInput/CustomInput.tsx +134 -0
- package/src/Common/CustomInput/Types.ts +32 -0
- package/src/Common/CustomInput/index.ts +2 -0
- package/src/Common/CustomTagSelector/PropagateTagInfo.tsx +46 -0
- package/src/Common/CustomTagSelector/ResizableTagTextArea.tsx +84 -0
- package/src/Common/CustomTagSelector/TagDetails.tsx +76 -0
- package/src/Common/CustomTagSelector/TagLabelSelect.tsx +61 -0
- package/src/Common/CustomTagSelector/TagLabelValueSelector.tsx +198 -0
- package/src/Common/CustomTagSelector/TagSelector.utils.ts +71 -0
- package/src/Common/CustomTagSelector/Types.ts +72 -0
- package/src/Common/CustomTagSelector/ValidationRules.ts +58 -0
- package/src/Common/CustomTagSelector/index.ts +6 -0
- package/src/Common/DebouncedSearch/DebouncedSearch.tsx +78 -0
- package/src/Common/DebouncedSearch/Types.ts +13 -0
- package/src/Common/DebouncedSearch/Utils.ts +19 -0
- package/src/Common/DebouncedSearch/__tests__/DebouncedSearch.test.tsx +61 -0
- package/src/Common/DeleteComponentModal/DeleteComponent.tsx +95 -0
- package/src/Common/DeleteComponentModal/types.ts +15 -0
- package/src/Common/DevtronProgressing/DevtronProgressing.tsx +11 -0
- package/src/Common/DevtronProgressing/index.ts +1 -0
- package/src/Common/DevtronProgressing/types.ts +4 -0
- package/src/Common/Dialogs/ConfirmationDialog.tsx +34 -0
- package/src/Common/Dialogs/DeleteDialog.tsx +69 -0
- package/src/Common/Dialogs/DialogForm.tsx +86 -0
- package/src/Common/Dialogs/ForceDeleteDialog.tsx +19 -0
- package/src/Common/Dialogs/Types.ts +47 -0
- package/src/Common/Dialogs/index.ts +4 -0
- package/src/Common/DraggableWrapper/DraggableButton.tsx +14 -0
- package/src/Common/DraggableWrapper/DraggableWrapper.tsx +116 -0
- package/src/Common/DraggableWrapper/index.ts +3 -0
- package/src/Common/DraggableWrapper/types.ts +27 -0
- package/src/Common/Drawer/Drawer.scss +40 -0
- package/src/Common/Drawer/Drawer.tsx +49 -0
- package/src/Common/EmptyState/EmptyState.tsx +42 -0
- package/src/Common/EmptyState/GenericEmptyState.tsx +81 -0
- package/src/Common/EmptyState/emptyState.scss +74 -0
- package/src/Common/Error.tsx +61 -0
- package/src/Common/ErrorScreenNotFound.tsx +31 -0
- package/src/Common/Grid/Grid.tsx +44 -0
- package/src/Common/Grid/types.ts +11 -0
- package/src/Common/Helper.tsx +576 -0
- package/src/Common/Hooks/UseClickOutside/UseClickOutside.tsx +15 -0
- package/src/Common/Hooks/UseSuperAdmin/UseSuperAdmin.tsx +24 -0
- package/src/Common/Hooks/UseSuperAdmin/types.ts +3 -0
- package/src/Common/Hooks/UseWindowSize/UseWindowSize.tsx +31 -0
- package/src/Common/Hooks/index.ts +4 -0
- package/src/Common/Hooks/useUrlFilters/constants.ts +9 -0
- package/src/Common/Hooks/useUrlFilters/index.ts +2 -0
- package/src/Common/Hooks/useUrlFilters/types.ts +6 -0
- package/src/Common/Hooks/useUrlFilters/useUrlFilters.ts +121 -0
- package/src/Common/ImageTags.Types.ts +44 -0
- package/src/Common/ImageTags.tsx +586 -0
- package/src/Common/InfoColorBar/InfoColourbar.tsx +80 -0
- package/src/Common/InfoColorBar/infoColourBar.scss +28 -0
- package/src/Common/Modals/Modal.tsx +68 -0
- package/src/Common/Modals/OpaqueModal.tsx +36 -0
- package/src/Common/Modals/VisibleModal.tsx +55 -0
- package/src/Common/Modals/VisibleModal2.tsx +35 -0
- package/src/Common/MultiSelectCustomization.tsx +148 -0
- package/src/Common/Pagination/PageSizeSelector.tsx +78 -0
- package/src/Common/Pagination/Pagination.tsx +127 -0
- package/src/Common/Pagination/constants.ts +6 -0
- package/src/Common/Pagination/index.tsx +3 -0
- package/src/Common/Pagination/pagination.scss +123 -0
- package/src/Common/Pagination/types.ts +55 -0
- package/src/Common/Pagination/utils.tsx +24 -0
- package/src/Common/Policy.Types.ts +63 -0
- package/src/Common/PopupMenu.tsx +199 -0
- package/src/Common/Progressing.tsx +53 -0
- package/src/Common/RJSF/Form.tsx +29 -0
- package/src/Common/RJSF/common/FieldRow.tsx +35 -0
- package/src/Common/RJSF/common/types.ts +9 -0
- package/src/Common/RJSF/config.ts +37 -0
- package/src/Common/RJSF/constants.ts +10 -0
- package/src/Common/RJSF/index.ts +3 -0
- package/src/Common/RJSF/rjsfForm.scss +18 -0
- package/src/Common/RJSF/templates/ArrayFieldItemTemplate.tsx +31 -0
- package/src/Common/RJSF/templates/ArrayFieldTemplate.tsx +78 -0
- package/src/Common/RJSF/templates/BaseInput.tsx +16 -0
- package/src/Common/RJSF/templates/ButtonTemplates/AddButton.tsx +18 -0
- package/src/Common/RJSF/templates/ButtonTemplates/RemoveButton.tsx +10 -0
- package/src/Common/RJSF/templates/ButtonTemplates/SubmitButton.tsx +18 -0
- package/src/Common/RJSF/templates/ButtonTemplates/index.ts +3 -0
- package/src/Common/RJSF/templates/Description.tsx +12 -0
- package/src/Common/RJSF/templates/Field.tsx +30 -0
- package/src/Common/RJSF/templates/FieldErrorTemplate.tsx +25 -0
- package/src/Common/RJSF/templates/ObjectFieldTemplate.tsx +105 -0
- package/src/Common/RJSF/templates/TitleField.tsx +9 -0
- package/src/Common/RJSF/templates/WrapIfAdditionalTemplate.tsx +51 -0
- package/src/Common/RJSF/templates/index.ts +10 -0
- package/src/Common/RJSF/types.ts +4 -0
- package/src/Common/RJSF/utils.ts +123 -0
- package/src/Common/RJSF/widgets/Checkbox.tsx +44 -0
- package/src/Common/RJSF/widgets/Select.tsx +77 -0
- package/src/Common/RJSF/widgets/index.ts +2 -0
- package/src/Common/RadioGroup/RadioGroup.tsx +105 -0
- package/src/Common/RadioGroup/radioGroup.scss +46 -0
- package/src/Common/RadioGroup.tsx +53 -0
- package/src/Common/Reload.tsx +23 -0
- package/src/Common/ResizableTextarea.tsx +73 -0
- package/src/Common/SearchBar/SearchBar.component.tsx +131 -0
- package/src/Common/SearchBar/index.ts +2 -0
- package/src/Common/SearchBar/searchBar.scss +31 -0
- package/src/Common/SearchBar/types.ts +34 -0
- package/src/Common/Security/ScanVulnerabilitiesTable.tsx +55 -0
- package/src/Common/Security/scanVulnerabilities.css +69 -0
- package/src/Common/ServerError.ts +31 -0
- package/src/Common/SortableTableHeaderCell/SortableTableHeaderCell.tsx +44 -0
- package/src/Common/SortableTableHeaderCell/index.ts +2 -0
- package/src/Common/SortableTableHeaderCell/types.ts +26 -0
- package/src/Common/TippyCustomized.tsx +172 -0
- package/src/Common/ToastBody.tsx +62 -0
- package/src/Common/Toggle/Toggle.scss +78 -0
- package/src/Common/Toggle/Toggle.tsx +50 -0
- package/src/Common/Types.ts +776 -0
- package/src/Common/index.ts +51 -0
- package/src/Pages/GlobalConfigurations/Authorization/constants.ts +16 -0
- package/src/Pages/GlobalConfigurations/Authorization/index.ts +1 -0
- package/src/Pages/GlobalConfigurations/index.ts +1 -0
- package/src/Pages/index.ts +1 -0
- package/src/custom.d.ts +13 -0
- package/src/index.ts +2 -0
- package/tsconfig.json +40 -0
- package/dist/Common/CodeEditor/CodeEditor.d.ts +0 -47
- package/dist/Common/Select/Select.d.ts +0 -4
- package/dist/Common/Select/types.d.ts +0 -29
- package/dist/abap-9f67f57a.js +0 -1314
- package/dist/apex-ff62e532.js +0 -315
- package/dist/assets/editor.worker-d26000ef.js +0 -9
- package/dist/assets/index.css +0 -1
- package/dist/assets/json.worker-f23a4654.js +0 -40
- package/dist/assets/yaml.worker-35ea3f9a.js +0 -467
- package/dist/azcli-31e64a7f.js +0 -74
- package/dist/bat-0ffe897e.js +0 -95
- package/dist/bicep-3414a2b1.js +0 -108
- package/dist/cameligo-df1f3f25.js +0 -168
- package/dist/clojure-65b0f010.js +0 -754
- package/dist/coffee-437f0fba.js +0 -228
- package/dist/cpp-66843dd5.js +0 -390
- package/dist/csharp-621d9a49.js +0 -320
- package/dist/csp-de0d5244.js +0 -57
- package/dist/css-7cd5ed4c.js +0 -186
- package/dist/cssMode-dc5f347f.js +0 -1446
- package/dist/cypher-70ad96fe.js +0 -262
- package/dist/dart-33ae3739.js +0 -270
- package/dist/dockerfile-f2274a50.js +0 -132
- package/dist/ecl-3b8294a3.js +0 -454
- package/dist/elixir-b9dcc73a.js +0 -489
- package/dist/flow9-bdde8316.js +0 -141
- package/dist/freemarker2-adb1a1bb.js +0 -643
- package/dist/fsharp-eac2e449.js +0 -210
- package/dist/go-d12ed8d4.js +0 -208
- package/dist/graphql-c7356b69.js +0 -141
- package/dist/handlebars-096fff05.js +0 -391
- package/dist/hcl-e883a0d4.js +0 -177
- package/dist/html-0cbfb620.js +0 -281
- package/dist/htmlMode-cb96e200.js +0 -1456
- package/dist/index-3e12a5d1.js +0 -126104
- package/dist/ini-425ab711.js +0 -68
- package/dist/java-2bc0fd68.js +0 -221
- package/dist/javascript-198e562f.js +0 -75
- package/dist/jsonMode-9c219fc6.js +0 -1867
- package/dist/julia-1c932615.js +0 -496
- package/dist/kotlin-1ab839c8.js +0 -245
- package/dist/less-6fe856f5.js +0 -168
- package/dist/lexon-4955ac52.js +0 -151
- package/dist/liquid-7405cc0a.js +0 -238
- package/dist/lua-3cca0047.js +0 -157
- package/dist/m3-132e9cb6.js +0 -210
- package/dist/markdown-ea59a0c1.js +0 -202
- package/dist/mips-19811f4b.js +0 -194
- package/dist/msdax-69954a10.js +0 -377
- package/dist/mysql-82088e5d.js +0 -876
- package/dist/objective-c-1976eccc.js +0 -188
- package/dist/pascal-8ef177cb.js +0 -245
- package/dist/pascaligo-bc517b9e.js +0 -158
- package/dist/perl-8b93582c.js +0 -599
- package/dist/pgsql-00c11a6d.js +0 -847
- package/dist/php-4c8c276f.js +0 -471
- package/dist/pla-e9b4ffb1.js +0 -131
- package/dist/postiats-2071af8c.js +0 -544
- package/dist/powerquery-8e388ceb.js +0 -890
- package/dist/powershell-e35db398.js +0 -233
- package/dist/protobuf-a24b9176.js +0 -422
- package/dist/pug-2c94d9b8.js +0 -393
- package/dist/python-2df08096.js +0 -259
- package/dist/qsharp-d730d7fe.js +0 -282
- package/dist/r-be193556.js +0 -245
- package/dist/razor-11eb7ebc.js +0 -512
- package/dist/redis-9690c6ac.js +0 -298
- package/dist/redshift-6bdcdeaa.js +0 -806
- package/dist/restructuredtext-a08c1d20.js +0 -162
- package/dist/ruby-2247692b.js +0 -444
- package/dist/rust-1dffb4d5.js +0 -337
- package/dist/sb-136598e9.js +0 -110
- package/dist/scala-b1100fed.js +0 -353
- package/dist/scheme-038c8094.js +0 -114
- package/dist/scss-700d1b52.js +0 -244
- package/dist/shell-86c16e0f.js +0 -224
- package/dist/solidity-c05fdf3c.js +0 -1351
- package/dist/sophia-cd645d71.js +0 -190
- package/dist/sparql-01d9ec9c.js +0 -193
- package/dist/sql-4c33df41.js +0 -818
- package/dist/st-52cf1408.js +0 -414
- package/dist/swift-13c792ba.js +0 -315
- package/dist/systemverilog-0bd8b730.js +0 -556
- package/dist/tcl-463d7c75.js +0 -232
- package/dist/tsMode-35934209.js +0 -811
- package/dist/twig-0d98f5ec.js +0 -323
- package/dist/typescript-999619a1.js +0 -328
- package/dist/vb-3a2b0a51.js +0 -364
- package/dist/wgsl-b2ddb3e4.js +0 -420
- package/dist/xml-ebd03a57.js +0 -95
- package/dist/yaml-d1cda485.js +0 -184
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { CustomInputProps } from './Types'
|
|
2
|
+
import { ReactComponent as Info } from '../../Assets/Icon/ic-info-filled.svg'
|
|
3
|
+
import { ReactComponent as ErrorIcon } from '../../Assets/Icon/ic-warning.svg'
|
|
4
|
+
|
|
5
|
+
export function CustomInput({
|
|
6
|
+
name,
|
|
7
|
+
value,
|
|
8
|
+
error,
|
|
9
|
+
onChange,
|
|
10
|
+
onFocus = (e) => {},
|
|
11
|
+
label,
|
|
12
|
+
type = 'text',
|
|
13
|
+
disabled = false,
|
|
14
|
+
labelClassName = '',
|
|
15
|
+
placeholder = '',
|
|
16
|
+
tabIndex = 1,
|
|
17
|
+
dataTestid = '',
|
|
18
|
+
isRequiredField = false,
|
|
19
|
+
autoFocus = false,
|
|
20
|
+
rootClassName = '',
|
|
21
|
+
autoComplete = 'off',
|
|
22
|
+
helperText = '',
|
|
23
|
+
handleOnBlur,
|
|
24
|
+
readOnly = false,
|
|
25
|
+
noTrim = false,
|
|
26
|
+
ref,
|
|
27
|
+
onKeyPress,
|
|
28
|
+
defaultValue,
|
|
29
|
+
onKeyDown,
|
|
30
|
+
required,
|
|
31
|
+
additionalErrorInfo,
|
|
32
|
+
inputWrapClassName = '',
|
|
33
|
+
inputProps = {},
|
|
34
|
+
}: CustomInputProps) {
|
|
35
|
+
function handleError(error: any): any[] {
|
|
36
|
+
if (!Array.isArray(error)) {
|
|
37
|
+
return [error]
|
|
38
|
+
}
|
|
39
|
+
return error
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const onBlur = (event) => {
|
|
43
|
+
//NOTE: This is to prevent the input from being trimmed when the user do not want to trim the input
|
|
44
|
+
if (!noTrim) {
|
|
45
|
+
event.stopPropagation()
|
|
46
|
+
event.target.value = event.target.value?.trim()
|
|
47
|
+
onChange(event)
|
|
48
|
+
}
|
|
49
|
+
if (typeof handleOnBlur === 'function') {
|
|
50
|
+
handleOnBlur(event)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const renderFormErrorWithIcon = (error: string) => {
|
|
55
|
+
return (
|
|
56
|
+
<div className="form__error" key={error}>
|
|
57
|
+
<ErrorIcon className="form__icon form__icon--error" />
|
|
58
|
+
{error}
|
|
59
|
+
{error && typeof additionalErrorInfo === 'function' && additionalErrorInfo()}
|
|
60
|
+
</div>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const getInputError = () => {
|
|
65
|
+
if (!error?.length) {
|
|
66
|
+
return null
|
|
67
|
+
} else {
|
|
68
|
+
if (typeof error === 'object') {
|
|
69
|
+
return handleError(error).map((err: string) => renderFormErrorWithIcon(err))
|
|
70
|
+
}
|
|
71
|
+
return renderFormErrorWithIcon(error)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const renderInputLabelConditionally = () => {
|
|
76
|
+
if (typeof label === 'string') {
|
|
77
|
+
return <span className={`${isRequiredField ? 'dc__required-field' : ''}`}>{label}</span>
|
|
78
|
+
} else {
|
|
79
|
+
return label
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const renderInputLabel = () => {
|
|
84
|
+
if (!label) {
|
|
85
|
+
return null
|
|
86
|
+
} else {
|
|
87
|
+
return (
|
|
88
|
+
<label className={`form__label ${labelClassName}`} data-testid={`label-${dataTestid}`}>
|
|
89
|
+
{renderInputLabelConditionally()}
|
|
90
|
+
</label>
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<div className={`flex column left top ${inputWrapClassName}`}>
|
|
97
|
+
{renderInputLabel()}
|
|
98
|
+
<input
|
|
99
|
+
data-testid={dataTestid}
|
|
100
|
+
type={type}
|
|
101
|
+
name={name}
|
|
102
|
+
autoComplete={autoComplete}
|
|
103
|
+
className={`form__input ${rootClassName}`}
|
|
104
|
+
onChange={(e) => {
|
|
105
|
+
e.persist()
|
|
106
|
+
onChange(e)
|
|
107
|
+
}}
|
|
108
|
+
onBlur={onBlur}
|
|
109
|
+
onFocus={onFocus}
|
|
110
|
+
placeholder={placeholder}
|
|
111
|
+
value={value}
|
|
112
|
+
disabled={disabled}
|
|
113
|
+
tabIndex={tabIndex}
|
|
114
|
+
autoFocus={autoFocus}
|
|
115
|
+
readOnly={readOnly}
|
|
116
|
+
ref={ref}
|
|
117
|
+
onKeyPress={onKeyPress}
|
|
118
|
+
defaultValue={defaultValue}
|
|
119
|
+
onKeyDown={onKeyDown}
|
|
120
|
+
required={required}
|
|
121
|
+
// Will be passing other props like other data attributes etc from inputProps
|
|
122
|
+
{...inputProps}
|
|
123
|
+
/>
|
|
124
|
+
|
|
125
|
+
{getInputError()}
|
|
126
|
+
{helperText && (
|
|
127
|
+
<div className="form__text-field-info">
|
|
128
|
+
<Info className="form__icon form__icon--info" />
|
|
129
|
+
<p className="sentence-case">{helperText}</p>
|
|
130
|
+
</div>
|
|
131
|
+
)}
|
|
132
|
+
</div>
|
|
133
|
+
)
|
|
134
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React, { HTMLInputTypeAttribute, InputHTMLAttributes } from 'react'
|
|
2
|
+
|
|
3
|
+
export interface CustomInputProps {
|
|
4
|
+
name: string
|
|
5
|
+
value: string | number
|
|
6
|
+
onChange: (e: any) => void
|
|
7
|
+
onFocus?: (e: any) => void
|
|
8
|
+
autoComplete?: string
|
|
9
|
+
label?: string | React.ReactNode
|
|
10
|
+
labelClassName?: string
|
|
11
|
+
type?: HTMLInputTypeAttribute
|
|
12
|
+
disabled?: boolean
|
|
13
|
+
placeholder?: string
|
|
14
|
+
tabIndex?: number
|
|
15
|
+
dataTestid?: string
|
|
16
|
+
isRequiredField?: boolean
|
|
17
|
+
autoFocus?: boolean
|
|
18
|
+
rootClassName?: string
|
|
19
|
+
error?: string[] | string
|
|
20
|
+
helperText?: string
|
|
21
|
+
handleOnBlur?: (e) => void
|
|
22
|
+
readOnly?: boolean
|
|
23
|
+
noTrim?: boolean
|
|
24
|
+
ref?: React.LegacyRef<HTMLInputElement>
|
|
25
|
+
onKeyPress?: (e) => void
|
|
26
|
+
defaultValue?: string | number | ReadonlyArray<string> | undefined
|
|
27
|
+
onKeyDown?: (e) => void
|
|
28
|
+
required?: boolean
|
|
29
|
+
additionalErrorInfo?: React.ReactNode
|
|
30
|
+
inputWrapClassName?: string
|
|
31
|
+
inputProps?: InputHTMLAttributes<HTMLInputElement>
|
|
32
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ReactComponent as InjectTag } from '../../Assets/Icon/inject-tag.svg'
|
|
3
|
+
import { ReactComponent as Help } from '../../Assets/Icon/ic-help-outline.svg'
|
|
4
|
+
import { TippyCustomized } from '../TippyCustomized'
|
|
5
|
+
import { TippyTheme } from '../Types'
|
|
6
|
+
import { DOCUMENTATION } from '../Constants'
|
|
7
|
+
|
|
8
|
+
export default function PropagateTagInfo({ isCreateApp }: { isCreateApp: boolean }) {
|
|
9
|
+
const additionalInfo = () => {
|
|
10
|
+
return (
|
|
11
|
+
<div className="p-12 fs-13">
|
|
12
|
+
<div className="mb-20">
|
|
13
|
+
<span className="flex left">
|
|
14
|
+
Add a tag and click on the
|
|
15
|
+
<InjectTag className="icon-dim-16 ml-4 mr-4" />
|
|
16
|
+
icon to
|
|
17
|
+
</span>
|
|
18
|
+
propagate tags as labels to Kubernetes resources
|
|
19
|
+
</div>
|
|
20
|
+
<div>Use these tags to filter/identify resources via CLI or in other Kubernetes tools.</div>
|
|
21
|
+
</div>
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
return (
|
|
25
|
+
<TippyCustomized
|
|
26
|
+
theme={TippyTheme.white}
|
|
27
|
+
className="w-300"
|
|
28
|
+
placement="top"
|
|
29
|
+
Icon={InjectTag}
|
|
30
|
+
heading={'Propagate tags to K8s resources'}
|
|
31
|
+
infoText=""
|
|
32
|
+
additionalContent={additionalInfo()}
|
|
33
|
+
showCloseButton={true}
|
|
34
|
+
trigger="click"
|
|
35
|
+
interactive={true}
|
|
36
|
+
documentationLink={isCreateApp ? DOCUMENTATION.APP_TAGS : DOCUMENTATION.APP_OVERVIEW_TAGS}
|
|
37
|
+
documentationLinkText="View Documentation"
|
|
38
|
+
>
|
|
39
|
+
<div className="flexbox cursor">
|
|
40
|
+
<InjectTag className="icon-dim-16 mt-2 mr-4" />
|
|
41
|
+
<span>Propagate tags</span>
|
|
42
|
+
<Help className="icon-dim-16 mt-2 ml-4" />
|
|
43
|
+
</div>
|
|
44
|
+
</TippyCustomized>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
|
+
import { useThrottledEffect } from '../Helper'
|
|
3
|
+
import { ResizableTagTextAreaProps } from './Types'
|
|
4
|
+
|
|
5
|
+
export function ResizableTagTextArea({
|
|
6
|
+
className,
|
|
7
|
+
minHeight,
|
|
8
|
+
maxHeight,
|
|
9
|
+
value,
|
|
10
|
+
onChange,
|
|
11
|
+
onBlur,
|
|
12
|
+
onFocus,
|
|
13
|
+
placeholder,
|
|
14
|
+
tabIndex,
|
|
15
|
+
refVar,
|
|
16
|
+
dependentRef,
|
|
17
|
+
dataTestId,
|
|
18
|
+
handleKeyDown,
|
|
19
|
+
}: ResizableTagTextAreaProps) {
|
|
20
|
+
const [text, setText] = useState('')
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setText(value)
|
|
24
|
+
}, [value])
|
|
25
|
+
|
|
26
|
+
const handleChange = (event) => {
|
|
27
|
+
setText(event.target.value)
|
|
28
|
+
onChange(event)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const reInitHeight = () => {
|
|
32
|
+
if (document.activeElement !== refVar.current) return
|
|
33
|
+
refVar.current.style.height = minHeight + 'px'
|
|
34
|
+
if (dependentRef) {
|
|
35
|
+
dependentRef.current.style.height = minHeight + 'px'
|
|
36
|
+
}
|
|
37
|
+
let nextHeight = refVar.current.scrollHeight
|
|
38
|
+
if (dependentRef && nextHeight < dependentRef.current.scrollHeight) {
|
|
39
|
+
nextHeight = dependentRef.current.scrollHeight
|
|
40
|
+
}
|
|
41
|
+
if (minHeight && nextHeight < minHeight) {
|
|
42
|
+
nextHeight = minHeight
|
|
43
|
+
}
|
|
44
|
+
if (maxHeight && nextHeight > maxHeight) {
|
|
45
|
+
nextHeight = maxHeight
|
|
46
|
+
}
|
|
47
|
+
refVar.current.style.height = nextHeight + 'px'
|
|
48
|
+
if (dependentRef) {
|
|
49
|
+
dependentRef.current.style.height = nextHeight + 'px'
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
useThrottledEffect(reInitHeight, 500, [text])
|
|
54
|
+
|
|
55
|
+
const handleOnBlur = (event) => {
|
|
56
|
+
refVar.current.style.height = minHeight + 'px'
|
|
57
|
+
if (dependentRef) {
|
|
58
|
+
dependentRef.current.style.height = minHeight + 'px'
|
|
59
|
+
}
|
|
60
|
+
onBlur && onBlur(event)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const handleOnFocus = (event) => {
|
|
64
|
+
reInitHeight()
|
|
65
|
+
onFocus && onFocus(event)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<textarea
|
|
70
|
+
rows={1}
|
|
71
|
+
ref={refVar}
|
|
72
|
+
value={text}
|
|
73
|
+
placeholder={placeholder}
|
|
74
|
+
className={`${className || ''} lh-20`}
|
|
75
|
+
style={{ resize: 'none' }}
|
|
76
|
+
onChange={handleChange}
|
|
77
|
+
onBlur={handleOnBlur}
|
|
78
|
+
onFocus={handleOnFocus}
|
|
79
|
+
tabIndex={tabIndex}
|
|
80
|
+
data-testid={dataTestId}
|
|
81
|
+
onKeyDown={handleKeyDown}
|
|
82
|
+
/>
|
|
83
|
+
)
|
|
84
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React, { useRef } from 'react'
|
|
2
|
+
import { ReactComponent as DeleteCross } from '../../Assets/Icon/ic-cross.svg'
|
|
3
|
+
import { ReactComponent as InjectTag } from '../../Assets/Icon/inject-tag.svg'
|
|
4
|
+
import { TagLabelValueSelector } from './TagLabelValueSelector'
|
|
5
|
+
import { KEY_VALUE } from '../Constants'
|
|
6
|
+
import { stopPropagation } from '../Helper'
|
|
7
|
+
import { TagDetailType } from './Types'
|
|
8
|
+
import { ValidationRules } from './ValidationRules'
|
|
9
|
+
|
|
10
|
+
export const TagDetails = ({
|
|
11
|
+
index,
|
|
12
|
+
tagData,
|
|
13
|
+
setTagData,
|
|
14
|
+
removeTag,
|
|
15
|
+
tabIndex = 1,
|
|
16
|
+
suggestedTagsOptions,
|
|
17
|
+
}: TagDetailType) => {
|
|
18
|
+
const keyRef = useRef(null)
|
|
19
|
+
const valueRef = useRef(null)
|
|
20
|
+
const validationRules = new ValidationRules()
|
|
21
|
+
|
|
22
|
+
const deleteTag = (e): void => {
|
|
23
|
+
stopPropagation(e)
|
|
24
|
+
removeTag(index)
|
|
25
|
+
}
|
|
26
|
+
const propagateTagToResource = (): void => {
|
|
27
|
+
const _tagData = { ...tagData }
|
|
28
|
+
_tagData.propagate = !_tagData.propagate
|
|
29
|
+
if (_tagData.propagate) {
|
|
30
|
+
_tagData.isInvalidKey = _tagData.isInvalidKey || !_tagData.key
|
|
31
|
+
_tagData.isInvalidValue = _tagData.isInvalidValue || !_tagData.value
|
|
32
|
+
} else {
|
|
33
|
+
_tagData.isInvalidKey =
|
|
34
|
+
_tagData.key || _tagData.value ? !validationRules.propagateTagKey(_tagData.key).isValid : false
|
|
35
|
+
_tagData.isInvalidValue = _tagData.value
|
|
36
|
+
? !validationRules.propagateTagValue(_tagData.value, _tagData.key).isValid
|
|
37
|
+
: false
|
|
38
|
+
}
|
|
39
|
+
setTagData(index, _tagData)
|
|
40
|
+
}
|
|
41
|
+
return (
|
|
42
|
+
<div className="flexbox mb-8">
|
|
43
|
+
<div
|
|
44
|
+
className={`dc__border h-30 pl-4 pr-4 br-4 mr-8 pointer ${tagData.propagate ? 'bcn-7' : ''} ${tagData.key.startsWith("devtron.ai/") ? 'cursor-not-allowed bcn-1' : ''}`}
|
|
45
|
+
onClick={propagateTagToResource}
|
|
46
|
+
data-testid={`propagate-tag-${index}`}
|
|
47
|
+
>
|
|
48
|
+
<InjectTag className={`icon-dim-20 mt-4 ${tagData.propagate ? 'scn-0' : ''}`} />
|
|
49
|
+
</div>
|
|
50
|
+
<TagLabelValueSelector
|
|
51
|
+
selectedTagIndex={index}
|
|
52
|
+
tagData={tagData}
|
|
53
|
+
setTagData={setTagData}
|
|
54
|
+
tagInputType={KEY_VALUE.KEY}
|
|
55
|
+
placeholder="Enter key"
|
|
56
|
+
tabIndex={tabIndex - 1}
|
|
57
|
+
refVar={keyRef}
|
|
58
|
+
dependentRef={valueRef}
|
|
59
|
+
tagOptions={suggestedTagsOptions}
|
|
60
|
+
/>
|
|
61
|
+
<TagLabelValueSelector
|
|
62
|
+
selectedTagIndex={index}
|
|
63
|
+
tagData={tagData}
|
|
64
|
+
setTagData={setTagData}
|
|
65
|
+
tagInputType={KEY_VALUE.VALUE}
|
|
66
|
+
placeholder="Enter value"
|
|
67
|
+
tabIndex={tabIndex}
|
|
68
|
+
refVar={valueRef}
|
|
69
|
+
dependentRef={keyRef}
|
|
70
|
+
/>
|
|
71
|
+
<div className="dc__border pl-4 pr-4 dc__right-radius-4 pointer flex top" onClick={deleteTag} data-testid={`delete-tag-${index}`}>
|
|
72
|
+
<DeleteCross className="icon-dim-20 mt-4" />
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import PropagateTagInfo from './PropagateTagInfo'
|
|
3
|
+
import { ReactComponent as Add } from '../../Assets/Icon/ic-add.svg'
|
|
4
|
+
import { DEFAULT_TAG_DATA } from '../Constants'
|
|
5
|
+
import { TagLabelSelectType } from './Types'
|
|
6
|
+
import { TagDetails } from './TagDetails'
|
|
7
|
+
|
|
8
|
+
export const TagLabelSelect = ({
|
|
9
|
+
isCreateApp,
|
|
10
|
+
labelTags,
|
|
11
|
+
setLabelTags,
|
|
12
|
+
tabIndex = 0
|
|
13
|
+
}: TagLabelSelectType) => {
|
|
14
|
+
const setTagData = (index, tagValue): void => {
|
|
15
|
+
const _tags = [...labelTags]
|
|
16
|
+
const _tagValue = tagValue
|
|
17
|
+
if(_tagValue.key.startsWith("devtron.ai/")){
|
|
18
|
+
_tagValue.propagate = false
|
|
19
|
+
}
|
|
20
|
+
_tags[index] = _tagValue
|
|
21
|
+
setLabelTags(_tags)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const addNewTag = (): void => {
|
|
25
|
+
const _tags = [...labelTags]
|
|
26
|
+
_tags.splice(0, 0, DEFAULT_TAG_DATA)
|
|
27
|
+
setLabelTags(_tags)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const removeTag = (index: number): void => {
|
|
31
|
+
const _tags = [...labelTags]
|
|
32
|
+
_tags.splice(index, 1)
|
|
33
|
+
setLabelTags(_tags)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div>
|
|
38
|
+
<div className="flexbox dc__content-space mb-8">
|
|
39
|
+
<span>Tags</span>
|
|
40
|
+
<PropagateTagInfo isCreateApp={isCreateApp} />
|
|
41
|
+
</div>
|
|
42
|
+
<div>
|
|
43
|
+
<div className="dc_width-max-content cb-5 fw-6 fs-13 flexbox mr-20 mb-8 cursor" onClick={addNewTag} data-testid="add-tag-button">
|
|
44
|
+
<Add className="icon-dim-20 fcb-5" /> Add tag
|
|
45
|
+
</div>
|
|
46
|
+
<div className="mb-8" data-testid="tag-rows-container">
|
|
47
|
+
{labelTags?.map((tagData, index) => (
|
|
48
|
+
<TagDetails
|
|
49
|
+
key={`tag-${index}`}
|
|
50
|
+
index={index}
|
|
51
|
+
tagData={tagData}
|
|
52
|
+
setTagData={setTagData}
|
|
53
|
+
removeTag={removeTag}
|
|
54
|
+
tabIndex={tabIndex + (index + 2)}
|
|
55
|
+
/>
|
|
56
|
+
))}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react'
|
|
2
|
+
import PopupMenu from '../PopupMenu'
|
|
3
|
+
import { ReactComponent as ErrorCross } from '../../Assets/Icon/ic-cross.svg'
|
|
4
|
+
import { ReactComponent as Info } from '../../Assets/Icon/ic-info-outlined.svg'
|
|
5
|
+
import { KEY_VALUE } from '../Constants'
|
|
6
|
+
import { stopPropagation } from '../Helper'
|
|
7
|
+
import { ResizableTagTextArea } from './ResizableTagTextArea'
|
|
8
|
+
import { SuggestedTagOptionType, TagLabelValueSelectorType } from './Types'
|
|
9
|
+
import Tippy from '@tippyjs/react'
|
|
10
|
+
import { ValidationRules } from './ValidationRules'
|
|
11
|
+
|
|
12
|
+
export const TagLabelValueSelector = ({
|
|
13
|
+
selectedTagIndex,
|
|
14
|
+
tagData,
|
|
15
|
+
setTagData,
|
|
16
|
+
tagOptions,
|
|
17
|
+
isRequired,
|
|
18
|
+
tagInputType,
|
|
19
|
+
placeholder,
|
|
20
|
+
tabIndex = null,
|
|
21
|
+
refVar,
|
|
22
|
+
dependentRef,
|
|
23
|
+
noBackDrop,
|
|
24
|
+
}: TagLabelValueSelectorType) => {
|
|
25
|
+
const [selectedValue, setSelectedValue] = useState<string>('')
|
|
26
|
+
const [activeElement, setActiveElement] = useState<string>('')
|
|
27
|
+
const validationRules = new ValidationRules()
|
|
28
|
+
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
setSelectedValue(tagData?.[tagInputType] || '')
|
|
31
|
+
}, [selectedTagIndex, tagData, tagInputType])
|
|
32
|
+
|
|
33
|
+
const handleOnFocus = (e) => {
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
setActiveElement(`tag-${tagInputType}-${selectedTagIndex}`)
|
|
36
|
+
}, 300)
|
|
37
|
+
}
|
|
38
|
+
const handleOnBlur = (e) => {
|
|
39
|
+
if (
|
|
40
|
+
!e.relatedTarget ||
|
|
41
|
+
!e.relatedTarget.classList.value ||
|
|
42
|
+
!e.relatedTarget.classList.value.includes(`tag-${selectedTagIndex}-class`)
|
|
43
|
+
) {
|
|
44
|
+
setActiveElement('')
|
|
45
|
+
const _tagData = { ...tagData }
|
|
46
|
+
_tagData[tagInputType] = selectedValue
|
|
47
|
+
if (tagInputType === KEY_VALUE.KEY) {
|
|
48
|
+
_tagData.isInvalidKey =
|
|
49
|
+
selectedValue || _tagData.propagate
|
|
50
|
+
? !validationRules.propagateTagKey(selectedValue).isValid
|
|
51
|
+
: _tagData.value !== ''
|
|
52
|
+
} else if (selectedValue || isRequired || _tagData.propagate) {
|
|
53
|
+
_tagData.isInvalidValue = !validationRules.propagateTagValue(selectedValue, _tagData.key).isValid
|
|
54
|
+
_tagData.isInvalidKey = !_tagData.key || _tagData.isInvalidKey
|
|
55
|
+
} else {
|
|
56
|
+
_tagData.isInvalidValue = false
|
|
57
|
+
_tagData.isInvalidKey = !_tagData.key ? false : _tagData.isInvalidKey
|
|
58
|
+
}
|
|
59
|
+
setTagData(selectedTagIndex, _tagData)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const handleInputChange = (e): void => {
|
|
64
|
+
setSelectedValue(e.target.value)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const onSelectValue = (e): void => {
|
|
68
|
+
stopPropagation(e)
|
|
69
|
+
const _tagData = { ...tagData }
|
|
70
|
+
_tagData[tagInputType] = e.currentTarget.dataset.key
|
|
71
|
+
_tagData.propagate = e.currentTarget.dataset.propagate === 'true'
|
|
72
|
+
setTagData(selectedTagIndex, _tagData)
|
|
73
|
+
setActiveElement('')
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const renderValidationsSuggestions = (): JSX.Element => {
|
|
77
|
+
let field = { isValid: true, messages: [] }
|
|
78
|
+
if (tagInputType === KEY_VALUE.KEY) {
|
|
79
|
+
if (selectedValue || tagData.value) {
|
|
80
|
+
field = validationRules.propagateTagKey(selectedValue)
|
|
81
|
+
}
|
|
82
|
+
} else if (isRequired || selectedValue || tagData.propagate) {
|
|
83
|
+
field = validationRules.propagateTagValue(selectedValue, tagData.key)
|
|
84
|
+
}
|
|
85
|
+
if (!field.isValid) {
|
|
86
|
+
return (
|
|
87
|
+
<div className="p-4" onClick={stopPropagation} data-testid="tag-label-cross-stop-propagation">
|
|
88
|
+
{field.messages.map((error) => (
|
|
89
|
+
<div key={error} className="flexbox pr-4 pl-4">
|
|
90
|
+
<span>
|
|
91
|
+
<ErrorCross className="icon-dim-14 scr-5 mt-3 mr-4" />
|
|
92
|
+
</span>
|
|
93
|
+
<span>{error}</span>
|
|
94
|
+
</div>
|
|
95
|
+
))}
|
|
96
|
+
{tagInputType === KEY_VALUE.KEY && (
|
|
97
|
+
<div className="flexbox pr-4 pl-4">
|
|
98
|
+
<span>
|
|
99
|
+
<Info className="icon-dim-14 mt-3 mr-4" />
|
|
100
|
+
</span>
|
|
101
|
+
<span className="dc__italic-font-style">Key format: prefix/name or name</span>
|
|
102
|
+
</div>
|
|
103
|
+
)}
|
|
104
|
+
</div>
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
return null
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const option = (tag: SuggestedTagOptionType, index: number): JSX.Element => {
|
|
111
|
+
return (
|
|
112
|
+
<div
|
|
113
|
+
key={`${tag.value}-${index}`}
|
|
114
|
+
data-key={tag.label}
|
|
115
|
+
data-propagate={tag.propagate}
|
|
116
|
+
className="dc__hover-n50 dc__ellipsis-right lh-20 fs-13 fw-4 pt-6 pr-8 pb-6 pl-8 cursor"
|
|
117
|
+
onClick={onSelectValue}
|
|
118
|
+
data-testid={`tag-label-value-${index}`}
|
|
119
|
+
>
|
|
120
|
+
{tag.label}
|
|
121
|
+
</div>
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const optionWithTippy = (tag: SuggestedTagOptionType, index: number): JSX.Element => {
|
|
126
|
+
return (
|
|
127
|
+
<Tippy
|
|
128
|
+
className="default-tt"
|
|
129
|
+
arrow={false}
|
|
130
|
+
placement="right"
|
|
131
|
+
content={
|
|
132
|
+
<div>
|
|
133
|
+
<div className="mb-10 fs-12 fw-6 cn-0 dc__break-word">{tag.label}</div>
|
|
134
|
+
<div className="fs-12 fw-4 cn-0 dc__break-word">{tag.description}</div>
|
|
135
|
+
</div>
|
|
136
|
+
}
|
|
137
|
+
>
|
|
138
|
+
{option(tag, index)}
|
|
139
|
+
</Tippy>
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const renderSuggestions = (): JSX.Element => {
|
|
144
|
+
if (tagOptions?.length) {
|
|
145
|
+
const filteredTags = tagOptions.filter((tag) => tag.label.indexOf(selectedValue) >= 0)
|
|
146
|
+
if (filteredTags.length) {
|
|
147
|
+
return (
|
|
148
|
+
<div>
|
|
149
|
+
{filteredTags.map((tag, index) =>
|
|
150
|
+
tag.description ? optionWithTippy(tag, index) : option(tag, index),
|
|
151
|
+
)}
|
|
152
|
+
</div>
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return renderValidationsSuggestions()
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const popupMenuBody = activeElement === `tag-${tagInputType}-${selectedTagIndex}` ? renderSuggestions() : null
|
|
160
|
+
return (
|
|
161
|
+
<PopupMenu autoClose autoPosition>
|
|
162
|
+
<PopupMenu.Button rootClassName="dc__bg-n50 flex top dc__no-border-imp">
|
|
163
|
+
<ResizableTagTextArea
|
|
164
|
+
minHeight={30}
|
|
165
|
+
maxHeight={80}
|
|
166
|
+
className={`form__input tag-input pt-4-imp pb-4-imp fs-13 ${
|
|
167
|
+
tagInputType === KEY_VALUE.KEY
|
|
168
|
+
? `dc__no-right-radius`
|
|
169
|
+
: `dc__no-border-radius dc__no-right-border dc__no-left-border`
|
|
170
|
+
} ${
|
|
171
|
+
tagData[tagInputType === KEY_VALUE.KEY ? 'isInvalidKey' : 'isInvalidValue']
|
|
172
|
+
? 'form__input--error'
|
|
173
|
+
: ''
|
|
174
|
+
}`}
|
|
175
|
+
value={selectedValue}
|
|
176
|
+
onChange={handleInputChange}
|
|
177
|
+
onBlur={handleOnBlur}
|
|
178
|
+
onFocus={handleOnFocus}
|
|
179
|
+
placeholder={placeholder}
|
|
180
|
+
tabIndex={tabIndex}
|
|
181
|
+
refVar={refVar}
|
|
182
|
+
dependentRef={dependentRef}
|
|
183
|
+
dataTestId={`tag-${tagInputType === KEY_VALUE.KEY ? 'key' : 'value'}-${selectedTagIndex}`}
|
|
184
|
+
/>
|
|
185
|
+
</PopupMenu.Button>
|
|
186
|
+
{popupMenuBody && (
|
|
187
|
+
<PopupMenu.Body
|
|
188
|
+
rootClassName={`mxh-210 dc__overflow-auto tag-${selectedTagIndex}-class`}
|
|
189
|
+
autoWidth={true}
|
|
190
|
+
preventWheelDisable={true}
|
|
191
|
+
noBackDrop={noBackDrop}
|
|
192
|
+
>
|
|
193
|
+
{popupMenuBody}
|
|
194
|
+
</PopupMenu.Body>
|
|
195
|
+
)}
|
|
196
|
+
</PopupMenu>
|
|
197
|
+
)
|
|
198
|
+
}
|