import * as React from "react"; import { Observable } from "rxjs"; import { CProps, ComponentList, ComponentListProps } from "../runtime"; import { Arc as Protocol, ArcConfig as ProtocolConfig } from "../protocol"; import { DAO as InferComponent, DAOEntity as InferEntity, ArcProposal as Component, ProposalEntity as Entity, ProposalData as Data } from "./"; import { IProposalQueryOptions as FilterOptions } from "@daostack/client"; interface RequiredProps extends ComponentListProps { allDAOs?: boolean; } interface ArcInferredProps { arcConfig: ProtocolConfig; } interface DAOInferredProps { dao: InferEntity; } // TODO: SchemeProposals type ArcProps = RequiredProps & ArcInferredProps; type DAOProps = RequiredProps & ArcInferredProps & DAOInferredProps; class ArcProposals extends ComponentList { createObservableEntities(): Observable { const { arcConfig, filter } = this.props; return Entity.search(arcConfig.connection, filter); } renderComponent(entity: Entity, children: any): React.ComponentElement, any> { return ( {children} ); } } class DAOProposals extends ComponentList { createObservableEntities(): Observable { const { dao, filter } = this.props; const daoFilter: FilterOptions = filter ? filter : { where: { } }; if (!daoFilter.where) { daoFilter.where = { }; } daoFilter.where.dao = dao.id; return Entity.search(dao.context, daoFilter); } renderComponent(entity: Entity, children: any): React.ComponentElement, any> { const { arcConfig } = this.props; return ( {children} ) } } class Proposals extends React.Component { render() { const { children, allDAOs, sort, filter } = this.props; if (allDAOs) { return ( {(arc: ProtocolConfig) => ( {children} )} ); } else { return ( {(arc: ProtocolConfig, dao: InferEntity) => ( {children} )} ); } } } export default Proposals; export { ArcProposals, DAOProposals, Proposals };