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.
66 lines (57 loc) • 2.27 kB
text/typescript
import {AiChatPropsInEvents, PersonaOptions} from '@nlux/core';
import {AiChatProps} from '../exports/props';
export const reactPropsToCorePropsInEvents = <AiMsg>(
props: AiChatProps<AiMsg>,
): AiChatPropsInEvents<AiMsg> => {
const result: AiChatPropsInEvents<AiMsg> = {};
const keys = Object.keys(props);
for (let i = 0; i < keys.length; i++) {
const key = keys[i] as keyof AiChatProps<AiMsg>;
if (
key === 'personaOptions' ||
key === 'messageOptions' ||
key === 'adapter' ||
key === 'events'
) {
continue;
}
Object.assign(result, {[key]: props[key]});
}
if (props.personaOptions) {
result.personaOptions = {} as PersonaOptions;
if (props.personaOptions.assistant) {
result.personaOptions.assistant = {
name: props.personaOptions.assistant.name,
avatar: typeof props.personaOptions.assistant.avatar === 'string'
? props.personaOptions.assistant.avatar
: '<REACT ELEMENT />',
tagline: props.personaOptions.assistant.tagline,
};
}
if (props.personaOptions.user) {
result.personaOptions.user = {
name: props.personaOptions.user.name,
avatar: typeof props.personaOptions.user.avatar === 'string'
? props.personaOptions.user.avatar
: '<REACT ELEMENT />',
};
}
}
if (props.messageOptions) {
result.messageOptions = {
...props.messageOptions,
responseRenderer: props.messageOptions.responseRenderer ? () => null : undefined,
promptRenderer: props.messageOptions.promptRenderer ? () => null : undefined,
};
}
if (props.conversationOptions?.conversationStarters) {
result.conversationOptions = {
...props.conversationOptions,
conversationStarters: props.conversationOptions.conversationStarters.map((starter) => ({
...starter,
icon: starter.icon ? '<REACT ELEMENT />' : undefined,
})),
};
}
return result as AiChatPropsInEvents<AiMsg>;
};