GridField.fromJson constructor

GridField.fromJson(
  1. Map<String, dynamic> json
)

Creates a GridField from json

Implementation

factory GridField.fromJson(Map<String, dynamic> json) {
  final type = DataType.values
      .firstWhere((type) => type.backendName == json['type']['name']);
  final id = json['id'];
  final name = json['name'];
  final key = json['key'];
  final links = linkMapFromJson(json['_links']);
  final schema = json['schema'];
  if (type == DataType.currency) {
    return CurrencyGridField(
      id: id,
      name: name,
      key: key,
      schema: schema,
      links: links,
      currency: json['type']['currency'],
    );
  }
  if (type == DataType.lookUp) {
    return LookUpGridField(
      id: id,
      name: name,
      key: key,
      schema: schema,
      links: links,
      referenceField: Uri.parse(json['type']['referenceField']),
      lookUpField: Uri.parse(json['type']['lookupField']),
      lookedUpField: GridField.fromJson({
        'id': 'lookedUpId',
        'name': 'lookedUp',
        'schema': {},
        'type': json['type']['lookupType'],
      }),
    );
  }
  if (type == DataType.reducedLookUp) {
    return ReducedLookUpField(
      id: id,
      name: name,
      key: key,
      schema: schema,
      links: links,
      referencesField: Uri.parse(json['type']['referencesField']),
      lookUpField: Uri.parse(json['type']['lookupField']),
      reduceFunction: json['type']['reduceFunction'],
      reducedField: GridField.fromJson({
        'id': 'reducedId',
        'name': 'reduced',
        'schema': {},
        'type': json['type']['reducedType'],
      }),
    );
  }
  if (type == DataType.formula) {
    return FormulaField(
      id: id,
      name: name,
      key: key,
      schema: schema,
      links: links,
      expression: json['type']['expression'],
      valueType: ValueType.fromJson(json['type']['valueType']),
    );
  }
  return GridField(
    id: id,
    name: name,
    key: key,
    schema: schema,
    links: links,
    type: type,
  );
}