Files
rspade_system/storage-broken/rsx-tmp/babel_db9b3518b1bac4aed9fd2a3036eba8e6.js
root 77b4d10af8 Refactor filename naming system and apply convention-based renames
Standardize settings file naming and relocate documentation files
Fix code quality violations from rsx:check
Reorganize user_management directory into logical subdirectories
Move Quill Bundle to core and align with Tom Select pattern
Simplify Site Settings page to focus on core site information
Complete Phase 5: Multi-tenant authentication with login flow and site selection
Add route query parameter rule and synchronize filename validation logic
Fix critical bug in UpdateNpmCommand causing missing JavaScript stubs
Implement filename convention rule and resolve VS Code auto-rename conflict
Implement js-sanitizer RPC server to eliminate 900+ Node.js process spawns
Implement RPC server architecture for JavaScript parsing
WIP: Add RPC server infrastructure for JS parsing (partial implementation)
Update jqhtml terminology from destroy to stop, fix datagrid DOM preservation
Add JQHTML-CLASS-01 rule and fix redundant class names
Improve code quality rules and resolve violations
Remove legacy fatal error format in favor of unified 'fatal' error type
Filter internal keys from window.rsxapp output
Update button styling and comprehensive form/modal documentation
Add conditional fly-in animation for modals
Fix non-deterministic bundle compilation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 19:10:02 +00:00

165 lines
18 KiB
JavaScript
Executable File

"use strict";
class State_Select_Input extends Ajax_Select_Input {
async on_load() {
// Initialize country code from args or default to US
if (!this.data.country_code) {
this.data.country_code = this.args.country_code || 'US';
}
// Load states via Ajax endpoint if country code is set
if (this.data.country_code) {
this.data.select_values = await Rsx_Reference_Data_Controller.states({
country: this.data.country_code
});
// If no states returned, add N/A option
if (!this.data.select_values || this.data.select_values.length === 0) {
this.data.select_values = [{
value: 'N/A',
label: 'N/A'
}];
}
} else {
this.data.select_values = [];
}
}
on_create() {
// Set default placeholder if not provided
if (!this.args.placeholder) {
this.args.placeholder = 'Select State...';
}
// Initialize country code in data
this.data.country_code = this.args.country_code || '';
// Cache for selected state per country code
this._state_cache = {};
// Call parent to initialize Ajax_Select_Input
super.on_create();
}
on_ready() {
// Call parent to initialize Tom Select
super.on_ready();
// Check if this is N/A case (no states for country)
const is_na = this.data.select_values.length === 1 && this.data.select_values[0].value === 'N/A';
// Disable if no country code or N/A case
if ((!this.data.country_code || is_na) && this.tom_select) {
this.tom_select.disable();
}
// Set value to N/A if that's the only option
if (is_na) {
this.val('N/A');
}
}
/**
* Set country code and reload state list
* @param {string} country_code - ISO country code (e.g., 'US', 'CA')
*/
async set_country_code(country_code) {
// Cache the current value for the current country before switching
const current_country = this.data.country_code;
const current_value = this.val();
if (current_country && current_value && current_value !== 'N/A') {
this._state_cache[current_country] = current_value;
}
// Update country code
this.data.country_code = country_code;
// Disable the selector while loading
if (this.tom_select) {
this.tom_select.disable();
}
// Load new state list
try {
this.data.select_values = await Rsx_Reference_Data_Controller.states({
country: country_code
});
// Race condition check: verify country hasn't changed during the request
if (this.data.country_code !== country_code) {
// Country changed while request was in flight - ignore this response
return;
}
// If no states returned, add N/A option
if (!this.data.select_values || this.data.select_values.length === 0) {
this.data.select_values = [{
value: 'N/A',
label: 'N/A'
}];
}
// Re-render the widget with new states
this.redraw();
// Re-initialize Tom Select after redraw
if (this.tom_select) {
this.tom_select.destroy();
}
// Re-run on_ready to set up Tom Select again
this.on_ready();
// Check if this is N/A case
const is_na = this.data.select_values.length === 1 && this.data.select_values[0].value === 'N/A';
if (is_na) {
// Set to N/A and keep disabled
this.val('N/A');
if (this.tom_select) {
this.tom_select.disable();
}
} else {
// Try to restore cached value for this country
const cached_value = this._state_cache[country_code];
if (cached_value) {
const value_exists = this.data.select_values.some(opt => (typeof opt === 'object' ? opt.value : opt) === cached_value);
if (value_exists) {
this.val(cached_value);
} else {
this.val(''); // Clear if cached value not in new list
}
} else {
this.val(''); // No cached value - leave empty
}
// Enable the widget now that we have a country with states
if (this.tom_select) {
this.tom_select.enable();
}
}
} catch (error) {
console.error('Failed to load states for country:', country_code, error);
this.data.select_values = [];
// Re-enable even on error
if (this.tom_select) {
this.tom_select.enable();
}
}
}
/**
* Override val() to update cache when user manually selects a state
*/
val(value) {
if (arguments.length === 0) {
// Getter - use parent implementation
return super.val();
} else {
// Setter - update cache and call parent
if (this.data.country_code && value && value !== 'N/A') {
this._state_cache[this.data.country_code] = value;
}
return super.val(value);
}
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGF0ZV9TZWxlY3RfSW5wdXQiLCJBamF4X1NlbGVjdF9JbnB1dCIsIm9uX2xvYWQiLCJkYXRhIiwiY291bnRyeV9jb2RlIiwiYXJncyIsInNlbGVjdF92YWx1ZXMiLCJSc3hfUmVmZXJlbmNlX0RhdGFfQ29udHJvbGxlciIsInN0YXRlcyIsImNvdW50cnkiLCJsZW5ndGgiLCJ2YWx1ZSIsImxhYmVsIiwib25fY3JlYXRlIiwicGxhY2Vob2xkZXIiLCJfc3RhdGVfY2FjaGUiLCJvbl9yZWFkeSIsImlzX25hIiwidG9tX3NlbGVjdCIsImRpc2FibGUiLCJ2YWwiLCJzZXRfY291bnRyeV9jb2RlIiwiY3VycmVudF9jb3VudHJ5IiwiY3VycmVudF92YWx1ZSIsInJlZHJhdyIsImRlc3Ryb3kiLCJjYWNoZWRfdmFsdWUiLCJ2YWx1ZV9leGlzdHMiLCJzb21lIiwib3B0IiwiZW5hYmxlIiwiZXJyb3IiLCJjb25zb2xlIiwiYXJndW1lbnRzIl0sInNvdXJjZXMiOlsicnN4L3RoZW1lL2NvbXBvbmVudHMvaW5wdXRzL3N0YXRlX3NlbGVjdF9pbnB1dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBTdGF0ZV9TZWxlY3RfSW5wdXQgZXh0ZW5kcyBBamF4X1NlbGVjdF9JbnB1dCB7XG4gICAgYXN5bmMgb25fbG9hZCgpIHtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjb3VudHJ5IGNvZGUgZnJvbSBhcmdzIG9yIGRlZmF1bHQgdG8gVVNcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuY291bnRyeV9jb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuY291bnRyeV9jb2RlID0gdGhpcy5hcmdzLmNvdW50cnlfY29kZSB8fCAnVVMnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9hZCBzdGF0ZXMgdmlhIEFqYXggZW5kcG9pbnQgaWYgY291bnRyeSBjb2RlIGlzIHNldFxuICAgICAgICBpZiAodGhpcy5kYXRhLmNvdW50cnlfY29kZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNlbGVjdF92YWx1ZXMgPSBhd2FpdCBSc3hfUmVmZXJlbmNlX0RhdGFfQ29udHJvbGxlci5zdGF0ZXMoeyBjb3VudHJ5OiB0aGlzLmRhdGEuY291bnRyeV9jb2RlIH0pO1xuXG4gICAgICAgICAgICAvLyBJZiBubyBzdGF0ZXMgcmV0dXJuZWQsIGFkZCBOL0Egb3B0aW9uXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5zZWxlY3RfdmFsdWVzIHx8IHRoaXMuZGF0YS5zZWxlY3RfdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zZWxlY3RfdmFsdWVzID0gW3sgdmFsdWU6ICdOL0EnLCBsYWJlbDogJ04vQScgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25fY3JlYXRlKCkge1xuICAgICAgICAvLyBTZXQgZGVmYXVsdCBwbGFjZWhvbGRlciBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgaWYgKCF0aGlzLmFyZ3MucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXJncy5wbGFjZWhvbGRlciA9ICdTZWxlY3QgU3RhdGUuLi4nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjb3VudHJ5IGNvZGUgaW4gZGF0YVxuICAgICAgICB0aGlzLmRhdGEuY291bnRyeV9jb2RlID0gdGhpcy5hcmdzLmNvdW50cnlfY29kZSB8fCAnJztcblxuICAgICAgICAvLyBDYWNoZSBmb3Igc2VsZWN0ZWQgc3RhdGUgcGVyIGNvdW50cnkgY29kZVxuICAgICAgICB0aGlzLl9zdGF0ZV9jYWNoZSA9IHt9O1xuXG4gICAgICAgIC8vIENhbGwgcGFyZW50IHRvIGluaXRpYWxpemUgQWpheF9TZWxlY3RfSW5wdXRcbiAgICAgICAgc3VwZXIub25fY3JlYXRlKCk7XG4gICAgfVxuXG4gICAgb25fcmVhZHkoKSB7XG4gICAgICAgIC8vIENhbGwgcGFyZW50IHRvIGluaXRpYWxpemUgVG9tIFNlbGVjdFxuICAgICAgICBzdXBlci5vbl9yZWFkeSgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgTi9BIGNhc2UgKG5vIHN0YXRlcyBmb3IgY291bnRyeSlcbiAgICAgICAgY29uc3QgaXNfbmEgPSB0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5kYXRhLnNlbGVjdF92YWx1ZXNbMF0udmFsdWUgPT09ICdOL0EnO1xuXG4gICAgICAgIC8vIERpc2FibGUgaWYgbm8gY291bnRyeSBjb2RlIG9yIE4vQSBjYXNlXG4gICAgICAgIGlmICgoIXRoaXMuZGF0YS5jb3VudHJ5X2NvZGUgfHwgaXNfbmEpICYmIHRoaXMudG9tX3NlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy50b21fc2VsZWN0LmRpc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB2YWx1ZSB0byBOL0EgaWYgdGhhdCdzIHRoZSBvbmx5IG9wdGlvblxuICAgICAgICBpZiAoaXNfbmEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsKCdOL0EnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBjb3VudHJ5IGNvZGUgYW5kIHJlbG9hZCBzdGF0ZSBsaXN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnlfY29kZSAtIElTTyBjb3VudHJ5IGNvZGUgKGUuZy4sICdVUycsICdDQScpXG4gICAgICovXG4gICAgYXN5bmMgc2V0X2NvdW50cnlfY29kZShjb3VudHJ5X2NvZGUpIHtcbiAgICAgICAgLy8gQ2FjaGUgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGNvdW50cnkgYmVmb3JlIHN3aXRjaGluZ1xuICAgICAgICBjb25zdCBjdXJyZW50X2NvdW50cnkgPSB0aGlzLmRhdGEuY291bnRyeV9jb2RlO1xuICAgICAgICBjb25zdCBjdXJyZW50X3ZhbHVlID0gdGhpcy52YWwoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRfY291bnRyeSAmJiBjdXJyZW50X3ZhbHVlICYmIGN1cnJlbnRfdmFsdWUgIT09ICdOL0EnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZV9jYWNoZVtjdXJyZW50X2NvdW50cnldID0gY3VycmVudF92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBjb3VudHJ5IGNvZGVcbiAgICAgICAgdGhpcy5kYXRhLmNvdW50cnlfY29kZSA9IGNvdW50cnlfY29kZTtcblxuICAgICAgICAvLyBEaXNhYmxlIHRoZSBzZWxlY3RvciB3aGlsZSBsb2FkaW5nXG4gICAgICAgIGlmICh0aGlzLnRvbV9zZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMudG9tX3NlbGVjdC5kaXNhYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2FkIG5ldyBzdGF0ZSBsaXN0XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcyA9IGF3YWl0IFJzeF9SZWZlcmVuY2VfRGF0YV9Db250cm9sbGVyLnN0YXRlcyh7IGNvdW50cnk6IGNvdW50cnlfY29kZSB9KTtcblxuICAgICAgICAgICAgLy8gUmFjZSBjb25kaXRpb24gY2hlY2s6IHZlcmlmeSBjb3VudHJ5IGhhc24ndCBjaGFuZ2VkIGR1cmluZyB0aGUgcmVxdWVzdFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5jb3VudHJ5X2NvZGUgIT09IGNvdW50cnlfY29kZSkge1xuICAgICAgICAgICAgICAgIC8vIENvdW50cnkgY2hhbmdlZCB3aGlsZSByZXF1ZXN0IHdhcyBpbiBmbGlnaHQgLSBpZ25vcmUgdGhpcyByZXNwb25zZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgbm8gc3RhdGVzIHJldHVybmVkLCBhZGQgTi9BIG9wdGlvblxuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcyB8fCB0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcyA9IFt7IHZhbHVlOiAnTi9BJywgbGFiZWw6ICdOL0EnIH1dO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZS1yZW5kZXIgdGhlIHdpZGdldCB3aXRoIG5ldyBzdGF0ZXNcbiAgICAgICAgICAgIHRoaXMucmVkcmF3KCk7XG5cbiAgICAgICAgICAgIC8vIFJlLWluaXRpYWxpemUgVG9tIFNlbGVjdCBhZnRlciByZWRyYXdcbiAgICAgICAgICAgIGlmICh0aGlzLnRvbV9zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvbV9zZWxlY3QuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZS1ydW4gb25fcmVhZHkgdG8gc2V0IHVwIFRvbSBTZWxlY3QgYWdhaW5cbiAgICAgICAgICAgIHRoaXMub25fcmVhZHkoKTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBOL0EgY2FzZVxuICAgICAgICAgICAgY29uc3QgaXNfbmEgPSB0aGlzLmRhdGEuc2VsZWN0X3ZhbHVlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5kYXRhLnNlbGVjdF92YWx1ZXNbMF0udmFsdWUgPT09ICdOL0EnO1xuXG4gICAgICAgICAgICBpZiAoaXNfbmEpIHtcbiAgICAgICAgICAgICAgICAvLyBTZXQgdG8gTi9BIGFuZCBrZWVwIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgdGhpcy52YWwoJ04vQScpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvbV9zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b21fc2VsZWN0LmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZXN0b3JlIGNhY2hlZCB2YWx1ZSBmb3IgdGhpcyBjb3VudHJ5XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVkX3ZhbHVlID0gdGhpcy5fc3RhdGVfY2FjaGVbY291bnRyeV9jb2RlXTtcblxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRfdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVfZXhpc3RzID0gdGhpcy5kYXRhLnNlbGVjdF92YWx1ZXMuc29tZSgob3B0KSA9PiAodHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQudmFsdWUgOiBvcHQpID09PSBjYWNoZWRfdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZV9leGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsKGNhY2hlZF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbCgnJyk7IC8vIENsZWFyIGlmIGNhY2hlZCB2YWx1ZSBub3QgaW4gbmV3IGxpc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsKCcnKTsgLy8gTm8gY2FjaGVkIHZhbHVlIC0gbGVhdmUgZW1wdHlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgdGhlIHdpZGdldCBub3cgdGhhdCB3ZSBoYXZlIGEgY291bnRyeSB3aXRoIHN0YXRlc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvbV9zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b21fc2VsZWN0LmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHN0YXRlcyBmb3IgY291bnRyeTonLCBjb3VudHJ5X2NvZGUsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZWxlY3RfdmFsdWVzID0gW107XG5cbiAgICAgICAgICAgIC8vIFJlLWVuYWJsZSBldmVuIG9uIGVycm9yXG4gICAgICAgICAgICBpZiAodGhpcy50b21fc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b21fc2VsZWN0LmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdmFsKCkgdG8gdXBkYXRlIGNhY2hlIHdoZW4gdXNlciBtYW51YWxseSBzZWxlY3RzIGEgc3RhdGVcbiAgICAgKi9cbiAgICB2YWwodmFsdWUpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIEdldHRlciAtIHVzZSBwYXJlbnQgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIHJldHVybiBzdXBlci52YWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNldHRlciAtIHVwZGF0ZSBjYWNoZSBhbmQgY2FsbCBwYXJlbnRcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuY291bnRyeV9jb2RlICYmIHZhbHVlICYmIHZhbHVlICE9PSAnTi9BJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlX2NhY2hlW3RoaXMuZGF0YS5jb3VudHJ5X2NvZGVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudmFsKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxrQkFBa0IsU0FBU0MsaUJBQWlCLENBQUM7RUFDL0MsTUFBTUMsT0FBT0EsQ0FBQSxFQUFHO0lBQ1o7SUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFlBQVksRUFBRTtNQUN6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