@devtron-labs/devtron-fe-common-lib 0.0.59 → 0.0.60-beta-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +5 -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 +3 -4
- 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/CodeEditor/CodeEditor.d.ts +47 -0
- package/dist/Common/Common.service.d.ts +20 -20
- package/dist/Common/Constants.d.ts +81 -75
- package/dist/Common/CustomInput/CustomInput.d.ts +2 -3
- 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 +2 -3
- package/dist/Common/CustomTagSelector/TagDetails.d.ts +2 -3
- package/dist/Common/CustomTagSelector/TagLabelSelect.d.ts +2 -3
- package/dist/Common/CustomTagSelector/TagLabelValueSelector.d.ts +2 -3
- 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 +3 -4
- package/dist/Common/DeleteComponentModal/types.d.ts +15 -15
- package/dist/Common/DevtronProgressing/DevtronProgressing.d.ts +2 -3
- 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 +8 -9
- 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 +14 -16
- package/dist/Common/EmptyState/GenericEmptyState.d.ts +3 -5
- package/dist/Common/Error.d.ts +17 -17
- package/dist/Common/ErrorScreenNotFound.d.ts +2 -3
- package/dist/Common/Grid/Grid.d.ts +3 -3
- package/dist/Common/Grid/types.d.ts +10 -10
- package/dist/Common/Helper.d.ts +68 -64
- 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 +3 -3
- package/dist/Common/ImageTags.Types.d.ts +40 -40
- package/dist/Common/ImageTags.d.ts +3 -4
- package/dist/Common/InfoColorBar/InfoColourbar.d.ts +3 -5
- 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 +3 -4
- package/dist/Common/Pagination/Pagination.d.ts +3 -5
- 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 +7 -8
- package/dist/Common/Progressing.d.ts +3 -4
- package/dist/Common/RJSF/Form.d.ts +2 -4
- package/dist/Common/RJSF/common/FieldRow.d.ts +5 -6
- 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 +2 -3
- package/dist/Common/RJSF/templates/ArrayFieldTemplate.d.ts +2 -3
- package/dist/Common/RJSF/templates/BaseInput.d.ts +2 -3
- package/dist/Common/RJSF/templates/ButtonTemplates/AddButton.d.ts +2 -3
- package/dist/Common/RJSF/templates/ButtonTemplates/RemoveButton.d.ts +2 -3
- package/dist/Common/RJSF/templates/ButtonTemplates/SubmitButton.d.ts +2 -3
- package/dist/Common/RJSF/templates/ButtonTemplates/index.d.ts +3 -3
- package/dist/Common/RJSF/templates/Description.d.ts +2 -3
- package/dist/Common/RJSF/templates/Field.d.ts +2 -3
- package/dist/Common/RJSF/templates/FieldErrorTemplate.d.ts +2 -3
- package/dist/Common/RJSF/templates/ObjectFieldTemplate.d.ts +2 -3
- package/dist/Common/RJSF/templates/TitleField.d.ts +2 -3
- package/dist/Common/RJSF/templates/WrapIfAdditionalTemplate.d.ts +2 -3
- 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 +25 -26
- package/dist/Common/RJSF/widgets/Checkbox.d.ts +2 -3
- package/dist/Common/RJSF/widgets/Select.d.ts +2 -3
- package/dist/Common/RJSF/widgets/index.d.ts +2 -2
- package/dist/Common/RadioGroup/RadioGroup.d.ts +16 -17
- 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 +37 -39
- 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 +3 -4
- package/dist/Common/Select/Select.d.ts +4 -0
- package/dist/Common/Select/types.d.ts +29 -0
- package/dist/Common/ServerError.d.ts +15 -15
- package/dist/Common/TippyCustomized.d.ts +2 -4
- package/dist/Common/ToastBody.d.ts +23 -23
- package/dist/Common/Toggle/Toggle.d.ts +12 -14
- package/dist/Common/Types.d.ts +691 -691
- package/dist/Common/index.d.ts +50 -50
- package/dist/abap-9f67f57a.js +1314 -0
- package/dist/apex-ff62e532.js +315 -0
- package/dist/assets/editor.worker-d26000ef.js +9 -0
- package/dist/assets/index.css +1 -0
- package/dist/assets/json.worker-f23a4654.js +40 -0
- package/dist/assets/yaml.worker-35ea3f9a.js +467 -0
- package/dist/azcli-31e64a7f.js +74 -0
- package/dist/bat-0ffe897e.js +95 -0
- package/dist/bicep-3414a2b1.js +108 -0
- package/dist/cameligo-df1f3f25.js +168 -0
- package/dist/clojure-65b0f010.js +754 -0
- package/dist/coffee-437f0fba.js +228 -0
- package/dist/cpp-66843dd5.js +390 -0
- package/dist/csharp-621d9a49.js +320 -0
- package/dist/csp-de0d5244.js +57 -0
- package/dist/css-7cd5ed4c.js +186 -0
- package/dist/cssMode-6b75f943.js +1446 -0
- package/dist/cypher-70ad96fe.js +262 -0
- package/dist/dart-33ae3739.js +270 -0
- package/dist/dockerfile-f2274a50.js +132 -0
- package/dist/ecl-3b8294a3.js +454 -0
- package/dist/elixir-b9dcc73a.js +489 -0
- package/dist/flow9-bdde8316.js +141 -0
- package/dist/freemarker2-af9f92ac.js +643 -0
- package/dist/fsharp-eac2e449.js +210 -0
- package/dist/go-d12ed8d4.js +208 -0
- package/dist/graphql-c7356b69.js +141 -0
- package/dist/handlebars-cc9800dd.js +391 -0
- package/dist/hcl-e883a0d4.js +177 -0
- package/dist/html-edc1e4c2.js +281 -0
- package/dist/htmlMode-17cc8a79.js +1456 -0
- package/dist/index-32e797ab.js +126102 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.js +162 -28883
- package/dist/ini-425ab711.js +68 -0
- package/dist/java-2bc0fd68.js +221 -0
- package/dist/javascript-5e615a9b.js +75 -0
- package/dist/jsonMode-742c1a1b.js +1867 -0
- package/dist/julia-1c932615.js +496 -0
- package/dist/kotlin-1ab839c8.js +245 -0
- package/dist/less-6fe856f5.js +168 -0
- package/dist/lexon-4955ac52.js +151 -0
- package/dist/liquid-843d0e9e.js +238 -0
- package/dist/lua-3cca0047.js +157 -0
- package/dist/m3-132e9cb6.js +210 -0
- package/dist/markdown-ea59a0c1.js +202 -0
- package/dist/mips-19811f4b.js +194 -0
- package/dist/msdax-69954a10.js +377 -0
- package/dist/mysql-82088e5d.js +876 -0
- package/dist/objective-c-1976eccc.js +188 -0
- package/dist/pascal-8ef177cb.js +245 -0
- package/dist/pascaligo-bc517b9e.js +158 -0
- package/dist/perl-8b93582c.js +599 -0
- package/dist/pgsql-00c11a6d.js +847 -0
- package/dist/php-4c8c276f.js +471 -0
- package/dist/pla-e9b4ffb1.js +131 -0
- package/dist/postiats-2071af8c.js +544 -0
- package/dist/powerquery-8e388ceb.js +890 -0
- package/dist/powershell-e35db398.js +233 -0
- package/dist/protobuf-a24b9176.js +422 -0
- package/dist/pug-2c94d9b8.js +393 -0
- package/dist/python-67e4059c.js +259 -0
- package/dist/qsharp-d730d7fe.js +282 -0
- package/dist/r-be193556.js +245 -0
- package/dist/razor-8e9d6aa5.js +512 -0
- package/dist/redis-9690c6ac.js +298 -0
- package/dist/redshift-6bdcdeaa.js +806 -0
- package/dist/restructuredtext-a08c1d20.js +162 -0
- package/dist/ruby-2247692b.js +444 -0
- package/dist/rust-1dffb4d5.js +337 -0
- package/dist/sb-136598e9.js +110 -0
- package/dist/scala-b1100fed.js +353 -0
- package/dist/scheme-038c8094.js +114 -0
- package/dist/scss-700d1b52.js +244 -0
- package/dist/shell-86c16e0f.js +224 -0
- package/dist/solidity-c05fdf3c.js +1351 -0
- package/dist/sophia-cd645d71.js +190 -0
- package/dist/sparql-01d9ec9c.js +193 -0
- package/dist/sql-4c33df41.js +818 -0
- package/dist/st-52cf1408.js +414 -0
- package/dist/swift-13c792ba.js +315 -0
- package/dist/systemverilog-0bd8b730.js +556 -0
- package/dist/tcl-463d7c75.js +232 -0
- package/dist/tsMode-d5db18bc.js +811 -0
- package/dist/twig-0d98f5ec.js +323 -0
- package/dist/typescript-302557e6.js +328 -0
- package/dist/vb-3a2b0a51.js +364 -0
- package/dist/wgsl-b2ddb3e4.js +420 -0
- package/dist/xml-47f08bc4.js +95 -0
- package/dist/yaml-49f075d9.js +184 -0
- package/package.json +34 -23
- package/.eslintignore +0 -96
- package/.eslintrc.js +0 -109
- package/.github/pull_request_template.md +0 -25
- package/.github/workflows/ci.yml +0 -31
- package/.github/workflows/release-package.yml +0 -48
- package/.husky/pre-commit +0 -5
- package/.lintstagedrc +0 -3
- package/.nvmrc +0 -1
- package/.prettierrc.js +0 -7
- package/dist/Common/EmptyState/EmptyState.d.ts +0 -25
- package/rollup.config.js +0 -31
- package/src/Assets/Icon/ic-add.svg +0 -3
- package/src/Assets/Icon/ic-appstatus-cancelled.svg +0 -6
- package/src/Assets/Icon/ic-arrow-counter-clockwise.svg +0 -5
- package/src/Assets/Icon/ic-check.svg +0 -5
- package/src/Assets/Icon/ic-chevron-down.svg +0 -5
- package/src/Assets/Icon/ic-copy.svg +0 -3
- package/src/Assets/Icon/ic-cross.svg +0 -3
- package/src/Assets/Icon/ic-drag.svg +0 -8
- package/src/Assets/Icon/ic-enter.svg +0 -3
- package/src/Assets/Icon/ic-error-cross.svg +0 -8
- package/src/Assets/Icon/ic-error-exclamation.svg +0 -6
- package/src/Assets/Icon/ic-error-medium.svg +0 -6
- package/src/Assets/Icon/ic-help-outline.svg +0 -3
- package/src/Assets/Icon/ic-help.svg +0 -3
- package/src/Assets/Icon/ic-info-filled.svg +0 -7
- package/src/Assets/Icon/ic-info-outlined.svg +0 -13
- package/src/Assets/Icon/ic-minus.svg +0 -3
- package/src/Assets/Icon/ic-pencil.svg +0 -3
- package/src/Assets/Icon/ic-progressing.svg +0 -6
- package/src/Assets/Icon/ic-rotate-devtron.svg +0 -103
- package/src/Assets/Icon/ic-search.svg +0 -6
- package/src/Assets/Icon/ic-warning.svg +0 -7
- package/src/Assets/Icon/inject-tag.svg +0 -5
- package/src/Assets/Img/app-not-deployed.png +0 -0
- package/src/Assets/Img/delete-medium.svg +0 -15
- 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 +0 -62
- package/src/Common/AddCDButton/AddCDButton.tsx +0 -68
- package/src/Common/AddCDButton/index.ts +0 -2
- package/src/Common/AddCDButton/types.ts +0 -38
- package/src/Common/AddCDButton/utils.tsx +0 -35
- package/src/Common/Api.ts +0 -230
- package/src/Common/AppStatus/AppStatus.tsx +0 -64
- package/src/Common/AppStatus/constants.ts +0 -53
- package/src/Common/AppStatus/index.ts +0 -1
- package/src/Common/AppStatus/types.ts +0 -12
- package/src/Common/AppStatus/utils.ts +0 -14
- package/src/Common/BreadCrumb/BreadCrumb.tsx +0 -105
- package/src/Common/BreadCrumb/BreadcrumbStore.tsx +0 -25
- package/src/Common/BreadCrumb/Types.ts +0 -30
- package/src/Common/CIPipeline.Types.ts +0 -277
- package/src/Common/ChartVersionAndTypeSelector.tsx +0 -78
- package/src/Common/Checkbox.tsx +0 -36
- package/src/Common/ClipboardButton/ClipboardButton.tsx +0 -61
- package/src/Common/ClipboardButton/__tests__/ClipboardButton.test.tsx +0 -43
- package/src/Common/ClipboardButton/types.ts +0 -7
- package/src/Common/Common.service.ts +0 -315
- package/src/Common/Constants.ts +0 -254
- package/src/Common/CustomInput/CustomInput.tsx +0 -134
- package/src/Common/CustomInput/Types.ts +0 -32
- package/src/Common/CustomInput/index.ts +0 -2
- package/src/Common/CustomTagSelector/PropagateTagInfo.tsx +0 -46
- package/src/Common/CustomTagSelector/ResizableTagTextArea.tsx +0 -84
- package/src/Common/CustomTagSelector/TagDetails.tsx +0 -76
- package/src/Common/CustomTagSelector/TagLabelSelect.tsx +0 -61
- package/src/Common/CustomTagSelector/TagLabelValueSelector.tsx +0 -198
- package/src/Common/CustomTagSelector/TagSelector.utils.ts +0 -71
- package/src/Common/CustomTagSelector/Types.ts +0 -72
- package/src/Common/CustomTagSelector/ValidationRules.ts +0 -58
- package/src/Common/CustomTagSelector/index.ts +0 -6
- package/src/Common/DebouncedSearch/DebouncedSearch.tsx +0 -78
- package/src/Common/DebouncedSearch/Types.ts +0 -13
- package/src/Common/DebouncedSearch/Utils.ts +0 -19
- package/src/Common/DebouncedSearch/__tests__/DebouncedSearch.test.tsx +0 -61
- package/src/Common/DeleteComponentModal/DeleteComponent.tsx +0 -95
- package/src/Common/DeleteComponentModal/types.ts +0 -15
- package/src/Common/DevtronProgressing/DevtronProgressing.tsx +0 -11
- package/src/Common/DevtronProgressing/index.ts +0 -1
- package/src/Common/DevtronProgressing/types.ts +0 -4
- package/src/Common/Dialogs/ConfirmationDialog.tsx +0 -34
- package/src/Common/Dialogs/DeleteDialog.tsx +0 -69
- package/src/Common/Dialogs/DialogForm.tsx +0 -86
- package/src/Common/Dialogs/ForceDeleteDialog.tsx +0 -19
- package/src/Common/Dialogs/Types.ts +0 -47
- package/src/Common/Dialogs/index.ts +0 -4
- package/src/Common/DraggableWrapper/DraggableButton.tsx +0 -14
- package/src/Common/DraggableWrapper/DraggableWrapper.tsx +0 -116
- package/src/Common/DraggableWrapper/index.ts +0 -3
- package/src/Common/DraggableWrapper/types.ts +0 -27
- package/src/Common/Drawer/Drawer.scss +0 -40
- package/src/Common/Drawer/Drawer.tsx +0 -49
- package/src/Common/EmptyState/EmptyState.tsx +0 -42
- package/src/Common/EmptyState/GenericEmptyState.tsx +0 -81
- package/src/Common/EmptyState/emptyState.scss +0 -74
- package/src/Common/Error.tsx +0 -61
- package/src/Common/ErrorScreenNotFound.tsx +0 -31
- package/src/Common/Grid/Grid.tsx +0 -44
- package/src/Common/Grid/types.ts +0 -11
- package/src/Common/Helper.tsx +0 -576
- package/src/Common/Hooks/UseClickOutside/UseClickOutside.tsx +0 -15
- package/src/Common/Hooks/UseSuperAdmin/UseSuperAdmin.tsx +0 -24
- package/src/Common/Hooks/UseSuperAdmin/types.ts +0 -3
- package/src/Common/Hooks/UseWindowSize/UseWindowSize.tsx +0 -31
- package/src/Common/Hooks/index.ts +0 -3
- package/src/Common/ImageTags.Types.ts +0 -44
- package/src/Common/ImageTags.tsx +0 -586
- package/src/Common/InfoColorBar/InfoColourbar.tsx +0 -80
- package/src/Common/InfoColorBar/infoColourBar.scss +0 -28
- package/src/Common/Modals/Modal.tsx +0 -68
- package/src/Common/Modals/OpaqueModal.tsx +0 -36
- package/src/Common/Modals/VisibleModal.tsx +0 -55
- package/src/Common/Modals/VisibleModal2.tsx +0 -35
- package/src/Common/MultiSelectCustomization.tsx +0 -148
- package/src/Common/Pagination/PageSizeSelector.tsx +0 -78
- package/src/Common/Pagination/Pagination.tsx +0 -127
- package/src/Common/Pagination/constants.ts +0 -6
- package/src/Common/Pagination/index.tsx +0 -3
- package/src/Common/Pagination/pagination.scss +0 -123
- package/src/Common/Pagination/types.ts +0 -55
- package/src/Common/Pagination/utils.tsx +0 -24
- package/src/Common/Policy.Types.ts +0 -63
- package/src/Common/PopupMenu.tsx +0 -199
- package/src/Common/Progressing.tsx +0 -53
- package/src/Common/RJSF/Form.tsx +0 -29
- package/src/Common/RJSF/common/FieldRow.tsx +0 -35
- package/src/Common/RJSF/common/types.ts +0 -9
- package/src/Common/RJSF/config.ts +0 -37
- package/src/Common/RJSF/constants.ts +0 -10
- package/src/Common/RJSF/index.ts +0 -3
- package/src/Common/RJSF/rjsfForm.scss +0 -18
- package/src/Common/RJSF/templates/ArrayFieldItemTemplate.tsx +0 -31
- package/src/Common/RJSF/templates/ArrayFieldTemplate.tsx +0 -78
- package/src/Common/RJSF/templates/BaseInput.tsx +0 -16
- package/src/Common/RJSF/templates/ButtonTemplates/AddButton.tsx +0 -18
- package/src/Common/RJSF/templates/ButtonTemplates/RemoveButton.tsx +0 -10
- package/src/Common/RJSF/templates/ButtonTemplates/SubmitButton.tsx +0 -18
- package/src/Common/RJSF/templates/ButtonTemplates/index.ts +0 -3
- package/src/Common/RJSF/templates/Description.tsx +0 -12
- package/src/Common/RJSF/templates/Field.tsx +0 -30
- package/src/Common/RJSF/templates/FieldErrorTemplate.tsx +0 -25
- package/src/Common/RJSF/templates/ObjectFieldTemplate.tsx +0 -105
- package/src/Common/RJSF/templates/TitleField.tsx +0 -9
- package/src/Common/RJSF/templates/WrapIfAdditionalTemplate.tsx +0 -51
- package/src/Common/RJSF/templates/index.ts +0 -10
- package/src/Common/RJSF/types.ts +0 -4
- package/src/Common/RJSF/utils.ts +0 -123
- package/src/Common/RJSF/widgets/Checkbox.tsx +0 -44
- package/src/Common/RJSF/widgets/Select.tsx +0 -77
- package/src/Common/RJSF/widgets/index.ts +0 -2
- package/src/Common/RadioGroup/RadioGroup.tsx +0 -105
- package/src/Common/RadioGroup/radioGroup.scss +0 -46
- package/src/Common/RadioGroup.tsx +0 -53
- package/src/Common/Reload.tsx +0 -23
- package/src/Common/ResizableTextarea.tsx +0 -73
- package/src/Common/SearchBar/SearchBar.component.tsx +0 -119
- package/src/Common/SearchBar/index.ts +0 -2
- package/src/Common/SearchBar/searchBar.scss +0 -31
- package/src/Common/SearchBar/types.ts +0 -34
- package/src/Common/Security/ScanVulnerabilitiesTable.tsx +0 -55
- package/src/Common/Security/scanVulnerabilities.css +0 -69
- package/src/Common/ServerError.ts +0 -31
- package/src/Common/TippyCustomized.tsx +0 -172
- package/src/Common/ToastBody.tsx +0 -62
- package/src/Common/Toggle/Toggle.scss +0 -78
- package/src/Common/Toggle/Toggle.tsx +0 -50
- package/src/Common/Types.ts +0 -764
- package/src/Common/index.ts +0 -50
- package/src/custom.d.ts +0 -13
- package/src/index.ts +0 -1
- package/tsconfig.json +0 -40
|
@@ -1,198 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
export const baseSelectStyles = {
|
|
2
|
-
control: (base, state) => ({
|
|
3
|
-
...base,
|
|
4
|
-
border: '1px solid var(--N200)',
|
|
5
|
-
boxShadow: 'none',
|
|
6
|
-
minHeight: 'auto',
|
|
7
|
-
borderRadius: 'none',
|
|
8
|
-
height: '32px',
|
|
9
|
-
fontSize: '12px',
|
|
10
|
-
borderRight: '0',
|
|
11
|
-
cursor: state.isDisabled ? 'not-allowed' : 'normal',
|
|
12
|
-
}),
|
|
13
|
-
singleValue: (base, state) => ({
|
|
14
|
-
...base,
|
|
15
|
-
fontWeight: '500',
|
|
16
|
-
}),
|
|
17
|
-
placeholder: (base, state) => ({
|
|
18
|
-
...base,
|
|
19
|
-
fontWeight: '500',
|
|
20
|
-
}),
|
|
21
|
-
option: (base, state) => ({
|
|
22
|
-
...base,
|
|
23
|
-
fontWeight: '500',
|
|
24
|
-
color: 'var(--N900)',
|
|
25
|
-
fontSize: '12px',
|
|
26
|
-
padding: '5px 10px',
|
|
27
|
-
}),
|
|
28
|
-
dropdownIndicator: (styles) => ({ ...styles, padding: 0 }),
|
|
29
|
-
valueContainer: (base, state) => ({
|
|
30
|
-
...base,
|
|
31
|
-
color: 'var(--N900)',
|
|
32
|
-
background: state.isDisabled ? 'var(--N100) !important' : 'var(--N50) !important',
|
|
33
|
-
padding: '0px 10px',
|
|
34
|
-
display: 'flex',
|
|
35
|
-
height: '30px',
|
|
36
|
-
fontSize: '12px',
|
|
37
|
-
cursor: state.isDisabled ? 'not-allowed' : 'normal',
|
|
38
|
-
pointerEvents: 'all',
|
|
39
|
-
width: '100px',
|
|
40
|
-
whiteSpace: 'nowrap',
|
|
41
|
-
}),
|
|
42
|
-
indicatorsContainer: (base, state) => ({
|
|
43
|
-
...base,
|
|
44
|
-
background: state.isDisabled ? 'var(--N100) !important' : 'var(--N50) !important',
|
|
45
|
-
}),
|
|
46
|
-
menu: (base, state) => ({
|
|
47
|
-
...base,
|
|
48
|
-
marginTop: '0',
|
|
49
|
-
}),
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export const validateKubernetesKey = (key: string) => {
|
|
53
|
-
const invalidMessageList = []
|
|
54
|
-
if (!key || key.split('/')) {
|
|
55
|
-
invalidMessageList.push('Name is required')
|
|
56
|
-
} else {
|
|
57
|
-
const re = new RegExp('/', 'g')
|
|
58
|
-
const noOfSlashInKey = key.match(re).length
|
|
59
|
-
if (noOfSlashInKey > 1) {
|
|
60
|
-
invalidMessageList.push('Key: Max 1 ( / ) allowed')
|
|
61
|
-
} else {
|
|
62
|
-
let name = key
|
|
63
|
-
if (noOfSlashInKey === 1) {
|
|
64
|
-
const [prefix, name]=key.split('/')
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export const validateKubernetesValue = (value: string) => {}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { KEY_VALUE } from '../Constants'
|
|
2
|
-
import { OptionType } from '../Types'
|
|
3
|
-
|
|
4
|
-
export interface SuggestedTagOptionType extends OptionType {
|
|
5
|
-
description: string
|
|
6
|
-
propagate: boolean
|
|
7
|
-
}
|
|
8
|
-
export interface TagType {
|
|
9
|
-
id?: number
|
|
10
|
-
key: string
|
|
11
|
-
value?: string
|
|
12
|
-
description?: string
|
|
13
|
-
propagate: boolean
|
|
14
|
-
mandatoryProjectIdsCsv?: string
|
|
15
|
-
isInvalidKey?: boolean
|
|
16
|
-
isInvalidValue?: boolean
|
|
17
|
-
isSuggested?: boolean
|
|
18
|
-
isPropagateDisabled?: boolean
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface TagErrorType {
|
|
22
|
-
isValid: boolean
|
|
23
|
-
messages: string[]
|
|
24
|
-
}
|
|
25
|
-
export interface TagLabelSelectType {
|
|
26
|
-
isCreateApp?: boolean
|
|
27
|
-
labelTags: TagType[]
|
|
28
|
-
setLabelTags: (tagList: TagType[]) => void
|
|
29
|
-
tabIndex?: number
|
|
30
|
-
selectedProjectId?: number
|
|
31
|
-
suggestedTagsOptions?: SuggestedTagOptionType[]
|
|
32
|
-
reloadProjectTags?: boolean
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface TagDetailType {
|
|
36
|
-
index: number
|
|
37
|
-
tagData: TagType
|
|
38
|
-
setTagData: (index: number, tagData: TagType) => void
|
|
39
|
-
removeTag?: (index: number) => void
|
|
40
|
-
tabIndex?: number
|
|
41
|
-
suggestedTagsOptions?: SuggestedTagOptionType[]
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface TagLabelValueSelectorType {
|
|
45
|
-
selectedTagIndex: number
|
|
46
|
-
tagData: TagType
|
|
47
|
-
setTagData: (index: number, tagData: TagType) => void
|
|
48
|
-
tagOptions?: SuggestedTagOptionType[]
|
|
49
|
-
isRequired?: boolean
|
|
50
|
-
tagInputType?: KEY_VALUE
|
|
51
|
-
placeholder?: string
|
|
52
|
-
tabIndex?: number
|
|
53
|
-
refVar?: React.MutableRefObject<HTMLTextAreaElement>
|
|
54
|
-
dependentRef?: React.MutableRefObject<HTMLTextAreaElement>
|
|
55
|
-
noBackDrop?: boolean
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface ResizableTagTextAreaProps {
|
|
59
|
-
className?: string
|
|
60
|
-
minHeight?: number
|
|
61
|
-
maxHeight?: number
|
|
62
|
-
value?: string
|
|
63
|
-
onChange?: (e) => void
|
|
64
|
-
onBlur?: (e) => void
|
|
65
|
-
onFocus?: (e) => void
|
|
66
|
-
placeholder?: string
|
|
67
|
-
tabIndex?: number
|
|
68
|
-
refVar?: React.MutableRefObject<HTMLTextAreaElement>
|
|
69
|
-
dependentRef?: React.MutableRefObject<HTMLTextAreaElement>
|
|
70
|
-
dataTestId?: string
|
|
71
|
-
handleKeyDown?: any
|
|
72
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { PATTERNS } from '../Constants'
|
|
2
|
-
|
|
3
|
-
const validateTagValue = (value: string): string[] => {
|
|
4
|
-
const errorList = []
|
|
5
|
-
if (value.length > 63) {
|
|
6
|
-
errorList.push('Can be max 63 characters')
|
|
7
|
-
}
|
|
8
|
-
const firstLastAlphanumeric = PATTERNS.START_END_ALPHANUMERIC.test(value)
|
|
9
|
-
if (!firstLastAlphanumeric) {
|
|
10
|
-
errorList.push('Must start and end with an alphanumeric character')
|
|
11
|
-
}
|
|
12
|
-
const validValue = PATTERNS.ALPHANUMERIC_WITH_SPECIAL_CHAR.test(value)
|
|
13
|
-
if (!validValue) {
|
|
14
|
-
errorList.push('Can only contain alphanumeric chars and (-), (_), (.)')
|
|
15
|
-
}
|
|
16
|
-
return errorList
|
|
17
|
-
}
|
|
18
|
-
export class ValidationRules {
|
|
19
|
-
propagateTagKey = (key: string): { isValid: boolean; messages: string[] } => {
|
|
20
|
-
const errorList = []
|
|
21
|
-
if (!key) {
|
|
22
|
-
errorList.push('Key is required')
|
|
23
|
-
} else {
|
|
24
|
-
if(!key.startsWith("devtron.ai/")){
|
|
25
|
-
const re = new RegExp('/', 'g')
|
|
26
|
-
const noOfSlashInKey = key.match(re)?.length
|
|
27
|
-
if (noOfSlashInKey > 1) {
|
|
28
|
-
errorList.push('Key: Max 1 ( / ) allowed')
|
|
29
|
-
} else if (noOfSlashInKey === 1) {
|
|
30
|
-
const [prefix, name] = key.split('/')
|
|
31
|
-
errorList.push(...validateTagValue(name).map((error) => `Name: ${error}`))
|
|
32
|
-
if (prefix.length > 253) {
|
|
33
|
-
errorList.push('Prefix: Can be max 253 characters')
|
|
34
|
-
}
|
|
35
|
-
const validPrefix = PATTERNS.KUBERNETES_KEY_PREFIX.test(prefix)
|
|
36
|
-
if (!validPrefix) {
|
|
37
|
-
errorList.push('Prefix: Must be a DNS subdomain (a series of DNS labels separated by dots (.)')
|
|
38
|
-
}
|
|
39
|
-
} else {
|
|
40
|
-
errorList.push(...validateTagValue(key).map((error) => `Name: ${error}`))
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return { isValid: errorList.length === 0, messages: errorList }
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
propagateTagValue = (value: string, key: string): { isValid: boolean; messages: string[] } => {
|
|
48
|
-
const errorList = []
|
|
49
|
-
if (!value) {
|
|
50
|
-
errorList.push('Value is required')
|
|
51
|
-
} else {
|
|
52
|
-
if(!key.startsWith("devtron.ai/")){
|
|
53
|
-
errorList.push(...validateTagValue(value))
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return { isValid: errorList.length === 0, messages: errorList }
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react'
|
|
2
|
-
import { useDebouncedEffect } from './Utils'
|
|
3
|
-
import { ReactComponent as ICClear } from '../../Assets/Icon/ic-error-cross.svg'
|
|
4
|
-
import { DebouncedSearchProps } from './Types'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @deprecated Use `SearchBar` component instead.
|
|
8
|
-
*
|
|
9
|
-
* @param onSearch - Callback function to be called on search
|
|
10
|
-
* @param Icon - (Optional) Icon to be shown before the input
|
|
11
|
-
* @param iconClass - (Optional) Class for the icon
|
|
12
|
-
* @param children - (Optional) In case we want to add another button or any other element
|
|
13
|
-
* @param placeholder - (Optional) Placeholder for the input
|
|
14
|
-
* @param containerClass - (Optional) Class for the container
|
|
15
|
-
* @param inputClass - (Optional) Class for the input field
|
|
16
|
-
* @param debounceTimeout - (Optional) Timeout for the debounce with default value of 500ms
|
|
17
|
-
* @param clearSearch - (Optional) To clear the search text
|
|
18
|
-
* @param showClearIcon - (Optional) To show the clear icon default value is true
|
|
19
|
-
*/
|
|
20
|
-
export default function DebouncedSearch({
|
|
21
|
-
onSearch,
|
|
22
|
-
Icon,
|
|
23
|
-
children,
|
|
24
|
-
placeholder,
|
|
25
|
-
containerClass = '',
|
|
26
|
-
iconClass = '',
|
|
27
|
-
inputClass = '',
|
|
28
|
-
debounceTimeout = 500,
|
|
29
|
-
clearSearch,
|
|
30
|
-
showClearIcon = true,
|
|
31
|
-
autoFocus = true,
|
|
32
|
-
}: DebouncedSearchProps) {
|
|
33
|
-
const [searchText, setSearchText] = useState<string>('')
|
|
34
|
-
|
|
35
|
-
useEffect(() => {
|
|
36
|
-
setSearchText('')
|
|
37
|
-
}, [clearSearch])
|
|
38
|
-
|
|
39
|
-
const handleSearchTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
40
|
-
setSearchText(e.target.value)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const handleClearSearch = () => {
|
|
44
|
-
setSearchText('')
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
useDebouncedEffect(() => onSearch(searchText), debounceTimeout, [searchText])
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<div className={containerClass}>
|
|
51
|
-
{Icon && <Icon className={iconClass} />}
|
|
52
|
-
|
|
53
|
-
<input
|
|
54
|
-
type="text"
|
|
55
|
-
className={inputClass}
|
|
56
|
-
placeholder={placeholder ?? 'Search'}
|
|
57
|
-
value={searchText}
|
|
58
|
-
onChange={handleSearchTextChange}
|
|
59
|
-
autoFocus={autoFocus}
|
|
60
|
-
data-testid="debounced-search"
|
|
61
|
-
/>
|
|
62
|
-
|
|
63
|
-
{showClearIcon && !!searchText && (
|
|
64
|
-
<button
|
|
65
|
-
type="button"
|
|
66
|
-
className="dc__outline-none-imp dc__no-border p-0 bc-n50 flex"
|
|
67
|
-
onClick={handleClearSearch}
|
|
68
|
-
data-testid="clear-search"
|
|
69
|
-
>
|
|
70
|
-
<ICClear className="icon-dim-20 icon-n6" />
|
|
71
|
-
</button>
|
|
72
|
-
)}
|
|
73
|
-
|
|
74
|
-
{/* In case we want to add another button or something */}
|
|
75
|
-
{children}
|
|
76
|
-
</div>
|
|
77
|
-
)
|
|
78
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface DebouncedSearchProps {
|
|
2
|
-
onSearch: (query: string) => void
|
|
3
|
-
Icon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>
|
|
4
|
-
placeholder?: string
|
|
5
|
-
inputClass?: string
|
|
6
|
-
containerClass?: string
|
|
7
|
-
iconClass?: string
|
|
8
|
-
children?: React.ReactNode
|
|
9
|
-
debounceTimeout?: number
|
|
10
|
-
clearSearch?: boolean
|
|
11
|
-
showClearIcon?: boolean
|
|
12
|
-
autoFocus?: boolean
|
|
13
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef } from 'react'
|
|
2
|
-
|
|
3
|
-
export function useDebouncedEffect(callback, delay, deps: unknown[] = []) {
|
|
4
|
-
// function will be executed only after the specified time once the user stops firing the event.
|
|
5
|
-
const firstUpdate = useRef(true)
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
if (firstUpdate.current) {
|
|
8
|
-
firstUpdate.current = false
|
|
9
|
-
return
|
|
10
|
-
}
|
|
11
|
-
const handler = setTimeout(() => {
|
|
12
|
-
callback()
|
|
13
|
-
}, delay)
|
|
14
|
-
|
|
15
|
-
return () => {
|
|
16
|
-
clearTimeout(handler)
|
|
17
|
-
}
|
|
18
|
-
}, [delay, ...deps])
|
|
19
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render, screen, fireEvent } from '@testing-library/react'
|
|
3
|
-
import { ReactComponent as ICClear } from '../../../../assets/icons/ic-error.svg'
|
|
4
|
-
import DebouncedSearch from '../DebouncedSearch'
|
|
5
|
-
|
|
6
|
-
jest.mock('../../helpers/Helpers', () => ({
|
|
7
|
-
useDebouncedEffect: jest.fn().mockImplementation((fn) => fn()),
|
|
8
|
-
}))
|
|
9
|
-
|
|
10
|
-
describe('When DebouncedSearch mounts', () => {
|
|
11
|
-
it('should have a input field', () => {
|
|
12
|
-
render(<DebouncedSearch onSearch={jest.fn()} />)
|
|
13
|
-
expect(screen.getByRole('textbox')).toBeTruthy()
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('should have a clear icon when clearSearch is true and user has typed something', () => {
|
|
17
|
-
const { getByTestId } = render(<DebouncedSearch onSearch={jest.fn()} clearSearch debounceTimeout={0} />)
|
|
18
|
-
fireEvent.change(screen.getByRole('textbox'), { target: { value: 'test' } })
|
|
19
|
-
expect(getByTestId('clear-search')).toBeTruthy()
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
it('should call onSearch when input value changes', () => {
|
|
23
|
-
const onSearch = jest.fn()
|
|
24
|
-
render(<DebouncedSearch onSearch={onSearch} debounceTimeout={0} />)
|
|
25
|
-
fireEvent.change(screen.getByRole('textbox'), { target: { value: 'test' } })
|
|
26
|
-
expect(onSearch).toHaveBeenCalled()
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('should clear input value when clear icon is clicked', () => {
|
|
30
|
-
const { container } = render(<DebouncedSearch onSearch={jest.fn()} clearSearch debounceTimeout={0} />)
|
|
31
|
-
fireEvent.change(screen.getByRole('textbox'), { target: { value: 'test' } })
|
|
32
|
-
const inputBar = container.querySelector('input')
|
|
33
|
-
expect(inputBar.value).toBe('test')
|
|
34
|
-
fireEvent.click(screen.getByRole('button'))
|
|
35
|
-
expect(inputBar.value).toBe('')
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('should have a placeholder', () => {
|
|
39
|
-
render(<DebouncedSearch onSearch={jest.fn()} placeholder="test" />)
|
|
40
|
-
expect(screen.getByPlaceholderText('test')).toBeTruthy()
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('should not show clear icon when showClearIcon is false', () => {
|
|
44
|
-
render(<DebouncedSearch onSearch={jest.fn()} showClearIcon={false} />)
|
|
45
|
-
expect(screen.queryByRole('button')).toBeNull()
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it('should have a custom Icon', () => {
|
|
49
|
-
const { container } = render(<DebouncedSearch onSearch={jest.fn()} Icon={ICClear} iconClass="icon-class" />)
|
|
50
|
-
expect(container.querySelector('.icon-class')).toBeTruthy()
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('should support children', () => {
|
|
54
|
-
render(
|
|
55
|
-
<DebouncedSearch onSearch={jest.fn()}>
|
|
56
|
-
<div>test</div>
|
|
57
|
-
</DebouncedSearch>,
|
|
58
|
-
)
|
|
59
|
-
expect(screen.getByText('test')).toBeTruthy()
|
|
60
|
-
})
|
|
61
|
-
})
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react'
|
|
2
|
-
import { useHistory } from 'react-router-dom'
|
|
3
|
-
import { toast } from 'react-toastify'
|
|
4
|
-
import info from '../../Assets/Icon/ic-info-filled.svg'
|
|
5
|
-
import { ConfirmationDialog, DeleteDialog } from '../Dialogs'
|
|
6
|
-
import { ServerErrors } from '../ServerError'
|
|
7
|
-
import { DeleteComponentProps } from './types'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function DeleteComponent({
|
|
11
|
-
setDeleting,
|
|
12
|
-
toggleConfirmation,
|
|
13
|
-
deleteComponent,
|
|
14
|
-
title,
|
|
15
|
-
component,
|
|
16
|
-
payload,
|
|
17
|
-
confirmationDialogDescription = '',
|
|
18
|
-
redirectTo = false,
|
|
19
|
-
url = '',
|
|
20
|
-
reload,
|
|
21
|
-
configuration = '',
|
|
22
|
-
closeCustomComponent,
|
|
23
|
-
}: DeleteComponentProps) {
|
|
24
|
-
const [showCannotDeleteDialogModal, setCannotDeleteDialogModal] = useState(false)
|
|
25
|
-
const { push } = useHistory()
|
|
26
|
-
|
|
27
|
-
async function handleDelete() {
|
|
28
|
-
setDeleting(true)
|
|
29
|
-
try {
|
|
30
|
-
await deleteComponent(payload)
|
|
31
|
-
toast.success('Successfully deleted')
|
|
32
|
-
toggleConfirmation(false)
|
|
33
|
-
if (redirectTo) {
|
|
34
|
-
push(url)
|
|
35
|
-
} else {
|
|
36
|
-
reload()
|
|
37
|
-
}
|
|
38
|
-
if (typeof closeCustomComponent === 'function') {
|
|
39
|
-
closeCustomComponent()
|
|
40
|
-
}
|
|
41
|
-
} catch (serverError) {
|
|
42
|
-
if (serverError instanceof ServerErrors && serverError.code === 500) {
|
|
43
|
-
setCannotDeleteDialogModal(true)
|
|
44
|
-
}
|
|
45
|
-
} finally {
|
|
46
|
-
setDeleting(false)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const handleConfirmation = () => {
|
|
51
|
-
setCannotDeleteDialogModal(false)
|
|
52
|
-
toggleConfirmation(false)
|
|
53
|
-
if (typeof closeCustomComponent === 'function') {
|
|
54
|
-
closeCustomComponent()
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const renderCannotDeleteDialogModal = () => {
|
|
59
|
-
return (
|
|
60
|
-
<ConfirmationDialog className="confirmation-dialog__body--w-360">
|
|
61
|
-
<ConfirmationDialog.Icon src={info} />
|
|
62
|
-
<ConfirmationDialog.Body title={`Cannot delete ${component} '${title}'`} />
|
|
63
|
-
<p className="fs-13 cn-7 ">{confirmationDialogDescription}</p>
|
|
64
|
-
<ConfirmationDialog.ButtonGroup>
|
|
65
|
-
<button type="button" className="cta" onClick={handleConfirmation}>
|
|
66
|
-
Okay
|
|
67
|
-
</button>
|
|
68
|
-
</ConfirmationDialog.ButtonGroup>
|
|
69
|
-
</ConfirmationDialog>
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const renderDeleteDialog = () => {
|
|
74
|
-
return (
|
|
75
|
-
<DeleteDialog
|
|
76
|
-
title={`Delete ${component} '${title}'`}
|
|
77
|
-
delete={handleDelete}
|
|
78
|
-
closeDelete={() => toggleConfirmation(false)}
|
|
79
|
-
dataTestId="delete-dialog"
|
|
80
|
-
>
|
|
81
|
-
<DeleteDialog.Description>
|
|
82
|
-
<p>Are you sure you want to delete this {configuration ? configuration : component}? </p>
|
|
83
|
-
</DeleteDialog.Description>
|
|
84
|
-
</DeleteDialog>
|
|
85
|
-
)
|
|
86
|
-
}
|
|
87
|
-
return (
|
|
88
|
-
<div>
|
|
89
|
-
{!showCannotDeleteDialogModal && renderDeleteDialog()}
|
|
90
|
-
{showCannotDeleteDialogModal && renderCannotDeleteDialogModal()}
|
|
91
|
-
</div>
|
|
92
|
-
)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export default DeleteComponent
|