@pdfme/ui 5.5.5 → 5.5.6-dev.1

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.
@@ -3,13 +3,19 @@ import { BaseUIClass } from './class.js';
3
3
  declare class Designer extends BaseUIClass {
4
4
  private onSaveTemplateCallback?;
5
5
  private onChangeTemplateCallback?;
6
+ private onPageChangeCallback?;
6
7
  private pageCursor;
7
8
  constructor(props: DesignerProps);
8
9
  saveTemplate(): void;
9
10
  updateTemplate(template: Template): void;
10
11
  onSaveTemplate(cb: (template: Template) => void): void;
11
12
  onChangeTemplate(cb: (template: Template) => void): void;
13
+ onPageChange(cb: (pageInfo: {
14
+ currentPage: number;
15
+ totalPages: number;
16
+ }) => void): void;
12
17
  getPageCursor(): number;
18
+ getTotalPages(): number;
13
19
  protected render(): void;
14
20
  }
15
21
  export default Designer;
@@ -2,12 +2,20 @@ import { PreviewProps } from '@pdfme/common';
2
2
  import { PreviewUI } from './class.js';
3
3
  declare class Form extends PreviewUI {
4
4
  private onChangeInputCallback?;
5
+ private onPageChangeCallback?;
6
+ private pageCursor;
5
7
  constructor(props: PreviewProps);
6
8
  onChangeInput(cb: (arg: {
7
9
  index: number;
8
10
  value: string;
9
11
  name: string;
10
12
  }) => void): void;
13
+ onPageChange(cb: (pageInfo: {
14
+ currentPage: number;
15
+ totalPages: number;
16
+ }) => void): void;
17
+ getPageCursor(): number;
18
+ getTotalPages(): number;
11
19
  setInputs(inputs: {
12
20
  [key: string]: string;
13
21
  }[]): void;
@@ -1,7 +1,15 @@
1
1
  import { PreviewProps } from '@pdfme/common';
2
2
  import { PreviewUI } from './class.js';
3
3
  declare class Viewer extends PreviewUI {
4
+ private onPageChangeCallback?;
5
+ private pageCursor;
4
6
  constructor(props: PreviewProps);
7
+ onPageChange(cb: (pageInfo: {
8
+ currentPage: number;
9
+ totalPages: number;
10
+ }) => void): void;
11
+ getPageCursor(): number;
12
+ getTotalPages(): number;
5
13
  protected render(): void;
6
14
  }
7
15
  export default Viewer;
@@ -6,6 +6,6 @@ declare const TemplateEditor: ({ template, size, onSaveTemplate, onChangeTemplat
6
6
  onChangeTemplate: (t: Template) => void;
7
7
  } & {
8
8
  onChangeTemplate: (t: Template) => void;
9
- onPageCursorChange: (newPageCursor: number) => void;
9
+ onPageCursorChange: (newPageCursor: number, totalPages: number) => void;
10
10
  }) => React.JSX.Element;
11
11
  export default TemplateEditor;
@@ -1,11 +1,15 @@
1
1
  import React from 'react';
2
2
  import { PreviewProps, Size } from '@pdfme/common';
3
- declare const Preview: ({ template, inputs, size, onChangeInput, }: Omit<PreviewProps, "domContainer"> & {
3
+ declare const Preview: ({ template, inputs, size, onChangeInput, onPageChange, }: Omit<PreviewProps, "domContainer"> & {
4
4
  onChangeInput?: (args: {
5
5
  index: number;
6
6
  value: string;
7
7
  name: string;
8
8
  }) => void;
9
+ onPageChange?: (pageInfo: {
10
+ currentPage: number;
11
+ totalPages: number;
12
+ }) => void;
9
13
  size: Size;
10
14
  }) => React.JSX.Element;
11
15
  export default Preview;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/ui",
3
- "version": "5.5.5",
3
+ "version": "5.5.6-dev.1",
4
4
  "sideEffects": false,
5
5
  "author": "hand-dot",
6
6
  "license": "MIT",
package/src/Designer.tsx CHANGED
@@ -16,6 +16,7 @@ import AppContextProvider from './components/AppContextProvider.js';
16
16
  class Designer extends BaseUIClass {
17
17
  private onSaveTemplateCallback?: (template: Template) => void;
18
18
  private onChangeTemplateCallback?: (template: Template) => void;
19
+ private onPageChangeCallback?: (pageInfo: { currentPage: number; totalPages: number }) => void;
19
20
  private pageCursor: number = 0;
20
21
 
21
22
  constructor(props: DesignerProps) {
@@ -48,10 +49,19 @@ class Designer extends BaseUIClass {
48
49
  this.onChangeTemplateCallback = cb;
49
50
  }
50
51
 
52
+ public onPageChange(cb: (pageInfo: { currentPage: number; totalPages: number }) => void) {
53
+ this.onPageChangeCallback = cb;
54
+ }
55
+
51
56
  public getPageCursor() {
52
57
  return this.pageCursor;
53
58
  }
54
59
 
60
+ public getTotalPages() {
61
+ if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
62
+ return this.template.schemas.length;
63
+ }
64
+
55
65
  protected render() {
56
66
  if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
57
67
  ReactDOM.render(
@@ -77,8 +87,14 @@ class Designer extends BaseUIClass {
77
87
  this.onChangeTemplateCallback(template);
78
88
  }
79
89
  }}
80
- onPageCursorChange={(newPageCursor: number) => {
90
+ onPageCursorChange={(newPageCursor: number, totalPages: number) => {
81
91
  this.pageCursor = newPageCursor;
92
+ if (this.onPageChangeCallback) {
93
+ this.onPageChangeCallback({
94
+ currentPage: newPageCursor,
95
+ totalPages: totalPages,
96
+ });
97
+ }
82
98
  }}
83
99
  size={this.size}
84
100
  />
package/src/Form.tsx CHANGED
@@ -8,6 +8,8 @@ import Preview from './components/Preview.js';
8
8
 
9
9
  class Form extends PreviewUI {
10
10
  private onChangeInputCallback?: (arg: { index: number; value: string; name: string }) => void;
11
+ private onPageChangeCallback?: (pageInfo: { currentPage: number; totalPages: number }) => void;
12
+ private pageCursor: number = 0;
11
13
 
12
14
  constructor(props: PreviewProps) {
13
15
  super(props);
@@ -17,6 +19,19 @@ class Form extends PreviewUI {
17
19
  this.onChangeInputCallback = cb;
18
20
  }
19
21
 
22
+ public onPageChange(cb: (pageInfo: { currentPage: number; totalPages: number }) => void) {
23
+ this.onPageChangeCallback = cb;
24
+ }
25
+
26
+ public getPageCursor() {
27
+ return this.pageCursor;
28
+ }
29
+
30
+ public getTotalPages() {
31
+ if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
32
+ return this.template.schemas.length;
33
+ }
34
+
20
35
  public setInputs(inputs: { [key: string]: string }[]): void {
21
36
  const previousInputs = this.getInputs();
22
37
 
@@ -71,6 +86,12 @@ class Form extends PreviewUI {
71
86
  }
72
87
  }
73
88
  }}
89
+ onPageChange={(pageInfo) => {
90
+ this.pageCursor = pageInfo.currentPage;
91
+ if (this.onPageChangeCallback) {
92
+ this.onPageChangeCallback(pageInfo);
93
+ }
94
+ }}
74
95
  />
75
96
  </AppContextProvider>,
76
97
  this.domContainer,
package/src/Viewer.tsx CHANGED
@@ -7,6 +7,9 @@ import Preview from './components/Preview.js';
7
7
  import AppContextProvider from './components/AppContextProvider.js';
8
8
 
9
9
  class Viewer extends PreviewUI {
10
+ private onPageChangeCallback?: (pageInfo: { currentPage: number; totalPages: number }) => void;
11
+ private pageCursor: number = 0;
12
+
10
13
  constructor(props: PreviewProps) {
11
14
  super(props);
12
15
  console.warn(
@@ -14,6 +17,19 @@ class Viewer extends PreviewUI {
14
17
  );
15
18
  }
16
19
 
20
+ public onPageChange(cb: (pageInfo: { currentPage: number; totalPages: number }) => void) {
21
+ this.onPageChangeCallback = cb;
22
+ }
23
+
24
+ public getPageCursor() {
25
+ return this.pageCursor;
26
+ }
27
+
28
+ public getTotalPages() {
29
+ if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
30
+ return this.template.schemas.length;
31
+ }
32
+
17
33
  protected render() {
18
34
  if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
19
35
  ReactDOM.render(
@@ -23,7 +39,17 @@ class Viewer extends PreviewUI {
23
39
  plugins={this.getPluginsRegistry()}
24
40
  options={this.getOptions()}
25
41
  >
26
- <Preview template={this.template} size={this.size} inputs={this.inputs} />
42
+ <Preview
43
+ template={this.template}
44
+ size={this.size}
45
+ inputs={this.inputs}
46
+ onPageChange={(pageInfo) => {
47
+ this.pageCursor = pageInfo.currentPage;
48
+ if (this.onPageChangeCallback) {
49
+ this.onPageChangeCallback(pageInfo);
50
+ }
51
+ }}
52
+ />
27
53
  </AppContextProvider>,
28
54
  this.domContainer,
29
55
  );
@@ -87,7 +87,9 @@ const DetailView = (props: DetailViewProps) => {
87
87
  });
88
88
  }
89
89
  setWidgets(newWidgets);
90
- }, [activeSchema, options, pluginsRegistry, props, token, typedI18n]);
90
+ }, [activeSchema, pluginsRegistry, JSON.stringify(options)]);
91
+
92
+ useEffect(() => form.resetFields(), [activeSchema.id]);
91
93
 
92
94
  useEffect(() => {
93
95
  // Create a type-safe copy of the schema with editable property
@@ -96,9 +98,7 @@ const DetailView = (props: DetailViewProps) => {
96
98
  const readOnly = typeof values.readOnly === 'boolean' ? values.readOnly : false;
97
99
  values.editable = !readOnly;
98
100
  form.setValues(values);
99
- }, [activeSchema, form]);
100
-
101
- useEffect(() => form.resetFields(), [activeSchema.id, form]);
101
+ }, [activeSchema]);
102
102
 
103
103
  useEffect(() => {
104
104
  uniqueSchemaName.current = (value: string): boolean => {
@@ -54,7 +54,7 @@ const TemplateEditor = ({
54
54
  onChangeTemplate: (t: Template) => void;
55
55
  } & {
56
56
  onChangeTemplate: (t: Template) => void;
57
- onPageCursorChange: (newPageCursor: number) => void;
57
+ onPageCursorChange: (newPageCursor: number, totalPages: number) => void;
58
58
  }) => {
59
59
  const past = useRef<SchemaForUI[][]>([]);
60
60
  const future = useRef<SchemaForUI[][]>([]);
@@ -110,7 +110,7 @@ const TemplateEditor = ({
110
110
  pageCursor,
111
111
  onChangePageCursor: (p) => {
112
112
  setPageCursor(p);
113
- onPageCursorChange(p);
113
+ onPageCursorChange(p, schemasList.length);
114
114
  onEditEnd();
115
115
  },
116
116
  });
@@ -239,6 +239,9 @@ const TemplateEditor = ({
239
239
  onChangeTemplate(newTemplate);
240
240
  await updateTemplate(newTemplate);
241
241
  void refresh(newTemplate);
242
+
243
+ // Notify page change with updated total pages
244
+ onPageCursorChange(newPageCursor, sl.length);
242
245
 
243
246
  // Use setTimeout to update scroll position after render
244
247
  setTimeout(() => {
@@ -326,6 +329,7 @@ const TemplateEditor = ({
326
329
  // Update scroll position and state
327
330
  canvasRef.current.scrollTop = getPagesScrollTopByIndex(pageSizes, p, scale);
328
331
  setPageCursor(p);
332
+ onPageCursorChange(p, schemasList.length);
329
333
  onEditEnd();
330
334
  }}
331
335
  zoomLevel={zoomLevel}
@@ -27,8 +27,10 @@ const Preview = ({
27
27
  inputs,
28
28
  size,
29
29
  onChangeInput,
30
+ onPageChange,
30
31
  }: Omit<PreviewProps, 'domContainer'> & {
31
32
  onChangeInput?: (args: { index: number; value: string; name: string }) => void;
33
+ onPageChange?: (pageInfo: { currentPage: number; totalPages: number }) => void;
32
34
  size: Size;
33
35
  }) => {
34
36
  const { token } = theme.useToken();
@@ -102,7 +104,12 @@ const Preview = ({
102
104
  pageSizes,
103
105
  scale,
104
106
  pageCursor,
105
- onChangePageCursor: setPageCursor,
107
+ onChangePageCursor: (p) => {
108
+ setPageCursor(p);
109
+ if (onPageChange) {
110
+ onPageChange({ currentPage: p, totalPages: schemasList.length });
111
+ }
112
+ },
106
113
  });
107
114
 
108
115
  const handleChangeInput = ({ name, value }: { name: string; value: string }) =>
@@ -146,6 +153,9 @@ const Preview = ({
146
153
  if (!containerRef.current) return;
147
154
  containerRef.current.scrollTop = getPagesScrollTopByIndex(pageSizes, p, scale);
148
155
  setPageCursor(p);
156
+ if (onPageChange) {
157
+ onPageChange({ currentPage: p, totalPages: schemasList.length });
158
+ }
149
159
  }}
150
160
  zoomLevel={zoomLevel}
151
161
  setZoomLevel={setZoomLevel}