Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 9x 629x 629x 629x 9x 530x 530x 99x 14x 64x 26x 26x 327x 9x 37x 52x 9x 9x 99x 99x | // @flow
import mapValues from 'lodash/mapValues';
import {types} from './types';
import ScalarField from './scalarField';
import ArrayField from './arrayField';
import ObjectField from './objectField';
import RelationField from './relationField';
import CompositeField from './compositeField';
import type {Types, Field} from './types';
export const getType = (type: string): Types | null => {
const upperType = type.toUpperCase();
const enumType: Types = types[upperType];
return enumType || null;
};
export const createField = (key: string, rootSchema: any, schema: any, isEntity?: boolean): Field => {
const type = getType(schema.type);
switch (type) {
case types.ARRAY:
return new ArrayField({key, rootSchema, schema, isEntity});
case types.OBJECT:
return new ObjectField({key, rootSchema, schema, isEntity});
case types.RELATION:
return new RelationField({key, rootSchema, schema});
/**
* File {contentType: string, name: string, size: string, url: string}
* Image {contentType: string, name: string, size: string, url: string}
*/
case types.FILE:
case types.IMAGE: {
const childFields = {
contentType: {type: 'string'},
name: {type: 'string'},
size: {type: 'string'},
url: {type: 'string'}
};
return new CompositeField({key, type, rootSchema, childFields});
}
/**
* GeoPoint {lat: , lng: string, placeId: string, address: string}
*/
case types.GEOPOINT: {
const childFields = {
lat: {type: 'string'},
lng: {type: 'string'},
placeId: {type: 'string'},
address: {type: 'string'}
};
return new CompositeField({key, type, rootSchema, childFields});
}
default:
return new ScalarField({key, schema, type});
}
};
export const createSchema = (rootSchema: any) => {
return mapValues(rootSchema, (fieldSchema, key) => {
return createField(key, rootSchema, rootSchema[key], true);
});
};
export const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);
export const isCompositeType = (type: string) => {
const enumType = getType(type);
return [types.FILE, types.GEOPOINT, types.IMAGE].indexOf(enumType) >= 0;
};
|