@123usmanhaider321/ui 0.1.8 → 1.0.2

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 (545) hide show
  1. package/README.md +416 -31
  2. package/dist/images/icon/1LINK.svg +50 -0
  3. package/dist/images/icon/CreditCard.svg +83 -0
  4. package/dist/images/icon/Easypaisa.png +0 -0
  5. package/dist/images/icon/MobileWallet.png +0 -0
  6. package/dist/images/icon/Raast-Logo.png +0 -0
  7. package/dist/images/icon/VISA.png +0 -0
  8. package/dist/images/icon/add-circle-1.svg +5 -0
  9. package/dist/images/icon/check-circle-broken.svg +3 -0
  10. package/dist/images/icon/close-circle.svg +5 -0
  11. package/dist/images/icon/jazzcash.png +0 -0
  12. package/dist/images/icon/loading_icon.json +3347 -0
  13. package/dist/images/icon/mastercard-logo.webp +0 -0
  14. package/dist/images/icon/paymo.jpeg +0 -0
  15. package/dist/images/icon/preview-svgrepo-com.svg +36 -0
  16. package/dist/images/icon/trash.svg +7 -0
  17. package/dist/images/icon/unionpay-logo.svg +9 -0
  18. package/dist/index-BLoegwT6.js +60476 -0
  19. package/dist/index-BLoegwT6.js.map +1 -0
  20. package/dist/index-CPnu5V8f.js +11119 -0
  21. package/dist/index-CPnu5V8f.js.map +1 -0
  22. package/dist/index.d.ts +1 -10
  23. package/dist/index.es-C5pDhGOr.js +16734 -0
  24. package/dist/index.es-C5pDhGOr.js.map +1 -0
  25. package/dist/index.js +40 -12
  26. package/dist/index.js.map +1 -1
  27. package/dist/loading_icon-n5H5dQBl.js +3375 -0
  28. package/dist/loading_icon-n5H5dQBl.js.map +1 -0
  29. package/dist/src/components/Alert/ErrorAlert.d.ts +6 -0
  30. package/dist/src/components/Alert/SuccessAlert.d.ts +6 -0
  31. package/dist/{components → src/components}/FormBuilder/DiscountInput.d.ts +3 -6
  32. package/dist/{components → src/components}/FormBuilder/FormBuilder.d.ts +2 -11
  33. package/dist/{components → src/components}/FormBuilder/QuestionCard.d.ts +0 -5
  34. package/dist/{components → src/components}/FormBuilder/QuestionEditor.d.ts +0 -5
  35. package/dist/{components → src/components}/FormBuilder/SortableQuestionList.d.ts +0 -5
  36. package/dist/src/components/FormBuilder/questionIcons.d.ts +5 -0
  37. package/dist/{components/EventAddForm → src/components/NewAddEvent}/AddEventLayout.d.ts +2 -1
  38. package/dist/{components/EventAddForm → src/components/NewAddEvent}/AddEventStepper.d.ts +2 -2
  39. package/dist/{components/EventAddForm → src/components/NewAddEvent}/common/ConfirmationModal.d.ts +1 -1
  40. package/dist/src/components/NewAddEvent/components/EventSubmissionConfirmationModal.d.ts +14 -0
  41. package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/StepTwo/TicketTierSection.d.ts +1 -1
  42. package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/TicketTierForm.d.ts +1 -1
  43. package/dist/{components/EventAddForm → src/components/NewAddEvent}/hooks/useStepperForm.d.ts +22 -22
  44. package/dist/{components/EventAddForm → src/components/NewAddEvent}/hooks/useTicketTierForm.d.ts +63 -15
  45. package/dist/src/components/NewAddEvent/schemas/step1.d.ts +211 -0
  46. package/dist/src/components/NewAddEvent/schemas/step2.d.ts +411 -0
  47. package/dist/{components/EventAddForm → src/components/NewAddEvent}/schemas/utils.d.ts +8 -2
  48. package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/IndividualFormStep.d.ts +1 -1
  49. package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/SocialProfilesStep.d.ts +1 -1
  50. package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/TeamFormStep.d.ts +1 -1
  51. package/dist/src/components/Spinner/spinner.d.ts +4 -0
  52. package/dist/src/components/TicketlyUIProvider.d.ts +35 -0
  53. package/dist/src/components/common/Loader/index.d.ts +8 -0
  54. package/dist/src/components/common/Modals/ConfirmationModal.d.ts +7 -0
  55. package/dist/{components/FormInput → src/components/ui}/FormInput.d.ts +1 -1
  56. package/dist/src/components/ui/Loader.d.ts +4 -0
  57. package/dist/{components/Button/Button.d.ts → src/components/ui/button.d.ts} +1 -1
  58. package/dist/src/index.d.ts +10 -0
  59. package/dist/{lib → src/lib}/actions.d.ts +0 -126
  60. package/dist/src/lib/dom-utils.d.ts +2 -0
  61. package/dist/src/lib/storage-utils.d.ts +5 -0
  62. package/dist/src/lib/types.d.ts +258 -0
  63. package/dist/src/redux/baseQuery.d.ts +16 -0
  64. package/dist/{services → src/redux/features}/eventApi.d.ts +1053 -1745
  65. package/dist/src/redux/features/globalSlice.d.ts +17 -0
  66. package/dist/{services → src/redux/features/single-event}/single-event-api.d.ts +856 -1190
  67. package/dist/src/redux/types.d.ts +2 -0
  68. package/dist/src/services/library-services.d.ts +15 -0
  69. package/dist/src/services/remote-config.d.ts +27 -0
  70. package/dist/{services → src/services}/utils.d.ts +1 -1
  71. package/dist/src/theme/colors.d.ts +127 -0
  72. package/dist/src/theme/typography.d.ts +13 -0
  73. package/dist/src/types/api.d.ts +18 -0
  74. package/dist/style.css +2984 -0
  75. package/dist/styles.css +3760 -4014
  76. package/package.json +78 -68
  77. package/dist/_virtual/_commonjsHelpers.js +0 -9
  78. package/dist/_virtual/_commonjsHelpers.js.map +0 -1
  79. package/dist/_virtual/customParseFormat.js +0 -5
  80. package/dist/_virtual/customParseFormat.js.map +0 -1
  81. package/dist/_virtual/dayjs.min.js +0 -5
  82. package/dist/_virtual/dayjs.min.js.map +0 -1
  83. package/dist/_virtual/duration.js +0 -5
  84. package/dist/_virtual/duration.js.map +0 -1
  85. package/dist/_virtual/index.js +0 -5
  86. package/dist/_virtual/index.js.map +0 -1
  87. package/dist/_virtual/isBetween.js +0 -5
  88. package/dist/_virtual/isBetween.js.map +0 -1
  89. package/dist/_virtual/relativeTime.js +0 -5
  90. package/dist/_virtual/relativeTime.js.map +0 -1
  91. package/dist/_virtual/use-sync-external-store-shim.development.js +0 -5
  92. package/dist/_virtual/use-sync-external-store-shim.development.js.map +0 -1
  93. package/dist/_virtual/use-sync-external-store-shim.production.js +0 -5
  94. package/dist/_virtual/use-sync-external-store-shim.production.js.map +0 -1
  95. package/dist/_virtual/with-selector.development.js +0 -5
  96. package/dist/_virtual/with-selector.development.js.map +0 -1
  97. package/dist/_virtual/with-selector.js +0 -5
  98. package/dist/_virtual/with-selector.js.map +0 -1
  99. package/dist/_virtual/with-selector.production.js +0 -5
  100. package/dist/_virtual/with-selector.production.js.map +0 -1
  101. package/dist/components/Alert/Alert.js +0 -51
  102. package/dist/components/Alert/Alert.js.map +0 -1
  103. package/dist/components/Button/Button.js +0 -52
  104. package/dist/components/Button/Button.js.map +0 -1
  105. package/dist/components/Button/Button.test.d.ts +0 -1
  106. package/dist/components/Button/index.d.ts +0 -1
  107. package/dist/components/Checkbox/Checkbox.js +0 -50
  108. package/dist/components/Checkbox/Checkbox.js.map +0 -1
  109. package/dist/components/Checkbox/Checkbox.test.d.ts +0 -1
  110. package/dist/components/Checkbox/index.d.ts +0 -1
  111. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +0 -25
  112. package/dist/components/CheckboxGroup/CheckboxGroup.js +0 -99
  113. package/dist/components/CheckboxGroup/CheckboxGroup.js.map +0 -1
  114. package/dist/components/ConfirmationModal/ConfirmationModal.d.ts +0 -15
  115. package/dist/components/ConfirmationModal/ConfirmationModal.js +0 -136
  116. package/dist/components/ConfirmationModal/ConfirmationModal.js.map +0 -1
  117. package/dist/components/ConfirmationModal/index.d.ts +0 -2
  118. package/dist/components/CustomSelect/CustomSelect.js +0 -259
  119. package/dist/components/CustomSelect/CustomSelect.js.map +0 -1
  120. package/dist/components/EventAddForm/AddEventLayout.js +0 -227
  121. package/dist/components/EventAddForm/AddEventLayout.js.map +0 -1
  122. package/dist/components/EventAddForm/AddEventStepper.js +0 -719
  123. package/dist/components/EventAddForm/AddEventStepper.js.map +0 -1
  124. package/dist/components/EventAddForm/common/ConfirmationModal.js +0 -136
  125. package/dist/components/EventAddForm/common/ConfirmationModal.js.map +0 -1
  126. package/dist/components/EventAddForm/common/DescriptionModal.js +0 -70
  127. package/dist/components/EventAddForm/common/DescriptionModal.js.map +0 -1
  128. package/dist/components/EventAddForm/components/AnimatedBackground.d.ts +0 -8
  129. package/dist/components/EventAddForm/components/ApprovalConfirmationModal.d.ts +0 -7
  130. package/dist/components/EventAddForm/components/CheckboxGroup.js +0 -92
  131. package/dist/components/EventAddForm/components/CheckboxGroup.js.map +0 -1
  132. package/dist/components/EventAddForm/components/CustomMeetingForm.js +0 -237
  133. package/dist/components/EventAddForm/components/CustomMeetingForm.js.map +0 -1
  134. package/dist/components/EventAddForm/components/DateTimeField.js +0 -173
  135. package/dist/components/EventAddForm/components/DateTimeField.js.map +0 -1
  136. package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.d.ts +0 -33
  137. package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.js +0 -366
  138. package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.js.map +0 -1
  139. package/dist/components/EventAddForm/components/FileUpload.js +0 -412
  140. package/dist/components/EventAddForm/components/FileUpload.js.map +0 -1
  141. package/dist/components/EventAddForm/components/FormBuilderProceedModal.js +0 -197
  142. package/dist/components/EventAddForm/components/FormBuilderProceedModal.js.map +0 -1
  143. package/dist/components/EventAddForm/components/GoogleMapsAutocompleteInput.js +0 -1179
  144. package/dist/components/EventAddForm/components/GoogleMapsAutocompleteInput.js.map +0 -1
  145. package/dist/components/EventAddForm/components/InputField.d.ts +0 -15
  146. package/dist/components/EventAddForm/components/RadioGroupButton.d.ts +0 -14
  147. package/dist/components/EventAddForm/components/SelectField.d.ts +0 -19
  148. package/dist/components/EventAddForm/components/SingleDateTimeInput.js +0 -102
  149. package/dist/components/EventAddForm/components/SingleDateTimeInput.js.map +0 -1
  150. package/dist/components/EventAddForm/components/StepTwo/CustomFormSection.js +0 -277
  151. package/dist/components/EventAddForm/components/StepTwo/CustomFormSection.js.map +0 -1
  152. package/dist/components/EventAddForm/components/StepTwo/TicketTierSection.js +0 -148
  153. package/dist/components/EventAddForm/components/StepTwo/TicketTierSection.js.map +0 -1
  154. package/dist/components/EventAddForm/components/TicketTierForm.js +0 -418
  155. package/dist/components/EventAddForm/components/TicketTierForm.js.map +0 -1
  156. package/dist/components/EventAddForm/components/TicketTypeSelection.js +0 -93
  157. package/dist/components/EventAddForm/components/TicketTypeSelection.js.map +0 -1
  158. package/dist/components/EventAddForm/hooks/useStepperForm.js +0 -371
  159. package/dist/components/EventAddForm/hooks/useStepperForm.js.map +0 -1
  160. package/dist/components/EventAddForm/hooks/useTicketTierForm.js +0 -237
  161. package/dist/components/EventAddForm/hooks/useTicketTierForm.js.map +0 -1
  162. package/dist/components/EventAddForm/index.d.ts +0 -3
  163. package/dist/components/EventAddForm/index.js +0 -41
  164. package/dist/components/EventAddForm/index.js.map +0 -1
  165. package/dist/components/EventAddForm/schemas/index.d.ts +0 -2
  166. package/dist/components/EventAddForm/schemas/step1.d.ts +0 -47
  167. package/dist/components/EventAddForm/schemas/step1.js +0 -135
  168. package/dist/components/EventAddForm/schemas/step1.js.map +0 -1
  169. package/dist/components/EventAddForm/schemas/step2.d.ts +0 -138
  170. package/dist/components/EventAddForm/schemas/step2.js +0 -94
  171. package/dist/components/EventAddForm/schemas/step2.js.map +0 -1
  172. package/dist/components/EventAddForm/schemas/utils.js +0 -28
  173. package/dist/components/EventAddForm/schemas/utils.js.map +0 -1
  174. package/dist/components/EventAddForm/steps/IndividualFormStep.js +0 -85
  175. package/dist/components/EventAddForm/steps/IndividualFormStep.js.map +0 -1
  176. package/dist/components/EventAddForm/steps/SocialProfilesStep.js +0 -123
  177. package/dist/components/EventAddForm/steps/SocialProfilesStep.js.map +0 -1
  178. package/dist/components/EventAddForm/steps/StepOne.js +0 -462
  179. package/dist/components/EventAddForm/steps/StepOne.js.map +0 -1
  180. package/dist/components/EventAddForm/steps/StepTwo.js +0 -173
  181. package/dist/components/EventAddForm/steps/StepTwo.js.map +0 -1
  182. package/dist/components/EventAddForm/steps/TeamFormStep.js +0 -13
  183. package/dist/components/EventAddForm/steps/TeamFormStep.js.map +0 -1
  184. package/dist/components/FormBuilder/CategoryList.js +0 -242
  185. package/dist/components/FormBuilder/CategoryList.js.map +0 -1
  186. package/dist/components/FormBuilder/DiscountInput.js +0 -366
  187. package/dist/components/FormBuilder/DiscountInput.js.map +0 -1
  188. package/dist/components/FormBuilder/FormBuilder.js +0 -918
  189. package/dist/components/FormBuilder/FormBuilder.js.map +0 -1
  190. package/dist/components/FormBuilder/OptionList.js +0 -120
  191. package/dist/components/FormBuilder/OptionList.js.map +0 -1
  192. package/dist/components/FormBuilder/PaymentPreview.d.ts +0 -12
  193. package/dist/components/FormBuilder/PaymentPreview.js +0 -70
  194. package/dist/components/FormBuilder/PaymentPreview.js.map +0 -1
  195. package/dist/components/FormBuilder/PreviewInput.d.ts +0 -10
  196. package/dist/components/FormBuilder/PreviewInput.js +0 -143
  197. package/dist/components/FormBuilder/PreviewInput.js.map +0 -1
  198. package/dist/components/FormBuilder/QuestionCard.js +0 -252
  199. package/dist/components/FormBuilder/QuestionCard.js.map +0 -1
  200. package/dist/components/FormBuilder/QuestionEditor.js +0 -166
  201. package/dist/components/FormBuilder/QuestionEditor.js.map +0 -1
  202. package/dist/components/FormBuilder/RequiredToggle.js +0 -43
  203. package/dist/components/FormBuilder/RequiredToggle.js.map +0 -1
  204. package/dist/components/FormBuilder/SortableQuestionList.js +0 -137
  205. package/dist/components/FormBuilder/SortableQuestionList.js.map +0 -1
  206. package/dist/components/FormBuilder/index.d.ts +0 -4
  207. package/dist/components/FormBuilder/utils.js +0 -229
  208. package/dist/components/FormBuilder/utils.js.map +0 -1
  209. package/dist/components/FormInput/FormInput.js +0 -126
  210. package/dist/components/FormInput/FormInput.js.map +0 -1
  211. package/dist/components/FormInput/FormInput.test.d.ts +0 -1
  212. package/dist/components/FormInput/index.d.ts +0 -2
  213. package/dist/components/ImageCropModal/index.js +0 -464
  214. package/dist/components/ImageCropModal/index.js.map +0 -1
  215. package/dist/components/InformationPopover/InformationPopover.d.ts +0 -7
  216. package/dist/components/InformationPopover/InformationPopover.js +0 -19
  217. package/dist/components/InformationPopover/InformationPopover.js.map +0 -1
  218. package/dist/components/InformationPopover.js +0 -19
  219. package/dist/components/InformationPopover.js.map +0 -1
  220. package/dist/components/InputErrorMessage/InputErrorMessage.js +0 -21
  221. package/dist/components/InputErrorMessage/InputErrorMessage.js.map +0 -1
  222. package/dist/components/Modal/Modal.d.ts +0 -15
  223. package/dist/components/Modal/Modal.js +0 -73
  224. package/dist/components/Modal/Modal.js.map +0 -1
  225. package/dist/components/Radio/Radio.js +0 -35
  226. package/dist/components/Radio/Radio.js.map +0 -1
  227. package/dist/components/Spinner/spinner.d.ts +0 -2
  228. package/dist/components/Spinner/spinner.js +0 -22
  229. package/dist/components/Spinner/spinner.js.map +0 -1
  230. package/dist/components/Toggle/Toggle.d.ts +0 -16
  231. package/dist/components/Toggle/index.d.ts +0 -2
  232. package/dist/components/Tooltip/Tooltip.d.ts +0 -12
  233. package/dist/components/Tooltip/Tooltip.js +0 -134
  234. package/dist/components/Tooltip/Tooltip.js.map +0 -1
  235. package/dist/components/common/FallbackImage.js +0 -47
  236. package/dist/components/common/FallbackImage.js.map +0 -1
  237. package/dist/components/ui/Calendar/calendar-utils.js +0 -51
  238. package/dist/components/ui/Calendar/calendar-utils.js.map +0 -1
  239. package/dist/components/ui/Calendar/index.js +0 -142
  240. package/dist/components/ui/Calendar/index.js.map +0 -1
  241. package/dist/components/ui/Checkbox.d.ts +0 -9
  242. package/dist/components/ui/Checkbox.js +0 -50
  243. package/dist/components/ui/Checkbox.js.map +0 -1
  244. package/dist/components/ui/DatePicker/index.js +0 -188
  245. package/dist/components/ui/DatePicker/index.js.map +0 -1
  246. package/dist/components/ui/FormInput.js +0 -129
  247. package/dist/components/ui/FormInput.js.map +0 -1
  248. package/dist/components/ui/InputErrorMessage.d.ts +0 -7
  249. package/dist/components/ui/InputErrorMessage.js +0 -21
  250. package/dist/components/ui/InputErrorMessage.js.map +0 -1
  251. package/dist/components/ui/Modal/index.js +0 -73
  252. package/dist/components/ui/Modal/index.js.map +0 -1
  253. package/dist/components/ui/Radio.d.ts +0 -6
  254. package/dist/components/ui/Radio.js +0 -35
  255. package/dist/components/ui/Radio.js.map +0 -1
  256. package/dist/components/ui/RichTextEditor.js +0 -242
  257. package/dist/components/ui/RichTextEditor.js.map +0 -1
  258. package/dist/components/ui/TimePicker/index.js +0 -215
  259. package/dist/components/ui/TimePicker/index.js.map +0 -1
  260. package/dist/components/ui/TimeSelector/index.js +0 -138
  261. package/dist/components/ui/TimeSelector/index.js.map +0 -1
  262. package/dist/components/ui/Tooltip.d.ts +0 -12
  263. package/dist/components/ui/Tooltip.js +0 -136
  264. package/dist/components/ui/Tooltip.js.map +0 -1
  265. package/dist/hooks/useDropdownPosition.d.ts +0 -11
  266. package/dist/hooks/useFirebaseAuthState.d.ts +0 -6
  267. package/dist/hooks/useFirebaseAuthState.js +0 -23
  268. package/dist/hooks/useFirebaseAuthState.js.map +0 -1
  269. package/dist/hooks/useTicketTierForm.d.ts +0 -61
  270. package/dist/lib/actions.js +0 -32
  271. package/dist/lib/actions.js.map +0 -1
  272. package/dist/lib/cropImage.js +0 -113
  273. package/dist/lib/cropImage.js.map +0 -1
  274. package/dist/lib/imageAnalysis.js +0 -58
  275. package/dist/lib/imageAnalysis.js.map +0 -1
  276. package/dist/lib/utils.js +0 -9
  277. package/dist/lib/utils.js.map +0 -1
  278. package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -60
  279. package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  280. package/dist/node_modules/@dnd-kit/core/dist/core.esm.js +0 -3458
  281. package/dist/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  282. package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -593
  283. package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  284. package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -302
  285. package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  286. package/dist/node_modules/@firebase/app/dist/esm/index.esm.js +0 -768
  287. package/dist/node_modules/@firebase/app/dist/esm/index.esm.js.map +0 -1
  288. package/dist/node_modules/@firebase/component/dist/esm/index.esm.js +0 -340
  289. package/dist/node_modules/@firebase/component/dist/esm/index.esm.js.map +0 -1
  290. package/dist/node_modules/@firebase/logger/dist/esm/index.esm.js +0 -123
  291. package/dist/node_modules/@firebase/logger/dist/esm/index.esm.js.map +0 -1
  292. package/dist/node_modules/@firebase/storage/dist/index.esm.js +0 -2623
  293. package/dist/node_modules/@firebase/storage/dist/index.esm.js.map +0 -1
  294. package/dist/node_modules/@firebase/util/dist/index.esm.js +0 -658
  295. package/dist/node_modules/@firebase/util/dist/index.esm.js.map +0 -1
  296. package/dist/node_modules/@firebase/util/dist/postinstall.js +0 -5
  297. package/dist/node_modules/@firebase/util/dist/postinstall.js.map +0 -1
  298. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.js +0 -3179
  299. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.js.map +0 -1
  300. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.js +0 -60
  301. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.js.map +0 -1
  302. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js +0 -400
  303. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js.map +0 -1
  304. package/dist/node_modules/@heroicons/react/20/solid/esm/CheckIcon.js +0 -27
  305. package/dist/node_modules/@heroicons/react/20/solid/esm/CheckIcon.js.map +0 -1
  306. package/dist/node_modules/@heroicons/react/20/solid/esm/ChevronDownIcon.js +0 -27
  307. package/dist/node_modules/@heroicons/react/20/solid/esm/ChevronDownIcon.js.map +0 -1
  308. package/dist/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js +0 -29
  309. package/dist/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js.map +0 -1
  310. package/dist/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js +0 -29
  311. package/dist/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js.map +0 -1
  312. package/dist/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js +0 -29
  313. package/dist/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js.map +0 -1
  314. package/dist/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js +0 -29
  315. package/dist/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js.map +0 -1
  316. package/dist/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js +0 -29
  317. package/dist/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js.map +0 -1
  318. package/dist/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js +0 -29
  319. package/dist/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js.map +0 -1
  320. package/dist/node_modules/@heroicons/react/24/outline/esm/MapPinIcon.js +0 -33
  321. package/dist/node_modules/@heroicons/react/24/outline/esm/MapPinIcon.js.map +0 -1
  322. package/dist/node_modules/@heroicons/react/24/outline/esm/VideoCameraIcon.js +0 -29
  323. package/dist/node_modules/@heroicons/react/24/outline/esm/VideoCameraIcon.js.map +0 -1
  324. package/dist/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js +0 -29
  325. package/dist/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js.map +0 -1
  326. package/dist/node_modules/@tiptap/core/dist/index.js +0 -5446
  327. package/dist/node_modules/@tiptap/core/dist/index.js.map +0 -1
  328. package/dist/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js +0 -21
  329. package/dist/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js.map +0 -1
  330. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js +0 -78
  331. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js.map +0 -1
  332. package/dist/node_modules/@tiptap/extension-bold/dist/index.js +0 -100
  333. package/dist/node_modules/@tiptap/extension-bold/dist/index.js.map +0 -1
  334. package/dist/node_modules/@tiptap/extension-code/dist/index.js +0 -70
  335. package/dist/node_modules/@tiptap/extension-code/dist/index.js.map +0 -1
  336. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js +0 -317
  337. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js.map +0 -1
  338. package/dist/node_modules/@tiptap/extension-document/dist/index.js +0 -16
  339. package/dist/node_modules/@tiptap/extension-document/dist/index.js.map +0 -1
  340. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js +0 -66
  341. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js.map +0 -1
  342. package/dist/node_modules/@tiptap/extension-heading/dist/index.js +0 -86
  343. package/dist/node_modules/@tiptap/extension-heading/dist/index.js.map +0 -1
  344. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js +0 -80
  345. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js.map +0 -1
  346. package/dist/node_modules/@tiptap/extension-italic/dist/index.js +0 -98
  347. package/dist/node_modules/@tiptap/extension-italic/dist/index.js.map +0 -1
  348. package/dist/node_modules/@tiptap/extension-link/dist/index.js +0 -423
  349. package/dist/node_modules/@tiptap/extension-link/dist/index.js.map +0 -1
  350. package/dist/node_modules/@tiptap/extension-list/dist/index.js +0 -1039
  351. package/dist/node_modules/@tiptap/extension-list/dist/index.js.map +0 -1
  352. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js +0 -61
  353. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js.map +0 -1
  354. package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js +0 -7
  355. package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js.map +0 -1
  356. package/dist/node_modules/@tiptap/extension-strike/dist/index.js +0 -79
  357. package/dist/node_modules/@tiptap/extension-strike/dist/index.js.map +0 -1
  358. package/dist/node_modules/@tiptap/extension-text/dist/index.js +0 -16
  359. package/dist/node_modules/@tiptap/extension-text/dist/index.js.map +0 -1
  360. package/dist/node_modules/@tiptap/extension-underline/dist/index.js +0 -76
  361. package/dist/node_modules/@tiptap/extension-underline/dist/index.js.map +0 -1
  362. package/dist/node_modules/@tiptap/extensions/dist/index.js +0 -376
  363. package/dist/node_modules/@tiptap/extensions/dist/index.js.map +0 -1
  364. package/dist/node_modules/@tiptap/react/dist/index.js +0 -650
  365. package/dist/node_modules/@tiptap/react/dist/index.js.map +0 -1
  366. package/dist/node_modules/@tiptap/starter-kit/dist/index.js +0 -97
  367. package/dist/node_modules/@tiptap/starter-kit/dist/index.js.map +0 -1
  368. package/dist/node_modules/dayjs/dayjs.min.js +0 -283
  369. package/dist/node_modules/dayjs/dayjs.min.js.map +0 -1
  370. package/dist/node_modules/dayjs/plugin/customParseFormat.js +0 -130
  371. package/dist/node_modules/dayjs/plugin/customParseFormat.js.map +0 -1
  372. package/dist/node_modules/dayjs/plugin/duration.js +0 -137
  373. package/dist/node_modules/dayjs/plugin/duration.js.map +0 -1
  374. package/dist/node_modules/dayjs/plugin/isBetween.js +0 -20
  375. package/dist/node_modules/dayjs/plugin/isBetween.js.map +0 -1
  376. package/dist/node_modules/dayjs/plugin/relativeTime.js +0 -49
  377. package/dist/node_modules/dayjs/plugin/relativeTime.js.map +0 -1
  378. package/dist/node_modules/fast-equals/dist/es/index.js +0 -442
  379. package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
  380. package/dist/node_modules/idb/build/index.js +0 -70
  381. package/dist/node_modules/idb/build/index.js.map +0 -1
  382. package/dist/node_modules/idb/build/wrap-idb-value.js +0 -149
  383. package/dist/node_modules/idb/build/wrap-idb-value.js.map +0 -1
  384. package/dist/node_modules/linkifyjs/dist/linkify.js +0 -1159
  385. package/dist/node_modules/linkifyjs/dist/linkify.js.map +0 -1
  386. package/dist/node_modules/orderedmap/dist/index.js +0 -120
  387. package/dist/node_modules/orderedmap/dist/index.js.map +0 -1
  388. package/dist/node_modules/prosemirror-commands/dist/index.js +0 -527
  389. package/dist/node_modules/prosemirror-commands/dist/index.js.map +0 -1
  390. package/dist/node_modules/prosemirror-dropcursor/dist/index.js +0 -137
  391. package/dist/node_modules/prosemirror-dropcursor/dist/index.js.map +0 -1
  392. package/dist/node_modules/prosemirror-gapcursor/dist/index.js +0 -221
  393. package/dist/node_modules/prosemirror-gapcursor/dist/index.js.map +0 -1
  394. package/dist/node_modules/prosemirror-history/dist/index.js +0 -357
  395. package/dist/node_modules/prosemirror-history/dist/index.js.map +0 -1
  396. package/dist/node_modules/prosemirror-keymap/dist/index.js +0 -84
  397. package/dist/node_modules/prosemirror-keymap/dist/index.js.map +0 -1
  398. package/dist/node_modules/prosemirror-model/dist/index.js +0 -3209
  399. package/dist/node_modules/prosemirror-model/dist/index.js.map +0 -1
  400. package/dist/node_modules/prosemirror-schema-list/dist/index.js +0 -131
  401. package/dist/node_modules/prosemirror-schema-list/dist/index.js.map +0 -1
  402. package/dist/node_modules/prosemirror-state/dist/index.js +0 -936
  403. package/dist/node_modules/prosemirror-state/dist/index.js.map +0 -1
  404. package/dist/node_modules/prosemirror-transform/dist/index.js +0 -1881
  405. package/dist/node_modules/prosemirror-transform/dist/index.js.map +0 -1
  406. package/dist/node_modules/prosemirror-view/dist/index.js +0 -5232
  407. package/dist/node_modules/prosemirror-view/dist/index.js.map +0 -1
  408. package/dist/node_modules/rope-sequence/dist/index.js +0 -184
  409. package/dist/node_modules/rope-sequence/dist/index.js.map +0 -1
  410. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +0 -82
  411. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +0 -1
  412. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +0 -78
  413. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js.map +0 -1
  414. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -78
  415. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
  416. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -63
  417. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
  418. package/dist/node_modules/use-sync-external-store/shim/index.js +0 -13
  419. package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
  420. package/dist/node_modules/use-sync-external-store/shim/with-selector.js +0 -13
  421. package/dist/node_modules/use-sync-external-store/shim/with-selector.js.map +0 -1
  422. package/dist/node_modules/w3c-keyname/index.js +0 -106
  423. package/dist/node_modules/w3c-keyname/index.js.map +0 -1
  424. package/dist/node_modules/zod/v4/classic/coerce.js +0 -10
  425. package/dist/node_modules/zod/v4/classic/coerce.js.map +0 -1
  426. package/dist/node_modules/zod/v4/classic/compat.js +0 -8
  427. package/dist/node_modules/zod/v4/classic/compat.js.map +0 -1
  428. package/dist/node_modules/zod/v4/classic/errors.js +0 -45
  429. package/dist/node_modules/zod/v4/classic/errors.js.map +0 -1
  430. package/dist/node_modules/zod/v4/classic/iso.js +0 -44
  431. package/dist/node_modules/zod/v4/classic/iso.js.map +0 -1
  432. package/dist/node_modules/zod/v4/classic/parse.js +0 -30
  433. package/dist/node_modules/zod/v4/classic/parse.js.map +0 -1
  434. package/dist/node_modules/zod/v4/classic/schemas.js +0 -711
  435. package/dist/node_modules/zod/v4/classic/schemas.js.map +0 -1
  436. package/dist/node_modules/zod/v4/core/api.js +0 -588
  437. package/dist/node_modules/zod/v4/core/api.js.map +0 -1
  438. package/dist/node_modules/zod/v4/core/checks.js +0 -411
  439. package/dist/node_modules/zod/v4/core/checks.js.map +0 -1
  440. package/dist/node_modules/zod/v4/core/core.js +0 -75
  441. package/dist/node_modules/zod/v4/core/core.js.map +0 -1
  442. package/dist/node_modules/zod/v4/core/doc.js +0 -38
  443. package/dist/node_modules/zod/v4/core/doc.js.map +0 -1
  444. package/dist/node_modules/zod/v4/core/errors.js +0 -73
  445. package/dist/node_modules/zod/v4/core/errors.js.map +0 -1
  446. package/dist/node_modules/zod/v4/core/json-schema-processors.js +0 -359
  447. package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +0 -1
  448. package/dist/node_modules/zod/v4/core/parse.js +0 -96
  449. package/dist/node_modules/zod/v4/core/parse.js.map +0 -1
  450. package/dist/node_modules/zod/v4/core/regexes.js +0 -84
  451. package/dist/node_modules/zod/v4/core/regexes.js.map +0 -1
  452. package/dist/node_modules/zod/v4/core/registries.js +0 -52
  453. package/dist/node_modules/zod/v4/core/registries.js.map +0 -1
  454. package/dist/node_modules/zod/v4/core/schemas.js +0 -1391
  455. package/dist/node_modules/zod/v4/core/schemas.js.map +0 -1
  456. package/dist/node_modules/zod/v4/core/to-json-schema.js +0 -363
  457. package/dist/node_modules/zod/v4/core/to-json-schema.js.map +0 -1
  458. package/dist/node_modules/zod/v4/core/util.js +0 -431
  459. package/dist/node_modules/zod/v4/core/util.js.map +0 -1
  460. package/dist/node_modules/zod/v4/core/versions.js +0 -9
  461. package/dist/node_modules/zod/v4/core/versions.js.map +0 -1
  462. package/dist/redux/baseQuery.d.ts +0 -1
  463. package/dist/redux/baseQuery.js +0 -24
  464. package/dist/redux/baseQuery.js.map +0 -1
  465. package/dist/services/eventApi.js +0 -411
  466. package/dist/services/eventApi.js.map +0 -1
  467. package/dist/services/helpers.js +0 -115
  468. package/dist/services/helpers.js.map +0 -1
  469. package/dist/services/initialize-firebase.d.ts +0 -2
  470. package/dist/services/initialize-firebase.js +0 -20
  471. package/dist/services/initialize-firebase.js.map +0 -1
  472. package/dist/services/process-image-on-server.js +0 -30
  473. package/dist/services/process-image-on-server.js.map +0 -1
  474. package/dist/services/remote-config.d.ts +0 -5
  475. package/dist/services/remote-config.js +0 -9
  476. package/dist/services/remote-config.js.map +0 -1
  477. package/dist/services/single-event-api.js +0 -301
  478. package/dist/services/single-event-api.js.map +0 -1
  479. package/dist/services/utils.js +0 -107
  480. package/dist/services/utils.js.map +0 -1
  481. package/dist/setupTests.d.ts +0 -1
  482. package/dist/stories/Alert.stories.d.ts +0 -10
  483. package/dist/stories/Button.stories.d.ts +0 -13
  484. package/dist/types/redux-types.d.ts +0 -15
  485. package/dist/types/types.d.ts +0 -60
  486. package/dist/types/types.js +0 -10
  487. package/dist/types/types.js.map +0 -1
  488. package/dist/utils/cn.d.ts +0 -6
  489. package/dist/utils/cn.js +0 -9
  490. package/dist/utils/cn.js.map +0 -1
  491. package/dist/utils/date-range.d.ts +0 -4
  492. package/dist/utils/date-range.js +0 -13
  493. package/dist/utils/date-range.js.map +0 -1
  494. package/dist/utils/single-event-helpers.d.ts +0 -50
  495. package/dist/utils/single-event-helpers.js +0 -18
  496. package/dist/utils/single-event-helpers.js.map +0 -1
  497. package/dist/utils/social-validation.js +0 -42
  498. package/dist/utils/social-validation.js.map +0 -1
  499. package/dist/utils/utils.js +0 -20
  500. package/dist/utils/utils.js.map +0 -1
  501. /package/dist/{components/Alert/Alert.d.ts → src/components/Alert/index.d.ts} +0 -0
  502. /package/dist/{components → src/components}/FormBuilder/CategoryList.d.ts +0 -0
  503. /package/dist/{components → src/components}/FormBuilder/OptionList.d.ts +0 -0
  504. /package/dist/{components → src/components}/FormBuilder/RequiredToggle.d.ts +0 -0
  505. /package/dist/{components → src/components}/FormBuilder/types.d.ts +0 -0
  506. /package/dist/{components → src/components}/FormBuilder/utils.d.ts +0 -0
  507. /package/dist/{components → src/components}/ImageCropModal/index.d.ts +0 -0
  508. /package/dist/{components → src/components}/InformationPopover.d.ts +0 -0
  509. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/common/DescriptionModal.d.ts +0 -0
  510. /package/dist/{components/ui/FormInput.d.ts → src/components/NewAddEvent/components/AddEventFormInput.d.ts} +0 -0
  511. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/CheckboxGroup.d.ts +0 -0
  512. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/CustomMeetingForm.d.ts +0 -0
  513. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/DateTimeField.d.ts +0 -0
  514. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/FileUpload.d.ts +0 -0
  515. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/FormBuilderProceedModal.d.ts +0 -0
  516. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/GoogleMapsAutocompleteInput.d.ts +0 -0
  517. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/SingleDateTimeInput.d.ts +0 -0
  518. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/StepTwo/CustomFormSection.d.ts +0 -0
  519. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/TicketTypeSelection.d.ts +0 -0
  520. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/StepOne.d.ts +0 -0
  521. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/StepTwo.d.ts +0 -0
  522. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/types.d.ts +0 -0
  523. /package/dist/{components → src/components}/common/FallbackImage.d.ts +0 -0
  524. /package/dist/{components → src/components}/ui/Calendar/calendar-utils.d.ts +0 -0
  525. /package/dist/{components → src/components}/ui/Calendar/index.d.ts +0 -0
  526. /package/dist/{components/Checkbox → src/components/ui}/Checkbox.d.ts +0 -0
  527. /package/dist/{components/CustomSelect → src/components/ui}/CustomSelect.d.ts +0 -0
  528. /package/dist/{components → src/components}/ui/DatePicker/index.d.ts +0 -0
  529. /package/dist/{components/InputErrorMessage → src/components/ui}/InputErrorMessage.d.ts +0 -0
  530. /package/dist/{components → src/components}/ui/Modal/index.d.ts +0 -0
  531. /package/dist/{components/Radio → src/components/ui}/Radio.d.ts +0 -0
  532. /package/dist/{components → src/components}/ui/RichTextEditor.d.ts +0 -0
  533. /package/dist/{components → src/components}/ui/TimePicker/index.d.ts +0 -0
  534. /package/dist/{components → src/components}/ui/TimeSelector/index.d.ts +0 -0
  535. /package/dist/{components → src/components}/ui/Tooltip/index.d.ts +0 -0
  536. /package/dist/{lib → src/lib}/constants.d.ts +0 -0
  537. /package/dist/{lib → src/lib}/cropImage.d.ts +0 -0
  538. /package/dist/{lib → src/lib}/imageAnalysis.d.ts +0 -0
  539. /package/dist/{utils → src/lib}/social-validation.d.ts +0 -0
  540. /package/dist/{lib/utils.d.ts → src/lib/tailwind-merge.d.ts} +0 -0
  541. /package/dist/{utils → src/lib}/utils.d.ts +0 -0
  542. /package/dist/{services → src/redux/features/single-event}/helpers.d.ts +0 -0
  543. /package/dist/{services → src/services}/process-image-on-server.d.ts +0 -0
  544. /package/dist/{types → src/types}/events.d.ts +0 -0
  545. /package/dist/{types → src/types}/question.d.ts +0 -0
@@ -1,371 +0,0 @@
1
- import { useCallback, useState, useRef, useEffect } from "react";
2
- import { step1Schema } from "../schemas/step1.js";
3
- import { getStep2Schema } from "../schemas/step2.js";
4
- const useStepperForm = ({
5
- initialData,
6
- storageKey,
7
- onSaveDraft,
8
- onSubmitFinal,
9
- enableLocalStorage = true,
10
- // Default to true
11
- initialStep
12
- }) => {
13
- const getSavedData = useCallback(() => {
14
- if (!enableLocalStorage || !storageKey) return null;
15
- if (typeof window !== "undefined") {
16
- try {
17
- const saved = localStorage.getItem(storageKey);
18
- if (saved) {
19
- return JSON.parse(saved);
20
- }
21
- } catch (e) {
22
- console.error("Failed to load draft form state", e);
23
- }
24
- }
25
- return null;
26
- }, [storageKey, enableLocalStorage]);
27
- const [currentStep, setCurrentStep] = useState(() => {
28
- if (initialStep) return initialStep;
29
- const savedData = getSavedData();
30
- if (savedData && typeof savedData.currentStep === "number") {
31
- return savedData.currentStep;
32
- }
33
- return 1;
34
- });
35
- const [maxStepReached, setMaxStepReached] = useState(() => {
36
- const savedData = getSavedData();
37
- let savedMax = 1;
38
- if (savedData && typeof savedData.maxStepReached === "number") {
39
- savedMax = Math.max(savedData.maxStepReached, savedData.currentStep || 1);
40
- }
41
- if (initialStep) {
42
- return Math.max(savedMax, initialStep);
43
- }
44
- return savedMax;
45
- });
46
- const [formState, setFormState] = useState(() => {
47
- const baseState = {
48
- name: "",
49
- description: "",
50
- event_type: [],
51
- event_categories: [],
52
- custom_category: "",
53
- institution_name: "",
54
- event_start_timestamp: { date: "", time: "" },
55
- event_end_timestamp: { date: "", time: "" },
56
- registration_start_timestamp: { date: "", time: "" },
57
- registration_end_timestamp: { date: "", time: "" },
58
- venue: "",
59
- location_type: "",
60
- ...initialData
61
- // Merge API data first
62
- };
63
- const savedData = getSavedData();
64
- if (savedData) {
65
- const restoredState = savedData.formState || savedData;
66
- return {
67
- ...baseState,
68
- ...restoredState
69
- };
70
- }
71
- return baseState;
72
- });
73
- const saveToLocalStorage = useCallback((data, step, maxStep) => {
74
- if (typeof window !== "undefined" && enableLocalStorage && storageKey) {
75
- const storageData = {
76
- formState: data,
77
- currentStep: step,
78
- maxStepReached: maxStep,
79
- lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
80
- };
81
- localStorage.setItem(storageKey, JSON.stringify(storageData));
82
- }
83
- }, [storageKey, enableLocalStorage]);
84
- const [touched, setTouched] = useState({});
85
- const [errors, setErrors] = useState({});
86
- const [isSubmitting, setIsSubmitting] = useState(false);
87
- const latestFormState = useRef(formState);
88
- const latestCurrentStep = useRef(currentStep);
89
- const latestMaxStepReached = useRef(maxStepReached);
90
- useEffect(() => {
91
- latestFormState.current = formState;
92
- latestCurrentStep.current = currentStep;
93
- latestMaxStepReached.current = maxStepReached;
94
- }, [formState, currentStep, maxStepReached]);
95
- const [alert, setAlert] = useState({
96
- show: false,
97
- message: "",
98
- type: "success"
99
- });
100
- useEffect(() => {
101
- if (initialData && Object.keys(initialData).length > 0 && setFormState) {
102
- setFormState((prev) => {
103
- const nextState = { ...prev };
104
- Object.keys(initialData).forEach((key) => {
105
- if (!touched[key]) {
106
- nextState[key] = initialData[key];
107
- }
108
- });
109
- if (JSON.stringify(prev) === JSON.stringify(nextState)) {
110
- return prev;
111
- }
112
- saveToLocalStorage(nextState, currentStep, maxStepReached);
113
- return nextState;
114
- });
115
- }
116
- }, [initialData]);
117
- useEffect(() => {
118
- const savedData = getSavedData();
119
- if (savedData && typeof savedData.currentStep === "number") {
120
- setCurrentStep(savedData.currentStep);
121
- setMaxStepReached(savedData.maxStepReached || savedData.currentStep);
122
- } else {
123
- if (initialStep) {
124
- setCurrentStep(initialStep);
125
- setMaxStepReached(Math.max(1, initialStep));
126
- } else {
127
- setCurrentStep(1);
128
- setMaxStepReached(1);
129
- }
130
- }
131
- }, [storageKey, getSavedData, initialStep]);
132
- const closeAlert = useCallback(() => {
133
- setAlert((prev) => ({ ...prev, show: false }));
134
- }, []);
135
- const getSchemaForStep = useCallback((step, currentState) => {
136
- switch (step) {
137
- case 1:
138
- return step1Schema;
139
- case 2:
140
- return getStep2Schema(currentState);
141
- default:
142
- return null;
143
- }
144
- }, []);
145
- const validateFields = useCallback((fields, currentState) => {
146
- const schema = getSchemaForStep(currentStep, currentState);
147
- if (!schema) return;
148
- const result = schema.safeParse(currentState);
149
- setErrors((prevErrors) => {
150
- const newErrors = { ...prevErrors };
151
- fields.forEach((field) => {
152
- const fieldKey = field;
153
- if (result.success) {
154
- delete newErrors[fieldKey];
155
- } else {
156
- const issue = result.error.issues.find((i) => i.path[0] === fieldKey);
157
- if (issue) {
158
- newErrors[fieldKey] = issue.message;
159
- } else {
160
- delete newErrors[fieldKey];
161
- }
162
- }
163
- });
164
- return newErrors;
165
- });
166
- }, [currentStep, getSchemaForStep]);
167
- const validateSingleField = useCallback((field, value, currentState) => {
168
- validateFields([field], { ...currentState, [field]: value });
169
- }, [validateFields]);
170
- const setField = useCallback((field, value, relatedFields = []) => {
171
- if (setFormState) setFormState((prev) => {
172
- const newState = { ...prev, [field]: value };
173
- setTouched((prevTouched) => ({ ...prevTouched, [field]: true }));
174
- if (touched[field] || errors[field] || relatedFields.length > 0) {
175
- validateFields([field, ...relatedFields], newState);
176
- }
177
- return newState;
178
- });
179
- }, [touched, errors, validateFields]);
180
- const setMultipleFields = useCallback((fieldsOrFn) => {
181
- if (setFormState) setFormState((prev) => {
182
- const fields = typeof fieldsOrFn === "function" ? fieldsOrFn(prev) : fieldsOrFn;
183
- const newState = { ...prev, ...fields };
184
- const fieldsToValidate = [];
185
- Object.keys(fields).forEach((key) => {
186
- const k = key;
187
- if (touched[k] || errors[k]) {
188
- fieldsToValidate.push(k);
189
- }
190
- });
191
- if (fieldsToValidate.length > 0) {
192
- validateFields(fieldsToValidate, newState);
193
- }
194
- return newState;
195
- });
196
- }, [touched, errors, validateFields]);
197
- const handleBlur = useCallback((field) => {
198
- setTouched((prev) => ({ ...prev, [field]: true }));
199
- validateSingleField(field, latestFormState.current[field], latestFormState.current);
200
- }, [validateSingleField]);
201
- const clearError = useCallback((field) => {
202
- setErrors((prev) => {
203
- const newErrors = { ...prev };
204
- delete newErrors[field];
205
- return newErrors;
206
- });
207
- }, []);
208
- const scrollToFirstError = (currentErrors) => {
209
- if (typeof document === "undefined") return;
210
- const inputs = document.querySelectorAll("[data-name]");
211
- for (const input of Array.from(inputs)) {
212
- const fieldName = input.getAttribute("data-name");
213
- if (fieldName && currentErrors[fieldName]) {
214
- input.scrollIntoView({ behavior: "smooth", block: "center" });
215
- const actualInput = input.querySelector("input, textarea, select");
216
- if (actualInput) actualInput.focus();
217
- input.classList.add("error-highlight");
218
- setTimeout(() => input.classList.remove("error-highlight"), 2e3);
219
- return;
220
- }
221
- }
222
- };
223
- const validateStep = useCallback((step) => {
224
- const schema = getSchemaForStep(step, formState);
225
- if (!schema) return true;
226
- const result = schema.safeParse(formState);
227
- if (!result.success) {
228
- const newErrors = {};
229
- const newTouched = {};
230
- result.error.issues.forEach((issue) => {
231
- const path = issue.path[0];
232
- if (!newErrors[path]) {
233
- newErrors[path] = issue.message;
234
- }
235
- newTouched[path] = true;
236
- });
237
- setErrors((prev) => ({ ...prev, ...newErrors }));
238
- setTouched((prev) => ({ ...prev, ...newTouched }));
239
- setTimeout(() => {
240
- scrollToFirstError(newErrors);
241
- }, 0);
242
- return false;
243
- }
244
- setErrors({});
245
- return true;
246
- }, [formState, getSchemaForStep]);
247
- const handleNext = () => {
248
- if (validateStep(currentStep)) {
249
- const nextStep = currentStep + 1;
250
- const newMaxStep = Math.max(maxStepReached, nextStep);
251
- saveToLocalStorage(formState, nextStep, newMaxStep);
252
- setCurrentStep(nextStep);
253
- setMaxStepReached(newMaxStep);
254
- }
255
- };
256
- const handleBack = () => {
257
- if (currentStep > 1) {
258
- const prevStep = currentStep - 1;
259
- saveToLocalStorage(formState, prevStep, maxStepReached);
260
- setCurrentStep(prevStep);
261
- }
262
- };
263
- const jumpToStep = (targetStep) => {
264
- if (targetStep === currentStep) return;
265
- if (targetStep > currentStep) {
266
- if (!validateStep(currentStep)) return;
267
- }
268
- if (targetStep < currentStep || targetStep <= maxStepReached) {
269
- saveToLocalStorage(formState, targetStep, maxStepReached);
270
- setCurrentStep(targetStep);
271
- }
272
- };
273
- const handleSaveDraft = () => {
274
- saveToLocalStorage(formState, currentStep, maxStepReached);
275
- if (onSaveDraft) onSaveDraft(formState);
276
- };
277
- const handleSubmit = async () => {
278
- const step1Valid = step1Schema.safeParse(formState).success;
279
- if (!step1Valid) {
280
- setCurrentStep(1);
281
- setTimeout(() => validateStep(1), 100);
282
- return;
283
- }
284
- if (currentStep === 2 && !validateStep(2)) {
285
- return;
286
- }
287
- if (currentStep === 3 && !validateStep(3)) {
288
- return;
289
- }
290
- if (onSubmitFinal) {
291
- setIsSubmitting(true);
292
- try {
293
- await onSubmitFinal(formState);
294
- if (typeof window !== "undefined" && enableLocalStorage && storageKey) {
295
- localStorage.removeItem(storageKey);
296
- }
297
- } finally {
298
- setIsSubmitting(false);
299
- }
300
- }
301
- };
302
- useEffect(() => {
303
- if (!enableLocalStorage || !storageKey) return;
304
- const timer = setTimeout(() => {
305
- saveToLocalStorage(formState, currentStep, maxStepReached);
306
- }, 1e3);
307
- return () => clearTimeout(timer);
308
- }, [formState, currentStep, maxStepReached, enableLocalStorage, storageKey, saveToLocalStorage]);
309
- useEffect(() => {
310
- return () => {
311
- if (enableLocalStorage && storageKey) {
312
- const storageData = {
313
- formState: latestFormState.current,
314
- currentStep: latestCurrentStep.current,
315
- maxStepReached: latestMaxStepReached.current,
316
- lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
317
- };
318
- localStorage.setItem(storageKey, JSON.stringify(storageData));
319
- }
320
- };
321
- }, [storageKey, enableLocalStorage]);
322
- useEffect(() => {
323
- const handleBeforeUnload = () => {
324
- if (enableLocalStorage && storageKey && typeof window !== "undefined") {
325
- const storageData = {
326
- formState: latestFormState.current,
327
- currentStep: latestCurrentStep.current,
328
- maxStepReached: latestMaxStepReached.current,
329
- lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
330
- };
331
- localStorage.setItem(storageKey, JSON.stringify(storageData));
332
- }
333
- };
334
- window.addEventListener("beforeunload", handleBeforeUnload);
335
- return () => {
336
- window.removeEventListener("beforeunload", handleBeforeUnload);
337
- };
338
- }, [storageKey, enableLocalStorage]);
339
- return {
340
- currentStep,
341
- formState,
342
- errors,
343
- isSubmitting,
344
- setField,
345
- setMultipleFields,
346
- handleNext,
347
- handleBack,
348
- handleSaveDraft,
349
- handleSubmit,
350
- setCurrentStep,
351
- handleBlur,
352
- clearError,
353
- validateStep,
354
- setErrors,
355
- validateField: handleBlur,
356
- alert,
357
- setAlert,
358
- closeAlert,
359
- jumpToStep,
360
- maxStepReached,
361
- setMaxStepReached,
362
- saveToLocalStorage,
363
- validateFields,
364
- // Allow manual triggering if strictly needed
365
- touched
366
- };
367
- };
368
- export {
369
- useStepperForm
370
- };
371
- //# sourceMappingURL=useStepperForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStepperForm.js","sources":["../../../../src/components/EventAddForm/hooks/useStepperForm.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { useState, useCallback, useEffect, useRef } from 'react';\r\nimport { step1Schema } from '../schemas/step1';\r\nimport { getStep2Schema } from '../schemas/step2';\r\nimport { StepperFormState } from '../types';\r\n\r\ninterface UseStepperFormProps {\r\n initialData?: StepperFormState;\r\n storageKey?: string; // Optional now\r\n onSaveDraft?: (data: StepperFormState) => void;\r\n onSubmitFinal?: (data: StepperFormState) => Promise<void>;\r\n enableLocalStorage?: boolean; // New prop\r\n initialStep?: number;\r\n}\r\n\r\nexport const useStepperForm = ({\r\n initialData,\r\n storageKey,\r\n onSaveDraft,\r\n onSubmitFinal,\r\n enableLocalStorage = true, // Default to true\r\n initialStep\r\n}: UseStepperFormProps) => {\r\n\r\n // Helper to get saved data safely\r\n const getSavedData = useCallback(() => {\r\n if (!enableLocalStorage || !storageKey) return null;\r\n\r\n if (typeof window !== 'undefined') {\r\n try {\r\n const saved = localStorage.getItem(storageKey);\r\n if (saved) {\r\n return JSON.parse(saved);\r\n }\r\n } catch (e) {\r\n console.error(\"Failed to load draft form state\", e);\r\n }\r\n }\r\n return null;\r\n }, [storageKey, enableLocalStorage]);\r\n\r\n // Initialize State\r\n // Priority: 1. Props (initialStep) -> 2. Local Storage Draft -> 3. Defaults\r\n const [currentStep, setCurrentStep] = useState(() => {\r\n if (initialStep) return initialStep;\r\n\r\n const savedData = getSavedData();\r\n if (savedData && typeof savedData.currentStep === 'number') {\r\n return savedData.currentStep;\r\n }\r\n return 1;\r\n });\r\n\r\n const [maxStepReached, setMaxStepReached] = useState(() => {\r\n const savedData = getSavedData();\r\n let savedMax = 1;\r\n if (savedData && typeof savedData.maxStepReached === 'number') {\r\n savedMax = Math.max(savedData.maxStepReached, savedData.currentStep || 1);\r\n }\r\n\r\n if (initialStep) {\r\n return Math.max(savedMax, initialStep);\r\n }\r\n return savedMax;\r\n });\r\n\r\n const [formState, setFormState] = useState<StepperFormState>(() => {\r\n const baseState = {\r\n name: '',\r\n description: '',\r\n event_type: [],\r\n event_categories: [],\r\n custom_category: '',\r\n institution_name: '',\r\n event_start_timestamp: { date: '', time: '' },\r\n event_end_timestamp: { date: '', time: '' },\r\n registration_start_timestamp: { date: '', time: '' },\r\n registration_end_timestamp: { date: '', time: '' },\r\n venue: '',\r\n location_type: '',\r\n ...initialData // Merge API data first\r\n };\r\n\r\n const savedData = getSavedData();\r\n if (savedData) {\r\n const restoredState = savedData.formState || savedData;\r\n // Merge Saved Draft ON TOP of API data/Defaults\r\n return {\r\n ...baseState,\r\n ...restoredState\r\n };\r\n }\r\n\r\n return baseState;\r\n });\r\n\r\n // Save to Local Storage whenever state changes\r\n const saveToLocalStorage = useCallback((data: StepperFormState, step: number, maxStep: number) => {\r\n if (typeof window !== 'undefined' && enableLocalStorage && storageKey) {\r\n const storageData = {\r\n formState: data,\r\n currentStep: step,\r\n maxStepReached: maxStep,\r\n lastUpdated: new Date().toISOString()\r\n };\r\n localStorage.setItem(storageKey, JSON.stringify(storageData));\r\n }\r\n }, [storageKey, enableLocalStorage]);\r\n\r\n const [touched, setTouched] = useState<Record<string, boolean>>({});\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n // PERSISTENCE REFS: Keep latest values for unmount cleanup\r\n const latestFormState = useRef(formState);\r\n const latestCurrentStep = useRef(currentStep);\r\n const latestMaxStepReached = useRef(maxStepReached);\r\n\r\n useEffect(() => {\r\n latestFormState.current = formState;\r\n latestCurrentStep.current = currentStep;\r\n latestMaxStepReached.current = maxStepReached;\r\n }, [formState, currentStep, maxStepReached]);\r\n\r\n // Alert State\r\n const [alert, setAlert] = useState<{ show: boolean; message: string; type: 'success' | 'error' }>({\r\n show: false,\r\n message: '',\r\n type: 'success'\r\n });\r\n\r\n // React to initialData changes (API Load)\r\n useEffect(() => {\r\n if (initialData && Object.keys(initialData).length > 0 && setFormState) {\r\n setFormState(prev => {\r\n // Smart Merge: Only update fields that haven't been touched by the user\r\n // or where the local value matches the base default (indicating no interaction)\r\n\r\n const nextState = { ...prev };\r\n\r\n (Object.keys(initialData) as Array<keyof StepperFormState>).forEach(key => {\r\n // If user hasn't touched this field, allow API to update it\r\n // Or if we want to be more aggressive, checks strictly against \"touched\" map\r\n if (!touched[key]) {\r\n (nextState as any)[key] = initialData[key];\r\n }\r\n });\r\n\r\n // Avoid unnecessary updates\r\n if (JSON.stringify(prev) === JSON.stringify(nextState)) {\r\n return prev;\r\n }\r\n\r\n // Sync to localStorage\r\n saveToLocalStorage(nextState, currentStep, maxStepReached);\r\n\r\n return nextState;\r\n });\r\n }\r\n }, [initialData]);\r\n\r\n // Reset steps when storageKey changes (e.g. Navigation between Create/Edit or different IDs)\r\n useEffect(() => {\r\n const savedData = getSavedData();\r\n if (savedData && typeof savedData.currentStep === 'number') {\r\n setCurrentStep(savedData.currentStep);\r\n setMaxStepReached(savedData.maxStepReached || savedData.currentStep);\r\n } else {\r\n // Default Reset: If no saved data (or rehydration disabled), fallback to initialStep or 1\r\n if (initialStep) {\r\n setCurrentStep(initialStep);\r\n setMaxStepReached(Math.max(1, initialStep));\r\n } else {\r\n setCurrentStep(1);\r\n setMaxStepReached(1);\r\n }\r\n }\r\n }, [storageKey, getSavedData, initialStep]);\r\n\r\n\r\n const closeAlert = useCallback(() => {\r\n setAlert(prev => ({ ...prev, show: false }));\r\n }, []);\r\n\r\n // --- Core Validation Logic ---\r\n\r\n const getSchemaForStep = useCallback((step: number, currentState: StepperFormState) => {\r\n switch (step) {\r\n case 1:\r\n return step1Schema;\r\n case 2:\r\n return getStep2Schema(currentState);\r\n default:\r\n // Step 3 or others might not have strict schema validation yet\r\n return null;\r\n }\r\n }, []);\r\n\r\n const validateFields = useCallback((fields: (keyof StepperFormState)[], currentState: StepperFormState) => {\r\n const schema = getSchemaForStep(currentStep, currentState);\r\n\r\n if (!schema) return;\r\n\r\n // Zod check on the FULL state\r\n const result = schema.safeParse(currentState);\r\n\r\n setErrors(prevErrors => {\r\n const newErrors = { ...prevErrors };\r\n\r\n fields.forEach(field => {\r\n const fieldKey = field as string;\r\n if (result.success) {\r\n delete newErrors[fieldKey];\r\n } else {\r\n const issue = result.error.issues.find(i => i.path[0] === fieldKey);\r\n if (issue) {\r\n newErrors[fieldKey] = issue.message;\r\n } else {\r\n delete newErrors[fieldKey];\r\n }\r\n }\r\n });\r\n return newErrors;\r\n });\r\n }, [currentStep, getSchemaForStep]);\r\n\r\n // Legacy alias compliance if needed, but we typically use setField\r\n const validateSingleField = useCallback((field: keyof StepperFormState, value: any, currentState: StepperFormState) => {\r\n validateFields([field], { ...currentState, [field]: value });\r\n }, [validateFields]);\r\n\r\n // --- Field Setters ---\r\n\r\n const setField = useCallback((field: keyof StepperFormState, value: any, relatedFields: (keyof StepperFormState)[] = []) => {\r\n if (setFormState) setFormState(prev => {\r\n const newState = { ...prev, [field]: value };\r\n \r\n // Mark as touched on change\r\n setTouched(prevTouched => ({ ...prevTouched, [field as string]: true }));\r\n\r\n // Validate if touched OR if error exists OR if it's in dependent relation\r\n if (touched[field as string] || errors[field as string] || relatedFields.length > 0) {\r\n validateFields([field, ...relatedFields], newState);\r\n }\r\n return newState;\r\n });\r\n }, [touched, errors, validateFields]);\r\n\r\n const setMultipleFields = useCallback((fieldsOrFn: Partial<StepperFormState> | ((prev: StepperFormState) => Partial<StepperFormState>)) => {\r\n if (setFormState) setFormState(prev => {\r\n const fields = typeof fieldsOrFn === 'function' ? fieldsOrFn(prev) : fieldsOrFn;\r\n const newState = { ...prev, ...fields };\r\n\r\n // Collect fields to validate\r\n const fieldsToValidate: (keyof StepperFormState)[] = [];\r\n Object.keys(fields).forEach(key => {\r\n const k = key as keyof StepperFormState;\r\n if (touched[k as string] || errors[k as string]) {\r\n fieldsToValidate.push(k);\r\n }\r\n });\r\n\r\n if (fieldsToValidate.length > 0) {\r\n validateFields(fieldsToValidate, newState);\r\n }\r\n return newState;\r\n });\r\n }, [touched, errors, validateFields]);\r\n\r\n // --- Interaction Handlers ---\r\n\r\n const handleBlur = useCallback((field: keyof StepperFormState) => {\r\n setTouched(prev => ({ ...prev, [field as string]: true }));\r\n validateSingleField(field, latestFormState.current[field], latestFormState.current);\r\n }, [validateSingleField]);\r\n\r\n const clearError = useCallback((field: string) => {\r\n setErrors(prev => {\r\n const newErrors = { ...prev };\r\n delete newErrors[field];\r\n return newErrors;\r\n });\r\n }, []);\r\n\r\n // --- Navigation & Submission ---\r\n\r\n const scrollToFirstError = (currentErrors: Record<string, string>) => {\r\n if (typeof document === 'undefined') return;\r\n const inputs = document.querySelectorAll('[data-name]');\r\n for (const input of Array.from(inputs)) {\r\n const fieldName = input.getAttribute('data-name');\r\n if (fieldName && currentErrors[fieldName]) {\r\n input.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n // Try to focus the input inside\r\n const actualInput = input.querySelector('input, textarea, select') as HTMLElement;\r\n if (actualInput) actualInput.focus();\r\n\r\n // Visual feedback\r\n input.classList.add('error-highlight');\r\n setTimeout(() => input.classList.remove('error-highlight'), 2000);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n const validateStep = useCallback((step: number): boolean => {\r\n const schema = getSchemaForStep(step, formState);\r\n if (!schema) return true;\r\n\r\n const result = schema.safeParse(formState);\r\n\r\n if (!result.success) {\r\n const newErrors: Record<string, string> = {};\r\n const newTouched: Record<string, boolean> = {};\r\n\r\n result.error.issues.forEach((issue: any) => {\r\n const path = issue.path[0] as string;\r\n if (!newErrors[path]) {\r\n newErrors[path] = issue.message;\r\n }\r\n newTouched[path] = true;\r\n });\r\n\r\n setErrors(prev => ({ ...prev, ...newErrors }));\r\n setTouched(prev => ({ ...prev, ...newTouched }));\r\n\r\n // Timeout to allow state update before scrolling\r\n setTimeout(() => {\r\n scrollToFirstError(newErrors);\r\n }, 0);\r\n\r\n return false;\r\n }\r\n\r\n setErrors({});\r\n return true;\r\n }, [formState, getSchemaForStep]);\r\n\r\n const handleNext = () => {\r\n if (validateStep(currentStep)) {\r\n const nextStep = currentStep + 1;\r\n const newMaxStep = Math.max(maxStepReached, nextStep);\r\n saveToLocalStorage(formState, nextStep, newMaxStep);\r\n setCurrentStep(nextStep);\r\n setMaxStepReached(newMaxStep);\r\n }\r\n };\r\n\r\n const handleBack = () => {\r\n if (currentStep > 1) {\r\n const prevStep = currentStep - 1;\r\n saveToLocalStorage(formState, prevStep, maxStepReached);\r\n setCurrentStep(prevStep);\r\n }\r\n };\r\n\r\n const jumpToStep = (targetStep: number) => {\r\n if (targetStep === currentStep) return;\r\n\r\n if (targetStep > currentStep) {\r\n if (!validateStep(currentStep)) return;\r\n }\r\n\r\n if (targetStep < currentStep || targetStep <= maxStepReached) {\r\n saveToLocalStorage(formState, targetStep, maxStepReached);\r\n setCurrentStep(targetStep);\r\n }\r\n };\r\n\r\n const handleSaveDraft = () => {\r\n saveToLocalStorage(formState, currentStep, maxStepReached);\r\n if (onSaveDraft) onSaveDraft(formState);\r\n };\r\n\r\n const handleSubmit = async () => {\r\n const step1Valid = step1Schema.safeParse(formState).success;\r\n\r\n if (!step1Valid) {\r\n setCurrentStep(1);\r\n setTimeout(() => validateStep(1), 100);\r\n return;\r\n }\r\n\r\n if (currentStep === 2 && !validateStep(2)) {\r\n return;\r\n }\r\n\r\n if (currentStep === 3 && !validateStep(3)) {\r\n return;\r\n }\r\n\r\n if (onSubmitFinal) {\r\n setIsSubmitting(true);\r\n try {\r\n await onSubmitFinal(formState);\r\n if (typeof window !== 'undefined' && enableLocalStorage && storageKey) {\r\n localStorage.removeItem(storageKey);\r\n }\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n }\r\n };\r\n\r\n // DEBOUNCED AUTO-SAVE: Capture changes as they happen\r\n useEffect(() => {\r\n if (!enableLocalStorage || !storageKey) return;\r\n\r\n const timer = setTimeout(() => {\r\n saveToLocalStorage(formState, currentStep, maxStepReached);\r\n }, 1000); // 1 second debounce\r\n\r\n return () => clearTimeout(timer);\r\n }, [formState, currentStep, maxStepReached, enableLocalStorage, storageKey, saveToLocalStorage]);\r\n\r\n // UNMOUNT PROTECTION: Ensure SPA navigation (browser back/forth) also persists\r\n useEffect(() => {\r\n return () => {\r\n if (enableLocalStorage && storageKey) {\r\n // Use Refs to get the absolute latest state during cleanup\r\n const storageData = {\r\n formState: latestFormState.current,\r\n currentStep: latestCurrentStep.current,\r\n maxStepReached: latestMaxStepReached.current,\r\n lastUpdated: new Date().toISOString()\r\n };\r\n localStorage.setItem(storageKey, JSON.stringify(storageData));\r\n }\r\n };\r\n }, [storageKey, enableLocalStorage]);\r\n\r\n // Auto-save on window close (BeforeUnload)\r\n useEffect(() => {\r\n const handleBeforeUnload = () => {\r\n if (enableLocalStorage && storageKey && typeof window !== 'undefined') {\r\n const storageData = {\r\n formState: latestFormState.current,\r\n currentStep: latestCurrentStep.current,\r\n maxStepReached: latestMaxStepReached.current,\r\n lastUpdated: new Date().toISOString()\r\n };\r\n localStorage.setItem(storageKey, JSON.stringify(storageData));\r\n }\r\n };\r\n\r\n window.addEventListener('beforeunload', handleBeforeUnload);\r\n\r\n return () => {\r\n window.removeEventListener('beforeunload', handleBeforeUnload);\r\n };\r\n }, [storageKey, enableLocalStorage]);\r\n\r\n return {\r\n currentStep,\r\n formState,\r\n errors,\r\n isSubmitting,\r\n setField,\r\n setMultipleFields,\r\n handleNext,\r\n handleBack,\r\n handleSaveDraft,\r\n handleSubmit,\r\n setCurrentStep,\r\n handleBlur,\r\n clearError,\r\n validateStep,\r\n setErrors,\r\n validateField: handleBlur,\r\n alert,\r\n setAlert,\r\n closeAlert,\r\n jumpToStep,\r\n maxStepReached,\r\n setMaxStepReached,\r\n saveToLocalStorage,\r\n validateFields, // Allow manual triggering if strictly needed\r\n touched\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}
@@ -1,237 +0,0 @@
1
- import { useState, useEffect, useMemo, useCallback } from "react";
2
- import { TicketTierAvailabilityType } from "../../../types/types.js";
3
- import { preprocessNumber } from "../schemas/utils.js";
4
- import dayjs from "../../../node_modules/dayjs/dayjs.min.js";
5
- import isBetween from "../../../node_modules/dayjs/plugin/isBetween.js";
6
- import customParseFormat from "../../../node_modules/dayjs/plugin/customParseFormat.js";
7
- import { object, string, boolean, array, nativeEnum } from "../../../node_modules/zod/v4/classic/schemas.js";
8
- import { number } from "../../../node_modules/zod/v4/classic/coerce.js";
9
- import { ZodIssueCode } from "../../../node_modules/zod/v4/classic/compat.js";
10
- dayjs.extend(isBetween);
11
- dayjs.extend(customParseFormat);
12
- const getTicketTierSchema = (eventStart, eventEnd, registrationStart, registrationEnd, existingTierNames) => object({
13
- name: string().trim().min(1, "Name is required"),
14
- description: string().trim().max(255, "Description cannot exceed 255 characters").optional(),
15
- price: preprocessNumber(0, "Price must be a number", true, 1e6, "Price cannot exceed 1,000,000"),
16
- capacity: preprocessNumber(1, "Capacity must be at least 1."),
17
- members: preprocessNumber(1, "Members is required."),
18
- availability_type: nativeEnum(TicketTierAvailabilityType),
19
- availability_schedule: array(string()),
20
- has_discount: boolean().optional(),
21
- discounted_price: number().min(0, "Discounted price must be positive").max(1e6, "Discounted price cannot exceed 1,000,000").int("Price must be an integer").optional(),
22
- discount_valid_till_date: string().optional(),
23
- discount_valid_till_time: string().optional()
24
- }).superRefine((data, ctx) => {
25
- if (existingTierNames && existingTierNames.length > 0) {
26
- const trimmedName = data.name.trim().toLowerCase();
27
- if (existingTierNames.some((n) => n.trim().toLowerCase() === trimmedName)) {
28
- ctx.addIssue({
29
- code: ZodIssueCode.custom,
30
- message: "Ticket tier name must be unique",
31
- path: ["name"]
32
- });
33
- }
34
- }
35
- if (((data == null ? void 0 : data.capacity) || 1) % ((data == null ? void 0 : data.members) || 1) !== 0) {
36
- ctx.addIssue({
37
- code: ZodIssueCode.custom,
38
- message: "Capacity must be evenly divisible by the number of members",
39
- path: ["capacity"]
40
- });
41
- }
42
- if (data.availability_type === TicketTierAvailabilityType.CUSTOM && (!data.availability_schedule || data.availability_schedule.length === 0)) {
43
- ctx.addIssue({
44
- code: ZodIssueCode.custom,
45
- message: "Please select at least one date",
46
- path: ["availability_schedule"]
47
- });
48
- }
49
- if (data.has_discount) {
50
- if (data.discounted_price === void 0) {
51
- ctx.addIssue({
52
- code: ZodIssueCode.custom,
53
- message: "Discounted price is required",
54
- path: ["discounted_price"]
55
- });
56
- } else if (data.discounted_price >= ((data == null ? void 0 : data.price) || 0)) {
57
- ctx.addIssue({
58
- code: ZodIssueCode.custom,
59
- message: "Discounted price must be less than the actual price",
60
- path: ["discounted_price"]
61
- });
62
- }
63
- if (!(data == null ? void 0 : data.discount_valid_till_date) && !(data == null ? void 0 : data.discount_valid_till_time)) {
64
- ctx.addIssue({
65
- code: ZodIssueCode.custom,
66
- message: "Please select a discount expiry date and time",
67
- path: ["discount_valid_till"]
68
- });
69
- }
70
- const { discount_valid_till_date: date, discount_valid_till_time: time } = data;
71
- if (!date) {
72
- ctx.addIssue({
73
- code: ZodIssueCode.custom,
74
- message: "Please select a discount expiry date",
75
- path: ["discount_valid_till_date"]
76
- });
77
- }
78
- if (!time) {
79
- ctx.addIssue({
80
- code: ZodIssueCode.custom,
81
- message: "Please select a discount expiry time",
82
- path: ["discount_valid_till_time"]
83
- });
84
- }
85
- if (date && time) {
86
- const combined = dayjs(`${date} ${time}`);
87
- if (!combined.isValid()) {
88
- ctx.addIssue({
89
- code: ZodIssueCode.custom,
90
- message: "Invalid discount expiry date/time",
91
- path: ["discount_valid_till"]
92
- });
93
- } else {
94
- if ((registrationStart == null ? void 0 : registrationStart.date) && (registrationStart == null ? void 0 : registrationStart.time) && (registrationEnd == null ? void 0 : registrationEnd.date) && (registrationEnd == null ? void 0 : registrationEnd.time)) {
95
- const startObj = dayjs(`${registrationStart.date} ${registrationStart.time}`);
96
- const endObj = dayjs(`${registrationEnd.date} ${registrationEnd.time}`);
97
- if (startObj.isValid() && endObj.isValid()) {
98
- if (combined.isBefore(startObj)) {
99
- ctx.addIssue({
100
- code: ZodIssueCode.custom,
101
- message: "Discount cannot expire before ticket registration starts",
102
- path: ["discount_valid_till_date"]
103
- });
104
- } else if (combined.isAfter(endObj)) {
105
- ctx.addIssue({
106
- code: ZodIssueCode.custom,
107
- message: "Discount expiry cannot be after ticket registration closes",
108
- path: ["discount_valid_till_date"]
109
- });
110
- }
111
- }
112
- }
113
- }
114
- }
115
- }
116
- });
117
- const useTicketTierForm = ({ initialData, defaultState, eventStart, eventEnd, registrationStart, registrationEnd, existingTierNames }) => {
118
- const [formState, setFormState] = useState({ ...defaultState, ...initialData });
119
- const [errors, setErrors] = useState({});
120
- const [isSubmitting, setIsSubmitting] = useState(false);
121
- useEffect(() => {
122
- if (initialData) {
123
- setFormState((prev) => ({ ...prev, ...initialData }));
124
- }
125
- }, [initialData]);
126
- const schema = useMemo(() => getTicketTierSchema(eventStart, eventEnd, registrationStart, registrationEnd, existingTierNames), [eventStart, eventEnd, registrationStart, registrationEnd, existingTierNames]);
127
- const validateFields = useCallback((fields, currentState) => {
128
- const result = schema.safeParse(currentState);
129
- setErrors((prevErrors) => {
130
- const newErrors = { ...prevErrors };
131
- fields.forEach((field) => {
132
- const fieldKey = field;
133
- if (result.success) {
134
- delete newErrors[fieldKey];
135
- } else {
136
- const issue = result.error.issues.find((i) => i.path[0] === fieldKey);
137
- if (issue) {
138
- newErrors[fieldKey] = issue.message;
139
- } else {
140
- delete newErrors[fieldKey];
141
- }
142
- }
143
- });
144
- if (fields.includes("discount_valid_till_date") || fields.includes("discount_valid_till_time")) {
145
- if (result.success) {
146
- delete newErrors.discount_valid_till;
147
- delete newErrors.discount_valid_till_date;
148
- delete newErrors.discount_valid_till_time;
149
- } else {
150
- const combinedIssue = result.error.issues.find((i) => i.path[0] === "discount_valid_till");
151
- if (combinedIssue) {
152
- if (!newErrors.discount_valid_till_date && !newErrors.discount_valid_till_time) {
153
- newErrors.discount_valid_till_date = combinedIssue.message;
154
- }
155
- } else {
156
- delete newErrors.discount_valid_till;
157
- }
158
- }
159
- }
160
- return newErrors;
161
- });
162
- }, [schema]);
163
- const setFields = useCallback((updates) => {
164
- if (setFormState) setFormState((prev) => {
165
- const newState = { ...prev, ...updates };
166
- if (updates.availability_type !== void 0 && updates.availability_type !== TicketTierAvailabilityType.CUSTOM) {
167
- newState.availability_schedule = [];
168
- }
169
- const fieldsToValidate = Object.keys(updates);
170
- const hasExistingErrors = fieldsToValidate.some((f) => errors[f]);
171
- const isDiscountUpdate = updates.discount_valid_till_date !== void 0 || updates.discount_valid_till_time !== void 0;
172
- if (hasExistingErrors || isDiscountUpdate || updates.price !== void 0 || updates.members !== void 0) {
173
- const fieldsForSchema = [...fieldsToValidate];
174
- if (updates.discount_valid_till_date !== void 0) fieldsForSchema.push("discount_valid_till_time", "discount_valid_till");
175
- if (updates.discount_valid_till_time !== void 0) fieldsForSchema.push("discount_valid_till_date", "discount_valid_till");
176
- if (updates.price !== void 0) fieldsForSchema.push("discounted_price");
177
- if (updates.members !== void 0) fieldsForSchema.push("capacity");
178
- validateFields(fieldsForSchema, newState);
179
- }
180
- return newState;
181
- });
182
- }, [errors, validateFields]);
183
- const setField = useCallback((field, value) => {
184
- setFields({ [field]: value });
185
- }, [setFields]);
186
- const handleBlur = useCallback((field) => {
187
- validateFields([field], formState);
188
- }, [formState, validateFields]);
189
- const validate = useCallback(() => {
190
- const result = schema.safeParse(formState);
191
- if (!result.success) {
192
- const newErrors = {};
193
- result.error.issues.forEach((issue) => {
194
- const path = issue.path[0];
195
- if (path) {
196
- newErrors[path] = issue.message;
197
- }
198
- });
199
- setErrors(newErrors);
200
- return false;
201
- }
202
- setErrors({});
203
- return true;
204
- }, [formState, schema]);
205
- const handleSubmit = useCallback(async (onSubmit) => {
206
- if (validate()) {
207
- setIsSubmitting(true);
208
- try {
209
- await onSubmit(formState);
210
- } finally {
211
- setIsSubmitting(false);
212
- }
213
- }
214
- }, [validate, formState]);
215
- const resetForm = useCallback(() => {
216
- setFormState(defaultState);
217
- setErrors({});
218
- }, [defaultState]);
219
- return {
220
- formState,
221
- setField,
222
- setFields,
223
- handleBlur,
224
- handleSubmit,
225
- errors,
226
- setErrors,
227
- // Exposing setErrors to allow manual error clearing if needed
228
- isSubmitting,
229
- setFormState,
230
- resetForm
231
- };
232
- };
233
- export {
234
- getTicketTierSchema,
235
- useTicketTierForm
236
- };
237
- //# sourceMappingURL=useTicketTierForm.js.map