diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoAccountInfo/AmoAccountInfo.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/AccountInfo.tsx similarity index 93% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoAccountInfo/AmoAccountInfo.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/AccountInfo.tsx index e6b00856..dd4595ac 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoAccountInfo/AmoAccountInfo.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/AccountInfo.tsx @@ -1,5 +1,5 @@ import { Box, Typography, useMediaQuery, useTheme } from "@mui/material"; -import { StepButtonsBlock } from "../StepButtonsBlock/StepButtonsBlock"; +import { StepButtonsBlock } from "./StepButtonsBlock"; import { FC } from "react"; import { AccountResponse } from "@api/integration"; @@ -8,7 +8,7 @@ type AmoAccountInfoProps = { accountInfo: AccountResponse; }; -export const AmoAccountInfo: FC = ({ handleNextStep, accountInfo }) => { +export const AccountInfo: FC = ({ handleNextStep, accountInfo }) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(600)); diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoCRMModal.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoCRMModal.tsx deleted file mode 100644 index 8356ff39..00000000 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoCRMModal.tsx +++ /dev/null @@ -1,464 +0,0 @@ -import React, { FC, useCallback, useEffect, useMemo, useState } from "react"; -import { Dialog, IconButton, Typography, useMediaQuery, useTheme, Box, Skeleton } from "@mui/material"; -import { useQuestions } from "@/stores/questions/hooks"; -import { redirect } from "react-router-dom"; -import { enqueueSnackbar } from "notistack"; - -import CloseIcon from "@mui/icons-material/Close"; - -import { AmoRemoveAccount } from "./AmoRemoveAccount/AmoRemoveAccount"; -import { AmoDeleteTagQuestion } from "./AmoRemoveAccount/AmoDeleteTagQuestion"; -import { AmoLogin } from "./AmoLogin/AmoLogin"; -import { Pipelines } from "./Pipelines/Pipelines"; -import { PipelineSteps } from "./PipelineSteps/PipelineSteps"; -import { DealPerformers } from "./DealPerformers/DealPerformers"; -import { AmoTags } from "./AmoTags/AmoTags"; -import { AmoQuestions } from "./AmoQuestions/AmoQuestions"; -import { AmoModalTitle } from "./AmoModalTitle/AmoModalTitle"; -import { AmoSettingsBlock } from "./SettingsBlock/AmoSettingsBlock"; -import { AmoAccountInfo } from "./AmoAccountInfo/AmoAccountInfo"; -import { useAmoIntegration } from "./useAmoIntegration"; -import { MinifiedData, QuestionKeys, TagKeys, TagQuestionHC } from "./types"; -import { Quiz } from "@/model/quiz/quiz"; -import { setIntegrationRules, updateIntegrationRules } from "@/api/integration"; - -type IntegrationsModalProps = { - isModalOpen: boolean; - handleCloseModal: () => void; - companyName: string | null; - quiz: Quiz; -}; - -const FCTranslate = { - "name": "имя", - "email": "почта", - "phone": "телефон", - "text": "номер", - "address": "адрес", -} - -export const AmoCRMModal: FC = ({ isModalOpen, handleCloseModal, companyName, quiz }) => { - //Если нет контекста квиза, то и делать на этой страничке нечего - if (quiz?.backendId === undefined) { - redirect("/list"); - return null; - } - - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down(600)); - const isTablet = useMediaQuery(theme.breakpoints.down(1000)); - - const { questions } = useQuestions(); - const minifiedQuestions = useMemo( - () => - questions - .filter((q) => q.type !== "result" && q.type !== null) - .map(({ backendId, title }) => ({ - id: backendId.toString() as string, - title, - })), - [questions] - ); - const FieldsAllowedFC = useMemo( - () => { - const list: MinifiedData[] = [] - if (quiz.config.showfc) { - const fields = quiz.config.formContact.fields - for (let key in fields) { - if (fields[key].used) list.push({ - id: key, - title: FCTranslate[key], - entity: "Contact", - }) - } - } - return list; - }, - [quiz] - ); - - const [step, setStep] = useState(0); - const [isSettingsBlock, setIsSettingsBlock] = useState(false); - const [isTryRemoveAccount, setIsTryRemoveAccount] = useState(false); - const [openDelete, setOpenDelete] = useState(null); - - - const { - isLoadingPage, - firstRules, - accountInfo, - arrayOfPipelines, - arrayOfPipelinesSteps, - arrayOfUsers, - arrayOfTags, - arrayOfFields, - selectedPipeline, - setSelectedPipeline, - selectedCurrentFields, - selectedPipelineStep, - setSelectedPipelineStep, - selectedDealUser, - setSelectedDealPerformer, - questionsBackend, - selectedTags, - setSelectedTags, - selectedQuestions, - setSelectedQuestions, - setPageOfPipelines, - setPageOfPipelinesSteps, - setPageOfUsers, - setPageOfTags, - setSelectedCurrentFields, - } = useAmoIntegration({ - quizID: quiz.backendId, - isModalOpen, - isTryRemoveAccount, - questions, - }); - - - const handleAddTagQuestion = useCallback( - (scope: QuestionKeys | TagKeys, id: string, type: "question" | "tag") => { - if (!scope || !id) return; - - if (type === "tag") { - setSelectedTags((prevState) => ({ - ...prevState, - [scope]: [...prevState[scope as TagKeys], id], - })); - } - - if (type === "question") { - const q = questions.find(e => e.backendId === Number(id)) - setSelectedQuestions((prevState) => ({ - ...prevState, - [scope]: [...prevState[scope as QuestionKeys], { - id, - title: q?.title || "вопрос", - entity: scope, - }], - })); - } - }, - [setSelectedQuestions, setSelectedTags, questions] - ); - const handleDeleteTagQuestion = useCallback(() => { - if (openDelete === null || !openDelete.scope || !openDelete.id || !openDelete.type) return; - if (openDelete.type === "tag") { - let newArray = selectedTags[openDelete.scope]; - const index = newArray.indexOf(openDelete.id); - if (index !== -1) newArray.splice(index, 1); - - setSelectedTags((prevState) => ({ - ...prevState, - [openDelete.scope]: newArray, - })); - } - - if (openDelete.type === "question") { - let newArray = selectedQuestions - newArray[openDelete.scope as QuestionKeys] = newArray[openDelete.scope as QuestionKeys].filter(e => e.id !== openDelete.id) - // let index = -1 - // selectedQuestions[openDelete.scope].forEach((e, i) => { - // if (e.subTitle === openDelete.id) index = i - // }) - // if (index !== -1) newArray.splice(index, 1); - // setSelectedQuestions((prevState) => ({ - // ...prevState, - // [openDelete.scope]: newArray, - // })); - setSelectedQuestions(newArray); - setSelectedCurrentFields(selectedCurrentFields.filter(e => e.id !== openDelete.id)); - - } - setOpenDelete(null); - }, [openDelete]); - - const handleNextStep = () => { - setStep((prevState) => prevState + 1); - }; - const handlePrevStep = () => { - setStep((prevState) => prevState - 1); - }; - const handleSave = () => { - if (quiz?.backendId === undefined) return; - if (selectedPipeline === null) return enqueueSnackbar("Выберите воронку"); - if (selectedPipeline === null) return enqueueSnackbar("Выберите этап воронки"); - - const body = { - PipelineID: Number(selectedPipeline), - StepID: Number(selectedPipelineStep), - PerformerID: Number(selectedDealUser), - // FieldsRule: questionsBackend, - TagsToAdd: selectedTags, - }; - - const FieldsRule = { - Company: { QuestionID: {} }, - Lead: { QuestionID: {} }, - Customer: { QuestionID: {} }, - Contact: { - QuestionID: {}, - ContactRuleMap: { - } - }, - }; - - for (let key in FieldsRule) { - selectedQuestions[key as QuestionKeys].forEach((data) => { - FieldsRule[key as QuestionKeys].QuestionID[data.id] = 0; - }); - } - - selectedCurrentFields.forEach((data) => { - if (data.entity === "Contact") { - FieldsRule.Contact.ContactRuleMap[data.id] = Number(data.amoId) - } else { - FieldsRule[data.entity].QuestionID[data.id] = Number(data.amoId) || 0 - } - }) - - - for (let key in body.TagsToAdd) { - body.TagsToAdd[key as TagKeys] = body.TagsToAdd[key as TagKeys].map((id) => Number(id)); - } - body.FieldsRule = FieldsRule; - - if (firstRules) { - setIntegrationRules(quiz.backendId.toString(), body); - } else { - updateIntegrationRules(quiz.backendId.toString(), body); - } - - handleCloseModal(); - setStep(1); - }; - const steps = useMemo( - () => [ - { - title: accountInfo ? "Информация об аккаунте" : "Авторизация в аккаунте", - isSettingsAvailable: false, - component: accountInfo ? ( - - ) : ( - - ), - }, - { - title: "Выбор воронки", - desc: "На этом этапе вы можете выбрать нужную воронку и ответственного за сделку", - isSettingsAvailable: true, - component: ( - - ), - }, - { - title: "Выбор этапа воронки", - desc: "На этом этапе вы можете выбрать нужный этап и ответственного за сделку", - isSettingsAvailable: true, - component: ( - - ), - }, - { - title: "Сделка", - desc: "На этом этапе вы можете выбрать ответственного за сделку", - isSettingsAvailable: true, - component: ( - - ), - }, - { - title: "Добавление тегов", - isSettingsAvailable: true, - component: ( - { }} - handleAddTag={handleAddTagQuestion} - handlePrevStep={handlePrevStep} - handleNextStep={handleNextStep} - /> - ), - }, - { - title: "Соотнесение вопросов и сущностей", - isSettingsAvailable: true, - component: ( - - ), - }, - ], - [ - arrayOfPipelines, - arrayOfPipelinesSteps, - arrayOfUsers, - arrayOfTags, - arrayOfFields, - selectedPipeline, - selectedPipelineStep, - selectedDealUser, - selectedQuestions, - selectedTags, - arrayOfPipelines, - arrayOfPipelinesSteps, - arrayOfUsers, - minifiedQuestions, - selectedCurrentFields, - ] - ); - - const stepTitles = steps.map((step) => step.title); - - return ( - - - - Интеграция с {companyName ? companyName : "партнером"} - - - - - - - {isLoadingPage ? - : - <> - setIsTryRemoveAccount(true)} - /> - {openDelete !== null ? ( - setOpenDelete(null)} - deleteItem={handleDeleteTagQuestion} - /> - ) : ( - <> - {isTryRemoveAccount && setIsTryRemoveAccount(false)} />} - {isSettingsBlock && ( - - u.id === selectedDealUser)?.title || "не указан"} - selectedFunnel={arrayOfPipelines.find((p) => p.id === selectedPipeline)?.title || "нет данных"} - selectedStage={ - arrayOfPipelinesSteps.find((s) => s.id === selectedPipelineStep)?.title || "нет данных" - } - selectedQuestions={selectedQuestions} - selectedTags={selectedTags} - /> - - )} - {!isSettingsBlock && !isTryRemoveAccount && ( - {steps[step].component} - )} - - )} - - } - - - - - ); -}; - -export const diffArr = (arr_A: MinifiedData[], arr_B: MinifiedData[]) => { - return arr_A.filter(person_A => !arr_B.some(person_B => person_A.id === person_B.id)); -} \ No newline at end of file diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoLogin/AmoLogin.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoLogin.tsx similarity index 98% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoLogin/AmoLogin.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoLogin.tsx index 92bf2ec4..7772f82a 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoLogin/AmoLogin.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoLogin.tsx @@ -1,6 +1,6 @@ import { Box, Typography, useMediaQuery, useTheme } from "@mui/material"; import { FC } from "react"; -import { AmoButton } from "../../../../../components/AmoButton/AmoButton"; +import { AmoButton } from "../../../../components/AmoButton/AmoButton"; import { connectAmo } from "@api/integration"; type IntegrationStep1Props = { diff --git a/src/pages/IntegrationsPage/IntegrationsModal/AmoQuestions/Item/AnswerItem/AnswerItem.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/AnswerItem.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/AmoQuestions/Item/AnswerItem/AnswerItem.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/AnswerItem.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/DealPerformers/DealPerformers.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/DealPerformers.tsx similarity index 86% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/DealPerformers/DealPerformers.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/DealPerformers.tsx index 43198363..e364e61d 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/DealPerformers/DealPerformers.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/DealPerformers.tsx @@ -1,8 +1,8 @@ import { Box, useMediaQuery, useTheme } from "@mui/material"; import { FC } from "react"; -import { StepButtonsBlock } from "../StepButtonsBlock/StepButtonsBlock"; -import { CustomSelect } from "../../../../../components/CustomSelect/CustomSelect"; -import { MinifiedData } from "../types"; +import { StepButtonsBlock } from "./StepButtonsBlock"; +import { CustomSelect } from "../../../../components/CustomSelect/CustomSelect"; +import { MinifiedData } from "./types"; type Props = { users: MinifiedData[]; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoRemoveAccount/AmoDeleteTagQuestion.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/DeleteTagQuestion.tsx similarity index 92% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoRemoveAccount/AmoDeleteTagQuestion.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/DeleteTagQuestion.tsx index 315251e0..0ac9ec1a 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoRemoveAccount/AmoDeleteTagQuestion.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/DeleteTagQuestion.tsx @@ -6,7 +6,7 @@ interface Props { close: () => void; } -export const AmoDeleteTagQuestion: FC = ({ close, deleteItem }) => { +export const DeleteTagQuestion: FC = ({ close, deleteItem }) => { const theme = useTheme(); return ( diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoModalTitle/AmoModalTitle.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/ModalTitle.tsx similarity index 98% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoModalTitle/AmoModalTitle.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/ModalTitle.tsx index 2c9c40ac..fa533f05 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoModalTitle/AmoModalTitle.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/ModalTitle.tsx @@ -13,7 +13,7 @@ type AmoModalTitleProps = { startRemoveAccount: () => void; }; -export const AmoModalTitle: FC = ({ +export const ModalTitle: FC = ({ step, steps, setIsSettingsBlock, diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/PipelineSteps/PipelineSteps.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/PipelineSteps.tsx similarity index 85% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/PipelineSteps/PipelineSteps.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/PipelineSteps.tsx index 3a7b55fc..6939987b 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/PipelineSteps/PipelineSteps.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/PipelineSteps.tsx @@ -1,9 +1,9 @@ import { Box, useMediaQuery, useTheme } from "@mui/material"; import { FC } from "react"; -import { StepButtonsBlock } from "../StepButtonsBlock/StepButtonsBlock"; -import { CustomSelect } from "../../../../../components/CustomSelect/CustomSelect"; -import { CustomRadioGroup } from "../../../../../components/CustomRadioGroup/CustomRadioGroup"; -import { MinifiedData } from "../types"; +import { StepButtonsBlock } from "./StepButtonsBlock"; +import { CustomSelect } from "../../../../components/CustomSelect/CustomSelect"; +import { CustomRadioGroup } from "../../../../components/CustomRadioGroup/CustomRadioGroup"; +import { MinifiedData } from "./types"; type Props = { users: MinifiedData[]; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/Pipelines/Pipelines.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Pipelines.tsx similarity index 86% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/Pipelines/Pipelines.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Pipelines.tsx index 46026217..b00cdfc2 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/Pipelines/Pipelines.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Pipelines.tsx @@ -1,9 +1,9 @@ import { Box, useMediaQuery, useTheme } from "@mui/material"; import { FC } from "react"; -import { StepButtonsBlock } from "../StepButtonsBlock/StepButtonsBlock"; -import { CustomSelect } from "../../../../../components/CustomSelect/CustomSelect"; -import { CustomRadioGroup } from "../../../../../components/CustomRadioGroup/CustomRadioGroup"; -import { MinifiedData } from "../types"; +import { StepButtonsBlock } from "./StepButtonsBlock"; +import { CustomSelect } from "../../../../components/CustomSelect/CustomSelect"; +import { CustomRadioGroup } from "../../../../components/CustomRadioGroup/CustomRadioGroup"; +import { MinifiedData } from "./types"; type Props = { pipelines: MinifiedData[]; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/AmoQuestions.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/AmoQuestions.tsx similarity index 99% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/AmoQuestions.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/AmoQuestions.tsx index 697a4e8e..910a7965 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/AmoQuestions.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/AmoQuestions.tsx @@ -4,7 +4,7 @@ import { ItemDetailsView } from "./ItemDetailsView/ItemDetailsView"; import { Box } from "@mui/material"; import { MinifiedData, QuestionKeys, SelectedQuestions, TagKeys, TagQuestionHC } from "../types"; import { EntitiesQuestions } from "./EntitiesQuestions"; -import { diffArr } from "../AmoCRMModal"; +import { diffArr } from ".."; import { DataConstrictor } from "../Components/DataConstrictor"; type Props = { diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/CurrentFieldSelectMobile.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/CurrentFieldSelectMobile.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/CurrentFieldSelectMobile.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/CurrentFieldSelectMobile.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/CurrentFields.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/CurrentFields.tsx similarity index 98% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/CurrentFields.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/CurrentFields.tsx index 2f75ae5a..b8ca77c1 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/CurrentFields.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/CurrentFields.tsx @@ -2,7 +2,7 @@ import { CustomRadioGroup } from "@/components/CustomRadioGroup/CustomRadioGroup import {Box, Typography, useMediaQuery, useTheme} from "@mui/material" import { MinifiedData } from "../types"; import {CustomSelect} from "@/components/CustomSelect/CustomSelect"; -import {CurrentFieldSelect} from "@/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/CurrentFieldSelectMobile"; +import {CurrentFieldSelect} from "@/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/CurrentFieldSelectMobile"; interface Props { items: MinifiedData[]; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/EntitiesQuestions.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/EntitiesQuestions.tsx similarity index 97% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/EntitiesQuestions.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/EntitiesQuestions.tsx index 673bce17..f8b7570b 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/EntitiesQuestions.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/EntitiesQuestions.tsx @@ -1,11 +1,11 @@ import {Box, Button, useMediaQuery, useTheme} from "@mui/material" -import { StepButtonsBlock } from "../StepButtonsBlock/StepButtonsBlock" +import { StepButtonsBlock } from "../StepButtonsBlock" import { FC, useState } from "react"; import { MinifiedData, TagKeys } from "../types"; import { CurrentFields } from "./CurrentFields"; import { NewFields } from "./NewFields"; import { QuestionPair } from "./AmoQuestions"; -import { diffArr } from "../AmoCRMModal"; +import { diffArr } from ".."; type ItemsSelectionViewProps = { items: MinifiedData[] | []; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/Item/AnswerItem/AnswerItem.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/Item/AnswerItem/AnswerItem.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/Item/AnswerItem/AnswerItem.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/Item/AnswerItem/AnswerItem.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/Item/IconBtnAdd/IconBtnAdd.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/Item/IconBtnAdd/IconBtnAdd.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/Item/IconBtnAdd/IconBtnAdd.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/Item/IconBtnAdd/IconBtnAdd.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/Item/Item.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/Item/Item.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/Item/Item.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/Item/Item.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemDetailsView/ItemDetailsView.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemDetailsView/ItemDetailsView.tsx similarity index 96% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemDetailsView/ItemDetailsView.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemDetailsView/ItemDetailsView.tsx index 86e6c10d..89aca507 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemDetailsView/ItemDetailsView.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemDetailsView/ItemDetailsView.tsx @@ -1,6 +1,6 @@ import { Box, useTheme } from "@mui/material"; import { ItemForQuestions } from "../ItemForQuestions"; -import { StepButtonsBlock } from "../../StepButtonsBlock/StepButtonsBlock"; +import { StepButtonsBlock } from "../../StepButtonsBlock"; import { FC } from "react"; import { MinifiedData, QuestionKeys, SelectedQuestions } from "../../types"; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemForQuestions.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemForQuestions.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemForQuestions.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemForQuestions.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemsSelectionView/ItemsSelectionView.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemsSelectionView/ItemsSelectionView.tsx similarity index 95% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemsSelectionView/ItemsSelectionView.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemsSelectionView/ItemsSelectionView.tsx index 6a135e2a..41e62c5c 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/ItemsSelectionView/ItemsSelectionView.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/ItemsSelectionView/ItemsSelectionView.tsx @@ -1,6 +1,6 @@ import { Box } from "@mui/material"; import { CustomRadioGroup } from "../../../../../../components/CustomRadioGroup/CustomRadioGroup"; -import { StepButtonsBlock } from "../../StepButtonsBlock/StepButtonsBlock"; +import { StepButtonsBlock } from "../../StepButtonsBlock"; import { FC } from "react"; import { MinifiedData, TagKeys } from "../../types"; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/NewFields.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/NewFields.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoQuestions/NewFields.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Questions/NewFields.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoRemoveAccount/AmoRemoveAccount.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/RemoveAccount.tsx similarity index 97% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoRemoveAccount/AmoRemoveAccount.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/RemoveAccount.tsx index 381a43b9..ca96975b 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoRemoveAccount/AmoRemoveAccount.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/RemoveAccount.tsx @@ -10,7 +10,7 @@ interface Props { } -export const AmoRemoveAccount: FC = ({ +export const RemoveAccount: FC = ({ stopThisPage, handleCloseModal, diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/SettingsBlock/AmoSettingsBlock.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/SettingsBlock/AmoSettingsBlock.tsx deleted file mode 100644 index 4d5fc8e4..00000000 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/SettingsBlock/AmoSettingsBlock.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { FC } from "react"; -import { Box, useMediaQuery, useTheme } from "@mui/material"; -import { StepButtonsBlock } from "../StepButtonsBlock/StepButtonsBlock"; -import { SettingItem } from "./SettingItem/SettingItem"; -import { SelectedQuestions, SelectedTags } from "../types"; - -type AmoSettingsBlockProps = { - stepTitles: string[]; - setStep: (value: number) => void; - setIsSettingsBlock: (value: boolean) => void; - selectedFunnel: string | null; - selectedStage: string | null; - selectedDealUser: string | null; - selectedQuestions: SelectedQuestions; - selectedTags: SelectedTags; -}; - -export const AmoSettingsBlock: FC = ({ - stepTitles, - setStep, - setIsSettingsBlock, - selectedFunnel, - selectedDealUser, - selectedStage, - selectedQuestions, - selectedTags, -}) => { - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down(600)); - - return ( - - - {stepTitles && - stepTitles.map((title, index) => ( - - ))} - - - setIsSettingsBlock(false)} - isLargeBtnMissing={true} - /> - - - ); -}; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/SettingsBlock/SettingsBlock.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/SettingsBlock/SettingsBlock.tsx new file mode 100644 index 00000000..04c50723 --- /dev/null +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/SettingsBlock/SettingsBlock.tsx @@ -0,0 +1,83 @@ +import { FC } from "react"; +import { Box, useMediaQuery, useTheme } from "@mui/material"; +import { StepButtonsBlock } from "../StepButtonsBlock"; +import { SettingItem } from "./SettingItem/SettingItem"; +import { SelectedQuestions, SelectedTags } from "../types"; + +type AmoSettingsBlockProps = { + stepTitles: string[]; + setStep: (value: number) => void; + setIsSettingsBlock: (value: boolean) => void; + selectedFunnel: string | null; + selectedStage: string | null; + selectedDealUser: string | null; + selectedQuestions: SelectedQuestions; + selectedTags: SelectedTags; +}; + +export const SettingsBlock: FC = ({ + stepTitles, + setStep, + setIsSettingsBlock, + selectedFunnel, + selectedDealUser, + selectedStage, + selectedQuestions, + selectedTags, +}) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down(600)); + + return ( + + + + {stepTitles && + stepTitles.map((title, index) => ( + + ))} + + + setIsSettingsBlock(false)} + isLargeBtnMissing={true} + /> + + + + ); +}; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/StepButtonsBlock/StepButtonsBlock.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/StepButtonsBlock.tsx similarity index 100% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/StepButtonsBlock/StepButtonsBlock.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/StepButtonsBlock.tsx diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/SwitchPages.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/SwitchPages.tsx new file mode 100644 index 00000000..08d06df0 --- /dev/null +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/SwitchPages.tsx @@ -0,0 +1,383 @@ +import { useMemo, useState } from "react" +import { Dialog, IconButton, Typography, useMediaQuery, useTheme, Box, Skeleton } from "@mui/material"; +import { useQuestions } from "@/stores/questions/hooks"; +import { redirect } from "react-router-dom"; +import { enqueueSnackbar } from "notistack"; + +import CloseIcon from "@mui/icons-material/Close"; + +import { RemoveAccount } from "./RemoveAccount"; +import { DeleteTagQuestion } from "./DeleteTagQuestion"; +import { AmoLogin } from "./AmoLogin"; +import { Pipelines } from "./Pipelines"; +import { PipelineSteps } from "./PipelineSteps"; +import { DealPerformers } from "./DealPerformers"; +import { AmoTags } from "./Tags/AmoTags"; +import { AmoQuestions } from "./Questions/AmoQuestions"; +import { ModalTitle } from "./ModalTitle"; +import { SettingsBlock } from "./SettingsBlock/SettingsBlock"; +import { AccountInfo } from "./AccountInfo"; +import { useAmoIntegration } from "./useAmoIntegration"; +import { MinifiedData, QuestionKeys, TagKeys, TagQuestionHC } from "./types"; +import { Quiz } from "@/model/quiz/quiz"; +import { AccountResponse, setIntegrationRules, updateIntegrationRules } from "@/api/integration"; +import { AnyTypedQuizQuestion } from "@frontend/squzanswerer"; +import { UntypedQuizQuestion } from "@/model/questionTypes/shared"; + +const FCTranslate = { + "name": "имя", + "email": "почта", + "phone": "телефон", + "text": "номер", + "address": "адрес", +} + +interface Props { + quiz: Quiz; + questions: (AnyTypedQuizQuestion | UntypedQuizQuestion)[]; + firstRules: boolean; + accountInfo: AccountResponse | null; + arrayOfPipelines: MinifiedData[]; + arrayOfPipelinesSteps: MinifiedData[]; + arrayOfUsers: MinifiedData[]; + arrayOfTags: MinifiedData[]; + arrayOfFields: MinifiedData[]; + selectedPipeline: string | null; + selectedCurrentFields: MinifiedData[]; + selectedPipelineStep: string | null; + selectedDealUser: string | null; + setSelectedPipeline:any; + setSelectedPipelineStep:any; + setSelectedDealPerformer:any; + selectedTags:any; + setSelectedTags:any; + selectedQuestions:any; + setSelectedQuestions:any; + setPageOfPipelines:any; + setPageOfPipelinesSteps:any; + setPageOfUsers:any; + setPageOfTags:any; + setSelectedCurrentFields:any; + handleCloseModal:any; +} + +export const SwitchPages = ({ + quiz, + questions, + firstRules, + accountInfo, + arrayOfPipelines, + arrayOfPipelinesSteps, + arrayOfUsers, + arrayOfTags, + arrayOfFields, + selectedPipeline, + setSelectedPipeline, + selectedCurrentFields, + selectedPipelineStep, + setSelectedPipelineStep, + selectedDealUser, + setSelectedDealPerformer, + selectedTags, + setSelectedTags, + selectedQuestions, + setSelectedQuestions, + setPageOfPipelines, + setPageOfPipelinesSteps, + setPageOfUsers, + setPageOfTags, + setSelectedCurrentFields, + handleCloseModal, + +}: Props) => { + const [step, setStep] = useState(0) + const [specialPage, setSpecialPage] = useState<"deleteCell" | "removeAccount" | "settingsBlock" | "accountInfo" | "amoLogin" | "">("") + const [openDelete, setOpenDelete] = useState(null); + + + const minifiedQuestions = useMemo( + () => + questions + .filter((q) => q.type !== "result" && q.type !== null) + .map(({ backendId, title }) => ({ + id: backendId.toString() as string, + title, + })), + [questions] + ); + const FieldsAllowedFC = useMemo( + () => { + const list: MinifiedData[] = [] + if (quiz.config.showfc) { + const fields = quiz.config.formContact.fields + for (let key in fields) { + if (fields[key].used) list.push({ + id: key, + title: FCTranslate[key], + entity: "Contact", + }) + } + } + return list; + }, + [quiz] + ); + const handleAddTagQuestion = (scope: QuestionKeys | TagKeys, id: string, type: "question" | "tag") => { + if (!scope || !id) return; + + if (type === "tag") { + setSelectedTags((prevState) => ({ + ...prevState, + [scope]: [...prevState[scope as TagKeys], id], + })); + } + + if (type === "question") { + const q = questions.find(e => e.backendId === Number(id)) + setSelectedQuestions((prevState) => ({ + ...prevState, + [scope]: [...prevState[scope as QuestionKeys], { + id, + title: q?.title || "вопрос", + entity: scope, + }], + })); + } + } + + const handleDeleteTagQuestion = () => { + if (openDelete === null || !openDelete.scope || !openDelete.id || !openDelete.type) return; + if (openDelete.type === "tag") { + let newArray = selectedTags[openDelete.scope]; + const index = newArray.indexOf(openDelete.id); + if (index !== -1) newArray.splice(index, 1); + + setSelectedTags((prevState) => ({ + ...prevState, + [openDelete.scope]: newArray, + })); + } + + if (openDelete.type === "question") { + let newArray = selectedQuestions + newArray[openDelete.scope as QuestionKeys] = newArray[openDelete.scope as QuestionKeys].filter(e => e.id !== openDelete.id) + // let index = -1 + // selectedQuestions[openDelete.scope].forEach((e, i) => { + // if (e.subTitle === openDelete.id) index = i + // }) + // if (index !== -1) newArray.splice(index, 1); + // setSelectedQuestions((prevState) => ({ + // ...prevState, + // [openDelete.scope]: newArray, + // })); + setSelectedQuestions(newArray); + setSelectedCurrentFields(selectedCurrentFields.filter(e => e.id !== openDelete.id)); + + } + setOpenDelete(null); + } + + const handleNextStep = () => { + setStep((prevState) => prevState + 1); + }; + const handlePrevStep = () => { + setStep((prevState) => prevState - 1); + }; + const handleSave = () => { + if (quiz?.backendId === undefined) return; + if (selectedPipeline === null) return enqueueSnackbar("Выберите воронку"); + if (selectedPipeline === null) return enqueueSnackbar("Выберите этап воронки"); + + const body = { + PipelineID: Number(selectedPipeline), + StepID: Number(selectedPipelineStep), + PerformerID: Number(selectedDealUser), + // FieldsRule: questionsBackend, + TagsToAdd: selectedTags, + }; + + const FieldsRule = { + Company: { QuestionID: {} }, + Lead: { QuestionID: {} }, + Customer: { QuestionID: {} }, + Contact: { + QuestionID: {}, + ContactRuleMap: { + } + }, + }; + + for (let key in FieldsRule) { + selectedQuestions[key as QuestionKeys].forEach((data) => { + FieldsRule[key as QuestionKeys].QuestionID[data.id] = 0; + }); + } + + selectedCurrentFields.forEach((data) => { + if (data.entity === "Contact") { + FieldsRule.Contact.ContactRuleMap[data.id] = Number(data.amoId) + } else { + FieldsRule[data.entity].QuestionID[data.id] = Number(data.amoId) || 0 + } + }) + + + for (let key in body.TagsToAdd) { + body.TagsToAdd[key as TagKeys] = body.TagsToAdd[key as TagKeys].map((id) => Number(id)); + } + body.FieldsRule = FieldsRule; + + // if (firstRules) { + // setIntegrationRules(quiz.backendId.toString(), body); + // } else { + // updateIntegrationRules(quiz.backendId.toString(), body); + // } + + handleCloseModal(); + }; + + + const closeSpecialPage = () => setSpecialPage("") + + const steps = [ + { + title: "Выбор воронки", + desc: "На этом этапе вы можете выбрать нужную воронку и ответственного за сделку", + isSettingsAvailable: true, + component: ( + + ), + }, + { + title: "Выбор этапа воронки", + desc: "На этом этапе вы можете выбрать нужный этап и ответственного за сделку", + isSettingsAvailable: true, + component: ( + + ), + }, + { + title: "Сделка", + desc: "На этом этапе вы можете выбрать ответственного за сделку", + isSettingsAvailable: true, + component: ( + + ), + }, + { + title: "Добавление тегов", + isSettingsAvailable: true, + component: ( + { }} + handleAddTag={handleAddTagQuestion} + handlePrevStep={handlePrevStep} + handleNextStep={handleNextStep} + /> + ), + }, + { + title: "Соотнесение вопросов и сущностей", + isSettingsAvailable: true, + component: ( + + ), + }, + ] + + const stepTitles = steps.map((step) => step.title); + + switch (specialPage) { + case "deleteCell": + return + case "removeAccount": + return + case "settingsBlock": + return u.id === selectedDealUser)?.title || "не указан"} + selectedFunnel={arrayOfPipelines.find((p) => p.id === selectedPipeline)?.title || "нет данных"} + selectedStage={ + arrayOfPipelinesSteps.find((s) => s.id === selectedPipelineStep)?.title || "нет данных" + } + selectedQuestions={selectedQuestions} + selectedTags={selectedTags} + /> + case "amoLogin": return + case "accountInfo": return + + + default: {steps[step].component} + } +} + +// const S = setSpecialPage("removeAccount")} + // /> + + +// title: accountInfo ? "Информация об аккаунте" : "Авторизация в аккаунте", +// isSettingsAvailable: false, +// component: accountInfo ? ( +// +// ) : ( +// +// ), +// }, \ No newline at end of file diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoTags/AmoTags.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Tags/AmoTags.tsx similarity index 96% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoTags/AmoTags.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Tags/AmoTags.tsx index e02bcdaf..b7329f67 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoTags/AmoTags.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Tags/AmoTags.tsx @@ -1,6 +1,6 @@ import { FC, useState } from "react"; import { Box } from "@mui/material"; -import { ItemsSelectionView } from "../AmoQuestions/ItemsSelectionView/ItemsSelectionView"; +import { ItemsSelectionView } from "../Questions/ItemsSelectionView/ItemsSelectionView"; import { TagsDetailsView } from "./TagsDetailsView/TagsDetailsView"; import { MinifiedData, QuestionKeys, SelectedTags, TagKeys, TagQuestionHC } from "../types"; import { DataConstrictor } from "../Components/DataConstrictor"; diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoTags/TagsDetailsView/TagsDetailsView.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Tags/TagsDetailsView/TagsDetailsView.tsx similarity index 95% rename from src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoTags/TagsDetailsView/TagsDetailsView.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Amo/Tags/TagsDetailsView/TagsDetailsView.tsx index 398c42e8..499743a7 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/AmoTags/TagsDetailsView/TagsDetailsView.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/Tags/TagsDetailsView/TagsDetailsView.tsx @@ -1,7 +1,7 @@ import { Box, Typography, useMediaQuery, useTheme } from "@mui/material"; -import { StepButtonsBlock } from "../../StepButtonsBlock/StepButtonsBlock"; +import { StepButtonsBlock } from "../../StepButtonsBlock"; import { FC } from "react"; -import { Item } from "../../AmoQuestions/Item/Item"; +import { Item } from "../../Questions/Item/Item"; import { MinifiedData, SelectedTags, TagKeys } from "../../types"; type TagsDetailsViewProps = { diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx new file mode 100644 index 00000000..ef2ce17b --- /dev/null +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx @@ -0,0 +1,166 @@ +import { FC, useState } from "react"; +import { Dialog, IconButton, Typography, useMediaQuery, useTheme, Box, Skeleton } from "@mui/material"; +import { useQuestions } from "@/stores/questions/hooks"; +import { redirect, useNavigate } from "react-router-dom"; + +import CloseIcon from "@mui/icons-material/Close"; + +import { useAmoIntegration } from "./useAmoIntegration"; +import { MinifiedData } from "./types"; +import { Quiz } from "@/model/quiz/quiz"; +import { SwitchPages } from "./SwitchPages"; + +type IntegrationsModalProps = { + isModalOpen: boolean; + handleCloseModal: () => void; + companyName: string | null; + quiz: Quiz; +}; + +export const AmoCRMModal: FC = ({ isModalOpen, handleCloseModal, companyName, quiz }) => { + //Если нет контекста квиза, то и делать на этой страничке нечего + if (quiz.backendId === undefined) { + redirect("/list"); + return null; + } + + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down(600)); + const isTablet = useMediaQuery(theme.breakpoints.down(1000)); + + const { questions } = useQuestions(); + + const [isTryRemoveAccount, setIsTryRemoveAccount] = useState(false); + + const { + isLoadingPage, + firstRules, + accountInfo, + arrayOfPipelines, + arrayOfPipelinesSteps, + arrayOfUsers, + arrayOfTags, + arrayOfFields, + selectedPipeline, + setSelectedPipeline, + selectedCurrentFields, + selectedPipelineStep, + setSelectedPipelineStep, + selectedDealUser, + setSelectedDealPerformer, + questionsBackend, + selectedTags, + setSelectedTags, + selectedQuestions, + setSelectedQuestions, + setPageOfPipelines, + setPageOfPipelinesSteps, + setPageOfUsers, + setPageOfTags, + setSelectedCurrentFields, + } = useAmoIntegration({ + quizID: quiz.backendId, + isModalOpen, + isTryRemoveAccount, + questions, + }); + + return ( + + + + Интеграция с {companyName ? companyName : "партнером"} + + + + + + + {isLoadingPage ? + : + + } + + + ); +}; + +export const diffArr = (arr_A: MinifiedData[], arr_B: MinifiedData[]) => { + return arr_A.filter(person_A => !arr_B.some(person_B => person_A.id === person_B.id)); +} \ No newline at end of file diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts b/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts index e20b272d..28abadf6 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts @@ -13,6 +13,7 @@ import { getFields, } from "@/api/integration"; import { AnyTypedQuizQuestion } from "@frontend/squzanswerer"; +import { UntypedQuizQuestion } from "@/model/questionTypes/shared"; const SIZE = 275; @@ -20,7 +21,7 @@ interface Props { isModalOpen: boolean; isTryRemoveAccount: boolean; quizID: number; - questions: AnyTypedQuizQuestion + questions: (AnyTypedQuizQuestion | UntypedQuizQuestion)[] } const FCTranslate = { @@ -151,6 +152,22 @@ export const useAmoIntegration = ({ isModalOpen, isTryRemoveAccount, quizID, que }, [isModalOpen, isTryRemoveAccount]); + useEffect(() => { + const transletedQuestions = {} + + Object.keys(selectedQuestions).forEach((column) => { + selectedQuestions[column].forEach((minifiedData) => { + const q = questions.find(e => e.backendId === Number(minifiedData.id)) || {} + transletedQuestions[column] = { + ...minifiedData, + title: q.title || transletedQuestions[column].title + } + }) + }) + + setSelectedQuestions(transletedQuestions) + }, [questions]) + useEffect(() => { getPipelines({ page: pageOfPipelines, diff --git a/src/pages/IntegrationsPage/PartnersBoard/PartnersBoard.tsx b/src/pages/IntegrationsPage/PartnersBoard/PartnersBoard.tsx index 9834371e..48983487 100644 --- a/src/pages/IntegrationsPage/PartnersBoard/PartnersBoard.tsx +++ b/src/pages/IntegrationsPage/PartnersBoard/PartnersBoard.tsx @@ -16,7 +16,7 @@ const AnalyticsModal = lazy(() => ); const AmoCRMModal = lazy(() => - import("../IntegrationsModal/Amo/AmoCRMModal").then((module) => ({ + import("../IntegrationsModal/Amo").then((module) => ({ default: module.AmoCRMModal, })) );