UNPKG

4.01 kBJavaScriptView Raw
1import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';
2import {
3 Categorical,
4 Temporal,
5 Binned,
6 Continuous,
7 CategoricalParser,
8 TemporalParser,
9 BinnedParser,
10 ContinuousParser,
11 PartialField
12} from './fields';
13
14/**
15 * Creates a field instance according to the provided data and schema.
16 *
17 * @param {Array} data - The field data array.
18 * @param {Object} schema - The field schema object.
19 * @return {Field} Returns the newly created field instance.
20 */
21function 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 * Creates a field instance from partialField and rowDiffset.
59 *
60 * @param {PartialField} partialField - The corresponding partial field.
61 * @param {string} rowDiffset - The data subset config.
62 * @return {Field} Returns the newly created field instance.
63 */
64export 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 * Creates the field instances with input data and schema.
93 *
94 * @param {Array} dataColumn - The data array for fields.
95 * @param {Array} schema - The schema array for fields.
96 * @param {Array} headers - The array of header names.
97 * @return {Array.<Field>} Returns an array of newly created field instances.
98 */
99export 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}