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
			| 
											3 years ago
										 | "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; |