@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.
Files changed (203) hide show
  1. package/bundle/api/LeadServiceAPI.d.ts +7 -0
  2. package/bundle/api/sendUserSurvey.d.ts +8 -0
  3. package/bundle/bundle.umd.js +137 -13
  4. package/bundle/bundle.umd.min.js +1 -1
  5. package/bundle/ui-kit/DialogManager/Dialog.d.ts +1 -1
  6. package/bundle/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  7. package/bundle/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
  8. package/bundle/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
  9. package/bundle/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
  10. package/bundle/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
  11. package/bundle/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
  12. package/bundle/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
  13. package/bundle/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
  14. package/dist/api/LeadServiceAPI.d.ts +7 -0
  15. package/dist/api/LeadServiceAPI.js +6 -5
  16. package/dist/api/LeadServiceAPI.js.map +1 -1
  17. package/dist/api/sendUserSurvey.d.ts +8 -0
  18. package/dist/api/sendUserSurvey.js +15 -0
  19. package/dist/api/sendUserSurvey.js.map +1 -0
  20. package/dist/components/ContentPage/ContentPage.js +2 -0
  21. package/dist/components/ContentPage/ContentPage.js.map +1 -1
  22. package/dist/ui-kit/DialogManager/Dialog.d.ts +1 -1
  23. package/dist/ui-kit/DialogManager/Dialog.js +1 -0
  24. package/dist/ui-kit/DialogManager/Dialog.js.map +1 -1
  25. package/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  26. package/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
  27. package/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  28. package/dist/ui-kit/TabsControl/TabItemInner.js +2 -2
  29. package/dist/ui-kit/TabsControl/TabItemInner.js.map +1 -1
  30. package/dist/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
  31. package/dist/ui-kit/UserSurveyDialog/FinalStep.js +10 -0
  32. package/dist/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
  33. package/dist/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
  34. package/dist/ui-kit/UserSurveyDialog/FirstStep.js +24 -0
  35. package/dist/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
  36. package/dist/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
  37. package/dist/ui-kit/UserSurveyDialog/SecondStep.js +23 -0
  38. package/dist/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
  39. package/dist/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
  40. package/dist/ui-kit/UserSurveyDialog/Star.js +9 -0
  41. package/dist/ui-kit/UserSurveyDialog/Star.js.map +1 -0
  42. package/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
  43. package/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js +48 -0
  44. package/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
  45. package/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
  46. package/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
  47. package/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
  48. package/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
  49. package/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +48 -0
  50. package/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
  51. package/lib/api/LeadServiceAPI.d.ts +7 -0
  52. package/lib/api/LeadServiceAPI.js +1 -1
  53. package/lib/api/LeadServiceAPI.js.map +1 -1
  54. package/lib/api/sendUserSurvey.d.ts +8 -0
  55. package/lib/api/sendUserSurvey.js +12 -0
  56. package/lib/api/sendUserSurvey.js.map +1 -0
  57. package/lib/common.css +1 -1
  58. package/lib/components/ContentPage/ContentPage.js +2 -0
  59. package/lib/components/ContentPage/ContentPage.js.map +1 -1
  60. package/lib/ui-kit/DialogManager/Dialog.d.ts +1 -1
  61. package/lib/ui-kit/DialogManager/Dialog.js +1 -0
  62. package/lib/ui-kit/DialogManager/Dialog.js.map +1 -1
  63. package/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  64. package/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
  65. package/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  66. package/lib/ui-kit/TabsControl/TabItemInner.js +2 -2
  67. package/lib/ui-kit/TabsControl/TabItemInner.js.map +1 -1
  68. package/lib/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
  69. package/lib/ui-kit/UserSurveyDialog/FinalStep.js +8 -0
  70. package/lib/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
  71. package/lib/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
  72. package/lib/ui-kit/UserSurveyDialog/FirstStep.js +22 -0
  73. package/lib/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
  74. package/lib/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
  75. package/lib/ui-kit/UserSurveyDialog/SecondStep.js +21 -0
  76. package/lib/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
  77. package/lib/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
  78. package/lib/ui-kit/UserSurveyDialog/Star.js +7 -0
  79. package/lib/ui-kit/UserSurveyDialog/Star.js.map +1 -0
  80. package/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
  81. package/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js +46 -0
  82. package/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
  83. package/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
  84. package/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
  85. package/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
  86. package/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
  87. package/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +45 -0
  88. package/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
  89. package/mobile/bundle/api/LeadServiceAPI.d.ts +7 -0
  90. package/mobile/bundle/api/sendUserSurvey.d.ts +8 -0
  91. package/mobile/bundle/bundle.umd.js +137 -13
  92. package/mobile/bundle/bundle.umd.min.js +1 -1
  93. package/mobile/bundle/ui-kit/DialogManager/Dialog.d.ts +1 -1
  94. package/mobile/bundle/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  95. package/mobile/bundle/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
  96. package/mobile/bundle/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
  97. package/mobile/bundle/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
  98. package/mobile/bundle/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
  99. package/mobile/bundle/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
  100. package/mobile/bundle/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
  101. package/mobile/bundle/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
  102. package/mobile/dist/api/LeadServiceAPI.d.ts +7 -0
  103. package/mobile/dist/api/LeadServiceAPI.js +6 -5
  104. package/mobile/dist/api/LeadServiceAPI.js.map +1 -1
  105. package/mobile/dist/api/sendUserSurvey.d.ts +8 -0
  106. package/mobile/dist/api/sendUserSurvey.js +15 -0
  107. package/mobile/dist/api/sendUserSurvey.js.map +1 -0
  108. package/mobile/dist/components/ContentPage/ContentPage.js +2 -0
  109. package/mobile/dist/components/ContentPage/ContentPage.js.map +1 -1
  110. package/mobile/dist/ui-kit/DialogManager/Dialog.d.ts +1 -1
  111. package/mobile/dist/ui-kit/DialogManager/Dialog.js +1 -0
  112. package/mobile/dist/ui-kit/DialogManager/Dialog.js.map +1 -1
  113. package/mobile/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  114. package/mobile/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
  115. package/mobile/dist/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  116. package/mobile/dist/ui-kit/TabsControl/TabItemInner.js +2 -2
  117. package/mobile/dist/ui-kit/TabsControl/TabItemInner.js.map +1 -1
  118. package/mobile/dist/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
  119. package/mobile/dist/ui-kit/UserSurveyDialog/FinalStep.js +10 -0
  120. package/mobile/dist/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
  121. package/mobile/dist/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
  122. package/mobile/dist/ui-kit/UserSurveyDialog/FirstStep.js +24 -0
  123. package/mobile/dist/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
  124. package/mobile/dist/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
  125. package/mobile/dist/ui-kit/UserSurveyDialog/SecondStep.js +23 -0
  126. package/mobile/dist/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
  127. package/mobile/dist/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
  128. package/mobile/dist/ui-kit/UserSurveyDialog/Star.js +9 -0
  129. package/mobile/dist/ui-kit/UserSurveyDialog/Star.js.map +1 -0
  130. package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
  131. package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js +48 -0
  132. package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
  133. package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
  134. package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
  135. package/mobile/dist/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
  136. package/mobile/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
  137. package/mobile/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +48 -0
  138. package/mobile/dist/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
  139. package/mobile/lib/api/LeadServiceAPI.d.ts +7 -0
  140. package/mobile/lib/api/LeadServiceAPI.js +1 -1
  141. package/mobile/lib/api/LeadServiceAPI.js.map +1 -1
  142. package/mobile/lib/api/sendUserSurvey.d.ts +8 -0
  143. package/mobile/lib/api/sendUserSurvey.js +12 -0
  144. package/mobile/lib/api/sendUserSurvey.js.map +1 -0
  145. package/mobile/lib/common.css +1 -1
  146. package/mobile/lib/components/ContentPage/ContentPage.js +2 -0
  147. package/mobile/lib/components/ContentPage/ContentPage.js.map +1 -1
  148. package/mobile/lib/ui-kit/DialogManager/Dialog.d.ts +1 -1
  149. package/mobile/lib/ui-kit/DialogManager/Dialog.js +1 -0
  150. package/mobile/lib/ui-kit/DialogManager/Dialog.js.map +1 -1
  151. package/mobile/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  152. package/mobile/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js +1 -1
  153. package/mobile/lib/ui-kit/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  154. package/mobile/lib/ui-kit/TabsControl/TabItemInner.js +2 -2
  155. package/mobile/lib/ui-kit/TabsControl/TabItemInner.js.map +1 -1
  156. package/mobile/lib/ui-kit/UserSurveyDialog/FinalStep.d.ts +2 -0
  157. package/mobile/lib/ui-kit/UserSurveyDialog/FinalStep.js +8 -0
  158. package/mobile/lib/ui-kit/UserSurveyDialog/FinalStep.js.map +1 -0
  159. package/mobile/lib/ui-kit/UserSurveyDialog/FirstStep.d.ts +2 -0
  160. package/mobile/lib/ui-kit/UserSurveyDialog/FirstStep.js +22 -0
  161. package/mobile/lib/ui-kit/UserSurveyDialog/FirstStep.js.map +1 -0
  162. package/mobile/lib/ui-kit/UserSurveyDialog/SecondStep.d.ts +2 -0
  163. package/mobile/lib/ui-kit/UserSurveyDialog/SecondStep.js +21 -0
  164. package/mobile/lib/ui-kit/UserSurveyDialog/SecondStep.js.map +1 -0
  165. package/mobile/lib/ui-kit/UserSurveyDialog/Star.d.ts +11 -0
  166. package/mobile/lib/ui-kit/UserSurveyDialog/Star.js +7 -0
  167. package/mobile/lib/ui-kit/UserSurveyDialog/Star.js.map +1 -0
  168. package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.d.ts +3 -0
  169. package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js +46 -0
  170. package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialog.js.map +1 -0
  171. package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.d.ts +29 -0
  172. package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js +2 -0
  173. package/mobile/lib/ui-kit/UserSurveyDialog/UserSurveyDialogContent.js.map +1 -0
  174. package/mobile/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.d.ts +1 -0
  175. package/mobile/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js +45 -0
  176. package/mobile/lib/ui-kit/UserSurveyDialog/useUserSurveyDialog.js.map +1 -0
  177. package/mobile/src/api/LeadServiceAPI.ts +1 -1
  178. package/mobile/src/api/sendUserSurvey.ts +20 -0
  179. package/mobile/src/components/ContentPage/ContentPage.tsx +2 -0
  180. package/mobile/src/ui-kit/DialogManager/Dialog.tsx +2 -1
  181. package/mobile/src/ui-kit/RadioButtonGroup/RadioButtonGroup.tsx +2 -2
  182. package/mobile/src/ui-kit/TabsControl/TabItemInner.tsx +2 -2
  183. package/mobile/src/ui-kit/UserSurveyDialog/FinalStep.tsx +14 -0
  184. package/mobile/src/ui-kit/UserSurveyDialog/FirstStep.tsx +50 -0
  185. package/mobile/src/ui-kit/UserSurveyDialog/SecondStep.tsx +57 -0
  186. package/mobile/src/ui-kit/UserSurveyDialog/Star.tsx +28 -0
  187. package/mobile/src/ui-kit/UserSurveyDialog/UserSurveyDialog.tsx +80 -0
  188. package/mobile/src/ui-kit/UserSurveyDialog/UserSurveyDialogContent.ts +31 -0
  189. package/mobile/src/ui-kit/UserSurveyDialog/useUserSurveyDialog.ts +56 -0
  190. package/package.json +1 -1
  191. package/src/api/LeadServiceAPI.ts +1 -1
  192. package/src/api/sendUserSurvey.ts +20 -0
  193. package/src/components/ContentPage/ContentPage.tsx +2 -0
  194. package/src/ui-kit/DialogManager/Dialog.tsx +2 -1
  195. package/src/ui-kit/RadioButtonGroup/RadioButtonGroup.tsx +2 -2
  196. package/src/ui-kit/TabsControl/TabItemInner.tsx +2 -2
  197. package/src/ui-kit/UserSurveyDialog/FinalStep.tsx +14 -0
  198. package/src/ui-kit/UserSurveyDialog/FirstStep.tsx +50 -0
  199. package/src/ui-kit/UserSurveyDialog/SecondStep.tsx +57 -0
  200. package/src/ui-kit/UserSurveyDialog/Star.tsx +28 -0
  201. package/src/ui-kit/UserSurveyDialog/UserSurveyDialog.tsx +80 -0
  202. package/src/ui-kit/UserSurveyDialog/UserSurveyDialogContent.ts +31 -0
  203. package/src/ui-kit/UserSurveyDialog/useUserSurveyDialog.ts +56 -0
@@ -0,0 +1,50 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { useState } from '@redneckz/uni-jsx/lib/hooks';
3
+ import { SubmitButton } from '../../ui-kit/Button/SubmitButton';
4
+ import { Heading } from '../../ui-kit/Heading/Heading';
5
+ import { Star } from './Star';
6
+ import { type StepProps } from './UserSurveyDialogContent';
7
+
8
+ const stars = new Array(5).fill(Star);
9
+
10
+ const TITLE = {
11
+ NPS: 'Оцените, пожалуйста, от 1 до 5 насколько вероятно, что вы порекомендуете Россельхозбанк коллегам, друзьям и знакомым?',
12
+ CSI: 'Оцените, пожалуйста, удовлетворённость пользования сайтом',
13
+ };
14
+
15
+ export const FirstStep = JSX<StepProps>(
16
+ ({ currentRating, surveyType, isSending, setCurrentRating, onNextStep, onSubmit }) => {
17
+ const [currentHover, setCurrentHover] = useState<number>();
18
+
19
+ const setRatingFn = (value: number): void => {
20
+ setCurrentRating(value);
21
+ if (value < 5) {
22
+ onNextStep();
23
+ }
24
+ };
25
+
26
+ return (
27
+ <div className="flex flex-col gap-xl items-center">
28
+ <Heading className="text-center" headingType="h5" title={TITLE[surveyType]} />
29
+ <div className="flex justify-center">
30
+ {stars.map((StarItem, index) => (
31
+ <StarItem
32
+ key={index}
33
+ value={index + 1}
34
+ rating={currentRating}
35
+ hover={currentHover}
36
+ setRating={setRatingFn}
37
+ setHover={setCurrentHover}
38
+ className="modal-feedback__star"
39
+ />
40
+ ))}
41
+ </div>
42
+ {currentRating === 5 ? (
43
+ <SubmitButton onClick={() => onSubmit()} isLoading={isSending}>
44
+ Отправить
45
+ </SubmitButton>
46
+ ) : null}
47
+ </div>
48
+ );
49
+ },
50
+ );
@@ -0,0 +1,57 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { useState } from '@redneckz/uni-jsx/lib/hooks';
3
+ import { SubmitButton } from '../../ui-kit/Button/SubmitButton';
4
+ import { Heading } from '../../ui-kit/Heading/Heading';
5
+ import { Input } from '../../ui-kit/Input/Input';
6
+ import { RadioButtonGroup } from '../../ui-kit/RadioButtonGroup/RadioButtonGroup';
7
+ import { Star } from './Star';
8
+ import { type StepProps } from './UserSurveyDialogContent';
9
+
10
+ const stars = new Array(5).fill(Star);
11
+ const TITLE = 'Что бы мы могли улучшить?';
12
+
13
+ export const SecondStep = JSX<StepProps>(
14
+ ({ currentRating, currentReason, reasons = [], isSending, setCurrentReason, onSubmit }) => {
15
+ const [comment, setComment] = useState<string>();
16
+ const handleReasonChange = (id: string, text?: string): void => {
17
+ setCurrentReason?.({
18
+ id,
19
+ text,
20
+ });
21
+ };
22
+
23
+ return (
24
+ <div className="flex flex-col gap-xl items-center">
25
+ <Heading className="text-center" headingType="h5" title={TITLE} />
26
+ <div className="flex justify-center">
27
+ {stars.map((StarItem, index) => (
28
+ <StarItem key={index} value={index + 1} rating={currentRating} />
29
+ ))}
30
+ </div>
31
+ <RadioButtonGroup
32
+ className="w-full text-wrap"
33
+ orientation="vertical"
34
+ items={reasons}
35
+ value={currentReason?.id}
36
+ onChange={handleReasonChange}
37
+ />
38
+ {currentReason?.text === 'Другое' ? (
39
+ <Input
40
+ className="w-full"
41
+ placeholder="Напишите, пожалуйста, свой вариант ответа"
42
+ isTextarea
43
+ value={comment}
44
+ onChange={setComment}
45
+ maxLength={255}
46
+ />
47
+ ) : null}
48
+
49
+ {currentReason ? (
50
+ <SubmitButton onClick={() => onSubmit(comment)} isLoading={isSending}>
51
+ Отправить
52
+ </SubmitButton>
53
+ ) : null}
54
+ </div>
55
+ );
56
+ },
57
+ );
@@ -0,0 +1,28 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+
3
+ /* eslint-disable max-len */
4
+ type StarProps = {
5
+ active: boolean;
6
+ className: string;
7
+ hover: number;
8
+ value: number;
9
+ rating: number;
10
+ setHover?: (value: number | null) => void;
11
+ setRating?: (value: number) => void;
12
+ };
13
+
14
+ export const Star = JSX<StarProps>(({ value, hover, rating, setHover, setRating }) => {
15
+ const fillColor = value <= (hover || rating) ? '#42AB44' : '#C9CACC';
16
+
17
+ return (
18
+ <div
19
+ onClick={() => setRating?.(value)}
20
+ onMouseEnter={() => setHover?.(value)}
21
+ onMouseLeave={() => setHover?.(null)}
22
+ >
23
+ <svg data-rating={value} fill={fillColor} width="57" height="57" viewBox="0 0 57 57">
24
+ <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" />
25
+ </svg>
26
+ </div>
27
+ );
28
+ });
@@ -0,0 +1,80 @@
1
+ import { useCallback, useState } from '@redneckz/uni-jsx/lib/hooks';
2
+ import { useBool } from '@redneckz/uni-jsx/lib/hooks/useBool';
3
+ import { useLocalStore } from '@redneckz/uni-jsx/lib/Store/useLocalStore';
4
+ import { sendUserSurvey } from '../../api/sendUserSurvey';
5
+ import { Dialog } from '../../ui-kit/DialogManager/Dialog';
6
+ import { UniBlock } from '../../UniBlock/UniBlock';
7
+ import { noop } from '../../utils/noop';
8
+ import { FinalStep } from './FinalStep';
9
+ import { FirstStep } from './FirstStep';
10
+ import { SecondStep } from './SecondStep';
11
+ import {
12
+ type Reason,
13
+ type UserSurveyDialogContent,
14
+ type UserSurveyStoreSlice,
15
+ } from './UserSurveyDialogContent';
16
+
17
+ export type UserSurveyDialogProps = UserSurveyDialogContent;
18
+
19
+ const STEPS = [FirstStep, SecondStep, FinalStep];
20
+ const LAST_STEP_INDEX = 2;
21
+
22
+ export const UserSurveyDialog = UniBlock<UserSurveyDialogProps>(
23
+ ({ onClose = noop, reasonsSource = {} }) => {
24
+ const [isSending, { setTrue: startSending, setFalse: endSending }] = useBool(false);
25
+ const [currentRating, setCurrentRating] = useState<number>(0);
26
+ const [currentReason, setCurrentReason] = useState<Reason>();
27
+ const [step, setStep] = useState<number>(0);
28
+ const userSurveyStore = useLocalStore<UserSurveyStoreSlice>();
29
+ const surveyType = userSurveyStore.userSurvey?.lastShownType ?? 'NPS';
30
+
31
+ const { reasons } = reasonsSource as { reasons: Reason[] };
32
+
33
+ const ActiveStep = STEPS[step];
34
+
35
+ const handleNextStep = useCallback(() => {
36
+ setStep((_) => _ + 1);
37
+ }, []);
38
+
39
+ const handleSubmit = useCallback(
40
+ async (message?: string) => {
41
+ startSending();
42
+
43
+ await sendUserSurvey({
44
+ rate: currentRating,
45
+ reason: currentReason?.text,
46
+ message: getMessage(currentReason, message),
47
+ url: globalThis.location.href,
48
+ type: surveyType,
49
+ });
50
+ endSending();
51
+ setStep(LAST_STEP_INDEX);
52
+ },
53
+ [currentRating, currentReason],
54
+ );
55
+
56
+ return (
57
+ <Dialog maxWidth="xl" onClose={onClose}>
58
+ <ActiveStep
59
+ currentRating={currentRating}
60
+ currentReason={currentReason}
61
+ reasons={reasons}
62
+ surveyType={surveyType}
63
+ isSending={isSending}
64
+ setCurrentReason={setCurrentReason}
65
+ setCurrentRating={setCurrentRating}
66
+ onSubmit={handleSubmit}
67
+ onNextStep={handleNextStep}
68
+ />
69
+ </Dialog>
70
+ );
71
+ },
72
+ );
73
+
74
+ const getMessage = (currentReason?: Reason, message?: string) => {
75
+ if (currentReason?.text !== 'Другое') {
76
+ return undefined;
77
+ }
78
+
79
+ return message?.length ? message : 'Другое. Клиент не оставил комментариев';
80
+ };
@@ -0,0 +1,31 @@
1
+ import { type JSONRefObject } from '../../data/JSONRefObject';
2
+ import { type OnCloseProps } from '../../model/OnCloseProps';
3
+ import { type UniBlockContent } from '../../UniBlock/UniBlockProps';
4
+
5
+ export type UserSurveyStoreSlice = {
6
+ userSurvey: {
7
+ lastShownType: 'NPS' | 'CSI';
8
+ nextDueAt: number;
9
+ };
10
+ };
11
+
12
+ export type Reason = {
13
+ id: string;
14
+ text?: string;
15
+ };
16
+
17
+ export type StepProps = {
18
+ currentRating?: number;
19
+ currentReason?: Reason;
20
+ reasons?: Reason[];
21
+ surveyType: 'NPS' | 'CSI';
22
+ isSending: boolean;
23
+ setCurrentReason: (value: Reason) => void;
24
+ setCurrentRating: (value: number) => void;
25
+ onSubmit: (message?: string) => void;
26
+ onNextStep: () => void;
27
+ };
28
+
29
+ export interface UserSurveyDialogContent extends OnCloseProps, UniBlockContent {
30
+ reasonsSource?: { reasons: Reason[] } | JSONRefObject;
31
+ }
@@ -0,0 +1,56 @@
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';
5
+ import { useDialog } from '../DialogManager/useDialog';
6
+ import { UserSurveyDialog } from './UserSurveyDialog';
7
+ import { type UserSurveyStoreSlice } from './UserSurveyDialogContent';
8
+
9
+ const DELAY = 5 * 60 * 1000;
10
+
11
+ type SurveyTimerStore = {
12
+ surveyTimerStart: string;
13
+ };
14
+
15
+ // Хук отвечает за показ пользователю опроса
16
+ export const useUserSurveyDialog = () => {
17
+ const userSurveyDialog = useDialog(UserSurveyDialog);
18
+ const userSurveyStore = useLocalStore<UserSurveyStoreSlice>();
19
+ const sessionStore = useSessionStore<SurveyTimerStore>();
20
+ const elapsedTime = sessionStore.surveyTimerStart
21
+ ? Date.now() - Number.parseInt(sessionStore.surveyTimerStart)
22
+ : 0;
23
+
24
+ const openUserSurveyDialog = () => {
25
+ userSurveyStore.userSurvey = {
26
+ lastShownType: userSurveyStore.userSurvey?.lastShownType === 'NPS' ? 'CSI' : 'NPS',
27
+ nextDueAt: getTimeAfter30days(),
28
+ };
29
+ userSurveyDialog.open({
30
+ reasonsSource: {
31
+ $ref: '/wcms-resources/user-survey-reasons.json',
32
+ },
33
+ });
34
+ };
35
+
36
+ useEffect(() => {
37
+ // Опрос показывается только если ранее пользоваютелю не показывался опрос или с того момента прошел месяц
38
+ if (!userSurveyStore.userSurvey || userSurveyStore.userSurvey?.nextDueAt <= Date.now()) {
39
+ // начинаем отсчитывать время от первого захода на сайт
40
+ if (!sessionStore.surveyTimerStart) {
41
+ sessionStore.surveyTimerStart = Date.now().toString();
42
+ }
43
+ // Опрос показывается спустя 5 минут нахождения на сайте
44
+ const timeout = setTimeout(openUserSurveyDialog, DELAY - elapsedTime);
45
+
46
+ return () => {
47
+ clearTimeout(timeout);
48
+ };
49
+ }
50
+
51
+ return noop;
52
+ }, []);
53
+ };
54
+
55
+ // Отсчитываем месяц с текущей даты
56
+ const getTimeAfter30days = () => Date.now() + 30 * 24 * 60 * 60 * 1000;