frontPanel/src/pages/IntegrationsPage/IntegrationsModal/IntegrationStep7/AmoStep7.tsx

112 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-04-16 10:57:38 +00:00
import { useTheme } from "@mui/material";
import {
Dispatch,
FC,
SetStateAction,
useCallback,
useMemo,
useState,
} from "react";
import { ItemsSelectionView } from "./ItemsSelectionView/ItemsSelectionView";
import { ItemDetailsView } from "./ItemDetailsView/ItemDetailsView";
import { TagQuestionObject, TitleKeys, TQuestionEntity } from "../AmoCRMModal";
2024-04-16 10:57:38 +00:00
import Box from "@mui/material/Box";
import type { AllTypesQuestion } from "@model/questionTypes/shared"
import { getQuestionById } from "@/stores/questions/actions";
import { useQuestionsStore } from "@/stores/questions/store";
2024-04-12 15:07:37 +00:00
type Props = {
handlePrevStep: () => void;
handleNextStep: () => void;
questionEntity: TQuestionEntity;
setQuestionEntity: Dispatch<SetStateAction<TQuestionEntity>>;
questions: AllTypesQuestion[];
2024-04-12 15:07:37 +00:00
};
export const AmoStep7: FC<Props> = ({
handlePrevStep,
handleNextStep,
questionEntity,
setQuestionEntity,
questions,
2024-04-12 15:07:37 +00:00
}) => {
const theme = useTheme();
2024-04-16 10:57:38 +00:00
const [isSelection, setIsSelection] = useState<boolean>(false);
const [activeItem, setActiveItem] = useState<string | null>(null);
const [selectedValue, setSelectedValue] = useState<string | null>(null);
const handleAdd = useCallback(() => {
if (!activeItem || !selectedValue) return;
setQuestionEntity((prevState) => ({
2024-04-16 10:57:38 +00:00
...prevState,
[activeItem]: [...prevState[activeItem as TitleKeys], selectedValue],
2024-04-16 10:57:38 +00:00
}));
}, [activeItem, setQuestionEntity, selectedValue]);
2024-04-16 10:57:38 +00:00
const items: TagQuestionObject[] = useMemo(
() => Object.values(questions)
.filter(({ type }) =>
type !== "result"
&& type !== null)
.map(({ backendId, title }) => ({
backendId: backendId.toString(),
title
})),
2024-04-16 10:57:38 +00:00
[],
);
const translatedQuestionEntity = useMemo(() => {
const translated = {} as TQuestionEntity;
for (let key in questionEntity) {
// /* ... делать что-то с obj[key] ... */
translated[key] = questionEntity[key].map((id) =>
questions.find((q) => q.backendId === Number(id))?.title || id
)
}
console.log("questionEntity", questionEntity)
console.log("translated", translated)
return translated
},
[questionEntity],
)
2024-04-16 10:57:38 +00:00
2024-04-12 15:07:37 +00:00
return (
<Box
sx={{
display: "flex",
flexDirection: "column",
height: "100%",
flexGrow: 1,
}}
>
2024-04-16 10:57:38 +00:00
{isSelection ? (
<ItemsSelectionView
items={items}
type="typeQuestions"
2024-04-16 10:57:38 +00:00
selectedValue={selectedValue}
setSelectedValue={setSelectedValue}
onSmallBtnClick={() => {
setActiveItem(null);
setIsSelection(false);
}}
onLargeBtnClick={() => {
handleAdd();
setActiveItem(null);
setIsSelection(false);
}}
/>
) : (
<ItemDetailsView
2024-04-16 10:57:38 +00:00
setIsSelection={setIsSelection}
handleLargeBtn={handleNextStep}
handleSmallBtn={handlePrevStep}
questionEntity={translatedQuestionEntity}
2024-04-16 10:57:38 +00:00
setActiveItem={setActiveItem}
2024-04-12 15:07:37 +00:00
/>
2024-04-16 10:57:38 +00:00
)}
2024-04-12 15:07:37 +00:00
</Box>
);
};