/**
* Collection of grid related classses and interfaces.
*/
-import {TemplateRef, EventEmitter, QueryList, ViewChild} from '@angular/core';
-import {Observable, Subscription, empty} from 'rxjs';
+import {TemplateRef, EventEmitter, QueryList} from '@angular/core';
+import {Observable, Subscription} from 'rxjs';
import {IdlService, IdlObject} from '@eg/core/idl.service';
import {OrgService} from '@eg/core/org.service';
import {ServerStoreService} from '@eg/core/server-store.service';
this.filterIncludeOrgDescendants = false;
}
- loadFilter(f) {
+ loadFilter(f:any) {
this.isFiltered = f.isFiltered;
this.filterValue = f.filterValue;
this.filterOperator = f.filterOperator;
generateWildcardColumns(col: GridColumn) {
const dotpath = col.path.replace(/\.?\*$/, '');
- let classObj, idlField;
+ let classObj:IdlObject, idlField:any;
if (col.idlClass) {
classObj = this.idl.classes[col.idlClass];
if (!classObj) { return; }
const pathParts = dotpath.split(/\./);
- let oldField;
+ //let oldField;
// find the IDL class definition for the last element in the
// path before the .*
// An empty pathParts means expand the root class
pathParts.forEach((part, pathIdx) => {
- oldField = idlField;
+ //oldField = idlField;
idlField = classObj.field_map[part];
// unless we're at the end of the list, this field should
return;
}
- classObj.fields.forEach(field => {
+ classObj.fields.forEach((field:any) => {
// Only show wildcard fields where we have data to show
// Virtual and un-fleshed links will not have any data.
idlInfoFromDotpath(dotpath: string): any {
if (!dotpath || !this.idlClass) { return null; }
- let idlParent;
- let idlField;
- let idlClass;
+ let idlParent:any;
+ let idlField:any;
+ let idlClass:any;
let nextIdlClass = this.idl.classes[this.idlClass];
const pathParts = dotpath.split(/\./);
}
moveColumn(col: GridColumn, diff: number) {
- let srcIdx, targetIdx;
+ let srcIdx:number, targetIdx:number;
this.columns.forEach((c, i) => {
if (c.name === col.name) { srcIdx = i; }
// Load initial settings and data.
initData() {
this.applyGridConfig()
- .then(ok => this.dataSource.requestPage(this.pager))
- .then(ok => this.listenToPager());
+ .then(() => this.dataSource.requestPage(this.pager))
+ .then(() => this.listenToPager());
}
destroy() {
this.ignorePager();
}
- applyGridConfig(): Promise<void> {
- return this.getGridConfig(this.persistKey)
- .then(conf => {
- let columns = [];
- if (conf) {
- columns = conf.columns;
- if (conf.limit && !this.disablePaging) {
- this.pager.limit = conf.limit;
- }
- this.applyToolbarActionVisibility(conf.hideToolbarActions);
- }
+ async applyGridConfig(): Promise<void> {
+ try {
+ const conf = await this.getGridConfig(this.persistKey);
+ let columns = [];
+ if (conf) {
+ columns = conf.columns;
+ if (conf.limit && !this.disablePaging) {
+ this.pager.limit = conf.limit;
+ }
+ this.applyToolbarActionVisibility(conf.hideToolbarActions);
+ }
+
+ // This is called regardless of the presence of saved
+ // settings so defaults can be applied.
+ this.columnSet.applyColumnSettings(columns);
+ } catch (error) {
+ console.error('Error applying grid config:', error);
+ }
+ }
- // This is called regardless of the presence of saved
- // settings so defaults can be applied.
- this.columnSet.applyColumnSettings(columns);
- });
- }
applyToolbarActionVisibility(hidden: string[]) {
if (!hidden || hidden.length === 0) { return; }
listenToPager() {
if (this.pageChanges) { return; }
this.pageChanges = this.pager.onChange$.subscribe(
- val => this.dataSource.requestPage(this.pager));
+ () => this.dataSource.requestPage(this.pager));
}
ignorePager() {
return val;
}
- let interval;
+ let interval:any;
const intField = col.dateOnlyIntervalField;
if (intField) {
const intCol =
nestedItemFieldValue(obj: any, col: GridColumn): string {
- let idlField;
- let idlClassDef;
+ let idlField:any;
+ let idlClassDef:any;
const original = obj;
const steps = col.path.split('.');
if (!this.lastSelectedIndex) { return; }
const pos = this.getRowPosition(this.lastSelectedIndex);
if (pos === this.pager.offset) {
- this.toPrevPage().then(ok => this.selectLastRow(), err => {});
+ this.toPrevPage().then(() => this.selectLastRow(), err => { console.log('grid: in selectPreviousRow',err); });
} else {
this.selectRowByPos(pos - 1);
}
if (!this.lastSelectedIndex) { return; }
const pos = this.getRowPosition(this.lastSelectedIndex);
if (pos === (this.pager.offset + this.pager.limit - 1)) {
- this.toNextPage().then(ok => this.selectFirstRow(), err => {});
+ this.toNextPage().then(() => this.selectFirstRow(), err => { console.log('grid: in selectNextRow',err); });
} else {
this.selectRowByPos(pos + 1);
}
(pos === this.pager.offset) ? this.toPrevPage() : Promise.resolve();
promise.then(
- ok => {
+ () => {
const row = this.dataSource.data[pos - 1];
const newIndex = this.getRowIndex(row);
if (selectedIndexes.filter(i => i === newIndex).length > 0) {
this.selectMultipleRows(selectedIndexes.concat(newIndex));
}
},
- err => {}
+ err => { console.log('grid: inside selectMultiRowsPrevious',err); }
);
}
this.toNextPage() : Promise.resolve();
promise.then(
- ok => {
+ () => {
const row = this.dataSource.data[pos + 1];
const newIndex = this.getRowIndex(row);
if (selectedIndexes.filter(i => i === newIndex).length > 0) {
this.selectMultipleRows(selectedIndexes.concat(newIndex));
}
},
- err => {}
+ err => { console.log('grid: inside selectMultiRowsNext',err); }
);
}
return flatRow;
}
- getAllRowsAsText(): Observable<any> {
- return Observable.create(observer => {
- this.getAllRows().then(ok => {
- this.dataSource.data.forEach(row => {
- observer.next(this.getRowAsFlatText(row));
- });
- observer.complete();
- });
- });
- }
+ getAllRowsAsText(): Observable<any> {
+ return new Observable((observer: any) => {
+ this.getAllRows().then(() => {
+ this.dataSource.data.forEach(row => {
+ observer.next(this.getRowAsFlatText(row));
+ });
+ observer.complete();
+ });
+ });
+ }
removeFilters(): void {
this.dataSource.filters = {};
'controls' : Object.fromEntries(new Map( this.columnSet.columns.map( c => [c.name, c.getFilter()] ) ))
}
this.store.getItem('eg.grid.filters.' + this.persistKey).then( setting => {
- console.log('saveFilters, setting = ', setting);
+ console.log('grid: saveFilters, setting = ', setting);
setting ||= {};
setting[asName] = obj;
- console.log('saving ' + asName, JSON.stringify(obj));
+ console.log('grid: saving ' + asName, JSON.stringify(obj));
this.store.setItem('eg.grid.filters.' + this.persistKey, setting).then( res => {
- console.log('save toast here',res);
+ console.log('grid: save toast here',res);
});
});
}
console.warn('Could not find ' + withName + ' in eg.grid.filters.' + this.persistKey,setting);
}
this.store.setItem('eg.grid.filters.' + this.persistKey, setting).then( res => {
- console.log('delete toast here',res);
+ console.log('grid: delete toast here',res);
});
} else {
console.warn('Could not find setting eg.grid.filters.' + this.persistKey, setting);
});
}
loadFilters(fromName: string): void {
- console.log('fromName',fromName);
+ console.log('grid: fromName',fromName);
this.store.getItem('eg.grid.filters.' + this.persistKey).then( setting => {
if (setting) {
const obj = setting[fromName];
csvStr = csvStr.replace(/,$/, '\n');
return new Promise(resolve => {
- this.getAllRowsAsText().subscribe(
- row => {
+ this.getAllRowsAsText().subscribe({
+ next: row => {
columns.forEach(col => {
csvStr += this.valueToCsv(row[col.name]);
csvStr += ',';
});
csvStr = csvStr.replace(/,$/, '\n');
},
- err => {},
- () => resolve(csvStr)
- );
+ error: err => { console.log('grid: in gridToCsv',err); },
+ complete: () => resolve(csvStr)
+ });
});
}
if (!this.columnSet.idlClass) { return; }
const pkeyField = this.idl.classes[this.columnSet.idlClass].pkey;
- const specifiedColumnOrder = this.autoGeneratedColumnOrder ?
- this.autoGeneratedColumnOrder.split(/,/) : [];
+ //const specifiedColumnOrder = this.autoGeneratedColumnOrder ?
+ // this.autoGeneratedColumnOrder.split(/,/) : [];
// generate columns for all non-virtual fields on the IDL class
const fields = this.idl.classes[this.columnSet.idlClass].fields
- .filter(field => !field.virtual);
+ .filter((field:any) => !field.virtual);
const sortedFields = this.autoGeneratedColumnOrder ?
this.idl.sortIdlFields(fields, this.autoGeneratedColumnOrder.split(/,/)) :
fields;
- sortedFields.forEach(field => {
+ sortedFields.forEach((field:any) => {
if (!this.ignoredFields.filter(ignored => ignored === field.name).length) {
const col = new GridColumn();
col.name = field.name;
return new Promise((resolve, reject) => {
let idx = pager.offset;
- return this.getRows(pager, this.sort).subscribe(
- row => {
+ return this.getRows(pager, this.sort).subscribe({
+ next: row => {
this.data[idx++] = row;
// not updating this.requestingData, as having
// retrieved one row doesn't mean we're done
this.retrievalError = false;
},
- err => {
+ error: err => {
console.error(`grid getRows() error ${err}`);
this.requestingData = false;
this.retrievalError = true;
reject(err);
},
- () => {
+ complete: () => {
this.checkAllRetrieved(pager, idx);
this.requestingData = false;
this.retrievalError = false;
resolve(null);
}
- );
+ });
});
}