datocms-client
Version:
For new DatoCMS users, we recommend @datocms/cma-client-node
237 lines (195 loc) • 6.92 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _humps = require("humps");
var _build = _interopRequireDefault(require("./fields/build"));
var _DateTime = _interopRequireDefault(require("./fields/DateTime"));
var _slugify = _interopRequireDefault(require("../utils/slugify"));
var _i18n = _interopRequireDefault(require("../utils/i18n"));
var _seoTagsBuilder = _interopRequireDefault(require("../utils/seoTagsBuilder"));
var _localizedRead = _interopRequireDefault(require("../utils/localizedRead"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var Item = /*#__PURE__*/function () {
function Item(entity, itemsRepo) {
var _this = this;
_classCallCheck(this, Item);
this.entity = entity;
this.itemsRepo = itemsRepo;
this.fields.forEach(function (field) {
Object.defineProperty(_this, (0, _humps.camelize)(field.apiKey), {
enumerable: true,
get: function get() {
return this.readAttribute(field);
}
});
});
}
_createClass(Item, [{
key: "autogeneratedSlug",
value: function autogeneratedSlug() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$prefixWithId = _ref.prefixWithId,
prefixWithId = _ref$prefixWithId === void 0 ? true : _ref$prefixWithId;
process.stdout.write('Warning: the Item#autogeneratedSlug is deprecated. Please add an explicit field of type `slug`.\n');
var slugField = this.fields.find(function (f) {
return f.apiKey === 'slug';
});
if (slugField) {
return this.readAttribute(slugField);
}
if (this.isSingleton) {
return (0, _slugify["default"])(this.itemType.apiKey);
}
if (!this.titleField) {
return this.id;
}
var title = this.readAttribute(this.titleField);
if (title && prefixWithId) {
return "".concat(this.id, "-").concat((0, _slugify["default"])(title));
}
if (title) {
return (0, _slugify["default"])(title);
}
return this.id;
}
}, {
key: "toMap",
value: function toMap() {
var _this2 = this;
var maxDepth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3;
var currentDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
if (maxDepth === currentDepth) {
return this.id;
}
var result = {
id: this.id,
itemType: this.itemType.apiKey,
updatedAt: this.updatedAt.toMap(),
createdAt: this.createdAt.toMap()
};
if (this.seoMetaTags) {
result.seoMetaTags = this.seoMetaTags;
}
if (this.itemType.tree) {
result.position = this.position;
result.children = this.children.map(function (i) {
return i.toMap(maxDepth, currentDepth + 1);
});
}
if (this.itemType.sortable) {
result.position = this.position;
}
return this.fields.reduce(function (acc, field) {
var value = _this2.readAttribute(field);
var serializedValue;
if (value && value.toMap) {
serializedValue = value.toMap(maxDepth, currentDepth + 1);
} else {
serializedValue = value;
}
return Object.assign(acc, _defineProperty({}, (0, _humps.camelize)(field.apiKey), serializedValue));
}, result);
}
}, {
key: "readAttribute",
value: function readAttribute(field) {
var value = (0, _localizedRead["default"])(this.entity, (0, _humps.camelize)(field.apiKey), field.localized, _i18n["default"]);
return (0, _build["default"])(field.fieldType, value, this.itemsRepo);
}
}, {
key: "id",
get: function get() {
return this.entity.id;
}
}, {
key: "itemType",
get: function get() {
return this.entity.itemType;
}
}, {
key: "fields",
get: function get() {
return this.itemType.fields.sort(function (a, b) {
return b.position - a.position;
});
}
}, {
key: "isSingleton",
get: function get() {
return this.itemType.singleton;
}
}, {
key: "position",
get: function get() {
return this.entity.position;
}
}, {
key: "updatedAt",
get: function get() {
return new _DateTime["default"](Date.parse(this.meta.updatedAt));
}
}, {
key: "createdAt",
get: function get() {
return new _DateTime["default"](Date.parse(this.meta.createdAt));
}
}, {
key: "meta",
get: function get() {
return this.entity.meta;
}
}, {
key: "parent",
get: function get() {
if (this.entity.parentId) {
return this.itemsRepo.find(this.entity.parentId);
}
return null;
}
}, {
key: "children",
get: function get() {
if (this.itemType.tree) {
return this.itemsRepo.childrenOf(this.id).sort(function (a, b) {
return b.position - a.position;
});
}
return [];
}
}, {
key: "titleField",
get: function get() {
var titleFieldId = this.itemType.titleField && this.itemType.titleField.id;
return this.fields.find(function (field) {
return field.id === titleFieldId;
});
}
}, {
key: "attributes",
get: function get() {
var _this3 = this;
return this.fields.reduce(function (acc, field) {
return Object.assign(acc, _defineProperty({}, (0, _humps.camelize)(field.apiKey), _this3.readAttribute(field)));
}, {});
}
}, {
key: "seoMetaTags",
get: function get() {
var seoField = this.fields.find(function (f) {
return f.fieldType === 'seo';
});
if (seoField) {
return (0, _seoTagsBuilder["default"])(this.entity, this.entity.repo, _i18n["default"]);
}
return null;
}
}]);
return Item;
}();
exports["default"] = Item;