import * as React from "react"; import { Reputation as Entity, IReputationState as Data, } from "@daostack/arc.js"; import { Arc as Protocol, ArcConfig as ProtocolConfig, DAO as InferComponent, DAOData as InferData, Component, ComponentLogs, ComponentProps, } from "../"; import { CreateContextFeed } from "../runtime/ContextFeed"; interface RequiredProps extends ComponentProps { // Address of the Reputation Token address?: string; } interface InferredProps extends RequiredProps { // Arc Instance config: ProtocolConfig | undefined; } class InferredReputation extends Component { protected createEntity(): Entity { const { config, address } = this.props; if (!config) { throw Error( "Arc Config Missing: Please provide this field as a prop, or use the inference component." ); } if (!address) { throw Error( "Address Missing: Please provide this field as a prop, or use the inference component." ); } return new Entity(config.connection, address); } public static get Entity() { return CreateContextFeed( this.EntityContext.Consumer, this.LogsContext.Consumer, "Reputation" ); } public static get Data() { return CreateContextFeed( this.DataContext.Consumer, this.LogsContext.Consumer, "Reputation" ); } public static get Logs() { return CreateContextFeed( this.LogsContext.Consumer, this.LogsContext.Consumer, "Reputation" ); } public static EntityContext = React.createContext( undefined ); public static DataContext = React.createContext(undefined); public static LogsContext = React.createContext( undefined ); } function useReputation(): [Data | undefined, Entity | undefined] { const data = React.useContext( InferredReputation.DataContext ); const entity = React.useContext( InferredReputation.EntityContext ); return [data, entity]; } class Reputation extends React.Component { public render() { const { address, children } = this.props; return ( {(config: ProtocolConfig) => { if (address) { return ( {children} ); } else { return ( {(dao: InferData) => ( {children} )} ); } }} ); } public static get Entity() { return InferredReputation.Entity; } public static get Data() { return InferredReputation.Data; } public static get Logs() { return InferredReputation.Logs; } } export default Reputation; export { Reputation, InferredReputation, Entity as ReputationEntity, Data as ReputationData, useReputation, };