All files / lib/model/nw/extensions/sap/ui DataField.js

100% Statements 15/15
100% Branches 4/4
100% Functions 5/5
100% Lines 15/15

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      6x 6x 1x         5x 5x 5x       1x                                                                   10x 7x     10x 3x     10x 10x 6x         1x  
"use strict";
 
function valueParser(dataField, entityType) {
  let propertyValue = dataField.record.value.Value;
  if (!propertyValue) {
    throw new Error(
      `${dataField.type} doesn't define 'Value' property in '${entityType.name}' entity type.`
    );
  }
 
  let property = entityType.getProperty(propertyValue.path);
  Object.defineProperty(dataField, "property", {
    get: () => property,
  });
}
 
const propertyParsers = {
  "UI.DataField": valueParser,
  "UI.DataFieldWithAction": valueParser,
  "UI.DataFieldWithIntentBasedNavigation": valueParser,
  "UI.DataFieldWithNavigationPath": valueParser,
  "UI.DataFieldWithUrl": valueParser,
};
 
/**
 * Implements DataField, any variant from the DataFieldAbstract descendants hierarchy:
 *
 * DataFieldAbstract (abstract)
 *  - DataFieldForAnnotation
 *  - DataFieldForActionAbstract (abstract)
 *     - DataFieldForAction
 *     - DataFieldForIntentBasedNavigation
 *  - DataField
 *     - DataFieldWithAction
 *     - DataFieldWithIntentBasedNavigation
 *     - DataFieldWithNavigationPath
 *     - DataFieldWithUrl
 *
 * See https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/UI.md#DataFieldAbstract
 *
 * @class DataField
 */
class DataField {
  /**
   * Creates an instance of DataField.
   * @param {annotations.Record} record datafield definition record
   * @param {EntityType} [entityType] parent entity type
   * @memberof DataField
   */
  constructor(record, entityType) {
    Object.defineProperty(this, "record", {
      get: () => record,
    });
 
    Object.defineProperty(this, "type", {
      get: () => record.type,
    });
 
    let parser = propertyParsers[record.type];
    if (parser) {
      parser(this, entityType);
    }
  }
}
 
module.exports = DataField;