@dcrackel/hematournamentui 1.0.706 → 1.0.708

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 (350) hide show
  1. package/.prettierignore +7 -1
  2. package/.storybook/main.js +5 -12
  3. package/.storybook/preview-head.html +10 -3
  4. package/.storybook/preview.js +5 -13
  5. package/AGENTS.md +118 -88
  6. package/README.md +29 -22
  7. package/dist/HemaTournamentUI-lib.es.js +8394 -8807
  8. package/dist/HemaTournamentUI-lib.umd.js +27 -27
  9. package/dist/hematournamentui-tailwind.css +183 -428
  10. package/dist/hematournamentui.css +1 -1
  11. package/eslint.config.js +49 -23
  12. package/package.json +15 -11
  13. package/postcss.config.js +3 -3
  14. package/prettier.config.js +16 -10
  15. package/src/config/boutScreenConfigurations.js +52 -50
  16. package/src/index.js +2 -0
  17. package/src/main.js +1 -1
  18. package/src/mocks/EventQuestionsMock.js +43 -55
  19. package/src/mocks/assignments.js +180 -181
  20. package/src/mocks/clubGetAllMock.js +8143 -8143
  21. package/src/mocks/eventMock.js +205 -205
  22. package/src/mocks/eventPersonGetInitalPoolAssignmentsLivePools.js +541 -542
  23. package/src/mocks/eventPersonGetInitalPoolAssignmentsPreparing.js +522 -523
  24. package/src/mocks/eventPersonGetInitialPoolAssignments.js +386 -387
  25. package/src/mocks/eventPersonGetInitialPoolAssignments2.js +2267 -2268
  26. package/src/mocks/eventPersonGetInitialStaff.js +94 -95
  27. package/src/mocks/eventPersonGetPoolAssignmentEvent.js +161 -162
  28. package/src/mocks/eventRules.js +87 -86
  29. package/src/mocks/eventpersonGetEventById.js +1737 -1737
  30. package/src/mocks/getAllClubs.js +8143 -8143
  31. package/src/mocks/getAllStaffByTournamentId.js +74 -75
  32. package/src/mocks/getAllWeapons.js +81 -82
  33. package/src/mocks/getAttendance.js +43 -44
  34. package/src/mocks/getClub.js +43 -44
  35. package/src/mocks/getClubDisplayByClubId.js +104 -105
  36. package/src/mocks/getDEBouts-128Fencers.js +3247 -3248
  37. package/src/mocks/getDEBouts-42Fencers.js +3736 -3737
  38. package/src/mocks/getDEBouts-67Fencers.js +6684 -6690
  39. package/src/mocks/getDEBouts-DoubleElim.js +4198 -4199
  40. package/src/mocks/getDEBouts-TableOf128.js +37 -0
  41. package/src/mocks/getDEBouts-TableOf64.js +35 -0
  42. package/src/mocks/getDEWithBouts.js +628 -629
  43. package/src/mocks/getDeBouts-12fencers.js +1255 -1256
  44. package/src/mocks/getDeBouts-15fencers.js +925 -927
  45. package/src/mocks/getDeBouts-22fencers.js +1683 -1685
  46. package/src/mocks/getDeBouts-6fencers.js +818 -818
  47. package/src/mocks/getEventByTournamentId.js +47 -48
  48. package/src/mocks/getFinalEventResult.js +304 -305
  49. package/src/mocks/getPenaltiesByEvent.js +655 -656
  50. package/src/mocks/getPoolResults.js +1533 -1534
  51. package/src/mocks/getPoolsWithBouts.js +662 -663
  52. package/src/mocks/getPoolsWithBouts6PoolId139.js +885 -886
  53. package/src/mocks/getPoolsWithBoutsByPoolId.js +841 -841
  54. package/src/mocks/getPoolsWithBoutsClubColors.js +4 -4
  55. package/src/mocks/getPoolsWithBoutsComplete.js +919 -921
  56. package/src/mocks/locationMock.js +3213 -3214
  57. package/src/mocks/mockRoutes.js +3 -3
  58. package/src/mocks/personGetAllMock.js +2536 -2537
  59. package/src/mocks/personsMock.js +17569 -17570
  60. package/src/mocks/singleEventMock.js +249 -250
  61. package/src/mocks/tournamentMock.js +1988 -1927
  62. package/src/stories/Atoms/CheckBox/BaseCheckbox.stories.js +25 -23
  63. package/src/stories/Atoms/CheckBox/BaseCheckbox.vue +30 -24
  64. package/src/stories/Atoms/Icon/BaseIcon.stories.js +63 -64
  65. package/src/stories/Atoms/Icon/BaseIcon.test.js +67 -69
  66. package/src/stories/Atoms/Icon/BaseIcon.vue +2 -3
  67. package/src/stories/Atoms/Input/BaseInput.stories.js +18 -18
  68. package/src/stories/Atoms/Input/BaseInput.test.js +65 -67
  69. package/src/stories/Atoms/Input/BaseInput.vue +36 -31
  70. package/src/stories/Atoms/RadioGroup/BaseRadioGroup.stories.js +21 -21
  71. package/src/stories/Atoms/RadioGroup/BaseRadioGroup.test.js +31 -31
  72. package/src/stories/Atoms/RadioGroup/BaseRadioGroup.vue +23 -18
  73. package/src/stories/Atoms/Tag/BaseTag.stories.js +21 -21
  74. package/src/stories/Atoms/Tag/BaseTag.test.js +26 -30
  75. package/src/stories/Atoms/Tag/BaseTag.vue +18 -19
  76. package/src/stories/Atoms/Text/BaseText.stories.js +54 -62
  77. package/src/stories/Atoms/Text/BaseText.test.js +152 -154
  78. package/src/stories/Atoms/Text/BaseText.vue +103 -81
  79. package/src/stories/Configure.mdx +5 -3
  80. package/src/stories/Molecules/Boxes/BoutBoxes/HandshotCounterBox/HandshotCounterBox.stories.js +24 -24
  81. package/src/stories/Molecules/Boxes/BoutBoxes/HandshotCounterBox/HandshotCounterBox.vue +33 -15
  82. package/src/stories/Molecules/Boxes/BoutBoxes/PassesBox/PassesBox.stories.js +46 -48
  83. package/src/stories/Molecules/Boxes/BoutBoxes/PassesBox/PassesBox.vue +38 -25
  84. package/src/stories/Molecules/Boxes/BoutBoxes/PenaltyConfirmationBox/PenaltyConfirmationBox.stories.js +4 -4
  85. package/src/stories/Molecules/Boxes/BoutBoxes/PenaltyConfirmationBox/PenaltyConfirmationBox.vue +9 -4
  86. package/src/stories/Molecules/Boxes/BoutBoxes/ScoreBox/ScoreBox.stories.js +90 -90
  87. package/src/stories/Molecules/Boxes/BoutBoxes/ScoreBox/ScoreBox.vue +51 -32
  88. package/src/stories/Molecules/Boxes/BoutBoxes/TimerBox/TimerBox.stories.js +25 -25
  89. package/src/stories/Molecules/Boxes/BoutBoxes/TimerBox/TimerBox.vue +47 -12
  90. package/src/stories/Molecules/Boxes/CounterBox/CounterBox.stories.js +19 -19
  91. package/src/stories/Molecules/Boxes/CounterBox/CounterBox.vue +25 -19
  92. package/src/stories/Molecules/Boxes/EventStatusBox/EventStatusBox.stories.js +25 -28
  93. package/src/stories/Molecules/Boxes/EventStatusBox/EventStatusBox.vue +7 -7
  94. package/src/stories/Molecules/Breadcrumb/Admin/Breadcrumb.stories.js +28 -29
  95. package/src/stories/Molecules/Breadcrumb/Admin/Breadcrumb.test.js +58 -58
  96. package/src/stories/Molecules/Breadcrumb/Admin/Breadcrumb.vue +15 -15
  97. package/src/stories/Molecules/Buttons/BaseButton/BaseButton.stories.js +86 -86
  98. package/src/stories/Molecules/Buttons/BaseButton/BaseButton.test.js +101 -103
  99. package/src/stories/Molecules/Buttons/BaseButton/BaseButton.vue +87 -24
  100. package/src/stories/Molecules/Buttons/ButtonBar/ButtonBar.stories.js +31 -31
  101. package/src/stories/Molecules/Buttons/ButtonBar/ButtonBar.vue +19 -21
  102. package/src/stories/Molecules/CombinationInputs/TitledInput/TitledInput.stories.js +57 -57
  103. package/src/stories/Molecules/CombinationInputs/TitledInput/TitledInput.test.js +64 -64
  104. package/src/stories/Molecules/CombinationInputs/TitledInput/TitledInput.vue +17 -16
  105. package/src/stories/Molecules/Filters/FilterAndSortBar/FilterAndSortBar.stories.js +19 -19
  106. package/src/stories/Molecules/Filters/FilterAndSortBar/FilterAndSortBar.vue +18 -7
  107. package/src/stories/Molecules/Filters/FilterUpcomingPast/FilterUpcomingPast.stories.js +16 -18
  108. package/src/stories/Molecules/Filters/FilterUpcomingPast/FilterUpcomingPast.vue +31 -13
  109. package/src/stories/Molecules/Indicators/MissingHemaRatingsId/MissingHemaRatingsId.stories.js +23 -0
  110. package/src/stories/Molecules/Indicators/MissingHemaRatingsId/MissingHemaRatingsId.vue +35 -0
  111. package/src/stories/Molecules/Indicators/ServerConnected/ServerConnected.stories.js +27 -27
  112. package/src/stories/Molecules/Indicators/ServerConnected/ServerConnected.vue +6 -5
  113. package/src/stories/Molecules/Inputs/MultiSelect/MultiSelect.stories.js +35 -35
  114. package/src/stories/Molecules/Inputs/MultiSelect/MultiSelect.vue +13 -8
  115. package/src/stories/Molecules/Inputs/Toggle/Toggle.stories.js +27 -27
  116. package/src/stories/Molecules/Inputs/Toggle/Toggle.vue +8 -5
  117. package/src/stories/Molecules/Menus/TabBar/TabBar.stories.js +18 -18
  118. package/src/stories/Molecules/Menus/TabBar/TabBar.vue +1 -2
  119. package/src/stories/Molecules/Modals/AddDisplayModal/AddDisplay.stories.js +36 -27
  120. package/src/stories/Molecules/Modals/AddDisplayModal/AddDisplayModal.vue +25 -15
  121. package/src/stories/Molecules/Modals/BaseModal/BaseModal.stories.js +66 -65
  122. package/src/stories/Molecules/Modals/BaseModal/BaseModal.vue +47 -9
  123. package/src/stories/Molecules/Modals/ConfirmModal/ConfirmModal.stories.js +23 -23
  124. package/src/stories/Molecules/Modals/ConfirmModal/ConfirmModal.vue +59 -11
  125. package/src/stories/Molecules/Modals/DirectorModal/DirectorModal.stories.js +37 -37
  126. package/src/stories/Molecules/Modals/DirectorModal/DirectorModal.test.js +18 -0
  127. package/src/stories/Molecules/Modals/DirectorModal/DirectorModal.vue +29 -23
  128. package/src/stories/Molecules/Modals/EditBoutModal/EditBoutModal.stories.js +41 -41
  129. package/src/stories/Molecules/Modals/EditBoutModal/EditBoutModal.vue +28 -16
  130. package/src/stories/Molecules/Modals/EventWizardModal/EventWizardModal.stories.js +29 -30
  131. package/src/stories/Molecules/Modals/EventWizardModal/EventWizardModal.vue +18 -16
  132. package/src/stories/Molecules/Modals/LoadingModal/LoadingModal.stories.js +21 -21
  133. package/src/stories/Molecules/Modals/LoadingModal/LoadingModal.vue +7 -7
  134. package/src/stories/Molecules/Modals/PenaltyModal/PenaltyModal.stories.js +24 -24
  135. package/src/stories/Molecules/Modals/PenaltyModal/PenaltyModal.vue +30 -25
  136. package/src/stories/Molecules/Reorder/ReorderableShell.stories.js +81 -77
  137. package/src/stories/Molecules/Reorder/ReorderableShell.vue +46 -43
  138. package/src/stories/Molecules/StepIndicator/BaseStepIndicator/StepIndicator.stories.js +40 -40
  139. package/src/stories/Molecules/StepIndicator/BaseStepIndicator/StepIndicator.vue +23 -25
  140. package/src/stories/Organisms/Cards/BoutCard/BoutCard.stories.js +34 -29
  141. package/src/stories/Organisms/Cards/BoutCard/BoutCard.vue +69 -66
  142. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardActive/BoutCardActive.stories.js +24 -22
  143. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardActive/BoutCardActive.vue +53 -41
  144. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardInactive/BoutCardInactive.stories.js +24 -37
  145. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardInactive/BoutCardInactive.vue +88 -103
  146. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardReorder/BoutCardReorder.vue +13 -14
  147. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardWaiting/BoutCardWaiting.stories.js +5 -5
  148. package/src/stories/Organisms/Cards/BoutCard/Variants/BoutCardWaiting/BoutCardWaiting.vue +22 -21
  149. package/src/stories/Organisms/Cards/BracketDirectorAssignmentCard/BracketDirectorAssignmentCard.stories.js +33 -0
  150. package/src/stories/Organisms/Cards/BracketDirectorAssignmentCard/BracketDirectorAssignmentCard.test.js +45 -0
  151. package/src/stories/Organisms/Cards/BracketDirectorAssignmentCard/BracketDirectorAssignmentCard.vue +103 -0
  152. package/src/stories/Organisms/Cards/ClubCard/ClubCard.stories.js +14 -17
  153. package/src/stories/Organisms/Cards/ClubCard/ClubCard.vue +25 -18
  154. package/src/stories/Organisms/Cards/Director/DirectorCard.stories.js +23 -23
  155. package/src/stories/Organisms/Cards/Director/DirectorCard.vue +159 -103
  156. package/src/stories/Organisms/Cards/EditBout/EditBout.stories.js +47 -47
  157. package/src/stories/Organisms/Cards/EditBout/EditBout.test.js +51 -0
  158. package/src/stories/Organisms/Cards/EditBout/EditBout.vue +82 -54
  159. package/src/stories/Organisms/Cards/EventCard/EventCard.stories.js +9 -10
  160. package/src/stories/Organisms/Cards/EventCard/EventCard.vue +83 -63
  161. package/src/stories/Organisms/Cards/FencerCard/FencerCard.stories.js +105 -105
  162. package/src/stories/Organisms/Cards/FencerCard/FencerCard.vue +298 -194
  163. package/src/stories/Organisms/Cards/FencerFinalResultCard/FencerFinalResultCard.stories.js +14 -14
  164. package/src/stories/Organisms/Cards/FencerFinalResultCard/FencerFinalResultCard.vue +37 -26
  165. package/src/stories/Organisms/Cards/FencerPoolResultsCard/FencerPoolResults.stories.js +24 -24
  166. package/src/stories/Organisms/Cards/FencerPoolResultsCard/FencerPoolResultsCard.vue +95 -28
  167. package/src/stories/Organisms/Cards/ImportFencerCard/ImportFencerCard.stories.js +59 -60
  168. package/src/stories/Organisms/Cards/ImportFencerCard/ImportFencerCard.vue +13 -7
  169. package/src/stories/Organisms/Cards/KioskCard/KioskCard.stories.js +34 -34
  170. package/src/stories/Organisms/Cards/KioskCard/KioskCard.vue +149 -104
  171. package/src/stories/Organisms/Cards/PenaltyCard/PenaltyCard.stories.js +19 -20
  172. package/src/stories/Organisms/Cards/PenaltyCard/PenaltyCard.vue +207 -163
  173. package/src/stories/Organisms/Cards/PenaltyFencerCard/PenaltyFencerCard.stories.js +17 -17
  174. package/src/stories/Organisms/Cards/PenaltyFencerCard/PenaltyFencerCard.vue +88 -46
  175. package/src/stories/Organisms/Cards/PoolBoutMatchCard/PoolBoutMatchCard.stories.js +182 -182
  176. package/src/stories/Organisms/Cards/PoolBoutMatchCard/PoolBoutMatchCard.vue +21 -12
  177. package/src/stories/Organisms/Cards/PoolFencerCard/PoolFencerCard.stories.js +25 -28
  178. package/src/stories/Organisms/Cards/PoolFencerCard/PoolFencerCard.vue +28 -22
  179. package/src/stories/Organisms/Cards/StaffCard/StaffCard.stories.js +62 -62
  180. package/src/stories/Organisms/Cards/StaffCard/StaffCard.vue +27 -22
  181. package/src/stories/Organisms/Cards/TableauBoutCard/TableauBoutCard.stories.js +60 -98
  182. package/src/stories/Organisms/Cards/TableauBoutCard/TableauBoutCard.test.js +143 -0
  183. package/src/stories/Organisms/Cards/TableauBoutCard/TableauBoutCard.vue +256 -202
  184. package/src/stories/Organisms/Cards/TableauFencerCard/TableauFencerCard.stories.js +69 -93
  185. package/src/stories/Organisms/Cards/TableauFencerCard/TableauFencerCard.vue +80 -111
  186. package/src/stories/Organisms/Cards/TournamentAdminCard/TournamentAdmin.stories.js +20 -20
  187. package/src/stories/Organisms/Cards/TournamentAdminCard/TournamentAdminCard.vue +62 -33
  188. package/src/stories/Organisms/Cards/WaitlistFencerCard/WaitlistFencerCard.vue +56 -32
  189. package/src/stories/Organisms/ComplexInputs/AddressAutocomplete/AddressAutocomplete.stories.js +6 -7
  190. package/src/stories/Organisms/ComplexInputs/AddressAutocomplete/AddressAutocomplete.vue +7 -8
  191. package/src/stories/Organisms/ComplexInputs/ClubColorPicker/ClubColorPicker.stories.js +31 -31
  192. package/src/stories/Organisms/ComplexInputs/ClubColorPicker/ClubColorPicker.vue +30 -35
  193. package/src/stories/Organisms/ComplexInputs/DatePicker/DatePicker.stories.js +13 -16
  194. package/src/stories/Organisms/ComplexInputs/DatePicker/DatePicker.vue +68 -70
  195. package/src/stories/Organisms/ComplexInputs/DropDown/DropDownMenu.stories.js +32 -34
  196. package/src/stories/Organisms/ComplexInputs/DropDown/DropDownMenu.vue +48 -25
  197. package/src/stories/Organisms/ComplexInputs/FindLocation/FindLocation.stories.js +21 -21
  198. package/src/stories/Organisms/ComplexInputs/FindLocation/FindLocation.vue +65 -38
  199. package/src/stories/Organisms/ComplexInputs/FindOrAddPerson/FindOrAddPerson.stories.js +19 -20
  200. package/src/stories/Organisms/ComplexInputs/FindOrAddPerson/FindOrAddPerson.vue +46 -21
  201. package/src/stories/Organisms/ComplexInputs/FindPerson/FindPerson.stories.js +22 -22
  202. package/src/stories/Organisms/ComplexInputs/FindPerson/FindPerson.vue +68 -23
  203. package/src/stories/Organisms/ComplexInputs/ImageCropper/ImageCropper.stories.js +13 -13
  204. package/src/stories/Organisms/ComplexInputs/ImageCropper/ImageCropper.vue +25 -24
  205. package/src/stories/Organisms/ComplexInputs/TextBoxEditor/TextBoxEditor.stories.js +6 -10
  206. package/src/stories/Organisms/ComplexInputs/TextBoxEditor/TextBoxEditor.vue +112 -48
  207. package/src/stories/Organisms/Containers/BoutsSection/BoutsSection.stories.js +43 -44
  208. package/src/stories/Organisms/Containers/BoutsSection/BoutsSection.vue +30 -23
  209. package/src/stories/Organisms/Containers/FinalResults/FinalResultsTable.stories.js +20 -20
  210. package/src/stories/Organisms/Containers/FinalResults/FinalResultsTable.vue +12 -12
  211. package/src/stories/Organisms/Containers/KioskContainer/KioskContainer.stories.js +24 -25
  212. package/src/stories/Organisms/Containers/KioskContainer/KioskContainer.vue +112 -87
  213. package/src/stories/Organisms/Containers/Pool/Pool.stories.js +54 -54
  214. package/src/stories/Organisms/Containers/Pool/Pool.vue +64 -41
  215. package/src/stories/Organisms/Containers/PoolGrid/PoolGrid.stories.js +17 -19
  216. package/src/stories/Organisms/Containers/PoolGrid/PoolGrid.vue +189 -135
  217. package/src/stories/Organisms/Containers/PoolResults/PoolResultsTable.stories.js +53 -54
  218. package/src/stories/Organisms/Containers/PoolResults/PoolResultsTable.vue +107 -73
  219. package/src/stories/Organisms/Containers/Tableau/Tableau.stories.js +23 -24
  220. package/src/stories/Organisms/Containers/Tableau/Tableau.test.js +177 -10
  221. package/src/stories/Organisms/Containers/Tableau/Tableau.vue +319 -198
  222. package/src/stories/Organisms/Containers/Tableau/components/BracketDirectorAssignmentPanel.test.js +29 -0
  223. package/src/stories/Organisms/Containers/Tableau/components/BracketDirectorAssignmentPanel.vue +46 -0
  224. package/src/stories/Organisms/Containers/Tableau/components/TableauSvgOverlay.test.js +21 -0
  225. package/src/stories/Organisms/Containers/Tableau/components/TableauSvgOverlay.vue +39 -0
  226. package/src/stories/Organisms/Containers/Tableau/layout/TableauLayoutEngine.js +145 -0
  227. package/src/stories/Organisms/Containers/Tableau/layout/TableauLayoutEngine.test.js +64 -0
  228. package/src/stories/Organisms/Containers/Tableau/plannedAssignments.js +57 -0
  229. package/src/stories/Organisms/Containers/Tableau/plannedAssignments.test.js +65 -0
  230. package/src/stories/Organisms/Containers/TableauColumn/TabeauColumn.stories.js +26 -27
  231. package/src/stories/Organisms/Containers/TableauColumn/TableauColumn.vue +31 -26
  232. package/src/stories/Organisms/Form/AddDisplay/AddDisplay.stories.js +26 -26
  233. package/src/stories/Organisms/Form/AddDisplay/AddDisplay.vue +130 -118
  234. package/src/stories/Organisms/Form/AddNewPerson/AddNewPerson.stories.js +14 -15
  235. package/src/stories/Organisms/Form/AddNewPerson/AddNewPerson.vue +94 -88
  236. package/src/stories/Organisms/Grids/GridContainer.stories.js +101 -101
  237. package/src/stories/Organisms/Grids/GridContainer.vue +160 -136
  238. package/src/stories/Organisms/Headers/AttendanceSummary/AttendanceSummary.stories.js +47 -47
  239. package/src/stories/Organisms/Headers/AttendanceSummary/AttendanceSummary.vue +65 -54
  240. package/src/stories/Organisms/Headers/EventFinalResultsHeader/EventFinalResultsHeader.stories.js +27 -27
  241. package/src/stories/Organisms/Headers/EventFinalResultsHeader/EventFinalResultsHeader.vue +38 -22
  242. package/src/stories/Organisms/Headers/PenaltySummary/PenaltySummary.stories.js +80 -80
  243. package/src/stories/Organisms/Headers/PenaltySummary/PenaltySummary.vue +14 -6
  244. package/src/stories/Organisms/Headers/PoolResultsHeader/PoolResultsHeader.stories.js +34 -34
  245. package/src/stories/Organisms/Headers/PoolResultsHeader/PoolResultsHeader.vue +36 -36
  246. package/src/stories/Organisms/Headers/PoolSummary/PoolSummary.stories.js +21 -21
  247. package/src/stories/Organisms/Headers/PoolSummary/PoolSummary.vue +56 -29
  248. package/src/stories/Organisms/Headers/ToggleHeader/ToggleHeader.stories.js +38 -38
  249. package/src/stories/Organisms/Headers/ToggleHeader/ToggleHeader.vue +19 -20
  250. package/src/stories/Organisms/RankCalculator/ByLetter/RankCalculator.stories.js +12 -13
  251. package/src/stories/Organisms/RankCalculator/ByLetter/RankCalculator.vue +47 -41
  252. package/src/stories/Organisms/RankCalculator/ByPoints/RankCalculatorByPoints.stories.js +12 -13
  253. package/src/stories/Organisms/RankCalculator/ByPoints/RankCalculatorByPoints.vue +66 -37
  254. package/src/stories/Organisms/Skeletons/ClubManagement/ClubManagement.stories.js +6 -10
  255. package/src/stories/Organisms/Skeletons/ClubManagement/ClubMangementSkeleton.vue +2 -2
  256. package/src/stories/Organisms/Skeletons/EventCard/EventCardSkeleton.stories.js +6 -10
  257. package/src/stories/Organisms/Skeletons/EventCard/EventCardSkeleton.vue +2 -3
  258. package/src/stories/Organisms/Skeletons/FencerCard/FencerCardSkeleton.stories.js +6 -10
  259. package/src/stories/Organisms/Skeletons/FencerCard/FencerCardSkeleton.vue +1 -1
  260. package/src/stories/Organisms/Skeletons/PersonManagement/PersonManagementSkeleton.stories.js +6 -9
  261. package/src/stories/Organisms/Skeletons/PersonManagement/PersonManagementSkeleton.vue +2 -2
  262. package/src/stories/Organisms/Skeletons/PoolSkeleton/PoolSkeleton.stories.js +6 -10
  263. package/src/stories/Organisms/Skeletons/PoolSkeleton/PoolSkeleton.vue +10 -4
  264. package/src/stories/Organisms/Skeletons/TournamentCard/TournamentCardSkeleton.stories.js +6 -10
  265. package/src/stories/Organisms/Skeletons/TournamentCard/TournamentCardSkeleton.vue +2 -2
  266. package/src/stories/Organisms/Wizards/EditEventWizard/BasicEventInfo/BasicEventInfo.stories.js +34 -34
  267. package/src/stories/Organisms/Wizards/EditEventWizard/BasicEventInfo/BasicEventInfo.vue +106 -56
  268. package/src/stories/Organisms/Wizards/EditEventWizard/DirectElimination/DirectElimination.stories.js +95 -95
  269. package/src/stories/Organisms/Wizards/EditEventWizard/DirectElimination/DirectElimination.vue +129 -69
  270. package/src/stories/Organisms/Wizards/EditEventWizard/DirectEliminationPromotion/DirectEliminationPromotion.stories.js +87 -88
  271. package/src/stories/Organisms/Wizards/EditEventWizard/DirectEliminationPromotion/DirectEliminationPromotion.vue +105 -60
  272. package/src/stories/Organisms/Wizards/EditEventWizard/EditEventWizard.stories.js +82 -82
  273. package/src/stories/Organisms/Wizards/EditEventWizard/EditEventWizard.vue +150 -177
  274. package/src/stories/Organisms/Wizards/EditEventWizard/EventCustomization/EventCustomization.stories.js +28 -28
  275. package/src/stories/Organisms/Wizards/EditEventWizard/EventCustomization/EventCustomization.vue +96 -36
  276. package/src/stories/Organisms/Wizards/EditEventWizard/PoolConfiguration/PoolConfiguration.stories.js +99 -99
  277. package/src/stories/Organisms/Wizards/EditEventWizard/PoolConfiguration/PoolConfiguration.vue +115 -67
  278. package/src/stories/Templates/Assignment/Assignment.stories.js +22 -23
  279. package/src/stories/Templates/Assignment/Assignment.vue +210 -161
  280. package/src/stories/Templates/ClubManagement/ClubBasic/ClubBasic.stories.js +90 -90
  281. package/src/stories/Templates/ClubManagement/ClubBasic/ClubBasic.vue +68 -55
  282. package/src/stories/Templates/ClubManagement/ClubManagement.stories.js +87 -87
  283. package/src/stories/Templates/ClubManagement/ClubManagement.vue +167 -147
  284. package/src/stories/Templates/EventManagement/Bracket/Bracket.stories.js +216 -109
  285. package/src/stories/Templates/EventManagement/Bracket/Bracket.test.js +138 -43
  286. package/src/stories/Templates/EventManagement/Bracket/Bracket.vue +198 -195
  287. package/src/stories/Templates/EventManagement/Bracket/BracketPlannedSuggestions.js +39 -0
  288. package/src/stories/Templates/EventManagement/Bracket/BracketStoryHarness.js +39 -0
  289. package/src/stories/Templates/EventManagement/Bracket/BracketStoryHarness.test.js +79 -0
  290. package/src/stories/Templates/EventManagement/EditEventInfo/EditEventInfo.stories.js +49 -50
  291. package/src/stories/Templates/EventManagement/EditEventInfo/EditEventInfo.vue +21 -21
  292. package/src/stories/Templates/EventManagement/EventAttendance/EventAttendance.stories.js +105 -103
  293. package/src/stories/Templates/EventManagement/EventAttendance/EventAttendance.vue +289 -226
  294. package/src/stories/Templates/EventManagement/EventFinalResults/EventFinalResults.stories.js +30 -30
  295. package/src/stories/Templates/EventManagement/EventFinalResults/EventFinalResults.vue +27 -22
  296. package/src/stories/Templates/EventManagement/KioskDisplay/KioskDisplay.stories.js +44 -45
  297. package/src/stories/Templates/EventManagement/KioskDisplay/KioskDisplay.vue +52 -43
  298. package/src/stories/Templates/EventManagement/Penalties/PenaltyReport.stories.js +28 -29
  299. package/src/stories/Templates/EventManagement/Penalties/PenaltyReport.vue +54 -39
  300. package/src/stories/Templates/EventManagement/PoolLive/PoolLive.stories.js +80 -111
  301. package/src/stories/Templates/EventManagement/PoolLive/PoolLive.test.js +121 -0
  302. package/src/stories/Templates/EventManagement/PoolLive/PoolLive.vue +290 -255
  303. package/src/stories/Templates/EventManagement/PoolManagement/PoolManagement.stories.js +109 -107
  304. package/src/stories/Templates/EventManagement/PoolManagement/PoolManagement.vue +144 -87
  305. package/src/stories/Templates/EventManagement/PoolResults/PoolResults.stories.js +56 -57
  306. package/src/stories/Templates/EventManagement/PoolResults/PoolResults.vue +132 -123
  307. package/src/stories/Templates/EventManagement/StaffList/StaffList.stories.js +56 -57
  308. package/src/stories/Templates/EventManagement/StaffList/StaffList.vue +84 -47
  309. package/src/stories/Templates/Menus/Admin/AdminLeftMenu.stories.js +29 -29
  310. package/src/stories/Templates/Menus/Admin/AdminLeftMenu.vue +71 -67
  311. package/src/stories/Templates/Menus/EditEventsTopMenu/EditEventsTopMenu.stories.js +39 -40
  312. package/src/stories/Templates/Menus/EditEventsTopMenu/EditEventsTopMenu.vue +79 -71
  313. package/src/stories/Templates/PersonManagement/Admin/Administration/Administration.stories.js +47 -47
  314. package/src/stories/Templates/PersonManagement/Admin/Administration/Administration.vue +39 -42
  315. package/src/stories/Templates/PersonManagement/Admin/FencerAdmin/FencerAdmin.stories.js +54 -54
  316. package/src/stories/Templates/PersonManagement/Admin/FencerAdmin/FencerAdmin.vue +27 -31
  317. package/src/stories/Templates/PersonManagement/Admin/MergeAccounts/MergeAccounts.stories.js +69 -69
  318. package/src/stories/Templates/PersonManagement/Admin/MergeAccounts/MergeAccounts.vue +78 -89
  319. package/src/stories/Templates/PersonManagement/Attendance/Attendance.stories.js +22 -22
  320. package/src/stories/Templates/PersonManagement/Attendance/Attendance.vue +61 -33
  321. package/src/stories/Templates/PersonManagement/Basic/BasicEdit.stories.js +29 -29
  322. package/src/stories/Templates/PersonManagement/Basic/BasicEdit.vue +80 -53
  323. package/src/stories/Templates/PersonManagement/PersonManagement.stories.js +84 -86
  324. package/src/stories/Templates/PersonManagement/PersonManagement.vue +107 -82
  325. package/src/stories/Templates/TournamentManagement/ListEvents/ListEvents.stories.js +31 -31
  326. package/src/stories/Templates/TournamentManagement/ListEvents/ListEvents.vue +70 -51
  327. package/src/stories/Templates/TournamentManagement/TournamentManagement.stories.js +79 -79
  328. package/src/stories/Templates/TournamentManagement/TournamentManagement.vue +275 -230
  329. package/src/stories/Templates/TournamentManagement/TournamentPageOne/TournamentPageOne.stories.js +113 -113
  330. package/src/stories/Templates/TournamentManagement/TournamentPageOne/TournamentPageOne.vue +175 -146
  331. package/src/stories/Templates/TournamentManagement/TournamentPageTwo/TournamentPageTwo.stories.js +77 -77
  332. package/src/stories/Templates/TournamentManagement/TournamentPageTwo/TournamentPageTwo.vue +208 -185
  333. package/src/stories/Util/Validations/AddNewPersonModalValidation.js +23 -19
  334. package/src/stories/Util/Validations/ClubManagementValidations.js +17 -21
  335. package/src/stories/Util/Validations/PersonManagementValidations.js +26 -22
  336. package/src/stories/Util/Validations/TournamentFieldsValidations.js +20 -18
  337. package/src/stories/Util/seeding.js +131 -131
  338. package/src/stories/Util/tabs.js +75 -75
  339. package/tailwind/tailwind.css +5 -7
  340. package/tailwind.config.js +12 -15
  341. package/vite.config.js +3 -3
  342. package/src/mocks/getDirectors.js +0 -18
  343. package/src/stories/Molecules/Modals/AssignDirectorModal/AssignDirectorModal.stories.js +0 -45
  344. package/src/stories/Molecules/Modals/AssignDirectorModal/AssignDirectorModal.vue +0 -111
  345. package/src/stories/Organisms/Cards/DirectorAssignmentCard/DirectorAssignmentCard.stories.js +0 -45
  346. package/src/stories/Organisms/Cards/DirectorAssignmentCard/DirectorAssignmentCard.vue +0 -83
  347. package/src/stories/Organisms/Cards/TableauBoutCard/SpacingConfig.js +0 -111
  348. package/src/stories/Organisms/Containers/TableauLines/SpacingConfig.js +0 -112
  349. package/src/stories/Organisms/Containers/TableauLines/TableauLines.stories.js +0 -23
  350. package/src/stories/Organisms/Containers/TableauLines/TableauLines.vue +0 -79
@@ -1,156 +1,218 @@
1
1
  <template>
2
2
  <section>
3
- <EditEventsTopMenu :currentTab="'Checkin'" :tabs="tabs(role, isMobile)" @tabMenuClick="handleTabMenuClick"/>
4
- <AttendanceSummary
5
- :event="event"
6
- :absent="absent"
7
- :present="present"
8
- :activeCount="activeRosterCount"
9
- :waitlistCount="waitlistCount"
10
- :capacity="eventCapacity"/>
3
+ <EditEventsTopMenu :currentTab="'Checkin'" :tabs="tabs(role, isMobile)" @tabMenuClick="handleTabMenuClick" />
4
+ <AttendanceSummary
5
+ :event="event"
6
+ :absent="absent"
7
+ :present="present"
8
+ :activeCount="activeRosterCount"
9
+ :waitlistCount="waitlistCount"
10
+ :capacity="eventCapacity"
11
+ />
11
12
  <div class="w-full flex flex-row justify-center mt-1 md:mt-3">
12
13
  <section class="w-full">
13
14
  <div class="w-full flex flex-col justify-center items-center" style="text-align: center">
14
15
  <section class="grid grid-cols-2 w-full mb-3 py-2">
15
16
  <div class="col-start-1 col-end-2 flex justify-start">
16
17
  <FindOrAddPerson
17
- :persons="personsAll"
18
- :fencingClubs="fencingClubs"
19
- :addBorder="false"
20
- :addNewText="'Add New'"
21
- @new-person-submitted="handleNewPerson"
22
- @person-selected="handleAddExistingPerson" />
18
+ :persons="personsAll"
19
+ :fencingClubs="fencingClubs"
20
+ :addBorder="false"
21
+ :addNewText="'Add New'"
22
+ @new-person-submitted="handleNewPerson"
23
+ @person-selected="handleAddExistingPerson"
24
+ />
23
25
  </div>
24
26
  <div class="col-start-2 col-end-3 flex justify-end">
25
27
  <DropDownMenu
26
- :label="label"
27
- :items="items"
28
- :selectedItem="localSelectedItem"
29
- @update:selectedItem="handleSelectedItem"/>
28
+ :label="label"
29
+ :items="items"
30
+ :selectedItem="localSelectedItem"
31
+ @update:selectedItem="handleSelectedItem"
32
+ />
30
33
  </div>
31
34
  </section>
32
35
 
33
- <section v-if="loading" class="w-full">
34
- <div v-for="index in 6" :key="index">
35
- <FencerCardSkeleton class="mb-4"/>
36
- </div>
37
- </section>
38
- <section v-if="!loading" class="w-full">
39
- <div v-if="activeRosterCount > 0" class="mb-2 flex items-center justify-between">
40
- <BaseText text="Active Roster" size="md" color="quaternary" weight="bold"/>
41
- <BaseText :text="activeRosterSummary" size="sm" color="quinary"/>
42
- </div>
43
- <div v-for="(person, index) in sortedActivePersons" :key="person.PersonId || person.Person?.PersonId || index">
44
- <FencerCard :person="person" class="mb-4"
45
- :isLast="index === sortedActivePersons.length - 1"
46
- :isEdit="event.Status === 'planning' || event.Status === 'preparation'"
47
- @forward:toProfile="handleForwardToProfile"
48
- @update:status="handleStatus"
49
- @remove:fencer="handleRemoveFencer"
50
- @update:moveUp="handleMoveUp"
51
- @update:moveDown="handleMoveDown"
52
- @request:weaver-sign="openWeaverModal"
53
- />
54
- </div>
55
- <section v-if="waitlistCount > 0" class="mt-6 w-full">
56
- <div class="mb-2 flex items-center justify-between">
57
- <BaseText text="Waitlist" size="md" color="quaternary" weight="bold"/>
58
- <BaseText :text="waitlistSummary" size="sm" color="quinary"/>
59
- </div>
60
- <div v-for="(person, index) in sortedWaitlistedPersons" :key="person.PersonId || person.Person?.PersonId || index" class="mb-3">
61
- <WaitlistFencerCard
62
- :person="person"
63
- :queuePosition="index + 1"
64
- @forward:toProfile="handleForwardToProfile"
65
- @move:active="handleMoveWaitlistToActive"
66
- @remove:fencer="handleRemoveWaitlistFencer"/>
67
- </div>
68
- </section>
69
- </section>
70
- <div v-if="!loading && personsInTournament.length === 0" class="mb-10">
36
+ <section v-if="loading" class="w-full">
37
+ <div v-for="index in 6" :key="index">
38
+ <FencerCardSkeleton class="mb-4" />
39
+ </div>
40
+ </section>
41
+ <section v-if="!loading" class="w-full">
42
+ <div v-if="activeRosterCount > 0" class="mb-2 flex items-center justify-between">
43
+ <BaseText text="Active Roster" size="md" color="quaternary" weight="bold" />
44
+ <BaseText :text="activeRosterSummary" size="sm" color="quinary" />
45
+ </div>
46
+ <div
47
+ v-for="(person, index) in sortedActivePersons"
48
+ :key="person.PersonId || person.Person?.PersonId || index"
49
+ >
50
+ <FencerCard
51
+ :person="person"
52
+ class="mb-4"
53
+ :isLast="index === sortedActivePersons.length - 1"
54
+ :isEdit="event.Status === 'planning' || event.Status === 'preparation'"
55
+ @forward:toProfile="handleForwardToProfile"
56
+ @update:status="handleStatus"
57
+ @remove:fencer="handleRemoveFencer"
58
+ @update:moveUp="handleMoveUp"
59
+ @update:moveDown="handleMoveDown"
60
+ @request:weaver-sign="openWeaverModal"
61
+ />
62
+ </div>
63
+ <section v-if="waitlistCount > 0" class="mt-6 w-full">
64
+ <div class="mb-2 flex items-center justify-between">
65
+ <BaseText text="Waitlist" size="md" color="quaternary" weight="bold" />
66
+ <BaseText :text="waitlistSummary" size="sm" color="quinary" />
67
+ </div>
68
+ <div
69
+ v-for="(person, index) in sortedWaitlistedPersons"
70
+ :key="person.PersonId || person.Person?.PersonId || index"
71
+ class="mb-3"
72
+ >
73
+ <WaitlistFencerCard
74
+ :person="person"
75
+ :queuePosition="index + 1"
76
+ @forward:toProfile="handleForwardToProfile"
77
+ @move:active="handleMoveWaitlistToActive"
78
+ @remove:fencer="handleRemoveWaitlistFencer"
79
+ />
80
+ </div>
81
+ </section>
82
+ </section>
83
+ <div v-if="!loading && personsInTournament.length === 0" class="mb-10">
71
84
  <div class="flex items-center border border-dropdownSelect rounded-lg shadow-lg bg-poolBox">
72
- <BaseText text="Remember to assign staff to your event!" size="lg" color="quaternary" weight="bold" class="w-full text-center py-2 px-8"/>
85
+ <BaseText
86
+ text="Remember to assign staff to your event!"
87
+ size="lg"
88
+ color="quaternary"
89
+ weight="bold"
90
+ class="w-full text-center py-2 px-8"
91
+ />
73
92
  </div>
74
- <img alt="Small desert scene with wind blowing." class="w-60 mt-8 mx-auto" :src="emptyDesertIcon"/>
75
- <BaseText :color="'primaryHighlight'" :size="'lg'" :text="'0 fencers have been added!'"
76
- :weight="'normal'" data-testid="text-num-events"/>
77
- <BaseText :color="'primaryHighlight'" :size="'md'" :text="'Click Add New button to get started.'"
78
- :weight="'normal'" data-testid="text-num-events"/>
93
+ <img alt="Small desert scene with wind blowing." class="w-60 mt-8 mx-auto" :src="emptyDesertIcon" />
94
+ <BaseText
95
+ :color="'primaryHighlight'"
96
+ :size="'lg'"
97
+ :text="'0 fencers have been added!'"
98
+ :weight="'normal'"
99
+ data-testid="text-num-events"
100
+ />
101
+ <BaseText
102
+ :color="'primaryHighlight'"
103
+ :size="'md'"
104
+ :text="'Click Add New button to get started.'"
105
+ :weight="'normal'"
106
+ data-testid="text-num-events"
107
+ />
79
108
  </div>
80
109
  </div>
81
110
  </section>
82
111
  </div>
83
112
  <BaseModal
84
- :show="showWeaverModal"
85
- @update:show="(v) => { if (!v) closeWeaverModal(); }"
86
- headerText="Confirm Waiver Signature"
87
- :bodyText="weaverModalBody"
88
- buttonText="Waiver Signed!"
89
- iconColor="dropdownSelect"
90
- iconBackgroundColor="toggleBackground"
91
- iconClass="ml-3"
92
- iconName="fa-file-signature"
93
- @submitModal="confirmWeaverSigned"
113
+ :show="showWeaverModal"
114
+ @update:show="
115
+ v => {
116
+ if (!v) closeWeaverModal();
117
+ }
118
+ "
119
+ headerText="Confirm Waiver Signature"
120
+ :bodyText="weaverModalBody"
121
+ buttonText="Waiver Signed!"
122
+ iconColor="dropdownSelect"
123
+ iconBackgroundColor="toggleBackground"
124
+ iconClass="ml-3"
125
+ iconName="fa-file-signature"
126
+ @submitModal="confirmWeaverSigned"
94
127
  />
95
128
  </section>
96
129
  </template>
97
130
 
98
131
  <script>
99
- import BaseText from "../../../Atoms/Text/BaseText.vue";
100
- import emptyDesertIcon from '../../../../assets/empty_desert_icon.png';
101
- import FencerCard from "../../../Organisms/Cards/FencerCard/FencerCard.vue";
102
- import WaitlistFencerCard from "../../../Organisms/Cards/WaitlistFencerCard/WaitlistFencerCard.vue";
103
- import EditEventsTopMenu from "../../Menus/EditEventsTopMenu/EditEventsTopMenu.vue";
104
- import DropDownMenu from "../../../Organisms/ComplexInputs/DropDown/DropDownMenu.vue";
105
- import FindOrAddPerson from "../../../Organisms/ComplexInputs/FindOrAddPerson/FindOrAddPerson.vue";
106
- import AttendanceSummary from "../../../Organisms/Headers/AttendanceSummary/AttendanceSummary.vue";
107
- import FencerCardSkeleton from "../../../Organisms/Skeletons/FencerCard/FencerCardSkeleton.vue";
108
- import BaseModal from "../../../Molecules/Modals/BaseModal/BaseModal.vue";
109
- import { tabs } from '../../../Util/tabs.js';
110
-
111
- const personSorters = {
112
- Seed: (a, b) => (a.Seed || 0) - (b.Seed || 0),
113
- FullName: (a, b) => a.Person.DisplayName.localeCompare(b.Person.DisplayName),
114
- HEMARating: (a, b) => {
115
- const ratingA = a.Person.HEMARatings?.[0]?.Rating || 0;
116
- const ratingB = b.Person.HEMARatings?.[0]?.Rating || 0;
117
- return ratingB - ratingA;
118
- },
119
- M2Rating: (a, b) => {
120
- const m2RatingA = a.Person.M2Ratings?.[0]?.Rating || 'U00';
121
- const m2RatingB = b.Person.M2Ratings?.[0]?.Rating || 'U00';
122
- return m2RatingA.localeCompare(m2RatingB);
123
- }
124
- };
125
-
126
- const waitlistStatuses = new Set(['waitlist', 'waitlisted', 'waitinglist']);
127
-
128
- const normalizeStatus = (status) => String(status || '').toLocaleLowerCase().replace(/[\s_-]/g, '');
129
-
130
- const isWaitlistedPerson = (person) => waitlistStatuses.has(normalizeStatus(person?.Status));
131
-
132
- const getEventRuleValue = (event, ruleName) => {
133
- const rule = event?.EventRules?.find(eventRule => eventRule?.Rules?.RuleName === ruleName);
134
- return rule?.RuleValue;
135
- };
136
-
137
- const getWaitlistOrderValue = (person) => {
138
- const order = person?.WaitlistPosition ?? person?.WaitlistOrder ?? person?.CreatedAt ?? person?.Seed ?? person?.PoolPosition ?? 0;
139
- return Number.isNaN(Number(order)) ? order : Number(order);
140
- };
141
-
142
- export default {
143
- emits: ['add:existing-person', 'add:person', 'forward:toProfile', 'move:waitlist-to-active', 'remove:fencer', 'remove:waitlist-fencer', 'tab:menu-click', 'update:moveDown', 'update:moveUp', 'update:person', 'weaver:sign'],
144
- components: {
145
- WaitlistFencerCard,
146
- FencerCardSkeleton,
132
+ import BaseText from '../../../Atoms/Text/BaseText.vue';
133
+ import emptyDesertIcon from '../../../../assets/empty_desert_icon.png';
134
+ import FencerCard from '../../../Organisms/Cards/FencerCard/FencerCard.vue';
135
+ import WaitlistFencerCard from '../../../Organisms/Cards/WaitlistFencerCard/WaitlistFencerCard.vue';
136
+ import EditEventsTopMenu from '../../Menus/EditEventsTopMenu/EditEventsTopMenu.vue';
137
+ import DropDownMenu from '../../../Organisms/ComplexInputs/DropDown/DropDownMenu.vue';
138
+ import FindOrAddPerson from '../../../Organisms/ComplexInputs/FindOrAddPerson/FindOrAddPerson.vue';
139
+ import AttendanceSummary from '../../../Organisms/Headers/AttendanceSummary/AttendanceSummary.vue';
140
+ import FencerCardSkeleton from '../../../Organisms/Skeletons/FencerCard/FencerCardSkeleton.vue';
141
+ import BaseModal from '../../../Molecules/Modals/BaseModal/BaseModal.vue';
142
+ import { tabs } from '../../../Util/tabs.js';
143
+
144
+ const personSorters = {
145
+ Seed: (a, b) => (a.Seed || 0) - (b.Seed || 0),
146
+ FullName: (a, b) => a.Person.DisplayName.localeCompare(b.Person.DisplayName),
147
+ HEMARating: (a, b) => {
148
+ const ratingA = a.Person.HEMARatings?.[0]?.Rating || 0;
149
+ const ratingB = b.Person.HEMARatings?.[0]?.Rating || 0;
150
+ return ratingB - ratingA;
151
+ },
152
+ M2Rating: (a, b) => {
153
+ const m2RatingA = a.Person.M2Ratings?.[0]?.Rating || 'U00';
154
+ const m2RatingB = b.Person.M2Ratings?.[0]?.Rating || 'U00';
155
+ return m2RatingA.localeCompare(m2RatingB);
156
+ }
157
+ };
158
+
159
+ const waitlistStatuses = new Set(['waitlist', 'waitlisted', 'waitinglist']);
160
+
161
+ const normalizeStatus = status =>
162
+ String(status || '')
163
+ .toLocaleLowerCase()
164
+ .replace(/[\s_-]/g, '');
165
+
166
+ const isWaitlistedPerson = person => waitlistStatuses.has(normalizeStatus(person?.Status));
167
+
168
+ const getEventRuleValue = (event, ruleName) => {
169
+ const rule = event?.EventRules?.find(eventRule => eventRule?.Rules?.RuleName === ruleName);
170
+ return rule?.RuleValue;
171
+ };
172
+
173
+ const waitlistOrderFields = ['WaitlistPosition', 'WaitlistOrder', 'CreatedAt', 'Seed', 'PoolPosition'];
174
+
175
+ const getFirstDefinedFieldValue = (record, fieldNames, fallback) => {
176
+ const source = record || {};
177
+ const fieldName = fieldNames.find(name => source[name] !== null && source[name] !== undefined);
178
+ if (!fieldName) return fallback;
179
+ return source[fieldName];
180
+ };
181
+
182
+ const normalizeOrderValue = value => {
183
+ const numericValue = Number(value);
184
+ return Number.isNaN(numericValue) ? value : numericValue;
185
+ };
186
+
187
+ const getWaitlistOrderValue = person => {
188
+ const order = getFirstDefinedFieldValue(person, waitlistOrderFields, 0);
189
+ return normalizeOrderValue(order);
190
+ };
191
+
192
+ export default {
193
+ emits: [
194
+ 'add:existing-person',
195
+ 'add:person',
196
+ 'forward:toProfile',
197
+ 'move:waitlist-to-active',
198
+ 'remove:fencer',
199
+ 'remove:waitlist-fencer',
200
+ 'tab:menu-click',
201
+ 'update:moveDown',
202
+ 'update:moveUp',
203
+ 'update:person',
204
+ 'weaver:sign'
205
+ ],
206
+ components: {
207
+ WaitlistFencerCard,
208
+ FencerCardSkeleton,
147
209
  AttendanceSummary,
148
210
  FindOrAddPerson,
149
211
  DropDownMenu,
150
212
  EditEventsTopMenu,
151
- FencerCard,
152
- BaseText,
153
- BaseModal
213
+ FencerCard,
214
+ BaseText,
215
+ BaseModal
154
216
  },
155
217
  props: {
156
218
  personsAll: Array,
@@ -183,14 +245,14 @@ export default {
183
245
  windowWidth: window.innerWidth,
184
246
  label: 'Sort by',
185
247
  items: [
186
- {text: 'Seed', link: 'Seed'},
187
- {text: 'Name', link: 'FullName'},
188
- {text: 'M2Rating', link: 'M2Rating'},
189
- {text: 'HEMARating', link: 'HEMARating'}
248
+ { text: 'Seed', link: 'Seed' },
249
+ { text: 'Name', link: 'FullName' },
250
+ { text: 'M2Rating', link: 'M2Rating' },
251
+ { text: 'HEMARating', link: 'HEMARating' }
190
252
  ],
191
- localSelectedItem: {text: 'Seed', link: 'Seed'},
253
+ localSelectedItem: { text: 'Seed', link: 'Seed' },
192
254
  showWeaverModal: false,
193
- pendingWeaverPerson: null,
255
+ pendingWeaverPerson: null
194
256
  };
195
257
  },
196
258
  mounted() {
@@ -201,90 +263,91 @@ export default {
201
263
  },
202
264
  computed: {
203
265
  weaverModalBody() {
204
- const p = this.pendingWeaverPerson?.Person;
205
- const name = p?.DisplayName ?? 'This fencer';
206
- return `Has ${name} completed signing the waiver?`;
266
+ const p = this.pendingWeaverPerson?.Person;
267
+ const name = p?.DisplayName ?? 'This fencer';
268
+ return `Has ${name} completed signing the waiver?`;
207
269
  },
208
270
  isMobile() {
209
271
  return this.windowWidth <= 748;
210
272
  },
211
- activePersons() {
212
- if (!Array.isArray(this.personsInTournament) || this.personsInTournament.length === 0) {
213
- return [];
214
- }
215
-
216
- return this.personsInTournament.filter(person => !isWaitlistedPerson(person));
217
- },
218
- waitlistedPersons() {
219
- if (!Array.isArray(this.personsInTournament) || this.personsInTournament.length === 0) {
220
- return [];
221
- }
222
-
223
- return this.personsInTournament.filter(isWaitlistedPerson);
224
- },
225
- sortedActivePersons() {
226
- if (this.activePersons.length === 0) {
227
- return [];
228
- }
229
-
230
- let sortedArray = [...this.activePersons]; // Clone array to prevent modifying props
231
-
232
- sortedArray.sort((a, b) => {
273
+ activePersons() {
274
+ if (!Array.isArray(this.personsInTournament) || this.personsInTournament.length === 0) {
275
+ return [];
276
+ }
277
+
278
+ return this.personsInTournament.filter(person => !isWaitlistedPerson(person));
279
+ },
280
+ waitlistedPersons() {
281
+ if (!Array.isArray(this.personsInTournament) || this.personsInTournament.length === 0) {
282
+ return [];
283
+ }
284
+
285
+ return this.personsInTournament.filter(isWaitlistedPerson);
286
+ },
287
+ sortedActivePersons() {
288
+ if (this.activePersons.length === 0) {
289
+ return [];
290
+ }
291
+
292
+ let sortedArray = [...this.activePersons]; // Clone array to prevent modifying props
293
+
294
+ sortedArray.sort((a, b) => {
233
295
  if (!a || !b || !a.Person || !b.Person) {
234
- console.warn("Undefined person object detected:", a, b);
296
+ console.warn('Undefined person object detected:', a, b);
235
297
  return 0;
236
298
  }
237
299
 
238
- const sortPersons = personSorters[this.localSelectedItem.link];
239
- if (sortPersons) return sortPersons(a, b);
240
-
241
- console.warn("Unknown sorting key:", this.localSelectedItem.link);
242
- return 0;
243
- });
244
- return sortedArray;
245
- },
246
- sortedWaitlistedPersons() {
247
- return [...this.waitlistedPersons].sort((a, b) => {
248
- const orderA = getWaitlistOrderValue(a);
249
- const orderB = getWaitlistOrderValue(b);
250
-
251
- if (typeof orderA === 'number' && typeof orderB === 'number') {
252
- return orderA - orderB;
253
- }
254
-
255
- return String(orderA).localeCompare(String(orderB));
256
- });
257
- },
258
- activeRosterCount() {
259
- return this.activePersons.length;
260
- },
261
- waitlistCount() {
262
- return this.waitlistedPersons.length;
263
- },
264
- eventCapacity() {
265
- const capacity = this.event?.CutOffNumber ?? this.event?.MaxFencers ?? getEventRuleValue(this.event, 'CutOffNumber');
266
- if (capacity === 0 || capacity === '0') {
267
- return 'Unlimited';
268
- }
269
-
270
- return capacity || '';
271
- },
272
- activeRosterSummary() {
273
- if (!this.eventCapacity) {
274
- return `${this.activeRosterCount} active`;
275
- }
276
-
277
- return `${this.activeRosterCount} / ${this.eventCapacity}`;
278
- },
279
- waitlistSummary() {
280
- return `${this.waitlistCount} waiting`;
281
- },
282
- absent() {
283
- return this.activePersons.filter(person => person.Status === 'Absent').length;
284
- },
285
- present() {
286
- return this.activePersons.filter(person => person.Status === 'Present').length;
287
- },
300
+ const sortPersons = personSorters[this.localSelectedItem.link];
301
+ if (sortPersons) return sortPersons(a, b);
302
+
303
+ console.warn('Unknown sorting key:', this.localSelectedItem.link);
304
+ return 0;
305
+ });
306
+ return sortedArray;
307
+ },
308
+ sortedWaitlistedPersons() {
309
+ return [...this.waitlistedPersons].sort((a, b) => {
310
+ const orderA = getWaitlistOrderValue(a);
311
+ const orderB = getWaitlistOrderValue(b);
312
+
313
+ if (typeof orderA === 'number' && typeof orderB === 'number') {
314
+ return orderA - orderB;
315
+ }
316
+
317
+ return String(orderA).localeCompare(String(orderB));
318
+ });
319
+ },
320
+ activeRosterCount() {
321
+ return this.activePersons.length;
322
+ },
323
+ waitlistCount() {
324
+ return this.waitlistedPersons.length;
325
+ },
326
+ eventCapacity() {
327
+ const capacity =
328
+ this.event?.CutOffNumber ?? this.event?.MaxFencers ?? getEventRuleValue(this.event, 'CutOffNumber');
329
+ if (capacity === 0 || capacity === '0') {
330
+ return 'Unlimited';
331
+ }
332
+
333
+ return capacity || '';
334
+ },
335
+ activeRosterSummary() {
336
+ if (!this.eventCapacity) {
337
+ return `${this.activeRosterCount} active`;
338
+ }
339
+
340
+ return `${this.activeRosterCount} / ${this.eventCapacity}`;
341
+ },
342
+ waitlistSummary() {
343
+ return `${this.waitlistCount} waiting`;
344
+ },
345
+ absent() {
346
+ return this.activePersons.filter(person => person.Status === 'Absent').length;
347
+ },
348
+ present() {
349
+ return this.activePersons.filter(person => person.Status === 'Present').length;
350
+ }
288
351
  },
289
352
  methods: {
290
353
  openWeaverModal(person) {
@@ -301,32 +364,32 @@ export default {
301
364
  },
302
365
  handleSelectedItem(selectedItem) {
303
366
  this.localSelectedItem = selectedItem;
304
- },
305
- handleStatus(person) {
306
- this.$emit('update:person', person);
307
- },
367
+ },
368
+ handleStatus(person) {
369
+ this.$emit('update:person', person);
370
+ },
308
371
  handleNewPerson(value) {
309
372
  this.$emit('add:person', value);
310
- },
311
- handleAddExistingPerson(value) {
312
- this.$emit('add:existing-person', value);
313
- },
373
+ },
374
+ handleAddExistingPerson(value) {
375
+ this.$emit('add:existing-person', value);
376
+ },
314
377
  handleTabMenuClick(value) {
315
378
  this.$emit('tab:menu-click', value);
316
- },
317
- handleRemoveFencer(value) {
318
- this.$emit('remove:fencer', value);
319
- },
320
- handleMoveWaitlistToActive(person) {
321
- this.$emit('move:waitlist-to-active', person);
322
- },
323
- handleRemoveWaitlistFencer(person) {
324
- this.$emit('remove:waitlist-fencer', person);
325
- },
326
- handleMoveUp(person){
379
+ },
380
+ handleRemoveFencer(value) {
381
+ this.$emit('remove:fencer', value);
382
+ },
383
+ handleMoveWaitlistToActive(person) {
384
+ this.$emit('move:waitlist-to-active', person);
385
+ },
386
+ handleRemoveWaitlistFencer(person) {
387
+ this.$emit('remove:waitlist-fencer', person);
388
+ },
389
+ handleMoveUp(person) {
327
390
  this.$emit('update:moveUp', person);
328
391
  },
329
- handleMoveDown(person){
392
+ handleMoveDown(person) {
330
393
  this.$emit('update:moveDown', person);
331
394
  },
332
395
  handleForwardToProfile(personId) {
@@ -336,5 +399,5 @@ export default {
336
399
  this.windowWidth = window.innerWidth;
337
400
  }
338
401
  }
339
- }
402
+ };
340
403
  </script>