UNPKG

@c8y/apps

Version:

Cumulocity IoT applications

131 lines (117 loc) 4.23 kB
import { Component } from '@angular/core'; import { Column, gettext } from '@c8y/ngx-components'; import { CustomDeviceGridColumn, DeviceGridService } from '@c8y/ngx-components/device-grid'; import { find } from 'lodash-es'; import { AbstractControl } from '@angular/forms'; import { FormlyFieldConfig } from '@ngx-formly/core'; @Component({ selector: 'c8y-device-grid-example', templateUrl: './device-grid-example.component.html' }) export class DeviceGridExampleComponent { examples: Array<{ label: string; columns: Column[] }>; selectedExample; columnsInput: Column[]; constructor(protected deviceGridService: DeviceGridService) { this.examples = [ this.getExampleWithStandardColumns(), this.getExampleWithStandardColumnsAndSavedFilteringSorting(), this.getExampleWithCustomColumnAndPredefinedFiltering(), this.getExampleWithCustomColumnAndCustomValidator() ]; this.selectExample(this.examples[0]); } getExampleWithStandardColumns() { const columns = this.deviceGridService.getDefaultColumns(); return { label: 'Standard columns', columns }; } getExampleWithStandardColumnsAndSavedFilteringSorting() { const columns = this.deviceGridService.getDefaultColumns(); const nameColumn = find(columns, { name: 'name' }); nameColumn.externalFilterQuery = { names: ['*Temp*'] }; nameColumn.sortOrder = 'desc'; return { label: 'Standard columns with saved filtering/sorting', columns }; } getExampleWithCustomColumnAndPredefinedFiltering() { const columns = this.deviceGridService.getDefaultColumns(); const typeColumn = new CustomDeviceGridColumn(); typeColumn.name = 'type'; typeColumn.path = 'type'; typeColumn.header = gettext('Type'); typeColumn.externalFilterQuery = { equals: ['c8y_MQTTDevice'] }; columns.splice(2, 0, typeColumn); return { label: 'Standard columns with custom one with predefined filtering', columns }; } getExampleWithCustomColumnAndCustomValidator() { const columns = this.deviceGridService.getDefaultColumns(); const nameColumn = columns.find(column => column.name === 'name'); nameColumn.filteringConfig.fields = [ { key: 'name', type: 'array', defaultValue: [''], templateOptions: { required: true, addText: 'Add next`name`' }, fieldArray: { type: 'string', templateOptions: { required: true, label: 'Show items with name', tooltip: 'Use * as a wildcard character', placeholder: 'My device`DEVICE_NAME`' }, validators: { minLength: { expression: (c: AbstractControl) => c.value.length >= 3, message: (error: any, field: FormlyFieldConfig) => `value "${field.formControl.value}" is too short. min length is 3 characters` }, maxLength: { expression: (c: AbstractControl) => c.value.length <= 6, message: (error: any, field: FormlyFieldConfig) => `value "${field.formControl.value}" is too long. max length is 6 characters ` }, regexExampleValidator: { expression: (c: AbstractControl) => /foo/.test(c.value), message: (error: any, field: FormlyFieldConfig) => `value "${field.formControl.value}" must contain "foo"` } } } } ]; return { label: 'Standard columns with custom validators for "Name" column\'s filter', columns }; } selectExample(example) { this.selectedExample = example; this.columnsInput = example.columns; } onColumnsChange(columns: Column[]): void { // the columns list contains the current setup of the columns in the grid: // eslint-disable-next-line no-console console.log({ columns }); } onDeviceQueryStringChange(deviceQueryString: string): void { // the query string is based on currently selected filters and sorting in columns: // eslint-disable-next-line no-console console.log({ deviceQueryString }); } }