@dra2020/dra-types 1.8.109 → 1.8.111

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/lib/colormgr.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  // App libraries
2
2
  import * as PF from "./packedfields";
3
- import {isColorBy, parseColorBy} from './datasets';
4
- import {Util, Colors} from '@dra2020/baseclient'
3
+ import {isColorBy, parseColorBy, DatasetColor, DatasetFormat} from './datasets';
4
+ import {Util, Colors, Detail} from '@dra2020/baseclient'
5
5
 
6
6
  // All Groups Mosaic has 16 colors
7
7
  // Index values into the 16 colors
@@ -531,39 +531,63 @@ export interface DistrictColorParams
531
531
  colorDistrictsBy: string,
532
532
  }
533
533
 
534
+ function safeNumber(n: any): number { n = Number(n); return typeof n !== 'number' || isNaN(n) ? 0 : n }
535
+ function safeStops(s: string): number[]
536
+ {
537
+ if (!s) return EthnicFewStops;
538
+ return s.split(',').map(safeNumber);
539
+ }
540
+ function safeColors(s: string): string[]
541
+ {
542
+ if (!s) return ['#fafafa', '#aaaaaa', '#666666', '#111111'];
543
+ return s.split(',').map(s => s.trim());
544
+ }
545
+
534
546
  export function ToExtendedColor(agg: PF.PackedFields, dc: PF.DatasetContext, colorBy: string): string
535
547
  {
536
548
  // compute pct
537
549
  const {datasetid, field} = parseColorBy(colorBy);
538
- if (!datasetid || !field || !dc.dsMeta || !dc.dsMeta[datasetid] || !dc.dsMeta[datasetid]?.fields[field]) return '#ffffff';
550
+ if (!datasetid || !field || !dc.dsMeta || !dc.dsMeta[datasetid])
551
+ return '#ffffff';
539
552
  const meta = dc.dsMeta[datasetid];
540
- let getter = PF.ToGetter(agg, dc, datasetid, datasetid);
541
- let fields = PF.sortedFieldList(meta);
542
- let den = 0;
543
- if (meta.fields['Tot'])
544
- den = getter('Tot');
545
- else
546
- fields.forEach(f => { den += getter(f) });
547
- let num = 0;
548
- let dfield = meta.fields[field];
549
- if (dfield.colorBySum)
550
- for (let i = 0; i < fields.length; i++)
553
+ const dsfield = meta.fields ? meta.fields[field] : null;
554
+ const dscolor = meta.colors ? meta.colors.find((c: DatasetColor) => c.shortCaption === field) : null;
555
+ if (!dsfield && !dscolor)
556
+ return '#ffffff';
557
+ if (dscolor)
558
+ {
559
+ let stops = safeStops(dscolor.stops);
560
+ let colors = safeColors(dscolor.colors);
561
+ if (stops.length != colors.length)
551
562
  {
552
- num += getter(fields[i]);
553
- if (fields[i] === field)
554
- break;
563
+ stops = EthnicFewStops;
564
+ colors = safeColors('');
555
565
  }
566
+ let o: any = {};
567
+ let getter = PF.ToGetter(agg, dc, datasetid, datasetid);
568
+ Object.keys(meta.fields).forEach(f => o[f] = getter(f));
569
+ let formatter = new Detail.FormatDetail(dscolor.expr);
570
+ let result = formatter.format(Detail.FormatDetail.prepare(o));
571
+ let intensity = Math.min(Math.max(result.n || 0, 0), 1);
572
+ return Util.execGradient(makeStops(stops, colors), intensity);
573
+ }
556
574
  else
557
- num = getter(field);
558
-
559
- // Careful...
560
- if (den == 0 || den === undefined || isNaN(den) || num === undefined || isNaN(num))
561
- return '#ffffff';
562
-
563
- const pct = dfield.invert ? 1 - (num / den) : num / den;
564
- const color = Util.execGradient(makeStops(EthnicFewStops, Colors.EthnicFewClassicColors), pct);
565
-
566
- return color;
575
+ {
576
+ let getter = PF.ToGetter(agg, dc, datasetid, datasetid);
577
+ let fields = PF.sortedFieldList(meta);
578
+ let den = 0;
579
+ if (meta.fields['Tot'])
580
+ den = getter('Tot');
581
+ else
582
+ fields.forEach(f => { den += getter(f) });
583
+ let num = getter(field);
584
+
585
+ // Careful...
586
+ if (den == 0 || den === undefined || isNaN(den) || num === undefined || isNaN(num))
587
+ return '#ffffff';
588
+
589
+ return Util.execGradient(makeStops(EthnicFewStops, Colors.EthnicFewClassicColors), num / den);
590
+ }
567
591
  }
568
592
 
569
593
  export function computeDistrictColors(params: DistrictColorParams): DistrictCache[]
package/lib/datasets.ts CHANGED
@@ -8,9 +8,6 @@ export interface DatasetField
8
8
  order?: number, // For ordering fields in UI
9
9
  isCombo?: boolean, // Built-in, for census combos
10
10
  colorBy?: boolean, // For extended datasets, display in UI
11
- invert?: boolean, // For extended datasets, colorby intensity inverted
12
- colorBySum?: boolean, // For extended datasets, colorby sums up all fields up to this one (e.g. to show "Poverty Level")
13
- colorLabel?: string, // For extended datasets, provides label for coloring dropdown
14
11
  sumOf?: string[], // Only for import processing
15
12
  }
16
13
  export function sortFields(f1: DatasetField, f2: DatasetField): number
@@ -45,8 +42,21 @@ export function isColorBy(colorby: string): boolean
45
42
  // 'Asn', 'Pac', 'OthAl', 'Mix', 'BlC', 'NatC', 'AsnC', 'PacC',
46
43
  export type DatasetFields = { [key: string]: DatasetField };
47
44
 
48
- export type DatasetColor = { intensity: string, colors: string, stops: string };
49
- export type DatasetColors = { [key: string]: DatasetColor };
45
+ export interface DatasetColor {
46
+ shortCaption: string,
47
+ longCaption: string,
48
+ expr: string,
49
+ colors: string,
50
+ stops: string,
51
+ };
52
+ export type DatasetColors = DatasetColor[];
53
+
54
+ export interface DatasetFormat {
55
+ shortCaption: string,
56
+ longCaption: string,
57
+ expr: string,
58
+ };
59
+ export type DatasetFormats = DatasetFormat[];
50
60
 
51
61
  export interface DatasetMeta
52
62
  {
@@ -61,9 +71,8 @@ export interface DatasetMeta
61
71
  privateKey?: string, // Old-style semi-private datasets
62
72
  members?: { [key: number]: string }, // For composites, specifies
63
73
  fields?: DatasetFields,
64
- detailFormat?: string, // Optional formatting string for detail results
65
- detailTooltip?: string, // Optional tooltips for detailFormat results, separated by newline or ';'
66
74
  colors?: DatasetColors, // Optional colorby expressions
75
+ formats?: DatasetFormats, // Optional format expressions
67
76
  }
68
77
 
69
78
  export type DatasetsMeta = { [dataset: string]: DatasetMeta };
@@ -84,6 +93,7 @@ export interface Dataset
84
93
  datasource?: string,
85
94
  dotmap?: boolean,
86
95
  blobid?: string,
96
+ dataid?: string,
87
97
  meta?: DatasetsMeta,
88
98
  groups?: G.GroupMapIndex,
89
99
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dra2020/dra-types",
3
- "version": "1.8.109",
3
+ "version": "1.8.111",
4
4
  "description": "Shared types used between client, server and tools.",
5
5
  "main": "dist/dra-types.js",
6
6
  "types": "./dist/all.d.ts",
@@ -34,7 +34,7 @@
34
34
  "webpack-cli": "^5.1.4"
35
35
  },
36
36
  "dependencies": {
37
- "@dra2020/baseclient": "^1.0.127",
37
+ "@dra2020/baseclient": "^1.0.132",
38
38
  "geojson": "^0.5.0",
39
39
  "object-hash": "^3.0.0"
40
40
  }