@sparrowengg/integrations-templates-frontend 2.1.0-notion-release.19 → 2.1.0-notion-release.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/commons/components/MappingCondtion/index.js +62 -26
- package/dist/cjs/commons/components/MappingCondtion/index.js.map +1 -1
- package/dist/cjs/integration-template/components/dashboard.js +52 -9
- package/dist/cjs/integration-template/components/dashboard.js.map +1 -1
- package/dist/cjs/mapping/components/mapping.js +35 -9
- package/dist/cjs/mapping/components/mapping.js.map +1 -1
- package/dist/cjs/mapping/utils/conditionDescriptionBuilder.js +200 -0
- package/dist/cjs/mapping/utils/conditionDescriptionBuilder.js.map +1 -0
- package/dist/es/commons/components/MappingCondtion/index.js +62 -26
- package/dist/es/commons/components/MappingCondtion/index.js.map +1 -1
- package/dist/es/integration-template/components/dashboard.js +52 -9
- package/dist/es/integration-template/components/dashboard.js.map +1 -1
- package/dist/es/mapping/components/mapping.js +35 -9
- package/dist/es/mapping/components/mapping.js.map +1 -1
- package/dist/es/mapping/utils/conditionDescriptionBuilder.js +198 -0
- package/dist/es/mapping/utils/conditionDescriptionBuilder.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ import Spinner from '../../commons/components/spinner.js';
|
|
|
7
7
|
import Field from './field.js';
|
|
8
8
|
import PlaceholderSpan from './placeholder-span.js';
|
|
9
9
|
import MappingCondition from '../../commons/components/MappingCondtion/index.js';
|
|
10
|
+
import { ConditionCard } from '../utils/conditionDescriptionBuilder.js';
|
|
10
11
|
import v4 from '../../node_modules/uuid/dist/esm-browser/v4.js';
|
|
11
12
|
import { Flex } from '../../node_modules/@sparrowengg/twigs-react/dist/es/flex/flex.js';
|
|
12
13
|
import { Box } from '../../node_modules/@sparrowengg/twigs-react/dist/es/box/box.js';
|
|
@@ -58,6 +59,7 @@ const Mapping = ({
|
|
|
58
59
|
oldResponse,
|
|
59
60
|
conditionDescription
|
|
60
61
|
}) => {
|
|
62
|
+
var _a;
|
|
61
63
|
const [ssMappingData, setSSMappingData] = useState({
|
|
62
64
|
questions: [],
|
|
63
65
|
variables: [],
|
|
@@ -95,14 +97,14 @@ const Mapping = ({
|
|
|
95
97
|
);
|
|
96
98
|
};
|
|
97
99
|
const hasRequiredProps = () => {
|
|
98
|
-
var
|
|
99
|
-
return !!fields && !!setFields && !!integrationFields && !!setIntegrationFields && (!!token || ((_b = Object.keys((
|
|
100
|
+
var _a2, _b;
|
|
101
|
+
return !!fields && !!setFields && !!integrationFields && !!setIntegrationFields && (!!token || ((_b = Object.keys((_a2 = surveyDetails == null ? void 0 : surveyDetails.surveyProperties) != null ? _a2 : {})) == null ? void 0 : _b.length) > 0);
|
|
100
102
|
};
|
|
101
103
|
const fetchInitialMappingData = async () => {
|
|
102
|
-
var
|
|
104
|
+
var _a2, _b, _c, _d, _e, _f;
|
|
103
105
|
setLoader(true);
|
|
104
106
|
try {
|
|
105
|
-
if (((_b = Object.keys((
|
|
107
|
+
if (((_b = Object.keys((_a2 = surveyDetails == null ? void 0 : surveyDetails.surveyProperties) != null ? _a2 : {})) == null ? void 0 : _b.length) > 0) {
|
|
106
108
|
setSSMappingData({
|
|
107
109
|
questions: ((_c = surveyDetails == null ? void 0 : surveyDetails.surveyProperties) == null ? void 0 : _c.questions) || [],
|
|
108
110
|
contactProperties: ((_d = surveyDetails == null ? void 0 : surveyDetails.surveyProperties) == null ? void 0 : _d.contactProperties) || [],
|
|
@@ -168,7 +170,31 @@ const Mapping = ({
|
|
|
168
170
|
css: { color: "$neutral900" }
|
|
169
171
|
},
|
|
170
172
|
`Map to ${integrationName}`
|
|
171
|
-
),
|
|
173
|
+
), ((_a = mappingConditions == null ? void 0 : mappingConditions.filterGroups) == null ? void 0 : _a.length) ? /* @__PURE__ */ React__default.createElement(
|
|
174
|
+
MappingCondition,
|
|
175
|
+
{
|
|
176
|
+
existingContions: mappingConditions,
|
|
177
|
+
setExistingCondtions: setMappingConditions,
|
|
178
|
+
conditionData: conditionData || [],
|
|
179
|
+
renderTrigger: (onEditClick) => /* @__PURE__ */ React__default.createElement(
|
|
180
|
+
ConditionCard,
|
|
181
|
+
{
|
|
182
|
+
isEditable: true,
|
|
183
|
+
conditionsData: mappingConditions,
|
|
184
|
+
onEditClick,
|
|
185
|
+
onClearClick: () => setMappingConditions && setMappingConditions(void 0),
|
|
186
|
+
showMoreMenu: true
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
) : /* @__PURE__ */ React__default.createElement(Flex, { gap: "$2", css: { marginTop: "$8" } }, /* @__PURE__ */ React__default.createElement(Text, { size: "sm", css: { color: "$neutral500" } }, conditionDescription), /* @__PURE__ */ React__default.createElement(
|
|
191
|
+
MappingCondition,
|
|
192
|
+
{
|
|
193
|
+
existingContions: mappingConditions,
|
|
194
|
+
setExistingCondtions: setMappingConditions,
|
|
195
|
+
conditionData: conditionData || []
|
|
196
|
+
}
|
|
197
|
+
))) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
|
|
172
198
|
Heading,
|
|
173
199
|
{
|
|
174
200
|
size: "h5",
|
|
@@ -218,11 +244,11 @@ const Mapping = ({
|
|
|
218
244
|
css: { marginTop: "$12" }
|
|
219
245
|
},
|
|
220
246
|
essentialFields == null ? void 0 : essentialFields.map((field, idx) => {
|
|
221
|
-
var
|
|
247
|
+
var _a2, _b;
|
|
222
248
|
return /* @__PURE__ */ React__default.createElement(
|
|
223
249
|
Field,
|
|
224
250
|
{
|
|
225
|
-
hasSurveyProperties: ((_b = Object.keys((
|
|
251
|
+
hasSurveyProperties: ((_b = Object.keys((_a2 = surveyDetails == null ? void 0 : surveyDetails.surveyProperties) != null ? _a2 : {})) == null ? void 0 : _b.length) > 0,
|
|
226
252
|
surveyType,
|
|
227
253
|
havingTypeDropdown,
|
|
228
254
|
key: field.id,
|
|
@@ -242,11 +268,11 @@ const Mapping = ({
|
|
|
242
268
|
})
|
|
243
269
|
)
|
|
244
270
|
), /* @__PURE__ */ React__default.createElement(Flex, { flexDirection: "column", gap: "$16", css: { marginTop: "$16" } }, commonFields == null ? void 0 : commonFields.map((field, idx) => {
|
|
245
|
-
var
|
|
271
|
+
var _a2, _b;
|
|
246
272
|
return /* @__PURE__ */ React__default.createElement(
|
|
247
273
|
Field,
|
|
248
274
|
{
|
|
249
|
-
hasSurveyProperties: ((_b = Object.keys((
|
|
275
|
+
hasSurveyProperties: ((_b = Object.keys((_a2 = surveyDetails == null ? void 0 : surveyDetails.surveyProperties) != null ? _a2 : {})) == null ? void 0 : _b.length) > 0,
|
|
250
276
|
surveyType,
|
|
251
277
|
havingTypeDropdown,
|
|
252
278
|
key: field.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.js","sources":["../../../../src/mapping/components/mapping.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Checkbox,\n Flex,\n FormLabel,\n Heading,\n Select,\n Text,\n} from \"@sparrowengg/twigs-react\";\nimport React, { useEffect, useState, useMemo } from \"react\";\nimport { PlusIcon } from \"@sparrowengg/twigs-react-icons\";\nimport { surveySparrowURL } from \"../../commons/constants\";\nimport { DEFAULT_FIELD_VALUE, MAPPING_ERROR_MESSAGES } from \"../constants\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n fetchContactProperties,\n fetchSurveyQuestions,\n fetchSurveyVariables,\n fetchSurveyExpression,\n} from \"../services\";\nimport { MappingTypeProps, ssMappingDataResponse, FieldType, SelectOption, IntegrationFieldType } from \"../types\";\nimport { FormFieldValue, FieldChangeHandler } from \"../../commons/types/enhanced\";\nimport { UI_CONSTANTS, MAPPING_TYPES } from \"../../commons/constants/enhanced\";\nimport ImportModal from \"../../commons/components/import-modal\";\nimport Spinner from \"../../commons/components/spinner\";\nimport Field from \"./field\";\nimport PlaceholderSpan from \"./placeholder-span\";\nimport MappingCondition from \"../../commons/components/MappingCondtion\";\n\n\nexport const Mapping: React.FC<MappingTypeProps> = ({\n hasConditions,\n mappingConditions,\n setMappingConditions,\n conditionData,\n havingTypeDropdown,\n integrationName,\n surveyId,\n surveyType,\n fields,\n setFields,\n integrationFields,\n hasCustomMenuProperty,\n setIntegrationFields,\n apiURL = surveySparrowURL,\n token,\n surveyDetails,\n customList,\n oldResponse,\n conditionDescription,\n}) => {\n const [ssMappingData, setSSMappingData] = useState<\n ssMappingDataResponse<SelectOption>\n >({\n questions: [],\n variables: [],\n contactProperties: [],\n expressions: [],\n });\n const [showCustomPropertyModal, setShowCustomPropertyModal] = useState(false);\n const [existingContions , setExistingCondtions] = useState();\n const [customPropertyField, setCustomPropertyField] = useState<string>(\"\");\n const [loader, setLoader] = useState<boolean>(true);\n const essentialFields = fields?.filter((field) => field?.isEssentialField);\n const commonFields = fields?.filter((field) => !field?.isEssentialField);\n\n const customHandler = (field: FieldType | undefined, property: string, value: FormFieldValue): Array<IntegrationFieldType> => {\n if (field?.dependency && typeof field.dependency === 'object' && 'length' in field.dependency) {\n return (field.dependency as unknown) as Array<IntegrationFieldType>;\n }\n return [];\n };\n\n const handleFieldValue: FieldChangeHandler = (id: string | number, property: string, value: FormFieldValue) => {\n let dependentField: Array<IntegrationFieldType> = [];\n const targetField = fields.find((field) => field.id === id);\n dependentField = customHandler(\n targetField,\n property,\n value\n );\n let currentFields = [...fields, ...dependentField].filter(\n (obj, index, self) =>\n index ===\n self.findIndex((o) => JSON.stringify(o) === JSON.stringify(obj))\n );\n setFields(\n currentFields?.map((field) => {\n if (field.id === id) {\n return property === \"type\"\n ? { ...field, surveySparrowField: null, mappedType: value, id: id.toString() }\n : property === \"integrationFieldType\"\n ? { ...field, defaultValue: null, [property]: value }\n : { ...field, [property]: value };\n } else {\n return { ...field };\n }\n }) as FieldType[]\n );\n };\n\n const hasRequiredProps = () =>\n !!fields &&\n !!setFields &&\n !!integrationFields &&\n !!setIntegrationFields && (!!token || Object.keys(surveyDetails?.surveyProperties ?? {})?.length > 0);\n\n const fetchInitialMappingData = async (): Promise<void> => {\n setLoader(true);\n try {\n if(Object.keys(surveyDetails?.surveyProperties ?? {})?.length > 0){\n setSSMappingData({\n questions: (surveyDetails?.surveyProperties?.questions as any) || [],\n contactProperties: (surveyDetails?.surveyProperties?.contactProperties as any) || [],\n variables: (surveyDetails?.surveyProperties?.variables as any) || [],\n expressions: (surveyDetails?.surveyProperties?.expressions as any) || [],\n });\n } else {\n const [questions, variables, contactProperties, expressions] =\n await Promise.all([\n fetchSurveyQuestions(apiURL, surveyId, token ?? \"\"),\n fetchSurveyVariables(apiURL, surveyId, token ?? \"\"),\n fetchContactProperties(apiURL, token ?? \"\"),\n fetchSurveyExpression(apiURL, surveyId, token ?? \"\"),\n ]);\n setSSMappingData({\n questions: (questions as any) || [],\n contactProperties: (contactProperties as any) || [],\n variables: (variables as any) || [],\n expressions: (expressions as any) || [],\n });\n }\n\n } catch (error) {\n console.error(MAPPING_ERROR_MESSAGES.FETCH_ERROR, error);\n setSSMappingData({\n questions: [],\n contactProperties: [],\n variables: [],\n expressions: [],\n });\n } finally {\n setLoader(false);\n }\n };\n\n const getEssentialFieldsNumber = (length: number): string => {\n const numberMapping: Record<number, string> = {\n 1: \"one\",\n 2: \"two\",\n 3: \"three\",\n 4: \"four\",\n 5: \"five\",\n 6: \"six\",\n 7: \"seven\",\n 8: \"eight\",\n 9: \"nine\",\n 10: \"ten\",\n };\n return numberMapping[length] ?? \"These\";\n };\n\n useEffect(() => {\n setFields(\n fields?.length === 0\n ? [{ ...DEFAULT_FIELD_VALUE, id: uuid() } as FieldType]\n : fields?.map((field) => ({ ...field, id: uuid() })) as FieldType[]\n );\n if (!!surveyId) {\n fetchInitialMappingData();\n } else {\n setLoader(false);\n }\n }, [token, surveyId]);\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\">\n {hasRequiredProps() ? (\n <>\n {loader ? (\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n css={{ height: \"calc(100vh - 57px)\" }}\n >\n <Spinner />\n </Flex>\n ) : (\n <Box css={{ maxWidth: 1120, width: \"100%\", marginBlock: \"$40\" }}>\n {hasConditions ? (\n <>\n <Flex gap=\"$2\" css={{ marginBlock: \"$8\" }}>\n <Text size=\"sm\" css={{ color: \"$neutral500\" }}>\n Survey Name:\n </Text>\n <Text\n size=\"sm\"\n weight={\"medium\"}\n css={{ color: \"$neutral800\" }}\n >\n {surveyDetails.surveyName}\n </Text>\n </Flex>\n <Heading\n size=\"h5\"\n css={{ color: \"$neutral900\" }}\n >{`Map to ${integrationName}`}</Heading>\n <Flex gap=\"$2\" css={{ marginTop: \"$8\" }}>\n <Text size=\"sm\" css={{ color: \"$neutral500\" }}>\n {conditionDescription}\n </Text>\n <MappingCondition existingContions={mappingConditions} setExistingCondtions={setMappingConditions} conditionData={conditionData || []} />\n </Flex>\n </>\n ) : (\n <>\n <Heading\n size=\"h5\"\n css={{ color: \"$neutral900\" }}\n >{`Map to ${integrationName}`}</Heading>\n <Flex gap=\"$2\" css={{ marginTop: \"$4\" }}>\n <Text size=\"sm\" css={{ color: \"$neutral500\" }}>\n Survey Name:\n </Text>\n <Text\n size=\"sm\"\n weight={\"medium\"}\n css={{ color: \"$neutral800\" }}\n >\n {surveyDetails.surveyName}\n </Text>\n </Flex>\n </>\n )}\n\n {!!essentialFields?.length && (\n <Box\n css={{\n width: \"100%\",\n paddingBlock: \"$12 $20\",\n borderBottom: \"$borderWidths$xs dashed $neutral200\",\n maxWidth: 1084,\n }}\n >\n <Text\n size=\"md\"\n css={{\n color: \"$neutral500\",\n lineHeight: \"$md\",\n marginTop: \"$4\",\n }}\n >\n This connection requires{\" \"}\n <PlaceholderSpan color=\"$neutral600\">\n {essentialFields?.length}\n </PlaceholderSpan>\n <PlaceholderSpan color=\"$negative500\">*</PlaceholderSpan>{\" \"}\n essential mappings\n </Text>\n <Flex\n flexDirection=\"column\"\n gap=\"$20\"\n css={{ marginTop: \"$12\" }}\n >\n {essentialFields?.map((field, idx) => (\n <Field\n hasSurveyProperties={\n Object.keys(surveyDetails?.surveyProperties ?? {})\n ?.length > 0\n }\n surveyType={surveyType}\n havingTypeDropdown={havingTypeDropdown}\n key={field.id}\n field={field}\n integrationName={integrationName}\n handleFieldValue={(\n id: string | number,\n property: string,\n value: FormFieldValue\n ) => handleFieldValue(id, property, value)}\n hasCustomMenuProperty={hasCustomMenuProperty}\n integrationFields={integrationFields}\n isBtnDisabled={commonFields.length === 1}\n isFirstField={idx === 0}\n ssMappingData={ssMappingData}\n showCustomPropertyModal={() => {\n setShowCustomPropertyModal(true);\n }}\n />\n ))}\n </Flex>\n </Box>\n )}\n <Flex flexDirection=\"column\" gap=\"$16\" css={{ marginTop: \"$16\" }}>\n {commonFields?.map((field, idx) => {\n return (\n <Field\n hasSurveyProperties={\n Object.keys(surveyDetails?.surveyProperties ?? {})\n ?.length > 0\n }\n surveyType={surveyType}\n havingTypeDropdown={havingTypeDropdown}\n key={field.id}\n field={field}\n integrationName={integrationName}\n removeField={() => {\n setFields((prev) =>\n prev.filter(\n (currentField) => currentField.id !== field.id\n )\n );\n }}\n handleFieldValue={(\n id: string | number,\n property: string,\n value: FormFieldValue\n ) => handleFieldValue(id, property, value)}\n hasCustomMenuProperty={hasCustomMenuProperty}\n integrationFields={integrationFields}\n isBtnDisabled={false}\n isFirstField={idx === 0}\n ssMappingData={ssMappingData}\n showCustomPropertyModal={() => {\n setShowCustomPropertyModal(true);\n }}\n />\n );\n })}\n </Flex>\n <Button\n leftIcon={<PlusIcon />}\n color=\"default\"\n css={{ marginTop: \"$10\" }}\n onClick={() =>\n setFields([\n ...fields,\n {\n ...DEFAULT_FIELD_VALUE,\n id: uuid(),\n } as FieldType,\n ])\n }\n size=\"md\"\n >\n New mapping field\n </Button>\n {customList?.hasCustomList && (\n <Flex\n css={{ marginTop: \"$40\" }}\n flexDirection=\"column\"\n gap=\"$8\"\n >\n <Flex flexDirection=\"column\" gap=\"$3\">\n <Heading size=\"h5\">Choose a List</Heading>\n <Text css={{ color: \"$neutral500\" }} size=\"sm\">\n Pick a list to save mapped fields; If not, they'll be\n saved under all profiles.\n </Text>\n </Flex>\n <Select\n css={{ maxWidth: 400, width: \"100%\" }}\n size=\"lg\"\n options={customList.options}\n value={customList.value}\n placeholder=\"\"\n onChange={(value: any) => customList.onChangeHandler(value)}\n />\n </Flex>\n )}\n {/* Old Response */}\n {oldResponse?.hasOldResponse && (\n <Checkbox\n onChange={(value: any) => oldResponse.onChangeHandler(value)}\n css={{ marginBlock: \"$8\", cursor: \"pointer\" }}\n checked={oldResponse.value as boolean}\n >\n <FormLabel size=\"sm\">Import Old Response</FormLabel>\n </Checkbox>\n )}\n {showCustomPropertyModal && (\n <ImportModal\n onCloseHandler={() => setShowCustomPropertyModal(false)}\n onInputHandler={(value: any) => setCustomPropertyField(value)}\n onSaveHandler={() => {\n setIntegrationFields &&\n setIntegrationFields((prev) => [\n ...prev,\n {\n id: customPropertyField,\n label: customPropertyField,\n value: customPropertyField,\n type: \"string\",\n } as unknown as IntegrationFieldType,\n ]);\n setShowCustomPropertyModal(false);\n }}\n />\n )}\n </Box>\n )}\n </>\n ) : (\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n css={{ height: \"100%\" }}\n >\n <Heading size=\"h4\" weight=\"bold\">\n Provide the needed props to import Mapping Template\n </Heading>\n </Flex>\n )}\n </Flex>\n );\n};\n"],"names":["uuid","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mapping.js","sources":["../../../../src/mapping/components/mapping.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Checkbox,\n Flex,\n FormLabel,\n Heading,\n Select,\n Text,\n} from \"@sparrowengg/twigs-react\";\nimport React, { useEffect, useState, useMemo } from \"react\";\nimport { PlusIcon } from \"@sparrowengg/twigs-react-icons\";\nimport { surveySparrowURL } from \"../../commons/constants\";\nimport { DEFAULT_FIELD_VALUE, MAPPING_ERROR_MESSAGES } from \"../constants\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n fetchContactProperties,\n fetchSurveyQuestions,\n fetchSurveyVariables,\n fetchSurveyExpression,\n} from \"../services\";\nimport { MappingTypeProps, ssMappingDataResponse, FieldType, SelectOption, IntegrationFieldType } from \"../types\";\nimport { FormFieldValue, FieldChangeHandler } from \"../../commons/types/enhanced\";\nimport { UI_CONSTANTS, MAPPING_TYPES } from \"../../commons/constants/enhanced\";\nimport ImportModal from \"../../commons/components/import-modal\";\nimport Spinner from \"../../commons/components/spinner\";\nimport Field from \"./field\";\nimport PlaceholderSpan from \"./placeholder-span\";\nimport MappingCondition from \"../../commons/components/MappingCondtion\";\nimport { ConditionCard } from \"../utils/conditionDescriptionBuilder\";\n\n\nexport const Mapping: React.FC<MappingTypeProps> = ({\n hasConditions,\n mappingConditions,\n setMappingConditions,\n conditionData,\n havingTypeDropdown,\n integrationName,\n surveyId,\n surveyType,\n fields,\n setFields,\n integrationFields,\n hasCustomMenuProperty,\n setIntegrationFields,\n apiURL = surveySparrowURL,\n token,\n surveyDetails,\n customList,\n oldResponse,\n conditionDescription,\n}) => {\n const [ssMappingData, setSSMappingData] = useState<\n ssMappingDataResponse<SelectOption>\n >({\n questions: [],\n variables: [],\n contactProperties: [],\n expressions: [],\n });\n const [showCustomPropertyModal, setShowCustomPropertyModal] = useState(false);\n const [existingContions , setExistingCondtions] = useState();\n const [customPropertyField, setCustomPropertyField] = useState<string>(\"\");\n const [loader, setLoader] = useState<boolean>(true);\n const essentialFields = fields?.filter((field) => field?.isEssentialField);\n const commonFields = fields?.filter((field) => !field?.isEssentialField);\n\n const customHandler = (field: FieldType | undefined, property: string, value: FormFieldValue): Array<IntegrationFieldType> => {\n if (field?.dependency && typeof field.dependency === 'object' && 'length' in field.dependency) {\n return (field.dependency as unknown) as Array<IntegrationFieldType>;\n }\n return [];\n };\n\n const handleFieldValue: FieldChangeHandler = (id: string | number, property: string, value: FormFieldValue) => {\n let dependentField: Array<IntegrationFieldType> = [];\n const targetField = fields.find((field) => field.id === id);\n dependentField = customHandler(\n targetField,\n property,\n value\n );\n let currentFields = [...fields, ...dependentField].filter(\n (obj, index, self) =>\n index ===\n self.findIndex((o) => JSON.stringify(o) === JSON.stringify(obj))\n );\n setFields(\n currentFields?.map((field) => {\n if (field.id === id) {\n return property === \"type\"\n ? { ...field, surveySparrowField: null, mappedType: value, id: id.toString() }\n : property === \"integrationFieldType\"\n ? { ...field, defaultValue: null, [property]: value }\n : { ...field, [property]: value };\n } else {\n return { ...field };\n }\n }) as FieldType[]\n );\n };\n\n const hasRequiredProps = () =>\n !!fields &&\n !!setFields &&\n !!integrationFields &&\n !!setIntegrationFields && (!!token || Object.keys(surveyDetails?.surveyProperties ?? {})?.length > 0);\n\n const fetchInitialMappingData = async (): Promise<void> => {\n setLoader(true);\n try {\n if(Object.keys(surveyDetails?.surveyProperties ?? {})?.length > 0){\n setSSMappingData({\n questions: (surveyDetails?.surveyProperties?.questions as any) || [],\n contactProperties: (surveyDetails?.surveyProperties?.contactProperties as any) || [],\n variables: (surveyDetails?.surveyProperties?.variables as any) || [],\n expressions: (surveyDetails?.surveyProperties?.expressions as any) || [],\n });\n } else {\n const [questions, variables, contactProperties, expressions] =\n await Promise.all([\n fetchSurveyQuestions(apiURL, surveyId, token ?? \"\"),\n fetchSurveyVariables(apiURL, surveyId, token ?? \"\"),\n fetchContactProperties(apiURL, token ?? \"\"),\n fetchSurveyExpression(apiURL, surveyId, token ?? \"\"),\n ]);\n setSSMappingData({\n questions: (questions as any) || [],\n contactProperties: (contactProperties as any) || [],\n variables: (variables as any) || [],\n expressions: (expressions as any) || [],\n });\n }\n\n } catch (error) {\n console.error(MAPPING_ERROR_MESSAGES.FETCH_ERROR, error);\n setSSMappingData({\n questions: [],\n contactProperties: [],\n variables: [],\n expressions: [],\n });\n } finally {\n setLoader(false);\n }\n };\n\n const getEssentialFieldsNumber = (length: number): string => {\n const numberMapping: Record<number, string> = {\n 1: \"one\",\n 2: \"two\",\n 3: \"three\",\n 4: \"four\",\n 5: \"five\",\n 6: \"six\",\n 7: \"seven\",\n 8: \"eight\",\n 9: \"nine\",\n 10: \"ten\",\n };\n return numberMapping[length] ?? \"These\";\n };\n\n useEffect(() => {\n setFields(\n fields?.length === 0\n ? [{ ...DEFAULT_FIELD_VALUE, id: uuid() } as FieldType]\n : fields?.map((field) => ({ ...field, id: uuid() })) as FieldType[]\n );\n if (!!surveyId) {\n fetchInitialMappingData();\n } else {\n setLoader(false);\n }\n }, [token, surveyId]);\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\">\n {hasRequiredProps() ? (\n <>\n {loader ? (\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n css={{ height: \"calc(100vh - 57px)\" }}\n >\n <Spinner />\n </Flex>\n ) : (\n <Box css={{ maxWidth: 1120, width: \"100%\", marginBlock: \"$40\" }}>\n {hasConditions ? (\n <>\n <Flex gap=\"$2\" css={{ marginBlock: \"$8\" }}>\n <Text size=\"sm\" css={{ color: \"$neutral500\" }}>\n Survey Name:\n </Text>\n <Text\n size=\"sm\"\n weight={\"medium\"}\n css={{ color: \"$neutral800\" }}\n >\n {surveyDetails.surveyName}\n </Text>\n </Flex>\n <Heading\n size=\"h5\"\n css={{ color: \"$neutral900\" }}\n >{`Map to ${integrationName}`}</Heading>\n {mappingConditions?.filterGroups?.length ? (\n <MappingCondition\n existingContions={mappingConditions}\n setExistingCondtions={setMappingConditions}\n conditionData={conditionData || []}\n renderTrigger={(onEditClick) => (\n <ConditionCard\n isEditable={true}\n conditionsData={mappingConditions}\n onEditClick={onEditClick}\n onClearClick={() =>\n setMappingConditions && setMappingConditions(undefined)\n }\n showMoreMenu={true}\n />\n )}\n />\n ) : (\n <Flex gap=\"$2\" css={{ marginTop: \"$8\" }}>\n <Text size=\"sm\" css={{ color: \"$neutral500\" }}>\n {conditionDescription}\n </Text>\n <MappingCondition\n existingContions={mappingConditions}\n setExistingCondtions={setMappingConditions}\n conditionData={conditionData || []}\n />\n </Flex>\n )}\n \n </>\n ) : (\n <>\n <Heading\n size=\"h5\"\n css={{ color: \"$neutral900\" }}\n >{`Map to ${integrationName}`}</Heading>\n <Flex gap=\"$2\" css={{ marginTop: \"$4\" }}>\n <Text size=\"sm\" css={{ color: \"$neutral500\" }}>\n Survey Name:\n </Text>\n <Text\n size=\"sm\"\n weight={\"medium\"}\n css={{ color: \"$neutral800\" }}\n >\n {surveyDetails.surveyName}\n </Text>\n </Flex>\n </>\n )}\n\n {!!essentialFields?.length && (\n <Box\n css={{\n width: \"100%\",\n paddingBlock: \"$12 $20\",\n borderBottom: \"$borderWidths$xs dashed $neutral200\",\n maxWidth: 1084,\n }}\n >\n <Text\n size=\"md\"\n css={{\n color: \"$neutral500\",\n lineHeight: \"$md\",\n marginTop: \"$4\",\n }}\n >\n This connection requires{\" \"}\n <PlaceholderSpan color=\"$neutral600\">\n {essentialFields?.length}\n </PlaceholderSpan>\n <PlaceholderSpan color=\"$negative500\">*</PlaceholderSpan>{\" \"}\n essential mappings\n </Text>\n <Flex\n flexDirection=\"column\"\n gap=\"$20\"\n css={{ marginTop: \"$12\" }}\n >\n {essentialFields?.map((field, idx) => (\n <Field\n hasSurveyProperties={\n Object.keys(surveyDetails?.surveyProperties ?? {})\n ?.length > 0\n }\n surveyType={surveyType}\n havingTypeDropdown={havingTypeDropdown}\n key={field.id}\n field={field}\n integrationName={integrationName}\n handleFieldValue={(\n id: string | number,\n property: string,\n value: FormFieldValue\n ) => handleFieldValue(id, property, value)}\n hasCustomMenuProperty={hasCustomMenuProperty}\n integrationFields={integrationFields}\n isBtnDisabled={commonFields.length === 1}\n isFirstField={idx === 0}\n ssMappingData={ssMappingData}\n showCustomPropertyModal={() => {\n setShowCustomPropertyModal(true);\n }}\n />\n ))}\n </Flex>\n </Box>\n )}\n <Flex flexDirection=\"column\" gap=\"$16\" css={{ marginTop: \"$16\" }}>\n {commonFields?.map((field, idx) => {\n return (\n <Field\n hasSurveyProperties={\n Object.keys(surveyDetails?.surveyProperties ?? {})\n ?.length > 0\n }\n surveyType={surveyType}\n havingTypeDropdown={havingTypeDropdown}\n key={field.id}\n field={field}\n integrationName={integrationName}\n removeField={() => {\n setFields((prev) =>\n prev.filter(\n (currentField) => currentField.id !== field.id\n )\n );\n }}\n handleFieldValue={(\n id: string | number,\n property: string,\n value: FormFieldValue\n ) => handleFieldValue(id, property, value)}\n hasCustomMenuProperty={hasCustomMenuProperty}\n integrationFields={integrationFields}\n isBtnDisabled={false}\n isFirstField={idx === 0}\n ssMappingData={ssMappingData}\n showCustomPropertyModal={() => {\n setShowCustomPropertyModal(true);\n }}\n />\n );\n })}\n </Flex>\n <Button\n leftIcon={<PlusIcon />}\n color=\"default\"\n css={{ marginTop: \"$10\" }}\n onClick={() =>\n setFields([\n ...fields,\n {\n ...DEFAULT_FIELD_VALUE,\n id: uuid(),\n } as FieldType,\n ])\n }\n size=\"md\"\n >\n New mapping field\n </Button>\n {customList?.hasCustomList && (\n <Flex\n css={{ marginTop: \"$40\" }}\n flexDirection=\"column\"\n gap=\"$8\"\n >\n <Flex flexDirection=\"column\" gap=\"$3\">\n <Heading size=\"h5\">Choose a List</Heading>\n <Text css={{ color: \"$neutral500\" }} size=\"sm\">\n Pick a list to save mapped fields; If not, they'll be\n saved under all profiles.\n </Text>\n </Flex>\n <Select\n css={{ maxWidth: 400, width: \"100%\" }}\n size=\"lg\"\n options={customList.options}\n value={customList.value}\n placeholder=\"\"\n onChange={(value: any) => customList.onChangeHandler(value)}\n />\n </Flex>\n )}\n {/* Old Response */}\n {oldResponse?.hasOldResponse && (\n <Checkbox\n onChange={(value: any) => oldResponse.onChangeHandler(value)}\n css={{ marginBlock: \"$8\", cursor: \"pointer\" }}\n checked={oldResponse.value as boolean}\n >\n <FormLabel size=\"sm\">Import Old Response</FormLabel>\n </Checkbox>\n )}\n {showCustomPropertyModal && (\n <ImportModal\n onCloseHandler={() => setShowCustomPropertyModal(false)}\n onInputHandler={(value: any) => setCustomPropertyField(value)}\n onSaveHandler={() => {\n setIntegrationFields &&\n setIntegrationFields((prev) => [\n ...prev,\n {\n id: customPropertyField,\n label: customPropertyField,\n value: customPropertyField,\n type: \"string\",\n } as unknown as IntegrationFieldType,\n ]);\n setShowCustomPropertyModal(false);\n }}\n />\n )}\n </Box>\n )}\n </>\n ) : (\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n css={{ height: \"100%\" }}\n >\n <Heading size=\"h4\" weight=\"bold\">\n Provide the needed props to import Mapping Template\n </Heading>\n </Flex>\n )}\n </Flex>\n );\n};\n"],"names":["_a","uuid","React"],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { Box } from '../../node_modules/@sparrowengg/twigs-react/dist/es/box/box.js';
|
|
3
|
+
import { Flex } from '../../node_modules/@sparrowengg/twigs-react/dist/es/flex/flex.js';
|
|
4
|
+
import { Text } from '../../node_modules/@sparrowengg/twigs-react/dist/es/text/text.js';
|
|
5
|
+
import { Button } from '../../node_modules/@sparrowengg/twigs-react/dist/es/button/button.js';
|
|
6
|
+
import { PencilIcon } from '../../node_modules/@sparrowengg/twigs-react-icons/dist/es/icons/pencil.js';
|
|
7
|
+
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '../../node_modules/@sparrowengg/twigs-react/dist/es/dropdown/dropdown.js';
|
|
8
|
+
import { IconButton } from '../../node_modules/@sparrowengg/twigs-react/dist/es/button/icon-button.js';
|
|
9
|
+
import { EllipsisVerticalIcon } from '../../node_modules/@sparrowengg/twigs-react-icons/dist/es/icons/ellipsis-vertical.js';
|
|
10
|
+
|
|
11
|
+
const formatValue = (filter) => {
|
|
12
|
+
var _a;
|
|
13
|
+
const { connector, value } = filter;
|
|
14
|
+
if (!connector)
|
|
15
|
+
return "";
|
|
16
|
+
const dataType = connector.dataType;
|
|
17
|
+
switch (dataType) {
|
|
18
|
+
case "SINGLE_LINE_TEXT":
|
|
19
|
+
return value.SINGLE_LINE_TEXT || "";
|
|
20
|
+
case "NUMBER":
|
|
21
|
+
return ((_a = value.NUMBER) == null ? void 0 : _a.toString()) || "";
|
|
22
|
+
case "DATE":
|
|
23
|
+
if (value.DATE) {
|
|
24
|
+
const date = new Date(value.DATE);
|
|
25
|
+
return date.toLocaleDateString("en-US", {
|
|
26
|
+
year: "numeric",
|
|
27
|
+
month: "short",
|
|
28
|
+
day: "numeric"
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return "";
|
|
32
|
+
case "DATE_RANGE":
|
|
33
|
+
if (value.DATE_RANGE) {
|
|
34
|
+
const startDate = new Date(value.DATE_RANGE.start);
|
|
35
|
+
const endDate = new Date(value.DATE_RANGE.end);
|
|
36
|
+
const formatDate = (d) => d.toLocaleDateString("en-US", {
|
|
37
|
+
year: "numeric",
|
|
38
|
+
month: "short",
|
|
39
|
+
day: "numeric"
|
|
40
|
+
});
|
|
41
|
+
return `${formatDate(startDate)} to ${formatDate(endDate)}`;
|
|
42
|
+
}
|
|
43
|
+
return "";
|
|
44
|
+
case "SINGLE_SELECT":
|
|
45
|
+
return value.SINGLE_SELECT || "";
|
|
46
|
+
case "MULTI_SELECT":
|
|
47
|
+
if (value.MULTI_SELECT && value.MULTI_SELECT.length > 0) {
|
|
48
|
+
const choices = connector.choices;
|
|
49
|
+
if (choices && Array.isArray(choices)) {
|
|
50
|
+
const labels = value.MULTI_SELECT.map((val) => {
|
|
51
|
+
const choice = choices.find((c) => c.value === val);
|
|
52
|
+
return choice ? choice.label : val;
|
|
53
|
+
});
|
|
54
|
+
return labels.join(", ");
|
|
55
|
+
}
|
|
56
|
+
return value.MULTI_SELECT.join(", ");
|
|
57
|
+
}
|
|
58
|
+
return "";
|
|
59
|
+
case "MULTI_LINE_TEXT":
|
|
60
|
+
return value.MULTI_LINE_TEXT || "";
|
|
61
|
+
default:
|
|
62
|
+
return "";
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const ConfigureIcon = () => /* @__PURE__ */ React__default.createElement(
|
|
66
|
+
"svg",
|
|
67
|
+
{
|
|
68
|
+
width: "20",
|
|
69
|
+
height: "20",
|
|
70
|
+
viewBox: "0 0 20 20",
|
|
71
|
+
fill: "none",
|
|
72
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
73
|
+
},
|
|
74
|
+
/* @__PURE__ */ React__default.createElement("g", { "clip-path": "url(#clip0_1958_11629)" }, /* @__PURE__ */ React__default.createElement(
|
|
75
|
+
"path",
|
|
76
|
+
{
|
|
77
|
+
d: "M17.5 14.1668H14.1667M10.8333 14.1668H2.5M2.5 5.8335H5.83333M9.16667 5.8335H17.5M11.6667 11.6668H13.3333C13.7933 11.6668 14.1667 12.0402 14.1667 12.5002V15.8335C14.1667 16.2935 13.7933 16.6668 13.3333 16.6668H11.6667C11.2067 16.6668 10.8333 16.2935 10.8333 15.8335V12.5002C10.8333 12.0402 11.2067 11.6668 11.6667 11.6668ZM8.33333 8.3335H6.66667C6.20667 8.3335 5.83333 7.96016 5.83333 7.50016V4.16683C5.83333 3.70683 6.20667 3.3335 6.66667 3.3335H8.33333C8.79333 3.3335 9.16667 3.70683 9.16667 4.16683V7.50016C9.16667 7.96016 8.79333 8.3335 8.33333 8.3335Z",
|
|
78
|
+
stroke: "#64748B",
|
|
79
|
+
"stroke-linecap": "round",
|
|
80
|
+
"stroke-linejoin": "round"
|
|
81
|
+
}
|
|
82
|
+
)),
|
|
83
|
+
/* @__PURE__ */ React__default.createElement("defs", null, /* @__PURE__ */ React__default.createElement("clipPath", { id: "clip0_1958_11629" }, /* @__PURE__ */ React__default.createElement("rect", { width: "20", height: "20", fill: "white" })))
|
|
84
|
+
);
|
|
85
|
+
const ConditionCard = ({
|
|
86
|
+
conditionsData,
|
|
87
|
+
onEditClick,
|
|
88
|
+
onClearClick,
|
|
89
|
+
showMoreMenu = true,
|
|
90
|
+
isEditable = false
|
|
91
|
+
}) => {
|
|
92
|
+
if (!conditionsData || conditionsData.filterGroups.length === 0) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const globalConnectorText = conditionsData.globalConnector === "ALL" ? "all" : "any";
|
|
96
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
97
|
+
Box,
|
|
98
|
+
{
|
|
99
|
+
css: {
|
|
100
|
+
marginTop: "$8",
|
|
101
|
+
backgroundColor: !isEditable ? "transparent" : "#F8F8F8",
|
|
102
|
+
borderRadius: "$lg",
|
|
103
|
+
padding: "$6 !important"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
/* @__PURE__ */ React__default.createElement(Flex, { flexDirection: "column", gap: "$2" }, /* @__PURE__ */ React__default.createElement(
|
|
107
|
+
Flex,
|
|
108
|
+
{
|
|
109
|
+
alignItems: "center",
|
|
110
|
+
gap: "$4",
|
|
111
|
+
css: {
|
|
112
|
+
maxHeight: "20px"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
/* @__PURE__ */ React__default.createElement(ConfigureIcon, null),
|
|
116
|
+
/* @__PURE__ */ React__default.createElement(Flex, { alignItems: "center", gap: "$8", css: { flex: 1 } }, /* @__PURE__ */ React__default.createElement(
|
|
117
|
+
Text,
|
|
118
|
+
{
|
|
119
|
+
size: "sm",
|
|
120
|
+
css: {
|
|
121
|
+
color: "$neutral900",
|
|
122
|
+
fontFamily: "DM Sans"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"When",
|
|
126
|
+
" ",
|
|
127
|
+
/* @__PURE__ */ React__default.createElement(Text, { as: "span", weight: "bold", css: { color: "$neutral900" } }, globalConnectorText),
|
|
128
|
+
" ",
|
|
129
|
+
"of these conditions are met:"
|
|
130
|
+
)),
|
|
131
|
+
isEditable ? /* @__PURE__ */ React__default.createElement(Flex, { alignItems: "center", gap: "$4" }, /* @__PURE__ */ React__default.createElement(
|
|
132
|
+
Button,
|
|
133
|
+
{
|
|
134
|
+
leftIcon: /* @__PURE__ */ React__default.createElement(PencilIcon, null),
|
|
135
|
+
size: "sm",
|
|
136
|
+
variant: "ghost",
|
|
137
|
+
color: "primary",
|
|
138
|
+
onClick: onEditClick,
|
|
139
|
+
css: {
|
|
140
|
+
fontFamily: "DM Sans",
|
|
141
|
+
fontWeight: "$5"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"Edit Conditions"
|
|
145
|
+
), showMoreMenu && onClearClick && /* @__PURE__ */ React__default.createElement(DropdownMenu, { size: "sm" }, /* @__PURE__ */ React__default.createElement(DropdownMenuTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement(
|
|
146
|
+
IconButton,
|
|
147
|
+
{
|
|
148
|
+
size: "sm",
|
|
149
|
+
icon: /* @__PURE__ */ React__default.createElement(EllipsisVerticalIcon, null),
|
|
150
|
+
variant: "ghost",
|
|
151
|
+
color: "default",
|
|
152
|
+
css: {
|
|
153
|
+
borderRadius: "$sm"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
)), /* @__PURE__ */ React__default.createElement(DropdownMenuContent, { align: "end" }, /* @__PURE__ */ React__default.createElement(DropdownMenuItem, { onClick: onClearClick }, "Clear Conditions")))) : null
|
|
157
|
+
), conditionsData.filterGroups.map((group, groupIndex) => /* @__PURE__ */ React__default.createElement(
|
|
158
|
+
Box,
|
|
159
|
+
{
|
|
160
|
+
key: groupIndex,
|
|
161
|
+
css: {
|
|
162
|
+
paddingLeft: "$14"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
group.filters.map((filter, filterIndex) => {
|
|
166
|
+
var _a;
|
|
167
|
+
const propertyLabel = filter.property.label;
|
|
168
|
+
const operatorLabel = ((_a = filter.connector) == null ? void 0 : _a.label) || "";
|
|
169
|
+
const formattedValue = formatValue(filter);
|
|
170
|
+
const prefix = filterIndex === 0 ? groupIndex === 0 ? "When" : "And" : filter.comparator.toLowerCase();
|
|
171
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
172
|
+
Text,
|
|
173
|
+
{
|
|
174
|
+
key: filterIndex,
|
|
175
|
+
size: "sm",
|
|
176
|
+
weight: "medium",
|
|
177
|
+
css: {
|
|
178
|
+
color: "$neutral900",
|
|
179
|
+
fontFamily: "DM Sans",
|
|
180
|
+
lineHeight: "$md"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
prefix,
|
|
184
|
+
" contact property",
|
|
185
|
+
" ",
|
|
186
|
+
/* @__PURE__ */ React__default.createElement(Text, { as: "span", weight: "bold", css: { color: "$neutral900" } }, propertyLabel),
|
|
187
|
+
" ",
|
|
188
|
+
operatorLabel,
|
|
189
|
+
" ",
|
|
190
|
+
/* @__PURE__ */ React__default.createElement(Text, { as: "span", weight: "bold", css: { color: "$neutral900" } }, formattedValue)
|
|
191
|
+
);
|
|
192
|
+
})
|
|
193
|
+
)))
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export { ConditionCard };
|
|
198
|
+
//# sourceMappingURL=conditionDescriptionBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionDescriptionBuilder.js","sources":["../../../../src/mapping/utils/conditionDescriptionBuilder.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Text,\n Box,\n Flex,\n Button,\n IconButton,\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n} from \"@sparrowengg/twigs-react\";\nimport {\n PencilIcon,\n EllipsisVerticalIcon,\n} from \"@sparrowengg/twigs-react-icons\";\n\ntype ComparatorType = \"AND\" | \"OR\";\ntype GlobalConnectorType = \"ALL\" | \"ANY\";\n\ntype FilterType = {\n comparator: ComparatorType;\n connector?: {\n dataType: string;\n label: string;\n value: string;\n type: string;\n };\n property: {\n label: string;\n value: string;\n selectionPath?: Array<{ label: string; value: string }>;\n };\n value: {\n NUMBER: number | null;\n DATE: string | null;\n DATE_RANGE: { start: string; end: string } | null;\n DATE_TIME_TIMEZONE: any | null;\n SINGLE_LINE_TEXT: string | null;\n MULTI_LINE_TEXT: string | null;\n SINGLE_SELECT: string | null;\n MULTI_SELECT: string[] | null;\n };\n};\n\ntype FilterGroupType = {\n filters: FilterType[];\n};\n\ntype ConditionsDataType = {\n globalConnector: GlobalConnectorType;\n filterGroups: FilterGroupType[];\n};\n\n/**\n * Formats a value based on its data type\n */\nconst formatValue = (filter: FilterType): string => {\n const { connector, value } = filter;\n\n if (!connector) return \"\";\n\n const dataType = connector.dataType;\n\n switch (dataType) {\n case \"SINGLE_LINE_TEXT\":\n return value.SINGLE_LINE_TEXT || \"\";\n\n case \"NUMBER\":\n return value.NUMBER?.toString() || \"\";\n\n case \"DATE\":\n if (value.DATE) {\n // Format date to be more readable\n const date = new Date(value.DATE);\n return date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n }\n return \"\";\n\n case \"DATE_RANGE\":\n if (value.DATE_RANGE) {\n const startDate = new Date(value.DATE_RANGE.start);\n const endDate = new Date(value.DATE_RANGE.end);\n const formatDate = (d: Date) =>\n d.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n return `${formatDate(startDate)} to ${formatDate(endDate)}`;\n }\n return \"\";\n\n case \"SINGLE_SELECT\":\n return value.SINGLE_SELECT || \"\";\n\n case \"MULTI_SELECT\":\n if (value.MULTI_SELECT && value.MULTI_SELECT.length > 0) {\n // Get labels from choices if available\n const choices = (connector as any).choices;\n if (choices && Array.isArray(choices)) {\n const labels = value.MULTI_SELECT.map((val) => {\n const choice = choices.find((c: any) => c.value === val);\n return choice ? choice.label : val;\n });\n return labels.join(\", \");\n }\n return value.MULTI_SELECT.join(\", \");\n }\n return \"\";\n\n case \"MULTI_LINE_TEXT\":\n return value.MULTI_LINE_TEXT || \"\";\n\n default:\n return \"\";\n }\n};\n\n/**\n * Builds a description for a single filter\n */\nconst buildFilterDescription = (filter: FilterType): React.ReactNode => {\n // Build property path if selectionPath exists\n let propertyLabel = filter.property.label;\n if (\n filter.property.selectionPath &&\n filter.property.selectionPath.length > 0\n ) {\n // Skip the first item (category) and show the rest if there are more than 1 items\n if (filter.property.selectionPath.length > 1) {\n const pathLabels = filter.property.selectionPath\n .slice(1)\n .map((p) => p.label);\n propertyLabel = [...pathLabels, filter.property.label].join(\" > \");\n }\n }\n\n const operatorLabel = filter.connector?.label || \"\";\n const formattedValue = formatValue(filter);\n\n return (\n <>\n <Text\n as=\"span\"\n weight=\"medium\"\n className=\"dm-sans\"\n css={{ color: \"$neutral700\", fontFamily: \"DM Sans !important\" }}\n >\n {propertyLabel}\n </Text>{\" \"}\n {operatorLabel}{\" \"}\n <Text\n as=\"span\"\n weight=\"bold\"\n className=\"dm-sans\"\n css={{ color: \"$neutral900\", fontFamily: \"DM Sans !important\" }}\n >\n {formattedValue}\n </Text>\n </>\n );\n};\n\n/**\n * Builds a description for a filter group\n */\nconst buildGroupDescription = (group: FilterGroupType): React.ReactNode => {\n if (group.filters.length === 0) return null;\n\n return (\n <>\n {group.filters.map((filter, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <>\n {\" \"}\n <Text\n as=\"span\"\n weight=\"medium\"\n className=\"dm-sans\"\n css={{ color: \"$neutral700\", fontFamily: \"DM Sans !important\" }}\n >\n {filter.comparator.toLowerCase()}\n </Text>{\" \"}\n </>\n )}\n {buildFilterDescription(filter)}\n </React.Fragment>\n ))}\n </>\n );\n};\n\n/**\n * Builds the complete condition description\n */\nexport const buildConditionDescription = (\n conditionsData: ConditionsDataType\n): React.ReactNode => {\n if (!conditionsData || conditionsData.filterGroups.length === 0) {\n return null;\n }\n\n const globalConnectorText =\n conditionsData.globalConnector === \"ALL\" ? \"all\" : \"any\";\n\n return (\n <>\n When{\" \"}\n <Text\n as=\"span\"\n weight=\"bold\"\n className=\"dm-sans\"\n css={{ color: \"$neutral900\", fontFamily: \"DM Sans !important\" }}\n >\n {globalConnectorText}\n </Text>{\" \"}\n of these conditions are met:{\" \"}\n {conditionsData.filterGroups.map((group, groupIndex) => (\n <React.Fragment key={groupIndex}>\n {groupIndex > 0 && (\n <>\n {\" \"}\n <Text\n as=\"span\"\n weight=\"medium\"\n className=\"dm-sans\"\n css={{ color: \"$neutral700\", fontFamily: \"DM Sans !important\" }}\n >\n or\n </Text>{\" \"}\n </>\n )}\n ({buildGroupDescription(group)})\n </React.Fragment>\n ))}\n </>\n );\n};\n\n/**\n * Alternative: Builds a more detailed, multi-line condition description\n */\nexport const buildDetailedConditionDescription = (\n conditionsData: ConditionsDataType\n): React.ReactNode => {\n if (!conditionsData || conditionsData.filterGroups.length === 0) {\n return null;\n }\n\n const globalConnectorText =\n conditionsData.globalConnector === \"ALL\" ? \"all\" : \"any\";\n\n return (\n <div>\n <Text\n size=\"sm\"\n css={{ color: \"$neutral500\", fontFamily: \"DM Sans !important\" }}\n >\n When{\" \"}\n <Text\n as=\"span\"\n weight=\"bold\"\n className=\"dm-sans\"\n css={{ color: \"$neutral900\", fontFamily: \"DM Sans !important\" }}\n >\n {globalConnectorText}\n </Text>{\" \"}\n of these conditions are met:\n </Text>\n {conditionsData.filterGroups.map((group, groupIndex) => (\n <div key={groupIndex} style={{ marginTop: \"4px\", marginLeft: \"8px\" }}>\n <Text\n size=\"sm\"\n css={{ color: \"$neutral500\", fontFamily: \"DM Sans !important\" }}\n >\n {groupIndex > 0 && (\n <>\n <Text\n as=\"span\"\n weight=\"bold\"\n css={{\n color: \"$neutral700\",\n fontFamily: \"DM Sans !important\",\n }}\n >\n OR\n </Text>{\" \"}\n </>\n )}\n {buildGroupDescription(group)}\n </Text>\n </div>\n ))}\n </div>\n );\n};\n\n/**\n * Configure Icon Component\n */\nconst ConfigureIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_1958_11629)\">\n <path\n d=\"M17.5 14.1668H14.1667M10.8333 14.1668H2.5M2.5 5.8335H5.83333M9.16667 5.8335H17.5M11.6667 11.6668H13.3333C13.7933 11.6668 14.1667 12.0402 14.1667 12.5002V15.8335C14.1667 16.2935 13.7933 16.6668 13.3333 16.6668H11.6667C11.2067 16.6668 10.8333 16.2935 10.8333 15.8335V12.5002C10.8333 12.0402 11.2067 11.6668 11.6667 11.6668ZM8.33333 8.3335H6.66667C6.20667 8.3335 5.83333 7.96016 5.83333 7.50016V4.16683C5.83333 3.70683 6.20667 3.3335 6.66667 3.3335H8.33333C8.79333 3.3335 9.16667 3.70683 9.16667 4.16683V7.50016C9.16667 7.96016 8.79333 8.3335 8.33333 8.3335Z\"\n stroke=\"#64748B\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1958_11629\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport interface ConditionCardProps {\n isEditable?: boolean;\n conditionsData: ConditionsDataType;\n onEditClick?: () => void;\n onClearClick?: () => void;\n showMoreMenu?: boolean;\n}\n\n/**\n * Builds a card-style condition display with edit and clear actions\n */\nexport const ConditionCard: React.FC<ConditionCardProps> = ({\n conditionsData,\n onEditClick,\n onClearClick,\n showMoreMenu = true,\n isEditable = false,\n}) => {\n if (!conditionsData || conditionsData.filterGroups.length === 0) {\n return null;\n }\n\n const globalConnectorText =\n conditionsData.globalConnector === \"ALL\" ? \"all\" : \"any\";\n\n return (\n <Box\n css={{\n marginTop: \"$8\",\n backgroundColor: !isEditable ? \"transparent\" : \"#F8F8F8\",\n borderRadius: \"$lg\",\n padding: \"$6 !important\",\n }}\n >\n <Flex flexDirection=\"column\" gap=\"$2\">\n {/* Header Row */}\n <Flex\n alignItems=\"center\"\n gap=\"$4\"\n css={{\n maxHeight: \"20px\",\n }}\n >\n <ConfigureIcon />\n <Flex alignItems=\"center\" gap=\"$8\" css={{ flex: 1 }}>\n <Text\n size=\"sm\"\n css={{\n color: \"$neutral900\",\n fontFamily: \"DM Sans\",\n }}\n >\n When{\" \"}\n <Text as=\"span\" weight=\"bold\" css={{ color: \"$neutral900\" }}>\n {globalConnectorText}\n </Text>{\" \"}\n of these conditions are met:\n </Text>\n </Flex>\n {isEditable ? <Flex alignItems=\"center\" gap=\"$4\">\n <Button\n leftIcon={<PencilIcon />}\n size=\"sm\"\n variant=\"ghost\"\n color=\"primary\"\n onClick={onEditClick}\n css={{\n fontFamily: \"DM Sans\",\n fontWeight: \"$5\",\n }}\n >\n Edit Conditions\n </Button>\n {showMoreMenu && onClearClick && (\n <DropdownMenu size=\"sm\">\n <DropdownMenuTrigger asChild>\n <IconButton\n size=\"sm\"\n icon={<EllipsisVerticalIcon />}\n variant=\"ghost\"\n color=\"default\"\n css={{\n borderRadius: \"$sm\",\n }}\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={onClearClick}>\n Clear Conditions\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </Flex> : null}\n </Flex>\n\n {/* Condition Groups */}\n {conditionsData.filterGroups.map((group, groupIndex) => (\n <Box\n key={groupIndex}\n css={{\n paddingLeft: \"$14\",\n }}\n >\n {group.filters.map((filter, filterIndex) => {\n const propertyLabel = filter.property.label;\n const operatorLabel = filter.connector?.label || \"\";\n const formattedValue = formatValue(filter);\n\n const prefix =\n filterIndex === 0\n ? groupIndex === 0\n ? \"When\"\n : \"And\"\n : filter.comparator.toLowerCase();\n\n return (\n <Text\n key={filterIndex}\n size=\"sm\"\n weight=\"medium\"\n css={{\n color: \"$neutral900\",\n fontFamily: \"DM Sans\",\n lineHeight: \"$md\",\n }}\n >\n {prefix} contact property{\" \"}\n <Text as=\"span\" weight=\"bold\" css={{ color: \"$neutral900\" }}>\n {propertyLabel}\n </Text>{\" \"}\n {operatorLabel}{\" \"}\n <Text as=\"span\" weight=\"bold\" css={{ color: \"$neutral900\" }}>\n {formattedValue}\n </Text>\n </Text>\n );\n })}\n </Box>\n ))}\n </Flex>\n </Box>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;AAyDA,MAAM,WAAA,GAAc,CAAC,MAA+B,KAAA;AAzDpD,EAAA,IAAA,EAAA,CAAA;AA0DE,EAAM,MAAA,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,MAAA,CAAA;AAE7B,EAAA,IAAI,CAAC,SAAA;AAAW,IAAO,OAAA,EAAA,CAAA;AAEvB,EAAA,MAAM,WAAW,SAAU,CAAA,QAAA,CAAA;AAE3B,EAAA,QAAQ,QAAU;AAAA,IAChB,KAAK,kBAAA;AACH,MAAA,OAAO,MAAM,gBAAoB,IAAA,EAAA,CAAA;AAAA,IAEnC,KAAK,QAAA;AACH,MAAO,OAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,QAAc,EAAA,KAAA,EAAA,CAAA;AAAA,IAErC,KAAK,MAAA;AACH,MAAA,IAAI,MAAM,IAAM,EAAA;AAEd,QAAA,MAAM,IAAO,GAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAChC,QAAO,OAAA,IAAA,CAAK,mBAAmB,OAAS,EAAA;AAAA,UACtC,IAAM,EAAA,SAAA;AAAA,UACN,KAAO,EAAA,OAAA;AAAA,UACP,GAAK,EAAA,SAAA;AAAA,SACN,CAAA,CAAA;AAAA,OACH;AACA,MAAO,OAAA,EAAA,CAAA;AAAA,IAET,KAAK,YAAA;AACH,MAAA,IAAI,MAAM,UAAY,EAAA;AACpB,QAAA,MAAM,SAAY,GAAA,IAAI,IAAK,CAAA,KAAA,CAAM,WAAW,KAAK,CAAA,CAAA;AACjD,QAAA,MAAM,OAAU,GAAA,IAAI,IAAK,CAAA,KAAA,CAAM,WAAW,GAAG,CAAA,CAAA;AAC7C,QAAA,MAAM,UAAa,GAAA,CAAC,CAClB,KAAA,CAAA,CAAE,mBAAmB,OAAS,EAAA;AAAA,UAC5B,IAAM,EAAA,SAAA;AAAA,UACN,KAAO,EAAA,OAAA;AAAA,UACP,GAAK,EAAA,SAAA;AAAA,SACN,CAAA,CAAA;AACH,QAAA,OAAO,GAAG,UAAW,CAAA,SAAS,CAAC,CAAO,IAAA,EAAA,UAAA,CAAW,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,OAC3D;AACA,MAAO,OAAA,EAAA,CAAA;AAAA,IAET,KAAK,eAAA;AACH,MAAA,OAAO,MAAM,aAAiB,IAAA,EAAA,CAAA;AAAA,IAEhC,KAAK,cAAA;AACH,MAAA,IAAI,KAAM,CAAA,YAAA,IAAgB,KAAM,CAAA,YAAA,CAAa,SAAS,CAAG,EAAA;AAEvD,QAAA,MAAM,UAAW,SAAkB,CAAA,OAAA,CAAA;AACnC,QAAA,IAAI,OAAW,IAAA,KAAA,CAAM,OAAQ,CAAA,OAAO,CAAG,EAAA;AACrC,UAAA,MAAM,MAAS,GAAA,KAAA,CAAM,YAAa,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA;AAC7C,YAAA,MAAM,SAAS,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAW,KAAA,CAAA,CAAE,UAAU,GAAG,CAAA,CAAA;AACvD,YAAO,OAAA,MAAA,GAAS,OAAO,KAAQ,GAAA,GAAA,CAAA;AAAA,WAChC,CAAA,CAAA;AACD,UAAO,OAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA;AAAA,SACzB;AACA,QAAO,OAAA,KAAA,CAAM,YAAa,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,OACrC;AACA,MAAO,OAAA,EAAA,CAAA;AAAA,IAET,KAAK,iBAAA;AACH,MAAA,OAAO,MAAM,eAAmB,IAAA,EAAA,CAAA;AAAA,IAElC;AACE,MAAO,OAAA,EAAA,CAAA;AAAA,GACX;AACF,CAAA,CAAA;AAyLA,MAAM,gBAAgB,sBACpBA,cAAA,CAAA,aAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,GAAA;AAAA,kBAENA,cAAA,CAAA,aAAA,CAAC,GAAE,EAAA,EAAA,WAAA,EAAU,wBACX,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAE,EAAA,6iBAAA;AAAA,MACF,MAAO,EAAA,SAAA;AAAA,MACP,gBAAe,EAAA,OAAA;AAAA,MACf,iBAAgB,EAAA,OAAA;AAAA,KAAA;AAAA,GAEpB,CAAA;AAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAS,IAAG,kBACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,CAC5C,CACF,CAAA;AACF,CAAA,CAAA;AAcK,MAAM,gBAA8C,CAAC;AAAA,EAC1D,cAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAe,GAAA,IAAA;AAAA,EACf,UAAa,GAAA,KAAA;AACf,CAAM,KAAA;AACJ,EAAA,IAAI,CAAC,cAAA,IAAkB,cAAe,CAAA,YAAA,CAAa,WAAW,CAAG,EAAA;AAC/D,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,mBACJ,GAAA,cAAA,CAAe,eAAoB,KAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA,CAAA;AAErD,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,GAAK,EAAA;AAAA,QACH,SAAW,EAAA,IAAA;AAAA,QACX,eAAA,EAAiB,CAAC,UAAA,GAAa,aAAgB,GAAA,SAAA;AAAA,QAC/C,YAAc,EAAA,KAAA;AAAA,QACd,OAAS,EAAA,eAAA;AAAA,OACX;AAAA,KAAA;AAAA,oBAECA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,aAAc,EAAA,QAAA,EAAS,KAAI,IAE/B,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,UAAW,EAAA,QAAA;AAAA,QACX,GAAI,EAAA,IAAA;AAAA,QACJ,GAAK,EAAA;AAAA,UACH,SAAW,EAAA,MAAA;AAAA,SACb;AAAA,OAAA;AAAA,mDAEC,aAAc,EAAA,IAAA,CAAA;AAAA,sBACfA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,UAAA,EAAW,QAAS,EAAA,GAAA,EAAI,MAAK,GAAK,EAAA,EAAE,IAAM,EAAA,CAAA,EAC9C,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,GAAK,EAAA;AAAA,YACH,KAAO,EAAA,aAAA;AAAA,YACP,UAAY,EAAA,SAAA;AAAA,WACd;AAAA,SAAA;AAAA,QACD,MAAA;AAAA,QACM,GAAA;AAAA,wBACLA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAG,MAAO,EAAA,MAAA,EAAO,MAAO,EAAA,GAAA,EAAK,EAAE,KAAA,EAAO,aAAc,EAAA,EAAA,EACvD,mBACH,CAAA;AAAA,QAAQ,GAAA;AAAA,QAAI,8BAAA;AAAA,OAGhB,CAAA;AAAA,MACC,6BAAcA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,UAAW,EAAA,QAAA,EAAS,KAAI,IAC1C,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,QAAA,+CAAW,UAAW,EAAA,IAAA,CAAA;AAAA,UACtB,IAAK,EAAA,IAAA;AAAA,UACL,OAAQ,EAAA,OAAA;AAAA,UACR,KAAM,EAAA,SAAA;AAAA,UACN,OAAS,EAAA,WAAA;AAAA,UACT,GAAK,EAAA;AAAA,YACH,UAAY,EAAA,SAAA;AAAA,YACZ,UAAY,EAAA,IAAA;AAAA,WACd;AAAA,SAAA;AAAA,QACD,iBAAA;AAAA,OAED,EACC,YAAgB,IAAA,YAAA,oBACdA,cAAA,CAAA,aAAA,CAAA,YAAA,EAAA,EAAa,MAAK,IACjB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,mBAAoB,EAAA,EAAA,OAAA,EAAO,IAC1B,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,IAAA,+CAAO,oBAAqB,EAAA,IAAA,CAAA;AAAA,UAC5B,OAAQ,EAAA,OAAA;AAAA,UACR,KAAM,EAAA,SAAA;AAAA,UACN,GAAK,EAAA;AAAA,YACH,YAAc,EAAA,KAAA;AAAA,WAChB;AAAA,SAAA;AAAA,OAEJ,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,EAAoB,OAAM,KACzB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,YAAc,EAAA,EAAA,kBAEzC,CACF,CACF,CAEJ,CAAU,GAAA,IAAA;AAAA,OAIX,cAAe,CAAA,YAAA,CAAa,GAAI,CAAA,CAAC,OAAO,UACvC,qBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,UAAA;AAAA,QACL,GAAK,EAAA;AAAA,UACH,WAAa,EAAA,KAAA;AAAA,SACf;AAAA,OAAA;AAAA,MAEC,KAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,QAAQ,WAAgB,KAAA;AAlbxD,QAAA,IAAA,EAAA,CAAA;AAmbc,QAAM,MAAA,aAAA,GAAgB,OAAO,QAAS,CAAA,KAAA,CAAA;AACtC,QAAA,MAAM,aAAgB,GAAA,CAAA,CAAA,EAAA,GAAA,MAAA,CAAO,SAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,KAAS,KAAA,EAAA,CAAA;AACjD,QAAM,MAAA,cAAA,GAAiB,YAAY,MAAM,CAAA,CAAA;AAEzC,QAAM,MAAA,MAAA,GACJ,gBAAgB,CACZ,GAAA,UAAA,KAAe,IACb,MACA,GAAA,KAAA,GACF,MAAO,CAAA,UAAA,CAAW,WAAY,EAAA,CAAA;AAEpC,QACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,GAAK,EAAA,WAAA;AAAA,YACL,IAAK,EAAA,IAAA;AAAA,YACL,MAAO,EAAA,QAAA;AAAA,YACP,GAAK,EAAA;AAAA,cACH,KAAO,EAAA,aAAA;AAAA,cACP,UAAY,EAAA,SAAA;AAAA,cACZ,UAAY,EAAA,KAAA;AAAA,aACd;AAAA,WAAA;AAAA,UAEC,MAAA;AAAA,UAAO,mBAAA;AAAA,UAAkB,GAAA;AAAA,0BAC1BA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAG,MAAO,EAAA,MAAA,EAAO,MAAO,EAAA,GAAA,EAAK,EAAE,KAAA,EAAO,aAAc,EAAA,EAAA,EACvD,aACH,CAAA;AAAA,UAAQ,GAAA;AAAA,UACP,aAAA;AAAA,UAAe,GAAA;AAAA,0BAChBA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAG,MAAO,EAAA,MAAA,EAAO,MAAO,EAAA,GAAA,EAAK,EAAE,KAAA,EAAO,aAAc,EAAA,EAAA,EACvD,cACH,CAAA;AAAA,SACF,CAAA;AAAA,OAEH,CAAA;AAAA,KAEJ,CACH,CAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|