@dhiraj0720/report1chart 3.0.6 → 3.0.8

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.
@@ -0,0 +1,662 @@
1
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
+ import {
3
+ ActivityIndicator,
4
+ ScrollView,
5
+ StyleSheet,
6
+ Text,
7
+ TouchableOpacity,
8
+ View,
9
+ } from 'react-native';
10
+ import fetchReport4 from '../api/report4Fetcher';
11
+ import ModernDataTable from '../components/ModernDataTable';
12
+ import { formatNumber } from '../utils/formatNumber';
13
+
14
+ const TABS = [
15
+ { key: 'kumule', label: 'KÜMÜLE' },
16
+ { key: 'faaliyet', label: 'FAALİYET KAR/ZARAR' },
17
+ { key: 'fg', label: 'FG / BRÜT KAR ORANI' },
18
+ ];
19
+
20
+ const toNumber = (value) => {
21
+ const numeric = Number(value);
22
+ return Number.isFinite(numeric) ? numeric : 0;
23
+ };
24
+
25
+ const toPercent = (current, previous) => {
26
+ if (!previous) return 0;
27
+ return ((current - previous) / Math.abs(previous)) * 100;
28
+ };
29
+
30
+ const asPercentCell = (value) => {
31
+ const numeric = toNumber(value);
32
+ const positive = numeric >= 0;
33
+ return {
34
+ text: `${positive ? '+' : ''}${numeric.toFixed(1)}%`,
35
+ color: positive ? '#15724a' : '#b43c44',
36
+ weight: '700',
37
+ };
38
+ };
39
+
40
+ const mapRowByTab = (row, tabKey) => {
41
+ if (tabKey === 'faaliyet') {
42
+ return {
43
+ name: row.name,
44
+ value2024: toNumber(row.fk2024),
45
+ value2025: toNumber(row.fk2025),
46
+ change: toNumber(row.changePercent),
47
+ budget2025: toNumber(row.budget2025),
48
+ variance: toNumber(row.budgetVariancePercent),
49
+ ratio2024: null,
50
+ ratio2025: null,
51
+ };
52
+ }
53
+
54
+ if (tabKey === 'fg') {
55
+ const ratio2024 = toNumber(row.ratio2024);
56
+ const ratio2025 = toNumber(row.ratio2025);
57
+ return {
58
+ name: row.name,
59
+ value2024: toNumber(row.gross2024),
60
+ value2025: toNumber(row.gross2025),
61
+ change: ratio2025 - ratio2024,
62
+ budget2025: toNumber(row.fk2025 || row.budget2025),
63
+ variance: ratio2025 - ratio2024,
64
+ ratio2024,
65
+ ratio2025,
66
+ };
67
+ }
68
+
69
+ return {
70
+ name: row.name,
71
+ value2024: toNumber(row.gross2024),
72
+ value2025: toNumber(row.gross2025),
73
+ change: toNumber(row.grossChangePercent),
74
+ budget2025: toNumber(row.budgetGross2025),
75
+ variance: toNumber(row.budgetGrossVariancePercent),
76
+ ratio2024: toNumber(row.ratio2024),
77
+ ratio2025: toNumber(row.ratio2025),
78
+ };
79
+ };
80
+
81
+ const Report1ModernScreen = ({ api, token, onBack }) => {
82
+ const [activeTab, setActiveTab] = useState('kumule');
83
+ const [sortMode, setSortMode] = useState('growth');
84
+ const [rowsByTab, setRowsByTab] = useState({});
85
+ const [loadedByTab, setLoadedByTab] = useState({});
86
+ const [errorByTab, setErrorByTab] = useState({});
87
+ const [loading, setLoading] = useState(false);
88
+
89
+ const endpointByTab = useMemo(() => ({
90
+ kumule: api?.kumule,
91
+ faaliyet: api?.faaliyetKarZarar,
92
+ fg: api?.fgBrutKarOrani,
93
+ }), [api]);
94
+
95
+ const loadTabData = useCallback(async (tabKey, force = false) => {
96
+ const endpoint = endpointByTab[tabKey];
97
+
98
+ if (!endpoint || !token) {
99
+ setErrorByTab((prev) => ({
100
+ ...prev,
101
+ [tabKey]: 'API endpoint or token missing.',
102
+ }));
103
+ return;
104
+ }
105
+
106
+ if (!force && loadedByTab[tabKey]) {
107
+ return;
108
+ }
109
+
110
+ setLoading(true);
111
+ setErrorByTab((prev) => ({ ...prev, [tabKey]: null }));
112
+
113
+ try {
114
+ const rows = await fetchReport4(endpoint, token);
115
+ const sortedRows = [...rows].sort(
116
+ (a, b) => (a.sortOrder || 0) - (b.sortOrder || 0),
117
+ );
118
+
119
+ setRowsByTab((prev) => ({ ...prev, [tabKey]: sortedRows }));
120
+ setLoadedByTab((prev) => ({ ...prev, [tabKey]: true }));
121
+ } catch (error) {
122
+ setErrorByTab((prev) => ({
123
+ ...prev,
124
+ [tabKey]: error?.message || 'Failed to load performance data.',
125
+ }));
126
+ } finally {
127
+ setLoading(false);
128
+ }
129
+ }, [endpointByTab, loadedByTab, token]);
130
+
131
+ useEffect(() => {
132
+ loadTabData(activeTab);
133
+ }, [activeTab, loadTabData]);
134
+
135
+ const activeRawRows = rowsByTab[activeTab] || [];
136
+ const activeError = errorByTab[activeTab];
137
+ const activeLoaded = loadedByTab[activeTab];
138
+
139
+ const mappedRows = useMemo(() => {
140
+ return activeRawRows.map((row) => mapRowByTab(row, activeTab));
141
+ }, [activeRawRows, activeTab]);
142
+
143
+ const sortedRows = useMemo(() => {
144
+ const copy = [...mappedRows];
145
+ if (sortMode === 'name') {
146
+ return copy.sort((a, b) => (a.name || '').localeCompare(b.name || ''));
147
+ }
148
+ if (sortMode === 'variance') {
149
+ return copy.sort((a, b) => b.variance - a.variance);
150
+ }
151
+ return copy.sort((a, b) => b.change - a.change);
152
+ }, [mappedRows, sortMode]);
153
+
154
+ const totals = useMemo(() => {
155
+ const total2024 = sortedRows.reduce((sum, row) => sum + row.value2024, 0);
156
+ const total2025 = sortedRows.reduce((sum, row) => sum + row.value2025, 0);
157
+ const budget2025 = sortedRows.reduce((sum, row) => sum + row.budget2025, 0);
158
+ const avgRatio2025 = sortedRows.length
159
+ ? sortedRows.reduce((sum, row) => sum + (row.ratio2025 || 0), 0) / sortedRows.length
160
+ : 0;
161
+
162
+ return {
163
+ total2024,
164
+ total2025,
165
+ budget2025,
166
+ yoy: toPercent(total2025, total2024),
167
+ avgRatio2025,
168
+ };
169
+ }, [sortedRows]);
170
+
171
+ const spotlight = sortedRows[0];
172
+
173
+ return (
174
+ <View style={styles.screen}>
175
+ <View style={styles.hero}>
176
+ <View style={styles.heroGlowLeft} />
177
+ <View style={styles.heroGlowRight} />
178
+ <TouchableOpacity onPress={onBack} style={styles.backButton}>
179
+ <Text style={styles.backIcon}>‹</Text>
180
+ </TouchableOpacity>
181
+ <Text style={styles.heroTitle}>Performance Studio</Text>
182
+ <Text style={styles.heroSubtitle}>Three-tab live performance monitor</Text>
183
+ </View>
184
+
185
+ <View style={styles.tabsContainer}>
186
+ <ScrollView horizontal showsHorizontalScrollIndicator={false}>
187
+ {TABS.map((tab) => {
188
+ const isActive = tab.key === activeTab;
189
+ return (
190
+ <TouchableOpacity
191
+ key={tab.key}
192
+ style={[styles.tabButton, isActive && styles.activeTabButton]}
193
+ onPress={() => setActiveTab(tab.key)}
194
+ >
195
+ <Text style={[styles.tabText, isActive && styles.activeTabText]}>
196
+ {tab.label}
197
+ </Text>
198
+ </TouchableOpacity>
199
+ );
200
+ })}
201
+ </ScrollView>
202
+ </View>
203
+
204
+ <ScrollView style={styles.content} showsVerticalScrollIndicator={false}>
205
+ {loading && !activeLoaded ? (
206
+ <View style={styles.center}>
207
+ <ActivityIndicator size="large" color="#ffb155" />
208
+ </View>
209
+ ) : null}
210
+
211
+ {!loading && activeError && !sortedRows.length ? (
212
+ <View style={styles.center}>
213
+ <Text style={styles.errorText}>{activeError}</Text>
214
+ <TouchableOpacity
215
+ style={styles.retryButton}
216
+ onPress={() => loadTabData(activeTab, true)}
217
+ >
218
+ <Text style={styles.retryText}>Retry</Text>
219
+ </TouchableOpacity>
220
+ </View>
221
+ ) : null}
222
+
223
+ {sortedRows.length ? (
224
+ <>
225
+ <View style={styles.kpiRow}>
226
+ <View style={[styles.kpiCard, styles.kpiWarm]}>
227
+ <Text style={styles.kpiLabel}>2024 Value</Text>
228
+ <Text style={styles.kpiValue}>{formatNumber(totals.total2024)}</Text>
229
+ </View>
230
+ <View style={[styles.kpiCard, styles.kpiBlue]}>
231
+ <Text style={styles.kpiLabel}>2025 Value</Text>
232
+ <Text style={styles.kpiValue}>{formatNumber(totals.total2025)}</Text>
233
+ </View>
234
+ </View>
235
+ <View style={styles.kpiRow}>
236
+ <View style={[styles.kpiCard, styles.kpiIndigo]}>
237
+ <Text style={styles.kpiLabel}>2025 Budget</Text>
238
+ <Text style={styles.kpiValue}>{formatNumber(totals.budget2025)}</Text>
239
+ </View>
240
+ <View style={[styles.kpiCard, styles.kpiTeal]}>
241
+ <Text style={styles.kpiLabel}>Total Change</Text>
242
+ <Text style={styles.kpiValue}>
243
+ {totals.yoy >= 0 ? '+' : ''}
244
+ {totals.yoy.toFixed(1)}%
245
+ </Text>
246
+ </View>
247
+ </View>
248
+
249
+ <View style={styles.insightStrip}>
250
+ <View>
251
+ <Text style={styles.insightLabel}>Average Ratio 2025</Text>
252
+ <Text style={styles.insightValue}>{totals.avgRatio2025.toFixed(2)}%</Text>
253
+ </View>
254
+ <View>
255
+ <Text style={styles.insightLabel}>Tab</Text>
256
+ <Text style={styles.insightValue}>{TABS.find((x) => x.key === activeTab)?.label}</Text>
257
+ </View>
258
+ </View>
259
+
260
+ {spotlight ? (
261
+ <View style={styles.spotlightCard}>
262
+ <Text style={styles.spotlightLabel}>SPOTLIGHT</Text>
263
+ <Text style={styles.spotlightName}>{spotlight.name}</Text>
264
+ <Text style={styles.spotlightValue}>
265
+ 2025: {formatNumber(spotlight.value2025)} • Change: {spotlight.change >= 0 ? '+' : ''}
266
+ {spotlight.change.toFixed(1)}%
267
+ </Text>
268
+ </View>
269
+ ) : null}
270
+
271
+ <View style={styles.sortRow}>
272
+ <TouchableOpacity
273
+ style={[styles.sortChip, sortMode === 'growth' && styles.sortChipActive]}
274
+ onPress={() => setSortMode('growth')}
275
+ >
276
+ <Text style={[styles.sortChipText, sortMode === 'growth' && styles.sortChipTextActive]}>
277
+ Top Growth
278
+ </Text>
279
+ </TouchableOpacity>
280
+ <TouchableOpacity
281
+ style={[styles.sortChip, sortMode === 'variance' && styles.sortChipActive]}
282
+ onPress={() => setSortMode('variance')}
283
+ >
284
+ <Text style={[styles.sortChipText, sortMode === 'variance' && styles.sortChipTextActive]}>
285
+ Top Variance
286
+ </Text>
287
+ </TouchableOpacity>
288
+ <TouchableOpacity
289
+ style={[styles.sortChip, sortMode === 'name' && styles.sortChipActive]}
290
+ onPress={() => setSortMode('name')}
291
+ >
292
+ <Text style={[styles.sortChipText, sortMode === 'name' && styles.sortChipTextActive]}>
293
+ A-Z
294
+ </Text>
295
+ </TouchableOpacity>
296
+ </View>
297
+
298
+ {sortedRows.map((item) => {
299
+ const maxForBar = Math.max(1, item.value2024, item.value2025, item.budget2025);
300
+ const width2024 = `${(item.value2024 / maxForBar) * 100}%`;
301
+ const width2025 = `${(item.value2025 / maxForBar) * 100}%`;
302
+
303
+ return (
304
+ <View key={item.name} style={styles.card}>
305
+ <View style={styles.cardHeader}>
306
+ <Text style={styles.cardTitle}>{item.name}</Text>
307
+ <Text style={[styles.badge, item.change >= 0 ? styles.badgeUp : styles.badgeDown]}>
308
+ {item.change >= 0 ? '+' : ''}
309
+ {item.change.toFixed(1)}%
310
+ </Text>
311
+ </View>
312
+
313
+ <View style={styles.barRow}>
314
+ <Text style={styles.barLabel}>2024</Text>
315
+ <View style={styles.track}>
316
+ <View style={[styles.fill2024, { width: width2024 }]} />
317
+ </View>
318
+ <Text style={styles.barValue}>{formatNumber(item.value2024)}</Text>
319
+ </View>
320
+
321
+ <View style={styles.barRow}>
322
+ <Text style={styles.barLabel}>2025</Text>
323
+ <View style={styles.track}>
324
+ <View style={[styles.fill2025, { width: width2025 }]} />
325
+ </View>
326
+ <Text style={styles.barValue}>{formatNumber(item.value2025)}</Text>
327
+ </View>
328
+ </View>
329
+ );
330
+ })}
331
+
332
+ <ModernDataTable
333
+ title="Performance Table"
334
+ columns={[
335
+ { key: 'name', label: 'Activity', width: 150 },
336
+ { key: 'value2024', label: '2024', width: 120, align: 'right', render: (row) => formatNumber(row.value2024) },
337
+ { key: 'value2025', label: '2025', width: 120, align: 'right', render: (row) => formatNumber(row.value2025) },
338
+ { key: 'change', label: 'Change %', width: 90, align: 'right', render: (row) => asPercentCell(row.change) },
339
+ { key: 'budget2025', label: 'Budget 2025', width: 130, align: 'right', render: (row) => formatNumber(row.budget2025) },
340
+ { key: 'variance', label: 'Variance %', width: 95, align: 'right', render: (row) => asPercentCell(row.variance) },
341
+ {
342
+ key: 'ratio2024',
343
+ label: 'Ratio 2024',
344
+ width: 92,
345
+ align: 'right',
346
+ render: (row) => (row.ratio2024 === null ? '-' : `${row.ratio2024.toFixed(2)}%`),
347
+ },
348
+ {
349
+ key: 'ratio2025',
350
+ label: 'Ratio 2025',
351
+ width: 92,
352
+ align: 'right',
353
+ render: (row) => (row.ratio2025 === null ? '-' : `${row.ratio2025.toFixed(2)}%`),
354
+ },
355
+ ]}
356
+ rows={sortedRows}
357
+ />
358
+ </>
359
+ ) : null}
360
+
361
+ <View style={styles.footerSpacing} />
362
+ </ScrollView>
363
+ </View>
364
+ );
365
+ };
366
+
367
+ const styles = StyleSheet.create({
368
+ screen: {
369
+ flex: 1,
370
+ backgroundColor: '#0f1726',
371
+ },
372
+ hero: {
373
+ paddingHorizontal: 16,
374
+ paddingTop: 14,
375
+ paddingBottom: 16,
376
+ backgroundColor: '#131d30',
377
+ overflow: 'hidden',
378
+ },
379
+ heroGlowLeft: {
380
+ position: 'absolute',
381
+ width: 180,
382
+ height: 180,
383
+ borderRadius: 90,
384
+ left: -70,
385
+ top: -70,
386
+ backgroundColor: '#25324d',
387
+ },
388
+ heroGlowRight: {
389
+ position: 'absolute',
390
+ width: 170,
391
+ height: 170,
392
+ borderRadius: 85,
393
+ right: -60,
394
+ top: -50,
395
+ backgroundColor: '#2b3a59',
396
+ },
397
+ backButton: {
398
+ width: 40,
399
+ height: 40,
400
+ borderRadius: 20,
401
+ justifyContent: 'center',
402
+ alignItems: 'center',
403
+ backgroundColor: 'rgba(255,255,255,0.12)',
404
+ },
405
+ backIcon: {
406
+ fontSize: 28,
407
+ color: '#fff',
408
+ fontWeight: '700',
409
+ marginTop: -2,
410
+ },
411
+ heroTitle: {
412
+ marginTop: 10,
413
+ color: '#fff',
414
+ fontSize: 22,
415
+ fontWeight: '800',
416
+ },
417
+ heroSubtitle: {
418
+ marginTop: 5,
419
+ color: '#c6d1ea',
420
+ fontSize: 13,
421
+ fontWeight: '500',
422
+ },
423
+ tabsContainer: {
424
+ backgroundColor: '#111b2d',
425
+ borderBottomWidth: 1,
426
+ borderBottomColor: '#2f3b57',
427
+ paddingVertical: 8,
428
+ paddingHorizontal: 8,
429
+ },
430
+ tabButton: {
431
+ paddingHorizontal: 14,
432
+ paddingVertical: 9,
433
+ borderRadius: 8,
434
+ marginHorizontal: 4,
435
+ backgroundColor: '#18233a',
436
+ borderWidth: 1,
437
+ borderColor: '#35415e',
438
+ },
439
+ activeTabButton: {
440
+ backgroundColor: '#ffb155',
441
+ borderColor: '#ffb155',
442
+ },
443
+ tabText: {
444
+ fontSize: 12,
445
+ fontWeight: '700',
446
+ color: '#c5d0e8',
447
+ },
448
+ activeTabText: {
449
+ color: '#2e2720',
450
+ },
451
+ content: {
452
+ flex: 1,
453
+ paddingHorizontal: 14,
454
+ paddingTop: 14,
455
+ },
456
+ center: {
457
+ paddingVertical: 24,
458
+ alignItems: 'center',
459
+ },
460
+ errorText: {
461
+ color: '#ffb3bb',
462
+ textAlign: 'center',
463
+ marginBottom: 10,
464
+ },
465
+ retryButton: {
466
+ backgroundColor: '#ffb155',
467
+ borderRadius: 8,
468
+ paddingHorizontal: 14,
469
+ paddingVertical: 8,
470
+ },
471
+ retryText: {
472
+ color: '#2e2720',
473
+ fontWeight: '700',
474
+ },
475
+ kpiRow: {
476
+ flexDirection: 'row',
477
+ marginBottom: 10,
478
+ },
479
+ kpiCard: {
480
+ flex: 1,
481
+ borderRadius: 14,
482
+ borderWidth: 1,
483
+ paddingHorizontal: 12,
484
+ paddingVertical: 10,
485
+ marginRight: 10,
486
+ },
487
+ kpiWarm: {
488
+ backgroundColor: '#fff4e8',
489
+ borderColor: '#ffc58c',
490
+ },
491
+ kpiBlue: {
492
+ backgroundColor: '#eaf0ff',
493
+ borderColor: '#9fb8ff',
494
+ },
495
+ kpiIndigo: {
496
+ backgroundColor: '#edeaff',
497
+ borderColor: '#b9acf8',
498
+ },
499
+ kpiTeal: {
500
+ backgroundColor: '#e6fff9',
501
+ borderColor: '#9cead6',
502
+ },
503
+ kpiLabel: {
504
+ fontSize: 11,
505
+ color: '#4f5b70',
506
+ marginBottom: 4,
507
+ },
508
+ kpiValue: {
509
+ fontSize: 16,
510
+ fontWeight: '800',
511
+ color: '#1d2738',
512
+ },
513
+ insightStrip: {
514
+ backgroundColor: '#1a2640',
515
+ borderColor: '#303d58',
516
+ borderWidth: 1,
517
+ borderRadius: 14,
518
+ paddingHorizontal: 12,
519
+ paddingVertical: 10,
520
+ flexDirection: 'row',
521
+ justifyContent: 'space-between',
522
+ marginBottom: 10,
523
+ },
524
+ insightLabel: {
525
+ fontSize: 11,
526
+ color: '#9eb1d3',
527
+ marginBottom: 4,
528
+ },
529
+ insightValue: {
530
+ color: '#fff',
531
+ fontWeight: '800',
532
+ fontSize: 13,
533
+ },
534
+ spotlightCard: {
535
+ backgroundColor: '#1a2640',
536
+ borderColor: '#303d58',
537
+ borderWidth: 1,
538
+ borderRadius: 14,
539
+ paddingHorizontal: 12,
540
+ paddingVertical: 12,
541
+ marginBottom: 10,
542
+ },
543
+ spotlightLabel: {
544
+ fontSize: 10,
545
+ letterSpacing: 1,
546
+ color: '#ffbf72',
547
+ fontWeight: '800',
548
+ },
549
+ spotlightName: {
550
+ marginTop: 6,
551
+ fontSize: 16,
552
+ color: '#fff',
553
+ fontWeight: '800',
554
+ },
555
+ spotlightValue: {
556
+ marginTop: 4,
557
+ fontSize: 12,
558
+ color: '#c9d5ed',
559
+ },
560
+ sortRow: {
561
+ flexDirection: 'row',
562
+ marginBottom: 10,
563
+ },
564
+ sortChip: {
565
+ paddingVertical: 6,
566
+ paddingHorizontal: 10,
567
+ borderRadius: 999,
568
+ borderWidth: 1,
569
+ borderColor: '#3c4a67',
570
+ marginRight: 8,
571
+ backgroundColor: '#18233a',
572
+ },
573
+ sortChipActive: {
574
+ backgroundColor: '#2d3c59',
575
+ borderColor: '#6a7da3',
576
+ },
577
+ sortChipText: {
578
+ fontSize: 11,
579
+ color: '#afbedb',
580
+ fontWeight: '700',
581
+ },
582
+ sortChipTextActive: {
583
+ color: '#fff',
584
+ },
585
+ card: {
586
+ backgroundColor: '#131d30',
587
+ borderRadius: 14,
588
+ borderWidth: 1,
589
+ borderColor: '#2f3a55',
590
+ padding: 12,
591
+ marginBottom: 10,
592
+ },
593
+ cardHeader: {
594
+ flexDirection: 'row',
595
+ justifyContent: 'space-between',
596
+ alignItems: 'center',
597
+ marginBottom: 10,
598
+ },
599
+ cardTitle: {
600
+ color: '#fff',
601
+ fontSize: 14,
602
+ fontWeight: '800',
603
+ flex: 1,
604
+ marginRight: 8,
605
+ },
606
+ badge: {
607
+ borderRadius: 999,
608
+ paddingHorizontal: 8,
609
+ paddingVertical: 4,
610
+ fontSize: 11,
611
+ fontWeight: '800',
612
+ },
613
+ badgeUp: {
614
+ backgroundColor: '#1d463a',
615
+ color: '#7ff0c8',
616
+ },
617
+ badgeDown: {
618
+ backgroundColor: '#522d34',
619
+ color: '#ff9ca6',
620
+ },
621
+ barRow: {
622
+ flexDirection: 'row',
623
+ alignItems: 'center',
624
+ marginBottom: 8,
625
+ },
626
+ barLabel: {
627
+ width: 54,
628
+ color: '#bac8e1',
629
+ fontSize: 11,
630
+ fontWeight: '700',
631
+ },
632
+ track: {
633
+ flex: 1,
634
+ height: 10,
635
+ borderRadius: 999,
636
+ backgroundColor: '#27334c',
637
+ overflow: 'hidden',
638
+ marginHorizontal: 8,
639
+ },
640
+ fill2024: {
641
+ height: '100%',
642
+ backgroundColor: '#ffb155',
643
+ borderRadius: 999,
644
+ },
645
+ fill2025: {
646
+ height: '100%',
647
+ backgroundColor: '#6db2ff',
648
+ borderRadius: 999,
649
+ },
650
+ barValue: {
651
+ width: 92,
652
+ textAlign: 'right',
653
+ color: '#e4ecff',
654
+ fontSize: 11,
655
+ fontWeight: '700',
656
+ },
657
+ footerSpacing: {
658
+ height: 14,
659
+ },
660
+ });
661
+
662
+ export default Report1ModernScreen;