@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
TypeScript
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;
}