@redneckz/wildless-cms-uni-blocks 0.14.1014 → 0.14.1016
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/api/LeadServiceAPI.d.ts +7 -0
- package/bundle/api/sendUserSurvey.d.ts +8 -0
- package/bundle/bundle.umd.js +137 -13
- package/bundle/bundle.umd.min.js +1 -1
- package/bundle/ui-kit/DialogManager/Dialog.d.ts +1 -1
- package/bundle/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/bundle/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
- package/bundle/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
- package/bundle/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
- package/bundle/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
- package/bundle/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
- package/bundle/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
- package/bundle/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
- package/dist/api/LeadServiceAPI.d.ts +7 -0
- package/dist/api/LeadServiceAPI.js +6 -5
- package/dist/api/LeadServiceAPI.js.map +1 -1
- package/dist/api/sendUserSurvey.d.ts +8 -0
- package/dist/api/sendUserSurvey.js +15 -0
- package/dist/api/sendUserSurvey.js.map +1 -0
- package/dist/components/ContentPage/ContentPage.js +2 -0
- package/dist/components/ContentPage/ContentPage.js.map +1 -1
- package/dist/ui-kit/DialogManager/Dialog.d.ts +1 -1
- package/dist/ui-kit/DialogManager/Dialog.js +1 -0
- package/dist/ui-kit/DialogManager/Dialog.js.map +1 -1
- package/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/dist/ui-kit/TabsControl/TabItemInner.js +2 -2
- package/dist/ui-kit/TabsControl/TabItemInner.js.map +1 -1
- package/dist/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
- package/dist/ui-kit/UserSurveyDialog/FinalStep.js +10 -0
- package/dist/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
- package/dist/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
- package/dist/ui-kit/UserSurveyDialog/FirstStep.js +24 -0
- package/dist/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
- package/dist/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
- package/dist/ui-kit/UserSurveyDialog/SecondStep.js +23 -0
- package/dist/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
- package/dist/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
- package/dist/ui-kit/UserSurveyDialog/Star.js +9 -0
- package/dist/ui-kit/UserSurveyDialog/Star.js.map +1 -0
- package/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
- package/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js +48 -0
- package/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
- package/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
- package/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
- package/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
- package/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
- package/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +48 -0
- package/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
- package/lib/api/LeadServiceAPI.d.ts +7 -0
- package/lib/api/LeadServiceAPI.js +1 -1
- package/lib/api/LeadServiceAPI.js.map +1 -1
- package/lib/api/sendUserSurvey.d.ts +8 -0
- package/lib/api/sendUserSurvey.js +12 -0
- package/lib/api/sendUserSurvey.js.map +1 -0
- package/lib/common.css +1 -1
- package/lib/components/ContentPage/ContentPage.js +2 -0
- package/lib/components/ContentPage/ContentPage.js.map +1 -1
- package/lib/ui-kit/DialogManager/Dialog.d.ts +1 -1
- package/lib/ui-kit/DialogManager/Dialog.js +1 -0
- package/lib/ui-kit/DialogManager/Dialog.js.map +1 -1
- package/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/lib/ui-kit/TabsControl/TabItemInner.js +2 -2
- package/lib/ui-kit/TabsControl/TabItemInner.js.map +1 -1
- package/lib/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
- package/lib/ui-kit/UserSurveyDialog/FinalStep.js +8 -0
- package/lib/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
- package/lib/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
- package/lib/ui-kit/UserSurveyDialog/FirstStep.js +22 -0
- package/lib/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
- package/lib/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
- package/lib/ui-kit/UserSurveyDialog/SecondStep.js +21 -0
- package/lib/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
- package/lib/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
- package/lib/ui-kit/UserSurveyDialog/Star.js +7 -0
- package/lib/ui-kit/UserSurveyDialog/Star.js.map +1 -0
- package/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
- package/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js +46 -0
- package/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
- package/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
- package/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
- package/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
- package/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
- package/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +45 -0
- package/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
- package/mobile/bundle/api/LeadServiceAPI.d.ts +7 -0
- package/mobile/bundle/api/sendUserSurvey.d.ts +8 -0
- package/mobile/bundle/bundle.umd.js +137 -13
- package/mobile/bundle/bundle.umd.min.js +1 -1
- package/mobile/bundle/ui-kit/DialogManager/Dialog.d.ts +1 -1
- package/mobile/bundle/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/mobile/bundle/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
- package/mobile/bundle/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
- package/mobile/bundle/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
- package/mobile/bundle/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
- package/mobile/bundle/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
- package/mobile/bundle/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
- package/mobile/bundle/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
- package/mobile/dist/api/LeadServiceAPI.d.ts +7 -0
- package/mobile/dist/api/LeadServiceAPI.js +6 -5
- package/mobile/dist/api/LeadServiceAPI.js.map +1 -1
- package/mobile/dist/api/sendUserSurvey.d.ts +8 -0
- package/mobile/dist/api/sendUserSurvey.js +15 -0
- package/mobile/dist/api/sendUserSurvey.js.map +1 -0
- package/mobile/dist/components/ContentPage/ContentPage.js +2 -0
- package/mobile/dist/components/ContentPage/ContentPage.js.map +1 -1
- package/mobile/dist/ui-kit/DialogManager/Dialog.d.ts +1 -1
- package/mobile/dist/ui-kit/DialogManager/Dialog.js +1 -0
- package/mobile/dist/ui-kit/DialogManager/Dialog.js.map +1 -1
- package/mobile/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/mobile/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/mobile/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/mobile/dist/ui-kit/TabsControl/TabItemInner.js +2 -2
- package/mobile/dist/ui-kit/TabsControl/TabItemInner.js.map +1 -1
- package/mobile/dist/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/FinalStep.js +10 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/FirstStep.js +24 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/SecondStep.js +23 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/Star.js +9 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/Star.js.map +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js +48 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +48 -0
- package/mobile/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
- package/mobile/lib/api/LeadServiceAPI.d.ts +7 -0
- package/mobile/lib/api/LeadServiceAPI.js +1 -1
- package/mobile/lib/api/LeadServiceAPI.js.map +1 -1
- package/mobile/lib/api/sendUserSurvey.d.ts +8 -0
- package/mobile/lib/api/sendUserSurvey.js +12 -0
- package/mobile/lib/api/sendUserSurvey.js.map +1 -0
- package/mobile/lib/common.css +1 -1
- package/mobile/lib/components/ContentPage/ContentPage.js +2 -0
- package/mobile/lib/components/ContentPage/ContentPage.js.map +1 -1
- package/mobile/lib/ui-kit/DialogManager/Dialog.d.ts +1 -1
- package/mobile/lib/ui-kit/DialogManager/Dialog.js +1 -0
- package/mobile/lib/ui-kit/DialogManager/Dialog.js.map +1 -1
- package/mobile/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/mobile/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/mobile/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/mobile/lib/ui-kit/TabsControl/TabItemInner.js +2 -2
- package/mobile/lib/ui-kit/TabsControl/TabItemInner.js.map +1 -1
- package/mobile/lib/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/FinalStep.js +8 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/FirstStep.js +22 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/SecondStep.js +21 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/Star.js +7 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/Star.js.map +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js +46 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +45 -0
- package/mobile/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
- package/mobile/src/api/LeadServiceAPI.ts +1 -1
- package/mobile/src/api/sendUserSurvey.ts +20 -0
- package/mobile/src/components/ContentPage/ContentPage.tsx +2 -0
- package/mobile/src/ui-kit/DialogManager/Dialog.tsx +2 -1
- package/mobile/src/ui-kit/RadioButtonGroup/RadioButtonGroup.tsx +2 -2
- package/mobile/src/ui-kit/TabsControl/TabItemInner.tsx +2 -2
- package/mobile/src/ui-kit/UserSurveyDialog/FinalStep.tsx +14 -0
- package/mobile/src/ui-kit/UserSurveyDialog/FirstStep.tsx +50 -0
- package/mobile/src/ui-kit/UserSurveyDialog/SecondStep.tsx +57 -0
- package/mobile/src/ui-kit/UserSurveyDialog/Star.tsx +28 -0
- package/mobile/src/ui-kit/UserSurveyDialog/UserSurveyDialog.tsx +80 -0
- package/mobile/src/ui-kit/UserSurveyDialog/UserSurveyDialogContent.ts +31 -0
- package/mobile/src/ui-kit/UserSurveyDialog/useUserSurveyDialog.ts +56 -0
- package/package.json +1 -1
- package/src/api/LeadServiceAPI.ts +1 -1
- package/src/api/sendUserSurvey.ts +20 -0
- package/src/components/ContentPage/ContentPage.tsx +2 -0
- package/src/ui-kit/DialogManager/Dialog.tsx +2 -1
- package/src/ui-kit/RadioButtonGroup/RadioButtonGroup.tsx +2 -2
- package/src/ui-kit/TabsControl/TabItemInner.tsx +2 -2
- package/src/ui-kit/UserSurveyDialog/FinalStep.tsx +14 -0
- package/src/ui-kit/UserSurveyDialog/FirstStep.tsx +50 -0
- package/src/ui-kit/UserSurveyDialog/SecondStep.tsx +57 -0
- package/src/ui-kit/UserSurveyDialog/Star.tsx +28 -0
- package/src/ui-kit/UserSurveyDialog/UserSurveyDialog.tsx +80 -0
- package/src/ui-kit/UserSurveyDialog/UserSurveyDialogContent.ts +31 -0
- package/src/ui-kit/UserSurveyDialog/useUserSurveyDialog.ts +56 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@redneckz/uni-jsx/jsx-runtime";
|
|
2
|
+
import { useCallback, useState } from '@redneckz/uni-jsx/lib/hooks';
|
|
3
|
+
import { useBool } from '@redneckz/uni-jsx/lib/hooks/useBool';
|
|
4
|
+
import { useLocalStore } from '@redneckz/uni-jsx/lib/Store/useLocalStore';
|
|
5
|
+
import { sendUserSurvey } from '../../api/sendUserSurvey.js';
|
|
6
|
+
import { Dialog } from '../../ui-kit/DialogManager/Dialog.js';
|
|
7
|
+
import { UniBlock } from '../../UniBlock/UniBlock.js';
|
|
8
|
+
import { noop } from '../../utils/noop.js';
|
|
9
|
+
import { FinalStep } from './FinalStep.js';
|
|
10
|
+
import { FirstStep } from './FirstStep.js';
|
|
11
|
+
import { SecondStep } from './SecondStep.js';
|
|
12
|
+
const STEPS = [FirstStep, SecondStep, FinalStep];
|
|
13
|
+
const LAST_STEP_INDEX = 2;
|
|
14
|
+
export const UserSurveyDialog = UniBlock(({ onClose = noop, reasonsSource = {} }) => {
|
|
15
|
+
const [isSending, { setTrue: startSending, setFalse: endSending }] = useBool(false);
|
|
16
|
+
const [currentRating, setCurrentRating] = useState(0);
|
|
17
|
+
const [currentReason, setCurrentReason] = useState();
|
|
18
|
+
const [step, setStep] = useState(0);
|
|
19
|
+
const userSurveyStore = useLocalStore();
|
|
20
|
+
const surveyType = userSurveyStore.userSurvey?.lastShownType ?? 'NPS';
|
|
21
|
+
const { reasons } = reasonsSource;
|
|
22
|
+
const ActiveStep = STEPS[step];
|
|
23
|
+
const handleNextStep = useCallback(() => {
|
|
24
|
+
setStep((_) => _ + 1);
|
|
25
|
+
}, []);
|
|
26
|
+
const handleSubmit = useCallback(async (message) => {
|
|
27
|
+
startSending();
|
|
28
|
+
await sendUserSurvey({
|
|
29
|
+
rate: currentRating,
|
|
30
|
+
reason: currentReason?.text,
|
|
31
|
+
message: getMessage(currentReason, message),
|
|
32
|
+
url: globalThis.location.href,
|
|
33
|
+
type: surveyType,
|
|
34
|
+
});
|
|
35
|
+
endSending();
|
|
36
|
+
setStep(LAST_STEP_INDEX);
|
|
37
|
+
}, [currentRating, currentReason]);
|
|
38
|
+
return (_jsx(Dialog, { maxWidth: "xl", onClose: onClose, children: _jsx(ActiveStep, { currentRating: currentRating, currentReason: currentReason, reasons: reasons, surveyType: surveyType, isSending: isSending, setCurrentReason: setCurrentReason, setCurrentRating: setCurrentRating, onSubmit: handleSubmit, onNextStep: handleNextStep }) }));
|
|
39
|
+
});
|
|
40
|
+
const getMessage = (currentReason, message) => {
|
|
41
|
+
if (currentReason?.text !== 'Другое') {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return message?.length ? message : 'Другое. Клиент не оставил комментариев';
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=UserSurveyDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserSurveyDialog.js","sourceRoot":"","sources":["../../../src/ui-kit/UserSurveyDialog/UserSurveyDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type JSONRefObject } from '../../data/JSONRefObject';
|
|
2
|
+
import { type OnCloseProps } from '../../model/OnCloseProps';
|
|
3
|
+
import { type UniBlockContent } from '../../UniBlock/UniBlockProps';
|
|
4
|
+
export declare type UserSurveyStoreSlice = {
|
|
5
|
+
userSurvey: {
|
|
6
|
+
lastShownType: 'NPS' | 'CSI';
|
|
7
|
+
nextDueAt: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export declare type Reason = {
|
|
11
|
+
id: string;
|
|
12
|
+
text?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare type StepProps = {
|
|
15
|
+
currentRating?: number;
|
|
16
|
+
currentReason?: Reason;
|
|
17
|
+
reasons?: Reason[];
|
|
18
|
+
surveyType: 'NPS' | 'CSI';
|
|
19
|
+
isSending: boolean;
|
|
20
|
+
setCurrentReason: (value: Reason) => void;
|
|
21
|
+
setCurrentRating: (value: number) => void;
|
|
22
|
+
onSubmit: (message?: string) => void;
|
|
23
|
+
onNextStep: () => void;
|
|
24
|
+
};
|
|
25
|
+
export interface UserSurveyDialogContent extends OnCloseProps, UniBlockContent {
|
|
26
|
+
reasonsSource?: {
|
|
27
|
+
reasons: Reason[];
|
|
28
|
+
} | JSONRefObject;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserSurveyDialogContent.js","sourceRoot":"","sources":["../../../src/ui-kit/UserSurveyDialog/UserSurveyDialogContent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useUserSurveyDialog: () => void;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useEffect } from '@redneckz/uni-jsx/lib/hooks';
|
|
2
|
+
import { useLocalStore } from '@redneckz/uni-jsx/lib/Store/useLocalStore';
|
|
3
|
+
import { useSessionStore } from '@redneckz/uni-jsx/lib/Store/useSessionStore';
|
|
4
|
+
import { noop } from '../../utils/noop.js';
|
|
5
|
+
import { useDialog } from '../DialogManager/useDialog.js';
|
|
6
|
+
import { UserSurveyDialog } from './UserSurveyDialog.js';
|
|
7
|
+
const DELAY = 5 * 60 * 1000;
|
|
8
|
+
// Хук отвечает за показ пользователю опроса
|
|
9
|
+
export const useUserSurveyDialog = () => {
|
|
10
|
+
const userSurveyDialog = useDialog(UserSurveyDialog);
|
|
11
|
+
const userSurveyStore = useLocalStore();
|
|
12
|
+
const sessionStore = useSessionStore();
|
|
13
|
+
const elapsedTime = sessionStore.surveyTimerStart
|
|
14
|
+
? Date.now() - Number.parseInt(sessionStore.surveyTimerStart)
|
|
15
|
+
: 0;
|
|
16
|
+
const openUserSurveyDialog = () => {
|
|
17
|
+
userSurveyStore.userSurvey = {
|
|
18
|
+
lastShownType: userSurveyStore.userSurvey?.lastShownType === 'NPS' ? 'CSI' : 'NPS',
|
|
19
|
+
nextDueAt: getTimeAfter30days(),
|
|
20
|
+
};
|
|
21
|
+
userSurveyDialog.open({
|
|
22
|
+
reasonsSource: {
|
|
23
|
+
$ref: '/wcms-resources/user-survey-reasons.json',
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
// Опрос показывается только если ранее пользоваютелю не показывался опрос или с того момента прошел месяц
|
|
29
|
+
if (!userSurveyStore.userSurvey || userSurveyStore.userSurvey?.nextDueAt <= Date.now()) {
|
|
30
|
+
// начинаем отсчитывать время от первого захода на сайт
|
|
31
|
+
if (!sessionStore.surveyTimerStart) {
|
|
32
|
+
sessionStore.surveyTimerStart = Date.now().toString();
|
|
33
|
+
}
|
|
34
|
+
// Опрос показывается спустя 5 минут нахождения на сайте
|
|
35
|
+
const timeout = setTimeout(openUserSurveyDialog, DELAY - elapsedTime);
|
|
36
|
+
return () => {
|
|
37
|
+
clearTimeout(timeout);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return noop;
|
|
41
|
+
}, []);
|
|
42
|
+
};
|
|
43
|
+
// Отсчитываем месяц с текущей даты
|
|
44
|
+
const getTimeAfter30days = () => Date.now() + 30 * 24 * 60 * 60 * 1000;
|
|
45
|
+
//# sourceMappingURL=useUserSurveyDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserSurveyDialog.js","sourceRoot":"","sources":["../../../src/ui-kit/UserSurveyDialog/useUserSurveyDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAM5B,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,aAAa,EAAwB,CAAC;IAC9D,MAAM,YAAY,GAAG,eAAe,EAAoB,CAAC;IACzD,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB;QAC/C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC;QAC7D,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,eAAe,CAAC,UAAU,GAAG;YAC3B,aAAa,EAAE,eAAe,CAAC,UAAU,EAAE,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAClF,SAAS,EAAE,kBAAkB,EAAE;SAChC,CAAC;QACF,gBAAgB,CAAC,IAAI,CAAC;YACpB,aAAa,EAAE;gBACb,IAAI,EAAE,0CAA0C;aACjD;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,0GAA0G;QAC1G,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACtF,uDAAuD;YACvD,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAClC,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;aACvD;YACD,wDAAwD;YACxD,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;YAEtE,OAAO,GAAG,EAAE;gBACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC,CAAC;SACH;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAEF,mCAAmC;AACnC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -28,6 +28,11 @@ declare type CheckCodeResponse = {
|
|
|
28
28
|
reqId?: string;
|
|
29
29
|
status?: string;
|
|
30
30
|
} | null;
|
|
31
|
+
declare type VerifiedLeadRequest = {
|
|
32
|
+
requestId: string;
|
|
33
|
+
confirmationCode: string;
|
|
34
|
+
leadRequest: LeadRequest;
|
|
35
|
+
};
|
|
31
36
|
declare type PhoneOnly = {
|
|
32
37
|
phone?: string;
|
|
33
38
|
};
|
|
@@ -36,10 +41,12 @@ export declare type sendProps = {
|
|
|
36
41
|
router: Router;
|
|
37
42
|
endpoint?: EndpointType;
|
|
38
43
|
};
|
|
44
|
+
declare type SubmitBody = PhoneOnly | LeadRequest | CheckCodeProps | VerifiedLeadRequest;
|
|
39
45
|
export declare function LeadServiceAPI(): {
|
|
40
46
|
send: ({ body, router, endpoint }: sendProps) => Promise<any>;
|
|
41
47
|
sendCode: ({ phone }: PhoneOnly) => Promise<string | null>;
|
|
42
48
|
checkCode: ({ reqId, code, body, router, endpoint, }: CheckCodeProps) => Promise<CheckCodeResponse>;
|
|
43
49
|
sendPhoneCallRequest: (body: LeadRequest, endpoint?: EndpointType) => Promise<any>;
|
|
44
50
|
};
|
|
51
|
+
export declare const LeadServiceFetch: (url: string, submitBody: SubmitBody) => Promise<Response>;
|
|
45
52
|
export {};
|
|
@@ -1353,6 +1353,7 @@
|
|
|
1353
1353
|
const DIALOG_STYLE = {
|
|
1354
1354
|
sm: 'max-w-sm top-1/3',
|
|
1355
1355
|
lg: 'max-w-lg',
|
|
1356
|
+
xl: 'max-w-xl',
|
|
1356
1357
|
'4xl': 'max-w-4xl',
|
|
1357
1358
|
none: 'mt-0',
|
|
1358
1359
|
};
|
|
@@ -3330,7 +3331,7 @@
|
|
|
3330
3331
|
horizontal: '@lg:flex-row',
|
|
3331
3332
|
vertical: '',
|
|
3332
3333
|
};
|
|
3333
|
-
const RadioButtonGroup = JSX(({ label, items, value, className, disabled = false, orientation = 'horizontal', onChange: onChangeCheckedItem, }) => (jsxs("div", { className: "grid gap-xs whitespace-nowrap", children: [label ? (jsx("div", { role: "radiogroup", "aria-label": label, children: jsx(Text, { color: "text-secondary-text", font: "font-light", children: label }) })) : null, jsx("div", { className: style('flex flex-col gap-s', orientationStyleMap[orientation], className), role: "radiogroup", "aria-label": "\u0413\u0440\u0443\u043F\u043F\u0430 \u043A\u043D\u043E\u043F\u043E\u043A", children: items?.map(({ id, text }) => (jsx(Checkbox, { isRadio: true, text: text, value: value === id, onChange: () => onChangeCheckedItem?.(id), disabled: disabled, name: id }, String(id)))) })] })));
|
|
3334
|
+
const RadioButtonGroup = JSX(({ label, items, value, className, disabled = false, orientation = 'horizontal', onChange: onChangeCheckedItem, }) => (jsxs("div", { className: "grid gap-xs whitespace-nowrap", children: [label ? (jsx("div", { role: "radiogroup", "aria-label": label, children: jsx(Text, { color: "text-secondary-text", font: "font-light", children: label }) })) : null, jsx("div", { className: style('flex flex-col gap-s', orientationStyleMap[orientation], className), role: "radiogroup", "aria-label": "\u0413\u0440\u0443\u043F\u043F\u0430 \u043A\u043D\u043E\u043F\u043E\u043A", children: items?.map(({ id, text }) => (jsx(Checkbox, { isRadio: true, text: text, value: value === id, onChange: () => onChangeCheckedItem?.(id, text), disabled: disabled, name: id }, String(id)))) })] })));
|
|
3334
3335
|
|
|
3335
3336
|
const VedField = JSX(({ field, input }) => {
|
|
3336
3337
|
const handleChange = useCallback((_) => {
|
|
@@ -11013,7 +11014,7 @@
|
|
|
11013
11014
|
DELIVERY_CREDIT_CARD_CONTENT,
|
|
11014
11015
|
];
|
|
11015
11016
|
|
|
11016
|
-
const STEPS$
|
|
11017
|
+
const STEPS$3 = 6;
|
|
11017
11018
|
const TITLES = [
|
|
11018
11019
|
'Параметры карты',
|
|
11019
11020
|
'Персональные данные',
|
|
@@ -11028,7 +11029,7 @@
|
|
|
11028
11029
|
const scrollToTop = useCallback(() => formContainerRef?.current?.scrollIntoView({ behavior: 'smooth' }), [formContainerRef]);
|
|
11029
11030
|
useEffect(updateRefreshToken, []);
|
|
11030
11031
|
const handleNextStep = useCallback(() => {
|
|
11031
|
-
setStep((_) => Math.min(_ + 1, STEPS$
|
|
11032
|
+
setStep((_) => Math.min(_ + 1, STEPS$3));
|
|
11032
11033
|
scrollToTop();
|
|
11033
11034
|
}, []);
|
|
11034
11035
|
const handlePrevStep = useCallback(() => {
|
|
@@ -11038,7 +11039,7 @@
|
|
|
11038
11039
|
}, []);
|
|
11039
11040
|
const sections = stepsSectionsMap$2[step];
|
|
11040
11041
|
const [isFormFinished, { setTrue: handleFinish }] = useBool(false);
|
|
11041
|
-
return (jsx(BlockWrapper, { className: className, ...rest, children: jsxs("div", { ref: formContainerRef, className: "container grid grid-cols-12", children: [isFormFinished ? null : (jsx(CreditCardFormProgress, { stepsTitles: TITLES, step: step, totalSteps: STEPS$
|
|
11042
|
+
return (jsx(BlockWrapper, { className: className, ...rest, children: jsxs("div", { ref: formContainerRef, className: "container grid grid-cols-12", children: [isFormFinished ? null : (jsx(CreditCardFormProgress, { stepsTitles: TITLES, step: step, totalSteps: STEPS$3 })), jsx("div", { className: "py-lg px-5xl mt-2xs bg-white col-span-12", children: isFormFinished ? (jsx(CreditCardFormStatusTracker, {})) : (jsx(CreditCardFormStep, { step: step, sections: sections, onNextStep: handleNextStep, onPrevStep: handlePrevStep, onFinish: handleFinish }, String(step))) })] }) }));
|
|
11042
11043
|
});
|
|
11043
11044
|
|
|
11044
11045
|
const CreditFormProgress = JSX(({ step = 1, totalSteps = 5, stepsTitles = [] }) => {
|
|
@@ -11599,7 +11600,7 @@
|
|
|
11599
11600
|
DELIVERY_CREDIT_CONTENT,
|
|
11600
11601
|
];
|
|
11601
11602
|
|
|
11602
|
-
const STEPS$
|
|
11603
|
+
const STEPS$2 = 4;
|
|
11603
11604
|
const STEP_TITLES$1 = [
|
|
11604
11605
|
'',
|
|
11605
11606
|
'Персональные данные',
|
|
@@ -11613,7 +11614,7 @@
|
|
|
11613
11614
|
const scrollToTop = useCallback(() => formContainerRef?.current?.scrollIntoView({ behavior: 'smooth' }), [formContainerRef]);
|
|
11614
11615
|
useEffect(updateRefreshToken, []);
|
|
11615
11616
|
const handleNextStep = useCallback(() => {
|
|
11616
|
-
setStep((_) => Math.min(_ + 1, STEPS$
|
|
11617
|
+
setStep((_) => Math.min(_ + 1, STEPS$2));
|
|
11617
11618
|
scrollToTop();
|
|
11618
11619
|
}, []);
|
|
11619
11620
|
const handlePrevStep = useCallback(() => {
|
|
@@ -11624,7 +11625,7 @@
|
|
|
11624
11625
|
const sections = stepsSectionsMap$1[step];
|
|
11625
11626
|
const isStartStep = step === 0;
|
|
11626
11627
|
const [isFormFinished, { setTrue: handleFinish }] = useBool(false);
|
|
11627
|
-
return (jsx(BlockWrapper, { className: className, ...rest, children: jsxs("div", { ref: formContainerRef, className: "container grid grid-cols-12", children: [isStartStep || isFormFinished ? null : (jsx(CreditFormProgress, { stepsTitles: STEP_TITLES$1, step: step, totalSteps: STEPS$
|
|
11628
|
+
return (jsx(BlockWrapper, { className: className, ...rest, children: jsxs("div", { ref: formContainerRef, className: "container grid grid-cols-12", children: [isStartStep || isFormFinished ? null : (jsx(CreditFormProgress, { stepsTitles: STEP_TITLES$1, step: step, totalSteps: STEPS$2 })), jsx("div", { className: "py-lg px-5xl mt-2xs bg-white col-span-12", children: isFormFinished ? (jsx(CreditFormStatusTracker, {})) : (jsx(CreditFormStep, { step: step, sections: sections, programsSource: programsSource, onNextStep: handleNextStep, onPrevStep: handlePrevStep, onFinish: handleFinish }, String(step))) })] }) }));
|
|
11628
11629
|
});
|
|
11629
11630
|
|
|
11630
11631
|
const DebitFormProgress = JSX(({ step = 1, totalSteps = 2, stepsTitles = [] }) => {
|
|
@@ -12167,7 +12168,7 @@
|
|
|
12167
12168
|
DEBIT_CARD_CONTENT,
|
|
12168
12169
|
];
|
|
12169
12170
|
|
|
12170
|
-
const STEPS = 2;
|
|
12171
|
+
const STEPS$1 = 2;
|
|
12171
12172
|
const STEP_TITLES = ['', 'Персональные данные', 'Платежная система'];
|
|
12172
12173
|
const DebitForm = UniBlock(({ className, ...rest }) => {
|
|
12173
12174
|
const [step, setStep] = useState(0);
|
|
@@ -12175,7 +12176,7 @@
|
|
|
12175
12176
|
const scrollToTop = useCallback(() => formContainerRef?.current?.scrollIntoView({ behavior: 'smooth' }), [formContainerRef]);
|
|
12176
12177
|
useEffect(updateRefreshToken, []);
|
|
12177
12178
|
const handleNextStep = useCallback(() => {
|
|
12178
|
-
setStep((_) => Math.min(_ + 1, STEPS));
|
|
12179
|
+
setStep((_) => Math.min(_ + 1, STEPS$1));
|
|
12179
12180
|
scrollToTop();
|
|
12180
12181
|
}, []);
|
|
12181
12182
|
const handlePrevStep = useCallback(() => {
|
|
@@ -12190,7 +12191,7 @@
|
|
|
12190
12191
|
setIsFormFinished();
|
|
12191
12192
|
scrollToTop();
|
|
12192
12193
|
}, []);
|
|
12193
|
-
return (jsx(BlockWrapper, { className: className, ...rest, children: jsxs("div", { ref: formContainerRef, className: "container grid grid-cols-12", children: [isStartStep || isFormFinished ? null : (jsx(DebitFormProgress, { stepsTitles: STEP_TITLES, step: step, totalSteps: STEPS })), jsx("div", { className: "py-lg px-5xl mt-2xs bg-white col-span-12", children: isFormFinished ? (jsx(DebitFormStatusTracker, {})) : (jsx(DebitFormStep, { step: step, sections: sections, onNextStep: handleNextStep, onPrevStep: handlePrevStep, onFinish: handleFinish }, String(step))) })] }) }));
|
|
12194
|
+
return (jsx(BlockWrapper, { className: className, ...rest, children: jsxs("div", { ref: formContainerRef, className: "container grid grid-cols-12", children: [isStartStep || isFormFinished ? null : (jsx(DebitFormProgress, { stepsTitles: STEP_TITLES, step: step, totalSteps: STEPS$1 })), jsx("div", { className: "py-lg px-5xl mt-2xs bg-white col-span-12", children: isFormFinished ? (jsx(DebitFormStatusTracker, {})) : (jsx(DebitFormStep, { step: step, sections: sections, onNextStep: handleNextStep, onPrevStep: handlePrevStep, onFinish: handleFinish }, String(step))) })] }) }));
|
|
12194
12195
|
});
|
|
12195
12196
|
|
|
12196
12197
|
const isRateRow = (rateRow) => typeof rateRow?.minMonths === 'number' && typeof rateRow?.maxMonths === 'number';
|
|
@@ -13509,7 +13510,7 @@
|
|
|
13509
13510
|
};
|
|
13510
13511
|
const tabTextStyle = 'text-secondary-text hover:text-primary-main';
|
|
13511
13512
|
const activeTabTextStyleMap = {
|
|
13512
|
-
default: 'text-
|
|
13513
|
+
default: 'text-white',
|
|
13513
13514
|
underlined: 'text-primary-main border-b-2',
|
|
13514
13515
|
animated: 'text-white sm:text-white',
|
|
13515
13516
|
};
|
|
@@ -13519,7 +13520,7 @@
|
|
|
13519
13520
|
animated: 'p-1 ease-in duration-300 bg-white text-primary-text h-[70px] w-96',
|
|
13520
13521
|
};
|
|
13521
13522
|
const activeTabBgStyleMap = {
|
|
13522
|
-
default: 'bg-
|
|
13523
|
+
default: 'bg-primary-main',
|
|
13523
13524
|
underlined: 'bg-white',
|
|
13524
13525
|
animated: 'p-2 border-none bg-primary-main text-white h-20 w-96',
|
|
13525
13526
|
};
|
|
@@ -13913,6 +13914,128 @@
|
|
|
13913
13914
|
}, role: "dialog", title: "\u0412\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u0435 \u043E\u043A\u043D\u043E", children: popup.popup })) : null;
|
|
13914
13915
|
});
|
|
13915
13916
|
|
|
13917
|
+
const sendUserSurvey = async (body) => {
|
|
13918
|
+
try {
|
|
13919
|
+
const response = await LeadServiceFetch(`${API_BASE_URI}/survey`, body);
|
|
13920
|
+
return await response;
|
|
13921
|
+
}
|
|
13922
|
+
catch (e) {
|
|
13923
|
+
return null;
|
|
13924
|
+
}
|
|
13925
|
+
};
|
|
13926
|
+
|
|
13927
|
+
const FinalStep = JSX(() => {
|
|
13928
|
+
return (jsxs("div", { className: "flex flex-col items-center", children: [jsx(Heading, { className: "text-center", headingType: "h5", title: "\u0421\u043F\u0430\u0441\u0438\u0431\u043E \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435!" }), jsx(Paragraph, { children: "\u0412\u0430\u0448\u0435 \u043C\u043D\u0435\u043D\u0438\u0435 \u043E\u0447\u0435\u043D\u044C \u0432\u0430\u0436\u043D\u043E \u0434\u043B\u044F \u043D\u0430\u0441" })] }));
|
|
13929
|
+
});
|
|
13930
|
+
|
|
13931
|
+
const Star = JSX(({ value, hover, rating, setHover, setRating }) => {
|
|
13932
|
+
const fillColor = value <= (hover || rating) ? '#42AB44' : '#C9CACC';
|
|
13933
|
+
return (jsx("div", { onClick: () => setRating?.(value), onMouseEnter: () => setHover?.(value), onMouseLeave: () => setHover?.(null), children: jsx("svg", { "data-rating": value, fill: fillColor, width: "57", height: "57", viewBox: "0 0 57 57", children: jsx("path", { d: "M47.7803 18.2879L47.7836 18.2884C50.566 18.7521 53.0867 20.1374 53.9176 22.7226C54.7498 25.3116 53.5025 27.9027 51.4977 29.8954L51.4942 29.8989L45.7132 35.6799C45.5729 35.8202 45.3591 36.1532 45.2186 36.6438C45.0796 37.1295 45.0808 37.5314 45.1257 37.7381L45.1268 37.743L46.78 44.8909C47.4787 47.9228 47.3175 51.2217 44.8924 52.9896C42.4714 54.7546 39.2808 53.9093 36.5999 52.3257L29.6214 48.1946C29.4392 48.0866 29.0426 47.96 28.5087 47.96C27.9816 47.96 27.5736 48.0831 27.3687 48.2004L27.3634 48.2035L20.4041 52.3232L20.4019 52.3246C17.7218 53.9145 14.5351 54.7459 12.1155 52.9803C9.69339 51.213 9.51826 47.9236 10.22 44.8909L11.8731 37.743L11.8743 37.7379C11.9191 37.5311 11.9203 37.1293 11.7813 36.6438C11.6409 36.1532 11.4271 35.8202 11.2867 35.6799L5.50006 29.8932C3.50738 27.9006 2.26429 25.3118 3.08972 22.7269C3.91586 20.1398 6.43161 18.7525 9.21638 18.2884L16.6527 17.0529L16.6552 17.0525C16.8169 17.0243 17.1619 16.8935 17.5523 16.604C17.945 16.3128 18.1668 16.022 18.2378 15.877L18.2462 15.8598L22.3508 7.65087L22.352 7.6485C23.629 5.08222 25.7146 3.01416 28.4796 3.01416C31.2412 3.01416 33.3328 5.07832 34.6215 7.64213L34.6236 7.64649L38.7303 15.8598L38.75 15.9001C38.7884 15.9807 38.8225 16.0591 38.8511 16.1283C38.9197 16.1891 39.0148 16.2702 39.1464 16.3781C39.1829 16.394 39.242 16.4185 39.3288 16.4505C39.5779 16.5424 39.9286 16.6512 40.3732 16.7719C41.2573 17.0121 42.3688 17.2611 43.4823 17.4894C44.5886 17.7163 45.6648 17.9163 46.4667 18.0598C46.8669 18.1315 47.1972 18.1888 47.4266 18.2281L47.6909 18.2729L47.7589 18.2843L47.7803 18.2879Z" }) }) }));
|
|
13934
|
+
});
|
|
13935
|
+
|
|
13936
|
+
const stars$1 = new Array(5).fill(Star);
|
|
13937
|
+
const TITLE$1 = {
|
|
13938
|
+
NPS: 'Оцените, пожалуйста, от 1 до 5 насколько вероятно, что вы порекомендуете Россельхозбанк коллегам, друзьям и знакомым?',
|
|
13939
|
+
CSI: 'Оцените, пожалуйста, удовлетворённость пользования сайтом',
|
|
13940
|
+
};
|
|
13941
|
+
const FirstStep = JSX(({ currentRating, surveyType, isSending, setCurrentRating, onNextStep, onSubmit }) => {
|
|
13942
|
+
const [currentHover, setCurrentHover] = useState();
|
|
13943
|
+
const setRatingFn = (value) => {
|
|
13944
|
+
setCurrentRating(value);
|
|
13945
|
+
if (value < 5) {
|
|
13946
|
+
onNextStep();
|
|
13947
|
+
}
|
|
13948
|
+
};
|
|
13949
|
+
return (jsxs("div", { className: "flex flex-col gap-xl items-center", children: [jsx(Heading, { className: "text-center", headingType: "h5", title: TITLE$1[surveyType] }), jsx("div", { className: "flex justify-center", children: stars$1.map((StarItem, index) => (jsx(StarItem, { value: index + 1, rating: currentRating, hover: currentHover, setRating: setRatingFn, setHover: setCurrentHover, className: "modal-feedback__star" }, index))) }), currentRating === 5 ? (jsx(SubmitButton$1, { onClick: () => onSubmit(), isLoading: isSending, children: "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C" })) : null] }));
|
|
13950
|
+
});
|
|
13951
|
+
|
|
13952
|
+
const stars = new Array(5).fill(Star);
|
|
13953
|
+
const TITLE = 'Что бы мы могли улучшить?';
|
|
13954
|
+
const SecondStep = JSX(({ currentRating, currentReason, reasons = [], isSending, setCurrentReason, onSubmit }) => {
|
|
13955
|
+
const [comment, setComment] = useState();
|
|
13956
|
+
const handleReasonChange = (id, text) => {
|
|
13957
|
+
setCurrentReason?.({
|
|
13958
|
+
id,
|
|
13959
|
+
text,
|
|
13960
|
+
});
|
|
13961
|
+
};
|
|
13962
|
+
return (jsxs("div", { className: "flex flex-col gap-xl items-center", children: [jsx(Heading, { className: "text-center", headingType: "h5", title: TITLE }), jsx("div", { className: "flex justify-center", children: stars.map((StarItem, index) => (jsx(StarItem, { value: index + 1, rating: currentRating }, index))) }), jsx(RadioButtonGroup, { className: "w-full text-wrap", orientation: "vertical", items: reasons, value: currentReason?.id, onChange: handleReasonChange }), currentReason?.text === 'Другое' ? (jsx(Input, { className: "w-full", placeholder: "\u041D\u0430\u043F\u0438\u0448\u0438\u0442\u0435, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441\u0432\u043E\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0442\u0432\u0435\u0442\u0430", isTextarea: true, value: comment, onChange: setComment, maxLength: 255 })) : null, currentReason ? (jsx(SubmitButton$1, { onClick: () => onSubmit(comment), isLoading: isSending, children: "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C" })) : null] }));
|
|
13963
|
+
});
|
|
13964
|
+
|
|
13965
|
+
const STEPS = [FirstStep, SecondStep, FinalStep];
|
|
13966
|
+
const LAST_STEP_INDEX = 2;
|
|
13967
|
+
const UserSurveyDialog = UniBlock(({ onClose = noop, reasonsSource = {} }) => {
|
|
13968
|
+
const [isSending, { setTrue: startSending, setFalse: endSending }] = useBool(false);
|
|
13969
|
+
const [currentRating, setCurrentRating] = useState(0);
|
|
13970
|
+
const [currentReason, setCurrentReason] = useState();
|
|
13971
|
+
const [step, setStep] = useState(0);
|
|
13972
|
+
const userSurveyStore = useLocalStore();
|
|
13973
|
+
const surveyType = userSurveyStore.userSurvey?.lastShownType ?? 'NPS';
|
|
13974
|
+
const { reasons } = reasonsSource;
|
|
13975
|
+
const ActiveStep = STEPS[step];
|
|
13976
|
+
const handleNextStep = useCallback(() => {
|
|
13977
|
+
setStep((_) => _ + 1);
|
|
13978
|
+
}, []);
|
|
13979
|
+
const handleSubmit = useCallback(async (message) => {
|
|
13980
|
+
startSending();
|
|
13981
|
+
await sendUserSurvey({
|
|
13982
|
+
rate: currentRating,
|
|
13983
|
+
reason: currentReason?.text,
|
|
13984
|
+
message: getMessage(currentReason, message),
|
|
13985
|
+
url: globalThis.location.href,
|
|
13986
|
+
type: surveyType,
|
|
13987
|
+
});
|
|
13988
|
+
endSending();
|
|
13989
|
+
setStep(LAST_STEP_INDEX);
|
|
13990
|
+
}, [currentRating, currentReason]);
|
|
13991
|
+
return (jsx(Dialog, { maxWidth: "xl", onClose: onClose, children: jsx(ActiveStep, { currentRating: currentRating, currentReason: currentReason, reasons: reasons, surveyType: surveyType, isSending: isSending, setCurrentReason: setCurrentReason, setCurrentRating: setCurrentRating, onSubmit: handleSubmit, onNextStep: handleNextStep }) }));
|
|
13992
|
+
});
|
|
13993
|
+
const getMessage = (currentReason, message) => {
|
|
13994
|
+
if (currentReason?.text !== 'Другое') {
|
|
13995
|
+
return undefined;
|
|
13996
|
+
}
|
|
13997
|
+
return message?.length ? message : 'Другое. Клиент не оставил комментариев';
|
|
13998
|
+
};
|
|
13999
|
+
|
|
14000
|
+
const DELAY = 5 * 60 * 1000;
|
|
14001
|
+
// Хук отвечает за показ пользователю опроса
|
|
14002
|
+
const useUserSurveyDialog = () => {
|
|
14003
|
+
const userSurveyDialog = useDialog(UserSurveyDialog);
|
|
14004
|
+
const userSurveyStore = useLocalStore();
|
|
14005
|
+
const sessionStore = useSessionStore();
|
|
14006
|
+
const elapsedTime = sessionStore.surveyTimerStart
|
|
14007
|
+
? Date.now() - Number.parseInt(sessionStore.surveyTimerStart)
|
|
14008
|
+
: 0;
|
|
14009
|
+
const openUserSurveyDialog = () => {
|
|
14010
|
+
userSurveyStore.userSurvey = {
|
|
14011
|
+
lastShownType: userSurveyStore.userSurvey?.lastShownType === 'NPS' ? 'CSI' : 'NPS',
|
|
14012
|
+
nextDueAt: getTimeAfter30days(),
|
|
14013
|
+
};
|
|
14014
|
+
userSurveyDialog.open({
|
|
14015
|
+
reasonsSource: {
|
|
14016
|
+
$ref: '/wcms-resources/user-survey-reasons.json',
|
|
14017
|
+
},
|
|
14018
|
+
});
|
|
14019
|
+
};
|
|
14020
|
+
useEffect(() => {
|
|
14021
|
+
// Опрос показывается только если ранее пользоваютелю не показывался опрос или с того момента прошел месяц
|
|
14022
|
+
if (!userSurveyStore.userSurvey || userSurveyStore.userSurvey?.nextDueAt <= Date.now()) {
|
|
14023
|
+
// начинаем отсчитывать время от первого захода на сайт
|
|
14024
|
+
if (!sessionStore.surveyTimerStart) {
|
|
14025
|
+
sessionStore.surveyTimerStart = Date.now().toString();
|
|
14026
|
+
}
|
|
14027
|
+
// Опрос показывается спустя 5 минут нахождения на сайте
|
|
14028
|
+
const timeout = setTimeout(openUserSurveyDialog, DELAY - elapsedTime);
|
|
14029
|
+
return () => {
|
|
14030
|
+
clearTimeout(timeout);
|
|
14031
|
+
};
|
|
14032
|
+
}
|
|
14033
|
+
return noop;
|
|
14034
|
+
}, []);
|
|
14035
|
+
};
|
|
14036
|
+
// Отсчитываем месяц с текущей даты
|
|
14037
|
+
const getTimeAfter30days = () => Date.now() + 30 * 24 * 60 * 60 * 1000;
|
|
14038
|
+
|
|
13916
14039
|
const HEADER_SLOT = 'header';
|
|
13917
14040
|
const FOOTER_SLOT = 'footer';
|
|
13918
14041
|
const STICKY_FOOTER_SLOT = 'sticky-footer';
|
|
@@ -13923,6 +14046,7 @@
|
|
|
13923
14046
|
const isFrame = isIFrame();
|
|
13924
14047
|
useClickHandler();
|
|
13925
14048
|
useDefaultLocation();
|
|
14049
|
+
useUserSurveyDialog();
|
|
13926
14050
|
const options = {
|
|
13927
14051
|
key: '',
|
|
13928
14052
|
page: { slots, blocks, fallback, ...resolvedPageContent },
|
|
@@ -13945,7 +14069,7 @@
|
|
|
13945
14069
|
slots: () => [HEADER_SLOT, FOOTER_SLOT, STICKY_FOOTER_SLOT],
|
|
13946
14070
|
});
|
|
13947
14071
|
|
|
13948
|
-
const packageVersion = "0.14.
|
|
14072
|
+
const packageVersion = "0.14.1015";
|
|
13949
14073
|
|
|
13950
14074
|
exports.Blocks = Blocks;
|
|
13951
14075
|
exports.ContentPage = ContentPage;
|