import { DataSourceListener } from './ArchbaseDataSource'; /** * Interface base para DataSources usados em componentes de binding. * * Esta interface define o contrato mínimo que TODOS os DataSources devem implementar * para serem compatíveis com componentes como ArchbaseEdit, ArchbaseSelect, etc. * * Tanto ArchbaseDataSource quanto ArchbaseRemoteDataSourceV2 implementam esta interface. * * @example * ```typescript * // Em componentes, use esta interface ao invés de classes concretas: * interface MyComponentProps { * dataSource?: IArchbaseDataSourceBase; * dataField?: string; * } * ``` */ export interface IArchbaseDataSourceBase { /** * Retorna o nome do DataSource */ getName(): string; /** * Verifica se o DataSource está ativo */ isActive(): boolean; /** * Verifica se o DataSource está vazio (sem registros) */ isEmpty(): boolean; /** * Verifica se o DataSource está em modo de navegação (browse) */ isBrowsing(): boolean; /** * Verifica se o DataSource está em modo de edição */ isEditing(): boolean; /** * Verifica se o DataSource está em modo de inserção */ isInserting(): boolean; /** * Retorna o registro atual ou undefined se não houver registro */ getCurrentRecord(): T | undefined; /** * Retorna o índice do registro atual */ getCurrentIndex(): number; /** * Retorna o número total de registros na coleção filtrada */ getTotalRecords(): number; /** * Retorna o número total de registros no servidor (para paginação) */ getGrandTotalRecords(): number; /** * Retorna todos os registros da coleção filtrada */ browseRecords(): T[]; /** * Localiza um registro por valores de campos * @param values Objeto com campos/valores para busca * @returns true se encontrou, false caso contrário */ locate(values: any): boolean; /** * Vai para um registro pelo seu índice * @param index Índice do registro */ gotoRecord(index: number): void; /** * Vai para um registro pelo seu dado * @param record Dados do registro para navegar * @returns true se encontrou, false caso contrário */ gotoRecordByData(record: T): boolean; /** * Retorna a página atual (0-indexed) */ getCurrentPage(): number; /** * Retorna o tamanho da página */ getPageSize(): number; /** * Obtém o valor de um campo do registro atual * @param fieldName Nome do campo (suporta notação de ponto para campos aninhados) * @param defaultValue Valor padrão caso o campo seja undefined */ getFieldValue(fieldName: string, defaultValue?: any): any; /** * Define o valor de um campo no registro atual * @param fieldName Nome do campo (suporta notação de ponto para campos aninhados) * @param value Novo valor do campo */ setFieldValue(fieldName: string, value: any): void; /** * Adiciona um listener para eventos do DataSource * @param listener Função que será chamada quando eventos ocorrerem */ addListener(listener: DataSourceListener): void; /** * Remove um listener de eventos do DataSource * @param listener Função a ser removida */ removeListener(listener: DataSourceListener): void; /** * Adiciona um listener para mudanças em um campo específico. * Permite que componentes escutem apenas mudanças no campo que exibem. * @param fieldName Nome do campo (suporta notação de ponto) * @param listener Função chamada quando o campo mudar */ addFieldChangeListener(fieldName: string, listener: (fieldName: string, oldValue: any, newValue: any) => void): void; /** * Remove um listener de mudança de campo previamente registrado. * @param fieldName Nome do campo * @param listener Função a ser removida */ removeFieldChangeListener(fieldName: string, listener: (fieldName: string, oldValue: any, newValue: any) => void): void; }