UNPKG

@thirdrocktechno/strapi-gpt

Version:

A StrapiGPT plugin for integrating AI-powered custom ChatBot with your strapi content.

203 lines (185 loc) 7.74 kB
import React, { useState } from "react"; import axios from "axios"; import { useNotification } from '@strapi/helper-plugin'; import { useTranslation } from "react-i18next"; import { auth } from '@strapi/helper-plugin'; import Preview from "./Components/Preview"; import UploadImageModal from "./Modal/UploadImage"; import ExecutivePlaceHolderSmall from '../../public/images/executive-placeholder-small.svg'; import PencilBlueImageIcon from '../../public/images/pencil-bule-image-icon.svg'; export default function Content({ executiveImage, setExecutiveImage, companyLogo, setCompanyLogo, headerContent, setHeaderContent, supportMessageContent, setSupportMessageContent, colors, widgetPosition, }) { const toggleNotification = useNotification(); const { t } = useTranslation(); // const { currentProperty } = useContext(UserContext); const [isExecutiveImgModalOpen, setIsExecutiveImgModalOpen] = useState(false); const [isCompanyLogoModalOpen, setISCompanyLogoModalOpen] = useState(false); async function handleImageChange(e) { const inputImage = e.target.files && e.target.files[0]; if (!inputImage) return; e.target.value = null; if (inputImage) { let fd = new FormData(); fd.append("files", inputImage); fd.append("fileInfo", JSON.stringify({ "name": inputImage.name, "folder": null })); try { const res = await axios.post(`${process.env.STRAPI_ADMIN_BACKEND_URL}/upload`, fd, { headers: { Authorization: `Bearer ${auth.getToken()}`, Accept: 'application/json', 'Content-Type': 'multipart/form-data', } }); toggleNotification({ type: "success", message: t("your-script.company-profile-image-update-successfully-label") }); setExecutiveImage(`${process.env.STRAPI_ADMIN_BACKEND_URL}${res.data[0].url}`); } catch (error) { console.log('handleImageChange Upload Err>>',error); } } } async function updateCompanyLogo(e) { const inputImage = e.target.files && e.target.files[0]; if (!inputImage) return; e.target.value = null; if (inputImage) { let fd = new FormData(); fd.append("files", inputImage); fd.append("fileInfo", JSON.stringify({ "name": inputImage.name, "folder": null })); try { const res = await axios.post(`${process.env.STRAPI_ADMIN_BACKEND_URL}/upload`, fd, { headers: { Authorization: `Bearer ${auth.getToken()}`, Accept: 'application/json', 'Content-Type': 'multipart/form-data', } }); toggleNotification({ type: "success", message: t("your-script.company-logo-update-successfully-label") }) setCompanyLogo(`${process.env.STRAPI_ADMIN_BACKEND_URL}${res.data[0].url}`); } catch (error) { console.log('updateCompanyLogo err',error); } } } const handleEditCompanyLogo = () => { setIsExecutiveImgModalOpen(false); setISCompanyLogoModalOpen(true); }; const handleEditExectiveImg = () => { setIsExecutiveImgModalOpen(true); setISCompanyLogoModalOpen(false); }; return ( <div class="test"> <div class="flex h-[calc(100vh_-_146px)]"> <div class="w-1/2 border-r border-custom-LightGrey3"> <form action="" method="" onSubmit={(e) => e.preventDefault()}> <div class="pt-[34px] px-[34px]"> <div className="pb-6"> <div className="flex justify-start items-start"> <div className="pr-20"> <p className="text-custom-Dark8 text-base pb-0.5">{t("widget-content.executive-image-label")}</p> <p className="text-custom-LightGrey10 text-xs">{t("widget-content.image-note-label")}</p> <div className="pt-4 relative w-fit"> <img className="w-14 h-14 object-cover rounded-full" src={executiveImage ? executiveImage : ExecutivePlaceHolderSmall} alt="support executive icon placeholder" /> <img onClick={() => handleEditExectiveImg()} className="absolute -bottom-3 -right-3 cursor-pointer" src={PencilBlueImageIcon} alt="edit icon" /> </div> </div> <div> <p className="text-custom-Dark8 text-base pb-0.5">{t("widget-content.company-logo-label")}</p> <p className="text-custom-LightGrey10 text-xs">{t("widget-content.image-note-label")}</p> <div className="pt-4 relative w-fit"> <img className="w-14 h-14 object-cover rounded-full" src={companyLogo} alt="company logo placeholder placeholder" /> <img onClick={() => handleEditCompanyLogo()} className="absolute -bottom-3 -right-3 cursor-pointer" src={PencilBlueImageIcon} alt="edit icon" /> </div> </div> </div> </div> <div className="mb-8"> <p className="w-fit pb-1.5 text-custom-Dark4 text-sm">{t("widget-content.support-message-label")}</p> <input className="custom-input2 !text-custom-Dark8 !text-base !font-normal border-custom-LightGrey4 border rounded px-4 max-w-[34rem] w-full focus:border-blue-500 focus:outline-none" id="script-header" name="support-message" type="text" placeholder={t("widget-content.support-message-placeholder")} onChange={(e) => setSupportMessageContent(e.target.value)} maxLength={120} value={supportMessageContent} /> </div> </div> </form> </div> <div className="w-1/2"> <Preview executiveImage={executiveImage ? executiveImage : ExecutivePlaceHolderSmall} companyLogo={companyLogo} supportMessageContent={supportMessageContent} headerContent={headerContent} chatInitiation={false} colors={colors} widgetPosition={widgetPosition} /> </div> </div> <UploadImageModal wrapperDivId="upload-image-modal-executive" openAlert={isExecutiveImgModalOpen} closeAlert={() => setIsExecutiveImgModalOpen(false)} imgInputId="chat-support-image" title={t("widget-content.executive-image-label")} description={t("widget-content.executive-image-description")} src={executiveImage ? executiveImage : ExecutivePlaceHolderSmall} isImage={executiveImage} handleImageChange={handleImageChange} addImageLabel={t("common.add-image")} /> <UploadImageModal wrapperDivId="upload-image-modal-company" openAlert={isCompanyLogoModalOpen} closeAlert={() => setISCompanyLogoModalOpen(false)} imgInputId="company-logo" title={t("widget-content.company-logo-label")} description={t("widget-content.company-logo-description")} src={companyLogo} isImage={companyLogo} handleImageChange={updateCompanyLogo} addImageLabel={t("common.add-logo")} /> </div> ); }