1 | import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';
|
2 | import {
|
3 | Categorical,
|
4 | Temporal,
|
5 | Binned,
|
6 | Continuous,
|
7 | CategoricalParser,
|
8 | TemporalParser,
|
9 | BinnedParser,
|
10 | ContinuousParser,
|
11 | PartialField
|
12 | } from './fields';
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | function createUnitField(data, schema) {
|
22 | data = data || [];
|
23 | let partialField;
|
24 |
|
25 | switch (schema.type) {
|
26 | case FieldType.MEASURE:
|
27 | switch (schema.subtype) {
|
28 | case MeasureSubtype.CONTINUOUS:
|
29 | partialField = new PartialField(schema.name, data, schema, new ContinuousParser());
|
30 | return new Continuous(partialField, `0-${data.length - 1}`);
|
31 | default:
|
32 | partialField = new PartialField(schema.name, data, schema, new ContinuousParser());
|
33 | return new Continuous(partialField, `0-${data.length - 1}`);
|
34 | }
|
35 | case FieldType.DIMENSION:
|
36 | switch (schema.subtype) {
|
37 | case DimensionSubtype.CATEGORICAL:
|
38 | partialField = new PartialField(schema.name, data, schema, new CategoricalParser());
|
39 | return new Categorical(partialField, `0-${data.length - 1}`);
|
40 | case DimensionSubtype.TEMPORAL:
|
41 | partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));
|
42 | return new Temporal(partialField, `0-${data.length - 1}`);
|
43 | case DimensionSubtype.BINNED:
|
44 | partialField = new PartialField(schema.name, data, schema, new BinnedParser());
|
45 | return new Binned(partialField, `0-${data.length - 1}`);
|
46 | default:
|
47 | partialField = new PartialField(schema.name, data, schema, new CategoricalParser());
|
48 | return new Categorical(partialField, `0-${data.length - 1}`);
|
49 | }
|
50 | default:
|
51 | partialField = new PartialField(schema.name, data, schema, new CategoricalParser());
|
52 | return new Categorical(partialField, `0-${data.length - 1}`);
|
53 | }
|
54 | }
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 | export function createUnitFieldFromPartial(partialField, rowDiffset) {
|
65 | const { schema } = partialField;
|
66 |
|
67 | switch (schema.type) {
|
68 | case FieldType.MEASURE:
|
69 | switch (schema.subtype) {
|
70 | case MeasureSubtype.CONTINUOUS:
|
71 | return new Continuous(partialField, rowDiffset);
|
72 | default:
|
73 | return new Continuous(partialField, rowDiffset);
|
74 | }
|
75 | case FieldType.DIMENSION:
|
76 | switch (schema.subtype) {
|
77 | case DimensionSubtype.CATEGORICAL:
|
78 | return new Categorical(partialField, rowDiffset);
|
79 | case DimensionSubtype.TEMPORAL:
|
80 | return new Temporal(partialField, rowDiffset);
|
81 | case DimensionSubtype.BINNED:
|
82 | return new Binned(partialField, rowDiffset);
|
83 | default:
|
84 | return new Categorical(partialField, rowDiffset);
|
85 | }
|
86 | default:
|
87 | return new Categorical(partialField, rowDiffset);
|
88 | }
|
89 | }
|
90 |
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 | export function createFields(dataColumn, schema, headers) {
|
100 | const headersObj = {};
|
101 |
|
102 | if (!(headers && headers.length)) {
|
103 | headers = schema.map(item => item.name);
|
104 | }
|
105 |
|
106 | headers.forEach((header, i) => {
|
107 | headersObj[header] = i;
|
108 | });
|
109 |
|
110 | return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));
|
111 | }
|