UNPKG

@dorgtech/daocomponents

Version:

Componentizing [DAOstack's client library](https://github.com/daostack/client), enabling easier React application integration. The hope is to be able to turn any app into a DAO enabled dApp by adding ~2 components.

42 lines (41 loc) 2.27 kB
import * as React from "react"; import { Observable } from "rxjs"; import { IStateful } from "@daostack/client/src/types"; import { BaseProps, BaseComponent } from "./BaseComponent"; import { Component } from "./Component"; import { ComponentListLogs } from "./logging/ComponentListLogs"; export { ComponentListLogs }; export declare type CProps<Comp> = Comp extends Component<infer Props, infer Entity, infer Data, infer Code> ? Props : undefined; export declare type CEntity<Comp> = Comp extends Component<infer Props, infer Entity, infer Data, infer Code> ? Entity : undefined; export declare type CData<Comp> = Comp extends Component<infer Props, infer Entity, infer Data, infer Code> ? Data : undefined; export declare type CCode<Comp> = Comp extends Component<infer Props, infer Entity, infer Data, infer Code> ? Code : undefined; export declare type EntityList<Entity, Data> = Array<{ entity: Entity; data: Data; }>; declare type PFilterOptions<Props> = Props extends ComponentListProps<infer Entity, infer Data, infer FilterOptions> ? FilterOptions : undefined; export interface ComponentListProps<Entity, Data, FilterOptions> extends BaseProps { filter?: FilterOptions; sort?: (entities: EntityList<Entity, Data>) => EntityList<Entity, Data>; } interface State<Entity, Data> { entities: Entity[]; sorted: EntityList<Entity, Data>; logs: ComponentListLogs; } export declare abstract class ComponentList<Props extends ComponentListProps<Entity, Data, PFilterOptions<Props>>, Comp extends Component<CProps<Comp>, CEntity<Comp>, CData<Comp>, CCode<Comp>>, Entity extends IStateful<CData<Comp>> = CEntity<Comp>, Data = CData<Comp>> extends BaseComponent<Props, State<Entity, Data>> { protected abstract createObservableEntities(): Observable<Entity[]>; protected abstract renderComponent(entity: Entity, children: any): React.ComponentElement<CProps<Comp>, any>; private observableEntities; private _subscription?; constructor(props: Props); render(): any; componentWillMount(): Promise<void>; componentWillUnmount(): void; private createObservableEntitiesWithProps; private clearPrevState; private fetchData; private onQueryEntities; private onQueryError; private onQueryComplete; }