@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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DataPointOption,
|
|
3
|
+
DisplayConditionGroup,
|
|
4
|
+
DisplayConditionState,
|
|
5
|
+
FormFieldsByFormIdI,
|
|
6
|
+
} from '../../interface/types';
|
|
7
|
+
import { getDisplayConditionFieldTypeForKey } from '../formula';
|
|
8
|
+
import { isValidNumber } from '../shared';
|
|
9
|
+
|
|
10
|
+
export type ConditionMatchType = 'and' | 'or';
|
|
11
|
+
|
|
12
|
+
/** Derives All/Any (and/or) toggle value from the operators already stored on a condition state. */
|
|
13
|
+
export const deriveConditionMatchType = (
|
|
14
|
+
conditionState: DisplayConditionState,
|
|
15
|
+
): ConditionMatchType => {
|
|
16
|
+
for (let g = 0; g < conditionState.groups.length; g++) {
|
|
17
|
+
const group = conditionState.groups[g];
|
|
18
|
+
if (g > 0 && group.logicalOperator === 'or') {
|
|
19
|
+
return 'or';
|
|
20
|
+
}
|
|
21
|
+
for (let i = 1; i < group.conditions.length; i++) {
|
|
22
|
+
if (group.conditions[i]?.logicalOperator === 'or') {
|
|
23
|
+
return 'or';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return 'and';
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/** Stamps the given All/Any (and/or) value onto every group/condition after the first in each. */
|
|
31
|
+
export const applyConditionMatchType = (
|
|
32
|
+
conditionState: DisplayConditionState,
|
|
33
|
+
matchType: ConditionMatchType,
|
|
34
|
+
): DisplayConditionState => ({
|
|
35
|
+
...conditionState,
|
|
36
|
+
groups: conditionState.groups.map((group, groupIndex) => ({
|
|
37
|
+
...group,
|
|
38
|
+
...(groupIndex > 0 ? { logicalOperator: matchType } : {}),
|
|
39
|
+
conditions: group.conditions.map((c, i) =>
|
|
40
|
+
i === 0 ? { ...c, logicalOperator: undefined } : { ...c, logicalOperator: matchType },
|
|
41
|
+
),
|
|
42
|
+
})),
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
export interface ConditionValidationDeps {
|
|
46
|
+
mergeTagOptions: DataPointOption[];
|
|
47
|
+
fillableOptions: DataPointOption[];
|
|
48
|
+
formFieldsByFormId?: FormFieldsByFormIdI;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** True when every condition in every group has a data point and a usable value for its type. */
|
|
52
|
+
export const isValidConditionGroups = (
|
|
53
|
+
groups: DisplayConditionGroup[],
|
|
54
|
+
{ fillableOptions, formFieldsByFormId, mergeTagOptions }: ConditionValidationDeps,
|
|
55
|
+
): boolean => {
|
|
56
|
+
for (const group of groups) {
|
|
57
|
+
for (const condition of group.conditions) {
|
|
58
|
+
if (!condition.dataPointKey) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (condition.operator === 'is_empty' || condition.operator === 'is_not_empty') {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const trimmedValue = condition.value.trim();
|
|
65
|
+
if (!trimmedValue) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
const fieldType = getDisplayConditionFieldTypeForKey(
|
|
69
|
+
condition.dataPointKey,
|
|
70
|
+
mergeTagOptions,
|
|
71
|
+
fillableOptions,
|
|
72
|
+
formFieldsByFormId ?? {},
|
|
73
|
+
);
|
|
74
|
+
if (fieldType === 'number' && !isValidNumber(trimmedValue)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return groups.length > 0;
|
|
80
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { defaultGroup } from '../../constants';
|
|
2
|
+
import type {
|
|
3
|
+
ESignDateSignedOffsetSettings,
|
|
4
|
+
ESignDateSignedOffsetSettingsRule,
|
|
5
|
+
} from '../../interface/types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Product limit: rules (the conditioned rules managed here, plus the trailing else row that
|
|
9
|
+
* lives outside this array) may not exceed this total.
|
|
10
|
+
*/
|
|
11
|
+
export const MAX_ESIGN_OFFSET_RULES = 5;
|
|
12
|
+
|
|
13
|
+
export const createESignOffsetRule = (): ESignDateSignedOffsetSettingsRule => ({
|
|
14
|
+
days: 0,
|
|
15
|
+
condition: { behavior: 'show', groups: [defaultGroup()] },
|
|
16
|
+
});
|
|
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
|
+
|
|
23
|
+
export const canAddESignOffsetRule = (rules: ESignDateSignedOffsetSettingsRule[]): boolean =>
|
|
24
|
+
rules.length < MAX_ESIGN_OFFSET_RULES - 1;
|
|
25
|
+
|
|
26
|
+
/** Appends a new rule. No-op past the max. */
|
|
27
|
+
export const addESignOffsetRule = (
|
|
28
|
+
rules: ESignDateSignedOffsetSettingsRule[],
|
|
29
|
+
): ESignDateSignedOffsetSettingsRule[] =>
|
|
30
|
+
canAddESignOffsetRule(rules) ? [...rules, createESignOffsetRule()] : rules;
|
|
31
|
+
|
|
32
|
+
export const updateESignOffsetRule = (
|
|
33
|
+
rules: ESignDateSignedOffsetSettingsRule[],
|
|
34
|
+
index: number,
|
|
35
|
+
rule: ESignDateSignedOffsetSettingsRule,
|
|
36
|
+
): ESignDateSignedOffsetSettingsRule[] => {
|
|
37
|
+
const next = [...rules];
|
|
38
|
+
next[index] = rule;
|
|
39
|
+
return next;
|
|
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
|
+
};
|