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>
52 lines
4.8 KiB
JavaScript
Executable File
52 lines
4.8 KiB
JavaScript
Executable File
"use strict";
|
|
|
|
/**
|
|
* Form_Row_Component - JQHTML Component
|
|
*
|
|
* Lifecycle methods are called in this order:
|
|
* 1. on_create() - Quick UI setup, runs bottom-up through component tree
|
|
* 2. on_load() - Fetch data from APIs (parallel execution, no DOM modifications)
|
|
* 3. on_ready() - Component fully initialized, runs bottom-up through component tree
|
|
*/
|
|
class Form_Row_Component extends Component {
|
|
/**
|
|
* Called after render, quick UI setup (bottom-up)
|
|
* Use for: Initial state, event bindings, showing loading indicators
|
|
*/
|
|
async on_create() {
|
|
// Example: this.$sid('loading').show();
|
|
// Example: this.$.addClass('initializing');
|
|
}
|
|
|
|
/**
|
|
* Fetch data from APIs (parallel, NO DOM modifications)
|
|
* Use for: Loading data from server, fetching configurations
|
|
* WARNING: Do NOT modify DOM here - only load data
|
|
*/
|
|
async on_load() {
|
|
// Example: this.data.users = await Users_Controller.get_users_api();
|
|
// Example: this.data.config = await this.load_config();
|
|
// WARNING: Do NOT modify DOM here - only load data
|
|
}
|
|
|
|
/**
|
|
* Component fully initialized (bottom-up)
|
|
* Use for: Final UI setup, hiding loading indicators, starting animations
|
|
*/
|
|
async on_ready() {
|
|
// Example: this.$sid('loading').hide();
|
|
// Example: this.setup_event_listeners();
|
|
}
|
|
|
|
/**
|
|
* Click handler for the hello button
|
|
* Referenced in template via @click=this.on_click_hello
|
|
*/
|
|
on_click_hello() {
|
|
this.$sid('inner_html').hide();
|
|
this.$sid('hello_world').show();
|
|
}
|
|
|
|
// For more information: php artisan rsx:man jqhtml
|
|
}
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtX1Jvd19Db21wb25lbnQiLCJKcWh0bWxfQ29tcG9uZW50Iiwib25fY3JlYXRlIiwib25fbG9hZCIsIm9uX3JlYWR5Iiwib25fY2xpY2tfaGVsbG8iLCIkaWQiLCJoaWRlIiwic2hvdyJdLCJzb3VyY2VzIjpbInJzeC90aGVtZS9jb21wb25lbnRzL19hcmNoaXZlZC91bmZpbmlzaGVkL2Zvcm1fcm93X2NvbXBvbmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvcm1fUm93X0NvbXBvbmVudCAtIEpRSFRNTCBDb21wb25lbnRcbiAqXG4gKiBMaWZlY3ljbGUgbWV0aG9kcyBhcmUgY2FsbGVkIGluIHRoaXMgb3JkZXI6XG4gKiAxLiBvbl9jcmVhdGUoKSAtIFF1aWNrIFVJIHNldHVwLCBydW5zIGJvdHRvbS11cCB0aHJvdWdoIGNvbXBvbmVudCB0cmVlXG4gKiAyLiBvbl9sb2FkKCkgLSBGZXRjaCBkYXRhIGZyb20gQVBJcyAocGFyYWxsZWwgZXhlY3V0aW9uLCBubyBET00gbW9kaWZpY2F0aW9ucylcbiAqIDMuIG9uX3JlYWR5KCkgLSBDb21wb25lbnQgZnVsbHkgaW5pdGlhbGl6ZWQsIHJ1bnMgYm90dG9tLXVwIHRocm91Z2ggY29tcG9uZW50IHRyZWVcbiAqL1xuY2xhc3MgRm9ybV9Sb3dfQ29tcG9uZW50IGV4dGVuZHMgSnFodG1sX0NvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGFmdGVyIHJlbmRlciwgcXVpY2sgVUkgc2V0dXAgKGJvdHRvbS11cClcbiAgICAgKiBVc2UgZm9yOiBJbml0aWFsIHN0YXRlLCBldmVudCBiaW5kaW5ncywgc2hvd2luZyBsb2FkaW5nIGluZGljYXRvcnNcbiAgICAgKi9cbiAgICBhc3luYyBvbl9jcmVhdGUoKSB7XG4gICAgICAgIC8vIEV4YW1wbGU6IHRoaXMuJGlkKCdsb2FkaW5nJykuc2hvdygpO1xuICAgICAgICAvLyBFeGFtcGxlOiB0aGlzLiQuYWRkQ2xhc3MoJ2luaXRpYWxpemluZycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoIGRhdGEgZnJvbSBBUElzIChwYXJhbGxlbCwgTk8gRE9NIG1vZGlmaWNhdGlvbnMpXG4gICAgICogVXNlIGZvcjogTG9hZGluZyBkYXRhIGZyb20gc2VydmVyLCBmZXRjaGluZyBjb25maWd1cmF0aW9uc1xuICAgICAqIFdBUk5JTkc6IERvIE5PVCBtb2RpZnkgRE9NIGhlcmUgLSBvbmx5IGxvYWQgZGF0YVxuICAgICAqL1xuICAgIGFzeW5jIG9uX2xvYWQoKSB7XG4gICAgICAgIC8vIEV4YW1wbGU6IHRoaXMuZGF0YS51c2VycyA9IGF3YWl0IFVzZXJzX0NvbnRyb2xsZXIuZ2V0X3VzZXJzX2FwaSgpO1xuICAgICAgICAvLyBFeGFtcGxlOiB0aGlzLmRhdGEuY29uZmlnID0gYXdhaXQgdGhpcy5sb2FkX2NvbmZpZygpO1xuICAgICAgICAvLyBXQVJOSU5HOiBEbyBOT1QgbW9kaWZ5IERPTSBoZXJlIC0gb25seSBsb2FkIGRhdGFcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgZnVsbHkgaW5pdGlhbGl6ZWQgKGJvdHRvbS11cClcbiAgICAgKiBVc2UgZm9yOiBGaW5hbCBVSSBzZXR1cCwgaGlkaW5nIGxvYWRpbmcgaW5kaWNhdG9ycywgc3RhcnRpbmcgYW5pbWF0aW9uc1xuICAgICAqL1xuICAgIGFzeW5jIG9uX3JlYWR5KCkge1xuICAgICAgICAvLyBFeGFtcGxlOiB0aGlzLiRpZCgnbG9hZGluZycpLmhpZGUoKTtcbiAgICAgICAgLy8gRXhhbXBsZTogdGhpcy5zZXR1cF9ldmVudF9saXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGljayBoYW5kbGVyIGZvciB0aGUgaGVsbG8gYnV0dG9uXG4gICAgICogUmVmZXJlbmNlZCBpbiB0ZW1wbGF0ZSB2aWEgQGNsaWNrPXRoaXMub25fY2xpY2tfaGVsbG9cbiAgICAgKi9cbiAgICBvbl9jbGlja19oZWxsbygpIHtcbiAgICAgICAgdGhpcy4kaWQoJ2lubmVyX2h0bWwnKS5oaWRlKCk7XG4gICAgICAgIHRoaXMuJGlkKCdoZWxsb193b3JsZCcpLnNob3coKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbjogcGhwIGFydGlzYW4gcnN4Om1hbiBqcWh0bWxcbn0iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLGtCQUFrQixTQUFTQyxnQkFBZ0IsQ0FBQztFQUM5QztBQUNKO0FBQ0E7QUFDQTtFQUNJLE1BQU1DLFNBQVNBLENBQUEsRUFBRztJQUNkO0lBQ0E7RUFBQTs7RUFHSjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0ksTUFBTUMsT0FBT0EsQ0FBQSxFQUFHO0lBQ1o7SUFDQTtJQUNBO0VBQUE7O0VBR0o7QUFDSjtBQUNBO0FBQ0E7RUFDSSxNQUFNQyxRQUFRQSxDQUFBLEVBQUc7SUFDYjtJQUNBO0VBQUE7O0VBR0o7QUFDSjtBQUNBO0FBQ0E7RUFDSUMsY0FBY0EsQ0FBQSxFQUFHO0lBQ2IsSUFBSSxDQUFDQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQztFQUNsQzs7RUFFQTtBQUNKIiwiaWdub3JlTGlzdCI6W119
|