You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
4.4 KiB
206 lines
4.4 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
/* eslint class-methods-use-this: 0 object-curly-newline: 0 */
|
|
|
|
/**
|
|
* @name PropertyType
|
|
* @typedef {object} PropertyType
|
|
* @memberof BaseProperty
|
|
* @alias PropertyType
|
|
* @property {string} string default property type
|
|
* @property {string} float type of floating point numbers
|
|
* @property {string} number regular number
|
|
* @property {string} boolean boolean value
|
|
* @property {string} date date
|
|
* @property {string} datetime date with time
|
|
* @property {string} mixed type representing an object
|
|
* @property {string} reference many to one reference
|
|
* @property {string} richtext wysiwig editor
|
|
* @property {string} textarea resizable textarea input
|
|
* @property {string} password password field
|
|
*/
|
|
// Spacer
|
|
const TITLE_COLUMN_NAMES = ['title', 'name', 'subject', 'email'];
|
|
|
|
/**
|
|
* Represents Resource Property
|
|
* @category Base
|
|
*/
|
|
class BaseProperty {
|
|
/**
|
|
* @param {object} options
|
|
* @param {string} options.path property path: usually it its key but when
|
|
* property is for an object the path can be
|
|
* divided to parts by dots: i.e.
|
|
* 'address.street'
|
|
* @param {PropertyType} [options.type='string']
|
|
* @param {boolean} [options.isId=false] true when field should be treated as an ID
|
|
* @param {boolean} [options.isSortable=true] if property should be sortable
|
|
*/
|
|
constructor({
|
|
path,
|
|
type = 'string',
|
|
isId = false,
|
|
isSortable = true,
|
|
position = 1
|
|
}) {
|
|
this._path = path;
|
|
this._type = type;
|
|
this._isId = isId;
|
|
|
|
if (!this._path) {
|
|
throw new Error('you have to give path parameter when creating BaseProperty');
|
|
}
|
|
|
|
this._isSortable = isSortable;
|
|
this._position = position;
|
|
}
|
|
/**
|
|
* Name of the property
|
|
* @return {string} name of the property
|
|
*/
|
|
|
|
|
|
name() {
|
|
return this._path;
|
|
}
|
|
|
|
path() {
|
|
return this.name();
|
|
}
|
|
|
|
position() {
|
|
return this._position === undefined ? 1 : this._position;
|
|
}
|
|
/**
|
|
* Return type of a property
|
|
* @return {PropertyType}
|
|
*/
|
|
|
|
|
|
type() {
|
|
return this._type || 'string';
|
|
}
|
|
/**
|
|
* Return true if given property should be treated as a Record Title.
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
|
|
|
|
isTitle() {
|
|
return TITLE_COLUMN_NAMES.includes(this._path.toLowerCase());
|
|
}
|
|
/**
|
|
* Indicates if given property should be visible
|
|
*
|
|
* @return {Boolean}
|
|
*/
|
|
|
|
|
|
isVisible() {
|
|
return !this._path || !this._path.match('password');
|
|
}
|
|
/**
|
|
* Indicates if value of given property can be updated
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
|
|
|
|
isEditable() {
|
|
return true;
|
|
}
|
|
/**
|
|
* Returns true if given property is a uniq key in a table/collection
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
|
|
|
|
isId() {
|
|
return !!this._isId;
|
|
}
|
|
/**
|
|
* If property is a reference to a record of different resource
|
|
* it should contain {@link BaseResource.id} of this resource.
|
|
*
|
|
* When property is responsible for the field: 'user_id' in SQL database
|
|
* reference should be the name of the Resource which it refers to: `Users`
|
|
*/
|
|
|
|
|
|
reference() {
|
|
return null;
|
|
}
|
|
/**
|
|
* Returns all available values which field can accept. It is used in case of
|
|
* enums
|
|
*
|
|
* @return {Array<String> | null} array of all available values or null when field
|
|
* is not an enum.
|
|
*/
|
|
|
|
|
|
availableValues() {
|
|
return null;
|
|
}
|
|
/**
|
|
* Returns true when given property is an array
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
|
|
|
|
isArray() {
|
|
return false;
|
|
}
|
|
/**
|
|
* Returns true when given property has draggable elements.
|
|
* Only usable for array properties.
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
|
|
|
|
isDraggable() {
|
|
return false;
|
|
}
|
|
/**
|
|
* In case of `mixed` type returns all nested properties.
|
|
*
|
|
* @return {Array<BaseProperty>} sub properties
|
|
*/
|
|
|
|
|
|
subProperties() {
|
|
return [];
|
|
}
|
|
/**
|
|
* Indicates if given property can be sorted
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
|
|
|
|
isSortable() {
|
|
return this._isSortable;
|
|
}
|
|
/**
|
|
* Indicates if given property is required
|
|
*/
|
|
|
|
|
|
isRequired() {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
var _default = BaseProperty;
|
|
exports.default = _default; |