Remove unused blade settings pages not linked from UI Convert remaining frontend pages to SPA actions Convert settings user_settings and general to SPA actions Convert settings profile pages to SPA actions Convert contacts and projects add/edit pages to SPA actions Convert clients add/edit page to SPA action with loading pattern Refactor component scoped IDs from $id to $sid Fix jqhtml comment syntax and implement universal error component system Update all application code to use new unified error system Remove all backwards compatibility - unified error system complete Phase 5: Remove old response classes Phase 3-4: Ajax response handler sends new format, old helpers deprecated Phase 2: Add client-side unified error foundation Phase 1: Add server-side unified error foundation Add unified Ajax error response system with constants 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
37 lines
4.2 KiB
JavaScript
Executable File
37 lines
4.2 KiB
JavaScript
Executable File
"use strict";
|
|
|
|
class Sortable_Column_Header extends Component {
|
|
on_ready() {
|
|
// Click to toggle sort
|
|
this.$.on('click', () => {
|
|
this.toggle_sort();
|
|
});
|
|
|
|
// Set initial sort state
|
|
if (this.args.sort) {
|
|
this.set_sort(this.args.sort); // 'asc' or 'desc'
|
|
}
|
|
}
|
|
toggle_sort() {
|
|
const current = this.$.attr('data-sort') || 'none';
|
|
const next = current === 'none' ? 'asc' : current === 'asc' ? 'desc' : 'asc';
|
|
this.set_sort(next);
|
|
|
|
// Call callback if provided
|
|
if (this.args.on_sort) {
|
|
this.args.on_sort(this.args.column, next);
|
|
}
|
|
}
|
|
set_sort(direction) {
|
|
this.$.attr('data-sort', direction);
|
|
const $icon = this.$sid('sort_icon');
|
|
if (direction === 'asc') {
|
|
$icon.html('<i class="text-primary">↑</i>');
|
|
} else if (direction === 'desc') {
|
|
$icon.html('<i class="text-primary">↓</i>');
|
|
} else {
|
|
$icon.html('<i class="text-muted">⇅</i>');
|
|
}
|
|
}
|
|
}
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTb3J0YWJsZV9Db2x1bW5fSGVhZGVyIiwiSnFodG1sX0NvbXBvbmVudCIsIm9uX3JlYWR5IiwiJCIsIm9uIiwidG9nZ2xlX3NvcnQiLCJhcmdzIiwic29ydCIsInNldF9zb3J0IiwiY3VycmVudCIsImF0dHIiLCJuZXh0Iiwib25fc29ydCIsImNvbHVtbiIsImRpcmVjdGlvbiIsIiRpY29uIiwiJGlkIiwiaHRtbCJdLCJzb3VyY2VzIjpbInJzeC90aGVtZS9jb21wb25lbnRzL19hcmNoaXZlZC91bmZpbmlzaGVkL1NvcnRhYmxlX0NvbHVtbl9IZWFkZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgU29ydGFibGVfQ29sdW1uX0hlYWRlciBleHRlbmRzIEpxaHRtbF9Db21wb25lbnQge1xuICAgIG9uX3JlYWR5KCkge1xuICAgICAgICAvLyBDbGljayB0byB0b2dnbGUgc29ydFxuICAgICAgICB0aGlzLiQub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVfc29ydCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZXQgaW5pdGlhbCBzb3J0IHN0YXRlXG4gICAgICAgIGlmICh0aGlzLmFyZ3Muc29ydCkge1xuICAgICAgICAgICAgdGhpcy5zZXRfc29ydCh0aGlzLmFyZ3Muc29ydCk7IC8vICdhc2MnIG9yICdkZXNjJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlX3NvcnQoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLiQuYXR0cignZGF0YS1zb3J0JykgfHwgJ25vbmUnO1xuICAgICAgICBjb25zdCBuZXh0ID0gY3VycmVudCA9PT0gJ25vbmUnID8gJ2FzYycgOiBjdXJyZW50ID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICB0aGlzLnNldF9zb3J0KG5leHQpO1xuXG4gICAgICAgIC8vIENhbGwgY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKHRoaXMuYXJncy5vbl9zb3J0KSB7XG4gICAgICAgICAgICB0aGlzLmFyZ3Mub25fc29ydCh0aGlzLmFyZ3MuY29sdW1uLCBuZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldF9zb3J0KGRpcmVjdGlvbikge1xuICAgICAgICB0aGlzLiQuYXR0cignZGF0YS1zb3J0JywgZGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3QgJGljb24gPSB0aGlzLiRpZCgnc29ydF9pY29uJyk7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICRpY29uLmh0bWwoJzxpIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+4oaRPC9pPicpO1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgICAgICAkaWNvbi5odG1sKCc8aSBjbGFzcz1cInRleHQtcHJpbWFyeVwiPuKGkzwvaT4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRpY29uLmh0bWwoJzxpIGNsYXNzPVwidGV4dC1tdXRlZFwiPuKHhTwvaT4nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxzQkFBc0IsU0FBU0MsZ0JBQWdCLENBQUM7RUFDbERDLFFBQVFBLENBQUEsRUFBRztJQUNQO0lBQ0EsSUFBSSxDQUFDQyxDQUFDLENBQUNDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTTtNQUNyQixJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQzs7SUFFRjtJQUNBLElBQUksSUFBSSxDQUFDQyxJQUFJLENBQUNDLElBQUksRUFBRTtNQUNoQixJQUFJLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUNGLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQztFQUNKO0VBRUFGLFdBQVdBLENBQUEsRUFBRztJQUNWLE1BQU1JLE9BQU8sR0FBRyxJQUFJLENBQUNOLENBQUMsQ0FBQ08sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU07SUFDbEQsTUFBTUMsSUFBSSxHQUFHRixPQUFPLEtBQUssTUFBTSxHQUFHLEtBQUssR0FBR0EsT0FBTyxLQUFLLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSztJQUM1RSxJQUFJLENBQUNELFFBQVEsQ0FBQ0csSUFBSSxDQUFDOztJQUVuQjtJQUNBLElBQUksSUFBSSxDQUFDTCxJQUFJLENBQUNNLE9BQU8sRUFBRTtNQUNuQixJQUFJLENBQUNOLElBQUksQ0FBQ00sT0FBTyxDQUFDLElBQUksQ0FBQ04sSUFBSSxDQUFDTyxNQUFNLEVBQUVGLElBQUksQ0FBQztJQUM3QztFQUNKO0VBRUFILFFBQVFBLENBQUNNLFNBQVMsRUFBRTtJQUNoQixJQUFJLENBQUNYLENBQUMsQ0FBQ08sSUFBSSxDQUFDLFdBQVcsRUFBRUksU0FBUyxDQUFDO0lBQ25DLE1BQU1DLEtBQUssR0FBRyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFFbkMsSUFBSUYsU0FBUyxLQUFLLEtBQUssRUFBRTtNQUNyQkMsS0FBSyxDQUFDRSxJQUFJLENBQUMsK0JBQStCLENBQUM7SUFDL0MsQ0FBQyxNQUFNLElBQUlILFNBQVMsS0FBSyxNQUFNLEVBQUU7TUFDN0JDLEtBQUssQ0FBQ0UsSUFBSSxDQUFDLCtCQUErQixDQUFDO0lBQy9DLENBQUMsTUFBTTtNQUNIRixLQUFLLENBQUNFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztJQUM3QztFQUNKO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=
|