@carto/ps-react-ui 4.17.2 → 4.18.0
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/category-Ct2BzADB.js +753 -0
- package/dist/category-Ct2BzADB.js.map +1 -0
- package/dist/change-column-Bhcxmp-r.js +1148 -0
- package/dist/change-column-Bhcxmp-r.js.map +1 -0
- package/dist/echart-B10dhEaM.js +262 -0
- package/dist/echart-B10dhEaM.js.map +1 -0
- package/dist/legend/stores.js +1 -1
- package/dist/{legend-store-registry-Bo8U_qWM.js → legend-store-registry-p1tSwJXH.js} +151 -147
- package/dist/legend-store-registry-p1tSwJXH.js.map +1 -0
- package/dist/legend.js +473 -415
- package/dist/legend.js.map +1 -1
- package/dist/types/legend/components/legend-actions/legend-actions.d.ts +2 -2
- package/dist/types/legend/components/legend-group/styles.d.ts +31 -20
- package/dist/types/legend/components/legend-row/styles.d.ts +24 -4
- package/dist/types/legend/components/legend-sortable/styles.d.ts +4 -3
- package/dist/types/widgets-v2/actions/lock-selection/lock-selection.d.ts +15 -5
- package/dist/types/widgets-v2/category/components/category-legend.d.ts +18 -2
- package/dist/types/widgets-v2/category/components/category-row-stacked.d.ts +6 -1
- package/dist/types/widgets-v2/category/style.d.ts +8 -0
- package/dist/types/widgets-v2/echart/use-chart-selection.d.ts +10 -4
- package/dist/types/widgets-v2/histogram/index.d.ts +1 -1
- package/dist/types/widgets-v2/histogram/transforms.d.ts +11 -0
- package/dist/types/widgets-v2/histogram/types.d.ts +9 -0
- package/dist/types/widgets-v2/scatterplot/index.d.ts +1 -1
- package/dist/types/widgets-v2/scatterplot/transforms.d.ts +9 -0
- package/dist/types/widgets-v2/table/index.d.ts +1 -0
- package/dist/types/widgets-v2/table/transforms.d.ts +13 -0
- package/dist/types/widgets-v2/table/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/timeseries/index.d.ts +1 -0
- package/dist/types/widgets-v2/timeseries/transforms.d.ts +10 -0
- package/dist/types/widgets-v2/timeseries/transforms.test.d.ts +1 -0
- package/dist/widgets-v2/actions.js +1 -1
- package/dist/widgets-v2/category.js +1 -1
- package/dist/widgets-v2/echart.js +1 -1
- package/dist/widgets-v2/echart.js.map +1 -1
- package/dist/widgets-v2/histogram.js +181 -158
- package/dist/widgets-v2/histogram.js.map +1 -1
- package/dist/widgets-v2/pie.js +155 -116
- package/dist/widgets-v2/pie.js.map +1 -1
- package/dist/widgets-v2/scatterplot.js +91 -85
- package/dist/widgets-v2/scatterplot.js.map +1 -1
- package/dist/widgets-v2/table.js +55 -45
- package/dist/widgets-v2/table.js.map +1 -1
- package/dist/widgets-v2/timeseries.js +96 -85
- package/dist/widgets-v2/timeseries.js.map +1 -1
- package/dist/widgets-v2.js +4 -4
- package/package.json +3 -3
- package/src/legend/components/legend-actions/legend-actions.tsx +2 -2
- package/src/legend/components/legend-group/styles.ts +59 -36
- package/src/legend/components/legend-row/legend-row.tsx +10 -7
- package/src/legend/components/legend-row/styles.ts +41 -10
- package/src/legend/components/legend-sortable/styles.ts +13 -4
- package/src/legend/stores/legend-store-registry.ts +28 -4
- package/src/legend/stores/legend-store.test.ts +23 -0
- package/src/widgets-v2/actions/lock-selection/lock-selection.test.tsx +62 -0
- package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +45 -13
- package/src/widgets-v2/category/category-ui.test.tsx +55 -0
- package/src/widgets-v2/category/category-ui.tsx +65 -6
- package/src/widgets-v2/category/components/category-legend.test.tsx +53 -2
- package/src/widgets-v2/category/components/category-legend.tsx +55 -12
- package/src/widgets-v2/category/components/category-row-stacked.test.tsx +7 -3
- package/src/widgets-v2/category/components/category-row-stacked.tsx +8 -3
- package/src/widgets-v2/category/style.ts +10 -2
- package/src/widgets-v2/echart/echart-ui.test.tsx +25 -0
- package/src/widgets-v2/echart/echart-ui.tsx +20 -0
- package/src/widgets-v2/echart/use-chart-selection.test.tsx +3 -1
- package/src/widgets-v2/echart/use-chart-selection.ts +10 -4
- package/src/widgets-v2/histogram/index.ts +4 -1
- package/src/widgets-v2/histogram/options.test.ts +86 -0
- package/src/widgets-v2/histogram/options.ts +50 -0
- package/src/widgets-v2/histogram/transforms.test.ts +36 -1
- package/src/widgets-v2/histogram/transforms.ts +23 -0
- package/src/widgets-v2/histogram/types.ts +9 -0
- package/src/widgets-v2/pie/options.test.ts +262 -0
- package/src/widgets-v2/pie/options.ts +80 -5
- package/src/widgets-v2/scatterplot/index.ts +4 -1
- package/src/widgets-v2/scatterplot/transforms.test.ts +38 -1
- package/src/widgets-v2/scatterplot/transforms.ts +23 -0
- package/src/widgets-v2/table/index.ts +1 -0
- package/src/widgets-v2/table/transforms.test.ts +40 -0
- package/src/widgets-v2/table/transforms.ts +26 -0
- package/src/widgets-v2/timeseries/index.ts +1 -0
- package/src/widgets-v2/timeseries/transforms.test.ts +49 -0
- package/src/widgets-v2/timeseries/transforms.ts +31 -0
- package/dist/category-CGS_eHr4.js +0 -719
- package/dist/category-CGS_eHr4.js.map +0 -1
- package/dist/change-column-CiVAjOUB.js +0 -1143
- package/dist/change-column-CiVAjOUB.js.map +0 -1
- package/dist/echart-Bdvbfx9s.js +0 -250
- package/dist/echart-Bdvbfx9s.js.map +0 -1
- package/dist/legend-store-registry-Bo8U_qWM.js.map +0 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `LockSelection` filter for Table. Data is a FLAT `TableRow[]` (unlike every
|
|
3
|
+
* other widget's `X[][]` series shape) and row identity comes from
|
|
4
|
+
* `row[keyColumn]` (default `'id'`), not `name` — so `filterByLockedItems`
|
|
5
|
+
* doesn't apply here (its outer `.map` treats each row as a "series", and a
|
|
6
|
+
* plain row object isn't an array, so it would silently pass everything
|
|
7
|
+
* through unfiltered). Falls back to the row's index when the identity
|
|
8
|
+
* column is nullish, mirroring `TableUI`'s own `resolveRowId`.
|
|
9
|
+
*
|
|
10
|
+
* `keyColumn` isn't part of `LockSelection`'s generic `filterFn` signature —
|
|
11
|
+
* close over it: `filterFn={(data, locked) => filterTableByLockedRows(data, locked, keyColumn)}`.
|
|
12
|
+
*/
|
|
13
|
+
export function filterTableByLockedRows(
|
|
14
|
+
input: unknown,
|
|
15
|
+
lockedItems: readonly (string | number)[],
|
|
16
|
+
keyColumn = 'id',
|
|
17
|
+
): unknown {
|
|
18
|
+
if (lockedItems.length === 0) return input
|
|
19
|
+
if (!Array.isArray(input)) return input
|
|
20
|
+
const locked = new Set<string | number>(lockedItems)
|
|
21
|
+
return input.filter((row: unknown, index: number): boolean => {
|
|
22
|
+
if (row == null || typeof row !== 'object') return false
|
|
23
|
+
const id = (row as Record<string, unknown>)[keyColumn] ?? index
|
|
24
|
+
return (typeof id === 'string' || typeof id === 'number') && locked.has(id)
|
|
25
|
+
})
|
|
26
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { timeseriesOptions, createTimeseriesOptionFactory } from './options'
|
|
2
2
|
export { TimeseriesSkeleton } from './skeleton'
|
|
3
3
|
export { createTimeseriesDownloadConfig } from './download'
|
|
4
|
+
export { filterTimeseriesByLockedItems } from './transforms'
|
|
4
5
|
export type {
|
|
5
6
|
TimeseriesDatum,
|
|
6
7
|
TimeseriesWidgetData,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { filterTimeseriesByLockedItems } from './transforms'
|
|
3
|
+
|
|
4
|
+
describe('filterTimeseriesByLockedItems', () => {
|
|
5
|
+
it('returns input unchanged when locked set is empty', () => {
|
|
6
|
+
const data = [[{ name: 1000, value: 10 }]]
|
|
7
|
+
expect(filterTimeseriesByLockedItems(data, [])).toBe(data)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
it('keeps only items whose (numeric) name is in the locked set', () => {
|
|
11
|
+
const out = filterTimeseriesByLockedItems(
|
|
12
|
+
[
|
|
13
|
+
[
|
|
14
|
+
{ name: 1000, value: 10 },
|
|
15
|
+
{ name: 2000, value: 20 },
|
|
16
|
+
],
|
|
17
|
+
],
|
|
18
|
+
[2000],
|
|
19
|
+
)
|
|
20
|
+
expect(out).toEqual([[{ name: 2000, value: 20 }]])
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('normalizes Date names to ms-since-epoch before comparing', () => {
|
|
24
|
+
const d1 = new Date('2024-01-01T00:00:00.000Z')
|
|
25
|
+
const d2 = new Date('2024-01-02T00:00:00.000Z')
|
|
26
|
+
const out = filterTimeseriesByLockedItems(
|
|
27
|
+
[
|
|
28
|
+
[
|
|
29
|
+
{ name: d1, value: 10 },
|
|
30
|
+
{ name: d2, value: 20 },
|
|
31
|
+
],
|
|
32
|
+
],
|
|
33
|
+
[d2.getTime()],
|
|
34
|
+
)
|
|
35
|
+
expect(out).toEqual([[{ name: d2, value: 20 }]])
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('handles string names', () => {
|
|
39
|
+
const out = filterTimeseriesByLockedItems(
|
|
40
|
+
[[{ name: '2024-01-01', value: 10 }]],
|
|
41
|
+
['2024-01-01'],
|
|
42
|
+
)
|
|
43
|
+
expect(out).toEqual([[{ name: '2024-01-01', value: 10 }]])
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('returns input unchanged when input is not array-shaped', () => {
|
|
47
|
+
expect(filterTimeseriesByLockedItems('nope', [1])).toBe('nope')
|
|
48
|
+
})
|
|
49
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `LockSelection` filter for Timeseries. Data is `{name, value}[][]` like
|
|
3
|
+
* Bar/Pie/Category, but `name` may arrive as `Date | number | string` (the
|
|
4
|
+
* time axis stores a `Date`). `lockedItems` is snapshotted from `selection`,
|
|
5
|
+
* whose keys are already normalized to `Date → ms` (see `options.ts`'s
|
|
6
|
+
* `normalizeName`) — so a raw `Date` name must be normalized the same way
|
|
7
|
+
* before the membership check, or every point would compare a `Date` object
|
|
8
|
+
* against a `number` and silently fail to match, filtering everything out.
|
|
9
|
+
*/
|
|
10
|
+
export function filterTimeseriesByLockedItems(
|
|
11
|
+
input: unknown,
|
|
12
|
+
lockedItems: readonly (string | number)[],
|
|
13
|
+
): unknown {
|
|
14
|
+
if (lockedItems.length === 0) return input
|
|
15
|
+
if (!Array.isArray(input)) return input
|
|
16
|
+
const locked = new Set<string | number>(lockedItems)
|
|
17
|
+
return input.map((series: unknown): unknown => {
|
|
18
|
+
if (!Array.isArray(series)) return series
|
|
19
|
+
return series.filter((item: unknown) => {
|
|
20
|
+
if (item == null || typeof item !== 'object' || !('name' in item)) {
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
const raw = (item as { name: unknown }).name
|
|
24
|
+
const name = raw instanceof Date ? raw.getTime() : raw
|
|
25
|
+
return (
|
|
26
|
+
(typeof name === 'string' || typeof name === 'number') &&
|
|
27
|
+
locked.has(name)
|
|
28
|
+
)
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
}
|