@fleetbase/ember-ui
Version:
Fleetbase UI provides all the interface components, helpers, services and utilities for building a Fleetbase extension into the Console.
90 lines (74 loc) • 2.68 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class QueryBuilderColumnSelectComponent extends Component {
selectedColumns = [];
columnAliases = {};
searchQuery = '';
get filteredColumns() {
const columns = this.args.columns ?? [];
const query = (this.searchQuery ?? '').trim().toLowerCase();
if (!query) {
return columns;
}
return columns.filter((col) => {
const name = String(col.name ?? '').toLowerCase();
const label = String(col.label ?? '').toLowerCase();
return name.includes(query) || label.includes(query);
});
}
constructor() {
super(...arguments);
this.selectedColumns = this.args.selectedColumns || [];
this.columnAliases = this.args.columnAliases || {};
}
selectColumn(column) {
const isSelected = this.selectedColumns.includes(column);
if (isSelected) {
// Remove column and its alias
this.selectedColumns = this.selectedColumns.filter((c) => c !== column);
delete this.columnAliases[column.name];
this.columnAliases = { ...this.columnAliases };
} else {
// Add column
this.selectedColumns = [...this.selectedColumns, column];
}
this.notifyChange();
}
updateAlias(columnName, event) {
const aliasValue = event.target.value.trim();
if (aliasValue) {
this.columnAliases = {
...this.columnAliases,
[columnName]: aliasValue,
};
} else {
// Remove alias if empty
const newAliases = { ...this.columnAliases };
delete newAliases[columnName];
this.columnAliases = newAliases;
}
this.notifyChange();
}
selectAllColumns() {
if (this.args.columns) {
this.selectedColumns = [...this.args.columns];
this.notifyChange();
}
}
clearAllColumns() {
this.selectedColumns = [];
this.columnAliases = {};
this.notifyChange();
}
notifyChange() {
if (this.args.onChange) {
// Create columns with alias information
const columnsWithAliases = this.selectedColumns.map((column) => ({
...column,
alias: this.columnAliases[column.name] || null,
}));
this.args.onChange(columnsWithAliases, this.columnAliases);
}
}
}