{"version":3,"file":"seniorsistemas-angular-components-table-header.mjs","sources":["../../projects/angular-components/table-header/src/lib/table-header/table-header-checkbox.component.ts","../../projects/angular-components/table-header/src/lib/table-header/table-header-checkox.module.ts","../../projects/angular-components/table-header/src/seniorsistemas-angular-components-table-header.ts"],"sourcesContent":["import { Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\r\n\r\nimport { CheckboxComponent } from '@seniorsistemas/angular-components/checkbox';\r\nimport { Table, TableService } from 'primeng/table';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * @description Componente de checkbox de cabeçalho para tabelas PrimeNG.\r\n * Integra-se automaticamente ao `TableService` para sincronizar o estado\r\n * de seleção total/parcial com as linhas da tabela.\r\n *\r\n * @example\r\n * ```html\r\n * <th>\r\n *   <s-table-header-checkbox [rowProps]=\"['id', 'name']\" />\r\n * </th>\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n    selector: 's-table-header-checkbox',\r\n    template: `\r\n        <s-checkbox\r\n            [checked]=\"checked\"\r\n            (checkedChange)=\"onClick($event)\"\r\n        />\r\n    `,\r\n    standalone: true,\r\n    imports: [CheckboxComponent],\r\n})\r\nexport class TableHeaderCheckboxComponent implements OnInit, OnDestroy {\r\n    readonly table = inject(Table);\r\n    readonly tableService = inject(TableService);\r\n\r\n    public static nextId = 0;\r\n\r\n    /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\r\n    @Input()\r\n    public id = `s-table-header-checkbox-${TableHeaderCheckboxComponent.nextId++}`;\r\n\r\n    /** @description Desabilita o checkbox de cabeçalho. @default false */\r\n    @Input()\r\n    public disabled = false;\r\n\r\n    /** @description Lista de propriedades dos itens da linha usadas para identificação. */\r\n    @Input()\r\n    public rowProps?: string[];\r\n\r\n    /** @description Quando `true`, usa o objeto completo da linha em vez de propriedades específicas. */\r\n    @Input()\r\n    public useAllObject?: boolean;\r\n\r\n    public checked = false;\r\n    public hasFocus = false;\r\n\r\n    private _ngUnsubscribe = new Subject<void>();\r\n\r\n    constructor() {\r\n        this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\r\n            this.checked = this.updateCheckedState();\r\n        });\r\n\r\n        this.table.tableService.selectionSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\r\n            this.checked = this.updateCheckedState();\r\n        });\r\n    }\r\n\r\n    public ngOnInit(): void {\r\n        this.checked = this.updateCheckedState();\r\n    }\r\n\r\n    public ngOnDestroy(): void {\r\n        this._ngUnsubscribe.next();\r\n    }\r\n\r\n    public onFocus(): void {\r\n        this.hasFocus = true;\r\n    }\r\n\r\n    public onBlur(): void {\r\n        this.hasFocus = false;\r\n    }\r\n\r\n    public isDisabled(): boolean {\r\n        return this.disabled || !this.table.value || !this.table.value.length;\r\n    }\r\n\r\n    public onClick(checked: boolean): void {\r\n        if (!this.disabled) {\r\n            if (this.table.value && this.table.value.length > 0) {\r\n                this.onToggleCheckbox(checked);\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateCheckedState() {\r\n        if (this.table.filteredValue) {\r\n            const val = this.table.filteredValue;\r\n            return (\r\n                val &&\r\n                val.length > 0 &&\r\n                this.table.selection &&\r\n                this.table.selection.length > 0 &&\r\n                this.isAllFilteredValuesChecked()\r\n            );\r\n        } else {\r\n            const val = this.table.value;\r\n            return (\r\n                val &&\r\n                val.length > 0 &&\r\n                this.table.selection &&\r\n                this.table.selection.length > 0 &&\r\n                this.isAllValuesChecked()\r\n            );\r\n        }\r\n    }\r\n\r\n    public onToggleCheckbox(checked: boolean): void {\r\n        const { filteredValue, value, dataKey } = this.table;\r\n        const gridData = checked ? (filteredValue ? filteredValue.slice() : value.slice()) : [];\r\n\r\n        if (!dataKey) return;\r\n\r\n        if (checked) {\r\n            const unselecteds = gridData\r\n                .filter(\r\n                    (record) => !this.table._selection.find((selected: any) => record[dataKey] === selected[dataKey]),\r\n                )\r\n                .map((record: any) => {\r\n                    if (this.useAllObject) return record;\r\n\r\n                    const newRecord: any = {};\r\n                    if (this.rowProps) this.rowProps.forEach((prop: string) => (newRecord[prop] = record[prop]));\r\n                    else newRecord[dataKey] = record[dataKey];\r\n                    return newRecord;\r\n                });\r\n            this.table._selection = [...this.table._selection, ...unselecteds];\r\n        } else {\r\n            value.forEach((data: any) => {\r\n                this.table._selection = this.table._selection.filter(\r\n                    (record: any) => record[dataKey] !== data[dataKey],\r\n                );\r\n            });\r\n        }\r\n\r\n        this.table.updateSelectionKeys();\r\n        this.table.selectionChange.emit(this.table._selection);\r\n        this.tableService.onSelectionChange();\r\n\r\n        if (this.table.isStateful()) this.table.saveState();\r\n    }\r\n\r\n    public isAllFilteredValuesChecked(): boolean {\r\n        if (!this.table.filteredValue) {\r\n            return false;\r\n        } else {\r\n            for (const rowData of this.table.filteredValue) {\r\n                if (!this.table.isSelected(rowData)) {\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n\r\n    public isAllValuesChecked(): boolean {\r\n        if (!this.table.value) {\r\n            return false;\r\n        } else {\r\n            for (const rowData of this.table.value) {\r\n                if (!this.table.isSelected(rowData)) {\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TableHeaderCheckboxComponent } from './table-header-checkbox.component';\r\n\r\n@NgModule({\r\n    imports: [TableHeaderCheckboxComponent],\r\n    exports: [TableHeaderCheckboxComponent],\r\n})\r\nexport class TableHeaderCheckboxModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}