@servicetitan/dte-pdf-editor 1.62.0 → 1.64.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/pdf-view/pdf-view-field-container.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view-field-container.js +8 -7
- package/dist/components/pdf-view/pdf-view-field-container.js.map +1 -1
- package/dist/utils/data-model/extract-fields.utils.d.ts.map +1 -1
- package/dist/utils/data-model/extract-fields.utils.js +16 -12
- package/dist/utils/data-model/extract-fields.utils.js.map +1 -1
- package/package.json +1 -1
- package/src/components/pdf-view/pdf-view-field-container.tsx +15 -13
- package/src/utils/data-model/__tests__/extract-fields.utils.test.ts +21 -0
- package/src/utils/data-model/extract-fields.utils.ts +20 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-view-field-container.d.ts","sourceRoot":"","sources":["../../../src/components/pdf-view/pdf-view-field-container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"pdf-view-field-container.d.ts","sourceRoot":"","sources":["../../../src/components/pdf-view/pdf-view-field-container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAY,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAQlE,UAAU,qBAAqB;IAC3B,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CA4C9E,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment } from 'react';
|
|
2
3
|
import { evaluateDisplayCondition, getFieldBackgroundColor, getFieldBoundsStyle, getPagePosition, } from '../../utils';
|
|
3
4
|
export const PdfViewFieldContainer = ({ children, data, error, field, pdfWrapperRef, recipientsColors, }) => {
|
|
4
5
|
const visible = !field.displayCondition || evaluateDisplayCondition(field.displayCondition, data);
|
|
@@ -7,14 +8,14 @@ export const PdfViewFieldContainer = ({ children, data, error, field, pdfWrapper
|
|
|
7
8
|
}
|
|
8
9
|
const pagePos = getPagePosition(field.page, pdfWrapperRef);
|
|
9
10
|
const bgColor = getFieldBackgroundColor(field.recipient, recipientsColors);
|
|
10
|
-
return (_jsxs("div", { className: "dte-pdf-field-view", style: getFieldBoundsStyle(field, {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
top: '100%',
|
|
11
|
+
return (_jsxs(Fragment, { children: [_jsx("div", { className: "dte-pdf-field-view", style: getFieldBoundsStyle(field, {
|
|
12
|
+
pageOffset: pagePos,
|
|
13
|
+
backgroundColor: bgColor,
|
|
14
|
+
borderColor: error ? 'red' : undefined,
|
|
15
|
+
}), children: children }), error && (_jsx("span", { style: {
|
|
16
16
|
color: 'red',
|
|
17
|
-
|
|
17
|
+
top: pagePos.top + field.y + field.height + 8,
|
|
18
|
+
left: pagePos.left + field.x,
|
|
18
19
|
minWidth: '100px',
|
|
19
20
|
position: 'absolute',
|
|
20
21
|
}, children: error }))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-view-field-container.js","sourceRoot":"","sources":["../../../src/components/pdf-view/pdf-view-field-container.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"pdf-view-field-container.js","sourceRoot":"","sources":["../../../src/components/pdf-view/pdf-view-field-container.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,QAAQ,EAAgC,MAAM,OAAO,CAAC;AAEnE,OAAO,EACH,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,GAClB,MAAM,aAAa,CAAC;AAUrB,MAAM,CAAC,MAAM,qBAAqB,GAAiD,CAAC,EAChF,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,aAAa,EACb,gBAAgB,GACnB,EAAE,EAAE;IACD,MAAM,OAAO,GACT,CAAC,KAAK,CAAC,gBAAgB,IAAI,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAEtF,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC3E,OAAO,CACH,MAAC,QAAQ,eACL,cACI,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE;oBAC9B,UAAU,EAAE,OAAO;oBACnB,eAAe,EAAE,OAAO;oBACxB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBACzC,CAAC,YAED,QAAQ,GACP,EACL,KAAK,IAAI,CACN,eACI,KAAK,EAAE;oBACH,KAAK,EAAE,KAAK;oBACZ,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC7C,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;oBAC5B,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,UAAU;iBACvB,YAEA,KAAK,GACH,CACV,IACM,CACd,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-fields.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/data-model/extract-fields.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EAKnB,YAAY,EAGf,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"extract-fields.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/data-model/extract-fields.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EAKnB,YAAY,EAGf,MAAM,uBAAuB,CAAC;AA0C/B,MAAM,WAAW,2BAA2B;IACxC,gGAAgG;IAChG,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAQD,eAAO,MAAM,iCAAiC,GAC1C,WAAW,YAAY,EACvB,UAAU,2BAA2B,KACtC,mBAAmB,EAqDrB,CAAC"}
|
|
@@ -5,6 +5,10 @@ function isSchemaSimpleNumber(node) {
|
|
|
5
5
|
function isSchemaSimpleDate(node) {
|
|
6
6
|
return node.type === 'date';
|
|
7
7
|
}
|
|
8
|
+
// TODO: temporary filters out html subtype fields: until BE implementation
|
|
9
|
+
function isSchemaStringHtml(node) {
|
|
10
|
+
return node.type === 'string' && node.subType === 'html';
|
|
11
|
+
}
|
|
8
12
|
function getSchemaFieldType(node) {
|
|
9
13
|
if (isSchemaSimpleNumber(node)) {
|
|
10
14
|
return 'number';
|
|
@@ -18,6 +22,16 @@ function useInCalculatedFields(node) {
|
|
|
18
22
|
var _a;
|
|
19
23
|
return ((_a = node.options) === null || _a === void 0 ? void 0 : _a.useInCalculatedFields) === true;
|
|
20
24
|
}
|
|
25
|
+
function isExtractableLeaf(node) {
|
|
26
|
+
if (isSchemaStringHtml(node)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
const rawType = node.type;
|
|
30
|
+
return (node.type === 'string' ||
|
|
31
|
+
isSchemaSimpleNumber(node) ||
|
|
32
|
+
isSchemaSimpleDate(node) ||
|
|
33
|
+
rawType === 'boolean');
|
|
34
|
+
}
|
|
21
35
|
/**
|
|
22
36
|
* Utility function to extract grouped fields from DataModel structure
|
|
23
37
|
* Filters out array types and only processes object properties, generating correct paths for data replacement
|
|
@@ -48,13 +62,8 @@ export const extractGroupedFieldsFromDataModel = (dataModel, options) => {
|
|
|
48
62
|
}
|
|
49
63
|
else {
|
|
50
64
|
// First-level simple field (string, number, boolean) – add under default group
|
|
51
|
-
const rawType = property.type;
|
|
52
|
-
const isLeaf = property.type === 'string' ||
|
|
53
|
-
isSchemaSimpleNumber(property) ||
|
|
54
|
-
isSchemaSimpleDate(property) ||
|
|
55
|
-
rawType === 'boolean';
|
|
56
65
|
const includeField = !onlyUseInCalculatedFields || useInCalculatedFields(property);
|
|
57
|
-
if (
|
|
66
|
+
if (isExtractableLeaf(property) && includeField) {
|
|
58
67
|
topLevelFields.push({
|
|
59
68
|
label: (_b = property.title) !== null && _b !== void 0 ? _b : key,
|
|
60
69
|
type: FieldTypeEnum.dataModel,
|
|
@@ -79,13 +88,8 @@ const extractFieldsRecursive = (properties, basePath, fields, groupName, onlyUse
|
|
|
79
88
|
var _a, _b;
|
|
80
89
|
const fieldProperty = properties[fieldKey];
|
|
81
90
|
const currentPath = `${basePath}.${fieldKey}`;
|
|
82
|
-
const rawType = fieldProperty.type;
|
|
83
|
-
const isLeaf = fieldProperty.type === 'string' ||
|
|
84
|
-
isSchemaSimpleNumber(fieldProperty) ||
|
|
85
|
-
isSchemaSimpleDate(fieldProperty) ||
|
|
86
|
-
rawType === 'boolean';
|
|
87
91
|
const includeField = !onlyUseInCalculatedFields || useInCalculatedFields(fieldProperty);
|
|
88
|
-
if (
|
|
92
|
+
if (isExtractableLeaf(fieldProperty) && includeField) {
|
|
89
93
|
const label = (_a = fieldProperty.title) !== null && _a !== void 0 ? _a : fieldKey;
|
|
90
94
|
fields.push({
|
|
91
95
|
label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-fields.utils.js","sourceRoot":"","sources":["../../../src/utils/data-model/extract-fields.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,GAOhB,MAAM,uBAAuB,CAAC;AAE/B,SAAS,oBAAoB,CAAC,IAAgB;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB;IACxC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAgB;;IAC3C,OAAO,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,qBAAqB,MAAK,IAAI,CAAC;AACxD,CAAC;AAQD;;;GAGG;AACH,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAEpC,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC7C,SAAuB,EACvB,OAAqC,EAChB,EAAE;IACvB,MAAM,yBAAyB,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,yBAAyB,MAAK,IAAI,CAAC;IAC9E,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,cAAc,GAAsB,EAAE,CAAC;IAE7C,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,CAAA,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;QAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpD,MAAM,MAAM,GAAsB,EAAE,CAAC;YACrC,sBAAsB,CAClB,QAAQ,CAAC,UAAU,EACnB,GAAG,EACH,MAAM,EACN,GAAG,EACH,yBAAyB,CAC5B,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC;oBACR,SAAS,EAAE,MAAA,QAAQ,CAAC,KAAK,mCAAI,GAAG;oBAChC,MAAM;iBACT,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACrD,yDAAyD;QAC7D,CAAC;aAAM,CAAC;YACJ,+EAA+E;YAC/E,MAAM,
|
|
1
|
+
{"version":3,"file":"extract-fields.utils.js","sourceRoot":"","sources":["../../../src/utils/data-model/extract-fields.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC, PropsWithChildren, RefObject } from 'react';
|
|
1
|
+
import { FC, Fragment, PropsWithChildren, RefObject } from 'react';
|
|
2
2
|
import { DataModelValues, PdfField } from '../../interface/types';
|
|
3
3
|
import {
|
|
4
4
|
evaluateDisplayCondition,
|
|
@@ -33,21 +33,23 @@ export const PdfViewFieldContainer: FC<PropsWithChildren<PdfViewFieldContainer>>
|
|
|
33
33
|
const pagePos = getPagePosition(field.page, pdfWrapperRef);
|
|
34
34
|
const bgColor = getFieldBackgroundColor(field.recipient, recipientsColors);
|
|
35
35
|
return (
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
<Fragment>
|
|
37
|
+
<div
|
|
38
|
+
className="dte-pdf-field-view"
|
|
39
|
+
style={getFieldBoundsStyle(field, {
|
|
40
|
+
pageOffset: pagePos,
|
|
41
|
+
backgroundColor: bgColor,
|
|
42
|
+
borderColor: error ? 'red' : undefined,
|
|
43
|
+
})}
|
|
44
|
+
>
|
|
45
|
+
{children}
|
|
46
|
+
</div>
|
|
45
47
|
{error && (
|
|
46
48
|
<span
|
|
47
49
|
style={{
|
|
48
|
-
top: '100%',
|
|
49
50
|
color: 'red',
|
|
50
|
-
|
|
51
|
+
top: pagePos.top + field.y + field.height + 8,
|
|
52
|
+
left: pagePos.left + field.x,
|
|
51
53
|
minWidth: '100px',
|
|
52
54
|
position: 'absolute',
|
|
53
55
|
}}
|
|
@@ -55,6 +57,6 @@ export const PdfViewFieldContainer: FC<PropsWithChildren<PdfViewFieldContainer>>
|
|
|
55
57
|
{error}
|
|
56
58
|
</span>
|
|
57
59
|
)}
|
|
58
|
-
</
|
|
60
|
+
</Fragment>
|
|
59
61
|
);
|
|
60
62
|
};
|
|
@@ -112,6 +112,27 @@ describe('extractGroupedFieldsFromDataModel', () => {
|
|
|
112
112
|
expect(subject(schema)).toEqual([]);
|
|
113
113
|
});
|
|
114
114
|
|
|
115
|
+
test('skips string fields with subType html', () => {
|
|
116
|
+
const schema: SchemaObject = {
|
|
117
|
+
type: 'object',
|
|
118
|
+
properties: {
|
|
119
|
+
summary: { type: 'string', title: 'Summary' },
|
|
120
|
+
richBody: { type: 'string', title: 'Body', subType: 'html' },
|
|
121
|
+
job: {
|
|
122
|
+
type: 'object',
|
|
123
|
+
title: 'Job',
|
|
124
|
+
properties: {
|
|
125
|
+
address: { type: 'string', title: 'Address', subType: 'html' },
|
|
126
|
+
number: { type: 'string', title: 'Number' },
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
const result = subject(schema);
|
|
132
|
+
const allPaths = result.flatMap(g => g.fields.map(f => f.path));
|
|
133
|
+
expect(allPaths).toEqual(['summary', 'job.number']);
|
|
134
|
+
});
|
|
135
|
+
|
|
115
136
|
test('skips empty object groups', () => {
|
|
116
137
|
const schema: SchemaObject = {
|
|
117
138
|
type: 'object',
|
|
@@ -17,6 +17,11 @@ function isSchemaSimpleDate(node: SchemaNode): node is SchemaSimpleDate {
|
|
|
17
17
|
return node.type === 'date';
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
// TODO: temporary filters out html subtype fields: until BE implementation
|
|
21
|
+
function isSchemaStringHtml(node: SchemaNode): boolean {
|
|
22
|
+
return node.type === 'string' && node.subType === 'html';
|
|
23
|
+
}
|
|
24
|
+
|
|
20
25
|
function getSchemaFieldType(node: SchemaNode): SchemaFieldType | undefined {
|
|
21
26
|
if (isSchemaSimpleNumber(node)) {
|
|
22
27
|
return 'number';
|
|
@@ -31,6 +36,19 @@ function useInCalculatedFields(node: SchemaNode): boolean {
|
|
|
31
36
|
return node.options?.useInCalculatedFields === true;
|
|
32
37
|
}
|
|
33
38
|
|
|
39
|
+
function isExtractableLeaf(node: SchemaNode): boolean {
|
|
40
|
+
if (isSchemaStringHtml(node)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const rawType = (node as { type?: string }).type;
|
|
44
|
+
return (
|
|
45
|
+
node.type === 'string' ||
|
|
46
|
+
isSchemaSimpleNumber(node) ||
|
|
47
|
+
isSchemaSimpleDate(node) ||
|
|
48
|
+
rawType === 'boolean'
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
34
52
|
export interface ExtractGroupedFieldsOptions {
|
|
35
53
|
/** When true, only include fields with SchemaFieldBaseOptions.useInCalculatedFields === true */
|
|
36
54
|
onlyUseInCalculatedFields?: boolean;
|
|
@@ -78,14 +96,8 @@ export const extractGroupedFieldsFromDataModel = (
|
|
|
78
96
|
// Skip array types - filter them out from the data model
|
|
79
97
|
} else {
|
|
80
98
|
// First-level simple field (string, number, boolean) – add under default group
|
|
81
|
-
const rawType = (property as { type?: string }).type;
|
|
82
|
-
const isLeaf =
|
|
83
|
-
property.type === 'string' ||
|
|
84
|
-
isSchemaSimpleNumber(property) ||
|
|
85
|
-
isSchemaSimpleDate(property) ||
|
|
86
|
-
rawType === 'boolean';
|
|
87
99
|
const includeField = !onlyUseInCalculatedFields || useInCalculatedFields(property);
|
|
88
|
-
if (
|
|
100
|
+
if (isExtractableLeaf(property) && includeField) {
|
|
89
101
|
topLevelFields.push({
|
|
90
102
|
label: property.title ?? key,
|
|
91
103
|
type: FieldTypeEnum.dataModel,
|
|
@@ -119,14 +131,8 @@ const extractFieldsRecursive = (
|
|
|
119
131
|
const fieldProperty = properties[fieldKey];
|
|
120
132
|
const currentPath = `${basePath}.${fieldKey}`;
|
|
121
133
|
|
|
122
|
-
const rawType = (fieldProperty as { type?: string }).type;
|
|
123
|
-
const isLeaf =
|
|
124
|
-
fieldProperty.type === 'string' ||
|
|
125
|
-
isSchemaSimpleNumber(fieldProperty) ||
|
|
126
|
-
isSchemaSimpleDate(fieldProperty) ||
|
|
127
|
-
rawType === 'boolean';
|
|
128
134
|
const includeField = !onlyUseInCalculatedFields || useInCalculatedFields(fieldProperty);
|
|
129
|
-
if (
|
|
135
|
+
if (isExtractableLeaf(fieldProperty) && includeField) {
|
|
130
136
|
const label = fieldProperty.title ?? fieldKey;
|
|
131
137
|
fields.push({
|
|
132
138
|
label,
|