Skip to content

Commit 5fe8d44

Browse files
committed
ui - show column inference icons throughout controls
1 parent 2578ab1 commit 5fe8d44

File tree

5 files changed

+36
-31
lines changed

5 files changed

+36
-31
lines changed

src/controls/editor-mode/filters.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react'
1+
import React, { useMemo } from 'react'
22

33
import { DateRange, Icons } from '@eqworks/lumen-labs'
44

@@ -20,11 +20,16 @@ const Filters = () => {
2020
const groups = useStoreState((state) => state.groups)
2121
const groupFilter = useStoreState((state) => state.groupFilter)
2222
const filters = useStoreState((state) => state.filters)
23-
const columns = useStoreState((state) => state.columns)
2423
const columnsAnalysis = useStoreState((state) => state.columnsAnalysis)
2524
const domain = useStoreState((state) => state.domain)
2625
const domainIsDate = useStoreState((state) => state.domainIsDate)
2726

27+
const filterData = useMemo(() => (
28+
Object.fromEntries(Object.entries(columnsAnalysis)
29+
.filter(([, { min, max, isNumeric }]) => isNumeric && min !== max)
30+
.map(([c, { Icon }]) => [c, { Icon }]))
31+
), [columnsAnalysis])
32+
2833
return (
2934
<WidgetControlCard
3035
clear={() => resetValue({ filters, groupFilter })}
@@ -68,10 +73,8 @@ const Filters = () => {
6873
values={filters}
6974
primaryKey='key'
7075
secondaryKey='filter'
71-
data={columns.map(({ name }) => name).filter(c => {
72-
const { min, max, isNumeric } = columnsAnalysis[c] || {}
73-
return isNumeric && min !== max
74-
})}
76+
valueIcons={Object.values(filterData).map(({ Icon }) => Icon)}
77+
data={Object.keys(filterData)}
7578
subData={[]}
7679
callback={(i, { key }) => {
7780
if (i === filters.length) {

src/controls/shared/domain-controls.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const DomainControls = () => {
1414
const update = useStoreActions(actions => actions.update)
1515
const userUpdate = useStoreActions(actions => actions.userUpdate)
1616
const resetValue = useStoreActions(actions => actions.resetValue)
17-
const columns = useStoreState((state) => state.columns)
1817
const type = useStoreState((state) => state.type)
1918
const group = useStoreState((state) => state.group)
2019
const groupKey = useStoreState((state) => state.groupKey)
@@ -28,18 +27,15 @@ const DomainControls = () => {
2827
// local state
2928
const groupingOptional = useMemo(() => typeInfo[type]?.groupingOptional, [type])
3029

31-
const eligibleGroupKeyValues = useMemo(() => (
32-
columns.map(({ name }) => name)
33-
.filter(c => !columnsAnalysis[c]?.isNumeric)
34-
), [columns, columnsAnalysis])
35-
3630
const eligibleDomainValues = useMemo(() => (
37-
columns.map(({ name }) => name)
38-
.filter(c =>
39-
(groupingOptional || eligibleGroupKeyValues.includes(c))
40-
&& !(valueKeys.map(({ key }) => key).includes(c))
41-
)
42-
), [columns, eligibleGroupKeyValues, groupingOptional, valueKeys])
31+
Object.fromEntries(
32+
Object.entries(columnsAnalysis)
33+
.filter(([c, { isNumeric }]) =>
34+
(groupingOptional || !isNumeric)
35+
&& !(valueKeys.map(({ key }) => key).includes(c)))
36+
.map(([c, { Icon }]) => [c, { Icon }])
37+
)
38+
), [columnsAnalysis, groupingOptional, valueKeys])
4339

4440
useEffect(() => {
4541
if (!group && !groupingOptional) {
@@ -67,10 +63,11 @@ const DomainControls = () => {
6763
renderRow('Column',
6864
<CustomSelect
6965
fullWidth
70-
data={eligibleDomainValues}
66+
data={Object.keys(eligibleDomainValues)}
67+
icons={Object.values(eligibleDomainValues).map(({ Icon }) => Icon)}
7168
value={domain.value}
7269
onSelect={val => {
73-
const willGroup = eligibleGroupKeyValues.includes(val) && !groupingOptional
70+
const willGroup = !columnsAnalysis[val]?.isNumeric && !groupingOptional
7471
userUpdate({
7572
group: willGroup,
7673
...(

src/controls/shared/map-domain-controls.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import CustomSelect from '../../components/custom-select'
55
import WidgetControlCard from '../shared/components/widget-control-card'
66
import { renderRow, renderSection } from './util'
77
import { MAP_LAYER_VALUE_VIS, MAP_LAYER_GEO_KEYS } from '../../constants/map'
8+
import { Icons } from '@eqworks/lumen-labs'
89

910

1011
const MapDomainControls = () => {
@@ -41,6 +42,7 @@ const MapDomainControls = () => {
4142
<CustomSelect
4243
fullWidth
4344
data={eligibleDomainValues}
45+
icons={eligibleDomainValues.map(() => Icons.AddPin)}
4446
value={domain.value}
4547
onSelect={val => {
4648
// update groupKey with mapGroupKey value to have it available if we switch to a chart widget type

src/controls/shared/map-value-controls/map-linked-select.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Tooltip, Icons, getTailwindConfigColor, makeStyles } from '@eqworks/lum
55

66
import PluralLinkedSelect from '../../../components/plural-linked-select'
77
import types from '../../../constants/type-info'
8+
import { useStoreState } from '../../../store'
89

910

1011
const classes = makeStyles({
@@ -38,6 +39,7 @@ const MapLinkedSelect = ({
3839
disableSubMessage,
3940
callback,
4041
}) => {
42+
const columnsAnalysis = useStoreState((state) => state.columnsAnalysis)
4143
return (
4244
categories.map((mapVis, i) => {
4345
const match = values.findIndex(v => v.mapVis === mapVis)
@@ -69,6 +71,7 @@ const MapLinkedSelect = ({
6971
]}
7072
titles={titles}
7173
values={values[match] ? [values[match]] : []}
74+
{...(values[match] && { valueIcons: [columnsAnalysis[values[match][PRIMARY_KEY]]?.Icon] })}
7275
callback={(_, v) => callback(
7376
match,
7477
{

src/controls/shared/value-controls.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import { Icons } from '@eqworks/lumen-labs'
55
import modes from '../../constants/modes'
66
import aggFunctions from '../../util/agg-functions'
77
import { useStoreState, useStoreActions } from '../../store'
8-
import CustomSelect from '../../components/custom-select'
98
import PluralLinkedSelect from '../../components/plural-linked-select'
109
import WidgetControlCard from '../shared/components/widget-control-card'
1110
import { renderRow, renderSection } from './util'
1211
import MutedBarrier from './muted-barrier'
12+
import CustomSelect from '../../components/custom-select'
1313

1414

1515
const ValueControls = () => {
@@ -19,20 +19,18 @@ const ValueControls = () => {
1919

2020
// common state
2121
const type = useStoreState((state) => state.type)
22-
const columns = useStoreState((state) => state.columns)
2322
const group = useStoreState((state) => state.group)
2423
const domain = useStoreState((state) => state.domain)
2524
const valueKeys = useStoreState((state) => state.valueKeys)
2625
const dataHasVariance = useStoreState((state) => state.dataHasVariance)
2726
const dataSourceLoading = useStoreState((state) => state.ui.dataSourceLoading)
2827
const columnsAnalysis = useStoreState((state) => state.columnsAnalysis)
2928

30-
const eligibleColumns = useMemo(() => columns
31-
.map(({ name }) => name)
32-
.filter(c => (
33-
c !== domain.value
34-
&& columnsAnalysis[c]?.isNumeric
35-
)), [columns, columnsAnalysis, domain.value])
29+
const eligibleColumns = useMemo(() =>
30+
Object.fromEntries(
31+
Object.entries(columnsAnalysis)
32+
.filter(([c, { isNumeric }]) => c !== domain.value && isNumeric)
33+
), [columnsAnalysis, domain.value])
3634

3735
// UI state
3836
const mode = useStoreState((state) => state.ui.mode)
@@ -46,9 +44,10 @@ const ValueControls = () => {
4644
staticQuantity={mode === modes.QL ? 3 : undefined}
4745
titles={['Column', 'Operation']}
4846
values={valueKeys}
47+
valueIcons={Object.values(eligibleColumns).map(({ Icon }) => Icon)}
4948
primaryKey='key'
5049
secondaryKey='agg'
51-
data={eligibleColumns}
50+
data={Object.keys(eligibleColumns)}
5251
subData={Object.keys(aggFunctions)}
5352
disableSubs={!dataHasVariance}
5453
disableSubMessage="doesn't require aggregation."
@@ -71,7 +70,7 @@ const ValueControls = () => {
7170

7271
return (
7372
<MutedBarrier
74-
mute={!dataSourceLoading && (!type || !domain.value || !eligibleColumns.length)}
73+
mute={!dataSourceLoading && (!type || !domain.value || !Object.keys(eligibleColumns)?.length)}
7574
{...!eligibleColumns.length && { message: 'Sorry, there are no eligible columns in this dataset.' }}
7675
>
7776
<WidgetControlCard
@@ -90,8 +89,9 @@ const ValueControls = () => {
9089
fullWidth
9190
multiSelect
9291
value={valueKeys.map(({ key }) => key)}
93-
data={eligibleColumns}
92+
data={Object.keys(eligibleColumns)}
9493
onSelect={(val) => userUpdate({ valueKeys: val.map(v => ({ key: v })) })}
94+
icons={Object.values(eligibleColumns).map(({ Icon }) => Icon)}
9595
/>
9696
)
9797
)

0 commit comments

Comments
 (0)