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.
package/dist/components/index.js
CHANGED
|
@@ -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
|
|
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
|
|
13340
|
-
|
|
13341
|
-
|
|
13342
|
-
|
|
13343
|
-
|
|
13344
|
-
|
|
13345
|
-
|
|
13346
|
-
|
|
13347
|
-
|
|
13348
|
-
|
|
13349
|
-
|
|
13350
|
-
|
|
13351
|
-
|
|
13352
|
-
|
|
13353
|
-
|
|
13354
|
-
|
|
13355
|
-
|
|
13356
|
-
|
|
13357
|
-
|
|
13358
|
-
|
|
13359
|
-
|
|
13360
|
-
|
|
13361
|
-
|
|
13362
|
-
|
|
13363
|
-
|
|
13364
|
-
|
|
13365
|
-
|
|
13366
|
-
|
|
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
|
-
|
|
13369
|
-
}
|
|
13370
|
-
|
|
13371
|
-
|
|
13372
|
-
|
|
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
|
|
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(
|
|
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
|
-
}
|
|
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:
|
|
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
|
@@ -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
|
|
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
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
});
|
|
77
|
+
if (i === keys.length - 1) {
|
|
78
|
+
ref.current.style.paddingBottom = '30px';
|
|
79
|
+
}
|
|
127
80
|
|
|
128
|
-
|
|
129
|
-
|
|
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
|
|
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
|
-
|
|
144
|
+
<>
|
|
165
145
|
<div
|
|
166
|
-
style={{
|
|
167
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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={
|
|
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
|
|
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>
|