# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
Корне репозитория у вас нет случайно файла .gitmodules?
git add mainapp-ui
ls -a
. .git README.md package-lock.json public
.. .gitignore node_modules package.json src
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: mainapp-ui
export const Bot = () => {
const [isBotOpen, setIsBotOpen] = useState(false)
const handleOpenBot = () => {
if (isBotOpen === false) {
setIsBotOpen(true)
} else if (isBotOpen === true) {
setIsBotOpen(false)
}
}
const saveMessages = (messages, HTMLString) => {
localStorage.setItem('chat_messages', JSON.stringify(messages))
}
const loadMessages = () => {
if (localStorage.getItem('chat_messages')) {
const messages = JSON.parse(localStorage.getItem('chat_messages'))
console.log(messages)
return messages
}
}
return (
<div className='appChatbotContainer' >
<button onClick={handleOpenBot} className='appChatbotButton' label='bot'>
<CoBotAvatar/>
</button>
{
(isBotOpen === true) && (
<Chatbot
config={config}
actionProvider={ActionProvider}
messageHistory={loadMessages()}
messageParser={MessageParser}
saveMessages={saveMessages}
/>
)
}
</div>
)
}
export const ActionProvider = ({createChatBotMessage, setState, children, rest}) => {
const [content, setContent] = useState([])
useEffect(() => {
axios({
method: "POST",
url: window.location.origin+'/api/botanswers/',
headers:
{
Authorization: localStorage.getItem('access_token'),
Group: localStorage.getItem('detailRole')
},
}).then(response => {
setContent(JSON.parse(response.data))
console.log(JSON.parse(response.data))
}).catch(error => {
console.log('Error: ', error)
})
}, [])
const greet = () => {
const greetingMessage = this.createChatBotMessage("и тебе привет!")
setState((prev) => ({
...prev,
messages: [...prev.messages, greetingMessage],
}));
}
const notUnderstand = () => {
const notUnderstandMessage = createChatBotMessage('Извини, я не понимаю')
setState((prev) => ({
...prev, messages: [...prev.messages, notUnderstandMessage],
}))
}
const hiGreet = () => {
const hiGreetingMessage = createChatBotMessage('о, вы англичанин? hello!')
setState((prev) => ({
...prev,
messages: [...prev.messages, hiGreetingMessage],
}));
}
const handleQuestion = () => {
const message = createChatBotMessage(
"Выберите раздел, с которым связан ваш вопрос",
{
widget: "questionSections",
}
)
setState((prev) => ({
...prev,
messages: [...prev.messages, message],
}));
}
return (
<div>
{React.Children.map(children, (child) => {
return React.cloneElement(child, {
actions: {
greet,
hiGreet,
notUnderstand,
handleQuestion,
},
});
})}
</div>
)
}
export const MessageParser = ({actions, children}) => {
const parse = (message) => {
const lowerCaseMessage = message.toLowerCase()
if (lowerCaseMessage.includes("привет")) {
actions.greet();
}
else if (
lowerCaseMessage.includes('hi') ||
lowerCaseMessage.includes('hello')
) {
actions.hiGreet();
}
else if (lowerCaseMessage.includes("вопрос")) {
actions.handleQuestion();
}
else {
actions.notUnderstand();
}
}
return (
<div>
{React.Children.map(children, (child) => {
return React.cloneElement(child, {
parse: parse,
actions,
});
})}
</div>
);
}
const config = {
initialMessages: [
createChatBotMessage("Привет! Я чат-бот Личного кабинета Заказчика. Чем я могу помочь?", {
widget: "sectionSelection",
}),
],
customComponents: {
botAvatar: (props) => <CoBotAvatar {...props} />,
header: () => <div style={{ backgroundColor: '#2898ec', padding: '5px', font: 'revert', borderRadius: '5px' }}>
Ваш помощник в ЛК
</div>
},
customStyles: {
botMessageBox: {
backgroundColor: "#376B7E",
},
chatButton: {
backgroundColor: "#376B7E",
},
},
widgets: [
{
widgetName: "sectionSelection",
widgetFunc: (props) => <SectionSelection {...props} />,
},
{
widgetName: "questionSections",
widgetFunc: (props) => <QuestionSections {...props} />,
},
],
}
export default config