import { ArchbaseRemoteDataSourceV2, ArchbaseRemoteDataSourceV2Config } from './ArchbaseRemoteDataSourceV2'; import { ArchbaseQueryFilter } from '@archbase/core'; /** * Hook para usar ArchbaseRemoteDataSourceV2 de forma reativa no React * * Este hook provê: * - Gerenciamento automático do ciclo de vida do RemoteDataSource * - Estado reativo baseado em eventos * - Cleanup automático no unmount * - Type safety completa * - Performance otimizada com callbacks memoizados * - Operações remotas (CRUD, filtragem, paginação) */ export declare function useArchbaseRemoteDataSourceV2(config: ArchbaseRemoteDataSourceV2Config): { dataSource: ArchbaseRemoteDataSourceV2; currentRecord: T; currentIndex: number; totalRecords: number; grandTotalRecords: number; isLoading: boolean; error: string; canNext: boolean; canPrior: boolean; isEmpty: boolean; isFirst: boolean; isLast: boolean; isBrowsing: boolean; isEditing: boolean; isInserting: boolean; setFieldValue: (fieldName: string, value: any) => void; getFieldValue: (fieldName: string) => any; edit: () => void; save: () => Promise; cancel: () => void; insert: (record: T) => void; remove: (callback?: Function) => Promise; first: () => void; last: () => void; next: () => void; prior: () => void; goToRecord: (index: number) => void; loadById: (recordId: any) => Promise; appendToFieldArray: (fieldName: K, item: T[K] extends Array ? U : never) => void; updateFieldArrayItem: (fieldName: K, index: number, updater: (draft: any) => void) => void; removeFromFieldArray: (fieldName: K, index: number) => void; insertIntoFieldArray: (fieldName: K, index: number, item: T[K] extends Array ? U : never) => void; getFieldArray: (fieldName: K) => T[K] extends (infer U)[] ? U[] : never; isFieldArray: (fieldName: K) => boolean; applyRemoteFilter: (filter: ArchbaseQueryFilter, page: number, callback?: (() => void) | undefined) => void; refreshData: (options?: { currentPage?: number; pageSize?: number; filter?: string; sort?: string[]; }) => Promise; setPageSize: (pageSize: number) => void; getPageSize: () => number; getDebugInfo: () => { hookState: { currentRecord: T; currentIndex: number; totalRecords: number; grandTotalRecords: number; isBrowsing: boolean; isEditing: boolean; isInserting: boolean; isLoading: boolean; error: string; }; name: string; label: string; recordCount: number; currentIndex: number; currentRecord: T; state: "insert" | "edit" | "browse"; listeners: number; totalRecords: number; pageSize: number; }; }; /** * Tipo para o retorno do hook useArchbaseRemoteDataSourceV2 */ export type UseArchbaseRemoteDataSourceV2Return = ReturnType>; /** * Hook customizado para componentes que precisam apenas de leitura * Otimizado para performance - não re-renderiza em mudanças de campo */ export declare function useArchbaseRemoteDataSourceV2ReadOnly(config: ArchbaseRemoteDataSourceV2Config): { dataSource: ArchbaseRemoteDataSourceV2; currentRecord: T; currentIndex: number; totalRecords: number; grandTotalRecords: number; isLoading: boolean; error: string; canNext: boolean; canPrior: boolean; isEmpty: boolean; isFirst: boolean; isLast: boolean; isBrowsing: boolean; first: () => void; last: () => void; next: () => void; prior: () => void; goToRecord: (index: number) => void; loadById: (recordId: any) => Promise; getFieldValue: (fieldName: string) => any; getFieldArray: (fieldName: K) => T[K] extends (infer U)[] ? U[] : never; isFieldArray: (fieldName: K) => boolean; applyRemoteFilter: (filter: ArchbaseQueryFilter, page: number, callback?: () => void) => void; refreshData: (options?: { currentPage?: number; pageSize?: number; filter?: string; sort?: string[]; }) => Promise; getPageSize: () => number; getDebugInfo: () => { hookState: { currentRecord: T; currentIndex: number; totalRecords: number; grandTotalRecords: number; isBrowsing: boolean; isEditing: boolean; isInserting: boolean; isLoading: boolean; error: string; }; name: string; label: string; recordCount: number; currentIndex: number; currentRecord: T; state: "insert" | "edit" | "browse"; listeners: number; totalRecords: number; pageSize: number; }; }; /** * Hook customizado para componentes de edição * Inclui todas as operações de modificação */ export declare function useArchbaseRemoteDataSourceV2Editor(config: ArchbaseRemoteDataSourceV2Config): { dataSource: ArchbaseRemoteDataSourceV2; currentRecord: T; currentIndex: number; totalRecords: number; grandTotalRecords: number; isLoading: boolean; error: string; canNext: boolean; canPrior: boolean; isEmpty: boolean; isFirst: boolean; isLast: boolean; isBrowsing: boolean; isEditing: boolean; isInserting: boolean; setFieldValue: (fieldName: string, value: any) => void; getFieldValue: (fieldName: string) => any; edit: () => void; save: () => Promise; cancel: () => void; insert: (record: T) => void; remove: (callback?: Function) => Promise; first: () => void; last: () => void; next: () => void; prior: () => void; goToRecord: (index: number) => void; loadById: (recordId: any) => Promise; appendToFieldArray: (fieldName: K, item: T[K] extends (infer U)[] ? U : never) => void; updateFieldArrayItem: (fieldName: K, index: number, updater: (draft: any) => void) => void; removeFromFieldArray: (fieldName: K, index: number) => void; insertIntoFieldArray: (fieldName: K, index: number, item: T[K] extends (infer U)[] ? U : never) => void; getFieldArray: (fieldName: K) => T[K] extends (infer U)[] ? U[] : never; isFieldArray: (fieldName: K) => boolean; applyRemoteFilter: (filter: ArchbaseQueryFilter, page: number, callback?: () => void) => void; refreshData: (options?: { currentPage?: number; pageSize?: number; filter?: string; sort?: string[]; }) => Promise; setPageSize: (pageSize: number) => void; getPageSize: () => number; getDebugInfo: () => { hookState: { currentRecord: T; currentIndex: number; totalRecords: number; grandTotalRecords: number; isBrowsing: boolean; isEditing: boolean; isInserting: boolean; isLoading: boolean; error: string; }; name: string; label: string; recordCount: number; currentIndex: number; currentRecord: T; state: "insert" | "edit" | "browse"; listeners: number; totalRecords: number; pageSize: number; }; };