"use strict"; /** * Rsx_Tab * * Individual tab pane component that works with Rsx_Tabs for form validation. * See rsx_tab.jqhtml for full documentation. * * JavaScript Responsibilities: * - Auto-registers with parent Rsx_Tabs component on creation * - Sets tab pane ID attribute from $id argument * - Discovers and tracks child Form_Field components * - Counts validation errors within this tab's fields * - Provides error count to parent for badge display */ class Rsx_Tab extends Component { on_create() { let that = this; // Set the tab ID dynamically from args if (that.args.id) { that.$.attr('id', that.args.id); } // Find parent Rsx_Tabs and register that.tabs_container = that.closest('.Rsx_Tabs'); if (that.tabs_container) { that.tabs_container.register_tab(that); } // Store reference to all Form_Field components within this tab that.fields = []; } on_ready() { let that = this; // Find all Form_Field components within this tab that.$.find('.Form_Field').each((index, element) => { const field_component = $(element).component(); if (field_component) { that.fields.push(field_component); } }); } /** * Count validation errors in Form_Field components within this tab * @param {Object} errors - Error object from form validation {field_name: error_message} * @returns {number} Count of errors in this tab */ count_errors(errors) { let that = this; let count = 0; for (let field of that.fields) { if (errors[field.args.name]) { count++; } } return count; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSc3hfVGFiIiwiSnFodG1sX0NvbXBvbmVudCIsIm9uX2NyZWF0ZSIsInRoYXQiLCJhcmdzIiwiaWQiLCIkIiwiYXR0ciIsInRhYnNfY29udGFpbmVyIiwiY2xvc2VzdCIsInJlZ2lzdGVyX3RhYiIsImZpZWxkcyIsIm9uX3JlYWR5IiwiZmluZCIsImVhY2giLCJpbmRleCIsImVsZW1lbnQiLCJmaWVsZF9jb21wb25lbnQiLCJjb21wb25lbnQiLCJwdXNoIiwiY291bnRfZXJyb3JzIiwiZXJyb3JzIiwiY291bnQiLCJmaWVsZCIsIm5hbWUiXSwic291cmNlcyI6WyJyc3gvdGhlbWUvY29tcG9uZW50cy9mb3Jtcy9yc3hfdGFiLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnN4X1RhYlxuICpcbiAqIEluZGl2aWR1YWwgdGFiIHBhbmUgY29tcG9uZW50IHRoYXQgd29ya3Mgd2l0aCBSc3hfVGFicyBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICogU2VlIHJzeF90YWIuanFodG1sIGZvciBmdWxsIGRvY3VtZW50YXRpb24uXG4gKlxuICogSmF2YVNjcmlwdCBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBBdXRvLXJlZ2lzdGVycyB3aXRoIHBhcmVudCBSc3hfVGFicyBjb21wb25lbnQgb24gY3JlYXRpb25cbiAqIC0gU2V0cyB0YWIgcGFuZSBJRCBhdHRyaWJ1dGUgZnJvbSAkaWQgYXJndW1lbnRcbiAqIC0gRGlzY292ZXJzIGFuZCB0cmFja3MgY2hpbGQgRm9ybV9GaWVsZCBjb21wb25lbnRzXG4gKiAtIENvdW50cyB2YWxpZGF0aW9uIGVycm9ycyB3aXRoaW4gdGhpcyB0YWIncyBmaWVsZHNcbiAqIC0gUHJvdmlkZXMgZXJyb3IgY291bnQgdG8gcGFyZW50IGZvciBiYWRnZSBkaXNwbGF5XG4gKi9cbmNsYXNzIFJzeF9UYWIgZXh0ZW5kcyBKcWh0bWxfQ29tcG9uZW50IHtcbiAgICBvbl9jcmVhdGUoKSB7XG4gICAgICAgIGxldCB0aGF0ID0gdGhpcztcblxuICAgICAgICAvLyBTZXQgdGhlIHRhYiBJRCBkeW5hbWljYWxseSBmcm9tIGFyZ3NcbiAgICAgICAgaWYgKHRoYXQuYXJncy5pZCkge1xuICAgICAgICAgICAgdGhhdC4kLmF0dHIoJ2lkJywgdGhhdC5hcmdzLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmQgcGFyZW50IFJzeF9UYWJzIGFuZCByZWdpc3RlclxuICAgICAgICB0aGF0LnRhYnNfY29udGFpbmVyID0gdGhhdC5jbG9zZXN0KCcuUnN4X1RhYnMnKTtcbiAgICAgICAgaWYgKHRoYXQudGFic19jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoYXQudGFic19jb250YWluZXIucmVnaXN0ZXJfdGFiKHRoYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIGFsbCBGb3JtX0ZpZWxkIGNvbXBvbmVudHMgd2l0aGluIHRoaXMgdGFiXG4gICAgICAgIHRoYXQuZmllbGRzID0gW107XG4gICAgfVxuXG4gICAgb25fcmVhZHkoKSB7XG4gICAgICAgIGxldCB0aGF0ID0gdGhpcztcblxuICAgICAgICAvLyBGaW5kIGFsbCBGb3JtX0ZpZWxkIGNvbXBvbmVudHMgd2l0aGluIHRoaXMgdGFiXG4gICAgICAgIHRoYXQuJC5maW5kKCcuRm9ybV9GaWVsZCcpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZF9jb21wb25lbnQgPSAkKGVsZW1lbnQpLmNvbXBvbmVudCgpO1xuICAgICAgICAgICAgaWYgKGZpZWxkX2NvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHRoYXQuZmllbGRzLnB1c2goZmllbGRfY29tcG9uZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnQgdmFsaWRhdGlvbiBlcnJvcnMgaW4gRm9ybV9GaWVsZCBjb21wb25lbnRzIHdpdGhpbiB0aGlzIHRhYlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvcnMgLSBFcnJvciBvYmplY3QgZnJvbSBmb3JtIHZhbGlkYXRpb24ge2ZpZWxkX25hbWU6IGVycm9yX21lc3NhZ2V9XG4gICAgICogQHJldHVybnMge251bWJlcn0gQ291bnQgb2YgZXJyb3JzIGluIHRoaXMgdGFiXG4gICAgICovXG4gICAgY291bnRfZXJyb3JzKGVycm9ycykge1xuICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhhdC5maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNbZmllbGQuYXJncy5uYW1lXSkge1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUEsT0FBTyxTQUFTQyxnQkFBZ0IsQ0FBQztFQUNuQ0MsU0FBU0EsQ0FBQSxFQUFHO0lBQ1IsSUFBSUMsSUFBSSxHQUFHLElBQUk7O0lBRWY7SUFDQSxJQUFJQSxJQUFJLENBQUNDLElBQUksQ0FBQ0MsRUFBRSxFQUFFO01BQ2RGLElBQUksQ0FBQ0csQ0FBQyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFSixJQUFJLENBQUNDLElBQUksQ0FBQ0MsRUFBRSxDQUFDO0lBQ25DOztJQUVBO0lBQ0FGLElBQUksQ0FBQ0ssY0FBYyxHQUFHTCxJQUFJLENBQUNNLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDL0MsSUFBSU4sSUFBSSxDQUFDSyxjQUFjLEVBQUU7TUFDckJMLElBQUksQ0FBQ0ssY0FBYyxDQUFDRSxZQUFZLENBQUNQLElBQUksQ0FBQztJQUMxQzs7SUFFQTtJQUNBQSxJQUFJLENBQUNRLE1BQU0sR0FBRyxFQUFFO0VBQ3BCO0VBRUFDLFFBQVFBLENBQUEsRUFBRztJQUNQLElBQUlULElBQUksR0FBRyxJQUFJOztJQUVmO0lBQ0FBLElBQUksQ0FBQ0csQ0FBQyxDQUFDTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDQyxLQUFLLEVBQUVDLE9BQU8sS0FBSztNQUNoRCxNQUFNQyxlQUFlLEdBQUdYLENBQUMsQ0FBQ1UsT0FBTyxDQUFDLENBQUNFLFNBQVMsQ0FBQyxDQUFDO01BQzlDLElBQUlELGVBQWUsRUFBRTtRQUNqQmQsSUFBSSxDQUFDUSxNQUFNLENBQUNRLElBQUksQ0FBQ0YsZUFBZSxDQUFDO01BQ3JDO0lBQ0osQ0FBQyxDQUFDO0VBQ047O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJRyxZQUFZQSxDQUFDQyxNQUFNLEVBQUU7SUFDakIsSUFBSWxCLElBQUksR0FBRyxJQUFJO0lBQ2YsSUFBSW1CLEtBQUssR0FBRyxDQUFDO0lBRWIsS0FBSyxJQUFJQyxLQUFLLElBQUlwQixJQUFJLENBQUNRLE1BQU0sRUFBRTtNQUMzQixJQUFJVSxNQUFNLENBQUNFLEtBQUssQ0FBQ25CLElBQUksQ0FBQ29CLElBQUksQ0FBQyxFQUFFO1FBQ3pCRixLQUFLLEVBQUU7TUFDWDtJQUNKO0lBRUEsT0FBT0EsS0FBSztFQUNoQjtBQUNKIiwiaWdub3JlTGlzdCI6W119