datastake-daf 0.6.413 → 0.6.415

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.
@@ -13276,16 +13276,9 @@ DAFFooter.propTypes = {
13276
13276
  };
13277
13277
 
13278
13278
  const PAGE_HEIGHT = 1587;
13279
+ // margin-top: 20, bottom: 20;
13279
13280
  const FOOTER_HEIGHT = 70;
13280
13281
  const HEADER_HEIGHT = 100;
13281
- const SECTION_SPACING = 24; // Space between sections
13282
- const FIRST_PAGE_TOP_PADDING = 30; // Padding after header on first page
13283
- const NEW_PAGE_TOP_PADDING = 30; // Padding after header on new pages
13284
- const LAST_SECTION_BOTTOM_PADDING = 30; // Padding after last section
13285
- const PAGE_BOTTOM_MARGIN = 30; // Safety margin before footer
13286
-
13287
- // Available content height per page (excluding header, footer, and safety margins)
13288
- const AVAILABLE_HEIGHT = PAGE_HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT - PAGE_BOTTOM_MARGIN;
13289
13282
  const Row = _ref => {
13290
13283
  let {
13291
13284
  widgets,
@@ -13310,7 +13303,7 @@ const Row = _ref => {
13310
13303
  ref
13311
13304
  });
13312
13305
  }
13313
- }, [height, i, onChangeHeight]);
13306
+ }, [height]);
13314
13307
  return /*#__PURE__*/jsxRuntime.jsx("section", {
13315
13308
  ref: ref,
13316
13309
  style: widgets.style,
@@ -13332,75 +13325,51 @@ function PdfView(_ref2) {
13332
13325
  const [pages, setPages] = React.useState([1]);
13333
13326
  const doSizing = React.useCallback(() => {
13334
13327
  const keys = Object.keys(sectionsConfig);
13335
-
13336
- // Wait until all sections have been measured
13337
- if (keys.length !== config.length) return;
13338
13328
  let _pages = [1];
13339
- let currentPage = 1;
13340
- let currentPageContentHeight = 0; // Tracks content height on current page (excluding header)
13341
-
13342
- // Reset all styles first
13343
- keys.forEach(k => {
13344
- const {
13345
- ref
13346
- } = sectionsConfig[k];
13347
- ref.current.style.marginTop = '0px';
13348
- ref.current.style.marginBottom = '0px';
13349
- ref.current.style.paddingBottom = '0px';
13350
- });
13351
- keys.forEach((k, i) => {
13352
- const {
13353
- height,
13354
- ref
13355
- } = sectionsConfig[k];
13356
- const isFirstSection = i === 0;
13357
- const isLastSection = i === keys.length - 1;
13358
- const isFirstSectionOnPage = currentPageContentHeight === 0;
13359
-
13360
- // For first section of entire document
13361
- if (isFirstSection) {
13362
- ref.current.style.marginTop = "".concat(HEADER_HEIGHT + FIRST_PAGE_TOP_PADDING, "px");
13363
- currentPageContentHeight = height + FIRST_PAGE_TOP_PADDING;
13364
- if (isLastSection) {
13365
- ref.current.style.paddingBottom = "".concat(LAST_SECTION_BOTTOM_PADDING, "px");
13366
- currentPageContentHeight += LAST_SECTION_BOTTOM_PADDING;
13329
+ let _page = 1;
13330
+ if (keys.length === config.length) {
13331
+ let incrHeight = 0;
13332
+ keys.forEach(k => {
13333
+ const {
13334
+ ref
13335
+ } = sectionsConfig[k];
13336
+ ref.current.style.marginBottom = '0px';
13337
+ // ref.current.style.marginTop = '15px';
13338
+ });
13339
+ keys.forEach((k, i) => {
13340
+ const {
13341
+ height,
13342
+ ref
13343
+ } = sectionsConfig[k];
13344
+ if (i === 0) {
13345
+ ref.current.style.marginTop = "".concat(HEADER_HEIGHT, "px");
13346
+ incrHeight += HEADER_HEIGHT;
13347
+ }
13348
+ const newHeight = incrHeight + height;
13349
+ if (i === keys.length - 1) {
13350
+ ref.current.style.paddingBottom = '30px';
13351
+ }
13352
+ if (newHeight > PAGE_HEIGHT - 30 - FOOTER_HEIGHT - HEADER_HEIGHT) {
13353
+ const dif = Math.abs(PAGE_HEIGHT - incrHeight);
13354
+ ref.current.style.marginTop = '30px';
13355
+ _page += 1;
13356
+ _pages.push(_page);
13357
+ if (sectionsConfig[keys[i - 1]]) {
13358
+ const {
13359
+ ref: topRef
13360
+ } = sectionsConfig[keys[i - 1]];
13361
+ topRef.current.style.marginBottom = "".concat(dif + HEADER_HEIGHT - 24, "px");
13362
+ incrHeight = height + 24 + HEADER_HEIGHT;
13363
+ // console.log('margin', dif);
13364
+ }
13365
+ } else {
13366
+ incrHeight = newHeight + 24;
13367
13367
  }
13368
- return;
13369
- }
13370
-
13371
- // Calculate space needed for this section including spacing before it
13372
- const spacingBefore = isFirstSectionOnPage ? NEW_PAGE_TOP_PADDING : SECTION_SPACING;
13373
- const bottomPadding = isLastSection ? LAST_SECTION_BOTTOM_PADDING : 0;
13374
- const totalSpaceNeeded = spacingBefore + height + bottomPadding;
13375
-
13376
- // Check if we need to move to next page
13377
- if (currentPageContentHeight + totalSpaceNeeded > AVAILABLE_HEIGHT) {
13378
- // Move to new page
13379
- currentPage += 1;
13380
- _pages.push(currentPage);
13381
-
13382
- // Calculate and apply bottom margin to fill previous page
13383
- const usedSpace = currentPageContentHeight;
13384
- const remainingSpace = AVAILABLE_HEIGHT - usedSpace;
13385
- const previousKey = keys[i - 1];
13386
- sectionsConfig[previousKey].ref.current.style.marginBottom = "".concat(remainingSpace + PAGE_BOTTOM_MARGIN, "px");
13387
-
13388
- // This section starts the new page
13389
- ref.current.style.marginTop = "".concat(HEADER_HEIGHT + NEW_PAGE_TOP_PADDING, "px");
13390
- currentPageContentHeight = height + NEW_PAGE_TOP_PADDING + bottomPadding;
13391
- } else {
13392
- // Section fits on current page
13393
- ref.current.style.marginTop = "".concat(spacingBefore, "px");
13394
- currentPageContentHeight += totalSpaceNeeded;
13395
- }
13396
-
13397
- // Add bottom padding to last section
13398
- if (isLastSection) {
13399
- ref.current.style.paddingBottom = "".concat(LAST_SECTION_BOTTOM_PADDING, "px");
13400
- }
13401
- });
13402
- setPages(_pages);
13403
- }, [sectionsConfig, config.length]);
13368
+ // console.groupEnd();
13369
+ });
13370
+ setPages(_pages);
13371
+ }
13372
+ }, [sectionsConfig]);
13404
13373
  React.useEffect(() => {
13405
13374
  doSizing();
13406
13375
  }, [doSizing]);
@@ -13421,22 +13390,32 @@ function PdfView(_ref2) {
13421
13390
  widgets: widgets,
13422
13391
  i: i,
13423
13392
  onChangeHeight: onChangeHeight
13424
- }, "dashboard-sections-".concat(i + 1)))
13393
+ }, "dashboard-sections=".concat(i + 1)))
13425
13394
  })
13426
13395
  })
13427
13396
  });
13428
13397
  }, [config, onChangeHeight]);
13398
+
13399
+ // <div className="daf-analysis">
13400
+ // <Header title={t('Dashboard Title')} />
13401
+
13402
+ // <div className="content">
13403
+ // <div className="view-content">
13404
+ // <div className="daf-analysis-layout">
13405
+ // <div className='sections-cont w-pt'>
13406
+ // <section>
13407
+
13429
13408
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
13430
13409
  className: contClassName,
13431
13410
  style: {
13432
13411
  position: 'relative'
13433
13412
  },
13434
- children: [renderDashboard(), pages.map(page => /*#__PURE__*/jsxRuntime.jsxs("div", {
13413
+ children: [renderDashboard(), pages.map(page => /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
13435
13414
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
13436
13415
  style: {
13437
13416
  top: (page - 1) * PAGE_HEIGHT,
13438
13417
  width: '100%',
13439
- height: HEADER_HEIGHT,
13418
+ height: HEADER_HEIGHT - 24,
13440
13419
  position: 'absolute',
13441
13420
  left: 0,
13442
13421
  zIndex: 1000000
@@ -13454,7 +13433,7 @@ function PdfView(_ref2) {
13454
13433
  alt: "logo"
13455
13434
  })
13456
13435
  })]
13457
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
13436
+ }, "headers-".concat(page)), /*#__PURE__*/jsxRuntime.jsxs("div", {
13458
13437
  style: {
13459
13438
  top: page * PAGE_HEIGHT - FOOTER_HEIGHT,
13460
13439
  width: '100%',
@@ -13497,8 +13476,8 @@ function PdfView(_ref2) {
13497
13476
  children: page
13498
13477
  })
13499
13478
  })]
13500
- })]
13501
- }, "page-".concat(page)))]
13479
+ }, "footers-".concat(page))]
13480
+ }))]
13502
13481
  });
13503
13482
  }
13504
13483
  PdfView.propTypes = {
@@ -13508,8 +13487,7 @@ PdfView.propTypes = {
13508
13487
  imgSrc: PropTypes__default["default"].string,
13509
13488
  userId: PropTypes__default["default"].string,
13510
13489
  accountId: PropTypes__default["default"].string,
13511
- documentId: PropTypes__default["default"].string,
13512
- downloadId: PropTypes__default["default"].string
13490
+ documentId: PropTypes__default["default"].string
13513
13491
  };
13514
13492
 
13515
13493
  const ajaxSelectFieldData = async (value, config, getApiBaseUrl = () => {}, getAppHeader = () => {}, app, formValues = {}) => {
@@ -22145,7 +22123,34 @@ const WidgetCard = _ref => {
22145
22123
  children: /*#__PURE__*/jsxRuntime.jsx("a", {
22146
22124
  className: formatClassname(["widget-card-logo-icon", (buttonConfig === null || buttonConfig === void 0 ? void 0 : buttonConfig.disabled) && "disabled-anchor"]),
22147
22125
  href: buttonConfig !== null && buttonConfig !== void 0 && buttonConfig.disabled ? undefined : link,
22148
- onClick: buttonConfig !== null && buttonConfig !== void 0 && buttonConfig.disabled ? e => e.preventDefault() : undefined,
22126
+ onClick: e => {
22127
+ if (buttonConfig !== null && buttonConfig !== void 0 && buttonConfig.disabled) {
22128
+ e.preventDefault();
22129
+ } else if (buttonConfig !== null && buttonConfig !== void 0 && buttonConfig.onClick) {
22130
+ e.preventDefault();
22131
+ buttonConfig.onClick();
22132
+ } else if (buttonConfig !== null && buttonConfig !== void 0 && buttonConfig.action) {
22133
+ e.preventDefault();
22134
+ // Handle different action types
22135
+ switch (buttonConfig.action.type) {
22136
+ case 'modal':
22137
+ if (buttonConfig.action.onOpen) {
22138
+ buttonConfig.action.onOpen();
22139
+ }
22140
+ break;
22141
+ case 'navigate':
22142
+ if (buttonConfig.action.url) {
22143
+ window.location.href = buttonConfig.action.url;
22144
+ }
22145
+ break;
22146
+ case 'custom':
22147
+ if (buttonConfig.action.handler) {
22148
+ buttonConfig.action.handler();
22149
+ }
22150
+ break;
22151
+ }
22152
+ }
22153
+ },
22149
22154
  children: /*#__PURE__*/jsxRuntime.jsx(CustomIcon, {
22150
22155
  name: buttonIcon,
22151
22156
  size: 16,
@@ -0,0 +1,330 @@
1
+ /* Isolated Mapbox GL CSS - Scoped to prevent Leaflet conflicts */
2
+
3
+ /* Mapbox GL Core Styles - Scoped with .mapbox-gl-scope */
4
+ .mapbox-gl-scope .mapboxgl-map {
5
+ font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;
6
+ overflow: hidden;
7
+ position: relative;
8
+ -webkit-tap-highlight-color: rgb(0 0 0/0);
9
+ }
10
+
11
+ .mapbox-gl-scope .mapboxgl-canvas {
12
+ left: 0;
13
+ position: absolute;
14
+ top: 0;
15
+ }
16
+
17
+ .mapbox-gl-scope .mapboxgl-map:-webkit-full-screen {
18
+ height: 100%;
19
+ width: 100%;
20
+ }
21
+
22
+ .mapbox-gl-scope .mapboxgl-canary {
23
+ background-color: salmon;
24
+ }
25
+
26
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive,
27
+ .mapbox-gl-scope .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {
28
+ cursor: grab;
29
+ -webkit-user-select: none;
30
+ user-select: none;
31
+ }
32
+
33
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {
34
+ cursor: pointer;
35
+ }
36
+
37
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive:active,
38
+ .mapbox-gl-scope .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {
39
+ cursor: grabbing;
40
+ }
41
+
42
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,
43
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {
44
+ touch-action: pan-x pan-y;
45
+ }
46
+
47
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,
48
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {
49
+ touch-action: pinch-zoom;
50
+ }
51
+
52
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,
53
+ .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas {
54
+ touch-action: none;
55
+ }
56
+
57
+ /* Control positioning */
58
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom,
59
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom-left,
60
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom-right,
61
+ .mapbox-gl-scope .mapboxgl-ctrl-left,
62
+ .mapbox-gl-scope .mapboxgl-ctrl-right,
63
+ .mapbox-gl-scope .mapboxgl-ctrl-top,
64
+ .mapbox-gl-scope .mapboxgl-ctrl-top-left,
65
+ .mapbox-gl-scope .mapboxgl-ctrl-top-right {
66
+ pointer-events: none;
67
+ position: absolute;
68
+ z-index: 2;
69
+ }
70
+
71
+ .mapbox-gl-scope .mapboxgl-ctrl-top-left {
72
+ left: 0;
73
+ top: 0;
74
+ }
75
+
76
+ .mapbox-gl-scope .mapboxgl-ctrl-top {
77
+ left: 50%;
78
+ top: 0;
79
+ transform: translateX(-50%);
80
+ }
81
+
82
+ .mapbox-gl-scope .mapboxgl-ctrl-top-right {
83
+ right: 0;
84
+ top: 0;
85
+ }
86
+
87
+ .mapbox-gl-scope .mapboxgl-ctrl-right {
88
+ right: 0;
89
+ top: 50%;
90
+ transform: translateY(-50%);
91
+ }
92
+
93
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom-right {
94
+ bottom: 0;
95
+ right: 0;
96
+ }
97
+
98
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom {
99
+ bottom: 0;
100
+ left: 50%;
101
+ transform: translateX(-50%);
102
+ }
103
+
104
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom-left {
105
+ bottom: 0;
106
+ left: 0;
107
+ }
108
+
109
+ .mapbox-gl-scope .mapboxgl-ctrl-left {
110
+ left: 0;
111
+ top: 50%;
112
+ transform: translateY(-50%);
113
+ }
114
+
115
+ .mapbox-gl-scope .mapboxgl-ctrl {
116
+ clear: both;
117
+ pointer-events: auto;
118
+ transform: translate(0);
119
+ }
120
+
121
+ .mapbox-gl-scope .mapboxgl-ctrl-top-left .mapboxgl-ctrl {
122
+ float: left;
123
+ margin: 10px 0 0 10px;
124
+ }
125
+
126
+ .mapbox-gl-scope .mapboxgl-ctrl-top .mapboxgl-ctrl {
127
+ float: left;
128
+ margin: 10px 0;
129
+ }
130
+
131
+ .mapbox-gl-scope .mapboxgl-ctrl-top-right .mapboxgl-ctrl {
132
+ float: right;
133
+ margin: 10px 10px 0 0;
134
+ }
135
+
136
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,
137
+ .mapbox-gl-scope .mapboxgl-ctrl-right .mapboxgl-ctrl {
138
+ float: right;
139
+ margin: 0 10px 10px 0;
140
+ }
141
+
142
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom .mapboxgl-ctrl {
143
+ float: left;
144
+ margin: 10px 0;
145
+ }
146
+
147
+ .mapbox-gl-scope .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,
148
+ .mapbox-gl-scope .mapboxgl-ctrl-left .mapboxgl-ctrl {
149
+ float: left;
150
+ margin: 0 0 10px 10px;
151
+ }
152
+
153
+ /* Control group styling */
154
+ .mapbox-gl-scope .mapboxgl-ctrl-group {
155
+ background: #fff;
156
+ border-radius: 4px;
157
+ }
158
+
159
+ .mapbox-gl-scope .mapboxgl-ctrl-group:not(:empty) {
160
+ box-shadow: 0 0 0 2px #0000001a;
161
+ }
162
+
163
+ .mapbox-gl-scope .mapboxgl-ctrl-group button {
164
+ background-color: initial;
165
+ border: 0;
166
+ box-sizing: border-box;
167
+ cursor: pointer;
168
+ display: block;
169
+ height: 29px;
170
+ outline: none;
171
+ overflow: hidden;
172
+ padding: 0;
173
+ width: 29px;
174
+ }
175
+
176
+ .mapbox-gl-scope .mapboxgl-ctrl-group button+button {
177
+ border-top: 1px solid #ddd;
178
+ }
179
+
180
+ .mapbox-gl-scope .mapboxgl-ctrl button .mapboxgl-ctrl-icon {
181
+ background-position: 50%;
182
+ background-repeat: no-repeat;
183
+ display: block;
184
+ height: 100%;
185
+ width: 100%;
186
+ }
187
+
188
+ .mapbox-gl-scope .mapboxgl-ctrl-attrib-button:focus,
189
+ .mapbox-gl-scope .mapboxgl-ctrl-group button:focus {
190
+ box-shadow: 0 0 2px 2px #0096ff;
191
+ }
192
+
193
+ .mapbox-gl-scope .mapboxgl-ctrl button:disabled {
194
+ cursor: not-allowed;
195
+ }
196
+
197
+ .mapbox-gl-scope .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {
198
+ opacity: .25;
199
+ }
200
+
201
+ .mapbox-gl-scope .mapboxgl-ctrl-group button:first-child {
202
+ border-radius: 4px 4px 0 0;
203
+ }
204
+
205
+ .mapbox-gl-scope .mapboxgl-ctrl-group button:last-child {
206
+ border-radius: 0 0 4px 4px;
207
+ }
208
+
209
+ .mapbox-gl-scope .mapboxgl-ctrl-group button:only-child {
210
+ border-radius: inherit;
211
+ }
212
+
213
+ .mapbox-gl-scope .mapboxgl-ctrl button:not(:disabled):hover {
214
+ background-color: #0000000d;
215
+ }
216
+
217
+ /* Marker styles */
218
+ .mapbox-gl-scope .mapboxgl-marker {
219
+ position: absolute;
220
+ z-index: 1;
221
+ }
222
+
223
+ .mapbox-gl-scope .mapboxgl-marker svg {
224
+ display: block;
225
+ }
226
+
227
+ /* Popup styles */
228
+ .mapbox-gl-scope .mapboxgl-popup {
229
+ position: absolute;
230
+ text-align: center;
231
+ margin-bottom: 20px;
232
+ }
233
+
234
+ .mapbox-gl-scope .mapboxgl-popup-content-wrapper {
235
+ padding: 1px;
236
+ text-align: left;
237
+ border-radius: 12px;
238
+ }
239
+
240
+ .mapbox-gl-scope .mapboxgl-popup-content {
241
+ margin: 13px 24px 13px 20px;
242
+ line-height: 1.3;
243
+ font-size: 13px;
244
+ min-height: 1px;
245
+ }
246
+
247
+ .mapbox-gl-scope .mapboxgl-popup-content p {
248
+ margin: 17px 0;
249
+ }
250
+
251
+ .mapbox-gl-scope .mapboxgl-popup-tip-container {
252
+ width: 40px;
253
+ height: 20px;
254
+ position: absolute;
255
+ left: 50%;
256
+ margin-top: -1px;
257
+ margin-left: -20px;
258
+ overflow: hidden;
259
+ pointer-events: none;
260
+ }
261
+
262
+ .mapbox-gl-scope .mapboxgl-popup-tip {
263
+ width: 17px;
264
+ height: 17px;
265
+ padding: 1px;
266
+ margin: -10px auto 0;
267
+ pointer-events: auto;
268
+ -webkit-transform: rotate(45deg);
269
+ -moz-transform: rotate(45deg);
270
+ -ms-transform: rotate(45deg);
271
+ transform: rotate(45deg);
272
+ }
273
+
274
+ .mapbox-gl-scope .mapboxgl-popup-content-wrapper,
275
+ .mapbox-gl-scope .mapboxgl-popup-tip {
276
+ background: white;
277
+ color: #333;
278
+ box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);
279
+ }
280
+
281
+ .mapbox-gl-scope .mapboxgl-popup-close-button {
282
+ position: absolute;
283
+ top: 0;
284
+ right: 0;
285
+ border: none;
286
+ text-align: center;
287
+ width: 24px;
288
+ height: 24px;
289
+ font: 16px/24px Tahoma, Verdana, sans-serif;
290
+ color: #757575;
291
+ text-decoration: none;
292
+ background: transparent;
293
+ }
294
+
295
+ .mapbox-gl-scope .mapboxgl-popup-close-button:hover,
296
+ .mapbox-gl-scope .mapboxgl-popup-close-button:focus {
297
+ color: #585858;
298
+ }
299
+
300
+ /* Attribution */
301
+ .mapbox-gl-scope .mapboxgl-ctrl-attribution {
302
+ background: #fff;
303
+ background: rgba(255, 255, 255, 0.8);
304
+ margin: 0;
305
+ }
306
+
307
+ .mapbox-gl-scope .mapboxgl-ctrl-attribution,
308
+ .mapbox-gl-scope .mapboxgl-ctrl-scale-line {
309
+ padding: 0 5px;
310
+ color: #333;
311
+ line-height: 1.4;
312
+ }
313
+
314
+ .mapbox-gl-scope .mapboxgl-ctrl-attribution a {
315
+ text-decoration: none;
316
+ }
317
+
318
+ .mapbox-gl-scope .mapboxgl-ctrl-attribution a:hover,
319
+ .mapbox-gl-scope .mapboxgl-ctrl-attribution a:focus {
320
+ text-decoration: underline;
321
+ }
322
+
323
+ /* Hide attribution by default */
324
+ .mapbox-gl-scope .mapboxgl-ctrl-attribution {
325
+ display: none !important;
326
+ }
327
+
328
+ .mapbox-gl-scope .mapboxgl-ctrl-logo {
329
+ display: none !important;
330
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datastake-daf",
3
- "version": "0.6.413",
3
+ "version": "0.6.415",
4
4
  "dependencies": {
5
5
  "@ant-design/icons": "^5.2.5",
6
6
  "@antv/g2": "^5.1.1",
@@ -4,16 +4,9 @@ import { useCallback, useEffect, useRef, useState } from "react";
4
4
  import { formatClassname } from "../../../../../helpers/ClassesHelper";
5
5
 
6
6
  const PAGE_HEIGHT = 1587;
7
+ // margin-top: 20, bottom: 20;
7
8
  const FOOTER_HEIGHT = 70;
8
9
  const HEADER_HEIGHT = 100;
9
- const SECTION_SPACING = 24; // Space between sections
10
- const FIRST_PAGE_TOP_PADDING = 30; // Padding after header on first page
11
- const NEW_PAGE_TOP_PADDING = 30; // Padding after header on new pages
12
- const LAST_SECTION_BOTTOM_PADDING = 30; // Padding after last section
13
- const PAGE_BOTTOM_MARGIN = 30; // Safety margin before footer
14
-
15
- // Available content height per page (excluding header, footer, and safety margins)
16
- const AVAILABLE_HEIGHT = PAGE_HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT - PAGE_BOTTOM_MARGIN;
17
10
 
18
11
  const Row = ({ widgets, i, onChangeHeight = () => { } }) => {
19
12
  const ref = useRef();
@@ -35,7 +28,7 @@ const Row = ({ widgets, i, onChangeHeight = () => { } }) => {
35
28
  if (height) {
36
29
  onChangeHeight(i, { height, ref });
37
30
  }
38
- }, [height, i, onChangeHeight])
31
+ }, [height])
39
32
 
40
33
  return (
41
34
  <section ref={ref} style={widgets.style}>
@@ -59,74 +52,52 @@ export default function PdfView({
59
52
 
60
53
  const doSizing = useCallback(() => {
61
54
  const keys = Object.keys(sectionsConfig);
62
-
63
- // Wait until all sections have been measured
64
- if (keys.length !== config.length) return;
65
-
66
55
  let _pages = [1];
67
- let currentPage = 1;
68
- let currentPageContentHeight = 0; // Tracks content height on current page (excluding header)
69
-
70
- // Reset all styles first
71
- keys.forEach(k => {
72
- const { ref } = sectionsConfig[k];
73
- ref.current.style.marginTop = '0px';
74
- ref.current.style.marginBottom = '0px';
75
- ref.current.style.paddingBottom = '0px';
76
- });
56
+ let _page = 1;
57
+
58
+ if (keys.length === config.length) {
59
+ let incrHeight = 0;
60
+
61
+ keys.forEach(k => {
62
+ const { ref } = sectionsConfig[k];
63
+ ref.current.style.marginBottom = '0px';
64
+ // ref.current.style.marginTop = '15px';
65
+ })
77
66
 
78
- keys.forEach((k, i) => {
79
- const { height, ref } = sectionsConfig[k];
80
- const isFirstSection = i === 0;
81
- const isLastSection = i === keys.length - 1;
82
- const isFirstSectionOnPage = currentPageContentHeight === 0;
83
-
84
- // For first section of entire document
85
- if (isFirstSection) {
86
- ref.current.style.marginTop = `${HEADER_HEIGHT + FIRST_PAGE_TOP_PADDING}px`;
87
- currentPageContentHeight = height + FIRST_PAGE_TOP_PADDING;
88
-
89
- if (isLastSection) {
90
- ref.current.style.paddingBottom = `${LAST_SECTION_BOTTOM_PADDING}px`;
91
- currentPageContentHeight += LAST_SECTION_BOTTOM_PADDING;
67
+ keys.forEach((k, i) => {
68
+ const { height, ref } = sectionsConfig[k];
69
+
70
+ if (i === 0) {
71
+ ref.current.style.marginTop = `${HEADER_HEIGHT}px`;
72
+ incrHeight += HEADER_HEIGHT;
92
73
  }
93
- return;
94
- }
95
74
 
96
- // Calculate space needed for this section including spacing before it
97
- const spacingBefore = isFirstSectionOnPage ? NEW_PAGE_TOP_PADDING : SECTION_SPACING;
98
- const bottomPadding = isLastSection ? LAST_SECTION_BOTTOM_PADDING : 0;
99
- const totalSpaceNeeded = spacingBefore + height + bottomPadding;
100
-
101
- // Check if we need to move to next page
102
- if (currentPageContentHeight + totalSpaceNeeded > AVAILABLE_HEIGHT) {
103
- // Move to new page
104
- currentPage += 1;
105
- _pages.push(currentPage);
106
-
107
- // Calculate and apply bottom margin to fill previous page
108
- const usedSpace = currentPageContentHeight;
109
- const remainingSpace = AVAILABLE_HEIGHT - usedSpace;
110
- const previousKey = keys[i - 1];
111
- sectionsConfig[previousKey].ref.current.style.marginBottom = `${remainingSpace + PAGE_BOTTOM_MARGIN}px`;
112
-
113
- // This section starts the new page
114
- ref.current.style.marginTop = `${HEADER_HEIGHT + NEW_PAGE_TOP_PADDING}px`;
115
- currentPageContentHeight = height + NEW_PAGE_TOP_PADDING + bottomPadding;
116
- } else {
117
- // Section fits on current page
118
- ref.current.style.marginTop = `${spacingBefore}px`;
119
- currentPageContentHeight += totalSpaceNeeded;
120
- }
75
+ const newHeight = incrHeight + height;
121
76
 
122
- // Add bottom padding to last section
123
- if (isLastSection) {
124
- ref.current.style.paddingBottom = `${LAST_SECTION_BOTTOM_PADDING}px`;
125
- }
126
- });
77
+ if (i === keys.length - 1) {
78
+ ref.current.style.paddingBottom = '30px';
79
+ }
127
80
 
128
- setPages(_pages);
129
- }, [sectionsConfig, config.length]);
81
+ if (newHeight > PAGE_HEIGHT - 30 - FOOTER_HEIGHT - HEADER_HEIGHT) {
82
+ const dif = Math.abs(PAGE_HEIGHT - incrHeight);
83
+ ref.current.style.marginTop = '30px';
84
+ _page += 1;
85
+ _pages.push(_page);
86
+
87
+ if (sectionsConfig[keys[i - 1]]) {
88
+ const { ref: topRef } = sectionsConfig[keys[i - 1]];
89
+ topRef.current.style.marginBottom = `${dif + HEADER_HEIGHT - 24}px`;
90
+ incrHeight = height + 24 + HEADER_HEIGHT;
91
+ // console.log('margin', dif);
92
+ }
93
+ } else {
94
+ incrHeight = newHeight + 24;
95
+ }
96
+ // console.groupEnd();
97
+ })
98
+ setPages(_pages);
99
+ }
100
+ }, [sectionsConfig]);
130
101
 
131
102
  useEffect(() => {
132
103
  doSizing();
@@ -146,7 +117,7 @@ export default function PdfView({
146
117
  {config.map((widgets, i) => (
147
118
  <Row
148
119
  widgets={widgets}
149
- key={`dashboard-sections-${i + 1}`}
120
+ key={`dashboard-sections=${i + 1}`}
150
121
  i={i}
151
122
  onChangeHeight={onChangeHeight}
152
123
  />
@@ -157,20 +128,23 @@ export default function PdfView({
157
128
  );
158
129
  }, [config, onChangeHeight]);
159
130
 
131
+ // <div className="daf-analysis">
132
+ // <Header title={t('Dashboard Title')} />
133
+
134
+ // <div className="content">
135
+ // <div className="view-content">
136
+ // <div className="daf-analysis-layout">
137
+ // <div className='sections-cont w-pt'>
138
+ // <section>
139
+
160
140
  return (
161
141
  <div className={contClassName} style={{ position: 'relative' }}>
162
142
  {renderDashboard()}
163
143
  {pages.map((page) => (
164
- <div key={`page-${page}`}>
144
+ <>
165
145
  <div
166
- style={{
167
- top: ((page - 1) * PAGE_HEIGHT),
168
- width: '100%',
169
- height: HEADER_HEIGHT,
170
- position: 'absolute',
171
- left: 0,
172
- zIndex: 1000000
173
- }}
146
+ style={{ top: ((page - 1) * PAGE_HEIGHT), width: '100%', height: HEADER_HEIGHT - 24, position: 'absolute', left: 0, zIndex: 1000000 }}
147
+ key={`headers-${page}`}
174
148
  className="flex-row dashboard-header"
175
149
  >
176
150
  <div className="flex flex-column justify-center flex-1">
@@ -181,14 +155,8 @@ export default function PdfView({
181
155
  </div>
182
156
  </div>
183
157
  <div
184
- style={{
185
- top: (page * PAGE_HEIGHT) - FOOTER_HEIGHT,
186
- width: '100%',
187
- height: FOOTER_HEIGHT,
188
- position: 'absolute',
189
- left: 0,
190
- zIndex: 1000000
191
- }}
158
+ style={{ top: (page * PAGE_HEIGHT) - FOOTER_HEIGHT, width: '100%', height: FOOTER_HEIGHT, position: 'absolute', left: 0, zIndex: 1000000 }}
159
+ key={`footers-${page}`}
192
160
  className="dashboard-footer flex-row"
193
161
  >
194
162
  <div className="flex flex-column justify-center">
@@ -222,7 +190,7 @@ export default function PdfView({
222
190
  <h5>{page}</h5>
223
191
  </div>
224
192
  </div>
225
- </div>
193
+ </>
226
194
  ))}
227
195
  </div>
228
196
  );
@@ -236,5 +204,4 @@ PdfView.propTypes = {
236
204
  userId: PropTypes.string,
237
205
  accountId: PropTypes.string,
238
206
  documentId: PropTypes.string,
239
- downloadId: PropTypes.string,
240
- }
207
+ }
@@ -8,31 +8,31 @@ import { formatClassname } from '../../../../../../helpers/ClassesHelper.js'
8
8
  const { useToken } = theme;
9
9
 
10
10
  const WidgetCard = ({
11
- title,
11
+ title,
12
12
  backgroundColor,
13
13
  backgroundBorderColor,
14
- data = [],
15
- link,
16
- logoIcon,
17
- description,
18
- loading=false,
19
- iconColor,
14
+ data = [],
15
+ link,
16
+ logoIcon,
17
+ description,
18
+ loading = false,
19
+ iconColor,
20
20
  buttonIcon,
21
21
  imageUrl,
22
22
  buttonConfig = {},
23
23
  width,
24
- t = () => {},
24
+ t = () => { },
25
25
  }) => {
26
26
  const { token } = useToken();
27
27
  return (
28
28
  <Style backgroundColor={backgroundColor} backgroundBorderColor={backgroundBorderColor} width={width}>
29
29
  <Widget
30
30
  title={
31
- <div style={{display: "flex", alignItems: "center"}}>
32
- {imageUrl ? <img src={imageUrl} className="widget-card-logo-icon mr-2" />
31
+ <div style={{ display: "flex", alignItems: "center" }}>
32
+ {imageUrl ? <img src={imageUrl} className="widget-card-logo-icon mr-2" />
33
33
  : <div className="widget-card-logo-icon mr-2">
34
34
  <CustomIcon name={logoIcon} width={25} height={25} />
35
- </div>
35
+ </div>
36
36
  }
37
37
  <Tooltip title={title}>{title}</Tooltip>
38
38
  </div>
@@ -41,12 +41,41 @@ const WidgetCard = ({
41
41
  <>
42
42
  <div className="flex-1" />
43
43
  <Tooltip title={buttonConfig?.disabled ? (buttonConfig?.tooltipText || t("Currently unavailable")) : ""}>
44
- <a
45
- className={formatClassname(["widget-card-logo-icon", buttonConfig?.disabled && "disabled-anchor"])}
44
+ <a
45
+ className={formatClassname(["widget-card-logo-icon", buttonConfig?.disabled && "disabled-anchor"])}
46
46
  href={buttonConfig?.disabled ? undefined : link}
47
- onClick={buttonConfig?.disabled ? (e) => e.preventDefault() : undefined}
47
+ onClick={(e) => {
48
+ if (buttonConfig?.disabled) {
49
+ e.preventDefault();
50
+ } else if (buttonConfig?.onClick) {
51
+ e.preventDefault();
52
+ buttonConfig.onClick();
53
+ } else if (buttonConfig?.action) {
54
+ e.preventDefault();
55
+ // Handle different action types
56
+ switch (buttonConfig.action.type) {
57
+ case 'modal':
58
+ if (buttonConfig.action.onOpen) {
59
+ buttonConfig.action.onOpen();
60
+ }
61
+ break;
62
+ case 'navigate':
63
+ if (buttonConfig.action.url) {
64
+ window.location.href = buttonConfig.action.url;
65
+ }
66
+ break;
67
+ case 'custom':
68
+ if (buttonConfig.action.handler) {
69
+ buttonConfig.action.handler();
70
+ }
71
+ break;
72
+ default:
73
+ break;
74
+ }
75
+ }
76
+ }}
48
77
  >
49
- <CustomIcon name={buttonIcon} size={16} color={buttonConfig?.disabled ? "#6C737F" : (iconColor || theme.colorPrimary)} />
78
+ <CustomIcon name={buttonIcon} size={16} color={buttonConfig?.disabled ? "#6C737F" : (iconColor || theme.colorPrimary)} />
50
79
  </a>
51
80
  </Tooltip>
52
81
  </>
@@ -54,21 +83,21 @@ const WidgetCard = ({
54
83
  loading={loading}
55
84
  className="with-tabs no-pt-body"
56
85
  >
57
- <div style={{display: "flex", flexDirection: "column", height: "100%", marginTop: "0px"}}>
86
+ <div style={{ display: "flex", flexDirection: "column", height: "100%", marginTop: "0px" }}>
58
87
  <div style={{
59
88
  display: "flex",
60
89
  flexDirection: "column",
61
90
  justifyContent: "flex-start",
62
91
  marginTop: "10px",
63
92
  marginBottom: "24px",
64
- minHeight: "0"
93
+ minHeight: "0"
65
94
  }}>
66
95
  {description ? (
67
96
  <p style={{
68
- margin: 0,
97
+ margin: 0,
69
98
  height: "45px",
70
99
  display: "-webkit-box",
71
- WebkitLineClamp: 3,
100
+ WebkitLineClamp: 3,
72
101
  WebkitBoxOrient: "vertical",
73
102
  overflow: "hidden",
74
103
  textOverflow: "ellipsis",
@@ -79,16 +108,16 @@ const WidgetCard = ({
79
108
  {description.length > 100 ? <Tooltip title={description}>{description.substring(0, 100)}...</Tooltip> : description}
80
109
  </p>
81
110
  ) : (
82
- <div style={{height: "45px"}} />
111
+ <div style={{ height: "45px" }} />
83
112
  )}
84
113
  </div>
85
-
114
+
86
115
  {data && data.length > 0 && (
87
- <div style={{display: "flex", flexDirection: "column", gap: "8px"}}>
116
+ <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
88
117
  {data.map((item) => (
89
- <div key={item} style={{display: "flex", justifyContent: "space-between"}}>
90
- {item.isTag ? <Tag style={{width: '90px', textAlign: 'center', borderRadius: '10px'}} color={item.tagColor || 'default'}>{item.label}</Tag> : <span>{item.label}</span>}
91
- <span style={{fontSize: '12px', color: '#6C737F'}}>{item.value}</span>
118
+ <div key={item} style={{ display: "flex", justifyContent: "space-between" }}>
119
+ {item.isTag ? <Tag style={{ width: '90px', textAlign: 'center', borderRadius: '10px' }} color={item.tagColor || 'default'}>{item.label}</Tag> : <span>{item.label}</span>}
120
+ <span style={{ fontSize: '12px', color: '#6C737F' }}>{item.value}</span>
92
121
  </div>
93
122
  ))}
94
123
  </div>