remix-nlux
Version:
Remix IDE NLUX integration. Remix IDE is the leading IDE for building and deploying smart contracts on Ethereum. NLUX is a JavaScript and React library for building conversational AI experiences.
31 lines (28 loc) • 1.04 kB
text/typescript
import {AiChatProps} from '../../types/aiChat/props';
import {ControllerContext, ControllerContextProps} from '../../types/controllerContext';
import {EventName, EventsMap} from '../../types/event';
export const createControllerContext = <AiMsg>(
props: ControllerContextProps<AiMsg>,
getAiChatProps: () => AiChatProps<AiMsg>,
emitEvent: <EventToEmit extends EventName>(
event: EventToEmit,
...params: Parameters<EventsMap<AiMsg>[EventToEmit]>
) => void,
): ControllerContext<AiMsg> => {
const context: ControllerContext<AiMsg> = {
...props,
update: (newProps: Partial<ControllerContextProps<AiMsg>>) => {
Object.assign(context, newProps);
},
emit: <EventToEmit extends EventName>(
eventName: EventToEmit,
...params: Parameters<EventsMap<AiMsg>[EventToEmit]>
) => {
emitEvent(eventName, ...params);
},
get aiChatProps() {
return getAiChatProps();
},
};
return context;
};