@sparrowengg/integrations-templates-frontend 8.0.14-Beta → 8.0.16-Beta
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/README.md +78 -0
- package/dist/cjs/commons/components/NamingModal.js +6 -2
- package/dist/cjs/commons/components/NamingModal.js.map +1 -1
- package/dist/cjs/commons/components/confirmation-modal.js +5 -2
- package/dist/cjs/commons/components/confirmation-modal.js.map +1 -1
- package/dist/cjs/commons/components/edit-confirmation.js +5 -2
- package/dist/cjs/commons/components/edit-confirmation.js.map +1 -1
- package/dist/cjs/commons/components/mapping-conditions/index.js +6 -3
- package/dist/cjs/commons/components/mapping-conditions/index.js.map +1 -1
- package/dist/cjs/commons/constants/operator-options.js +1 -2
- package/dist/cjs/commons/constants/operator-options.js.map +1 -1
- package/dist/cjs/contact-import/components/ContactImportHeader.js +8 -3
- package/dist/cjs/contact-import/components/ContactImportHeader.js.map +1 -1
- package/dist/cjs/contact-import/components/ContactImportModal.js +7 -3
- package/dist/cjs/contact-import/components/ContactImportModal.js.map +1 -1
- package/dist/cjs/contact-import/components/ManageImport/dashboard.js +4 -1
- package/dist/cjs/contact-import/components/ManageImport/dashboard.js.map +1 -1
- package/dist/cjs/contact-import/components/contact-import-mapping.js +6 -2
- package/dist/cjs/contact-import/components/contact-import-mapping.js.map +1 -1
- package/dist/cjs/contact-import/index.js +3 -2
- package/dist/cjs/contact-import/index.js.map +1 -1
- package/dist/cjs/dynamic-mapping/components/mapping-header.js +10 -4
- package/dist/cjs/dynamic-mapping/components/mapping-header.js.map +1 -1
- package/dist/cjs/dynamic-mapping/index.js +3 -2
- package/dist/cjs/dynamic-mapping/index.js.map +1 -1
- package/dist/cjs/integration-template/components/dashboard/DashboardItem.js +9 -4
- package/dist/cjs/integration-template/components/dashboard/DashboardItem.js.map +1 -1
- package/dist/cjs/integration-template/components/dashboard/SingleMappingDashboardItem.js +11 -4
- package/dist/cjs/integration-template/components/dashboard/SingleMappingDashboardItem.js.map +1 -1
- package/dist/cjs/integration-template/components/dashboard/TriggerDashboardItem.js +9 -4
- package/dist/cjs/integration-template/components/dashboard/TriggerDashboardItem.js.map +1 -1
- package/dist/cjs/integration-template/components/dashboard.js +8 -3
- package/dist/cjs/integration-template/components/dashboard.js.map +1 -1
- package/dist/cjs/integration-template/index.js +3 -2
- package/dist/cjs/integration-template/index.js.map +1 -1
- package/dist/cjs/mapping/components/EventSetup.js +4 -1
- package/dist/cjs/mapping/components/EventSetup.js.map +1 -1
- package/dist/cjs/mapping/components/MappingHeader.js +10 -4
- package/dist/cjs/mapping/components/MappingHeader.js.map +1 -1
- package/dist/cjs/mapping/components/field.js +26 -10
- package/dist/cjs/mapping/components/field.js.map +1 -1
- package/dist/cjs/mapping/components/mapping.js +4 -1
- package/dist/cjs/mapping/components/mapping.js.map +1 -1
- package/dist/cjs/mapping/index.js +9 -4
- package/dist/cjs/mapping/index.js.map +1 -1
- package/dist/cjs/single-mapping/components/MappingHeader.js +9 -4
- package/dist/cjs/single-mapping/components/MappingHeader.js.map +1 -1
- package/dist/cjs/single-mapping/index.js +4 -2
- package/dist/cjs/single-mapping/index.js.map +1 -1
- package/dist/cjs/triggers/components/trigger.js +0 -2
- package/dist/cjs/triggers/components/trigger.js.map +1 -1
- package/dist/es/commons/components/NamingModal.js +6 -2
- package/dist/es/commons/components/NamingModal.js.map +1 -1
- package/dist/es/commons/components/confirmation-modal.js +5 -2
- package/dist/es/commons/components/confirmation-modal.js.map +1 -1
- package/dist/es/commons/components/edit-confirmation.js +5 -2
- package/dist/es/commons/components/edit-confirmation.js.map +1 -1
- package/dist/es/commons/components/mapping-conditions/index.js +6 -3
- package/dist/es/commons/components/mapping-conditions/index.js.map +1 -1
- package/dist/es/commons/constants/operator-options.js +1 -2
- package/dist/es/commons/constants/operator-options.js.map +1 -1
- package/dist/es/commons/context/test-id.context.js +1 -1
- package/dist/es/contact-import/components/ContactImportHeader.js +8 -3
- package/dist/es/contact-import/components/ContactImportHeader.js.map +1 -1
- package/dist/es/contact-import/components/ContactImportModal.js +7 -3
- package/dist/es/contact-import/components/ContactImportModal.js.map +1 -1
- package/dist/es/contact-import/components/ManageImport/dashboard.js +4 -1
- package/dist/es/contact-import/components/ManageImport/dashboard.js.map +1 -1
- package/dist/es/contact-import/components/contact-import-mapping.js +6 -2
- package/dist/es/contact-import/components/contact-import-mapping.js.map +1 -1
- package/dist/es/contact-import/index.js +3 -2
- package/dist/es/contact-import/index.js.map +1 -1
- package/dist/es/dynamic-mapping/components/mapping-header.js +10 -4
- package/dist/es/dynamic-mapping/components/mapping-header.js.map +1 -1
- package/dist/es/dynamic-mapping/index.js +3 -2
- package/dist/es/dynamic-mapping/index.js.map +1 -1
- package/dist/es/integration-template/components/dashboard/DashboardItem.js +9 -4
- package/dist/es/integration-template/components/dashboard/DashboardItem.js.map +1 -1
- package/dist/es/integration-template/components/dashboard/SingleMappingDashboardItem.js +11 -4
- package/dist/es/integration-template/components/dashboard/SingleMappingDashboardItem.js.map +1 -1
- package/dist/es/integration-template/components/dashboard/TriggerDashboardItem.js +9 -4
- package/dist/es/integration-template/components/dashboard/TriggerDashboardItem.js.map +1 -1
- package/dist/es/integration-template/components/dashboard.js +8 -3
- package/dist/es/integration-template/components/dashboard.js.map +1 -1
- package/dist/es/integration-template/index.js +3 -2
- package/dist/es/integration-template/index.js.map +1 -1
- package/dist/es/mapping/components/EventSetup.js +4 -1
- package/dist/es/mapping/components/EventSetup.js.map +1 -1
- package/dist/es/mapping/components/MappingHeader.js +10 -4
- package/dist/es/mapping/components/MappingHeader.js.map +1 -1
- package/dist/es/mapping/components/field.js +26 -10
- package/dist/es/mapping/components/field.js.map +1 -1
- package/dist/es/mapping/components/mapping.js +4 -1
- package/dist/es/mapping/components/mapping.js.map +1 -1
- package/dist/es/mapping/index.js +9 -4
- package/dist/es/mapping/index.js.map +1 -1
- package/dist/es/single-mapping/components/MappingHeader.js +9 -4
- package/dist/es/single-mapping/components/MappingHeader.js.map +1 -1
- package/dist/es/single-mapping/index.js +4 -2
- package/dist/es/single-mapping/index.js.map +1 -1
- package/dist/es/triggers/components/trigger.js +0 -2
- package/dist/es/triggers/components/trigger.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -75,6 +75,8 @@ The Mapping component provides a comprehensive interface for mapping survey fiel
|
|
|
75
75
|
| `onDeleteHandler` | `(id: string \| number) => void` | ❌ | Delete field handler |
|
|
76
76
|
| `draftHandler` | `(type: string \| null, editFieldId?: string \| number) => void` | ✅ | Draft save handler |
|
|
77
77
|
| `configuration` | `ConfigurationObject` | ✅ | Configuration setup object |
|
|
78
|
+
| `customTypeOptions` | `Record<string, any[] \| { type: SelectOption; options: any[] }>` | ❌ | Custom mapping types and their field options |
|
|
79
|
+
| `disabledMappingTypes` | `string[]` | ❌ | Array of type values to hide from dropdown |
|
|
78
80
|
|
|
79
81
|
#### FieldType
|
|
80
82
|
|
|
@@ -559,6 +561,29 @@ function IntegrationTemplateExample() {
|
|
|
559
561
|
}
|
|
560
562
|
```
|
|
561
563
|
|
|
564
|
+
## 🧪 Automation & Test IDs
|
|
565
|
+
|
|
566
|
+
Every interactive element across all modules ships with a stable `data-testid` attribute scoped to the integration name. Pass `integrationName` to any module root and all descendants receive IDs in the format `module_{integrationName}_{suffix}`:
|
|
567
|
+
|
|
568
|
+
```tsx
|
|
569
|
+
<IntegrationTemplate integrationName="salesforce" ... />
|
|
570
|
+
// → <button data-testid="module_salesforce_configure-mapping">New Mapping</button>
|
|
571
|
+
// → <button data-testid="module_salesforce_confirm-btn">Confirm</button>
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
Query them in Playwright, Cypress, or Testing Library:
|
|
575
|
+
|
|
576
|
+
```ts
|
|
577
|
+
// Playwright
|
|
578
|
+
await page.locator('[data-testid="module_salesforce_configure-mapping"]').click();
|
|
579
|
+
// nth card (0-based)
|
|
580
|
+
await page.locator('[data-testid="module_salesforce_expand-trigger"]').nth(0).click();
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
See **[TEST_ID_GUIDE.md](./TEST_ID_GUIDE.md)** for the full reference — every suffix, which component it lives in, and how to add new ones.
|
|
584
|
+
|
|
585
|
+
---
|
|
586
|
+
|
|
562
587
|
## 🎨 Styling
|
|
563
588
|
|
|
564
589
|
The library includes built-in CSS styles. Make sure to import the stylesheet:
|
|
@@ -623,6 +648,59 @@ Most components support loading states for async operations:
|
|
|
623
648
|
/>
|
|
624
649
|
```
|
|
625
650
|
|
|
651
|
+
## 🎨 Custom Type Options
|
|
652
|
+
|
|
653
|
+
The Mapping component supports dynamic custom mapping types through the `customTypeOptions` prop. This allows integration-specific field types without modifying core constants.
|
|
654
|
+
|
|
655
|
+
### Basic Usage
|
|
656
|
+
|
|
657
|
+
```tsx
|
|
658
|
+
<Mapping
|
|
659
|
+
customTypeOptions={{
|
|
660
|
+
'EMAIL_SHARE_PROPERTY': {
|
|
661
|
+
type: {
|
|
662
|
+
label: 'Email Share Property',
|
|
663
|
+
value: 'EMAIL_SHARE_PROPERTY',
|
|
664
|
+
},
|
|
665
|
+
options: [
|
|
666
|
+
{
|
|
667
|
+
value: 'success',
|
|
668
|
+
label: 'Is Email sent?',
|
|
669
|
+
fieldType: 'Property',
|
|
670
|
+
id: 'success',
|
|
671
|
+
description: 'Is Email sent?',
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
value: 'sentAt',
|
|
675
|
+
label: 'Email sent at',
|
|
676
|
+
fieldType: 'Property',
|
|
677
|
+
id: 'sentAt',
|
|
678
|
+
description: 'Email sent at',
|
|
679
|
+
},
|
|
680
|
+
]
|
|
681
|
+
},
|
|
682
|
+
}}
|
|
683
|
+
/>
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
### With Type Filtering
|
|
687
|
+
|
|
688
|
+
```tsx
|
|
689
|
+
<Mapping
|
|
690
|
+
customTypeOptions={{...}}
|
|
691
|
+
disabledMappingTypes={['QUESTION']} // Hide Question type
|
|
692
|
+
/>
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
### Custom Type Structure
|
|
696
|
+
|
|
697
|
+
Each custom type requires:
|
|
698
|
+
- `type.label`: Display name in Type dropdown
|
|
699
|
+
- `type.value`: Unique identifier
|
|
700
|
+
- `options`: Array of field options available for this type
|
|
701
|
+
|
|
702
|
+
For detailed documentation on custom types, see [CUSTOM_TYPE_OPTIONS.md](./CUSTOM_TYPE_OPTIONS.md).
|
|
703
|
+
|
|
626
704
|
## 🤝 TypeScript Support
|
|
627
705
|
|
|
628
706
|
The library is built with TypeScript and provides comprehensive type definitions for all components and props. Import types as needed:
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
+
var testId_context = require('../context/test-id.context.js');
|
|
6
7
|
var dialog = require('../../node_modules/@sparrowengg/twigs-react/dist/es/dialog/dialog.js');
|
|
7
8
|
var flex = require('../../node_modules/@sparrowengg/twigs-react/dist/es/flex/flex.js');
|
|
8
9
|
var formInput = require('../../node_modules/@sparrowengg/twigs-react/dist/es/input/form-input.js');
|
|
@@ -25,6 +26,7 @@ function NamingModal({
|
|
|
25
26
|
updateLabel = "Update Mapping",
|
|
26
27
|
saveDisabled = false
|
|
27
28
|
}) {
|
|
29
|
+
const { tid } = testId_context.useTestId();
|
|
28
30
|
return /* @__PURE__ */ React.createElement(dialog.Dialog, { open: isOpen, size: "sm" }, /* @__PURE__ */ React.createElement(dialog.DialogContent, null, /* @__PURE__ */ React.createElement(
|
|
29
31
|
dialog.DialogHeader,
|
|
30
32
|
{
|
|
@@ -68,7 +70,8 @@ function NamingModal({
|
|
|
68
70
|
css: {
|
|
69
71
|
width: "100%"
|
|
70
72
|
},
|
|
71
|
-
onClick: saveHandler
|
|
73
|
+
onClick: saveHandler,
|
|
74
|
+
"data-testid": tid("save-name")
|
|
72
75
|
},
|
|
73
76
|
editFieldId ? updateLabel : saveLabel
|
|
74
77
|
)
|
|
@@ -79,7 +82,8 @@ function NamingModal({
|
|
|
79
82
|
icon: /* @__PURE__ */ React.createElement(close.CloseIcon, null),
|
|
80
83
|
variant: "ghost",
|
|
81
84
|
"aria-label": "Close",
|
|
82
|
-
color: "default"
|
|
85
|
+
color: "default",
|
|
86
|
+
"data-testid": tid("close-modal")
|
|
83
87
|
}
|
|
84
88
|
)))));
|
|
85
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamingModal.js","sources":["../../../../src/commons/components/NamingModal.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Dialog,\n DialogHeader,\n DialogTitle,\n DialogBody,\n DialogFooter,\n DialogClose,\n DialogTrigger,\n DialogContent,\n IconButton,\n Box,\n Button,\n Flex,\n FormInput,\n} from \"@sparrowengg/twigs-react\";\nimport { CloseIcon } from \"@sparrowengg/twigs-react-icons\";\n\nexport default function NamingModal({\n editFieldId,\n mappingLoader = false,\n saveHandler,\n closeHandler,\n value,\n setValue,\n isOpen,\n title = \"Mapping Name\",\n placeholder = \"Enter a name for future reference\",\n saveLabel = \"Save Mapping\",\n updateLabel = \"Update Mapping\",\n saveDisabled = false,\n}: {\n editFieldId: string | number | undefined;\n mappingLoader?: boolean;\n saveHandler: () => void;\n closeHandler: () => void;\n value: string;\n setValue: (value: string) => void;\n isOpen: boolean;\n /** Dialog title. Defaults to \"Mapping Name\" to preserve existing behavior. */\n title?: string;\n /** Input placeholder. Defaults to the original mapping placeholder text. */\n placeholder?: string;\n /** Save button label (create mode). Defaults to \"Save Mapping\". */\n saveLabel?: string;\n /** Save button label (edit mode). Defaults to \"Update Mapping\". */\n updateLabel?: string;\n /**\n * Disables the Save/Update button. Defaults to false to preserve existing\n * behavior; opt-in callers use it to block updates when nothing changed.\n */\n saveDisabled?: boolean;\n}) {\n return (\n <Dialog open={isOpen} size=\"sm\">\n <DialogContent>\n <DialogHeader\n css={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n borderBottom: \"none !important\",\n }}\n >\n <DialogTitle size=\"lg\">{title}</DialogTitle>\n </DialogHeader>\n <DialogBody css={{\n paddingInline: '$12',\n paddingTop: '0 !important',\n paddingBottom: '$8',\n }}>\n <Flex flexDirection=\"column\" gap=\"$2\" css={{ marginBottom: \"$2\" }}>\n <FormInput\n size=\"lg\"\n id=\"name\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n maxLength={50}\n placeholder={placeholder}\n />\n </Flex>\n </DialogBody>\n <DialogFooter>\n <Flex\n css={{\n width: \"100%\",\n }}\n >\n <Button\n loading={mappingLoader}\n size=\"lg\"\n color=\"primary\"\n disabled={saveDisabled}\n css={{\n width: \"100%\",\n }}\n onClick={saveHandler}\n >\n {editFieldId ? updateLabel : saveLabel}\n </Button>\n </Flex>\n </DialogFooter>\n <Box css={{ position: \"absolute\", top: \"$8\", right: \"$8\" }}>\n <DialogClose asChild onClick={closeHandler}>\n <IconButton\n size=\"lg\"\n icon={<CloseIcon />}\n variant=\"ghost\"\n aria-label=\"Close\"\n color=\"default\"\n />\n </DialogClose>\n </Box>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Flex","FormInput","DialogFooter","Button","Box","DialogClose","IconButton","CloseIcon"],"mappings":"
|
|
1
|
+
{"version":3,"file":"NamingModal.js","sources":["../../../../src/commons/components/NamingModal.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTestId } from \"../context/test-id.context\";\nimport {\n Dialog,\n DialogHeader,\n DialogTitle,\n DialogBody,\n DialogFooter,\n DialogClose,\n DialogTrigger,\n DialogContent,\n IconButton,\n Box,\n Button,\n Flex,\n FormInput,\n} from \"@sparrowengg/twigs-react\";\nimport { CloseIcon } from \"@sparrowengg/twigs-react-icons\";\n\nexport default function NamingModal({\n editFieldId,\n mappingLoader = false,\n saveHandler,\n closeHandler,\n value,\n setValue,\n isOpen,\n title = \"Mapping Name\",\n placeholder = \"Enter a name for future reference\",\n saveLabel = \"Save Mapping\",\n updateLabel = \"Update Mapping\",\n saveDisabled = false,\n}: {\n editFieldId: string | number | undefined;\n mappingLoader?: boolean;\n saveHandler: () => void;\n closeHandler: () => void;\n value: string;\n setValue: (value: string) => void;\n isOpen: boolean;\n /** Dialog title. Defaults to \"Mapping Name\" to preserve existing behavior. */\n title?: string;\n /** Input placeholder. Defaults to the original mapping placeholder text. */\n placeholder?: string;\n /** Save button label (create mode). Defaults to \"Save Mapping\". */\n saveLabel?: string;\n /** Save button label (edit mode). Defaults to \"Update Mapping\". */\n updateLabel?: string;\n /**\n * Disables the Save/Update button. Defaults to false to preserve existing\n * behavior; opt-in callers use it to block updates when nothing changed.\n */\n saveDisabled?: boolean;\n}) {\n const { tid } = useTestId();\n return (\n <Dialog open={isOpen} size=\"sm\">\n <DialogContent>\n <DialogHeader\n css={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n borderBottom: \"none !important\",\n }}\n >\n <DialogTitle size=\"lg\">{title}</DialogTitle>\n </DialogHeader>\n <DialogBody css={{\n paddingInline: '$12',\n paddingTop: '0 !important',\n paddingBottom: '$8',\n }}>\n <Flex flexDirection=\"column\" gap=\"$2\" css={{ marginBottom: \"$2\" }}>\n <FormInput\n size=\"lg\"\n id=\"name\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n maxLength={50}\n placeholder={placeholder}\n />\n </Flex>\n </DialogBody>\n <DialogFooter>\n <Flex\n css={{\n width: \"100%\",\n }}\n >\n <Button\n loading={mappingLoader}\n size=\"lg\"\n color=\"primary\"\n disabled={saveDisabled}\n css={{\n width: \"100%\",\n }}\n onClick={saveHandler}\n data-testid={tid('save-name')}\n >\n {editFieldId ? updateLabel : saveLabel}\n </Button>\n </Flex>\n </DialogFooter>\n <Box css={{ position: \"absolute\", top: \"$8\", right: \"$8\" }}>\n <DialogClose asChild onClick={closeHandler}>\n <IconButton\n size=\"lg\"\n icon={<CloseIcon />}\n variant=\"ghost\"\n aria-label=\"Close\"\n color=\"default\"\n data-testid={tid('close-modal')}\n />\n </DialogClose>\n </Box>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["useTestId","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Flex","FormInput","DialogFooter","Button","Box","DialogClose","IconButton","CloseIcon"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
+
var testId_context = require('../context/test-id.context.js');
|
|
6
7
|
var alertDialog = require('../../node_modules/@sparrowengg/twigs-react/dist/es/alert-dialog/alert-dialog.js');
|
|
7
8
|
var button = require('../../node_modules/@sparrowengg/twigs-react/dist/es/button/button.js');
|
|
8
9
|
|
|
@@ -12,6 +13,7 @@ const ConfirmationModal = ({
|
|
|
12
13
|
onConfirm,
|
|
13
14
|
onCancel
|
|
14
15
|
}) => {
|
|
16
|
+
const { tid } = testId_context.useTestId();
|
|
15
17
|
const [isDeleteIconHover, setIsDeleteIconHover] = React.useState(false);
|
|
16
18
|
return /* @__PURE__ */ React.createElement(alertDialog.AlertDialog, { open: true }, /* @__PURE__ */ React.createElement(
|
|
17
19
|
alertDialog.AlertDialogContent,
|
|
@@ -52,14 +54,15 @@ const ConfirmationModal = ({
|
|
|
52
54
|
},
|
|
53
55
|
description
|
|
54
56
|
),
|
|
55
|
-
/* @__PURE__ */ React.createElement(alertDialog.AlertDialogActions, { css: { gap: "$6" } }, /* @__PURE__ */ React.createElement(alertDialog.AlertDialogCancel, { asChild: true, onClick: onCancel }, /* @__PURE__ */ React.createElement(button.Button, { color: "default", variant: "solid", size: "lg" }, "Cancel")), /* @__PURE__ */ React.createElement(alertDialog.AlertDialogAction, { asChild: true }, /* @__PURE__ */ React.createElement(
|
|
57
|
+
/* @__PURE__ */ React.createElement(alertDialog.AlertDialogActions, { css: { gap: "$6" } }, /* @__PURE__ */ React.createElement(alertDialog.AlertDialogCancel, { asChild: true, onClick: onCancel }, /* @__PURE__ */ React.createElement(button.Button, { color: "default", variant: "solid", size: "lg", "data-testid": tid("cancel-btn") }, "Cancel")), /* @__PURE__ */ React.createElement(alertDialog.AlertDialogAction, { asChild: true }, /* @__PURE__ */ React.createElement(
|
|
56
58
|
button.Button,
|
|
57
59
|
{
|
|
58
60
|
onMouseEnter: () => setIsDeleteIconHover(true),
|
|
59
61
|
onMouseLeave: () => setIsDeleteIconHover(false),
|
|
60
62
|
color: isDeleteIconHover ? "error" : "default",
|
|
61
63
|
size: "lg",
|
|
62
|
-
onClick: onConfirm
|
|
64
|
+
onClick: onConfirm,
|
|
65
|
+
"data-testid": tid("confirm-btn")
|
|
63
66
|
},
|
|
64
67
|
"Confirm"
|
|
65
68
|
)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmation-modal.js","sources":["../../../../src/commons/components/confirmation-modal.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { AlertDialog,\n AlertDialogContent,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogActions,\n AlertDialogCancel,\n AlertDialogAction,\n Button, } from \"@sparrowengg/twigs-react\";\ntype ConfirmationModalProps = {\n name: string;\n description: string;\n onConfirm: () => void | Promise<void>;\n onCancel: () => void;\n};\nconst ConfirmationModal: React.FC<ConfirmationModalProps> = ({\n name,\n description,\n onConfirm,\n onCancel\n}) => {\n const [isDeleteIconHover, setIsDeleteIconHover] = useState(false);\n return <AlertDialog open={true}>\n <AlertDialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"dm-sans\"\n css={{\n button: {\n borderRadius: '8px',\n },\n }}\n >\n <AlertDialogTitle\n css={{\n display: 'flex',\n justifyContent: 'space-between',\n border: 'none !important',\n padding: '24px $12 8px $12 !important',\n }}\n >\n {name}\n </AlertDialogTitle>\n\n <AlertDialogDescription\n css={{\n overflowWrap: 'break-word',\n padding: '0px $12 0px $12 !important',\n fontSize: '$sm',\n fontWeight: '400',\n lineHeight: '20px',\n letterSpacing: '0px',\n color: '$neutral800',\n margin: '0 !important',\n }}\n >\n {description}\n </AlertDialogDescription>\n\n <AlertDialogActions css={{ gap: '$6' }}>\n <AlertDialogCancel asChild onClick={onCancel}>\n <Button color=\"default\" variant=\"solid\" size=\"lg\">\n Cancel\n </Button>\n </AlertDialogCancel>\n\n <AlertDialogAction asChild>\n <Button\n onMouseEnter={() => setIsDeleteIconHover(true)}\n onMouseLeave={() => setIsDeleteIconHover(false)}\n color={isDeleteIconHover ? 'error' : 'default'}\n size=\"lg\"\n onClick={onConfirm}\n >\n Confirm\n </Button>\n </AlertDialogAction>\n </AlertDialogActions>\n </AlertDialogContent>\n </AlertDialog>\n};\nexport default ConfirmationModal;\n"],"names":["useState","AlertDialog","AlertDialogContent","AlertDialogTitle","AlertDialogDescription","AlertDialogActions","AlertDialogCancel","Button","AlertDialogAction"],"mappings":"
|
|
1
|
+
{"version":3,"file":"confirmation-modal.js","sources":["../../../../src/commons/components/confirmation-modal.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useTestId } from \"../context/test-id.context\";\nimport { AlertDialog,\n AlertDialogContent,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogActions,\n AlertDialogCancel,\n AlertDialogAction,\n Button, } from \"@sparrowengg/twigs-react\";\ntype ConfirmationModalProps = {\n name: string;\n description: string;\n onConfirm: () => void | Promise<void>;\n onCancel: () => void;\n};\nconst ConfirmationModal: React.FC<ConfirmationModalProps> = ({\n name,\n description,\n onConfirm,\n onCancel\n}) => {\n const { tid } = useTestId();\n const [isDeleteIconHover, setIsDeleteIconHover] = useState(false);\n return <AlertDialog open={true}>\n <AlertDialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"dm-sans\"\n css={{\n button: {\n borderRadius: '8px',\n },\n }}\n >\n <AlertDialogTitle\n css={{\n display: 'flex',\n justifyContent: 'space-between',\n border: 'none !important',\n padding: '24px $12 8px $12 !important',\n }}\n >\n {name}\n </AlertDialogTitle>\n\n <AlertDialogDescription\n css={{\n overflowWrap: 'break-word',\n padding: '0px $12 0px $12 !important',\n fontSize: '$sm',\n fontWeight: '400',\n lineHeight: '20px',\n letterSpacing: '0px',\n color: '$neutral800',\n margin: '0 !important',\n }}\n >\n {description}\n </AlertDialogDescription>\n\n <AlertDialogActions css={{ gap: '$6' }}>\n <AlertDialogCancel asChild onClick={onCancel}>\n <Button color=\"default\" variant=\"solid\" size=\"lg\" data-testid={tid('cancel-btn')}>\n Cancel\n </Button>\n </AlertDialogCancel>\n\n <AlertDialogAction asChild>\n <Button\n onMouseEnter={() => setIsDeleteIconHover(true)}\n onMouseLeave={() => setIsDeleteIconHover(false)}\n color={isDeleteIconHover ? 'error' : 'default'}\n size=\"lg\"\n onClick={onConfirm}\n data-testid={tid('confirm-btn')}\n >\n Confirm\n </Button>\n </AlertDialogAction>\n </AlertDialogActions>\n </AlertDialogContent>\n </AlertDialog>\n};\nexport default ConfirmationModal;\n"],"names":["useTestId","useState","AlertDialog","AlertDialogContent","AlertDialogTitle","AlertDialogDescription","AlertDialogActions","AlertDialogCancel","Button","AlertDialogAction"],"mappings":";;;;;;;;;AAgBA,MAAM,oBAAsD,CAAC;AAAA,EACzD,IAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAM;AACF,EAAA,MAAM,EAAE,GAAA,EAAI,GAAIA,wBAAA,EAAU;AAC1B,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIC,eAAS,KAAK,CAAA;AAChE,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAACC,uBAAA,EAAA,EAAY,IAAA,EAAM,IAAA,EAAA,kBAC3B,KAAA,CAAA,aAAA;AAAA,IAACC,8BAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,MACzC,SAAA,EAAU,SAAA;AAAA,MACV,GAAA,EAAK;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,YAAA,EAAc;AAAA;AAChB;AACF,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAACC,4BAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK;AAAA,UACH,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,eAAA;AAAA,UAChB,MAAA,EAAQ,iBAAA;AAAA,UACR,OAAA,EAAS;AAAA;AACX,OAAA;AAAA,MAEC;AAAA,KACH;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK;AAAA,UACH,YAAA,EAAc,YAAA;AAAA,UACd,OAAA,EAAS,4BAAA;AAAA,UACT,QAAA,EAAU,KAAA;AAAA,UACV,UAAA,EAAY,KAAA;AAAA,UACZ,UAAA,EAAY,MAAA;AAAA,UACZ,aAAA,EAAe,KAAA;AAAA,UACf,KAAA,EAAO,aAAA;AAAA,UACP,MAAA,EAAQ;AAAA;AACV,OAAA;AAAA,MAEC;AAAA,KACH;AAAA,oBAEA,KAAA,CAAA,aAAA,CAACC,8BAAA,EAAA,EAAmB,GAAA,EAAK,EAAE,GAAA,EAAK,IAAA,EAAK,EAAA,kBACnC,KAAA,CAAA,aAAA,CAACC,6BAAA,EAAA,EAAkB,OAAA,EAAO,IAAA,EAAC,OAAA,EAAS,4BAClC,KAAA,CAAA,aAAA,CAACC,aAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,eAAa,GAAA,CAAI,YAAY,CAAA,EAAA,EAAG,QAElF,CACF,CAAA,kBAEA,KAAA,CAAA,aAAA,CAACC,6BAAA,EAAA,EAAkB,SAAO,IAAA,EAAA,kBACxB,KAAA,CAAA,aAAA;AAAA,MAACD,aAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,MAAM,oBAAA,CAAqB,IAAI,CAAA;AAAA,QAC7C,YAAA,EAAc,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,QAC9C,KAAA,EAAO,oBAAoB,OAAA,GAAU,SAAA;AAAA,QACrC,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,SAAA;AAAA,QACT,aAAA,EAAa,IAAI,aAAa;AAAA,OAAA;AAAA,MAC/B;AAAA,KAGH,CACF;AAAA,GAEJ,CAAA;AACF;;;;"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
+
var testId_context = require('../context/test-id.context.js');
|
|
6
7
|
var alertDialog = require('../../node_modules/@sparrowengg/twigs-react/dist/es/alert-dialog/alert-dialog.js');
|
|
7
8
|
var button = require('../../node_modules/@sparrowengg/twigs-react/dist/es/button/button.js');
|
|
8
9
|
|
|
@@ -12,6 +13,7 @@ const EditConfirmation = ({
|
|
|
12
13
|
onConfirm,
|
|
13
14
|
onCancel
|
|
14
15
|
}) => {
|
|
16
|
+
const { tid } = testId_context.useTestId();
|
|
15
17
|
const [isDeleteIconHover, setIsDeleteIconHover] = React.useState(false);
|
|
16
18
|
const [isLoading, setIsLoading] = React.useState(false);
|
|
17
19
|
return /* @__PURE__ */ React.createElement(alertDialog.AlertDialog, { open: true }, /* @__PURE__ */ React.createElement(
|
|
@@ -53,7 +55,7 @@ const EditConfirmation = ({
|
|
|
53
55
|
},
|
|
54
56
|
description
|
|
55
57
|
),
|
|
56
|
-
/* @__PURE__ */ React.createElement(alertDialog.AlertDialogActions, { css: { gap: "$6" } }, /* @__PURE__ */ React.createElement(alertDialog.AlertDialogCancel, { asChild: true, onClick: onCancel }, /* @__PURE__ */ React.createElement(button.Button, { color: "default", variant: "solid", size: "lg" }, "Cancel")), /* @__PURE__ */ React.createElement(alertDialog.AlertDialogAction, { asChild: true }, /* @__PURE__ */ React.createElement(
|
|
58
|
+
/* @__PURE__ */ React.createElement(alertDialog.AlertDialogActions, { css: { gap: "$6" } }, /* @__PURE__ */ React.createElement(alertDialog.AlertDialogCancel, { asChild: true, onClick: onCancel }, /* @__PURE__ */ React.createElement(button.Button, { color: "default", variant: "solid", size: "lg", "data-testid": tid("cancel-edit") }, "Cancel")), /* @__PURE__ */ React.createElement(alertDialog.AlertDialogAction, { asChild: true }, /* @__PURE__ */ React.createElement(
|
|
57
59
|
button.Button,
|
|
58
60
|
{
|
|
59
61
|
loading: isLoading,
|
|
@@ -65,7 +67,8 @@ const EditConfirmation = ({
|
|
|
65
67
|
setIsLoading(true);
|
|
66
68
|
await onConfirm();
|
|
67
69
|
setIsLoading(false);
|
|
68
|
-
}
|
|
70
|
+
},
|
|
71
|
+
"data-testid": tid("confirm-edit")
|
|
69
72
|
},
|
|
70
73
|
"Confirm"
|
|
71
74
|
)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-confirmation.js","sources":["../../../../src/commons/components/edit-confirmation.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogActions,\n AlertDialogCancel,\n AlertDialogAction,\n Button,\n} from \"@sparrowengg/twigs-react\";\ntype ConfirmationModalProps = {\n name: string;\n description: string;\n onConfirm: () => void | Promise<void>;\n onCancel: () => void;\n};\nconst EditConfirmation: React.FC<ConfirmationModalProps> = ({\n name,\n description,\n onConfirm,\n onCancel,\n}) => {\n const [isDeleteIconHover, setIsDeleteIconHover] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n return (\n <AlertDialog open={true}>\n <AlertDialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"dm-sans\"\n css={{\n button: {\n borderRadius: \"8px\",\n },\n }}\n >\n <AlertDialogTitle\n css={{\n display: \"flex\",\n justifyContent: \"space-between\",\n border: \"none !important\",\n padding: \"24px $12 8px $12 !important\",\n }}\n >\n {name}\n </AlertDialogTitle>\n\n <AlertDialogDescription\n css={{\n overflowWrap: \"break-word\",\n padding: \"0px $12 0px $12 !important\",\n fontSize: \"$sm\",\n fontWeight: \"400\",\n lineHeight: \"20px\",\n letterSpacing: \"0px\",\n color: \"$neutral800\",\n margin: \"0 !important\",\n }}\n >\n {description}\n </AlertDialogDescription>\n\n <AlertDialogActions css={{ gap: \"$6\" }}>\n <AlertDialogCancel asChild onClick={onCancel}>\n <Button color=\"default\" variant=\"solid\" size=\"lg\">\n Cancel\n </Button>\n </AlertDialogCancel>\n\n <AlertDialogAction asChild>\n <Button\n loading={isLoading}\n onMouseEnter={() => setIsDeleteIconHover(true)}\n onMouseLeave={() => setIsDeleteIconHover(false)}\n color={isDeleteIconHover ? \"secondary\" : \"default\"}\n size=\"lg\"\n onClick={async () => {\n setIsLoading(true)\n await onConfirm()\n setIsLoading(false)\n }}\n >\n Confirm\n </Button>\n </AlertDialogAction>\n </AlertDialogActions>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\nexport default EditConfirmation;\n"],"names":["useState","AlertDialog","AlertDialogContent","AlertDialogTitle","AlertDialogDescription","AlertDialogActions","AlertDialogCancel","Button","AlertDialogAction"],"mappings":"
|
|
1
|
+
{"version":3,"file":"edit-confirmation.js","sources":["../../../../src/commons/components/edit-confirmation.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useTestId } from \"../context/test-id.context\";\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogActions,\n AlertDialogCancel,\n AlertDialogAction,\n Button,\n} from \"@sparrowengg/twigs-react\";\ntype ConfirmationModalProps = {\n name: string;\n description: string;\n onConfirm: () => void | Promise<void>;\n onCancel: () => void;\n};\nconst EditConfirmation: React.FC<ConfirmationModalProps> = ({\n name,\n description,\n onConfirm,\n onCancel,\n}) => {\n const { tid } = useTestId();\n const [isDeleteIconHover, setIsDeleteIconHover] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n return (\n <AlertDialog open={true}>\n <AlertDialogContent\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"dm-sans\"\n css={{\n button: {\n borderRadius: \"8px\",\n },\n }}\n >\n <AlertDialogTitle\n css={{\n display: \"flex\",\n justifyContent: \"space-between\",\n border: \"none !important\",\n padding: \"24px $12 8px $12 !important\",\n }}\n >\n {name}\n </AlertDialogTitle>\n\n <AlertDialogDescription\n css={{\n overflowWrap: \"break-word\",\n padding: \"0px $12 0px $12 !important\",\n fontSize: \"$sm\",\n fontWeight: \"400\",\n lineHeight: \"20px\",\n letterSpacing: \"0px\",\n color: \"$neutral800\",\n margin: \"0 !important\",\n }}\n >\n {description}\n </AlertDialogDescription>\n\n <AlertDialogActions css={{ gap: \"$6\" }}>\n <AlertDialogCancel asChild onClick={onCancel}>\n <Button color=\"default\" variant=\"solid\" size=\"lg\" data-testid={tid('cancel-edit')}>\n Cancel\n </Button>\n </AlertDialogCancel>\n\n <AlertDialogAction asChild>\n <Button\n loading={isLoading}\n onMouseEnter={() => setIsDeleteIconHover(true)}\n onMouseLeave={() => setIsDeleteIconHover(false)}\n color={isDeleteIconHover ? \"secondary\" : \"default\"}\n size=\"lg\"\n onClick={async () => {\n setIsLoading(true)\n await onConfirm()\n setIsLoading(false)\n }}\n data-testid={tid('confirm-edit')}\n >\n Confirm\n </Button>\n </AlertDialogAction>\n </AlertDialogActions>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\nexport default EditConfirmation;\n"],"names":["useTestId","useState","AlertDialog","AlertDialogContent","AlertDialogTitle","AlertDialogDescription","AlertDialogActions","AlertDialogCancel","Button","AlertDialogAction"],"mappings":";;;;;;;;;AAkBA,MAAM,mBAAqD,CAAC;AAAA,EAC1D,IAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,GAAA,EAAI,GAAIA,wBAAA,EAAU;AAC1B,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIC,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,uBACE,KAAA,CAAA,aAAA,CAACC,uBAAA,EAAA,EAAY,IAAA,EAAM,IAAA,EAAA,kBACjB,KAAA,CAAA,aAAA;AAAA,IAACC,8BAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,MACzC,SAAA,EAAU,SAAA;AAAA,MACV,GAAA,EAAK;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,YAAA,EAAc;AAAA;AAChB;AACF,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAACC,4BAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK;AAAA,UACH,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,eAAA;AAAA,UAChB,MAAA,EAAQ,iBAAA;AAAA,UACR,OAAA,EAAS;AAAA;AACX,OAAA;AAAA,MAEC;AAAA,KACH;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK;AAAA,UACH,YAAA,EAAc,YAAA;AAAA,UACd,OAAA,EAAS,4BAAA;AAAA,UACT,QAAA,EAAU,KAAA;AAAA,UACV,UAAA,EAAY,KAAA;AAAA,UACZ,UAAA,EAAY,MAAA;AAAA,UACZ,aAAA,EAAe,KAAA;AAAA,UACf,KAAA,EAAO,aAAA;AAAA,UACP,MAAA,EAAQ;AAAA;AACV,OAAA;AAAA,MAEC;AAAA,KACH;AAAA,oBAEA,KAAA,CAAA,aAAA,CAACC,8BAAA,EAAA,EAAmB,GAAA,EAAK,EAAE,GAAA,EAAK,IAAA,EAAK,EAAA,kBACnC,KAAA,CAAA,aAAA,CAACC,6BAAA,EAAA,EAAkB,OAAA,EAAO,IAAA,EAAC,OAAA,EAAS,4BAClC,KAAA,CAAA,aAAA,CAACC,aAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,eAAa,GAAA,CAAI,aAAa,CAAA,EAAA,EAAG,QAEnF,CACF,CAAA,kBAEA,KAAA,CAAA,aAAA,CAACC,6BAAA,EAAA,EAAkB,SAAO,IAAA,EAAA,kBACxB,KAAA,CAAA,aAAA;AAAA,MAACD,aAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,SAAA;AAAA,QACT,YAAA,EAAc,MAAM,oBAAA,CAAqB,IAAI,CAAA;AAAA,QAC7C,YAAA,EAAc,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,QAC9C,KAAA,EAAO,oBAAoB,WAAA,GAAc,SAAA;AAAA,QACzC,IAAA,EAAK,IAAA;AAAA,QACL,SAAS,YAAY;AACnB,UAAA,YAAA,CAAa,IAAI,CAAA;AACjB,UAAA,MAAM,SAAA,EAAU;AAChB,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB,CAAA;AAAA,QACA,aAAA,EAAa,IAAI,cAAc;AAAA,OAAA;AAAA,MAChC;AAAA,KAGH,CACF;AAAA,GAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var ReactDOM = require('react-dom');
|
|
7
|
+
var testId_context = require('../../context/test-id.context.js');
|
|
7
8
|
var uiStrings = require('./constants/ui-strings.js');
|
|
8
9
|
require('./constants/options.js');
|
|
9
10
|
require('../../../cascader-dropdown/use-value.js');
|
|
@@ -26,6 +27,7 @@ const MappingCondition = ({
|
|
|
26
27
|
renderTrigger,
|
|
27
28
|
hasDerivedQuestions
|
|
28
29
|
}) => {
|
|
30
|
+
const { tid } = testId_context.useTestId();
|
|
29
31
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
30
32
|
const [hasFilterGroups, setHasFilterGroups] = React.useState(false);
|
|
31
33
|
const [areFiltersValid, setAreFiltersValid] = React.useState(false);
|
|
@@ -95,7 +97,7 @@ const MappingCondition = ({
|
|
|
95
97
|
}
|
|
96
98
|
),
|
|
97
99
|
document.body
|
|
98
|
-
), /* @__PURE__ */ React.createElement(dialog.DialogTrigger, { asChild: true, onClick: handleOpen }, renderTrigger ? renderTrigger(handleOpen) : /* @__PURE__ */ React.createElement(
|
|
100
|
+
), /* @__PURE__ */ React.createElement(dialog.DialogTrigger, { asChild: true, onClick: handleOpen, "data-testid": tid("open-conditions") }, renderTrigger ? renderTrigger(handleOpen) : /* @__PURE__ */ React.createElement(
|
|
99
101
|
text.Text,
|
|
100
102
|
{
|
|
101
103
|
className: "dm-sans",
|
|
@@ -137,13 +139,14 @@ const MappingCondition = ({
|
|
|
137
139
|
className: "dm-sans",
|
|
138
140
|
css: { fontFamily: "DM Sans !important" }
|
|
139
141
|
},
|
|
140
|
-
/* @__PURE__ */ React.createElement(flex.Flex, { justifyContent: "flex-end", css: { justifyContent: "flex-end" } }, /* @__PURE__ */ React.createElement(dialog.DialogClose, { asChild: true }, /* @__PURE__ */ React.createElement(flex.Flex, { alignItems: "center", gap: "$4" }, /* @__PURE__ */ React.createElement(button.Button, { size: "lg", color: "default" }, uiStrings.MAPPING_CONDITION_STRINGS.CANCEL), /* @__PURE__ */ React.createElement(
|
|
142
|
+
/* @__PURE__ */ React.createElement(flex.Flex, { justifyContent: "flex-end", css: { justifyContent: "flex-end" } }, /* @__PURE__ */ React.createElement(dialog.DialogClose, { asChild: true }, /* @__PURE__ */ React.createElement(flex.Flex, { alignItems: "center", gap: "$4" }, /* @__PURE__ */ React.createElement(button.Button, { size: "lg", color: "default", "data-testid": tid("cancel-conditions") }, uiStrings.MAPPING_CONDITION_STRINGS.CANCEL), /* @__PURE__ */ React.createElement(
|
|
141
143
|
button.Button,
|
|
142
144
|
{
|
|
143
145
|
size: "lg",
|
|
144
146
|
color: "primary",
|
|
145
147
|
onClick: handleSave,
|
|
146
|
-
disabled: isSaveDisabled
|
|
148
|
+
disabled: isSaveDisabled,
|
|
149
|
+
"data-testid": tid("save-conditions")
|
|
147
150
|
},
|
|
148
151
|
uiStrings.MAPPING_CONDITION_STRINGS.SAVE
|
|
149
152
|
))))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/commons/components/mapping-conditions/index.tsx"],"sourcesContent":["/* ----- Imports ----- */\n\nimport React, { useState, useRef, useCallback, useMemo } from 'react';\nimport {\n Dialog,\n DialogHeader,\n DialogTitle,\n DialogBody,\n DialogFooter,\n DialogClose,\n DialogTrigger,\n DialogContent,\n IconButton,\n Box,\n Button,\n Flex,\n Text,\n} from '@sparrowengg/twigs-react';\nimport { CloseIcon } from '@sparrowengg/twigs-react-icons';\nimport { createPortal } from 'react-dom';\nimport { ConditionWrapper } from './components';\nimport { MappingConditionProps, ConditionWrapperHandle } from './types';\nimport { MAPPING_CONDITION_STRINGS } from './constants';\nimport { filterDerivedQuestionsFromConditionData } from './helpers';\n\n/* ----- Main Component / Export ----- */\n\n/**\n * MappingCondition component for managing filter conditions in a dialog\n *\n * @param {MappingConditionProps} props - Component props\n * @returns {JSX.Element} Rendered mapping condition dialog\n */\nexport const MappingCondition: React.FC<MappingConditionProps> = ({\n existingContions,\n setExistingCondtions,\n conditionData,\n renderTrigger,\n hasDerivedQuestions,\n}) => {\n /* ----- States ----- */\n\n const [isOpen, setIsOpen] = useState(false);\n const [hasFilterGroups, setHasFilterGroups] = useState(false);\n const [areFiltersValid, setAreFiltersValid] = useState(false);\n\n /* ----- Refs ----- */\n\n const ref = useRef<ConditionWrapperHandle>(null);\n\n /* ----- Event Handlers ----- */\n\n /**\n * Handles changes in filter groups count\n * @param {number} filterGroupsLength - Number of filter groups\n */\n const onConditionsChange = useCallback((filterGroupsLength: number) => {\n setHasFilterGroups(filterGroupsLength > 0);\n }, []);\n\n /**\n * Handles validation state changes\n * @param {boolean} isValid - Whether filters are valid\n */\n const onValidationChange = useCallback((isValid: boolean) => {\n setAreFiltersValid(isValid);\n }, []);\n\n /**\n * Handles opening the dialog\n */\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n /**\n * Handles save button click\n */\n const handleSave = useCallback(() => {\n ref.current?.handleSave();\n }, []);\n\n /* ----- Memoized Values ----- */\n\n /**\n * Condition data with the Enrich (derived questions) category stripped out\n * unless the integration opts in via `hasDerivedQuestions`.\n */\n const effectiveConditionData = useMemo(\n () =>\n filterDerivedQuestionsFromConditionData(\n conditionData,\n hasDerivedQuestions\n ),\n [conditionData, hasDerivedQuestions]\n );\n\n const isSaveDisabled = useMemo(\n () => !hasFilterGroups || !areFiltersValid,\n [hasFilterGroups, areFiltersValid]\n );\n\n const dialogContentCss = useMemo(\n () => ({\n fontFamily: 'DM Sans !important',\n minHeight: '332px',\n maxHeight: '532px',\n p: {\n margin: '0 !important',\n },\n zIndex: '9999',\n }),\n []\n );\n\n const dialogBodyCss = useMemo(\n () => ({\n fontFamily: 'DM Sans !important',\n padding: '$12 !important',\n minHeight: '188px',\n maxHeight: '388px',\n overflowY: 'auto' as const,\n p: {\n margin: '0 !important',\n },\n }),\n []\n );\n\n /* ----- Render ----- */\n\n return (\n <Dialog size=\"md\" modal={false} open={isOpen} onOpenChange={setIsOpen}>\n {isOpen &&\n createPortal(\n <Box\n className=\"mapping-condition-overlay\"\n css={{\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n inset: '0',\n backgroundColorOpacity: ['$black700', 0.6],\n zIndex: '999',\n }}\n />,\n document.body\n )}\n <DialogTrigger asChild onClick={handleOpen}>\n {renderTrigger ? (\n renderTrigger(handleOpen)\n ) : (\n <Text\n className=\"dm-sans\"\n weight=\"medium\"\n css={{\n color: '$primary500',\n cursor: 'pointer',\n fontFamily: 'DM Sans !important',\n }}\n >\n {MAPPING_CONDITION_STRINGS.TRIGGER_TEXT}\n </Text>\n )}\n </DialogTrigger>\n <DialogContent className=\"dm-sans mapping-condition-content\" css={dialogContentCss}>\n <DialogHeader\n className=\"dm-sans\"\n css={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'center',\n fontFamily: 'DM Sans !important',\n }}\n >\n <DialogTitle size=\"md\">{MAPPING_CONDITION_STRINGS.DIALOG_TITLE}</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"dm-sans\" css={dialogBodyCss}>\n <ConditionWrapper\n conditionData={effectiveConditionData}\n existingContions={existingContions}\n setExistingCondtions={setExistingCondtions || (() => {})}\n onConditionsChange={onConditionsChange}\n onValidationChange={onValidationChange}\n ref={ref}\n />\n </DialogBody>\n <DialogFooter\n className=\"dm-sans\"\n css={{ fontFamily: 'DM Sans !important' }}\n >\n <Flex justifyContent=\"flex-end\" css={{ justifyContent: 'flex-end' }}>\n <DialogClose asChild>\n <Flex alignItems=\"center\" gap=\"$4\">\n <Button size=\"lg\" color=\"default\">\n {MAPPING_CONDITION_STRINGS.CANCEL}\n </Button>\n <Button\n size=\"lg\"\n color=\"primary\"\n onClick={handleSave}\n disabled={isSaveDisabled}\n >\n {MAPPING_CONDITION_STRINGS.SAVE}\n </Button>\n </Flex>\n </DialogClose>\n </Flex>\n </DialogFooter>\n <Box\n css={{\n position: 'absolute',\n top: '$8',\n right: '$8',\n fontFamily: 'DM Sans !important',\n }}\n >\n <DialogClose className=\"dm-sans\" asChild>\n <IconButton\n size=\"lg\"\n icon={<CloseIcon />}\n variant=\"ghost\"\n aria-label=\"Close\"\n color=\"default\"\n />\n </DialogClose>\n </Box>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default MappingCondition;\n"],"names":["useState","useRef","useCallback","useMemo","filterDerivedQuestionsFromConditionData","Dialog","createPortal","Box","DialogTrigger","Text","MAPPING_CONDITION_STRINGS","DialogContent","DialogHeader","DialogTitle","DialogBody","ConditionWrapper","DialogFooter","Flex","DialogClose","Button","IconButton","CloseIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiCO,MAAM,mBAAoD,CAAC;AAAA,EAChE,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAAM;AAGJ,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAI5D,EAAA,MAAM,GAAA,GAAMC,aAA+B,IAAI,CAAA;AAQ/C,EAAA,MAAM,kBAAA,GAAqBC,iBAAA,CAAY,CAAC,kBAAA,KAA+B;AACrE,IAAA,kBAAA,CAAmB,qBAAqB,CAAC,CAAA;AAAA,EAC3C,CAAA,EAAG,EAAE,CAAA;AAML,EAAA,MAAM,kBAAA,GAAqBA,iBAAA,CAAY,CAAC,OAAA,KAAqB;AAC3D,IAAA,kBAAA,CAAmB,OAAO,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAKL,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AACnC,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAKL,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AA9EvC,IAAA,IAAA,EAAA;AA+EI,IAAA,CAAA,EAAA,GAAA,GAAA,CAAI,YAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAA,EAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAQL,EAAA,MAAM,sBAAA,GAAyBC,aAAA;AAAA,IAC7B,MACEC,6CAAA;AAAA,MACE,aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,CAAC,eAAe,mBAAmB;AAAA,GACrC;AAEA,EAAA,MAAM,cAAA,GAAiBD,aAAA;AAAA,IACrB,MAAM,CAAC,eAAA,IAAmB,CAAC,eAAA;AAAA,IAC3B,CAAC,iBAAiB,eAAe;AAAA,GACnC;AAEA,EAAA,MAAM,gBAAA,GAAmBA,aAAA;AAAA,IACvB,OAAO;AAAA,MACL,UAAA,EAAY,oBAAA;AAAA,MACZ,SAAA,EAAW,OAAA;AAAA,MACX,SAAA,EAAW,OAAA;AAAA,MACX,CAAA,EAAG;AAAA,QACD,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,EAAQ;AAAA,KACV,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAA,GAAgBA,aAAA;AAAA,IACpB,OAAO;AAAA,MACL,UAAA,EAAY,oBAAA;AAAA,MACZ,OAAA,EAAS,gBAAA;AAAA,MACT,SAAA,EAAW,OAAA;AAAA,MACX,SAAA,EAAW,OAAA;AAAA,MACX,SAAA,EAAW,MAAA;AAAA,MACX,CAAA,EAAG;AAAA,QACD,MAAA,EAAQ;AAAA;AACV,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAIA,EAAA,uBACE,KAAA,CAAA,aAAA,CAACE,aAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,OAAO,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAA,EACzD,MAAA,IACCC,qBAAA;AAAA,oBACE,KAAA,CAAA,aAAA;AAAA,MAACC,OAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2BAAA;AAAA,QACV,GAAA,EAAK;AAAA,UACH,MAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAO,OAAA;AAAA,UACP,QAAA,EAAU,OAAA;AAAA,UACV,KAAA,EAAO,GAAA;AAAA,UACP,sBAAA,EAAwB,CAAC,WAAA,EAAa,GAAG,CAAA;AAAA,UACzC,MAAA,EAAQ;AAAA;AACV;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX,kBACF,KAAA,CAAA,aAAA,CAACC,oBAAA,EAAA,EAAc,OAAA,EAAO,IAAA,EAAC,SAAS,UAAA,EAAA,EAC7B,aAAA,GACC,aAAA,CAAc,UAAU,CAAA,mBAExB,KAAA,CAAA,aAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,SAAA;AAAA,MACV,MAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK;AAAA,QACH,KAAA,EAAO,aAAA;AAAA,QACP,MAAA,EAAQ,SAAA;AAAA,QACR,UAAA,EAAY;AAAA;AACd,KAAA;AAAA,IAECC,mCAAA,CAA0B;AAAA,GAGjC,CAAA,kBACA,KAAA,CAAA,aAAA,CAACC,wBAAc,SAAA,EAAU,mCAAA,EAAoC,KAAK,gBAAA,EAAA,kBAChE,KAAA,CAAA,aAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,SAAA;AAAA,MACV,GAAA,EAAK;AAAA,QACH,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,YAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA;AACd,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAACC,kBAAA,EAAA,EAAY,IAAA,EAAK,IAAA,EAAA,EAAMH,oCAA0B,YAAa;AAAA,qBAEjE,KAAA,CAAA,aAAA,CAACI,iBAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,KAAK,aAAA,EAAA,kBACnC,KAAA,CAAA,aAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,sBAAA;AAAA,MACf,gBAAA;AAAA,MACA,oBAAA,EAAsB,yBAAyB,MAAM;AAAA,MAAC,CAAA,CAAA;AAAA,MACtD,kBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA;AAAA,GAEJ,CAAA,kBACA,KAAA,CAAA,aAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,SAAA;AAAA,MACV,GAAA,EAAK,EAAE,UAAA,EAAY,oBAAA;AAAqB,KAAA;AAAA,oBAExC,KAAA,CAAA,aAAA,CAACC,SAAA,EAAA,EAAK,cAAA,EAAe,UAAA,EAAW,GAAA,EAAK,EAAE,cAAA,EAAgB,UAAA,EAAW,EAAA,kBAChE,KAAA,CAAA,aAAA,CAACC,kBAAA,EAAA,EAAY,OAAA,EAAO,IAAA,EAAA,kBAClB,KAAA,CAAA,aAAA,CAACD,SAAA,EAAA,EAAK,UAAA,EAAW,QAAA,EAAS,GAAA,EAAI,IAAA,EAAA,kBAC5B,KAAA,CAAA,aAAA,CAACE,aAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,KAAA,EAAM,SAAA,EAAA,EACrBT,mCAAA,CAA0B,MAC7B,CAAA,kBACA,KAAA,CAAA,aAAA;AAAA,MAACS,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU;AAAA,OAAA;AAAA,MAETT,mCAAA,CAA0B;AAAA,KAE/B,CACF,CACF;AAAA,GACF,kBACA,KAAA,CAAA,aAAA;AAAA,IAACH,OAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,UAAA;AAAA,QACV,GAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAY;AAAA;AACd,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAACW,kBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU,SAAO,IAAA,EAAA,kBACtC,KAAA,CAAA,aAAA;AAAA,MAACE,qBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,IAAA,sCAAOC,eAAA,EAAA,IAAU,CAAA;AAAA,QACjB,OAAA,EAAQ,OAAA;AAAA,QACR,YAAA,EAAW,OAAA;AAAA,QACX,KAAA,EAAM;AAAA;AAAA,KAEV;AAAA,GAEJ,CACF,CAAA;AAEJ;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/commons/components/mapping-conditions/index.tsx"],"sourcesContent":["/* ----- Imports ----- */\n\nimport React, { useState, useRef, useCallback, useMemo } from 'react';\nimport {\n Dialog,\n DialogHeader,\n DialogTitle,\n DialogBody,\n DialogFooter,\n DialogClose,\n DialogTrigger,\n DialogContent,\n IconButton,\n Box,\n Button,\n Flex,\n Text,\n} from '@sparrowengg/twigs-react';\nimport { CloseIcon } from '@sparrowengg/twigs-react-icons';\nimport { createPortal } from 'react-dom';\nimport { useTestId } from '../../context/test-id.context';\nimport { ConditionWrapper } from './components';\nimport { MappingConditionProps, ConditionWrapperHandle } from './types';\nimport { MAPPING_CONDITION_STRINGS } from './constants';\nimport { filterDerivedQuestionsFromConditionData } from './helpers';\n\n/* ----- Main Component / Export ----- */\n\n/**\n * MappingCondition component for managing filter conditions in a dialog\n *\n * @param {MappingConditionProps} props - Component props\n * @returns {JSX.Element} Rendered mapping condition dialog\n */\nexport const MappingCondition: React.FC<MappingConditionProps> = ({\n existingContions,\n setExistingCondtions,\n conditionData,\n renderTrigger,\n hasDerivedQuestions,\n}) => {\n /* ----- States ----- */\n\n const { tid } = useTestId();\n const [isOpen, setIsOpen] = useState(false);\n const [hasFilterGroups, setHasFilterGroups] = useState(false);\n const [areFiltersValid, setAreFiltersValid] = useState(false);\n\n /* ----- Refs ----- */\n\n const ref = useRef<ConditionWrapperHandle>(null);\n\n /* ----- Event Handlers ----- */\n\n /**\n * Handles changes in filter groups count\n * @param {number} filterGroupsLength - Number of filter groups\n */\n const onConditionsChange = useCallback((filterGroupsLength: number) => {\n setHasFilterGroups(filterGroupsLength > 0);\n }, []);\n\n /**\n * Handles validation state changes\n * @param {boolean} isValid - Whether filters are valid\n */\n const onValidationChange = useCallback((isValid: boolean) => {\n setAreFiltersValid(isValid);\n }, []);\n\n /**\n * Handles opening the dialog\n */\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n /**\n * Handles save button click\n */\n const handleSave = useCallback(() => {\n ref.current?.handleSave();\n }, []);\n\n /* ----- Memoized Values ----- */\n\n /**\n * Condition data with the Enrich (derived questions) category stripped out\n * unless the integration opts in via `hasDerivedQuestions`.\n */\n const effectiveConditionData = useMemo(\n () =>\n filterDerivedQuestionsFromConditionData(\n conditionData,\n hasDerivedQuestions\n ),\n [conditionData, hasDerivedQuestions]\n );\n\n const isSaveDisabled = useMemo(\n () => !hasFilterGroups || !areFiltersValid,\n [hasFilterGroups, areFiltersValid]\n );\n\n const dialogContentCss = useMemo(\n () => ({\n fontFamily: 'DM Sans !important',\n minHeight: '332px',\n maxHeight: '532px',\n p: {\n margin: '0 !important',\n },\n zIndex: '9999',\n }),\n []\n );\n\n const dialogBodyCss = useMemo(\n () => ({\n fontFamily: 'DM Sans !important',\n padding: '$12 !important',\n minHeight: '188px',\n maxHeight: '388px',\n overflowY: 'auto' as const,\n p: {\n margin: '0 !important',\n },\n }),\n []\n );\n\n /* ----- Render ----- */\n\n return (\n <Dialog size=\"md\" modal={false} open={isOpen} onOpenChange={setIsOpen}>\n {isOpen &&\n createPortal(\n <Box\n className=\"mapping-condition-overlay\"\n css={{\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n inset: '0',\n backgroundColorOpacity: ['$black700', 0.6],\n zIndex: '999',\n }}\n />,\n document.body\n )}\n <DialogTrigger asChild onClick={handleOpen} data-testid={tid('open-conditions')}>\n {renderTrigger ? (\n renderTrigger(handleOpen)\n ) : (\n <Text\n className=\"dm-sans\"\n weight=\"medium\"\n css={{\n color: '$primary500',\n cursor: 'pointer',\n fontFamily: 'DM Sans !important',\n }}\n >\n {MAPPING_CONDITION_STRINGS.TRIGGER_TEXT}\n </Text>\n )}\n </DialogTrigger>\n <DialogContent className=\"dm-sans mapping-condition-content\" css={dialogContentCss}>\n <DialogHeader\n className=\"dm-sans\"\n css={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'center',\n fontFamily: 'DM Sans !important',\n }}\n >\n <DialogTitle size=\"md\">{MAPPING_CONDITION_STRINGS.DIALOG_TITLE}</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"dm-sans\" css={dialogBodyCss}>\n <ConditionWrapper\n conditionData={effectiveConditionData}\n existingContions={existingContions}\n setExistingCondtions={setExistingCondtions || (() => {})}\n onConditionsChange={onConditionsChange}\n onValidationChange={onValidationChange}\n ref={ref}\n />\n </DialogBody>\n <DialogFooter\n className=\"dm-sans\"\n css={{ fontFamily: 'DM Sans !important' }}\n >\n <Flex justifyContent=\"flex-end\" css={{ justifyContent: 'flex-end' }}>\n <DialogClose asChild>\n <Flex alignItems=\"center\" gap=\"$4\">\n <Button size=\"lg\" color=\"default\" data-testid={tid('cancel-conditions')}>\n {MAPPING_CONDITION_STRINGS.CANCEL}\n </Button>\n <Button\n size=\"lg\"\n color=\"primary\"\n onClick={handleSave}\n disabled={isSaveDisabled}\n data-testid={tid('save-conditions')}\n >\n {MAPPING_CONDITION_STRINGS.SAVE}\n </Button>\n </Flex>\n </DialogClose>\n </Flex>\n </DialogFooter>\n <Box\n css={{\n position: 'absolute',\n top: '$8',\n right: '$8',\n fontFamily: 'DM Sans !important',\n }}\n >\n <DialogClose className=\"dm-sans\" asChild>\n <IconButton\n size=\"lg\"\n icon={<CloseIcon />}\n variant=\"ghost\"\n aria-label=\"Close\"\n color=\"default\"\n />\n </DialogClose>\n </Box>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default MappingCondition;\n"],"names":["useTestId","useState","useRef","useCallback","useMemo","filterDerivedQuestionsFromConditionData","Dialog","createPortal","Box","DialogTrigger","Text","MAPPING_CONDITION_STRINGS","DialogContent","DialogHeader","DialogTitle","DialogBody","ConditionWrapper","DialogFooter","Flex","DialogClose","Button","IconButton","CloseIcon"],"mappings":"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"}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const noValueOperators = [
|
|
4
4
|
{ id: 5, label: "has no value", value: "NO_VALUE", requiresValue: false },
|
|
5
|
-
{ id: 9, label: "has any value", value: "ANY_VALUE", requiresValue: false }
|
|
6
|
-
{ id: 14, label: "has changed", value: "IS_CHANGED", requiresValue: false }
|
|
5
|
+
{ id: 9, label: "has any value", value: "ANY_VALUE", requiresValue: false }
|
|
7
6
|
];
|
|
8
7
|
const booleanOperators = [
|
|
9
8
|
{ id: 1, label: "is equals to", value: "IS", type: "BOOLEAN" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-options.js","sources":["../../../../src/commons/constants/operator-options.ts"],"sourcesContent":["export type OperatorOption = {\n id: number;\n label: string;\n value: string;\n isDateOnly?: boolean;\n isNumberOnly?: boolean;\n type?: string;\n requiresValue?: boolean;\n};\n\nexport type DataType =\n | \"STRING\"\n | \"NUMBER\"\n | \"DATE_TIME\"\n | \"BOOLEAN\"\n | \"SELECT\"\n | \"MULTI_SELECT\"\n | \"PHONE_NUMBER\"\n | \"NO_PREFERENCE\";\n\nexport type CustomConditions = Partial<Record<DataType, OperatorOption[]>>;\n\nconst noValueOperators: OperatorOption[] = [\n { id: 5, label: \"has no value\", value: \"NO_VALUE\", requiresValue: false },\n { id: 9, label: \"has any value\", value: \"ANY_VALUE\", requiresValue: false },\n
|
|
1
|
+
{"version":3,"file":"operator-options.js","sources":["../../../../src/commons/constants/operator-options.ts"],"sourcesContent":["export type OperatorOption = {\n id: number;\n label: string;\n value: string;\n isDateOnly?: boolean;\n isNumberOnly?: boolean;\n type?: string;\n requiresValue?: boolean;\n};\n\nexport type DataType =\n | \"STRING\"\n | \"NUMBER\"\n | \"DATE_TIME\"\n | \"BOOLEAN\"\n | \"SELECT\"\n | \"MULTI_SELECT\"\n | \"PHONE_NUMBER\"\n | \"NO_PREFERENCE\";\n\nexport type CustomConditions = Partial<Record<DataType, OperatorOption[]>>;\n\nconst noValueOperators: OperatorOption[] = [\n { id: 5, label: \"has no value\", value: \"NO_VALUE\", requiresValue: false },\n { id: 9, label: \"has any value\", value: \"ANY_VALUE\", requiresValue: false },\n];\n\nconst booleanOperators: OperatorOption[] = [\n { id: 1, label: \"is equals to\", value: \"IS\", type: \"BOOLEAN\" },\n { id: 2, label: \"is not equals to\", value: \"IS_NOT\", type: \"BOOLEAN\" },\n];\n\nconst stringOperators: OperatorOption[] = [\n { id: 3, label: \"contains\", value: \"CONTAINS\" },\n { id: 4, label: \"not contains\", value: \"CONTAINS_NOT\" },\n { id: 5, label: \"starts with\", value: \"STARTS_WITH\" },\n { id: 6, label: \"ends with\", value: \"ENDS_WITH\" },\n];\n\nconst dateOperators: OperatorOption[] = [\n { id: 6, label: \"before\", value: \"BEFORE\", isDateOnly: true },\n { id: 7, label: \"after\", value: \"AFTER\", isDateOnly: true },\n { id: 8, label: \"on\", value: \"ON\", isDateOnly: true },\n];\n\nconst numberOperators: OperatorOption[] = [\n { id: 10, label: \"less than\", value: \"LESS_THAN\", isNumberOnly: true },\n { id: 11, label: \"greater than\", value: \"GREATER_THAN\", isNumberOnly: true },\n { id: 12, label: \"less than or equal to\", value: \"LESS_THAN_OR_EQUAL\", isNumberOnly: true },\n { id: 13, label: \"greater than or equal to\", value: \"GREATER_THAN_OR_EQUAL\", isNumberOnly: true },\n];\n\nexport const operatorOptions: OperatorOption[] = [\n ...booleanOperators,\n ...stringOperators,\n ...dateOperators,\n ...numberOperators,\n ...noValueOperators,\n];\n\nexport const getValueLessOperators = (customConditions?: CustomConditions): string[] => {\n const baseNoValue = noValueOperators\n .filter(op => op.requiresValue === false)\n .map(op => op.value);\n\n if (!customConditions) return baseNoValue;\n\n const customNoValue = (Object.values(customConditions) as OperatorOption[][])\n .flat()\n .filter(op => op.requiresValue === false)\n .map(op => op.value);\n\n const seen = new Set<string>();\n return [...baseNoValue, ...customNoValue].filter(v => {\n if (seen.has(v)) return false;\n seen.add(v);\n return true;\n });\n};\n\nexport const getOperatorsByCategory = () => ({\n boolean: booleanOperators,\n string: stringOperators,\n date: dateOperators,\n number: numberOperators,\n noValue: noValueOperators,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var arrow = require('../../commons/icons/arrow.js');
|
|
5
|
+
var testId_context = require('../../commons/context/test-id.context.js');
|
|
5
6
|
var uiStrings = require('../constants/ui-strings.js');
|
|
6
7
|
var ContactImportModal = require('./ContactImportModal.js');
|
|
7
8
|
var flex = require('../../node_modules/@sparrowengg/twigs-react/dist/es/flex/flex.js');
|
|
@@ -24,6 +25,7 @@ const ContactImportHeader = ({
|
|
|
24
25
|
navigateMappingPage,
|
|
25
26
|
invitePortal
|
|
26
27
|
}) => {
|
|
28
|
+
const { tid } = testId_context.useTestId();
|
|
27
29
|
const [showImportModal, setShowImportModal] = React.useState(false);
|
|
28
30
|
const handleBackClick = () => {
|
|
29
31
|
setNewImport(false);
|
|
@@ -74,7 +76,8 @@ const ContactImportHeader = ({
|
|
|
74
76
|
color: "default",
|
|
75
77
|
icon: /* @__PURE__ */ React.createElement(arrowLeft.ArrowLeftIcon, null),
|
|
76
78
|
size: "lg",
|
|
77
|
-
"aria-label": "Go back"
|
|
79
|
+
"aria-label": "Go back",
|
|
80
|
+
"data-testid": tid("back-btn")
|
|
78
81
|
}
|
|
79
82
|
),
|
|
80
83
|
/* @__PURE__ */ React.createElement(heading.Heading, { size: "h6" }, uiStrings.CONTACT_IMPORT_UI_STRINGS.NEW_CONTACT_IMPORT)
|
|
@@ -96,7 +99,8 @@ const ContactImportHeader = ({
|
|
|
96
99
|
color: "default",
|
|
97
100
|
variant: "ghost",
|
|
98
101
|
size: "md",
|
|
99
|
-
onClick: handleEventSetupClick
|
|
102
|
+
onClick: handleEventSetupClick,
|
|
103
|
+
"data-testid": tid("configure-tab")
|
|
100
104
|
},
|
|
101
105
|
uiStrings.CONTACT_IMPORT_UI_STRINGS.EVENT_SETUP
|
|
102
106
|
),
|
|
@@ -118,7 +122,8 @@ const ContactImportHeader = ({
|
|
|
118
122
|
{
|
|
119
123
|
size: "lg",
|
|
120
124
|
onClick: handleContinueMapping,
|
|
121
|
-
css: { visibility: isContactMappingPage ? "visible" : "hidden" }
|
|
125
|
+
css: { visibility: isContactMappingPage ? "visible" : "hidden" },
|
|
126
|
+
"data-testid": tid("continue-btn")
|
|
122
127
|
},
|
|
123
128
|
uiStrings.CONTACT_IMPORT_UI_STRINGS.CONTINUE_MAPPING
|
|
124
129
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactImportHeader.js","sources":["../../../../src/contact-import/components/ContactImportHeader.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Heading,\n IconButton,\n toast\n} from \"@sparrowengg/twigs-react\";\nimport { ArrowLeftIcon } from \"@sparrowengg/twigs-react-icons\";\nimport React, { useState } from \"react\";\nimport Arrow from \"../../commons/icons/arrow\";\nimport { ContactImportHeaderProps } from \"../types\";\nimport { CONTACT_IMPORT_UI_STRINGS } from \"../constants/ui-strings\";\nimport { ContactImportModal } from \"./ContactImportModal\";\n\nexport const ContactImportHeader: React.FC<ContactImportHeaderProps> = ({\n importName,\n setImportName,\n setNewImport,\n setContactImportField,\n contactImportField,\n hasPreviousMapping,\n previousMappingHandler,\n onSaveHandler,\n isContactMappingPage,\n navigateMappingPage,\n invitePortal,\n}) => {\n const [showImportModal, setShowImportModal] = useState(false);\n\n const handleBackClick = () => {\n setNewImport(false);\n previousMappingHandler();\n };\n\n const handleEventSetupClick = () => {\n if (isContactMappingPage) {\n navigateMappingPage(false);\n }\n };\n\n const handleContinueMapping = () => {\n if(!contactImportField?.fields?.some(\n (field) =>\n field?.surveySparrowField === 'email' || field?.surveySparrowField === 'mobile'\n )){\n toast({\n variant: 'error',\n title: 'Please map Email or mobile or uniqueId field'\n });\n return\n }\n setShowImportModal(true);\n };\n\n const handleSaveAndClose = async (importName: string) => {\n await onSaveHandler(importName);\n };\n\n return (\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n css={{\n borderBottom: \"$borderWidths$xs solid $neutral200\",\n padding: \"$8 $12\",\n }}\n >\n <Flex\n gap=\"$6\"\n alignItems=\"center\"\n css={{ visibility: hasPreviousMapping ? \"visible\" : \"hidden\" }}\n >\n <IconButton\n onClick={handleBackClick}\n color=\"default\"\n icon={<ArrowLeftIcon />}\n size=\"lg\"\n aria-label=\"Go back\"\n />\n <Heading size=\"h6\">{CONTACT_IMPORT_UI_STRINGS.NEW_CONTACT_IMPORT}</Heading>\n </Flex>\n <Flex\n alignItems=\"center\"\n gap=\"$4\"\n css={{ \n width: \"420px !important\",\n \"& button\": { background: \"transparent !important\", fontSize: \"$md\" },\n }}\n >\n <Button\n css={{ color: !isContactMappingPage ? \"$neutral900\" : \"$neutral800\" }}\n color=\"default\"\n variant=\"ghost\"\n size=\"md\"\n onClick={handleEventSetupClick}\n >\n {CONTACT_IMPORT_UI_STRINGS.EVENT_SETUP}\n </Button>\n <Arrow />\n <Button\n css={{ color: isContactMappingPage ? \"$neutral900\" : \"$neutral800\" }}\n color=\"default\"\n variant=\"ghost\"\n size=\"md\"\n disabled={!isContactMappingPage}\n >\n {CONTACT_IMPORT_UI_STRINGS.MAPPING}\n </Button>\n </Flex>\n <Button\n size=\"lg\"\n onClick={handleContinueMapping}\n css={{ visibility: isContactMappingPage ? \"visible\" : \"hidden\"}}\n >\n {CONTACT_IMPORT_UI_STRINGS.CONTINUE_MAPPING}\n </Button>\n {showImportModal && (\n <ContactImportModal\n importName={importName}\n setImportName={setImportName}\n setContactImportField={setContactImportField}\n contactImportField={contactImportField}\n invitePortal={invitePortal}\n onSaveHandler={handleSaveAndClose}\n onCloseHandler={() => setShowImportModal(false)}\n />\n )}\n </Flex>\n );\n};\n\n"],"names":["useState","toast","importName","Flex","IconButton","ArrowLeftIcon","Heading","CONTACT_IMPORT_UI_STRINGS","Button","Arrow","ContactImportModal"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContactImportHeader.js","sources":["../../../../src/contact-import/components/ContactImportHeader.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Heading,\n IconButton,\n toast\n} from \"@sparrowengg/twigs-react\";\nimport { ArrowLeftIcon } from \"@sparrowengg/twigs-react-icons\";\nimport React, { useState } from \"react\";\nimport Arrow from \"../../commons/icons/arrow\";\nimport { useTestId } from \"../../commons/context/test-id.context\";\nimport { ContactImportHeaderProps } from \"../types\";\nimport { CONTACT_IMPORT_UI_STRINGS } from \"../constants/ui-strings\";\nimport { ContactImportModal } from \"./ContactImportModal\";\n\nexport const ContactImportHeader: React.FC<ContactImportHeaderProps> = ({\n importName,\n setImportName,\n setNewImport,\n setContactImportField,\n contactImportField,\n hasPreviousMapping,\n previousMappingHandler,\n onSaveHandler,\n isContactMappingPage,\n navigateMappingPage,\n invitePortal,\n}) => {\n const { tid } = useTestId();\n const [showImportModal, setShowImportModal] = useState(false);\n\n const handleBackClick = () => {\n setNewImport(false);\n previousMappingHandler();\n };\n\n const handleEventSetupClick = () => {\n if (isContactMappingPage) {\n navigateMappingPage(false);\n }\n };\n\n const handleContinueMapping = () => {\n if(!contactImportField?.fields?.some(\n (field) =>\n field?.surveySparrowField === 'email' || field?.surveySparrowField === 'mobile'\n )){\n toast({\n variant: 'error',\n title: 'Please map Email or mobile or uniqueId field'\n });\n return\n }\n setShowImportModal(true);\n };\n\n const handleSaveAndClose = async (importName: string) => {\n await onSaveHandler(importName);\n };\n\n return (\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n css={{\n borderBottom: \"$borderWidths$xs solid $neutral200\",\n padding: \"$8 $12\",\n }}\n >\n <Flex\n gap=\"$6\"\n alignItems=\"center\"\n css={{ visibility: hasPreviousMapping ? \"visible\" : \"hidden\" }}\n >\n <IconButton\n onClick={handleBackClick}\n color=\"default\"\n icon={<ArrowLeftIcon />}\n size=\"lg\"\n aria-label=\"Go back\"\n data-testid={tid('back-btn')}\n />\n <Heading size=\"h6\">{CONTACT_IMPORT_UI_STRINGS.NEW_CONTACT_IMPORT}</Heading>\n </Flex>\n <Flex\n alignItems=\"center\"\n gap=\"$4\"\n css={{ \n width: \"420px !important\",\n \"& button\": { background: \"transparent !important\", fontSize: \"$md\" },\n }}\n >\n <Button\n css={{ color: !isContactMappingPage ? \"$neutral900\" : \"$neutral800\" }}\n color=\"default\"\n variant=\"ghost\"\n size=\"md\"\n onClick={handleEventSetupClick}\n data-testid={tid('configure-tab')}\n >\n {CONTACT_IMPORT_UI_STRINGS.EVENT_SETUP}\n </Button>\n <Arrow />\n <Button\n css={{ color: isContactMappingPage ? \"$neutral900\" : \"$neutral800\" }}\n color=\"default\"\n variant=\"ghost\"\n size=\"md\"\n disabled={!isContactMappingPage}\n >\n {CONTACT_IMPORT_UI_STRINGS.MAPPING}\n </Button>\n </Flex>\n <Button\n size=\"lg\"\n onClick={handleContinueMapping}\n css={{ visibility: isContactMappingPage ? \"visible\" : \"hidden\"}}\n data-testid={tid('continue-btn')}\n >\n {CONTACT_IMPORT_UI_STRINGS.CONTINUE_MAPPING}\n </Button>\n {showImportModal && (\n <ContactImportModal\n importName={importName}\n setImportName={setImportName}\n setContactImportField={setContactImportField}\n contactImportField={contactImportField}\n invitePortal={invitePortal}\n onSaveHandler={handleSaveAndClose}\n onCloseHandler={() => setShowImportModal(false)}\n />\n )}\n </Flex>\n );\n};\n\n"],"names":["useTestId","useState","toast","importName","Flex","IconButton","ArrowLeftIcon","Heading","CONTACT_IMPORT_UI_STRINGS","Button","Arrow","ContactImportModal"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
+
var testId_context = require('../../commons/context/test-id.context.js');
|
|
4
5
|
var uiStrings = require('../constants/ui-strings.js');
|
|
5
6
|
var index = require('../../commons/constants/index.js');
|
|
6
7
|
var index$1 = require('../../commons/helpers/index.js');
|
|
@@ -43,6 +44,7 @@ const ContactImportModal = ({
|
|
|
43
44
|
invitePortal
|
|
44
45
|
}) => {
|
|
45
46
|
var _a;
|
|
47
|
+
const { tid } = testId_context.useTestId();
|
|
46
48
|
const [internalLoading, setInternalLoading] = React.useState(false);
|
|
47
49
|
const handleInputChange = (event) => {
|
|
48
50
|
setImportName(event.currentTarget.value);
|
|
@@ -97,7 +99,8 @@ const ContactImportModal = ({
|
|
|
97
99
|
}
|
|
98
100
|
},
|
|
99
101
|
onClick: onCloseHandler,
|
|
100
|
-
"aria-label": "Close modal"
|
|
102
|
+
"aria-label": "Close modal",
|
|
103
|
+
"data-testid": tid("close-modal")
|
|
101
104
|
}
|
|
102
105
|
)
|
|
103
106
|
),
|
|
@@ -134,14 +137,15 @@ const ContactImportModal = ({
|
|
|
134
137
|
padding: "$8 $12"
|
|
135
138
|
}
|
|
136
139
|
},
|
|
137
|
-
/* @__PURE__ */ React.createElement(button.Button, { size: "lg", color: "default", disabled: internalLoading, onClick: onCloseHandler }, uiStrings.CONTACT_IMPORT_UI_STRINGS.CANCEL),
|
|
140
|
+
/* @__PURE__ */ React.createElement(button.Button, { size: "lg", color: "default", disabled: internalLoading, onClick: onCloseHandler, "data-testid": tid("cancel-btn") }, uiStrings.CONTACT_IMPORT_UI_STRINGS.CANCEL),
|
|
138
141
|
/* @__PURE__ */ React.createElement(
|
|
139
142
|
button.Button,
|
|
140
143
|
{
|
|
141
144
|
size: "lg",
|
|
142
145
|
disabled: isFinishDisabled || internalLoading,
|
|
143
146
|
onClick: async () => await handleFinishImport(),
|
|
144
|
-
loading: internalLoading
|
|
147
|
+
loading: internalLoading,
|
|
148
|
+
"data-testid": tid("finish-import")
|
|
145
149
|
},
|
|
146
150
|
uiStrings.CONTACT_IMPORT_UI_STRINGS.FINISH_IMPORT
|
|
147
151
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactImportModal.js","sources":["../../../../src/contact-import/components/ContactImportModal.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n Flex,\n FormInput,\n Heading,\n IconButton,\n} from \"@sparrowengg/twigs-react\";\nimport { CloseIcon } from \"@sparrowengg/twigs-react-icons\";\nimport React, { useState } from \"react\";\nimport { ContactImportFieldType } from \"../types\";\nimport { CONTACT_IMPORT_UI_STRINGS } from \"../constants/ui-strings\";\nimport { MODAL_MAX_WIDTH, INPUT_MAX_LENGTH } from \"../../commons/constants\";\nimport { generateUniqueId } from \"../../commons/helpers\";\nimport { isValidInputLength } from \"../utils\";\n\ninterface ContactImportModalProps {\n importName: string;\n setImportName: React.Dispatch<React.SetStateAction<string>>;\n setContactImportField: React.Dispatch<React.SetStateAction<ContactImportFieldType>>;\n contactImportField: ContactImportFieldType;\n onCloseHandler: () => void;\n onSaveHandler: (importName: string) => void | Promise<void>;\n invitePortal: {\n hasInvitePortal: boolean;\n value: boolean | null;\n onChangeHandler: (value: boolean) => void;\n };\n}\n\nexport const ContactImportModal: React.FC<ContactImportModalProps> = ({\n importName,\n setImportName,\n setContactImportField,\n contactImportField,\n onCloseHandler,\n onSaveHandler,\n invitePortal,\n}) => {\n const [internalLoading, setInternalLoading] = useState(false);\n\n const handleInputChange = (event: any) => {\n setImportName(event.currentTarget.value);\n };\n\n const handleInvitePortalChange = (value: any) => {\n setContactImportField({\n ...contactImportField,\n invitePortal: value,\n });\n invitePortal.onChangeHandler(value);\n };\n\n const handleFinishImport = async () => {\n setInternalLoading(true);\n setContactImportField({\n ...contactImportField,\n description: importName,\n id: generateUniqueId(),\n });\n await onSaveHandler(importName);\n setInternalLoading(false);\n };\n const isFinishDisabled = !isValidInputLength(importName);\n\n\n return (\n <Dialog open>\n <DialogContent\n className=\"dm-sans\"\n css={{\n fontFamily: \"DM Sans !important\",\n 'p': {\n margin: \"0 !important\",\n },\n padding: 0,\n borderRadius: \"$3xl\",\n maxWidth: MODAL_MAX_WIDTH,\n }}\n >\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n className=\"dm-sans\"\n css={{\n padding: \"$8 $12\",\n borderBottom: \"$borderWidths$xs solid $neutral200\",\n }}\n >\n <Heading className=\"dm-sans\" size=\"h6\" css={{ color: \"$neutral900\" }}>\n {CONTACT_IMPORT_UI_STRINGS.IMPORT_CONFIGURATION}\n </Heading>\n <IconButton\n variant=\"ghost\"\n color=\"default\"\n disabled={internalLoading}\n icon={<CloseIcon />}\n size=\"lg\"\n css={{\n \"& svg\": {\n color: \"#64748B !important\",\n },\n }}\n onClick={onCloseHandler}\n aria-label=\"Close modal\"\n />\n </Flex>\n <Box\n className=\"dm-sans\"\n css={{\n padding: \"$12\",\n }}\n >\n <FormInput\n className=\"dm-sans\"\n label={CONTACT_IMPORT_UI_STRINGS.TITLE_LABEL}\n requiredIndicator\n value={contactImportField?.configure?.reference || importName}\n maxLength={INPUT_MAX_LENGTH}\n max={INPUT_MAX_LENGTH}\n showCount\n onChange={handleInputChange}\n size=\"lg\"\n />\n {/* {invitePortal.hasInvitePortal && (\n <Box css={{ marginTop: \"$12\" }}>\n <Checkbox\n checked={!!invitePortal.value}\n onChange={handleInvitePortalChange}\n >\n {CONTACT_IMPORT_UI_STRINGS.INVITE_TO_PORTAL}\n </Checkbox>\n </Box>\n )} */}\n </Box>\n <Flex\n className=\"dm-sans\"\n gap=\"$4\"\n css={{\n justifyContent: \"flex-end\",\n padding: \"$8 $12\",\n }}\n >\n <Button size=\"lg\" color=\"default\" disabled={internalLoading} onClick={onCloseHandler}>\n {CONTACT_IMPORT_UI_STRINGS.CANCEL}\n </Button>\n <Button\n size=\"lg\"\n disabled={isFinishDisabled || internalLoading}\n onClick={async () => await handleFinishImport()}\n loading={internalLoading}\n >\n {CONTACT_IMPORT_UI_STRINGS.FINISH_IMPORT}\n </Button>\n </Flex>\n </DialogContent>\n </Dialog>\n );\n};\n\n"],"names":["useState","generateUniqueId","isValidInputLength","Dialog","DialogContent","MODAL_MAX_WIDTH","Flex","Heading","CONTACT_IMPORT_UI_STRINGS","IconButton","CloseIcon","Box","FormInput","INPUT_MAX_LENGTH","Button"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContactImportModal.js","sources":["../../../../src/contact-import/components/ContactImportModal.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n Flex,\n FormInput,\n Heading,\n IconButton,\n} from \"@sparrowengg/twigs-react\";\nimport { CloseIcon } from \"@sparrowengg/twigs-react-icons\";\nimport React, { useState } from \"react\";\nimport { useTestId } from \"../../commons/context/test-id.context\";\nimport { ContactImportFieldType } from \"../types\";\nimport { CONTACT_IMPORT_UI_STRINGS } from \"../constants/ui-strings\";\nimport { MODAL_MAX_WIDTH, INPUT_MAX_LENGTH } from \"../../commons/constants\";\nimport { generateUniqueId } from \"../../commons/helpers\";\nimport { isValidInputLength } from \"../utils\";\n\ninterface ContactImportModalProps {\n importName: string;\n setImportName: React.Dispatch<React.SetStateAction<string>>;\n setContactImportField: React.Dispatch<React.SetStateAction<ContactImportFieldType>>;\n contactImportField: ContactImportFieldType;\n onCloseHandler: () => void;\n onSaveHandler: (importName: string) => void | Promise<void>;\n invitePortal: {\n hasInvitePortal: boolean;\n value: boolean | null;\n onChangeHandler: (value: boolean) => void;\n };\n}\n\nexport const ContactImportModal: React.FC<ContactImportModalProps> = ({\n importName,\n setImportName,\n setContactImportField,\n contactImportField,\n onCloseHandler,\n onSaveHandler,\n invitePortal,\n}) => {\n const { tid } = useTestId();\n const [internalLoading, setInternalLoading] = useState(false);\n\n const handleInputChange = (event: any) => {\n setImportName(event.currentTarget.value);\n };\n\n const handleInvitePortalChange = (value: any) => {\n setContactImportField({\n ...contactImportField,\n invitePortal: value,\n });\n invitePortal.onChangeHandler(value);\n };\n\n const handleFinishImport = async () => {\n setInternalLoading(true);\n setContactImportField({\n ...contactImportField,\n description: importName,\n id: generateUniqueId(),\n });\n await onSaveHandler(importName);\n setInternalLoading(false);\n };\n const isFinishDisabled = !isValidInputLength(importName);\n\n\n return (\n <Dialog open>\n <DialogContent\n className=\"dm-sans\"\n css={{\n fontFamily: \"DM Sans !important\",\n 'p': {\n margin: \"0 !important\",\n },\n padding: 0,\n borderRadius: \"$3xl\",\n maxWidth: MODAL_MAX_WIDTH,\n }}\n >\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n className=\"dm-sans\"\n css={{\n padding: \"$8 $12\",\n borderBottom: \"$borderWidths$xs solid $neutral200\",\n }}\n >\n <Heading className=\"dm-sans\" size=\"h6\" css={{ color: \"$neutral900\" }}>\n {CONTACT_IMPORT_UI_STRINGS.IMPORT_CONFIGURATION}\n </Heading>\n <IconButton\n variant=\"ghost\"\n color=\"default\"\n disabled={internalLoading}\n icon={<CloseIcon />}\n size=\"lg\"\n css={{\n \"& svg\": {\n color: \"#64748B !important\",\n },\n }}\n onClick={onCloseHandler}\n aria-label=\"Close modal\"\n data-testid={tid('close-modal')}\n />\n </Flex>\n <Box\n className=\"dm-sans\"\n css={{\n padding: \"$12\",\n }}\n >\n <FormInput\n className=\"dm-sans\"\n label={CONTACT_IMPORT_UI_STRINGS.TITLE_LABEL}\n requiredIndicator\n value={contactImportField?.configure?.reference || importName}\n maxLength={INPUT_MAX_LENGTH}\n max={INPUT_MAX_LENGTH}\n showCount\n onChange={handleInputChange}\n size=\"lg\"\n />\n {/* {invitePortal.hasInvitePortal && (\n <Box css={{ marginTop: \"$12\" }}>\n <Checkbox\n checked={!!invitePortal.value}\n onChange={handleInvitePortalChange}\n >\n {CONTACT_IMPORT_UI_STRINGS.INVITE_TO_PORTAL}\n </Checkbox>\n </Box>\n )} */}\n </Box>\n <Flex\n className=\"dm-sans\"\n gap=\"$4\"\n css={{\n justifyContent: \"flex-end\",\n padding: \"$8 $12\",\n }}\n >\n <Button size=\"lg\" color=\"default\" disabled={internalLoading} onClick={onCloseHandler} data-testid={tid('cancel-btn')}>\n {CONTACT_IMPORT_UI_STRINGS.CANCEL}\n </Button>\n <Button\n size=\"lg\"\n disabled={isFinishDisabled || internalLoading}\n onClick={async () => await handleFinishImport()}\n loading={internalLoading}\n data-testid={tid('finish-import')}\n >\n {CONTACT_IMPORT_UI_STRINGS.FINISH_IMPORT}\n </Button>\n </Flex>\n </DialogContent>\n </Dialog>\n );\n};\n\n"],"names":["useTestId","useState","generateUniqueId","isValidInputLength","Dialog","DialogContent","MODAL_MAX_WIDTH","Flex","Heading","CONTACT_IMPORT_UI_STRINGS","IconButton","CloseIcon","Box","FormInput","INPUT_MAX_LENGTH","Button"],"mappings":"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"}
|