Files
mixtape/zero.Backoffice.UI/app/services/datalist.ts
T
2021-12-10 14:23:14 +01:00

66 lines
1.5 KiB
TypeScript

import ListSchema from '../schemas/list/list';
import ListColumn from '../schemas/list/list-column';
export class Datalist
{
config: ListSchema;
columns: ListColumn[] = [];
query: any = {};
filter: any = {};
selection: string[] = [];
loading: boolean = false;
totalPages: number = 1;
totalItems: number = 0;
items: any[] = [];
constructor(config: string | ListSchema)
{
this.config = typeof config === 'string' ? new ListSchema(config) /*// TODO import ListSchema*/ : config;
}
/**
* Get contain per item depending on linkable properties
**/
getItemContainer()
{
return !!this.config.link ? 'router-link' : (!!this.config.onClick ? 'button' : 'div');
}
async load()
{
this.loading = true;
const result = await this.config.fetch(this.query);
//this.$emit('loaded', result);
this.totalPages = result.totalPages;
this.totalItems = result.totalItems;
//this.$emit('count', this.count);
this.loading = false;
this.items = result.items;
this.selection = [];
}
_setup(routeQuery: any)
{
this.columns = this.config.columns.map(column =>
{
return {
...column,
column: column,
label: column.options.hideLabel ? null : (column.options.label || this.config.templateLabel(column.path)),
flex: column.options.width ? { 'flex': '0 1 ' + column.options.width + 'px' } : {}
};
});
this.query = { ...this.config.query, ...this.config.queryToParams(routeQuery) };
this.filter = { ...this.config.filterOptions };
}
};