import * as React from "react"; import { Observable } from "rxjs"; import { IMemberQueryOptions as FilterOptions } from "@daostack/arc.js"; import { Arc as Protocol, ArcConfig as ProtocolConfig, DAO, DAOEntity, InferredMember as Component, MemberEntity as Entity, MemberData as Data, CProps, ComponentList, ComponentListLogs, ComponentListProps, createFilterFromScope, } from "../"; import { CreateContextFeed } from "../runtime/ContextFeed"; type Scopes = "DAO"; const scopeProps: Record = { DAO: "dao", }; interface RequiredProps extends ComponentListProps { from?: Scopes; } interface InferredProps extends RequiredProps { config: ProtocolConfig; dao?: string; } class InferredMembers extends ComponentList { createObservableEntities(): Observable { const { config, from, filter } = this.props; if (!config) { throw Error( "Arc Config Missing: Please provide this field as a prop, or use the inference component." ); } const f = createFilterFromScope(filter, from, scopeProps, this.props); return Entity.search(config.connection, f); } renderComponent( entity: Entity, children: any, index: number ): React.ComponentElement, any> { const { config } = this.props; // TODO: support creating Components with just an Entity, it makes no sense to recreate the Member entity here... return ( {children} ); } public static get Entities() { return CreateContextFeed( this.EntitiesContext.Consumer, this.LogsContext.Consumer, "Members" ); } public static get Logs() { return CreateContextFeed( this.LogsContext.Consumer, this.LogsContext.Consumer, "Members" ); } protected static EntitiesContext = React.createContext( undefined ); protected static LogsContext = React.createContext< ComponentListLogs | undefined >(undefined); } class Members extends React.Component { render() { const { children, from, sort, filter } = this.props; return ( {(config: ProtocolConfig) => { switch (from) { case "DAO": return ( {(dao: DAOEntity) => ( {children} )} ); default: if (from) { throw Error(`Unsupported scope: ${from}`); } return ( {children} ); } }} ); } public static get Entities() { return InferredMembers.Entities; } public static get Logs() { return InferredMembers.Logs; } } export default Members; export { Members, InferredMembers };