import { Maybe } from '@/core'; import { IPaginatedResponse } from '@/core/models/service.model'; import { Component, signal } from '@angular/core'; import { Observable } from 'rxjs'; import { IColumn } from '../components/pageDataList/page-data-list.component'; @Component({ selector: 'abstract-list', template: '', }) export abstract class AbstractList { columns = [] as IColumn[]; loading = signal(false); items = signal([]); visibleForm = signal(false); requestPayload = signal>(null); selectedItemForEdit = signal>(null); editMode = signal(false); ngOnInit() { this.setColumns(); this.getData(); } refresh() { this.getData(); } getData() { this.loading.set(true); this.getDataRequest(this.requestPayload())?.subscribe((res) => { this.loading.set(false); this.items.set(res.data); }); } openAddForm() { this.selectedItemForEdit.set(null); this.editMode.set(false); this.visibleForm.set(true); } abstract getDataRequest( payload: Maybe, ): Observable> | void; abstract setColumns(): void; // constructor() { // if (this.editable) { // if (!this.ed) { // throw new Error('onEdit output must be bound when editable is true'); // } // } // } onEditClick(selectedItem: ResponseModel) { this.selectedItemForEdit.set(selectedItem); this.editMode.set(true); this.visibleForm.set(true); } onCloseEdit() { this.visibleForm.set(false); } }