@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.
@@ -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,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,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,CA0C9E,CAAC"}
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
- pageOffset: pagePos,
12
- backgroundColor: bgColor,
13
- borderColor: error ? 'red' : undefined,
14
- }), children: [children, error && (_jsx("span", { style: {
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
- marginTop: '4px',
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":";AAEA,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,eACI,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE;YAC9B,UAAU,EAAE,OAAO;YACnB,eAAe,EAAE,OAAO;YACxB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACzC,CAAC,aAED,QAAQ,EACR,KAAK,IAAI,CACN,eACI,KAAK,EAAE;oBACH,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,KAAK;oBACZ,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,UAAU;iBACvB,YAEA,KAAK,GACH,CACV,IACC,CACT,CAAC;AACN,CAAC,CAAC"}
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;AAwB/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,EA2DrB,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 (isLeaf && includeField) {
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 (isLeaf && includeField) {
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":"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"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/dte-pdf-editor",
3
- "version": "1.62.0",
3
+ "version": "1.64.0",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "typings": "./dist/index.d.ts",
@@ -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
- <div
37
- className="dte-pdf-field-view"
38
- style={getFieldBoundsStyle(field, {
39
- pageOffset: pagePos,
40
- backgroundColor: bgColor,
41
- borderColor: error ? 'red' : undefined,
42
- })}
43
- >
44
- {children}
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
- marginTop: '4px',
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
- </div>
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 (isLeaf && includeField) {
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 (isLeaf && includeField) {
135
+ if (isExtractableLeaf(fieldProperty) && includeField) {
130
136
  const label = fieldProperty.title ?? fieldKey;
131
137
  fields.push({
132
138
  label,