diff --git a/CHANGELOG.md b/CHANGELOG.md index 111d16d2..b89913fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +1.0.15 _ 2025-12-03 _ Merge branch 'pin' into staging 1.0.14 _ 2025-10-20 _ логика overtime для публички 1.0.13 _ 2025-10-18 _ Визуал utm + логика 1.0.12 _ 2025-10-12 _ ютм с дизайном и беком, но без логики diff --git a/src/api/bitrixIntegration.ts b/src/api/bitrixIntegration.ts index 4d8ad86d..86822743 100644 --- a/src/api/bitrixIntegration.ts +++ b/src/api/bitrixIntegration.ts @@ -16,13 +16,10 @@ const API_URL = `${process.env.REACT_APP_DOMAIN}/squiz/bitrix`; export type AccountResponse = { id: number; accountID: string; - amoID: number; - name: string; + bitrixID: number; deleted: boolean; createdAt: string; subdomain: string; - country: string; - driveURL: string; stale: boolean; }; @@ -56,10 +53,13 @@ export function useBitrixAccount() { export const connectBitrix = async (): Promise<[string | null, string?]> => { try { - const response = await makeRequest({ + const response = await makeRequest<{client_bitrix_url: string}, { link: string }>({ method: "POST", url: `${API_URL}/account`, useToken: true, + body: { + client_bitrix_url: 'penadigitaltech.bitrix24.ru' + }, withCredentials: true, }); return [response.link]; @@ -125,16 +125,18 @@ export const getTags = async ({ page, size }: PaginationRequest): Promise<[TagsR export type User = { id: number; - amoID: number; + accountID: string; + bitrixUserID: string; name: string; + lastName: string; + secondName: string; + title: string; email: string; - role: number; - group: number; + uf_department: [ number ]; deleted: boolean; createdAt: string; - amoUserID: number; + workPosition: string; }; - export type UsersResponse = { count: number; items: User[]; @@ -157,13 +159,16 @@ export const getUsers = async ({ page, size }: PaginationRequest): Promise<[User export type Step = { ID: number; - AmoID: number; - PipelineID: number; - AccountID: number; - Name: string; - Color: string; - Deleted: boolean; - CreatedAt: number; + accountID: string; + bitrixID: string; + entityID: string; + statusID: string; + name: string; + nameInit: string; + color: string; + pipelineID: number; + deleted: boolean; + createdAt: number; }; export type StepsResponse = { @@ -192,12 +197,12 @@ export const getSteps = async ({ export type Pipeline = { ID: number; - AmoID: number; - AccountID: number; - Name: string; - IsArchive: boolean; - Deleted: boolean; - CreatedAt: number; + bitrixID: number; + accountID: number; + name: string; + entityTypeId: boolean; + deleted: boolean; + createdAt: number; }; export type PipelinesResponse = { @@ -310,15 +315,16 @@ export type CustomField = { }; export type Field = { ID: number; - AmoID: number; - Code: string; - AccountID: number; - Name: string; - Entity: string; - Type: string; - Deleted: boolean; - CreatedAt: number; + accountID: string; + bitrixID: string; + entityID: string; + fieldName: string; + editFromLabel: string; + fieldType: string; + deleted: boolean; + createdAt: number; }; + export type CustomFieldsResponse = { count: number; items: CustomField[]; diff --git a/src/components/CustomRadioGroup/CustomRadioGroup.tsx b/src/components/CustomRadioGroup/CustomRadioGroup.tsx index 1df2888a..1cbefa8e 100644 --- a/src/components/CustomRadioGroup/CustomRadioGroup.tsx +++ b/src/components/CustomRadioGroup/CustomRadioGroup.tsx @@ -24,6 +24,8 @@ export const CustomRadioGroup: FC = ({ const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(600)); + console.log("CustomRadioGroup") + console.log(items) const currentItem = (selectedItemId !== null && selectedItemId.length > 0) ? items.find((item) => item.id === selectedItemId) || null diff --git a/src/components/CustomSelect/CustomSelect.tsx b/src/components/CustomSelect/CustomSelect.tsx index e7426d6e..9723c4ac 100644 --- a/src/components/CustomSelect/CustomSelect.tsx +++ b/src/components/CustomSelect/CustomSelect.tsx @@ -26,6 +26,7 @@ export const CustomSelect: FC = ({ items, selectedItemId, set const currentItem = useMemo(() => items.find((item) => item.id === selectedItemId) || null, [selectedItemId, items]); + const menuItems = useMemo(() => { if (items.length !== 0) { return items.map((item) => ( diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts b/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts index a5a106df..8bc482e9 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/useAmoIntegration.ts @@ -113,21 +113,23 @@ export const useAmoIntegration = ({ isModalOpen, isTryRemoveAccount, quizID, que ) { const gottenList = settingsResponse.FieldsRule[key as QuestionKeys]; - if (gottenList !== null) { - Object.keys(gottenList.QuestionID).forEach((qId) => { - const q = questions.find(e => e.backendId === Number(qId)) || {} + console.log("gottenList-----") + console.log(gottenList) + // if (gottenList !== null) { + // Object.keys(gottenList.QuestionID).forEach((qId) => { + // const q = questions.find(e => e.backendId === Number(qId)) || {} - if (gottenQuestions[key as QuestionKeys] === undefined) gottenQuestions[key as QuestionKeys] = [] + // if (gottenQuestions[key as QuestionKeys] === undefined) gottenQuestions[key as QuestionKeys] = [] - gottenQuestions[key as QuestionKeys].push({ - id: qId, - title: q.title, - entity: key, + // gottenQuestions[key as QuestionKeys].push({ + // id: qId, + // title: q.title, + // entity: key, - }) - }) + // }) + // }) - } + // } if (key === "Contact") { const MAP = settingsResponse.FieldsRule[key as QuestionKeys].ContactRuleMap diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AccountInfo.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AccountInfo.tsx index f7dfb6be..4adee06f 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AccountInfo.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AccountInfo.tsx @@ -4,13 +4,13 @@ import { FC } from "react"; import { AccountResponse } from "@/api/bitrixIntegration"; import AccountSetting from "@icons/AccountSetting"; -type AmoAccountInfoProps = { +type BitrixAccountInfoProps = { handleNextStep: () => void; accountInfo: AccountResponse | null; toChangeAccount: () => void; }; -export const AccountInfo: FC = ({ handleNextStep, accountInfo, toChangeAccount }) => { +export const AccountInfo: FC = ({ handleNextStep, accountInfo, toChangeAccount }) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(600)); @@ -119,11 +119,9 @@ export const AccountInfo: FC = ({ handleNextStep, accountIn > 1 шаг - {infoItem("Amo ID", accountInfo?.amoID)} - {infoItem("Имя аккаунта", accountInfo?.name)} - {infoItemLink("ЛК в amo", `https://${accountInfo?.subdomain}/dashboard/`)} - {infoItemLink("Профиль пользователя в amo", `https://${accountInfo?.subdomain}/settings/users/`)} - {infoItem("Страна пользователя", accountInfo?.country)} + {infoItem("Bitrix ID", accountInfo?.bitrixID)} + {/* {infoItemLink("ЛК в bitrix", `https://${accountInfo?.subdomain}/dashboard/`)} + {infoItemLink("Профиль пользователя в bitrix", `https://${accountInfo?.subdomain}/settings/users/`)} */} diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AmoLogin.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/BitrixLogin.tsx similarity index 98% rename from src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AmoLogin.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Bitrix/BitrixLogin.tsx index 5cb19b90..b4a411b2 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AmoLogin.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/BitrixLogin.tsx @@ -22,7 +22,7 @@ type IntegrationStep1Props = { // password: string().required("Поле обязательно").min(8, "Минимум 8 символов"), // }); -export const AmoLogin: FC = ({ handleNextStep }) => { +export const BitrixLogin: FC = ({ handleNextStep }) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(600)); diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AmoTokenExpiredDialog.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/BitrixTokenExpiredDialog.tsx similarity index 80% rename from src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AmoTokenExpiredDialog.tsx rename to src/pages/IntegrationsPage/IntegrationsModal/Bitrix/BitrixTokenExpiredDialog.tsx index ee5113f1..2d6ecb12 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/AmoTokenExpiredDialog.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Bitrix/BitrixTokenExpiredDialog.tsx @@ -1,5 +1,5 @@ import { connectBitrix } from "@/api/bitrixIntegration"; -import { setTryShowAmoTokenExpiredDialog } from "@/stores/uiTools/actions"; +import { setTryShowBitrixTokenExpiredDialog } from "@/stores/uiTools/actions"; import { useUiTools } from "@/stores/uiTools/store"; import CustomCheckbox from "@/ui_kit/CustomCheckbox"; import { Box, Button, Dialog, Typography, useTheme } from "@mui/material"; @@ -9,17 +9,17 @@ import { useLocation } from "react-router-dom"; const HIDE_DIALOG_EXPIRATION_PERIOD = 24 * 60 * 60 * 1000; interface Props { - isAmoTokenExpired: boolean; + isBitrixTokenExpired: boolean; } -export default function AmoTokenExpiredDialog({ isAmoTokenExpired }: Props) { +export default function BitrixTokenExpiredDialog({ isBitrixTokenExpired }: Props) { const theme = useTheme(); - const tryShowAmoTokenExpiredDialog = useUiTools((state) => state.tryShowAmoTokenExpiredDialog); + const tryShowBitrixTokenExpiredDialog = useUiTools((state) => state.tryShowBitrixTokenExpiredDialog); const [isHideDialogForADayChecked, setIsHideDialogForADayChecked] = useState(false); // const { hash, pathname, search } = useLocation(); const location = useLocation(); - const onAmoClick = async () => { + const onBitrixClick = async () => { const [url, error] = await connectBitrix(); if (url && !error) { window.open(url, "_blank"); @@ -29,19 +29,19 @@ export default function AmoTokenExpiredDialog({ isAmoTokenExpired }: Props) { function handleDialogClose() { if (isHideDialogForADayChecked) { const expirationDate = Date.now() + HIDE_DIALOG_EXPIRATION_PERIOD; - localStorage.setItem("hideAmoTokenExpiredDialogExpirationTime", expirationDate.toString()); + localStorage.setItem("hideBitrixTokenExpiredDialogExpirationTime", expirationDate.toString()); } - setTryShowAmoTokenExpiredDialog(false); + setTryShowBitrixTokenExpiredDialog(false); } useEffect(() => { - setTryShowAmoTokenExpiredDialog(true); + setTryShowBitrixTokenExpiredDialog(true); }, [location]); return (