mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-12 10:50:31 +00:00
78 lines
1.7 KiB
TypeScript
78 lines
1.7 KiB
TypeScript
import { get } from 'lodash';
|
|
import {
|
|
IModelMeta,
|
|
IModelMetaField,
|
|
IModelMetaDefaultSort,
|
|
} from '@/interfaces';
|
|
|
|
const defaultModelMeta = {
|
|
fields: {},
|
|
fields2: {},
|
|
};
|
|
|
|
export default (Model) =>
|
|
class ModelSettings extends Model {
|
|
/**
|
|
*
|
|
* @returns {IModelMeta}
|
|
*/
|
|
static get meta(): IModelMeta {
|
|
throw new Error('');
|
|
}
|
|
|
|
/**
|
|
* Parsed meta merged with default emta.
|
|
* @returns {IModelMeta}
|
|
*/
|
|
static get parsedMeta(): IModelMeta {
|
|
return {
|
|
...defaultModelMeta,
|
|
...this.meta,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Retrieve specific model field meta of the given field key.
|
|
* @param {string} key
|
|
* @returns {IModelMetaField}
|
|
*/
|
|
public static getField(key: string, attribute?: string): IModelMetaField {
|
|
const field = get(this.meta.fields, key);
|
|
|
|
return attribute ? get(field, attribute) : field;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the specific model meta.
|
|
* @param {string} key
|
|
* @returns
|
|
*/
|
|
public static getMeta(key?: string) {
|
|
return key ? get(this.parsedMeta, key) : this.parsedMeta;
|
|
}
|
|
|
|
/**
|
|
* Retrieve the model meta fields.
|
|
* @return {{ [key: string]: IModelMetaField }}
|
|
*/
|
|
public static get fields(): { [key: string]: IModelMetaField } {
|
|
return this.getMeta('fields');
|
|
}
|
|
|
|
/**
|
|
* Retrieve the model default sort settings.
|
|
* @return {IModelMetaDefaultSort}
|
|
*/
|
|
public static get defaultSort(): IModelMetaDefaultSort {
|
|
return this.getMeta('defaultSort');
|
|
}
|
|
|
|
/**
|
|
* Retrieve the default filter field key.
|
|
* @return {string}
|
|
*/
|
|
public static get defaultFilterField(): string {
|
|
return this.getMeta('defaultFilterField');
|
|
}
|
|
};
|