@pilotlab/lux-attributes
Version:
A luxurious user experience framework, developed by your friends at Pilot.
69 lines (57 loc) • 2.45 kB
text/typescript
import is from '@pilotlab/lux-is';
import { DataType } from './attributeEnums';
import Attribute from './attribute';
import AttributeTools from './attributeTools';
import IAttributeCreateOptions from './interfaces/iAttributeCreateOptions';
import AttributeFactoryBase from './attributeFactoryBase';
import IAttributesFactory from './interfaces/iAttributesFactory';
import AttributesFactory from './attributesFactory';
import IAttribute from './interfaces/iAttribute';
import IAttributes from './interfaces/iAttributes';
import IAttributeFactory from './interfaces/iAttributeFactory';
export class AttributeFactory extends AttributeFactoryBase<IAttribute, IAttributes> implements IAttributeFactory {
constructor() {
super();
this.p_collection = new AttributesFactory(this);
}
get collection():IAttributesFactory { return this.p_collection; }
protected p_collection:IAttributesFactory;
instance(createOptions:IAttributeCreateOptions, key:string):IAttribute {
function createAttribute():Attribute {
const attribute:Attribute = new Attribute(
key,
createOptions.value,
createOptions.dataType,
createOptions.label
);
attribute.validate = createOptions.validate;
attribute.omit = createOptions.omit;
return attribute;
}
if (is.notEmpty(createOptions)) {
switch (AttributeTools.getBaseDataType(createOptions.dataType)) {
case DataType.ARRAY:
return createAttribute();
case DataType.BOOLEAN:
return createAttribute();
case DataType.COLLECTION:
return createAttribute();
case DataType.DATE_TIME:
return createAttribute();
case DataType.FUNCTION:
return createAttribute();
case DataType.NUMBER:
return createAttribute();
case DataType.STRING:
return createAttribute();
case DataType.UNDEFINED:
case DataType.NULL:
case DataType.ANY:
case DataType.OBJECT:
default:
return createAttribute();
}
} else return new Attribute('');
}
} // End class
export default AttributeFactory;