@servicetitan/dte-unlayer 0.142.0 → 0.143.0
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/display-conditions/ConditionRow.d.ts.map +1 -1
- package/dist/display-conditions/ConditionRow.js +17 -9
- package/dist/display-conditions/ConditionRow.js.map +1 -1
- package/dist/display-conditions/LookupValueControl.d.ts.map +1 -1
- package/dist/display-conditions/LookupValueControl.js +4 -0
- package/dist/display-conditions/LookupValueControl.js.map +1 -1
- package/package.json +1 -1
- package/src/display-conditions/ConditionRow.tsx +10 -6
- package/src/display-conditions/LookupValueControl.tsx +12 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionRow.d.ts","sourceRoot":"","sources":["../../src/display-conditions/ConditionRow.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAqB,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAoB,eAAe,EAA0C,MAAM,SAAS,CAAC;AACpG,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,eAAe,CAAC;IAC3B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAaD,wBAAgB,YAAY,CAAC,EACzB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,GACX,EAAE,QAAQ,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"ConditionRow.d.ts","sourceRoot":"","sources":["../../src/display-conditions/ConditionRow.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAqB,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAoB,eAAe,EAA0C,MAAM,SAAS,CAAC;AACpG,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,eAAe,CAAC;IAC3B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAaD,wBAAgB,YAAY,CAAC,EACzB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,GACX,EAAE,QAAQ,CAAC,iBAAiB,CAAC,2CAuR7B"}
|
|
@@ -190,12 +190,16 @@ export function ConditionRow({ canRemove, condition, dataPointOptions, formField
|
|
|
190
190
|
size: "small"
|
|
191
191
|
})
|
|
192
192
|
}),
|
|
193
|
-
/*#__PURE__*/ _jsx(
|
|
193
|
+
/*#__PURE__*/ _jsx(Flex, {
|
|
194
|
+
flex: 1,
|
|
194
195
|
style: {
|
|
195
|
-
|
|
196
|
-
minWidth: 200
|
|
196
|
+
minWidth: 160
|
|
197
197
|
},
|
|
198
198
|
children: /*#__PURE__*/ _jsxs(Combobox.Select, {
|
|
199
|
+
flex: 1,
|
|
200
|
+
style: {
|
|
201
|
+
width: '100%'
|
|
202
|
+
},
|
|
199
203
|
disableClearSelection: true,
|
|
200
204
|
itemToKey: (item)=>{
|
|
201
205
|
var _item_fullKey;
|
|
@@ -226,12 +230,16 @@ export function ConditionRow({ canRemove, condition, dataPointOptions, formField
|
|
|
226
230
|
]
|
|
227
231
|
})
|
|
228
232
|
}),
|
|
229
|
-
/*#__PURE__*/ _jsx(
|
|
233
|
+
/*#__PURE__*/ _jsx(Flex, {
|
|
234
|
+
flex: 1,
|
|
230
235
|
style: {
|
|
231
|
-
|
|
232
|
-
minWidth: 150
|
|
236
|
+
minWidth: 160
|
|
233
237
|
},
|
|
234
238
|
children: /*#__PURE__*/ _jsxs(Combobox.Select, {
|
|
239
|
+
flex: 1,
|
|
240
|
+
style: {
|
|
241
|
+
width: '100%'
|
|
242
|
+
},
|
|
235
243
|
disableClearSelection: true,
|
|
236
244
|
itemToKey: (item)=>{
|
|
237
245
|
var _item_value;
|
|
@@ -268,10 +276,10 @@ export function ConditionRow({ canRemove, condition, dataPointOptions, formField
|
|
|
268
276
|
]
|
|
269
277
|
})
|
|
270
278
|
}),
|
|
271
|
-
!isValueLess && /*#__PURE__*/ _jsx(
|
|
279
|
+
!isValueLess && /*#__PURE__*/ _jsx(Flex, {
|
|
280
|
+
flex: 1,
|
|
272
281
|
style: {
|
|
273
|
-
|
|
274
|
-
minWidth: 150
|
|
282
|
+
minWidth: 160
|
|
275
283
|
},
|
|
276
284
|
children: /*#__PURE__*/ _jsx(LookupValueControl, {
|
|
277
285
|
value: condition.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/ConditionRow.tsx"],"sourcesContent":["import { Button, Chip, Combobox, Flex } from '@servicetitan/anvil2';\nimport TrashIcon from '@servicetitan/anvil2/assets/icons/material/round/delete.svg';\nimport { useEffect, useMemo, useState } from 'react';\nimport { FormInfo, parseFormFieldKey } from '../shared/forms';\nimport { LookupValueControl } from './LookupValueControl';\nimport { NUMBER_OPERATORS, SingleCondition, STRING_OPERATORS, VALUE_LESS_OPERATORS } from './types';\nimport type { DataPointOption, FormFieldOption } from './types';\n\nexport interface ConditionRowProps {\n canRemove: boolean;\n condition: SingleCondition;\n dataPointOptions: DataPointOption[];\n formFieldOptions: FormFieldOption[];\n forms: FormInfo[];\n onChange: (c: SingleCondition) => void;\n onFormSelect: (formId: number) => void;\n onRemove: () => void;\n}\n\ninterface OperatorOption {\n label: string;\n value: string;\n}\n\ninterface SourceOption {\n formId?: number;\n label: string;\n value: string;\n}\n\nexport function ConditionRow({\n canRemove,\n condition,\n dataPointOptions,\n formFieldOptions,\n forms,\n onChange,\n onFormSelect,\n onRemove,\n}: Readonly<ConditionRowProps>) {\n const selectedFormFieldMeta = useMemo(\n () => parseFormFieldKey(condition.dataPointKey),\n [condition.dataPointKey],\n );\n const [selectedSourceValue, setSelectedSourceValue] = useState<string>(\n selectedFormFieldMeta ? `form:${selectedFormFieldMeta.formId}` : 'schema',\n );\n\n const sourceOptions = useMemo<SourceOption[]>(\n () => [\n { label: 'Data point', value: 'schema' },\n ...forms.map(form => ({\n formId: form.id,\n label: form.name,\n value: `form:${form.id}`,\n })),\n ],\n [forms],\n );\n\n const selectedSource = useMemo<SourceOption | null>(() => {\n return (\n sourceOptions.find(opt => opt.value === selectedSourceValue) ?? sourceOptions[0] ?? null\n );\n }, [selectedSourceValue, sourceOptions]);\n\n useEffect(() => {\n if (selectedFormFieldMeta) {\n setSelectedSourceValue(`form:${selectedFormFieldMeta.formId}`);\n return;\n }\n if (!condition.dataPointKey) {\n return;\n }\n const hasSchemaMatch = dataPointOptions.some(opt => opt.fullKey === condition.dataPointKey);\n if (hasSchemaMatch) {\n setSelectedSourceValue('schema');\n }\n }, [condition.dataPointKey, dataPointOptions, selectedFormFieldMeta]);\n\n const currentFormId = selectedSource?.formId;\n const activeDataPointOptions = useMemo(\n () =>\n currentFormId\n ? formFieldOptions.filter(option => option.formId === currentFormId)\n : dataPointOptions,\n [currentFormId, dataPointOptions, formFieldOptions],\n );\n\n const selectedDataPoint = useMemo(\n () => activeDataPointOptions.find(opt => opt.fullKey === condition.dataPointKey) ?? null,\n [activeDataPointOptions, condition.dataPointKey],\n );\n\n const fieldType = selectedDataPoint?.fieldType ?? 'string';\n\n const isValueLess = VALUE_LESS_OPERATORS.includes(condition.operator);\n\n const operatorItems: OperatorOption[] = useMemo(\n () =>\n fieldType === 'number'\n ? ([...NUMBER_OPERATORS] as OperatorOption[])\n : ([...STRING_OPERATORS] as OperatorOption[]),\n [fieldType],\n );\n\n const selectedOperator = useMemo(\n () => operatorItems.find(op => op.value === condition.operator) ?? null,\n [operatorItems, condition.operator],\n );\n\n const handleDataPointChange = (item: DataPointOption | null) => {\n const nextIsNumber = item?.fieldType === 'number';\n const nextOperatorItems = nextIsNumber ? NUMBER_OPERATORS : STRING_OPERATORS;\n const operatorReset = !nextOperatorItems.some(op => op.value === condition.operator);\n onChange({\n ...condition,\n dataPointKey: item?.fullKey ?? '',\n operator: operatorReset\n ? nextIsNumber\n ? 'num_eq'\n : 'is_equal_to'\n : condition.operator,\n });\n };\n\n const handleSourceChange = (item: SourceOption | null) => {\n if (!item) {\n return;\n }\n setSelectedSourceValue(item.value);\n\n if (!item.formId) {\n const schemaField =\n dataPointOptions.find(opt => opt.fullKey === condition.dataPointKey) ?? null;\n const nextFieldType = schemaField?.fieldType ?? 'string';\n const nextIsNumber = nextFieldType === 'number';\n const nextOperatorItems = nextIsNumber ? NUMBER_OPERATORS : STRING_OPERATORS;\n const operatorReset = !nextOperatorItems.some(op => op.value === condition.operator);\n\n onChange({\n ...condition,\n dataPointKey: schemaField?.fullKey ?? '',\n operator: operatorReset\n ? nextIsNumber\n ? 'num_eq'\n : 'is_equal_to'\n : condition.operator,\n });\n return;\n }\n\n onFormSelect(item.formId);\n const nextFormFieldOptions = formFieldOptions.filter(\n option => option.formId === item.formId,\n );\n const currentSelected = nextFormFieldOptions.find(\n opt => opt.fullKey === condition.dataPointKey,\n );\n const nextSelected = currentSelected ?? nextFormFieldOptions[0] ?? null;\n const nextFieldType = nextSelected?.fieldType ?? 'string';\n const nextIsNumber = nextFieldType === 'number';\n const nextOperatorItems = nextIsNumber ? NUMBER_OPERATORS : STRING_OPERATORS;\n const operatorReset = !nextOperatorItems.some(op => op.value === condition.operator);\n\n onChange({\n ...condition,\n dataPointKey: nextSelected?.fullKey ?? '',\n operator: operatorReset\n ? nextIsNumber\n ? 'num_eq'\n : 'is_equal_to'\n : condition.operator,\n });\n };\n\n return (\n <Flex direction=\"column\" gap=\"3\" style={{ width: '100%' }}>\n <div style={{ width: '100%' }}>\n <Combobox.Select\n disableClearSelection\n itemToKey={(item: SourceOption | null) => item?.value ?? ''}\n itemToString={(item: SourceOption | null) => item?.label ?? ''}\n items={sourceOptions}\n selectedItem={selectedSource}\n onChange={handleSourceChange}\n >\n <Combobox.SelectTrigger\n label=\"Data Type\"\n placeholder=\"Select source...\"\n size=\"small\"\n />\n <Combobox.Content>\n {({ items }: { items: SourceOption[] }) => (\n <Combobox.List>\n {items.map((item, i) => (\n <Combobox.Item index={i} item={item} key={item.value}>\n {item.label}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox.Select>\n </div>\n <Flex\n direction=\"row\"\n alignItems=\"flex-end\"\n gap=\"2\"\n style={{ flexWrap: 'wrap', rowGap: 8, width: '100%' }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n flexShrink: 0,\n padding: '4px 8px',\n }}\n >\n <Chip label=\"IF\" size=\"small\" />\n </div>\n <div style={{ flex: '2 1 240px', minWidth: 200 }}>\n <Combobox.Select\n disableClearSelection\n itemToKey={(item: DataPointOption | null) => item?.fullKey ?? ''}\n itemToString={(item: DataPointOption | null) => item?.title ?? ''}\n items={activeDataPointOptions}\n selectedItem={selectedDataPoint}\n onChange={handleDataPointChange}\n >\n <Combobox.SelectTrigger\n label=\"Data Point\"\n placeholder={\n currentFormId ? 'Select form field...' : 'Select data point...'\n }\n size=\"small\"\n />\n <Combobox.Content>\n {({ items }: { items: DataPointOption[] }) => (\n <Combobox.List>\n {items.map((item, i) => (\n <Combobox.Item index={i} item={item} key={item.fullKey}>\n {item.title}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox.Select>\n </div>\n <div style={{ flex: '1 1 180px', minWidth: 150 }}>\n <Combobox.Select\n disableClearSelection\n itemToKey={(item: OperatorOption | null) => item?.value ?? ''}\n itemToString={(item: OperatorOption | null) => item?.label ?? ''}\n items={operatorItems}\n selectedItem={selectedOperator}\n onChange={(item: OperatorOption | null) =>\n onChange({\n ...condition,\n operator: (item?.value ??\n 'is_equal_to') as SingleCondition['operator'],\n })\n }\n >\n <Combobox.SelectTrigger\n label=\"Condition\"\n placeholder=\"Select...\"\n size=\"small\"\n />\n <Combobox.Content>\n {({ items }: { items: OperatorOption[] }) => (\n <Combobox.List>\n {items.map((item, i) => (\n <Combobox.Item index={i} item={item} key={item.value}>\n {item.label}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox.Select>\n </div>\n {!isValueLess && (\n <div style={{ flex: '1 1 180px', minWidth: 150 }}>\n <LookupValueControl\n value={condition.value}\n fieldType={fieldType}\n lookupSource={selectedDataPoint?.lookupSource}\n onChange={value => onChange({ ...condition, value })}\n />\n </div>\n )}\n {canRemove && (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n flexShrink: 0,\n padding: '4px 8px',\n }}\n >\n <Button\n appearance=\"secondary\"\n aria-label=\"Remove condition\"\n icon={{ before: TrashIcon }}\n size=\"small\"\n onClick={onRemove}\n />\n </div>\n )}\n </Flex>\n </Flex>\n );\n}\n"],"names":["Button","Chip","Combobox","Flex","TrashIcon","useEffect","useMemo","useState","parseFormFieldKey","LookupValueControl","NUMBER_OPERATORS","STRING_OPERATORS","VALUE_LESS_OPERATORS","ConditionRow","canRemove","condition","dataPointOptions","formFieldOptions","forms","onChange","onFormSelect","onRemove","selectedFormFieldMeta","dataPointKey","selectedSourceValue","setSelectedSourceValue","formId","sourceOptions","label","value","map","form","id","name","selectedSource","find","opt","hasSchemaMatch","some","fullKey","currentFormId","activeDataPointOptions","filter","option","selectedDataPoint","fieldType","isValueLess","includes","operator","operatorItems","selectedOperator","op","handleDataPointChange","item","nextIsNumber","nextOperatorItems","operatorReset","handleSourceChange","schemaField","nextFieldType","nextFormFieldOptions","currentSelected","nextSelected","direction","gap","style","width","div","Select","disableClearSelection","itemToKey","itemToString","items","selectedItem","SelectTrigger","placeholder","size","Content","List","i","Item","index","alignItems","flexWrap","rowGap","display","flexShrink","padding","flex","minWidth","title","lookupSource","appearance","aria-label","icon","before","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/display-conditions/ConditionRow.tsx"],"sourcesContent":["import { Button, Chip, Combobox, Flex } from '@servicetitan/anvil2';\nimport TrashIcon from '@servicetitan/anvil2/assets/icons/material/round/delete.svg';\nimport { useEffect, useMemo, useState } from 'react';\nimport { FormInfo, parseFormFieldKey } from '../shared/forms';\nimport { LookupValueControl } from './LookupValueControl';\nimport { NUMBER_OPERATORS, SingleCondition, STRING_OPERATORS, VALUE_LESS_OPERATORS } from './types';\nimport type { DataPointOption, FormFieldOption } from './types';\n\nexport interface ConditionRowProps {\n canRemove: boolean;\n condition: SingleCondition;\n dataPointOptions: DataPointOption[];\n formFieldOptions: FormFieldOption[];\n forms: FormInfo[];\n onChange: (c: SingleCondition) => void;\n onFormSelect: (formId: number) => void;\n onRemove: () => void;\n}\n\ninterface OperatorOption {\n label: string;\n value: string;\n}\n\ninterface SourceOption {\n formId?: number;\n label: string;\n value: string;\n}\n\nexport function ConditionRow({\n canRemove,\n condition,\n dataPointOptions,\n formFieldOptions,\n forms,\n onChange,\n onFormSelect,\n onRemove,\n}: Readonly<ConditionRowProps>) {\n const selectedFormFieldMeta = useMemo(\n () => parseFormFieldKey(condition.dataPointKey),\n [condition.dataPointKey],\n );\n const [selectedSourceValue, setSelectedSourceValue] = useState<string>(\n selectedFormFieldMeta ? `form:${selectedFormFieldMeta.formId}` : 'schema',\n );\n\n const sourceOptions = useMemo<SourceOption[]>(\n () => [\n { label: 'Data point', value: 'schema' },\n ...forms.map(form => ({\n formId: form.id,\n label: form.name,\n value: `form:${form.id}`,\n })),\n ],\n [forms],\n );\n\n const selectedSource = useMemo<SourceOption | null>(() => {\n return (\n sourceOptions.find(opt => opt.value === selectedSourceValue) ?? sourceOptions[0] ?? null\n );\n }, [selectedSourceValue, sourceOptions]);\n\n useEffect(() => {\n if (selectedFormFieldMeta) {\n setSelectedSourceValue(`form:${selectedFormFieldMeta.formId}`);\n return;\n }\n if (!condition.dataPointKey) {\n return;\n }\n const hasSchemaMatch = dataPointOptions.some(opt => opt.fullKey === condition.dataPointKey);\n if (hasSchemaMatch) {\n setSelectedSourceValue('schema');\n }\n }, [condition.dataPointKey, dataPointOptions, selectedFormFieldMeta]);\n\n const currentFormId = selectedSource?.formId;\n const activeDataPointOptions = useMemo(\n () =>\n currentFormId\n ? formFieldOptions.filter(option => option.formId === currentFormId)\n : dataPointOptions,\n [currentFormId, dataPointOptions, formFieldOptions],\n );\n\n const selectedDataPoint = useMemo(\n () => activeDataPointOptions.find(opt => opt.fullKey === condition.dataPointKey) ?? null,\n [activeDataPointOptions, condition.dataPointKey],\n );\n\n const fieldType = selectedDataPoint?.fieldType ?? 'string';\n\n const isValueLess = VALUE_LESS_OPERATORS.includes(condition.operator);\n\n const operatorItems: OperatorOption[] = useMemo(\n () =>\n fieldType === 'number'\n ? ([...NUMBER_OPERATORS] as OperatorOption[])\n : ([...STRING_OPERATORS] as OperatorOption[]),\n [fieldType],\n );\n\n const selectedOperator = useMemo(\n () => operatorItems.find(op => op.value === condition.operator) ?? null,\n [operatorItems, condition.operator],\n );\n\n const handleDataPointChange = (item: DataPointOption | null) => {\n const nextIsNumber = item?.fieldType === 'number';\n const nextOperatorItems = nextIsNumber ? NUMBER_OPERATORS : STRING_OPERATORS;\n const operatorReset = !nextOperatorItems.some(op => op.value === condition.operator);\n onChange({\n ...condition,\n dataPointKey: item?.fullKey ?? '',\n operator: operatorReset\n ? nextIsNumber\n ? 'num_eq'\n : 'is_equal_to'\n : condition.operator,\n });\n };\n\n const handleSourceChange = (item: SourceOption | null) => {\n if (!item) {\n return;\n }\n setSelectedSourceValue(item.value);\n\n if (!item.formId) {\n const schemaField =\n dataPointOptions.find(opt => opt.fullKey === condition.dataPointKey) ?? null;\n const nextFieldType = schemaField?.fieldType ?? 'string';\n const nextIsNumber = nextFieldType === 'number';\n const nextOperatorItems = nextIsNumber ? NUMBER_OPERATORS : STRING_OPERATORS;\n const operatorReset = !nextOperatorItems.some(op => op.value === condition.operator);\n\n onChange({\n ...condition,\n dataPointKey: schemaField?.fullKey ?? '',\n operator: operatorReset\n ? nextIsNumber\n ? 'num_eq'\n : 'is_equal_to'\n : condition.operator,\n });\n return;\n }\n\n onFormSelect(item.formId);\n const nextFormFieldOptions = formFieldOptions.filter(\n option => option.formId === item.formId,\n );\n const currentSelected = nextFormFieldOptions.find(\n opt => opt.fullKey === condition.dataPointKey,\n );\n const nextSelected = currentSelected ?? nextFormFieldOptions[0] ?? null;\n const nextFieldType = nextSelected?.fieldType ?? 'string';\n const nextIsNumber = nextFieldType === 'number';\n const nextOperatorItems = nextIsNumber ? NUMBER_OPERATORS : STRING_OPERATORS;\n const operatorReset = !nextOperatorItems.some(op => op.value === condition.operator);\n\n onChange({\n ...condition,\n dataPointKey: nextSelected?.fullKey ?? '',\n operator: operatorReset\n ? nextIsNumber\n ? 'num_eq'\n : 'is_equal_to'\n : condition.operator,\n });\n };\n\n return (\n <Flex direction=\"column\" gap=\"3\" style={{ width: '100%' }}>\n <div style={{ width: '100%' }}>\n <Combobox.Select\n disableClearSelection\n itemToKey={(item: SourceOption | null) => item?.value ?? ''}\n itemToString={(item: SourceOption | null) => item?.label ?? ''}\n items={sourceOptions}\n selectedItem={selectedSource}\n onChange={handleSourceChange}\n >\n <Combobox.SelectTrigger\n label=\"Data Type\"\n placeholder=\"Select source...\"\n size=\"small\"\n />\n <Combobox.Content>\n {({ items }: { items: SourceOption[] }) => (\n <Combobox.List>\n {items.map((item, i) => (\n <Combobox.Item index={i} item={item} key={item.value}>\n {item.label}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox.Select>\n </div>\n <Flex\n direction=\"row\"\n alignItems=\"flex-end\"\n gap=\"2\"\n style={{ flexWrap: 'wrap', rowGap: 8, width: '100%' }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n flexShrink: 0,\n padding: '4px 8px',\n }}\n >\n <Chip label=\"IF\" size=\"small\" />\n </div>\n <Flex flex={1} style={{ minWidth: 160 }}>\n <Combobox.Select\n flex={1}\n style={{ width: '100%' }}\n disableClearSelection\n itemToKey={(item: DataPointOption | null) => item?.fullKey ?? ''}\n itemToString={(item: DataPointOption | null) => item?.title ?? ''}\n items={activeDataPointOptions}\n selectedItem={selectedDataPoint}\n onChange={handleDataPointChange}\n >\n <Combobox.SelectTrigger\n label=\"Data Point\"\n placeholder={\n currentFormId ? 'Select form field...' : 'Select data point...'\n }\n size=\"small\"\n />\n <Combobox.Content>\n {({ items }: { items: DataPointOption[] }) => (\n <Combobox.List>\n {items.map((item, i) => (\n <Combobox.Item index={i} item={item} key={item.fullKey}>\n {item.title}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox.Select>\n </Flex>\n <Flex flex={1} style={{ minWidth: 160 }}>\n <Combobox.Select\n flex={1}\n style={{ width: '100%' }}\n disableClearSelection\n itemToKey={(item: OperatorOption | null) => item?.value ?? ''}\n itemToString={(item: OperatorOption | null) => item?.label ?? ''}\n items={operatorItems}\n selectedItem={selectedOperator}\n onChange={(item: OperatorOption | null) =>\n onChange({\n ...condition,\n operator: (item?.value ??\n 'is_equal_to') as SingleCondition['operator'],\n })\n }\n >\n <Combobox.SelectTrigger\n label=\"Condition\"\n placeholder=\"Select...\"\n size=\"small\"\n />\n <Combobox.Content>\n {({ items }: { items: OperatorOption[] }) => (\n <Combobox.List>\n {items.map((item, i) => (\n <Combobox.Item index={i} item={item} key={item.value}>\n {item.label}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox.Select>\n </Flex>\n {!isValueLess && (\n <Flex flex={1} style={{ minWidth: 160 }}>\n <LookupValueControl\n value={condition.value}\n fieldType={fieldType}\n lookupSource={selectedDataPoint?.lookupSource}\n onChange={value => onChange({ ...condition, value })}\n />\n </Flex>\n )}\n {canRemove && (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n flexShrink: 0,\n padding: '4px 8px',\n }}\n >\n <Button\n appearance=\"secondary\"\n aria-label=\"Remove condition\"\n icon={{ before: TrashIcon }}\n size=\"small\"\n onClick={onRemove}\n />\n </div>\n )}\n </Flex>\n </Flex>\n );\n}\n"],"names":["Button","Chip","Combobox","Flex","TrashIcon","useEffect","useMemo","useState","parseFormFieldKey","LookupValueControl","NUMBER_OPERATORS","STRING_OPERATORS","VALUE_LESS_OPERATORS","ConditionRow","canRemove","condition","dataPointOptions","formFieldOptions","forms","onChange","onFormSelect","onRemove","selectedFormFieldMeta","dataPointKey","selectedSourceValue","setSelectedSourceValue","formId","sourceOptions","label","value","map","form","id","name","selectedSource","find","opt","hasSchemaMatch","some","fullKey","currentFormId","activeDataPointOptions","filter","option","selectedDataPoint","fieldType","isValueLess","includes","operator","operatorItems","selectedOperator","op","handleDataPointChange","item","nextIsNumber","nextOperatorItems","operatorReset","handleSourceChange","schemaField","nextFieldType","nextFormFieldOptions","currentSelected","nextSelected","direction","gap","style","width","div","Select","disableClearSelection","itemToKey","itemToString","items","selectedItem","SelectTrigger","placeholder","size","Content","List","i","Item","index","alignItems","flexWrap","rowGap","display","flexShrink","padding","flex","minWidth","title","lookupSource","appearance","aria-label","icon","before","onClick"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LookupValueControl.d.ts","sourceRoot":"","sources":["../../src/display-conditions/LookupValueControl.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAqBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,GACR,EAAE,QAAQ,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"LookupValueControl.d.ts","sourceRoot":"","sources":["../../src/display-conditions/LookupValueControl.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAqBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,GACR,EAAE,QAAQ,CAAC,uBAAuB,CAAC,2CA8HnC"}
|
|
@@ -102,6 +102,7 @@ const sanitizeNumericInput = (raw)=>{
|
|
|
102
102
|
if (status === 'loading') {
|
|
103
103
|
return /*#__PURE__*/ _jsx(TextField, {
|
|
104
104
|
label: "Value",
|
|
105
|
+
size: "small",
|
|
105
106
|
flex: 1,
|
|
106
107
|
disabled: true,
|
|
107
108
|
value: "",
|
|
@@ -112,6 +113,7 @@ const sanitizeNumericInput = (raw)=>{
|
|
|
112
113
|
if (status === 'static') {
|
|
113
114
|
return /*#__PURE__*/ _jsx(SelectFieldSync, {
|
|
114
115
|
flex: 1,
|
|
116
|
+
size: "small",
|
|
115
117
|
label: "Value",
|
|
116
118
|
placeholder: "Search value...",
|
|
117
119
|
options: options.map(toOption),
|
|
@@ -122,6 +124,7 @@ const sanitizeNumericInput = (raw)=>{
|
|
|
122
124
|
if (status === 'searchable') {
|
|
123
125
|
return /*#__PURE__*/ _jsx(SelectField, {
|
|
124
126
|
flex: 1,
|
|
127
|
+
size: "small",
|
|
125
128
|
label: "Value",
|
|
126
129
|
placeholder: "Type to search...",
|
|
127
130
|
initialLoad: "open",
|
|
@@ -140,6 +143,7 @@ const sanitizeNumericInput = (raw)=>{
|
|
|
140
143
|
};
|
|
141
144
|
return /*#__PURE__*/ _jsx(TextField, {
|
|
142
145
|
label: "Value",
|
|
146
|
+
size: "small",
|
|
143
147
|
flex: 1,
|
|
144
148
|
value: value,
|
|
145
149
|
onChange: (e)=>handleTextChange(e.target.value),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/display-conditions/LookupValueControl.tsx"],"sourcesContent":["import { TextField } from '@servicetitan/anvil2';\nimport { SelectField, SelectFieldOption, SelectFieldSync } from '@servicetitan/anvil2/beta';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { LookupOption } from './lookupOptionsController';\nimport { useLookupOptions } from './useLookupOptions';\n\nexport interface LookupValueControlProps {\n value: string;\n fieldType: 'number' | 'string';\n /** The selected data point's `options.fieldLookupSource`; empty -> free-text input. */\n lookupSource?: string;\n onChange: (value: string) => void;\n}\n\nconst toOption = (option: LookupOption): SelectFieldOption => ({\n id: option.key,\n label: option.label,\n});\n\nconst sanitizeNumericInput = (raw: string): string => {\n let value = raw.replaceAll(/[^0-9.-]/g, '');\n const isNegative = value.startsWith('-');\n value = value.replaceAll('-', '');\n if (isNegative) {\n value = `-${value}`;\n }\n const firstDot = value.indexOf('.');\n if (firstDot >= 0) {\n value = `${value.slice(0, firstDot + 1)}${value.slice(firstDot + 1).replaceAll('.', '')}`;\n }\n return value;\n};\n\n/**\n * Renders the value control for a single condition based on the field's lookup source:\n * - `static` -> full list returned by the host, filtered locally (`SelectFieldSync`).\n * - `searchable` -> host searches per typed query (`SelectField` + `loadOptions`).\n * - `idle`/`fallback`/`loading` -> free-text input (never block the user).\n *\n * Unlayer persists conditions as a Nunjucks string, so a saved searchable value\n * has no stored label — we display the saved key as the label until the user\n * re-searches and re-selects.\n */\nexport function LookupValueControl({\n fieldType,\n lookupSource,\n onChange,\n value,\n}: Readonly<LookupValueControlProps>) {\n const { loadOptions, options, resolveOptions, status } = useLookupOptions(lookupSource);\n\n const staticSelected = useMemo<SelectFieldOption | null>(\n () => options.filter(option => option.key === value).map(toOption)[0] ?? null,\n [options, value],\n );\n\n const [searchableSelected, setSearchableSelected] = useState<SelectFieldOption | null>(\n value ? { id: value, label: value } : null,\n );\n\n // Tracks the key we've already turned into a human-readable label so we don't re-resolve it.\n const resolvedKeyRef = useRef<string | null>(null);\n\n useEffect(() => {\n setSearchableSelected(prev => {\n if (!value) {\n return null;\n }\n if (prev?.id === value) {\n return prev;\n }\n return { id: value, label: value };\n });\n }, [value]);\n\n // On open (or when a saved searchable value appears), ask the host to resolve key -> label.\n useEffect(() => {\n if (status !== 'searchable' || !value) {\n resolvedKeyRef.current = null;\n return;\n }\n if (resolvedKeyRef.current === value) {\n return;\n }\n\n let cancelled = false;\n resolveOptions([value]).then(result => {\n if (cancelled) {\n return;\n }\n const match = result.find(option => option.key === value);\n if (match) {\n resolvedKeyRef.current = value;\n setSearchableSelected({ id: match.key, label: match.label });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [status, value, resolveOptions]);\n\n const handleLoadOptions = useCallback(\n async (query: string) => {\n const result = await loadOptions(query);\n return result.map(toOption);\n },\n [loadOptions],\n );\n\n if (status === 'loading') {\n return (\n <TextField
|
|
1
|
+
{"version":3,"sources":["../../src/display-conditions/LookupValueControl.tsx"],"sourcesContent":["import { TextField } from '@servicetitan/anvil2';\nimport { SelectField, SelectFieldOption, SelectFieldSync } from '@servicetitan/anvil2/beta';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { LookupOption } from './lookupOptionsController';\nimport { useLookupOptions } from './useLookupOptions';\n\nexport interface LookupValueControlProps {\n value: string;\n fieldType: 'number' | 'string';\n /** The selected data point's `options.fieldLookupSource`; empty -> free-text input. */\n lookupSource?: string;\n onChange: (value: string) => void;\n}\n\nconst toOption = (option: LookupOption): SelectFieldOption => ({\n id: option.key,\n label: option.label,\n});\n\nconst sanitizeNumericInput = (raw: string): string => {\n let value = raw.replaceAll(/[^0-9.-]/g, '');\n const isNegative = value.startsWith('-');\n value = value.replaceAll('-', '');\n if (isNegative) {\n value = `-${value}`;\n }\n const firstDot = value.indexOf('.');\n if (firstDot >= 0) {\n value = `${value.slice(0, firstDot + 1)}${value.slice(firstDot + 1).replaceAll('.', '')}`;\n }\n return value;\n};\n\n/**\n * Renders the value control for a single condition based on the field's lookup source:\n * - `static` -> full list returned by the host, filtered locally (`SelectFieldSync`).\n * - `searchable` -> host searches per typed query (`SelectField` + `loadOptions`).\n * - `idle`/`fallback`/`loading` -> free-text input (never block the user).\n *\n * Unlayer persists conditions as a Nunjucks string, so a saved searchable value\n * has no stored label — we display the saved key as the label until the user\n * re-searches and re-selects.\n */\nexport function LookupValueControl({\n fieldType,\n lookupSource,\n onChange,\n value,\n}: Readonly<LookupValueControlProps>) {\n const { loadOptions, options, resolveOptions, status } = useLookupOptions(lookupSource);\n\n const staticSelected = useMemo<SelectFieldOption | null>(\n () => options.filter(option => option.key === value).map(toOption)[0] ?? null,\n [options, value],\n );\n\n const [searchableSelected, setSearchableSelected] = useState<SelectFieldOption | null>(\n value ? { id: value, label: value } : null,\n );\n\n // Tracks the key we've already turned into a human-readable label so we don't re-resolve it.\n const resolvedKeyRef = useRef<string | null>(null);\n\n useEffect(() => {\n setSearchableSelected(prev => {\n if (!value) {\n return null;\n }\n if (prev?.id === value) {\n return prev;\n }\n return { id: value, label: value };\n });\n }, [value]);\n\n // On open (or when a saved searchable value appears), ask the host to resolve key -> label.\n useEffect(() => {\n if (status !== 'searchable' || !value) {\n resolvedKeyRef.current = null;\n return;\n }\n if (resolvedKeyRef.current === value) {\n return;\n }\n\n let cancelled = false;\n resolveOptions([value]).then(result => {\n if (cancelled) {\n return;\n }\n const match = result.find(option => option.key === value);\n if (match) {\n resolvedKeyRef.current = value;\n setSearchableSelected({ id: match.key, label: match.label });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [status, value, resolveOptions]);\n\n const handleLoadOptions = useCallback(\n async (query: string) => {\n const result = await loadOptions(query);\n return result.map(toOption);\n },\n [loadOptions],\n );\n\n if (status === 'loading') {\n return (\n <TextField\n label=\"Value\"\n size=\"small\"\n flex={1}\n disabled\n value=\"\"\n placeholder=\"\"\n aria-label=\"Value\"\n />\n );\n }\n\n if (status === 'static') {\n return (\n <SelectFieldSync\n flex={1}\n size=\"small\"\n label=\"Value\"\n placeholder=\"Search value...\"\n options={options.map(toOption)}\n value={staticSelected}\n onSelectedOptionChange={option => onChange(option ? String(option.id) : '')}\n />\n );\n }\n\n if (status === 'searchable') {\n return (\n <SelectField\n flex={1}\n size=\"small\"\n label=\"Value\"\n placeholder=\"Type to search...\"\n initialLoad=\"open\"\n loadOptions={handleLoadOptions}\n value={searchableSelected}\n onSelectedOptionChange={option => {\n resolvedKeyRef.current = option ? String(option.id) : null;\n setSearchableSelected(option);\n onChange(option ? String(option.id) : '');\n }}\n />\n );\n }\n\n // idle / fallback (no source, empty, error, or timeout) -> free text.\n const handleTextChange = (raw: string) => {\n onChange(fieldType === 'number' ? sanitizeNumericInput(raw) : raw);\n };\n\n return (\n <TextField\n label=\"Value\"\n size=\"small\"\n flex={1}\n value={value}\n onChange={e => handleTextChange(e.target.value)}\n placeholder={fieldType === 'number' ? 'e.g. 1.5' : 'Enter value...'}\n aria-label=\"Value\"\n {...(fieldType === 'number' && { inputMode: 'decimal' })}\n />\n );\n}\n"],"names":["TextField","SelectField","SelectFieldSync","useCallback","useEffect","useMemo","useRef","useState","useLookupOptions","toOption","option","id","key","label","sanitizeNumericInput","raw","value","replaceAll","isNegative","startsWith","firstDot","indexOf","slice","LookupValueControl","fieldType","lookupSource","onChange","loadOptions","options","resolveOptions","status","staticSelected","filter","map","searchableSelected","setSearchableSelected","resolvedKeyRef","prev","current","cancelled","then","result","match","find","handleLoadOptions","query","size","flex","disabled","placeholder","aria-label","onSelectedOptionChange","String","initialLoad","handleTextChange","e","target","inputMode"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -219,8 +219,10 @@ export function ConditionRow({
|
|
|
219
219
|
>
|
|
220
220
|
<Chip label="IF" size="small" />
|
|
221
221
|
</div>
|
|
222
|
-
<
|
|
222
|
+
<Flex flex={1} style={{ minWidth: 160 }}>
|
|
223
223
|
<Combobox.Select
|
|
224
|
+
flex={1}
|
|
225
|
+
style={{ width: '100%' }}
|
|
224
226
|
disableClearSelection
|
|
225
227
|
itemToKey={(item: DataPointOption | null) => item?.fullKey ?? ''}
|
|
226
228
|
itemToString={(item: DataPointOption | null) => item?.title ?? ''}
|
|
@@ -247,9 +249,11 @@ export function ConditionRow({
|
|
|
247
249
|
)}
|
|
248
250
|
</Combobox.Content>
|
|
249
251
|
</Combobox.Select>
|
|
250
|
-
</
|
|
251
|
-
<
|
|
252
|
+
</Flex>
|
|
253
|
+
<Flex flex={1} style={{ minWidth: 160 }}>
|
|
252
254
|
<Combobox.Select
|
|
255
|
+
flex={1}
|
|
256
|
+
style={{ width: '100%' }}
|
|
253
257
|
disableClearSelection
|
|
254
258
|
itemToKey={(item: OperatorOption | null) => item?.value ?? ''}
|
|
255
259
|
itemToString={(item: OperatorOption | null) => item?.label ?? ''}
|
|
@@ -280,16 +284,16 @@ export function ConditionRow({
|
|
|
280
284
|
)}
|
|
281
285
|
</Combobox.Content>
|
|
282
286
|
</Combobox.Select>
|
|
283
|
-
</
|
|
287
|
+
</Flex>
|
|
284
288
|
{!isValueLess && (
|
|
285
|
-
<
|
|
289
|
+
<Flex flex={1} style={{ minWidth: 160 }}>
|
|
286
290
|
<LookupValueControl
|
|
287
291
|
value={condition.value}
|
|
288
292
|
fieldType={fieldType}
|
|
289
293
|
lookupSource={selectedDataPoint?.lookupSource}
|
|
290
294
|
onChange={value => onChange({ ...condition, value })}
|
|
291
295
|
/>
|
|
292
|
-
</
|
|
296
|
+
</Flex>
|
|
293
297
|
)}
|
|
294
298
|
{canRemove && (
|
|
295
299
|
<div
|
|
@@ -110,7 +110,15 @@ export function LookupValueControl({
|
|
|
110
110
|
|
|
111
111
|
if (status === 'loading') {
|
|
112
112
|
return (
|
|
113
|
-
<TextField
|
|
113
|
+
<TextField
|
|
114
|
+
label="Value"
|
|
115
|
+
size="small"
|
|
116
|
+
flex={1}
|
|
117
|
+
disabled
|
|
118
|
+
value=""
|
|
119
|
+
placeholder=""
|
|
120
|
+
aria-label="Value"
|
|
121
|
+
/>
|
|
114
122
|
);
|
|
115
123
|
}
|
|
116
124
|
|
|
@@ -118,6 +126,7 @@ export function LookupValueControl({
|
|
|
118
126
|
return (
|
|
119
127
|
<SelectFieldSync
|
|
120
128
|
flex={1}
|
|
129
|
+
size="small"
|
|
121
130
|
label="Value"
|
|
122
131
|
placeholder="Search value..."
|
|
123
132
|
options={options.map(toOption)}
|
|
@@ -131,6 +140,7 @@ export function LookupValueControl({
|
|
|
131
140
|
return (
|
|
132
141
|
<SelectField
|
|
133
142
|
flex={1}
|
|
143
|
+
size="small"
|
|
134
144
|
label="Value"
|
|
135
145
|
placeholder="Type to search..."
|
|
136
146
|
initialLoad="open"
|
|
@@ -153,6 +163,7 @@ export function LookupValueControl({
|
|
|
153
163
|
return (
|
|
154
164
|
<TextField
|
|
155
165
|
label="Value"
|
|
166
|
+
size="small"
|
|
156
167
|
flex={1}
|
|
157
168
|
value={value}
|
|
158
169
|
onChange={e => handleTextChange(e.target.value)}
|