UNPKG

is-mychatbot

Version:
95 lines (91 loc) 3.23 kB
import { useContext } from "react"; import { useDispatch } from "react-redux"; import styled from "styled-components"; import { createUserMessage } from "../../../../utils/helpers"; import AppContext from "../../../AppContext"; import { addMessage, disableButtons, fetchBotResponse, toggleBotTyping, toggleUserTyping, } from "../messageSlice"; import { formattedTs } from "../utils"; export const Button = styled.button` border-radius: ${(props) => props.borderRadius}; border-width: ${(props) => props.borderWidth}; border-color: ${(props) => props.borderColor}; border-style: solid; background-color: ${(props) => props.backgroundColor}; color: ${(props) => props.color}; &:hover { background-color: ${(props) => props.enableHover ? props.hoverBackgroundColor : "none"}; color: ${(props) => (props.enableHover ? props.color : "none")}; border: ${(props) => props.enableHover ? `${props.hoverborderWidth} solid ${props.borderColor}` : "none"}; } `; export const Buttons = ({ buttons, index, showBotAvatar, ts, callback }) => { const dispatch = useDispatch(); const appContext = useContext(AppContext); const { buttonsCss, botAvatar, rasaServerUrl, userId } = appContext; return ( <div className="flex space-x-1 "> <div className={`flex w-5 items-start`}> <img className={`h-5 w-5 rounded-full ${showBotAvatar ? "" : "hidden"}`} src={botAvatar} alt="Bot Logo" /> </div> <div className="flex flex-col space-y-1"> <div className={`mt-2 flex w-80 flex-wrap gap-2 self-start whitespace-pre-line break-words text-sm text-white`} > {buttons.map((item, idx) => ( <Button type="button" key={idx} className="px-2 py-1.5 text-center text-sm font-medium " backgroundColor={buttonsCss.backgroundColor} color={buttonsCss.color} borderRadius={buttonsCss.borderRadius} borderWidth={buttonsCss.borderWidth} hoverborderWidth={buttonsCss.hoverborderWidth} borderColor={buttonsCss.borderColor} enableHover={buttonsCss.enableHover} hoverBackgroundColor={buttonsCss.hoverBackgroundColor} onClick={async (e) => { e.preventDefault(); if (callback) { const { title, payload } = item; dispatch(disableButtons(index)); dispatch(addMessage(createUserMessage(title))); dispatch(toggleBotTyping(true)); dispatch(toggleUserTyping(false)); dispatch( fetchBotResponse({ rasaServerUrl, message: payload, sender: userId, }) ); } }} > {item.title} </Button> ))} </div> {showBotAvatar && ( <div className="text-[10px] italic text-gray-500"> {formattedTs(ts)} </div> )} </div> </div> ); };