canner
Version:
Build CMS in few lines of code for different data sources
116 lines (99 loc) • 3.42 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _forEach2 = _interopRequireDefault(require("lodash/forEach"));
var _types = require("./types");
var _utils = require("./utils");
var _nullField = _interopRequireDefault(require("./nullField"));
var pluralize = _interopRequireWildcard(require("pluralize"));
var RelationField =
/*#__PURE__*/
function () {
function RelationField(_ref) {
var rootSchema = _ref.rootSchema,
schema = _ref.schema,
key = _ref.key;
(0, _classCallCheck2.default)(this, RelationField);
(0, _defineProperty2.default)(this, "schema", void 0);
(0, _defineProperty2.default)(this, "key", void 0);
(0, _defineProperty2.default)(this, "relationSchema", void 0);
(0, _defineProperty2.default)(this, "rootSchema", void 0);
this.key = key;
this.schema = schema;
this.rootSchema = rootSchema;
this.relationSchema = rootSchema[this.schema.relation.to];
}
(0, _createClass2.default)(RelationField, [{
key: "exists",
value: function exists() {
return true;
}
}, {
key: "getKey",
value: function getKey() {
return this.key;
}
}, {
key: "getType",
value: function getType() {
return _types.types.RELATION;
}
}, {
key: "isToOne",
value: function isToOne() {
return this.schema.relation && this.schema.relation.type === 'toOne';
}
}, {
key: "isToMany",
value: function isToMany() {
return this.schema.relation && this.schema.relation.type === 'toMany';
}
}, {
key: "relationTo",
value: function relationTo() {
return this.schema.relation.to;
}
}, {
key: "getRelationFields",
value: function getRelationFields() {
return this.schema.relation.fields || [];
}
}, {
key: "getTypename",
value: function getTypename() {
return (0, _utils.capitalizeFirstLetter)(pluralize.singular(this.relationTo()));
}
}, {
key: "getChild",
value: function getChild(fieldName) {
if (!this.relationSchema || !this.relationSchema.items || !this.relationSchema.items.items || !this.relationSchema.items.items[fieldName]) {
return new _nullField.default({
key: fieldName
});
}
var field = (0, _utils.createField)(fieldName, this.rootSchema, this.relationSchema.items.items[fieldName]);
return field;
}
}, {
key: "forEach",
value: function forEach(visitor) {
var _this = this;
if (!this.relationSchema || !this.relationSchema.items || !this.relationSchema.items.items) {
return;
}
(0, _forEach2.default)(this.relationSchema.items.items, function (item, key) {
var field = (0, _utils.createField)(key, _this.rootSchema, _this.relationSchema.items.items[key]);
visitor(field);
});
}
}]);
return RelationField;
}();
exports.default = RelationField;