From 2c5c525c997d7c620b798bcd0fb517587a54ad0f Mon Sep 17 00:00:00 2001 From: "dev.daminik00" Date: Thu, 9 Oct 2025 00:45:32 +0200 Subject: [PATCH] add screen to funnel soulmate --- public/funnels/soulmate.json | 50 +++++++++++++++++-- .../admin/builder/Sidebar/BuilderSidebar.tsx | 48 +++++++++++++++++- .../templates/ListTemplate/ListTemplate.tsx | 10 +--- src/lib/funnel/bakedFunnels.ts | 50 +++++++++++++++++-- 4 files changed, 139 insertions(+), 19 deletions(-) diff --git a/public/funnels/soulmate.json b/public/funnels/soulmate.json index bfc045c..1ef75d5 100644 --- a/public/funnels/soulmate.json +++ b/public/funnels/soulmate.json @@ -124,7 +124,7 @@ }, "navigation": { "rules": [], - "defaultNextScreenId": "relationship-status", + "defaultNextScreenId": "partner-gender", "isEndScreen": false }, "list": { @@ -147,6 +147,50 @@ }, "variants": [] }, + { + "id": "partner-gender", + "template": "list", + "header": { + "showBackButton": true, + "show": true + }, + "title": { + "text": "Кто вас интересует?", + "show": true, + "font": "manrope", + "weight": "bold", + "size": "2xl", + "align": "left", + "color": "default" + }, + "bottomActionButton": { + "show": false, + "cornerRadius": "3xl", + "showPrivacyTermsConsent": false + }, + "navigation": { + "rules": [], + "defaultNextScreenId": "relationship-status", + "isEndScreen": false + }, + "list": { + "selectionType": "single", + "options": [ + { + "id": "male", + "label": "Male", + "disabled": false + }, + { + "id": "female", + "label": "Female", + "disabled": false + } + ], + "registrationFieldKey": "partner.gender" + }, + "variants": [] + }, { "id": "relationship-status", "template": "list", @@ -2268,10 +2312,6 @@ "cornerRadius": "3xl", "showPrivacyTermsConsent": false }, - "navigation": { - "rules": [], - "isEndScreen": false - }, "variants": [], "headerBlock": { "text": { diff --git a/src/components/admin/builder/Sidebar/BuilderSidebar.tsx b/src/components/admin/builder/Sidebar/BuilderSidebar.tsx index 3c08c27..98cd925 100644 --- a/src/components/admin/builder/Sidebar/BuilderSidebar.tsx +++ b/src/components/admin/builder/Sidebar/BuilderSidebar.tsx @@ -28,7 +28,7 @@ export function BuilderSidebar() { const dispatch = useBuilderDispatch(); const selectedScreen = useBuilderSelectedScreen(); - const [activeTab, setActiveTab] = useState<"funnel" | "screen">( + const [activeTab, setActiveTab] = useState<"funnel" | "screen" | "data">( selectedScreen ? "screen" : "funnel" ); const selectedScreenId = selectedScreen?.id ?? null; @@ -360,6 +360,18 @@ export function BuilderSidebar() { > Экран + @@ -478,6 +490,40 @@ export function BuilderSidebar() { + ) : activeTab === "data" ? ( +
+
+ {state.screens + .filter((screen) => screen.template === "list") + .map((screen) => ( +
+
+ {screen.id} +
+
+ {isListScreen(screen) && + screen.list.options.map((option) => ( + + {option.id} + + ))} +
+
+ ))} + {state.screens.filter((screen) => screen.template === "list") + .length === 0 && ( +
+ Нет list экранов +
+ )} +
+
) : selectedScreen ? (
{/* Валидация всегда вверху, без заголовка */} diff --git a/src/components/funnel/templates/ListTemplate/ListTemplate.tsx b/src/components/funnel/templates/ListTemplate/ListTemplate.tsx index 771acc9..6b646e9 100644 --- a/src/components/funnel/templates/ListTemplate/ListTemplate.tsx +++ b/src/components/funnel/templates/ListTemplate/ListTemplate.tsx @@ -67,13 +67,6 @@ export function ListTemplate({ ? buttons.filter((button) => selectionSet.has(String(button.id))) : null; - const handleRadioChange: RadioAnswersListProps["onChangeSelectedAnswer"] = ( - answer - ) => { - const id = stringId(answer?.id); - onSelectionChange(id ? [id] : []); - }; - const handleRadioAnswerClick: RadioAnswersListProps["onAnswerClick"] = ( answer ) => { @@ -93,7 +86,8 @@ export function ListTemplate({ const radioContent: RadioAnswersListProps = { answers: buttons, activeAnswer, - onChangeSelectedAnswer: handleRadioChange, + // Не передаем onChangeSelectedAnswer чтобы избежать двойного вызова при клике + // onAnswerClick достаточно для обработки выбора onAnswerClick: handleRadioAnswerClick, }; diff --git a/src/lib/funnel/bakedFunnels.ts b/src/lib/funnel/bakedFunnels.ts index 00e7294..efad31b 100644 --- a/src/lib/funnel/bakedFunnels.ts +++ b/src/lib/funnel/bakedFunnels.ts @@ -433,7 +433,7 @@ export const BAKED_FUNNELS: Record = { }, "navigation": { "rules": [], - "defaultNextScreenId": "relationship-status", + "defaultNextScreenId": "partner-gender", "isEndScreen": false }, "list": { @@ -456,6 +456,50 @@ export const BAKED_FUNNELS: Record = { }, "variants": [] }, + { + "id": "partner-gender", + "template": "list", + "header": { + "showBackButton": true, + "show": true + }, + "title": { + "text": "Кто вас интересует?", + "show": true, + "font": "manrope", + "weight": "bold", + "size": "2xl", + "align": "left", + "color": "default" + }, + "bottomActionButton": { + "show": false, + "cornerRadius": "3xl", + "showPrivacyTermsConsent": false + }, + "navigation": { + "rules": [], + "defaultNextScreenId": "relationship-status", + "isEndScreen": false + }, + "list": { + "selectionType": "single", + "options": [ + { + "id": "male", + "label": "Male", + "disabled": false + }, + { + "id": "female", + "label": "Female", + "disabled": false + } + ], + "registrationFieldKey": "partner.gender" + }, + "variants": [] + }, { "id": "relationship-status", "template": "list", @@ -2577,10 +2621,6 @@ export const BAKED_FUNNELS: Record = { "cornerRadius": "3xl", "showPrivacyTermsConsent": false }, - "navigation": { - "rules": [], - "isEndScreen": false - }, "variants": [], "headerBlock": { "text": {