import React, { ComponentClass, ComponentType } from 'react'; import { QueryOrExpression, QueryBuilder, FindRecordTerm, FindRecordsTerm, FindRelatedRecordTerm, FindRelatedRecordsTerm, Source } from '@orbit/data'; export interface DataProviderProps { dataStore: Source; } export type RecordsToProps = { [Key in Keys]?: (q: QueryBuilder) => FindRecordTerm | FindRecordsTerm | FindRelatedRecordTerm | FindRelatedRecordsTerm; } export interface WithData { dataStore: Source; } export type WithDataProps = & { queryStore: (queryOrExpression: QueryOrExpression, options?: object, id?: string) => any updateStore: (queryOrExpression: QueryOrExpression, options?: object, id?: string) => any } & WithData export type MapRecordsToPropsFn = (props: TOwnProps) => RecordsToProps; export type MapRecordsToProps = | RecordsToProps | MapRecordsToPropsFn export class DataProvider extends React.Component {} export function withData( mapRecordsToProps?: MapRecordsToProps ): InferableComponentEnhancerWithProps export type GetProps = C extends ComponentType ? P : boolean; export type ConnectedComponentClass = ComponentClass> & { WrappedComponent: C; }; export type InferableComponentEnhancerWithProps = >>( component: C ) => ConnectedComponentClass, keyof TInjectedProps>>;