@cdc/dashboard 4.25.3 → 4.25.6
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/Dynamic_Data.md +79 -0
- package/Override_Data.md +39 -0
- package/dist/cdcdashboard.js +77308 -78377
- package/examples/legend-issue-data.json +1874 -0
- package/examples/legend-issue.json +749 -0
- package/examples/m2.json +32904 -0
- package/examples/map.json +628 -0
- package/examples/special-classes.json +54340 -0
- package/index.html +1 -26
- package/package.json +10 -15
- package/src/CdcDashboardComponent.tsx +65 -216
- package/src/_stories/Dashboard.stories.tsx +2 -0
- package/src/_stories/_mock/api-filter-map.json +43 -1
- package/src/components/CollapsibleVisualizationRow.tsx +4 -6
- package/src/components/DashboardEditors.tsx +143 -0
- package/src/components/DashboardFilters/DashboardFilters.tsx +205 -205
- package/src/components/DashboardFilters/DashboardFiltersEditor/components/APIModal.tsx +129 -0
- package/src/components/DashboardFilters/DashboardFiltersEditor/components/FilterEditor.tsx +680 -652
- package/src/components/DashboardFilters/DashboardFiltersWrapper.tsx +198 -198
- package/src/components/DataDesignerModal.tsx +33 -14
- package/src/components/Header/Header.tsx +7 -9
- package/src/components/MultiConfigTabs/multiconfigtabs.styles.css +3 -0
- package/src/components/Row.tsx +2 -24
- package/src/components/VisualizationRow.tsx +191 -214
- package/src/helpers/getVizConfig.ts +108 -80
- package/src/helpers/getVizRowColumnLocator.ts +0 -1
- package/src/helpers/reloadURLHelpers.ts +11 -6
- package/src/helpers/shouldLoadAllFilters.ts +30 -30
- package/src/index.tsx +2 -1
- package/src/scss/main.scss +0 -5
- package/src/store/dashboard.actions.ts +2 -2
- package/src/store/dashboard.reducer.ts +15 -11
- package/src/types/ConfigRow.ts +0 -1
- package/src/types/Dashboard.ts +1 -1
- package/src/types/DashboardConfig.ts +1 -1
- package/src/types/SharedFilter.ts +2 -0
- package/examples/private/DEV-10120.json +0 -1294
- package/examples/private/DEV-10527.json +0 -845
- package/examples/private/DEV-10586.json +0 -54319
- package/examples/private/DEV-10856.json +0 -54319
- package/examples/private/DEV-9199.json +0 -606
- package/examples/private/DEV-9644.json +0 -20092
- package/examples/private/DEV-9684.json +0 -2135
- package/examples/private/DEV-9932.json +0 -95
- package/examples/private/DEV-9989.json +0 -229
- package/examples/private/art-dashboard.json +0 -18174
- package/examples/private/art-scratch.json +0 -2406
- package/examples/private/bird-flu-2.json +0 -440
- package/examples/private/bird-flu.json +0 -413
- package/examples/private/dashboard-config-ehdi.json +0 -29915
- package/examples/private/dashboard-map-filter.json +0 -815
- package/examples/private/dashboard-margins.js +0 -15
- package/examples/private/dataset.json +0 -1452
- package/examples/private/dev-10856-2.json +0 -1348
- package/examples/private/ehdi-data.json +0 -29502
- package/examples/private/exposure-source-h5-data.csv +0 -26
- package/examples/private/fatal-data.csv +0 -3159
- package/examples/private/feelings.json +0 -1
- package/examples/private/gaza-issue.json +0 -1214
- package/examples/private/markup.json +0 -115
- package/examples/private/nhis.json +0 -1792
- package/examples/private/workforce.json +0 -2041
- package/src/types/DataSet.ts +0 -11
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { useState } from 'react'
|
|
2
|
+
import { SharedFilter } from '../../../../types/SharedFilter'
|
|
3
|
+
import Tooltip from '@cdc/core/components/ui/Tooltip'
|
|
4
|
+
import Icon from '@cdc/core/components/ui/Icon'
|
|
5
|
+
|
|
6
|
+
type APIModalProps = {
|
|
7
|
+
filter: SharedFilter
|
|
8
|
+
isNestedDropdown: boolean
|
|
9
|
+
updateAPIFilter: Function
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const APIModal: React.FC<APIModalProps> = ({ filter, isNestedDropdown, updateAPIFilter }) => {
|
|
13
|
+
const [APIEndpoint, setAPIEndpoint] = useState(filter.apiFilter?.apiEndpoint || '')
|
|
14
|
+
const [APIValueSelector, setAPIValueSelector] = useState(filter.apiFilter?.valueSelector || '')
|
|
15
|
+
const [APITextSelector, setAPITextSelector] = useState(filter.apiFilter?.textSelector || '')
|
|
16
|
+
const [APISubGroupValueSelector, setAPISubGroupValueSelector] = useState(filter.apiFilter?.subgroupValueSelector)
|
|
17
|
+
const [APISubGroupTextSelector, setAPISubGroupTextSelector] = useState(filter.apiFilter?.subgroupTextSelector)
|
|
18
|
+
return (
|
|
19
|
+
<fieldset className='mb-1 px-3 cdc-open-viz-module'>
|
|
20
|
+
<label className='d-block'>
|
|
21
|
+
<span>API Endpoint: </span>
|
|
22
|
+
<textarea
|
|
23
|
+
value={APIEndpoint}
|
|
24
|
+
rows={4}
|
|
25
|
+
onChange={e => setAPIEndpoint(e.target.value)}
|
|
26
|
+
className='w-100'
|
|
27
|
+
style={{ minHeight: '1.5rem', maxWidth: '90%' }}
|
|
28
|
+
/>
|
|
29
|
+
{isNestedDropdown && (
|
|
30
|
+
<Tooltip style={{ textTransform: 'none' }}>
|
|
31
|
+
<Tooltip.Target>
|
|
32
|
+
<Icon display='question' style={{ marginLeft: '0.5rem' }} />
|
|
33
|
+
</Tooltip.Target>
|
|
34
|
+
<Tooltip.Content>
|
|
35
|
+
<p>Your API Endpoint should return both value selector values.</p>
|
|
36
|
+
</Tooltip.Content>
|
|
37
|
+
</Tooltip>
|
|
38
|
+
)}
|
|
39
|
+
</label>
|
|
40
|
+
<div className='d-flex'>
|
|
41
|
+
<div className={`w-50${isNestedDropdown ? ' border border-dark p-1 m-1' : ''}`}>
|
|
42
|
+
<label>
|
|
43
|
+
<span>Value Selector: </span>
|
|
44
|
+
<input type='text' value={APIValueSelector || ''} onChange={e => setAPIValueSelector(e.target.value)} />
|
|
45
|
+
<Tooltip style={{ textTransform: 'none' }}>
|
|
46
|
+
<Tooltip.Target>
|
|
47
|
+
<Icon display='question' style={{ marginLeft: '0.5rem' }} />
|
|
48
|
+
</Tooltip.Target>
|
|
49
|
+
<Tooltip.Content>
|
|
50
|
+
<p>Value to use in the html option element</p>
|
|
51
|
+
</Tooltip.Content>
|
|
52
|
+
</Tooltip>
|
|
53
|
+
<p>{` * Required`}</p>
|
|
54
|
+
</label>
|
|
55
|
+
<label>
|
|
56
|
+
<span>Display Text Selector: </span>
|
|
57
|
+
<input type='text' value={APITextSelector || ''} onChange={e => setAPITextSelector(e.target.value)} />
|
|
58
|
+
<Tooltip style={{ textTransform: 'none' }}>
|
|
59
|
+
<Tooltip.Target>
|
|
60
|
+
<Icon display='question' style={{ marginLeft: '0.5rem' }} />
|
|
61
|
+
</Tooltip.Target>
|
|
62
|
+
<Tooltip.Content>
|
|
63
|
+
<p>Text to use in the html option element. If none is applied value selector will be used.</p>
|
|
64
|
+
</Tooltip.Content>
|
|
65
|
+
</Tooltip>
|
|
66
|
+
<p>{` * Optional`}</p>
|
|
67
|
+
</label>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
{isNestedDropdown && (
|
|
71
|
+
<div className={`w-50${isNestedDropdown ? ' border border-dark p-1 m-1' : ''}`}>
|
|
72
|
+
<label>
|
|
73
|
+
<span>Subgroup Value Selector: </span>
|
|
74
|
+
<input
|
|
75
|
+
type='text'
|
|
76
|
+
value={APISubGroupValueSelector || ''}
|
|
77
|
+
onChange={e => setAPISubGroupValueSelector(e.target.value)}
|
|
78
|
+
/>
|
|
79
|
+
<Tooltip style={{ textTransform: 'none' }}>
|
|
80
|
+
<Tooltip.Target>
|
|
81
|
+
<Icon display='question' style={{ marginLeft: '0.5rem' }} />
|
|
82
|
+
</Tooltip.Target>
|
|
83
|
+
<Tooltip.Content>
|
|
84
|
+
<p>Value to use in the html option element</p>
|
|
85
|
+
</Tooltip.Content>
|
|
86
|
+
</Tooltip>
|
|
87
|
+
<p>{` * Required`}</p>
|
|
88
|
+
</label>
|
|
89
|
+
<label>
|
|
90
|
+
<span>Subgroup Display Text Selector: </span>
|
|
91
|
+
<input
|
|
92
|
+
type='text'
|
|
93
|
+
value={APISubGroupTextSelector || ''}
|
|
94
|
+
onChange={e => setAPISubGroupTextSelector(e.target.value)}
|
|
95
|
+
/>
|
|
96
|
+
<Tooltip style={{ textTransform: 'none' }}>
|
|
97
|
+
<Tooltip.Target>
|
|
98
|
+
<Icon display='question' style={{ marginLeft: '0.5rem' }} />
|
|
99
|
+
</Tooltip.Target>
|
|
100
|
+
<Tooltip.Content>
|
|
101
|
+
<p>Text to use in the html option element. If none is applied value selector will be used.</p>
|
|
102
|
+
</Tooltip.Content>
|
|
103
|
+
</Tooltip>
|
|
104
|
+
<p>{` * Optional`}</p>
|
|
105
|
+
</label>
|
|
106
|
+
</div>
|
|
107
|
+
)}
|
|
108
|
+
</div>
|
|
109
|
+
<div className='d-flex justify-content-end mt-2'>
|
|
110
|
+
<button
|
|
111
|
+
className='btn btn-primary mt-2'
|
|
112
|
+
onClick={() =>
|
|
113
|
+
updateAPIFilter(
|
|
114
|
+
APIEndpoint,
|
|
115
|
+
APIValueSelector,
|
|
116
|
+
APITextSelector,
|
|
117
|
+
APISubGroupValueSelector,
|
|
118
|
+
APISubGroupTextSelector
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
>
|
|
122
|
+
Save
|
|
123
|
+
</button>
|
|
124
|
+
</div>
|
|
125
|
+
</fieldset>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export default APIModal
|