@devtron-labs/devtron-fe-common-lib 0.0.60-beta-1 → 0.0.60-beta-3
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 +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 +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 +75 -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 +67 -68
- 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 +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/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 +692 -691
- package/dist/Common/index.d.ts +50 -50
- package/dist/index.d.ts +1 -7
- package/dist/index.js +28900 -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-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-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 +230 -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 +254 -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 +590 -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 +3 -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 +119 -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/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 +765 -0
- package/src/Common/index.ts +50 -0
- package/src/custom.d.ts +13 -0
- package/src/index.ts +1 -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-6b75f943.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-af9f92ac.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-cc9800dd.js +0 -391
- package/dist/hcl-e883a0d4.js +0 -177
- package/dist/html-edc1e4c2.js +0 -281
- package/dist/htmlMode-17cc8a79.js +0 -1456
- package/dist/index-32e797ab.js +0 -126102
- package/dist/ini-425ab711.js +0 -68
- package/dist/java-2bc0fd68.js +0 -221
- package/dist/javascript-5e615a9b.js +0 -75
- package/dist/jsonMode-742c1a1b.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-843d0e9e.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-67e4059c.js +0 -259
- package/dist/qsharp-d730d7fe.js +0 -282
- package/dist/r-be193556.js +0 -245
- package/dist/razor-8e9d6aa5.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-d5db18bc.js +0 -811
- package/dist/twig-0d98f5ec.js +0 -323
- package/dist/typescript-302557e6.js +0 -328
- package/dist/vb-3a2b0a51.js +0 -364
- package/dist/wgsl-b2ddb3e4.js +0 -420
- package/dist/xml-47f08bc4.js +0 -95
- package/dist/yaml-49f075d9.js +0 -184
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|
+
})
|
|
@@ -0,0 +1,95 @@
|
|
|
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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DeleteComponentProps {
|
|
2
|
+
setDeleting: (boolean) => void
|
|
3
|
+
toggleConfirmation: any
|
|
4
|
+
deleteComponent: (any) => Promise<any>
|
|
5
|
+
title: string
|
|
6
|
+
component: string
|
|
7
|
+
payload: any
|
|
8
|
+
confirmationDialogDescription?: string
|
|
9
|
+
redirectTo?: boolean
|
|
10
|
+
url?: string
|
|
11
|
+
reload?: () => void
|
|
12
|
+
configuration?: string
|
|
13
|
+
dataTestid?: string
|
|
14
|
+
closeCustomComponent?: () => void
|
|
15
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ReactComponent as ICRotateDevtron } from '../../Assets/Icon/ic-rotate-devtron.svg'
|
|
3
|
+
import { DevtronProgressingProps } from './types'
|
|
4
|
+
|
|
5
|
+
export function DevtronProgressing({ classes, parentClasses }: DevtronProgressingProps): JSX.Element {
|
|
6
|
+
return (
|
|
7
|
+
<div className={parentClasses ? parentClasses : ''}>
|
|
8
|
+
<ICRotateDevtron className={classes ? classes : ''} />
|
|
9
|
+
</div>
|
|
10
|
+
)
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DevtronProgressing'
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { VisibleModal2 } from '../Modals/VisibleModal2'
|
|
3
|
+
import { ConfirmationDialogBodyType, ConfirmationDialogButtonGroupType, ConfirmationDialogIconType, ConfirmationDialogType } from './Types'
|
|
4
|
+
|
|
5
|
+
function ConfirmationDialog({ className = '', children }: ConfirmationDialogType) {
|
|
6
|
+
return (
|
|
7
|
+
<VisibleModal2 className="confirmation-dialog">
|
|
8
|
+
<div className={`confirmation-dialog__body ${className}`}>{children}</div>
|
|
9
|
+
</VisibleModal2>
|
|
10
|
+
)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function Icon({ src, className = '' }: ConfirmationDialogIconType) {
|
|
14
|
+
return <img src={src} className={`confirmation-dialog__icon ${className}`} alt="" />
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function Body({ title, subtitle = null, children = null }: ConfirmationDialogBodyType) {
|
|
18
|
+
return (
|
|
19
|
+
<div className="flex left column ">
|
|
20
|
+
<h3 className="confirmation-dialog__title lh-1-5 dc__break-word w-100">{title}</h3>
|
|
21
|
+
{subtitle && <div className="confirmation-dialog__subtitle">{subtitle}</div>}
|
|
22
|
+
{children}
|
|
23
|
+
</div>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function ButtonGroup({ children }: ConfirmationDialogButtonGroupType) {
|
|
28
|
+
return <div className="flex right confirmation-dialog__button-group">{children}</div>
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
ConfirmationDialog.Icon = Icon
|
|
32
|
+
ConfirmationDialog.Body = Body
|
|
33
|
+
ConfirmationDialog.ButtonGroup = ButtonGroup
|
|
34
|
+
export default ConfirmationDialog
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import warn from '../../Assets/Img/delete-medium.svg'
|
|
3
|
+
import { Progressing } from '../Progressing'
|
|
4
|
+
import ConfirmationDialog from './ConfirmationDialog'
|
|
5
|
+
import { DeleteDialogProps } from './Types'
|
|
6
|
+
|
|
7
|
+
export const DeleteDialog: React.FC<DeleteDialogProps> & { Description?: React.FC<any> } = function (props) {
|
|
8
|
+
const handleDelete = (e: React.MouseEvent) => {
|
|
9
|
+
if (props.shouldStopPropagation) {
|
|
10
|
+
e.stopPropagation()
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
props.delete()
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const handleModalClose = (e: React.MouseEvent) => {
|
|
17
|
+
if (props.shouldStopPropagation) {
|
|
18
|
+
e.stopPropagation()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
props.closeDelete()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<ConfirmationDialog className="confirmation-dialog__body--w-400">
|
|
26
|
+
<ConfirmationDialog.Icon src={warn} />
|
|
27
|
+
<ConfirmationDialog.Body title={props.title}>
|
|
28
|
+
<div className="fs-13 cn-7 lh-1-54 w-100">
|
|
29
|
+
{props.description ? props.description : null}
|
|
30
|
+
{props.children}
|
|
31
|
+
</div>
|
|
32
|
+
</ConfirmationDialog.Body>
|
|
33
|
+
<ConfirmationDialog.ButtonGroup>
|
|
34
|
+
<div className="flex right">
|
|
35
|
+
<button
|
|
36
|
+
type="button"
|
|
37
|
+
className="cta cancel cta-cd-delete-modal ml-16"
|
|
38
|
+
onClick={handleModalClose}
|
|
39
|
+
disabled={props.apiCallInProgress}
|
|
40
|
+
data-testid="dialog-cancel"
|
|
41
|
+
>
|
|
42
|
+
Cancel
|
|
43
|
+
</button>
|
|
44
|
+
<button
|
|
45
|
+
type="button"
|
|
46
|
+
className="cta delete cta-cd-delete-modal ml-16"
|
|
47
|
+
onClick={handleDelete}
|
|
48
|
+
disabled={props.apiCallInProgress || props.disabled}
|
|
49
|
+
data-testid="dialog-delete"
|
|
50
|
+
>
|
|
51
|
+
{props.apiCallInProgress ? (
|
|
52
|
+
<Progressing />
|
|
53
|
+
) : (
|
|
54
|
+
`${props.deletePrefix || ''}${
|
|
55
|
+
props.buttonPrimaryText ? props.buttonPrimaryText : 'Delete'
|
|
56
|
+
}${props.deletePostfix || ''}`
|
|
57
|
+
)}
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
</ConfirmationDialog.ButtonGroup>
|
|
61
|
+
</ConfirmationDialog>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function DeleteDialogDescription(props) {
|
|
66
|
+
return <>{props.children}</>
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
DeleteDialog.Description = DeleteDialogDescription
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { Component, createContext } from 'react';
|
|
2
|
+
import { VisibleModal } from '../Modals/VisibleModal';
|
|
3
|
+
import close from '../../Assets/Icon/ic-cross.svg';
|
|
4
|
+
import { Progressing } from '../Progressing'
|
|
5
|
+
import { DialogFormProps } from './Types';
|
|
6
|
+
//TODO: may not need context
|
|
7
|
+
const DialogFormContext = createContext({ title: '', isLoading: false, close: (event) => {}, onSave: (event) => {} });
|
|
8
|
+
|
|
9
|
+
export class DialogForm extends Component<DialogFormProps> {
|
|
10
|
+
constructor(props) {
|
|
11
|
+
super(props);
|
|
12
|
+
this.escFunction = this.escFunction.bind(this);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
componentDidMount() {
|
|
16
|
+
document.addEventListener('keydown', this.escFunction);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
componentWillUnmount() {
|
|
20
|
+
document.removeEventListener('keydown', this.escFunction);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
escFunction(event) {
|
|
24
|
+
if (event.keyCode === 27 && this.props.closeOnESC) {
|
|
25
|
+
this.props.close(event);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
render() {
|
|
30
|
+
return (
|
|
31
|
+
<DialogFormContext.Provider
|
|
32
|
+
value={{
|
|
33
|
+
title: this.props.title,
|
|
34
|
+
isLoading: this.props.isLoading,
|
|
35
|
+
close: this.props.close,
|
|
36
|
+
onSave: this.props.onSave,
|
|
37
|
+
}}
|
|
38
|
+
>
|
|
39
|
+
<VisibleModal className="">
|
|
40
|
+
<div className={`modal__body ${this.props.className || ''}`}>
|
|
41
|
+
<div className={`modal__header ${this.props.headerClassName || ''}`}>
|
|
42
|
+
<h1 className="modal__title">{this.props.title}</h1>
|
|
43
|
+
<button type="button" className="dc__transparent" onClick={this.props.close}>
|
|
44
|
+
{' '}
|
|
45
|
+
<img src={close} alt="close" />
|
|
46
|
+
</button>
|
|
47
|
+
</div>
|
|
48
|
+
<DialogFormContext.Consumer>
|
|
49
|
+
{(context) => {
|
|
50
|
+
return (
|
|
51
|
+
<form
|
|
52
|
+
noValidate
|
|
53
|
+
onSubmit={(e) => {
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
if (!context.isLoading) {
|
|
56
|
+
context.onSave(e);
|
|
57
|
+
}
|
|
58
|
+
}}
|
|
59
|
+
>
|
|
60
|
+
{this.props.children}
|
|
61
|
+
</form>
|
|
62
|
+
);
|
|
63
|
+
}}
|
|
64
|
+
</DialogFormContext.Consumer>
|
|
65
|
+
</div>
|
|
66
|
+
</VisibleModal>
|
|
67
|
+
</DialogFormContext.Provider>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export class DialogFormSubmit extends Component<{ tabIndex: number }> {
|
|
73
|
+
render() {
|
|
74
|
+
return (
|
|
75
|
+
<DialogFormContext.Consumer>
|
|
76
|
+
{(context) => {
|
|
77
|
+
return (
|
|
78
|
+
<button type="submit" className="cta dc__align-right" tabIndex={this.props.tabIndex}>
|
|
79
|
+
{context.isLoading ? <Progressing /> : this.props.children}
|
|
80
|
+
</button>
|
|
81
|
+
);
|
|
82
|
+
}}
|
|
83
|
+
</DialogFormContext.Consumer>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ForceDeleteDialogType } from './Types';
|
|
3
|
+
import { DeleteDialog } from './DeleteDialog';
|
|
4
|
+
|
|
5
|
+
export default function ForceDeleteDialog({ onClickDelete, closeDeleteModal, forceDeleteDialogTitle, forceDeleteDialogMessage }: ForceDeleteDialogType) {
|
|
6
|
+
return (
|
|
7
|
+
<div>
|
|
8
|
+
<DeleteDialog title={forceDeleteDialogTitle}
|
|
9
|
+
delete={onClickDelete}
|
|
10
|
+
closeDelete={closeDeleteModal}
|
|
11
|
+
deletePrefix="Force ">
|
|
12
|
+
<DeleteDialog.Description >
|
|
13
|
+
<p className="mt-12 mb-12 p-8 dc__break-word dc__window-bg">Error: {forceDeleteDialogMessage}</p>
|
|
14
|
+
<p>Do you want to force delete?</p>
|
|
15
|
+
</DeleteDialog.Description>
|
|
16
|
+
</DeleteDialog>
|
|
17
|
+
</div>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ReactNode } from "react"
|
|
2
|
+
|
|
3
|
+
export interface DeleteDialogProps {
|
|
4
|
+
title: string
|
|
5
|
+
description?: string
|
|
6
|
+
closeDelete: () => void
|
|
7
|
+
delete: () => any
|
|
8
|
+
deletePrefix?: string
|
|
9
|
+
deletePostfix?: string
|
|
10
|
+
apiCallInProgress?: boolean
|
|
11
|
+
dataTestId?: string
|
|
12
|
+
buttonPrimaryText?: string
|
|
13
|
+
shouldStopPropagation?: boolean
|
|
14
|
+
disabled?: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ForceDeleteDialogType {
|
|
18
|
+
onClickDelete: () => void
|
|
19
|
+
closeDeleteModal: () => void
|
|
20
|
+
forceDeleteDialogTitle: string
|
|
21
|
+
forceDeleteDialogMessage: string
|
|
22
|
+
}
|
|
23
|
+
export interface ConfirmationDialogType {
|
|
24
|
+
className?: string
|
|
25
|
+
children: any
|
|
26
|
+
}
|
|
27
|
+
export interface ConfirmationDialogIconType {
|
|
28
|
+
src: string
|
|
29
|
+
className?: string
|
|
30
|
+
}
|
|
31
|
+
export interface ConfirmationDialogBodyType {
|
|
32
|
+
title: string
|
|
33
|
+
subtitle?: ReactNode
|
|
34
|
+
children?: any
|
|
35
|
+
}
|
|
36
|
+
export interface ConfirmationDialogButtonGroupType {
|
|
37
|
+
children: any
|
|
38
|
+
}
|
|
39
|
+
export interface DialogFormProps {
|
|
40
|
+
className: string;
|
|
41
|
+
title: string;
|
|
42
|
+
isLoading: boolean;
|
|
43
|
+
closeOnESC?: boolean;
|
|
44
|
+
close: (event) => void;
|
|
45
|
+
onSave: (event) => void;
|
|
46
|
+
headerClassName?: string;
|
|
47
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ReactComponent as ICDrag } from '../../Assets/Icon/ic-drag.svg'
|
|
3
|
+
import { DraggableButtonProps } from './types'
|
|
4
|
+
|
|
5
|
+
export default function DraggableButton({ dragClassName }: DraggableButtonProps) {
|
|
6
|
+
return (
|
|
7
|
+
<button
|
|
8
|
+
type="button"
|
|
9
|
+
className={`${dragClassName} dc__outline-none-imp dc__no-border p-0 dc__transparent h-20`}
|
|
10
|
+
>
|
|
11
|
+
<ICDrag className="dc__grabbable icon-dim-20 fcn-6" />
|
|
12
|
+
</button>
|
|
13
|
+
)
|
|
14
|
+
}
|