@servicetitan/dte-pdf-editor 1.41.0 → 1.43.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/README.md +89 -45
- package/dist/components/display-conditions/condition-group.d.ts +8 -3
- package/dist/components/display-conditions/condition-group.d.ts.map +1 -1
- package/dist/components/display-conditions/condition-group.js +7 -2
- package/dist/components/display-conditions/condition-group.js.map +1 -1
- package/dist/components/display-conditions/condition-groups-section.d.ts +8 -3
- package/dist/components/display-conditions/condition-groups-section.d.ts.map +1 -1
- package/dist/components/display-conditions/condition-groups-section.js +2 -2
- package/dist/components/display-conditions/condition-groups-section.js.map +1 -1
- package/dist/components/display-conditions/condition-row.d.ts +8 -3
- package/dist/components/display-conditions/condition-row.d.ts.map +1 -1
- package/dist/components/display-conditions/condition-row.js +154 -22
- package/dist/components/display-conditions/condition-row.js.map +1 -1
- package/dist/components/display-conditions/display-condition-modal.d.ts +6 -2
- package/dist/components/display-conditions/display-condition-modal.d.ts.map +1 -1
- package/dist/components/display-conditions/display-condition-modal.js +7 -7
- package/dist/components/display-conditions/display-condition-modal.js.map +1 -1
- package/dist/components/display-conditions/display-condition.d.ts +1 -1
- package/dist/components/display-conditions/display-condition.d.ts.map +1 -1
- package/dist/components/display-conditions/display-condition.js +2 -2
- package/dist/components/display-conditions/display-condition.js.map +1 -1
- package/dist/components/field-config-panel/field-config-panel-overlay.d.ts +6 -2
- package/dist/components/field-config-panel/field-config-panel-overlay.d.ts.map +1 -1
- package/dist/components/field-config-panel/field-config-panel-overlay.js +2 -2
- package/dist/components/field-config-panel/field-config-panel-overlay.js.map +1 -1
- package/dist/components/field-config-panel/field-config-panel.d.ts +6 -2
- package/dist/components/field-config-panel/field-config-panel.d.ts.map +1 -1
- package/dist/components/field-config-panel/field-config-panel.js +9 -4
- package/dist/components/field-config-panel/field-config-panel.js.map +1 -1
- package/dist/components/field-config-panel/field-sidebar.d.ts +5 -1
- package/dist/components/field-config-panel/field-sidebar.d.ts.map +1 -1
- package/dist/components/field-config-panel/field-sidebar.js +42 -8
- package/dist/components/field-config-panel/field-sidebar.js.map +1 -1
- package/dist/components/field-config-panel/formula-generator.d.ts +5 -1
- package/dist/components/field-config-panel/formula-generator.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-generator.js +2 -2
- package/dist/components/field-config-panel/formula-generator.js.map +1 -1
- package/dist/components/field-config-panel/formula-modal.d.ts +5 -1
- package/dist/components/field-config-panel/formula-modal.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-modal.js +38 -8
- package/dist/components/field-config-panel/formula-modal.js.map +1 -1
- package/dist/components/field-sidebar/field-sidebar.d.ts +6 -1
- package/dist/components/field-sidebar/field-sidebar.d.ts.map +1 -1
- package/dist/components/field-sidebar/field-sidebar.js +11 -6
- package/dist/components/field-sidebar/field-sidebar.js.map +1 -1
- package/dist/components/field-sidebar/form-fields-type-list.d.ts +13 -0
- package/dist/components/field-sidebar/form-fields-type-list.d.ts.map +1 -0
- package/dist/components/field-sidebar/form-fields-type-list.js +14 -0
- package/dist/components/field-sidebar/form-fields-type-list.js.map +1 -0
- package/dist/components/pdf-editor/pdf-editor.d.ts +4 -1
- package/dist/components/pdf-editor/pdf-editor.d.ts.map +1 -1
- package/dist/components/pdf-editor/pdf-editor.js +6 -5
- package/dist/components/pdf-editor/pdf-editor.js.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.d.ts.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.js +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.js.map +1 -1
- package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view.js +2 -1
- package/dist/components/pdf-view/pdf-view.js.map +1 -1
- package/dist/constants/menu-group.d.ts.map +1 -1
- package/dist/constants/menu-group.js +2 -0
- package/dist/constants/menu-group.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useFormFields.d.ts +13 -0
- package/dist/hooks/useFormFields.d.ts.map +1 -0
- package/dist/hooks/useFormFields.js +121 -0
- package/dist/hooks/useFormFields.js.map +1 -0
- package/dist/hooks/useFormulaEditor.d.ts.map +1 -1
- package/dist/hooks/useFormulaEditor.js +7 -1
- package/dist/hooks/useFormulaEditor.js.map +1 -1
- package/dist/hooks/usePdfFieldDnD.d.ts.map +1 -1
- package/dist/hooks/usePdfFieldDnD.js +4 -0
- package/dist/hooks/usePdfFieldDnD.js.map +1 -1
- package/dist/interface/types.d.ts +35 -3
- package/dist/interface/types.d.ts.map +1 -1
- package/dist/interface/types.js +1 -0
- package/dist/interface/types.js.map +1 -1
- package/dist/utils/formula/expression.utils.d.ts +5 -2
- package/dist/utils/formula/expression.utils.d.ts.map +1 -1
- package/dist/utils/formula/expression.utils.js +8 -6
- package/dist/utils/formula/expression.utils.js.map +1 -1
- package/dist/utils/formula/form-fields.utils.d.ts +21 -0
- package/dist/utils/formula/form-fields.utils.d.ts.map +1 -0
- package/dist/utils/formula/form-fields.utils.js +101 -0
- package/dist/utils/formula/form-fields.utils.js.map +1 -0
- package/dist/utils/formula/index.d.ts +1 -0
- package/dist/utils/formula/index.d.ts.map +1 -1
- package/dist/utils/formula/index.js +1 -0
- package/dist/utils/formula/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/display-conditions/condition-group.tsx +32 -5
- package/src/components/display-conditions/condition-groups-section.tsx +24 -4
- package/src/components/display-conditions/condition-row.tsx +359 -80
- package/src/components/display-conditions/display-condition-modal.tsx +39 -10
- package/src/components/display-conditions/display-condition.tsx +19 -2
- package/src/components/field-config-panel/field-config-panel-overlay.tsx +22 -2
- package/src/components/field-config-panel/field-config-panel.tsx +34 -10
- package/src/components/field-config-panel/field-sidebar.tsx +187 -41
- package/src/components/field-config-panel/formula-generator.tsx +14 -0
- package/src/components/field-config-panel/formula-modal.tsx +62 -5
- package/src/components/field-sidebar/field-sidebar.tsx +35 -4
- package/src/components/field-sidebar/form-fields-type-list.tsx +113 -0
- package/src/components/pdf-editor/pdf-editor.tsx +42 -25
- package/src/components/pdf-fields-overlay/pdf-overlay-field.tsx +3 -1
- package/src/components/pdf-view/pdf-view.tsx +2 -1
- package/src/constants/menu-group.ts +2 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useFormFields.ts +157 -0
- package/src/hooks/useFormulaEditor.ts +7 -1
- package/src/hooks/usePdfFieldDnD.ts +4 -0
- package/src/interface/types.ts +43 -4
- package/src/styles/field-type-list.css +1 -0
- package/src/styles/formula-modal.css +66 -8
- package/src/styles/variables.css +4 -0
- package/src/utils/formula/expression.utils.ts +24 -6
- package/src/utils/formula/form-fields.utils.ts +165 -0
- package/src/utils/formula/index.ts +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DataPointOption, FieldTypeEnum, FieldTypeOption, FormFieldInfo, FormFieldsByFormIdI, FormFieldType, FormInfo, FormulaFieldFormSnapshot, SchemaFieldType } from '../../interface/types';
|
|
2
|
+
export declare const FORM_FIELD_TYPES_FOR_CALC: FormFieldType[];
|
|
3
|
+
/** Root key and path prefix for form submission field references (matches Unlayer/tools). */
|
|
4
|
+
export declare const SUBMISSION_FIELDS_PATH_PREFIX = "__submission_fields";
|
|
5
|
+
export declare const normalizeFormFieldIdForPath: (fieldId: string) => string;
|
|
6
|
+
export declare const buildFormFieldKey: (formId: number, fieldId: string) => string;
|
|
7
|
+
export declare const parseFormFieldKey: (key: string) => {
|
|
8
|
+
formId: number;
|
|
9
|
+
fieldId: string;
|
|
10
|
+
} | null;
|
|
11
|
+
export declare const buildFormFieldSnapshot: (formId: number, formName: string, field: FormFieldInfo) => FormulaFieldFormSnapshot;
|
|
12
|
+
export declare const tryBuildFormFieldFormulaSnapshot: (path: string, forms: FormInfo[], formFieldsByFormId: FormFieldsByFormIdI) => FormulaFieldFormSnapshot | undefined;
|
|
13
|
+
export declare const isFormFieldCalculationType: (itemType: FormFieldType) => itemType is SchemaFieldType;
|
|
14
|
+
export declare const formFieldInfosToCalculationOptions: (formId: number, fields: FormFieldInfo[], formName: string) => FieldTypeOption[];
|
|
15
|
+
export declare const formFieldInfoToFieldTypeOption: (formId: number, field: FormFieldInfo, formName: string) => FieldTypeOption;
|
|
16
|
+
export declare const formFieldToDisplayConditionDataPointOption: (form: FormInfo, field: FormFieldInfo) => DataPointOption;
|
|
17
|
+
export declare const getDisplayConditionFieldTypeForKey: (dataPointKey: string, mergeTagOptions: DataPointOption[], fillableOptions: DataPointOption[], formFieldsByFormId: FormFieldsByFormIdI) => "number" | "string";
|
|
18
|
+
/** Subset of {@link FieldTypeEnum} used as display-condition row “Source”. */
|
|
19
|
+
export type DisplayConditionSourceKind = Extract<FieldTypeEnum, FieldTypeEnum.dataModel | FieldTypeEnum.fillable | FieldTypeEnum.forms>;
|
|
20
|
+
export declare const inferDisplayConditionSourceKind: (dataPointKey: string, mergeTagOptions: DataPointOption[], fillableOptions: DataPointOption[]) => DisplayConditionSourceKind | null;
|
|
21
|
+
//# sourceMappingURL=form-fields.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-fields.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/form-fields.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,wBAAwB,EACxB,eAAe,EAClB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,yBAAyB,EAAyB,aAAa,EAAE,CAAC;AAE/E,6FAA6F;AAC7F,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE,eAAO,MAAM,2BAA2B,GAAI,SAAS,MAAM,KAAG,MAAqC,CAAC;AAEpG,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,SAAS,MAAM,KAAG,MACoB,CAAC;AAKzF,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAcrF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,OAAO,aAAa,KACrB,wBAMD,CAAC;AAEH,eAAO,MAAM,gCAAgC,GACzC,MAAM,MAAM,EACZ,OAAO,QAAQ,EAAE,EACjB,oBAAoB,mBAAmB,KACxC,wBAAwB,GAAG,SAe7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,UAAU,aAAa,KAAG,QAAQ,IAAI,eACjC,CAAC;AAEjD,eAAO,MAAM,kCAAkC,GAC3C,QAAQ,MAAM,EACd,QAAQ,aAAa,EAAE,EACvB,UAAU,MAAM,KACjB,eAAe,EAWP,CAAC;AAEZ,eAAO,MAAM,8BAA8B,GACvC,QAAQ,MAAM,EACd,OAAO,aAAa,EACpB,UAAU,MAAM,KACjB,eAMD,CAAC;AAEH,eAAO,MAAM,0CAA0C,GACnD,MAAM,QAAQ,EACd,OAAO,aAAa,KACrB,eAKD,CAAC;AAEH,eAAO,MAAM,kCAAkC,GAC3C,cAAc,MAAM,EACpB,iBAAiB,eAAe,EAAE,EAClC,iBAAiB,eAAe,EAAE,EAClC,oBAAoB,mBAAmB,KACxC,QAAQ,GAAG,QAiBb,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAC5C,aAAa,EACb,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,CACzE,CAAC;AAEF,eAAO,MAAM,+BAA+B,GACxC,cAAc,MAAM,EACpB,iBAAiB,eAAe,EAAE,EAClC,iBAAiB,eAAe,EAAE,KACnC,0BAA0B,GAAG,IAc/B,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { FieldTypeEnum, } from '../../interface/types';
|
|
2
|
+
export const FORM_FIELD_TYPES_FOR_CALC = ['date', 'number'];
|
|
3
|
+
/** Root key and path prefix for form submission field references (matches Unlayer/tools). */
|
|
4
|
+
export const SUBMISSION_FIELDS_PATH_PREFIX = '__submission_fields';
|
|
5
|
+
export const normalizeFormFieldIdForPath = (fieldId) => fieldId.replaceAll('-', '');
|
|
6
|
+
export const buildFormFieldKey = (formId, fieldId) => `${SUBMISSION_FIELDS_PATH_PREFIX}.${formId}.${normalizeFormFieldIdForPath(fieldId)}`;
|
|
7
|
+
const SUBMISSION_FIELDS_DOT_PATH_RE = /^__submission_fields\.(\d+)\.([A-Za-z0-9]+)$/;
|
|
8
|
+
const LEGACY_SUBMISSION_FIELD_SINGULAR_RE = /^__submission_field\.(\d+)\.(.+)$/;
|
|
9
|
+
export const parseFormFieldKey = (key) => {
|
|
10
|
+
let match = SUBMISSION_FIELDS_DOT_PATH_RE.exec(key);
|
|
11
|
+
if (match) {
|
|
12
|
+
return { formId: Number(match[1]), fieldId: match[2] };
|
|
13
|
+
}
|
|
14
|
+
match = LEGACY_SUBMISSION_FIELD_SINGULAR_RE.exec(key);
|
|
15
|
+
if (match) {
|
|
16
|
+
return { formId: Number(match[1]), fieldId: normalizeFormFieldIdForPath(match[2]) };
|
|
17
|
+
}
|
|
18
|
+
const legacyMatch = key.match(/^__form_(\d+)_([a-f0-9]+)$/i);
|
|
19
|
+
if (legacyMatch) {
|
|
20
|
+
return { formId: Number(legacyMatch[1]), fieldId: legacyMatch[2] };
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
};
|
|
24
|
+
export const buildFormFieldSnapshot = (formId, formName, field) => ({
|
|
25
|
+
formId,
|
|
26
|
+
fieldId: field.id,
|
|
27
|
+
formName,
|
|
28
|
+
fieldName: field.header,
|
|
29
|
+
fieldType: field.itemType,
|
|
30
|
+
});
|
|
31
|
+
export const tryBuildFormFieldFormulaSnapshot = (path, forms, formFieldsByFormId) => {
|
|
32
|
+
const parsed = parseFormFieldKey(path);
|
|
33
|
+
if (!parsed) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const form = forms.find(f => f.id === parsed.formId);
|
|
37
|
+
const fields = formFieldsByFormId[parsed.formId];
|
|
38
|
+
if (!form || !(fields === null || fields === void 0 ? void 0 : fields.length)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const field = fields.find(f => normalizeFormFieldIdForPath(f.id) === parsed.fieldId);
|
|
42
|
+
if (!field) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return buildFormFieldSnapshot(parsed.formId, form.name, field);
|
|
46
|
+
};
|
|
47
|
+
export const isFormFieldCalculationType = (itemType) => FORM_FIELD_TYPES_FOR_CALC.includes(itemType);
|
|
48
|
+
export const formFieldInfosToCalculationOptions = (formId, fields, formName) => fields
|
|
49
|
+
.filter((f) => isFormFieldCalculationType(f.itemType))
|
|
50
|
+
.map(field => ({
|
|
51
|
+
type: FieldTypeEnum.forms,
|
|
52
|
+
label: field.header,
|
|
53
|
+
path: buildFormFieldKey(formId, field.id),
|
|
54
|
+
fieldType: field.itemType,
|
|
55
|
+
formSnapshot: buildFormFieldSnapshot(formId, formName, field),
|
|
56
|
+
}));
|
|
57
|
+
export const formFieldInfoToFieldTypeOption = (formId, field, formName) => ({
|
|
58
|
+
type: FieldTypeEnum.forms,
|
|
59
|
+
label: field.header,
|
|
60
|
+
path: buildFormFieldKey(formId, field.id),
|
|
61
|
+
formSnapshot: buildFormFieldSnapshot(formId, formName, field),
|
|
62
|
+
...(isFormFieldCalculationType(field.itemType) ? { fieldType: field.itemType } : {}),
|
|
63
|
+
});
|
|
64
|
+
export const formFieldToDisplayConditionDataPointOption = (form, field) => ({
|
|
65
|
+
fullKey: buildFormFieldKey(form.id, field.id),
|
|
66
|
+
title: field.header,
|
|
67
|
+
fieldType: field.itemType === 'number' ? 'number' : 'string',
|
|
68
|
+
formSnapshot: buildFormFieldSnapshot(form.id, form.name, field),
|
|
69
|
+
});
|
|
70
|
+
export const getDisplayConditionFieldTypeForKey = (dataPointKey, mergeTagOptions, fillableOptions, formFieldsByFormId) => {
|
|
71
|
+
const fromLists = [...mergeTagOptions, ...fillableOptions].find(o => o.fullKey === dataPointKey);
|
|
72
|
+
if (fromLists) {
|
|
73
|
+
return fromLists.fieldType;
|
|
74
|
+
}
|
|
75
|
+
const parsed = parseFormFieldKey(dataPointKey);
|
|
76
|
+
if (!parsed) {
|
|
77
|
+
return 'string';
|
|
78
|
+
}
|
|
79
|
+
const fields = formFieldsByFormId[parsed.formId];
|
|
80
|
+
const field = fields === null || fields === void 0 ? void 0 : fields.find(f => normalizeFormFieldIdForPath(f.id) === parsed.fieldId);
|
|
81
|
+
if (!field) {
|
|
82
|
+
return 'string';
|
|
83
|
+
}
|
|
84
|
+
return field.itemType === 'number' ? 'number' : 'string';
|
|
85
|
+
};
|
|
86
|
+
export const inferDisplayConditionSourceKind = (dataPointKey, mergeTagOptions, fillableOptions) => {
|
|
87
|
+
if (!dataPointKey) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
if (parseFormFieldKey(dataPointKey)) {
|
|
91
|
+
return FieldTypeEnum.forms;
|
|
92
|
+
}
|
|
93
|
+
if (fillableOptions.some(o => o.fullKey === dataPointKey)) {
|
|
94
|
+
return FieldTypeEnum.fillable;
|
|
95
|
+
}
|
|
96
|
+
if (mergeTagOptions.some(o => o.fullKey === dataPointKey)) {
|
|
97
|
+
return FieldTypeEnum.dataModel;
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=form-fields.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-fields.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/form-fields.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -7,13 +7,20 @@ import type {
|
|
|
7
7
|
DataPointOption,
|
|
8
8
|
DisplayConditionGroup,
|
|
9
9
|
DisplayConditionSingle,
|
|
10
|
+
FormFieldsByFormIdI,
|
|
11
|
+
FormInfo,
|
|
10
12
|
} from '../../interface/types';
|
|
11
13
|
import { ConditionRow } from './condition-row';
|
|
12
14
|
|
|
13
15
|
export interface ConditionGroupProps {
|
|
14
16
|
canDelete: boolean;
|
|
15
17
|
conditionJoinOperator: 'and' | 'or';
|
|
16
|
-
|
|
18
|
+
fillableOptions: DataPointOption[];
|
|
19
|
+
mergeTagOptions: DataPointOption[];
|
|
20
|
+
forms?: FormInfo[];
|
|
21
|
+
formFieldsByFormId?: FormFieldsByFormIdI;
|
|
22
|
+
onRequestFormFields?: (formId: number) => void;
|
|
23
|
+
formFieldsLoadingFormId?: number | null;
|
|
17
24
|
group: DisplayConditionGroup;
|
|
18
25
|
onDelete: () => void;
|
|
19
26
|
onUpdate: (g: DisplayConditionGroup) => void;
|
|
@@ -25,9 +32,14 @@ export interface ConditionGroupProps {
|
|
|
25
32
|
export function ConditionGroup({
|
|
26
33
|
canDelete,
|
|
27
34
|
conditionJoinOperator,
|
|
28
|
-
|
|
35
|
+
fillableOptions,
|
|
36
|
+
formFieldsByFormId,
|
|
37
|
+
formFieldsLoadingFormId,
|
|
38
|
+
forms,
|
|
29
39
|
group,
|
|
40
|
+
mergeTagOptions,
|
|
30
41
|
onDelete,
|
|
42
|
+
onRequestFormFields,
|
|
31
43
|
onUpdate,
|
|
32
44
|
ruleIndex,
|
|
33
45
|
totalRuleCount,
|
|
@@ -70,7 +82,7 @@ export function ConditionGroup({
|
|
|
70
82
|
const showRuleHeading = totalRuleCount > 1;
|
|
71
83
|
|
|
72
84
|
return (
|
|
73
|
-
<Flex direction="column" gap="2" flex={1}>
|
|
85
|
+
<Flex direction="column" gap="2" flex={1} style={{ padding: '0 8px' }}>
|
|
74
86
|
{showRuleHeading && (
|
|
75
87
|
<Flex direction="row" alignItems="center" justifyContent="space-between" flex={1}>
|
|
76
88
|
<Text size="medium" variant="body" style={{ fontWeight: 'bold' }}>
|
|
@@ -89,13 +101,28 @@ export function ConditionGroup({
|
|
|
89
101
|
)}
|
|
90
102
|
<Flex direction="column" gap="3" flex={1}>
|
|
91
103
|
{group.conditions.map((c, i) => (
|
|
92
|
-
<Flex
|
|
104
|
+
<Flex
|
|
105
|
+
key={c.id}
|
|
106
|
+
direction="column"
|
|
107
|
+
gap="3"
|
|
108
|
+
style={{
|
|
109
|
+
padding: '8px',
|
|
110
|
+
background: '#f7f7f7',
|
|
111
|
+
boxShadow: '0px 0px 4px 1px #e0e0e0',
|
|
112
|
+
borderRadius: '8px',
|
|
113
|
+
}}
|
|
114
|
+
>
|
|
93
115
|
<ConditionRow
|
|
94
116
|
canRemove
|
|
95
117
|
condition={c}
|
|
96
|
-
|
|
118
|
+
fillableOptions={fillableOptions}
|
|
119
|
+
formFieldsByFormId={formFieldsByFormId}
|
|
120
|
+
formFieldsLoadingFormId={formFieldsLoadingFormId}
|
|
121
|
+
forms={forms}
|
|
122
|
+
mergeTagOptions={mergeTagOptions}
|
|
97
123
|
onRemove={() => removeCondition(i)}
|
|
98
124
|
onChange={next => updateCondition(i, next)}
|
|
125
|
+
onRequestFormFields={onRequestFormFields}
|
|
99
126
|
/>
|
|
100
127
|
</Flex>
|
|
101
128
|
))}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { Button, Flex } from '@servicetitan/anvil2';
|
|
2
2
|
import PlusIcon from '@servicetitan/anvil2/assets/icons/material/round/add.svg';
|
|
3
3
|
import { MAX_DISPLAY_CONDITION_RULES_UI } from '../../constants';
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
DataPointOption,
|
|
6
|
+
DisplayConditionGroup,
|
|
7
|
+
FormFieldsByFormIdI,
|
|
8
|
+
FormInfo,
|
|
9
|
+
} from '../../interface/types';
|
|
5
10
|
import { ConditionGroup } from './condition-group';
|
|
6
11
|
|
|
7
12
|
export interface ConditionGroupsSectionProps {
|
|
8
13
|
conditionJoinOperator: 'and' | 'or';
|
|
9
|
-
|
|
14
|
+
fillableOptions: DataPointOption[];
|
|
15
|
+
mergeTagOptions: DataPointOption[];
|
|
16
|
+
forms?: FormInfo[];
|
|
17
|
+
formFieldsByFormId?: FormFieldsByFormIdI;
|
|
18
|
+
onRequestFormFields?: (formId: number) => void;
|
|
19
|
+
formFieldsLoadingFormId?: number | null;
|
|
10
20
|
groups: DisplayConditionGroup[];
|
|
11
21
|
onAddGroup: () => void;
|
|
12
22
|
onRemoveGroup: (index: number) => void;
|
|
@@ -15,10 +25,15 @@ export interface ConditionGroupsSectionProps {
|
|
|
15
25
|
|
|
16
26
|
export function ConditionGroupsSection({
|
|
17
27
|
conditionJoinOperator,
|
|
18
|
-
|
|
28
|
+
fillableOptions,
|
|
29
|
+
formFieldsByFormId,
|
|
30
|
+
formFieldsLoadingFormId,
|
|
31
|
+
forms,
|
|
19
32
|
groups,
|
|
33
|
+
mergeTagOptions,
|
|
20
34
|
onAddGroup,
|
|
21
35
|
onRemoveGroup,
|
|
36
|
+
onRequestFormFields,
|
|
22
37
|
onUpdateGroup,
|
|
23
38
|
}: Readonly<ConditionGroupsSectionProps>) {
|
|
24
39
|
return (
|
|
@@ -28,10 +43,15 @@ export function ConditionGroupsSection({
|
|
|
28
43
|
<ConditionGroup
|
|
29
44
|
canDelete={groups.length > 1}
|
|
30
45
|
conditionJoinOperator={conditionJoinOperator}
|
|
31
|
-
|
|
46
|
+
fillableOptions={fillableOptions}
|
|
47
|
+
formFieldsByFormId={formFieldsByFormId}
|
|
48
|
+
formFieldsLoadingFormId={formFieldsLoadingFormId}
|
|
49
|
+
forms={forms}
|
|
32
50
|
group={group}
|
|
51
|
+
mergeTagOptions={mergeTagOptions}
|
|
33
52
|
onDelete={() => onRemoveGroup(index)}
|
|
34
53
|
onUpdate={g => onUpdateGroup(index, g)}
|
|
54
|
+
onRequestFormFields={onRequestFormFields}
|
|
35
55
|
ruleIndex={index}
|
|
36
56
|
totalRuleCount={groups.length}
|
|
37
57
|
/>
|