node-red-contrib-chatbot
Version:
REDBot a Chat bot for a full featured chat bot for Telegram, Facebook Messenger and Slack. Almost no coding skills required
57 lines (51 loc) • 1.7 kB
JavaScript
import React, { Fragment } from 'react'
import _ from 'lodash';
import PropTypes from 'prop-types';
import { SelectPicker } from 'rsuite';
import useMCContext from '../../hooks/mc-context';
import Transport from '../../../src/components/transport';
import { typeActiveChatbot } from '../../types';
const TransportValue = (value, item) => (
<div className="picker-item-transport">
{item != null && (
<Fragment>
<Transport transport={item.transport}/>
<b>{item.name}</b>
</Fragment>
)}
{item == null && <span>Select transport</span>}
</div>
);
const MenuItem = (label, item) => (
<div className="picker-item-transport">
<b>{item.name}</b><br/>
<Transport transport={item.transport}/>
<em>(id: {item.nodeId})</em>
</div>
);
const SelectTransport = ({ transports, activeChatbots, ...props }) => {
const { state } = useMCContext();
const bots = !_.isEmpty(activeChatbots) ? activeChatbots : state.activeChatbots;
return (
<SelectPicker
{...props}
renderValue={TransportValue}
renderMenuItem={MenuItem}
searchable={false}
cleanable={false}
data={bots
.filter(bot => bot.chatbotId === state.chatbotId)
.filter(chatbot => _.isEmpty(transports) || transports.includes(chatbot.transport))
.map(chatbot => ({ value: chatbot.nodeId, label: chatbot.transport, ...chatbot }))
}
/>
);
};
SelectTransport.propTypes = {
// limit chatbot to a list of transports
transports: PropTypes.arrayOf(PropTypes.string),
value: PropTypes.string,
onChange: PropTypes.func,
activeChatbots: PropTypes.arrayOf(typeActiveChatbot)
};
export default SelectTransport;