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; |