@servicetitan/dte-pdf-editor 1.88.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/dist/components/field-config-panel/e-sign-date-rules-summary.d.ts +1 -0
- package/dist/components/field-config-panel/e-sign-date-rules-summary.d.ts.map +1 -1
- package/dist/components/field-config-panel/e-sign-date-rules-summary.js +3 -2
- package/dist/components/field-config-panel/e-sign-date-rules-summary.js.map +1 -1
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.d.ts.map +1 -1
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.js +27 -12
- package/dist/components/field-config-panel/e-sign-date-signed-offset-modal.js.map +1 -1
- package/dist/components/field-config-panel/e-sign-options-modal.d.ts.map +1 -1
- package/dist/components/field-config-panel/e-sign-options-modal.js +5 -1
- package/dist/components/field-config-panel/e-sign-options-modal.js.map +1 -1
- package/dist/utils/conditions/e-sign-offset-rules.utils.d.ts +6 -1
- package/dist/utils/conditions/e-sign-offset-rules.utils.d.ts.map +1 -1
- package/dist/utils/conditions/e-sign-offset-rules.utils.js +15 -0
- package/dist/utils/conditions/e-sign-offset-rules.utils.js.map +1 -1
- package/package.json +1 -1
- package/src/components/field-config-panel/e-sign-date-rules-summary.tsx +21 -8
- package/src/components/field-config-panel/e-sign-date-signed-offset-modal.tsx +49 -17
- package/src/components/field-config-panel/e-sign-options-modal.tsx +6 -0
- package/src/utils/conditions/__tests__/e-sign-offset-rules.utils.test.ts +58 -0
- package/src/utils/conditions/e-sign-offset-rules.utils.ts +30 -1
|
@@ -5,6 +5,7 @@ export interface ESignDateRulesSummaryProps {
|
|
|
5
5
|
rulesWithConditions: ESignDateSignedOffsetSettingsRule[];
|
|
6
6
|
schema?: SchemaObject;
|
|
7
7
|
documentFields?: PdfField[];
|
|
8
|
+
onClear: () => void;
|
|
8
9
|
onEdit: () => void;
|
|
9
10
|
}
|
|
10
11
|
export declare const ESignDateRulesSummary: FC<ESignDateRulesSummaryProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e-sign-date-rules-summary.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-rules-summary.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"e-sign-date-rules-summary.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-rules-summary.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAC;AACpC,OAAO,EAIH,KAAK,iCAAiC,EAEtC,KAAK,QAAQ,EAEb,KAAK,YAAY,EAGpB,MAAM,uBAAuB,CAAC;AAa/B,MAAM,WAAW,0BAA0B;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,iCAAiC,EAAE,CAAC;IACzD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAyFhE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Flex, Text } from '@servicetitan/anvil2';
|
|
3
|
+
import DeleteIcon from '@servicetitan/anvil2/assets/icons/material/round/delete.svg';
|
|
3
4
|
import EditIcon from '@servicetitan/anvil2/assets/icons/material/round/edit.svg';
|
|
4
5
|
import { useMemo } from 'react';
|
|
5
6
|
import { CHECKBOX_OPERATORS, NUMBER_OPERATORS, RADIO_OPERATORS, STRING_OPERATORS, VALUE_LESS_OPERATORS, } from '../../interface/types';
|
|
@@ -11,7 +12,7 @@ const ALL_OPERATORS = [
|
|
|
11
12
|
...CHECKBOX_OPERATORS,
|
|
12
13
|
];
|
|
13
14
|
const getOperatorSymbol = (operator) => { var _a, _b; return (_b = (_a = ALL_OPERATORS.find(op => op.value === operator)) === null || _a === void 0 ? void 0 : _a.label.split(' (')[0]) !== null && _b !== void 0 ? _b : operator; };
|
|
14
|
-
export const ESignDateRulesSummary = ({ documentFields, elseDays, onEdit, rulesWithConditions, schema, }) => {
|
|
15
|
+
export const ESignDateRulesSummary = ({ documentFields, elseDays, onClear, onEdit, rulesWithConditions, schema, }) => {
|
|
15
16
|
const dataPointOptions = useMemo(() => getDataPointOptions(schema, documentFields), [schema, documentFields]);
|
|
16
17
|
const getConditionText = (condition) => {
|
|
17
18
|
var _a, _b;
|
|
@@ -23,7 +24,7 @@ export const ESignDateRulesSummary = ({ documentFields, elseDays, onEdit, rulesW
|
|
|
23
24
|
const value = (_b = condition.valueLabel) !== null && _b !== void 0 ? _b : condition.value;
|
|
24
25
|
return `${label} ${symbol}${isValueLess ? '' : ` ${value}`}`;
|
|
25
26
|
};
|
|
26
|
-
return (_jsxs(Flex, { direction: "column", gap: "1", children: [_jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [_jsx(Text, { variant: "body", size: "medium", style: { fontWeight: 500 }, children: "Calculated date rules" }), _jsx(Button, { appearance: "ghost", size: "small", icon: { before: EditIcon }, onClick: onEdit, children: "Edit" })] }), _jsxs(Flex, { direction: "column", gap: "2", className: "dte-rule-card --active", children: [rulesWithConditions.map((rule, index) => {
|
|
27
|
+
return (_jsxs(Flex, { direction: "column", gap: "1", children: [_jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [_jsx(Text, { variant: "body", size: "medium", style: { fontWeight: 500 }, children: "Calculated date rules" }), _jsxs(Flex, { gap: "2", children: [_jsx(Button, { appearance: "ghost", size: "small", icon: { before: EditIcon }, onClick: onEdit, children: "Edit" }), _jsx(Button, { appearance: "ghost", size: "small", icon: { before: DeleteIcon }, onClick: onClear, children: "Clear" })] })] }), _jsxs(Flex, { direction: "column", gap: "2", className: "dte-rule-card --active", children: [rulesWithConditions.map((rule, index) => {
|
|
27
28
|
var _a, _b, _c;
|
|
28
29
|
const condition = (_a = rule.condition.groups[0]) === null || _a === void 0 ? void 0 : _a.conditions[0];
|
|
29
30
|
return (_jsxs(Flex, { direction: "column", children: [_jsxs(Text, { variant: "body", children: [rule.days, " After Signing When:"] }), condition && (_jsx(Text, { variant: "body", size: "small", style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e-sign-date-rules-summary.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-rules-summary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,QAAQ,MAAM,2DAA2D,CAAC;AACjF,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EACH,kBAAkB,EAIlB,gBAAgB,EAEhB,eAAe,EAEf,gBAAgB,EAChB,oBAAoB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,aAAa,GAAG;IAClB,GAAG,gBAAgB;IACnB,GAAG,gBAAgB;IACnB,GAAG,eAAe;IAClB,GAAG,kBAAkB;CACxB,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE,eACnD,OAAA,MAAA,MAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,0CAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,mCAAI,QAAQ,CAAA,EAAA,CAAC;
|
|
1
|
+
{"version":3,"file":"e-sign-date-rules-summary.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-rules-summary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e-sign-date-signed-offset-modal.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-signed-offset-modal.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,EAAE,EAAkC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EACR,sCAAsC,EACtC,iCAAiC,EACjC,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"e-sign-date-signed-offset-modal.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-signed-offset-modal.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,EAAE,EAAkC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EACR,sCAAsC,EACtC,iCAAiC,EACjC,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;AAc/B,MAAM,WAAW,+BAA+B;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CACJ,KAAK,EAAE,iCAAiC,EAAE,EAC1C,SAAS,EAAE,sCAAsC,KAChD,IAAI,CAAC;IACV,YAAY,EAAE,iCAAiC,EAAE,CAAC;IAClD,SAAS,EAAE,sCAAsC,CAAC;IAClD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,+BAA+B,CA0K1E,CAAC"}
|
|
@@ -20,18 +20,27 @@ import { Button, Chip, Dialog, Flex, NumberField, Text } from '@servicetitan/anv
|
|
|
20
20
|
import PlusCircleIcon from '@servicetitan/anvil2/assets/icons/material/round/add_circle.svg';
|
|
21
21
|
import { useCallback, useMemo, useState } from 'react';
|
|
22
22
|
import { MODAL_CONTENT_MAX_HEIGHT } from '../../constants';
|
|
23
|
-
import { addESignOffsetRule, canAddESignOffsetRule,
|
|
23
|
+
import { addESignOffsetRule, canAddESignOffsetRule, createInitialESignOffsetRules, getDocumentFieldsDataPointOptions, getESignOffsetRulesForSave, getSchemaDataPointOptions, isValidConditionGroups, removeESignOffsetRule, updateESignOffsetRule, } from '../../utils';
|
|
24
24
|
import { ESignOffsetRuleRow } from './e-sign-offset-rule-row';
|
|
25
25
|
export const ESignDateSignedOffsetModal = ({ documentFields, finalRule, formFieldsByFormId, formFieldsLoadingFormId, forms, initialState, onClose, onRequestFormFields, onSave, schema, }) => {
|
|
26
|
-
const [rules, setRules] = useState(initialState.length === 0 ?
|
|
26
|
+
const [rules, setRules] = useState(initialState.length === 0 ? createInitialESignOffsetRules() : initialState);
|
|
27
27
|
const [finalRuleDays, setFinalRuleDays] = useState(finalRule.days);
|
|
28
|
+
const [hasClearedRules, setHasClearedRules] = useState(false);
|
|
28
29
|
const mergeTagOptions = useMemo(() => getSchemaDataPointOptions(schema), [schema]);
|
|
29
30
|
const fillableOptions = useMemo(() => getDocumentFieldsDataPointOptions(documentFields), [documentFields]);
|
|
31
|
+
const conditionValidationDeps = useMemo(() => ({
|
|
32
|
+
fillableOptions,
|
|
33
|
+
formFieldsByFormId,
|
|
34
|
+
mergeTagOptions,
|
|
35
|
+
}), [fillableOptions, formFieldsByFormId, mergeTagOptions]);
|
|
36
|
+
const hasConfiguredRules = useMemo(() => rules.some(rule => isValidConditionGroups(rule.condition.groups, conditionValidationDeps)), [conditionValidationDeps, rules]);
|
|
37
|
+
const showClearRules = hasConfiguredRules || rules.length > 1;
|
|
30
38
|
const handleClose = useCallback(() => onClose(), [onClose]);
|
|
31
39
|
const handleSave = useCallback(() => {
|
|
32
|
-
|
|
40
|
+
const rulesToSave = getESignOffsetRulesForSave(rules, hasClearedRules, hasConfiguredRules);
|
|
41
|
+
onSave(rulesToSave, { days: finalRuleDays });
|
|
33
42
|
onClose();
|
|
34
|
-
}, [finalRuleDays, onClose, onSave, rules]);
|
|
43
|
+
}, [finalRuleDays, hasClearedRules, hasConfiguredRules, onClose, onSave, rules]);
|
|
35
44
|
const handleFinalRuleDaysChange = useCallback((days) => {
|
|
36
45
|
setFinalRuleDays(Math.max(Math.min(365, days !== null && days !== void 0 ? days : 0), 0));
|
|
37
46
|
}, []);
|
|
@@ -39,24 +48,30 @@ export const ESignDateSignedOffsetModal = ({ documentFields, finalRule, formFiel
|
|
|
39
48
|
setRules(prev => addESignOffsetRule(prev));
|
|
40
49
|
}, []);
|
|
41
50
|
const handleRemoveRule = useCallback((index) => {
|
|
42
|
-
setRules(prev => prev
|
|
51
|
+
setRules(prev => removeESignOffsetRule(prev, index));
|
|
52
|
+
}, []);
|
|
53
|
+
const handleClearRules = useCallback(() => {
|
|
54
|
+
setRules(createInitialESignOffsetRules());
|
|
55
|
+
setFinalRuleDays(0);
|
|
56
|
+
setHasClearedRules(true);
|
|
43
57
|
}, []);
|
|
44
58
|
const handleUpdateRule = useCallback((index, rule) => {
|
|
45
59
|
setRules(prev => updateESignOffsetRule(prev, index, rule));
|
|
46
60
|
}, []);
|
|
47
|
-
const canSave = useMemo(() =>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
const canSave = useMemo(() => {
|
|
62
|
+
if (hasClearedRules && !hasConfiguredRules) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return rules.every(rule => isValidConditionGroups(rule.condition.groups, conditionValidationDeps));
|
|
66
|
+
}, [conditionValidationDeps, hasClearedRules, hasConfiguredRules, rules]);
|
|
52
67
|
return (_jsxs(Dialog, { open: true, onClose: handleClose, size: "xlarge", children: [_jsx(Dialog.Header, { children: "Date Signed Offset Rules" }), _jsx(Dialog.Content, { children: _jsxs(Flex, { direction: "column", gap: "4", flex: 1, style: {
|
|
53
68
|
maxHeight: MODAL_CONTENT_MAX_HEIGHT,
|
|
54
69
|
overflowY: 'auto',
|
|
55
70
|
}, children: [rules.length === 0 && (_jsx(Flex, { justifyContent: "center", alignItems: "center", children: _jsx(Text, { variant: "body", size: "xlarge", subdued: true, children: "Rule not configured yet." }) })), rules.map((rule, index) => {
|
|
56
71
|
var _a, _b;
|
|
57
|
-
return (_jsx(ESignOffsetRuleRow, { onDelete: () => handleRemoveRule(index), fillableOptions: fillableOptions, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formFieldsLoadingFormId, forms: forms, mergeTagOptions: mergeTagOptions, onChange: next => handleUpdateRule(index, next), onRequestFormFields: onRequestFormFields, rule: rule, canRemove:
|
|
72
|
+
return (_jsx(ESignOffsetRuleRow, { onDelete: () => handleRemoveRule(index), fillableOptions: fillableOptions, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formFieldsLoadingFormId, forms: forms, mergeTagOptions: mergeTagOptions, onChange: next => handleUpdateRule(index, next), onRequestFormFields: onRequestFormFields, rule: rule, canRemove: true }, (_b = (_a = rule.condition.groups[0]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : index));
|
|
58
73
|
}), _jsx(Button, { size: "small", appearance: "ghost", icon: { before: PlusCircleIcon }, onClick: handleAddRule, disabled: !canAddESignOffsetRule(rules), children: "Add Else Condition" }), _jsxs(Flex, { className: "dte-rule-card", children: [_jsx(Flex, { alignItems: "center", style: {
|
|
59
74
|
padding: '8px 12px',
|
|
60
|
-
}, children: _jsx(Chip, { label: "THEN", size: "medium" }) }), _jsxs(Flex, { direction: "column", gap: "1", children: [_jsx(NumberField, { size: "small", label: "Number of days", value: finalRuleDays, onChange: handleFinalRuleDaysChange, suffix: "days" }), _jsx(Text, { variant: "body", size: "small", subdued: true, children: "days range up to 365" })] })] })] }) }), _jsxs(Dialog.Footer, { sticky: true, children: [_jsx(Dialog.CancelButton, { onClick: handleClose, children: "Cancel" }), _jsx(Button, { appearance: "primary", disabled: !canSave, onClick: handleSave, children: "Save Changes" })] })] }));
|
|
75
|
+
}, children: _jsx(Chip, { label: "THEN", size: "medium" }) }), _jsxs(Flex, { direction: "column", gap: "1", children: [_jsx(NumberField, { size: "small", label: "Number of days", value: finalRuleDays, onChange: handleFinalRuleDaysChange, suffix: "days" }), _jsx(Text, { variant: "body", size: "small", subdued: true, children: "days range up to 365" })] })] })] }) }), _jsxs(Dialog.Footer, { sticky: true, children: [showClearRules && (_jsx(Button, { appearance: "ghost", onClick: handleClearRules, children: "Clear Rules" })), _jsx(Dialog.CancelButton, { onClick: handleClose, children: "Cancel" }), _jsx(Button, { appearance: "primary", disabled: !canSave, onClick: handleSave, children: "Save Changes" })] })] }));
|
|
61
76
|
};
|
|
62
77
|
//# sourceMappingURL=e-sign-date-signed-offset-modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e-sign-date-signed-offset-modal.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-signed-offset-modal.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,cAAc,MAAM,iEAAiE,CAAC;AAC7F,OAAO,EAAM,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAS3D,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"e-sign-date-signed-offset-modal.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-date-signed-offset-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e-sign-options-modal.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAsB,MAAM,OAAO,CAAC;AAC/C,OAAO,EACH,6BAA6B,EAG7B,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"e-sign-options-modal.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAsB,MAAM,OAAO,CAAC;AAC/C,OAAO,EACH,6BAA6B,EAG7B,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;AAK/B,UAAU,sBAAsB;IAC5B,YAAY,EAAE,6BAA6B,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA0FxD,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Button, Flex, NumberField } from '@servicetitan/anvil2';
|
|
3
3
|
import AddIcon from '@servicetitan/anvil2/assets/icons/material/round/add_circle.svg';
|
|
4
4
|
import { Fragment, useState } from 'react';
|
|
5
|
+
import { createClearedESignOffsetSettings } from '../../utils';
|
|
5
6
|
import { ESignDateRulesSummary } from './e-sign-date-rules-summary';
|
|
6
7
|
import { ESignDateSignedOffsetModal } from './e-sign-date-signed-offset-modal';
|
|
7
8
|
export const ESignOptionsModal = ({ documentFields, formFieldsByFormId, formFieldsLoadingFormId, forms, initialState, onRequestFormFields, onSave, schema, }) => {
|
|
@@ -21,6 +22,9 @@ export const ESignOptionsModal = ({ documentFields, formFieldsByFormId, formFiel
|
|
|
21
22
|
const handleSaveRules = (rules, finalRule) => {
|
|
22
23
|
onSave({ rules: [...rules, finalRule] });
|
|
23
24
|
};
|
|
24
|
-
|
|
25
|
+
const handleClearRules = () => {
|
|
26
|
+
onSave(createClearedESignOffsetSettings());
|
|
27
|
+
};
|
|
28
|
+
return (_jsxs(Fragment, { children: [rulesWithConditions.length === 0 ? (_jsxs(Flex, { gap: 1, direction: "column", justifyContent: "space-between", children: [_jsx(NumberField, { size: "small", label: "Number of days", value: ruleWithOutCondition.days, onChange: handleDaysChange, suffix: "days", width: "100%" }), _jsx(Button, { appearance: "ghost", size: "small", icon: AddIcon, onClick: () => setOpen(true), style: { color: '#0265DC' }, children: "Set Date Rule" })] })) : (_jsx(ESignDateRulesSummary, { documentFields: documentFields, onClear: handleClearRules, onEdit: () => setOpen(true), rulesWithConditions: rulesWithConditions, schema: schema, elseDays: ruleWithOutCondition.days })), open && (_jsx(ESignDateSignedOffsetModal, { onClose: () => setOpen(false), onSave: handleSaveRules, documentFields: documentFields, finalRule: ruleWithOutCondition, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formFieldsLoadingFormId, forms: forms, initialState: rulesWithConditions, onRequestFormFields: onRequestFormFields, schema: schema }))] }));
|
|
25
29
|
};
|
|
26
30
|
//# sourceMappingURL=e-sign-options-modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e-sign-options-modal.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"e-sign-options-modal.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import type { ESignDateSignedOffsetSettingsRule } from '../../interface/types';
|
|
1
|
+
import type { ESignDateSignedOffsetSettings, ESignDateSignedOffsetSettingsRule } from '../../interface/types';
|
|
2
2
|
/**
|
|
3
3
|
* Product limit: rules (the conditioned rules managed here, plus the trailing else row that
|
|
4
4
|
* lives outside this array) may not exceed this total.
|
|
5
5
|
*/
|
|
6
6
|
export declare const MAX_ESIGN_OFFSET_RULES = 5;
|
|
7
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[];
|
|
8
10
|
export declare const canAddESignOffsetRule: (rules: ESignDateSignedOffsetSettingsRule[]) => boolean;
|
|
9
11
|
/** Appends a new rule. No-op past the max. */
|
|
10
12
|
export declare const addESignOffsetRule: (rules: ESignDateSignedOffsetSettingsRule[]) => ESignDateSignedOffsetSettingsRule[];
|
|
11
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[];
|
|
12
17
|
//# sourceMappingURL=e-sign-offset-rules.utils.d.ts.map
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -8,6 +8,10 @@ export const createESignOffsetRule = () => ({
|
|
|
8
8
|
days: 0,
|
|
9
9
|
condition: { behavior: 'show', groups: [defaultGroup()] },
|
|
10
10
|
});
|
|
11
|
+
/** Same single blank rule shown when the user first clicks Set Date Rule. */
|
|
12
|
+
export const createInitialESignOffsetRules = () => {
|
|
13
|
+
return [createESignOffsetRule()];
|
|
14
|
+
};
|
|
11
15
|
export const canAddESignOffsetRule = (rules) => rules.length < MAX_ESIGN_OFFSET_RULES - 1;
|
|
12
16
|
/** Appends a new rule. No-op past the max. */
|
|
13
17
|
export const addESignOffsetRule = (rules) => canAddESignOffsetRule(rules) ? [...rules, createESignOffsetRule()] : rules;
|
|
@@ -16,4 +20,15 @@ export const updateESignOffsetRule = (rules, index, rule) => {
|
|
|
16
20
|
next[index] = rule;
|
|
17
21
|
return next;
|
|
18
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
|
+
};
|
|
19
34
|
//# sourceMappingURL=e-sign-offset-rules.utils.js.map
|
|
@@ -1 +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;
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Button, Flex, Text } from '@servicetitan/anvil2';
|
|
2
|
+
import DeleteIcon from '@servicetitan/anvil2/assets/icons/material/round/delete.svg';
|
|
2
3
|
import EditIcon from '@servicetitan/anvil2/assets/icons/material/round/edit.svg';
|
|
3
4
|
import { FC, useMemo } from 'react';
|
|
4
5
|
import {
|
|
@@ -30,12 +31,14 @@ export interface ESignDateRulesSummaryProps {
|
|
|
30
31
|
rulesWithConditions: ESignDateSignedOffsetSettingsRule[];
|
|
31
32
|
schema?: SchemaObject;
|
|
32
33
|
documentFields?: PdfField[];
|
|
34
|
+
onClear: () => void;
|
|
33
35
|
onEdit: () => void;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
export const ESignDateRulesSummary: FC<ESignDateRulesSummaryProps> = ({
|
|
37
39
|
documentFields,
|
|
38
40
|
elseDays,
|
|
41
|
+
onClear,
|
|
39
42
|
onEdit,
|
|
40
43
|
rulesWithConditions,
|
|
41
44
|
schema,
|
|
@@ -65,14 +68,24 @@ export const ESignDateRulesSummary: FC<ESignDateRulesSummaryProps> = ({
|
|
|
65
68
|
<Text variant="body" size="medium" style={{ fontWeight: 500 }}>
|
|
66
69
|
Calculated date rules
|
|
67
70
|
</Text>
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
<Flex gap="2">
|
|
72
|
+
<Button
|
|
73
|
+
appearance="ghost"
|
|
74
|
+
size="small"
|
|
75
|
+
icon={{ before: EditIcon }}
|
|
76
|
+
onClick={onEdit}
|
|
77
|
+
>
|
|
78
|
+
Edit
|
|
79
|
+
</Button>
|
|
80
|
+
<Button
|
|
81
|
+
appearance="ghost"
|
|
82
|
+
size="small"
|
|
83
|
+
icon={{ before: DeleteIcon }}
|
|
84
|
+
onClick={onClear}
|
|
85
|
+
>
|
|
86
|
+
Clear
|
|
87
|
+
</Button>
|
|
88
|
+
</Flex>
|
|
76
89
|
</Flex>
|
|
77
90
|
<Flex direction="column" gap="2" className="dte-rule-card --active">
|
|
78
91
|
{rulesWithConditions.map((rule, index) => {
|
|
@@ -30,10 +30,12 @@ import type {
|
|
|
30
30
|
import {
|
|
31
31
|
addESignOffsetRule,
|
|
32
32
|
canAddESignOffsetRule,
|
|
33
|
-
|
|
33
|
+
createInitialESignOffsetRules,
|
|
34
34
|
getDocumentFieldsDataPointOptions,
|
|
35
|
+
getESignOffsetRulesForSave,
|
|
35
36
|
getSchemaDataPointOptions,
|
|
36
37
|
isValidConditionGroups,
|
|
38
|
+
removeESignOffsetRule,
|
|
37
39
|
updateESignOffsetRule,
|
|
38
40
|
} from '../../utils';
|
|
39
41
|
import { ESignOffsetRuleRow } from './e-sign-offset-rule-row';
|
|
@@ -67,9 +69,10 @@ export const ESignDateSignedOffsetModal: FC<ESignDateSignedOffsetModalProps> = (
|
|
|
67
69
|
schema,
|
|
68
70
|
}) => {
|
|
69
71
|
const [rules, setRules] = useState<ESignDateSignedOffsetSettingsRule[]>(
|
|
70
|
-
initialState.length === 0 ?
|
|
72
|
+
initialState.length === 0 ? createInitialESignOffsetRules() : initialState,
|
|
71
73
|
);
|
|
72
74
|
const [finalRuleDays, setFinalRuleDays] = useState<number>(finalRule.days);
|
|
75
|
+
const [hasClearedRules, setHasClearedRules] = useState(false);
|
|
73
76
|
|
|
74
77
|
const mergeTagOptions = useMemo(() => getSchemaDataPointOptions(schema), [schema]);
|
|
75
78
|
|
|
@@ -78,12 +81,32 @@ export const ESignDateSignedOffsetModal: FC<ESignDateSignedOffsetModalProps> = (
|
|
|
78
81
|
[documentFields],
|
|
79
82
|
);
|
|
80
83
|
|
|
84
|
+
const conditionValidationDeps = useMemo(
|
|
85
|
+
() => ({
|
|
86
|
+
fillableOptions,
|
|
87
|
+
formFieldsByFormId,
|
|
88
|
+
mergeTagOptions,
|
|
89
|
+
}),
|
|
90
|
+
[fillableOptions, formFieldsByFormId, mergeTagOptions],
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const hasConfiguredRules = useMemo(
|
|
94
|
+
() =>
|
|
95
|
+
rules.some(rule =>
|
|
96
|
+
isValidConditionGroups(rule.condition.groups, conditionValidationDeps),
|
|
97
|
+
),
|
|
98
|
+
[conditionValidationDeps, rules],
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const showClearRules = hasConfiguredRules || rules.length > 1;
|
|
102
|
+
|
|
81
103
|
const handleClose = useCallback(() => onClose(), [onClose]);
|
|
82
104
|
|
|
83
105
|
const handleSave = useCallback(() => {
|
|
84
|
-
|
|
106
|
+
const rulesToSave = getESignOffsetRulesForSave(rules, hasClearedRules, hasConfiguredRules);
|
|
107
|
+
onSave(rulesToSave, { days: finalRuleDays });
|
|
85
108
|
onClose();
|
|
86
|
-
}, [finalRuleDays, onClose, onSave, rules]);
|
|
109
|
+
}, [finalRuleDays, hasClearedRules, hasConfiguredRules, onClose, onSave, rules]);
|
|
87
110
|
|
|
88
111
|
const handleFinalRuleDaysChange = useCallback((days: number | null) => {
|
|
89
112
|
setFinalRuleDays(Math.max(Math.min(365, days ?? 0), 0));
|
|
@@ -94,7 +117,13 @@ export const ESignDateSignedOffsetModal: FC<ESignDateSignedOffsetModalProps> = (
|
|
|
94
117
|
}, []);
|
|
95
118
|
|
|
96
119
|
const handleRemoveRule = useCallback((index: number) => {
|
|
97
|
-
setRules(prev => prev
|
|
120
|
+
setRules(prev => removeESignOffsetRule(prev, index));
|
|
121
|
+
}, []);
|
|
122
|
+
|
|
123
|
+
const handleClearRules = useCallback(() => {
|
|
124
|
+
setRules(createInitialESignOffsetRules());
|
|
125
|
+
setFinalRuleDays(0);
|
|
126
|
+
setHasClearedRules(true);
|
|
98
127
|
}, []);
|
|
99
128
|
|
|
100
129
|
const handleUpdateRule = useCallback(
|
|
@@ -104,17 +133,15 @@ export const ESignDateSignedOffsetModal: FC<ESignDateSignedOffsetModalProps> = (
|
|
|
104
133
|
[],
|
|
105
134
|
);
|
|
106
135
|
|
|
107
|
-
const canSave = useMemo(
|
|
108
|
-
()
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
[fillableOptions, formFieldsByFormId, mergeTagOptions, rules],
|
|
117
|
-
);
|
|
136
|
+
const canSave = useMemo(() => {
|
|
137
|
+
if (hasClearedRules && !hasConfiguredRules) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return rules.every(rule =>
|
|
142
|
+
isValidConditionGroups(rule.condition.groups, conditionValidationDeps),
|
|
143
|
+
);
|
|
144
|
+
}, [conditionValidationDeps, hasClearedRules, hasConfiguredRules, rules]);
|
|
118
145
|
|
|
119
146
|
return (
|
|
120
147
|
<Dialog open onClose={handleClose} size="xlarge">
|
|
@@ -149,7 +176,7 @@ export const ESignDateSignedOffsetModal: FC<ESignDateSignedOffsetModalProps> = (
|
|
|
149
176
|
onChange={next => handleUpdateRule(index, next)}
|
|
150
177
|
onRequestFormFields={onRequestFormFields}
|
|
151
178
|
rule={rule}
|
|
152
|
-
canRemove
|
|
179
|
+
canRemove
|
|
153
180
|
/>
|
|
154
181
|
))}
|
|
155
182
|
<Button
|
|
@@ -187,6 +214,11 @@ export const ESignDateSignedOffsetModal: FC<ESignDateSignedOffsetModalProps> = (
|
|
|
187
214
|
</Flex>
|
|
188
215
|
</Dialog.Content>
|
|
189
216
|
<Dialog.Footer sticky>
|
|
217
|
+
{showClearRules && (
|
|
218
|
+
<Button appearance="ghost" onClick={handleClearRules}>
|
|
219
|
+
Clear Rules
|
|
220
|
+
</Button>
|
|
221
|
+
)}
|
|
190
222
|
<Dialog.CancelButton onClick={handleClose}>Cancel</Dialog.CancelButton>
|
|
191
223
|
<Button appearance="primary" disabled={!canSave} onClick={handleSave}>
|
|
192
224
|
Save Changes
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
PdfField,
|
|
11
11
|
SchemaObject,
|
|
12
12
|
} from '../../interface/types';
|
|
13
|
+
import { createClearedESignOffsetSettings } from '../../utils';
|
|
13
14
|
import { ESignDateRulesSummary } from './e-sign-date-rules-summary';
|
|
14
15
|
import { ESignDateSignedOffsetModal } from './e-sign-date-signed-offset-modal';
|
|
15
16
|
|
|
@@ -61,6 +62,10 @@ export const ESignOptionsModal: FC<ESignOptionsModalProps> = ({
|
|
|
61
62
|
onSave({ rules: [...rules, finalRule] });
|
|
62
63
|
};
|
|
63
64
|
|
|
65
|
+
const handleClearRules = () => {
|
|
66
|
+
onSave(createClearedESignOffsetSettings());
|
|
67
|
+
};
|
|
68
|
+
|
|
64
69
|
return (
|
|
65
70
|
<Fragment>
|
|
66
71
|
{rulesWithConditions.length === 0 ? (
|
|
@@ -87,6 +92,7 @@ export const ESignOptionsModal: FC<ESignOptionsModalProps> = ({
|
|
|
87
92
|
) : (
|
|
88
93
|
<ESignDateRulesSummary
|
|
89
94
|
documentFields={documentFields}
|
|
95
|
+
onClear={handleClearRules}
|
|
90
96
|
onEdit={() => setOpen(true)}
|
|
91
97
|
rulesWithConditions={rulesWithConditions}
|
|
92
98
|
schema={schema}
|
|
@@ -2,8 +2,12 @@ import type { ESignDateSignedOffsetSettingsRule } from '../../../interface/types
|
|
|
2
2
|
import {
|
|
3
3
|
addESignOffsetRule,
|
|
4
4
|
canAddESignOffsetRule,
|
|
5
|
+
createClearedESignOffsetSettings,
|
|
5
6
|
createESignOffsetRule,
|
|
7
|
+
createInitialESignOffsetRules,
|
|
8
|
+
getESignOffsetRulesForSave,
|
|
6
9
|
MAX_ESIGN_OFFSET_RULES,
|
|
10
|
+
removeESignOffsetRule,
|
|
7
11
|
updateESignOffsetRule,
|
|
8
12
|
} from '../e-sign-offset-rules.utils';
|
|
9
13
|
|
|
@@ -17,6 +21,18 @@ describe('createESignOffsetRule', () => {
|
|
|
17
21
|
});
|
|
18
22
|
});
|
|
19
23
|
|
|
24
|
+
describe('createInitialESignOffsetRules', () => {
|
|
25
|
+
test('returns the same single blank rule as first opening Set Date Rule', () => {
|
|
26
|
+
const rules = createInitialESignOffsetRules();
|
|
27
|
+
const initialRule = createESignOffsetRule();
|
|
28
|
+
expect(rules).toHaveLength(1);
|
|
29
|
+
expect(rules[0].days).toBe(initialRule.days);
|
|
30
|
+
expect(rules[0].condition.behavior).toBe(initialRule.condition.behavior);
|
|
31
|
+
expect(rules[0].condition.groups).toHaveLength(1);
|
|
32
|
+
expect(rules[0].condition.groups[0].conditions).toHaveLength(1);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
20
36
|
describe('addESignOffsetRule', () => {
|
|
21
37
|
test('appends a new rule after any existing rules, preserving their order', () => {
|
|
22
38
|
const first = createESignOffsetRule();
|
|
@@ -49,3 +65,45 @@ describe('updateESignOffsetRule', () => {
|
|
|
49
65
|
expect(rules[1].days).toBe(0);
|
|
50
66
|
});
|
|
51
67
|
});
|
|
68
|
+
|
|
69
|
+
describe('removeESignOffsetRule', () => {
|
|
70
|
+
test('removes the rule at the given index without mutating the input array', () => {
|
|
71
|
+
const first = createESignOffsetRule();
|
|
72
|
+
const second = createESignOffsetRule();
|
|
73
|
+
const rules = [first, second];
|
|
74
|
+
const next = removeESignOffsetRule(rules, 0);
|
|
75
|
+
expect(next).toEqual([second]);
|
|
76
|
+
expect(rules).toHaveLength(2);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('returns an empty array when the last conditioned rule is removed', () => {
|
|
80
|
+
const next = removeESignOffsetRule([createESignOffsetRule()], 0);
|
|
81
|
+
expect(next).toEqual([]);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('getESignOffsetRulesForSave', () => {
|
|
86
|
+
test('saves an empty conditioned-rule list after clear when no rule is configured', () => {
|
|
87
|
+
const blankRules = createInitialESignOffsetRules();
|
|
88
|
+
const subject = () => getESignOffsetRulesForSave(blankRules, true, false);
|
|
89
|
+
|
|
90
|
+
expect(subject()).toEqual([]);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test('saves the configured rules when a rule is added after clear', () => {
|
|
94
|
+
const configured = [{ ...createESignOffsetRule(), days: 3 }];
|
|
95
|
+
const subject = () => getESignOffsetRulesForSave(configured, true, true);
|
|
96
|
+
|
|
97
|
+
expect(subject()).toBe(configured);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('createClearedESignOffsetSettings', () => {
|
|
102
|
+
test('keeps only a zero-day else rule so a cleared date rule can be saved', () => {
|
|
103
|
+
const subject = () => createClearedESignOffsetSettings();
|
|
104
|
+
|
|
105
|
+
expect(subject()).toEqual({
|
|
106
|
+
rules: [{ days: 0 }],
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { defaultGroup } from '../../constants';
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
ESignDateSignedOffsetSettings,
|
|
4
|
+
ESignDateSignedOffsetSettingsRule,
|
|
5
|
+
} from '../../interface/types';
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
* Product limit: rules (the conditioned rules managed here, plus the trailing else row that
|
|
@@ -12,6 +15,11 @@ export const createESignOffsetRule = (): ESignDateSignedOffsetSettingsRule => ({
|
|
|
12
15
|
condition: { behavior: 'show', groups: [defaultGroup()] },
|
|
13
16
|
});
|
|
14
17
|
|
|
18
|
+
/** Same single blank rule shown when the user first clicks Set Date Rule. */
|
|
19
|
+
export const createInitialESignOffsetRules = (): ESignDateSignedOffsetSettingsRule[] => {
|
|
20
|
+
return [createESignOffsetRule()];
|
|
21
|
+
};
|
|
22
|
+
|
|
15
23
|
export const canAddESignOffsetRule = (rules: ESignDateSignedOffsetSettingsRule[]): boolean =>
|
|
16
24
|
rules.length < MAX_ESIGN_OFFSET_RULES - 1;
|
|
17
25
|
|
|
@@ -30,3 +38,24 @@ export const updateESignOffsetRule = (
|
|
|
30
38
|
next[index] = rule;
|
|
31
39
|
return next;
|
|
32
40
|
};
|
|
41
|
+
|
|
42
|
+
export const removeESignOffsetRule = (
|
|
43
|
+
rules: ESignDateSignedOffsetSettingsRule[],
|
|
44
|
+
index: number,
|
|
45
|
+
): ESignDateSignedOffsetSettingsRule[] => {
|
|
46
|
+
return rules.filter((_, i) => i !== index);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const createClearedESignOffsetSettings = (): ESignDateSignedOffsetSettings => {
|
|
50
|
+
return {
|
|
51
|
+
rules: [{ days: 0 }],
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const getESignOffsetRulesForSave = (
|
|
56
|
+
rules: ESignDateSignedOffsetSettingsRule[],
|
|
57
|
+
hasClearedRules: boolean,
|
|
58
|
+
hasConfiguredRules: boolean,
|
|
59
|
+
): ESignDateSignedOffsetSettingsRule[] => {
|
|
60
|
+
return hasClearedRules && !hasConfiguredRules ? [] : rules;
|
|
61
|
+
};
|