@servicetitan/dte-pdf-editor 1.87.0 → 1.89.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 +37 -30
- package/dist/components/display-conditions/condition-row.d.ts.map +1 -1
- package/dist/components/display-conditions/condition-row.js +51 -22
- package/dist/components/display-conditions/condition-row.js.map +1 -1
- package/dist/components/display-conditions/condition-value-control.d.ts.map +1 -1
- package/dist/components/display-conditions/condition-value-control.js +1 -2
- package/dist/components/display-conditions/condition-value-control.js.map +1 -1
- package/dist/components/display-conditions/display-condition-modal.d.ts.map +1 -1
- package/dist/components/display-conditions/display-condition-modal.js +6 -49
- package/dist/components/display-conditions/display-condition-modal.js.map +1 -1
- package/dist/components/field-config-panel/e-sign-date-rules-summary.d.ts +12 -0
- package/dist/components/field-config-panel/e-sign-date-rules-summary.d.ts.map +1 -0
- package/dist/components/field-config-panel/e-sign-date-rules-summary.js +37 -0
- package/dist/components/field-config-panel/e-sign-date-rules-summary.js.map +1 -0
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.d.ts +16 -0
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.d.ts.map +1 -0
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.js +77 -0
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.js.map +1 -0
- package/dist/components/field-config-panel/e-sign-offset-rule-row.d.ts +16 -0
- package/dist/components/field-config-panel/e-sign-offset-rule-row.d.ts.map +1 -0
- package/dist/components/field-config-panel/e-sign-offset-rule-row.js +25 -0
- package/dist/components/field-config-panel/e-sign-offset-rule-row.js.map +1 -0
- package/dist/components/field-config-panel/e-sign-options-modal.d.ts +15 -0
- package/dist/components/field-config-panel/e-sign-options-modal.d.ts.map +1 -0
- package/dist/components/field-config-panel/e-sign-options-modal.js +30 -0
- package/dist/components/field-config-panel/e-sign-options-modal.js.map +1 -0
- package/dist/components/field-config-panel/field-config-panel.d.ts.map +1 -1
- package/dist/components/field-config-panel/field-config-panel.js +30 -28
- package/dist/components/field-config-panel/field-config-panel.js.map +1 -1
- package/dist/components/field-sidebar/e-sign-field-type-list.d.ts.map +1 -1
- package/dist/components/field-sidebar/e-sign-field-type-list.js +1 -6
- package/dist/components/field-sidebar/e-sign-field-type-list.js.map +1 -1
- package/dist/constants/field.constants.d.ts +1 -5
- package/dist/constants/field.constants.d.ts.map +1 -1
- package/dist/constants/field.constants.js +21 -7
- package/dist/constants/field.constants.js.map +1 -1
- package/dist/hooks/usePdfFieldDnD.d.ts.map +1 -1
- package/dist/hooks/usePdfFieldDnD.js +13 -5
- package/dist/hooks/usePdfFieldDnD.js.map +1 -1
- package/dist/interface/types.d.ts +26 -1
- 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/styles/field-config-panel.css +11 -0
- package/dist/styles/field-type.css +12 -0
- package/dist/styles/index.css +1 -0
- package/dist/styles/variables.css +2 -0
- package/dist/utils/conditions/condition-match-type.utils.d.ts +14 -0
- package/dist/utils/conditions/condition-match-type.utils.d.ts.map +1 -0
- package/dist/utils/conditions/condition-match-type.utils.js +50 -0
- package/dist/utils/conditions/condition-match-type.utils.js.map +1 -0
- package/dist/utils/conditions/e-sign-offset-rules.utils.d.ts +17 -0
- package/dist/utils/conditions/e-sign-offset-rules.utils.d.ts.map +1 -0
- package/dist/utils/conditions/e-sign-offset-rules.utils.js +34 -0
- package/dist/utils/conditions/e-sign-offset-rules.utils.js.map +1 -0
- package/dist/utils/conditions/index.d.ts +2 -0
- package/dist/utils/conditions/index.d.ts.map +1 -1
- package/dist/utils/conditions/index.js +2 -0
- package/dist/utils/conditions/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/display-conditions/condition-row.tsx +114 -131
- package/src/components/display-conditions/condition-value-control.tsx +1 -2
- package/src/components/display-conditions/display-condition-modal.tsx +13 -63
- package/src/components/field-config-panel/e-sign-date-rules-summary.tsx +127 -0
- package/src/components/field-config-panel/e-sign-date-signed-offset-modal.tsx +229 -0
- package/src/components/field-config-panel/e-sign-offset-rule-row.tsx +91 -0
- package/src/components/field-config-panel/e-sign-options-modal.tsx +118 -0
- package/src/components/field-config-panel/field-config-panel.tsx +70 -91
- package/src/components/field-sidebar/e-sign-field-type-list.tsx +11 -14
- package/src/constants/field.constants.ts +21 -8
- package/src/hooks/usePdfFieldDnD.ts +17 -2
- package/src/interface/types.ts +34 -1
- package/src/styles/field-config-panel.css +11 -0
- package/src/styles/field-type.css +12 -0
- package/src/styles/index.css +1 -0
- package/src/styles/variables.css +2 -0
- package/src/utils/conditions/__tests__/condition-match-type.utils.test.ts +104 -0
- package/src/utils/conditions/__tests__/e-sign-offset-rules.utils.test.ts +109 -0
- package/src/utils/conditions/condition-match-type.utils.ts +80 -0
- package/src/utils/conditions/e-sign-offset-rules.utils.ts +61 -0
- package/src/utils/conditions/index.ts +2 -0
|
@@ -10,6 +10,7 @@ export declare enum ESignFieldType {
|
|
|
10
10
|
signature = "signature",
|
|
11
11
|
initials = "initials",
|
|
12
12
|
dateSigned = "dateSigned",
|
|
13
|
+
dateSignedOffset = "dateSignedOffset",
|
|
13
14
|
fullName = "fullName"
|
|
14
15
|
}
|
|
15
16
|
export type FillableFieldType = 'text' | 'date' | 'checkbox' | 'radio' | 'number';
|
|
@@ -47,7 +48,31 @@ export interface GenericFieldTableDataType {
|
|
|
47
48
|
export interface GenericFieldTextDataType {
|
|
48
49
|
value: string;
|
|
49
50
|
}
|
|
50
|
-
export
|
|
51
|
+
export interface ESignDateSignedOffsetSettingsRule {
|
|
52
|
+
days: number;
|
|
53
|
+
condition: DisplayConditionState;
|
|
54
|
+
}
|
|
55
|
+
export interface ESignDateSignedOffsetSettingsFinalRule {
|
|
56
|
+
days: number;
|
|
57
|
+
condition?: never;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Ordered "if/else if/.../else" chain of day-offset rules for an e-sign `dateSignedOffset` field.
|
|
61
|
+
* Rules are evaluated in array order; the first rule whose `condition` matches applies its `days`.
|
|
62
|
+
*
|
|
63
|
+
* The tuple shape encodes two invariants the UI and evaluator both rely on:
|
|
64
|
+
* - The last element is always the trailing else case: no `condition`, so it always matches.
|
|
65
|
+
* - Every element before it is a normal, conditioned rule (`ESignDateSignedOffsetSettingsRule`).
|
|
66
|
+
*
|
|
67
|
+
* `rules` therefore always has at least one entry (just the else rule) and never has a
|
|
68
|
+
* condition-less rule anywhere but last. `ESignOptionsModal` is the only place that splits this
|
|
69
|
+
* tuple apart (the else row is edited inline; the conditioned rules are edited in
|
|
70
|
+
* `ESignDateSignedOffsetModal`) and reassembles it before saving.
|
|
71
|
+
*/
|
|
72
|
+
export interface ESignDateSignedOffsetSettings {
|
|
73
|
+
rules: [ESignDateSignedOffsetSettingsFinalRule] | [...ESignDateSignedOffsetSettingsRule[], ESignDateSignedOffsetSettingsFinalRule];
|
|
74
|
+
}
|
|
75
|
+
export type FieldDataType = GenericFieldTableDataType | GenericFieldTextDataType | ESignDateSignedOffsetSettings;
|
|
51
76
|
export interface DisplayConditionState {
|
|
52
77
|
behavior: 'show' | 'hide';
|
|
53
78
|
groups: DisplayConditionGroup[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/interface/types.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACrB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,OAAO,YAAY;CACtB;AAED,oBAAY,cAAc;IACtB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,QAAQ,aAAa;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAChC,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,cAAc,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEpG,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE;YACH,KAAK,EAAE,MAAM,CAAC;SACjB,EAAE,CAAC;KACP,CAAC;IACF,IAAI,EAAE;QACF,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE;YACH,KAAK,EAAE,MAAM,CAAC;SACjB,EAAE,CAAC;KACP,EAAE,CAAC;CACP;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/interface/types.ts"],"names":[],"mappings":"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"}
|
package/dist/interface/types.js
CHANGED
|
@@ -12,6 +12,7 @@ export var ESignFieldType;
|
|
|
12
12
|
ESignFieldType["signature"] = "signature";
|
|
13
13
|
ESignFieldType["initials"] = "initials";
|
|
14
14
|
ESignFieldType["dateSigned"] = "dateSigned";
|
|
15
|
+
ESignFieldType["dateSignedOffset"] = "dateSignedOffset";
|
|
15
16
|
ESignFieldType["fullName"] = "fullName";
|
|
16
17
|
})(ESignFieldType || (ESignFieldType = {}));
|
|
17
18
|
/** Supported formula operators */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/interface/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACrB,wCAAuB,CAAA;IACvB,gCAAe,CAAA;IACf,gCAAe,CAAA;IACf,sCAAqB,CAAA;IACrB,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;AACvB,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/interface/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACrB,wCAAuB,CAAA;IACvB,gCAAe,CAAA;IACf,gCAAe,CAAA;IACf,sCAAqB,CAAA;IACrB,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;AACvB,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACtB,yCAAuB,CAAA;IACvB,uCAAqB,CAAA;IACrB,2CAAyB,CAAA;IACzB,uDAAqC,CAAA;IACrC,uCAAqB,CAAA;AACzB,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AA8JD,kCAAkC;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAmItD;;GAEG;AAEH,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;IACxD,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC9C,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACtD,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;CAC1C,CAAC;AAEX,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC3C,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;IAChD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC9C,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC3C,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5D,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,SAAS,EAAE;CACnD,CAAC;AAMX,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC9C,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAChD,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;IAC1C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC1C,CAAC;AAEX,6EAA6E;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE/C,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAwB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
.dte-rule-card {
|
|
2
|
+
padding: 12px;
|
|
3
|
+
background: var(--color-neutral-30, #f7f7f7);
|
|
4
|
+
border: 1px solid var(--border-color);
|
|
5
|
+
border-radius: var(--radius-2);
|
|
6
|
+
|
|
7
|
+
&.--active {
|
|
8
|
+
border-color: var(--border-color-active, #2270ee);
|
|
9
|
+
background: var(--bg-color-secondary-active, #fafcff);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -15,3 +15,15 @@
|
|
|
15
15
|
.dte-field-type-item:hover {
|
|
16
16
|
box-shadow: 0 0 2px 0 var(--border-color-active);
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
.dte-field-type-items-wrapper {
|
|
20
|
+
&.--grid-2 {
|
|
21
|
+
display: grid;
|
|
22
|
+
grid-template-columns: 1fr 1fr;
|
|
23
|
+
gap: var(--spacing-1, 8px);
|
|
24
|
+
|
|
25
|
+
.dte-field-type-item {
|
|
26
|
+
margin-top: var(--spacing-0, 0);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
package/dist/styles/index.css
CHANGED
|
@@ -28,11 +28,13 @@
|
|
|
28
28
|
--color-neutral-70: var(--color-neutral-70, #737475);
|
|
29
29
|
--color-neutral-200: var(--color-neutral-200, #6c6d70);
|
|
30
30
|
--color-neutral-300: var(--color-neutral-300, #2d2e31);
|
|
31
|
+
--color-blue-100: var(--color-blue-100, #fafcff);
|
|
31
32
|
|
|
32
33
|
/* Background colors */
|
|
33
34
|
--bg-color-light: var(--color-neutral-0, #ffffff);
|
|
34
35
|
--bg-color-main: var(--color-neutral-20, #fafafa);
|
|
35
36
|
--bg-color-secondary: var(--color-neutral-50, #eeeeee);
|
|
37
|
+
--bg-color-secondary-active: var(--color-blue-100, #fafcff);
|
|
36
38
|
--bg-color: var(--color-neutral-200, #f5f5f5);
|
|
37
39
|
--bg-color-hover: #eaeaea;
|
|
38
40
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DataPointOption, DisplayConditionGroup, DisplayConditionState, FormFieldsByFormIdI } from '../../interface/types';
|
|
2
|
+
export type ConditionMatchType = 'and' | 'or';
|
|
3
|
+
/** Derives All/Any (and/or) toggle value from the operators already stored on a condition state. */
|
|
4
|
+
export declare const deriveConditionMatchType: (conditionState: DisplayConditionState) => ConditionMatchType;
|
|
5
|
+
/** Stamps the given All/Any (and/or) value onto every group/condition after the first in each. */
|
|
6
|
+
export declare const applyConditionMatchType: (conditionState: DisplayConditionState, matchType: ConditionMatchType) => DisplayConditionState;
|
|
7
|
+
export interface ConditionValidationDeps {
|
|
8
|
+
mergeTagOptions: DataPointOption[];
|
|
9
|
+
fillableOptions: DataPointOption[];
|
|
10
|
+
formFieldsByFormId?: FormFieldsByFormIdI;
|
|
11
|
+
}
|
|
12
|
+
/** True when every condition in every group has a data point and a usable value for its type. */
|
|
13
|
+
export declare const isValidConditionGroups: (groups: DisplayConditionGroup[], { fillableOptions, formFieldsByFormId, mergeTagOptions }: ConditionValidationDeps) => boolean;
|
|
14
|
+
//# sourceMappingURL=condition-match-type.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-match-type.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/conditions/condition-match-type.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACtB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,IAAI,CAAC;AAE9C,oGAAoG;AACpG,eAAO,MAAM,wBAAwB,GACjC,gBAAgB,qBAAqB,KACtC,kBAaF,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,uBAAuB,GAChC,gBAAgB,qBAAqB,EACrC,WAAW,kBAAkB,KAC9B,qBASD,CAAC;AAEH,MAAM,WAAW,uBAAuB;IACpC,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;CAC5C;AAED,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,qBAAqB,EAAE,EAC/B,0DAA0D,uBAAuB,KAClF,OAyBF,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getDisplayConditionFieldTypeForKey } from '../formula';
|
|
2
|
+
import { isValidNumber } from '../shared';
|
|
3
|
+
/** Derives All/Any (and/or) toggle value from the operators already stored on a condition state. */
|
|
4
|
+
export const deriveConditionMatchType = (conditionState) => {
|
|
5
|
+
var _a;
|
|
6
|
+
for (let g = 0; g < conditionState.groups.length; g++) {
|
|
7
|
+
const group = conditionState.groups[g];
|
|
8
|
+
if (g > 0 && group.logicalOperator === 'or') {
|
|
9
|
+
return 'or';
|
|
10
|
+
}
|
|
11
|
+
for (let i = 1; i < group.conditions.length; i++) {
|
|
12
|
+
if (((_a = group.conditions[i]) === null || _a === void 0 ? void 0 : _a.logicalOperator) === 'or') {
|
|
13
|
+
return 'or';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return 'and';
|
|
18
|
+
};
|
|
19
|
+
/** Stamps the given All/Any (and/or) value onto every group/condition after the first in each. */
|
|
20
|
+
export const applyConditionMatchType = (conditionState, matchType) => ({
|
|
21
|
+
...conditionState,
|
|
22
|
+
groups: conditionState.groups.map((group, groupIndex) => ({
|
|
23
|
+
...group,
|
|
24
|
+
...(groupIndex > 0 ? { logicalOperator: matchType } : {}),
|
|
25
|
+
conditions: group.conditions.map((c, i) => i === 0 ? { ...c, logicalOperator: undefined } : { ...c, logicalOperator: matchType }),
|
|
26
|
+
})),
|
|
27
|
+
});
|
|
28
|
+
/** True when every condition in every group has a data point and a usable value for its type. */
|
|
29
|
+
export const isValidConditionGroups = (groups, { fillableOptions, formFieldsByFormId, mergeTagOptions }) => {
|
|
30
|
+
for (const group of groups) {
|
|
31
|
+
for (const condition of group.conditions) {
|
|
32
|
+
if (!condition.dataPointKey) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (condition.operator === 'is_empty' || condition.operator === 'is_not_empty') {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const trimmedValue = condition.value.trim();
|
|
39
|
+
if (!trimmedValue) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const fieldType = getDisplayConditionFieldTypeForKey(condition.dataPointKey, mergeTagOptions, fillableOptions, formFieldsByFormId !== null && formFieldsByFormId !== void 0 ? formFieldsByFormId : {});
|
|
43
|
+
if (fieldType === 'number' && !isValidNumber(trimmedValue)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return groups.length > 0;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=condition-match-type.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-match-type.utils.js","sourceRoot":"","sources":["../../../src/utils/conditions/condition-match-type.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ESignDateSignedOffsetSettings, ESignDateSignedOffsetSettingsRule } from '../../interface/types';
|
|
2
|
+
/**
|
|
3
|
+
* Product limit: rules (the conditioned rules managed here, plus the trailing else row that
|
|
4
|
+
* lives outside this array) may not exceed this total.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MAX_ESIGN_OFFSET_RULES = 5;
|
|
7
|
+
export declare const createESignOffsetRule: () => ESignDateSignedOffsetSettingsRule;
|
|
8
|
+
/** Same single blank rule shown when the user first clicks Set Date Rule. */
|
|
9
|
+
export declare const createInitialESignOffsetRules: () => ESignDateSignedOffsetSettingsRule[];
|
|
10
|
+
export declare const canAddESignOffsetRule: (rules: ESignDateSignedOffsetSettingsRule[]) => boolean;
|
|
11
|
+
/** Appends a new rule. No-op past the max. */
|
|
12
|
+
export declare const addESignOffsetRule: (rules: ESignDateSignedOffsetSettingsRule[]) => ESignDateSignedOffsetSettingsRule[];
|
|
13
|
+
export declare const updateESignOffsetRule: (rules: ESignDateSignedOffsetSettingsRule[], index: number, rule: ESignDateSignedOffsetSettingsRule) => ESignDateSignedOffsetSettingsRule[];
|
|
14
|
+
export declare const removeESignOffsetRule: (rules: ESignDateSignedOffsetSettingsRule[], index: number) => ESignDateSignedOffsetSettingsRule[];
|
|
15
|
+
export declare const createClearedESignOffsetSettings: () => ESignDateSignedOffsetSettings;
|
|
16
|
+
export declare const getESignOffsetRulesForSave: (rules: ESignDateSignedOffsetSettingsRule[], hasClearedRules: boolean, hasConfiguredRules: boolean) => ESignDateSignedOffsetSettingsRule[];
|
|
17
|
+
//# sourceMappingURL=e-sign-offset-rules.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e-sign-offset-rules.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/conditions/e-sign-offset-rules.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,6BAA6B,EAC7B,iCAAiC,EACpC,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,qBAAqB,QAAO,iCAGvC,CAAC;AAEH,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,QAAO,iCAAiC,EAEjF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,iCAAiC,EAAE,KAAG,OACtC,CAAC;AAE9C,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,GAC3B,OAAO,iCAAiC,EAAE,KAC3C,iCAAiC,EAC0C,CAAC;AAE/E,eAAO,MAAM,qBAAqB,GAC9B,OAAO,iCAAiC,EAAE,EAC1C,OAAO,MAAM,EACb,MAAM,iCAAiC,KACxC,iCAAiC,EAInC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAC9B,OAAO,iCAAiC,EAAE,EAC1C,OAAO,MAAM,KACd,iCAAiC,EAEnC,CAAC;AAEF,eAAO,MAAM,gCAAgC,QAAO,6BAInD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACnC,OAAO,iCAAiC,EAAE,EAC1C,iBAAiB,OAAO,EACxB,oBAAoB,OAAO,KAC5B,iCAAiC,EAEnC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { defaultGroup } from '../../constants';
|
|
2
|
+
/**
|
|
3
|
+
* Product limit: rules (the conditioned rules managed here, plus the trailing else row that
|
|
4
|
+
* lives outside this array) may not exceed this total.
|
|
5
|
+
*/
|
|
6
|
+
export const MAX_ESIGN_OFFSET_RULES = 5;
|
|
7
|
+
export const createESignOffsetRule = () => ({
|
|
8
|
+
days: 0,
|
|
9
|
+
condition: { behavior: 'show', groups: [defaultGroup()] },
|
|
10
|
+
});
|
|
11
|
+
/** Same single blank rule shown when the user first clicks Set Date Rule. */
|
|
12
|
+
export const createInitialESignOffsetRules = () => {
|
|
13
|
+
return [createESignOffsetRule()];
|
|
14
|
+
};
|
|
15
|
+
export const canAddESignOffsetRule = (rules) => rules.length < MAX_ESIGN_OFFSET_RULES - 1;
|
|
16
|
+
/** Appends a new rule. No-op past the max. */
|
|
17
|
+
export const addESignOffsetRule = (rules) => canAddESignOffsetRule(rules) ? [...rules, createESignOffsetRule()] : rules;
|
|
18
|
+
export const updateESignOffsetRule = (rules, index, rule) => {
|
|
19
|
+
const next = [...rules];
|
|
20
|
+
next[index] = rule;
|
|
21
|
+
return next;
|
|
22
|
+
};
|
|
23
|
+
export const removeESignOffsetRule = (rules, index) => {
|
|
24
|
+
return rules.filter((_, i) => i !== index);
|
|
25
|
+
};
|
|
26
|
+
export const createClearedESignOffsetSettings = () => {
|
|
27
|
+
return {
|
|
28
|
+
rules: [{ days: 0 }],
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export const getESignOffsetRulesForSave = (rules, hasClearedRules, hasConfiguredRules) => {
|
|
32
|
+
return hasClearedRules && !hasConfiguredRules ? [] : rules;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=e-sign-offset-rules.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e-sign-offset-rules.utils.js","sourceRoot":"","sources":["../../../src/utils/conditions/e-sign-offset-rules.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAsC,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;CAC5D,CAAC,CAAC;AAEH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAwC,EAAE;IACnF,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAA0C,EAAW,EAAE,CACzF,KAAK,CAAC,MAAM,GAAG,sBAAsB,GAAG,CAAC,CAAC;AAE9C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,KAA0C,EACP,EAAE,CACrC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,KAA0C,EAC1C,KAAa,EACb,IAAuC,EACJ,EAAE;IACrC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACnB,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,KAA0C,EAC1C,KAAa,EACsB,EAAE;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAkC,EAAE;IAChF,OAAO;QACH,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACtC,KAA0C,EAC1C,eAAwB,EACxB,kBAA2B,EACQ,EAAE;IACrC,OAAO,eAAe,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/conditions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/conditions/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/conditions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/conditions/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button, Chip,
|
|
1
|
+
import { Button, Chip, Flex, SelectFieldSync, Text } from '@servicetitan/anvil2';
|
|
2
2
|
import TrashIcon from '@servicetitan/anvil2/assets/icons/material/round/delete.svg';
|
|
3
3
|
import { useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import {
|
|
@@ -220,6 +220,68 @@ export function ConditionRow({
|
|
|
220
220
|
[operatorItems, condition.operator],
|
|
221
221
|
);
|
|
222
222
|
|
|
223
|
+
const sourceKindSelectOptions = useMemo(
|
|
224
|
+
() => sourceKindOptions.map(option => ({ id: option.value, label: option.label })),
|
|
225
|
+
[sourceKindOptions],
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const selectedSourceKindSelectOption = selectedSourceKindOption
|
|
229
|
+
? { id: selectedSourceKindOption.value, label: selectedSourceKindOption.label }
|
|
230
|
+
: null;
|
|
231
|
+
|
|
232
|
+
const handleSourceKindSelect = (option: { id: string; label: string } | null) => {
|
|
233
|
+
handleSourceKindChange(sourceKindOptions.find(o => o.value === option?.id) ?? null);
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
const formSelectOptions = useMemo(
|
|
237
|
+
() => sortedForms.map(form => ({ id: form.id, label: form.name })),
|
|
238
|
+
[sortedForms],
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
const selectedFormSelectOption = pickerForm
|
|
242
|
+
? { id: pickerForm.id, label: pickerForm.name }
|
|
243
|
+
: null;
|
|
244
|
+
|
|
245
|
+
const handleFormSelect = (option: { id: number; label: string }) => {
|
|
246
|
+
handlePickerFormChange(sortedForms.find(f => f.id === option?.id) ?? null);
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
const dataPointSelectOptions = useMemo(
|
|
250
|
+
() => dataPointItems.map(item => ({ id: item.fullKey, label: item.title })),
|
|
251
|
+
[dataPointItems],
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
const selectedDataPointSelectOption = selectedDataPoint
|
|
255
|
+
? { id: selectedDataPoint.fullKey, label: selectedDataPoint.title }
|
|
256
|
+
: null;
|
|
257
|
+
|
|
258
|
+
const handleDataPointSelect = (option: { id: string; label: string }) => {
|
|
259
|
+
handleDataPointChange(dataPointItems.find(item => item.fullKey === option?.id) ?? null);
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
const operatorSelectOptions = useMemo(
|
|
263
|
+
() => operatorItems.map(op => ({ id: op.value, label: op.label })),
|
|
264
|
+
[operatorItems],
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
const selectedOperatorSelectOption = selectedOperator
|
|
268
|
+
? { id: selectedOperator.value, label: selectedOperator.label }
|
|
269
|
+
: null;
|
|
270
|
+
|
|
271
|
+
const handleOperatorSelect = (option: { id: string; label: string } | null) => {
|
|
272
|
+
const nextOperator = (option?.id ?? 'is_equal_to') as DisplayConditionSingle['operator'];
|
|
273
|
+
onChange({
|
|
274
|
+
...condition,
|
|
275
|
+
operator: nextOperator,
|
|
276
|
+
...(isCheckbox
|
|
277
|
+
? {
|
|
278
|
+
value: CHECKBOX_CONDITION_VALUE,
|
|
279
|
+
valueLabel: undefined,
|
|
280
|
+
}
|
|
281
|
+
: {}),
|
|
282
|
+
});
|
|
283
|
+
};
|
|
284
|
+
|
|
223
285
|
const isValueLess =
|
|
224
286
|
isCheckbox || VALUE_LESS_OPERATORS.includes(condition.operator as ConditionOperator);
|
|
225
287
|
|
|
@@ -336,51 +398,27 @@ export function ConditionRow({
|
|
|
336
398
|
return (
|
|
337
399
|
<Flex direction="column" gap="4" flex={1}>
|
|
338
400
|
<Flex flex={1} gap="2">
|
|
339
|
-
<
|
|
401
|
+
<SelectFieldSync
|
|
340
402
|
flex={1}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
<Combobox.Content>
|
|
350
|
-
{({ items }: { items: SourceKindOption[] }) => (
|
|
351
|
-
<Combobox.List>
|
|
352
|
-
{items.map((item, i) => (
|
|
353
|
-
<Combobox.Item index={i} item={item} key={item.value}>
|
|
354
|
-
{item.label}
|
|
355
|
-
</Combobox.Item>
|
|
356
|
-
))}
|
|
357
|
-
</Combobox.List>
|
|
358
|
-
)}
|
|
359
|
-
</Combobox.Content>
|
|
360
|
-
</Combobox>
|
|
403
|
+
disableSearch
|
|
404
|
+
disableClearButton
|
|
405
|
+
label="Source"
|
|
406
|
+
placeholder="Select source..."
|
|
407
|
+
options={sourceKindSelectOptions}
|
|
408
|
+
value={selectedSourceKindSelectOption}
|
|
409
|
+
onSelectedOptionChange={handleSourceKindSelect}
|
|
410
|
+
/>
|
|
361
411
|
{sourceKind === FieldTypeEnum.forms && (
|
|
362
|
-
<
|
|
412
|
+
<SelectFieldSync
|
|
363
413
|
flex={1}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
<Combobox.Content>
|
|
373
|
-
{({ items }: { items: FormInfo[] }) => (
|
|
374
|
-
<Combobox.List>
|
|
375
|
-
{items.map((item, i) => (
|
|
376
|
-
<Combobox.Item index={i} item={item} key={item.id}>
|
|
377
|
-
{item.name}
|
|
378
|
-
</Combobox.Item>
|
|
379
|
-
))}
|
|
380
|
-
</Combobox.List>
|
|
381
|
-
)}
|
|
382
|
-
</Combobox.Content>
|
|
383
|
-
</Combobox>
|
|
414
|
+
disableSearch
|
|
415
|
+
disableClearButton
|
|
416
|
+
label="Select Form"
|
|
417
|
+
placeholder="Select form..."
|
|
418
|
+
options={formSelectOptions}
|
|
419
|
+
value={selectedFormSelectOption}
|
|
420
|
+
onSelectedOptionChange={handleFormSelect}
|
|
421
|
+
/>
|
|
384
422
|
)}
|
|
385
423
|
</Flex>
|
|
386
424
|
|
|
@@ -401,113 +439,58 @@ export function ConditionRow({
|
|
|
401
439
|
</Flex>
|
|
402
440
|
|
|
403
441
|
<Flex flex={1} style={{ minWidth: 160 }}>
|
|
404
|
-
<
|
|
442
|
+
<SelectFieldSync
|
|
405
443
|
flex={1}
|
|
444
|
+
disableSearch
|
|
445
|
+
disableClearButton
|
|
406
446
|
disabled={
|
|
407
447
|
sourceKind === FieldTypeEnum.forms &&
|
|
408
448
|
(!pickerForm || isLoadingFormFields)
|
|
409
449
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
: sourceKind === FieldTypeEnum.forms && !pickerForm
|
|
423
|
-
? 'Select a form first...'
|
|
424
|
-
: 'Select data point...'
|
|
425
|
-
}
|
|
426
|
-
/>
|
|
427
|
-
<Combobox.Content>
|
|
428
|
-
{({ items }: { items: DataPointOption[] }) => (
|
|
429
|
-
<Combobox.List>
|
|
430
|
-
{items.map((item, i) => (
|
|
431
|
-
<Combobox.Item index={i} item={item} key={item.fullKey}>
|
|
432
|
-
{item.title}
|
|
433
|
-
</Combobox.Item>
|
|
434
|
-
))}
|
|
435
|
-
</Combobox.List>
|
|
436
|
-
)}
|
|
437
|
-
</Combobox.Content>
|
|
438
|
-
</Combobox>
|
|
450
|
+
label="Data point"
|
|
451
|
+
placeholder={
|
|
452
|
+
sourceKind === FieldTypeEnum.forms && isLoadingFormFields
|
|
453
|
+
? 'Loading fields...'
|
|
454
|
+
: sourceKind === FieldTypeEnum.forms && !pickerForm
|
|
455
|
+
? 'Select a form first...'
|
|
456
|
+
: 'Select data point...'
|
|
457
|
+
}
|
|
458
|
+
options={dataPointSelectOptions}
|
|
459
|
+
value={selectedDataPointSelectOption}
|
|
460
|
+
onSelectedOptionChange={handleDataPointSelect}
|
|
461
|
+
/>
|
|
439
462
|
</Flex>
|
|
440
463
|
<Flex flex={1} style={{ minWidth: 160 }}>
|
|
441
|
-
<
|
|
464
|
+
<SelectFieldSync
|
|
442
465
|
flex={1}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
...condition,
|
|
452
|
-
operator: nextOperator,
|
|
453
|
-
...(isCheckbox
|
|
454
|
-
? {
|
|
455
|
-
value: CHECKBOX_CONDITION_VALUE,
|
|
456
|
-
valueLabel: undefined,
|
|
457
|
-
}
|
|
458
|
-
: {}),
|
|
459
|
-
});
|
|
460
|
-
}}
|
|
461
|
-
filterOptions={{ keys: ['label'] }}
|
|
462
|
-
>
|
|
463
|
-
<Combobox.SelectTrigger label="Condition" placeholder="Select..." />
|
|
464
|
-
<Combobox.Content>
|
|
465
|
-
{({ items }: { items: OperatorOption[] }) => (
|
|
466
|
-
<Combobox.List>
|
|
467
|
-
{items.map((item, i) => (
|
|
468
|
-
<Combobox.Item index={i} item={item} key={item.value}>
|
|
469
|
-
{item.label}
|
|
470
|
-
</Combobox.Item>
|
|
471
|
-
))}
|
|
472
|
-
</Combobox.List>
|
|
473
|
-
)}
|
|
474
|
-
</Combobox.Content>
|
|
475
|
-
</Combobox>
|
|
466
|
+
disableSearch
|
|
467
|
+
disableClearButton
|
|
468
|
+
label="Condition"
|
|
469
|
+
placeholder="Select..."
|
|
470
|
+
options={operatorSelectOptions}
|
|
471
|
+
value={selectedOperatorSelectOption}
|
|
472
|
+
onSelectedOptionChange={handleOperatorSelect}
|
|
473
|
+
/>
|
|
476
474
|
</Flex>
|
|
477
475
|
{!isValueLess && (
|
|
478
476
|
<Flex flex={1} style={{ minWidth: 160 }}>
|
|
479
477
|
{isRadioGroup ? (
|
|
480
|
-
<
|
|
478
|
+
<SelectFieldSync
|
|
481
479
|
flex={1}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
480
|
+
disableSearch
|
|
481
|
+
label="Value"
|
|
482
|
+
disableClearButton
|
|
483
|
+
placeholder="Select radio option..."
|
|
484
|
+
options={radioValueOptions}
|
|
485
|
+
value={selectedRadioValue}
|
|
486
|
+
onSelectedOptionChange={(item: RadioGroupOption | null) =>
|
|
487
487
|
onChange({
|
|
488
488
|
...condition,
|
|
489
489
|
value: item?.id ?? '',
|
|
490
490
|
valueLabel: undefined,
|
|
491
491
|
})
|
|
492
492
|
}
|
|
493
|
-
|
|
494
|
-
>
|
|
495
|
-
<Combobox.SelectTrigger
|
|
496
|
-
label="Value"
|
|
497
|
-
placeholder="Select radio option..."
|
|
498
|
-
/>
|
|
499
|
-
<Combobox.Content>
|
|
500
|
-
{({ items }) => (
|
|
501
|
-
<Combobox.List>
|
|
502
|
-
{items.map((item, i) => (
|
|
503
|
-
<Combobox.Item index={i} item={item} key={item.id}>
|
|
504
|
-
{item.label}
|
|
505
|
-
</Combobox.Item>
|
|
506
|
-
))}
|
|
507
|
-
</Combobox.List>
|
|
508
|
-
)}
|
|
509
|
-
</Combobox.Content>
|
|
510
|
-
</Combobox>
|
|
493
|
+
/>
|
|
511
494
|
) : (
|
|
512
495
|
<ConditionValueControl
|
|
513
496
|
value={condition.value}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { TextField } from '@servicetitan/anvil2';
|
|
2
|
-
import { SelectField, SelectFieldOption, SelectFieldSync } from '@servicetitan/anvil2/beta';
|
|
1
|
+
import { SelectField, SelectFieldOption, SelectFieldSync, TextField } from '@servicetitan/anvil2';
|
|
3
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
3
|
import { useLookupOptions } from '../../hooks';
|
|
5
4
|
import type { LookupOption } from '../../interface/host-events';
|