@gen-epix/ui-client-casedb 4.0.0 → 4.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 (393) hide show
  1. package/dist/@types/mui.d.ts +1 -1
  2. package/dist/@types/{ui-casedb.d.ts → ui-client-casedb.d.ts} +1 -1
  3. package/dist/_chunks/AddCasesToEventDialog.js +74 -74
  4. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  5. package/dist/_chunks/CaseContentForm.js +2 -2
  6. package/dist/_chunks/CaseContentForm.js.map +1 -1
  7. package/dist/_chunks/CaseDbDownloadUtil.js +40 -35
  8. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  9. package/dist/_chunks/CaseInfoDialog.js +195 -195
  10. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  11. package/dist/_chunks/CaseSetInfoDialog.js +131 -131
  12. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  13. package/dist/_chunks/CaseTypeInfoDialog.js +63 -61
  14. package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -1
  15. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +6 -6
  16. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  17. package/dist/_chunks/CompletCaseTypeLoader.js +3 -3
  18. package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -1
  19. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +1 -1
  20. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -1
  21. package/dist/_chunks/CustomTabPanel.js.map +1 -1
  22. package/dist/_chunks/Dashboard.js +399 -386
  23. package/dist/_chunks/Dashboard.js.map +1 -1
  24. package/dist/_chunks/DashboardStoreLoader.js +5 -5
  25. package/dist/_chunks/DashboardStoreLoader.js.map +1 -1
  26. package/dist/_chunks/DataCollectionAccessInfo.js +21 -21
  27. package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -1
  28. package/dist/_chunks/EpiCurveUtil.js +4 -4
  29. package/dist/_chunks/EpiCurveUtil.js.map +1 -1
  30. package/dist/_chunks/EpiCurveWidget.js +189 -183
  31. package/dist/_chunks/EpiCurveWidget.js.map +1 -1
  32. package/dist/_chunks/FilterUtil.js +103 -101
  33. package/dist/_chunks/FilterUtil.js.map +1 -1
  34. package/dist/_chunks/FindSimilarCasesDialog.js +16 -16
  35. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  36. package/dist/_chunks/FindSimilarCasesUtil.js +9 -9
  37. package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -1
  38. package/dist/_chunks/HomePageTrends.js +8 -8
  39. package/dist/_chunks/HomePageTrends.js.map +1 -1
  40. package/dist/_chunks/LegendaItem.js +3 -3
  41. package/dist/_chunks/LegendaItem.js.map +1 -1
  42. package/dist/_chunks/LineListWidget.js +23 -21
  43. package/dist/_chunks/LineListWidget.js.map +1 -1
  44. package/dist/_chunks/PanelSeparator.js +374 -384
  45. package/dist/_chunks/PanelSeparator.js.map +1 -1
  46. package/dist/_chunks/Upload.js +222 -207
  47. package/dist/_chunks/Upload.js.map +1 -1
  48. package/dist/_chunks/UploadUtil.js +1970 -841
  49. package/dist/_chunks/UploadUtil.js.map +1 -1
  50. package/dist/_chunks/UserRightsDialog.js +12 -12
  51. package/dist/_chunks/UserRightsDialog.js.map +1 -1
  52. package/dist/_chunks/_MapCache.js +2 -2
  53. package/dist/_chunks/_baseGet.js +1 -1
  54. package/dist/_chunks/_baseGet.js.map +1 -1
  55. package/dist/_chunks/_baseIteratee.js +1 -1
  56. package/dist/_chunks/_baseIteratee.js.map +1 -1
  57. package/dist/_chunks/_setToString.js.map +1 -1
  58. package/dist/_chunks/{chunk-KS7C4IRE.js → chunk-BV7QT456.js} +330 -495
  59. package/dist/_chunks/chunk-BV7QT456.js.map +1 -0
  60. package/dist/_chunks/cloneDeep.js +11 -9
  61. package/dist/_chunks/cloneDeep.js.map +1 -1
  62. package/dist/_chunks/dashboardStore.js +259 -261
  63. package/dist/_chunks/dashboardStore.js.map +1 -1
  64. package/dist/_chunks/esm.js +2900 -2868
  65. package/dist/_chunks/esm.js.map +1 -1
  66. package/dist/_chunks/format.js +8 -8
  67. package/dist/_chunks/format.js.map +1 -1
  68. package/dist/_chunks/index.esm.js +919 -796
  69. package/dist/_chunks/index.esm.js.map +1 -1
  70. package/dist/_chunks/index.module.js +1 -1
  71. package/dist/_chunks/index.module.js.map +1 -1
  72. package/dist/_chunks/protectedTokens.js +79 -81
  73. package/dist/_chunks/protectedTokens.js.map +1 -1
  74. package/dist/_chunks/react.js +1 -1
  75. package/dist/_chunks/react.js.map +1 -1
  76. package/dist/_chunks/round.js +1 -1
  77. package/dist/_chunks/round.js.map +1 -1
  78. package/dist/_chunks/shallow.js +2 -2
  79. package/dist/_chunks/shallow.js.map +1 -1
  80. package/dist/_chunks/sync.js +198 -161
  81. package/dist/_chunks/sync.js.map +1 -1
  82. package/dist/_chunks/toDate.js +1 -1
  83. package/dist/_chunks/toDate.js.map +1 -1
  84. package/dist/_chunks/toString.js +1 -1
  85. package/dist/_chunks/toString.js.map +1 -1
  86. package/dist/_chunks/useUnit.js.map +1 -1
  87. package/dist/_chunks/vanilla.js +1 -1
  88. package/dist/_chunks/vanilla.js.map +1 -1
  89. package/dist/_chunks/yup.js +5 -5
  90. package/dist/_chunks/yup.js.map +1 -1
  91. package/dist/classes/filters/SelectionFilter.d.ts +2 -2
  92. package/dist/classes/filters/TreeFilter.d.ts +2 -2
  93. package/dist/classes/services/DataService/index.js +3 -3
  94. package/dist/classes/services/DataService/index.js.map +1 -1
  95. package/dist/classes/services/EventBusService/EventBusService.d.ts +1 -1
  96. package/dist/classes/services/EventBusService/index.js.map +1 -1
  97. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +1 -1
  98. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -1
  99. package/dist/components/app/CaseDbApp/index.js +8 -5
  100. package/dist/components/app/CaseDbApp/index.js.map +1 -1
  101. package/dist/components/form/fields/ArrangementEditor/index.js +83 -83
  102. package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -1
  103. package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +2 -2
  104. package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +2 -2
  105. package/dist/components/ui/CaseContentFormDialog/index.js +1 -1
  106. package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -1
  107. package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +2 -2
  108. package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +2 -2
  109. package/dist/components/ui/CaseSummary/index.js +1 -1
  110. package/dist/components/ui/CaseSummary/index.js.map +1 -1
  111. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +2 -2
  112. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
  113. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +2 -2
  114. package/dist/components/ui/ContextMenu/index.js.map +1 -1
  115. package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +2 -2
  116. package/dist/components/ui/CreateEventDialog/index.js +9 -9
  117. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  118. package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
  119. package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
  120. package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
  121. package/dist/components/ui/DashboardEditCases/index.js +1 -1
  122. package/dist/components/ui/DashboardEditCases/index.js.map +1 -1
  123. package/dist/components/ui/FileSelector/index.js +46 -46
  124. package/dist/components/ui/FileSelector/index.js.map +1 -1
  125. package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +2 -2
  126. package/dist/components/ui/Grouping/index.js +50 -50
  127. package/dist/components/ui/Grouping/index.js.map +1 -1
  128. package/dist/components/ui/HistogramWidget/index.js +1 -1
  129. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  130. package/dist/components/ui/MapWidget/index.js +7 -3
  131. package/dist/components/ui/MapWidget/index.js.map +1 -1
  132. package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +2 -2
  133. package/dist/components/ui/RemoveCasesFromEventDialog/index.js +6 -6
  134. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  135. package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +2 -2
  136. package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +2 -2
  137. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  138. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  139. package/dist/components/ui/TreeDescription/index.js.map +1 -1
  140. package/dist/components/ui/TreeWidget/index.js +11 -11
  141. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  142. package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +2 -2
  143. package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +2 -2
  144. package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +2 -2
  145. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +2 -2
  146. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +25 -11
  147. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -1
  148. package/dist/components/ui/Warning/index.js.map +1 -1
  149. package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -1
  150. package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
  151. package/dist/components/ui/WidgetMenu/index.js +2 -2
  152. package/dist/components/ui/WidgetMenu/index.js.map +1 -1
  153. package/dist/components/ui/WidgetUnavailable/index.js.map +1 -1
  154. package/dist/constants/query.d.ts +1 -1
  155. package/dist/constants/query.js +1 -1
  156. package/dist/constants/query.js.map +1 -1
  157. package/dist/context/caseAbac/CaseAbacContext.d.ts +1 -1
  158. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +3 -3
  159. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -1
  160. package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +1 -1
  161. package/dist/dataHooks/useCaseRightsQuery/index.js +2 -2
  162. package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -1
  163. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +3 -3
  164. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -1
  165. package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +1 -1
  166. package/dist/dataHooks/useCaseSetRightsQuery/index.js +2 -2
  167. package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -1
  168. package/dist/dataHooks/useCaseSetStatsQuery/index.js +3 -3
  169. package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -1
  170. package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +1 -1
  171. package/dist/dataHooks/useCaseSetStatusesQuery/index.js +3 -3
  172. package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -1
  173. package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +1 -1
  174. package/dist/dataHooks/useCaseSetsQuery/index.js +3 -3
  175. package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -1
  176. package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +1 -1
  177. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +3 -3
  178. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -1
  179. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +1 -1
  180. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -1
  181. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +1 -1
  182. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +2 -2
  183. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -1
  184. package/dist/dataHooks/useCaseTypeSetsQuery/index.js +3 -3
  185. package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -1
  186. package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +1 -1
  187. package/dist/dataHooks/useCaseTypeStatsQuery/index.js +2 -2
  188. package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -1
  189. package/dist/dataHooks/useCaseTypesQuery/index.js +3 -3
  190. package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -1
  191. package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +1 -1
  192. package/dist/dataHooks/useColSetMembersQuery/index.js +2 -2
  193. package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -1
  194. package/dist/dataHooks/useColSetsQuery/index.js +3 -3
  195. package/dist/dataHooks/useColSetsQuery/index.js.map +1 -1
  196. package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +1 -1
  197. package/dist/dataHooks/useColTypesQuery/index.js.map +1 -1
  198. package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +1 -1
  199. package/dist/dataHooks/useColsQuery/index.js +3 -3
  200. package/dist/dataHooks/useColsQuery/index.js.map +1 -1
  201. package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +1 -1
  202. package/dist/dataHooks/useConceptQuery/index.js +3 -3
  203. package/dist/dataHooks/useConceptQuery/index.js.map +1 -1
  204. package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +1 -1
  205. package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -1
  206. package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +1 -1
  207. package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -1
  208. package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +1 -1
  209. package/dist/dataHooks/useConceptSetsQuery/index.js +3 -3
  210. package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -1
  211. package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +1 -1
  212. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +2 -2
  213. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -1
  214. package/dist/dataHooks/useDataCollectionsQuery/index.js +3 -3
  215. package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -1
  216. package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +1 -1
  217. package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -1
  218. package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +1 -1
  219. package/dist/dataHooks/useDimsQuery/index.js +3 -3
  220. package/dist/dataHooks/useDimsQuery/index.js.map +1 -1
  221. package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +1 -1
  222. package/dist/dataHooks/useDiseasesQuery/index.js +3 -3
  223. package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -1
  224. package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +1 -1
  225. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +3 -3
  226. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -1
  227. package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +1 -1
  228. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +3 -3
  229. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -1
  230. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +1 -1
  231. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +2 -2
  232. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -1
  233. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +2 -2
  234. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -1
  235. package/dist/dataHooks/useRefColsQuery/index.js +3 -3
  236. package/dist/dataHooks/useRefColsQuery/index.js.map +1 -1
  237. package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +1 -1
  238. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +2 -2
  239. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -1
  240. package/dist/dataHooks/useRefDimsQuery/index.js +3 -3
  241. package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -1
  242. package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +1 -1
  243. package/dist/dataHooks/useRegionQuery/index.js +3 -3
  244. package/dist/dataHooks/useRegionQuery/index.js.map +1 -1
  245. package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +1 -1
  246. package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -1
  247. package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +1 -1
  248. package/dist/dataHooks/useRegionSetsQuery/index.js +3 -3
  249. package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -1
  250. package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +1 -1
  251. package/dist/dataHooks/useSequencingProtocolsQuery/index.js +3 -3
  252. package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -1
  253. package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +1 -1
  254. package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -1
  255. package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +1 -1
  256. package/dist/dataHooks/useUnitQuery/useUnit.d.ts +1 -1
  257. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +2 -2
  258. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -1
  259. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +3 -3
  260. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -1
  261. package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +1 -1
  262. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +2 -2
  263. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -1
  264. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +2 -2
  265. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -1
  266. package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +1 -1
  267. package/dist/hooks/useUserCasePolicyNameFactory/index.js +3 -3
  268. package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -1
  269. package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +1 -1
  270. package/dist/locale/nl.json +1 -1
  271. package/dist/models/config.d.ts +1 -1
  272. package/dist/models/dashboard.d.ts +1 -1
  273. package/dist/models/dashboard.js.map +1 -1
  274. package/dist/models/theme.d.ts +2 -2
  275. package/dist/pages/CaseDbUsersAdminPage/index.js +5 -5
  276. package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -1
  277. package/dist/pages/CaseSetCategoryAdminPage/index.js +4 -4
  278. package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -1
  279. package/dist/pages/CaseSetStatusAdminPage/index.js +4 -4
  280. package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -1
  281. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +4 -4
  282. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -1
  283. package/dist/pages/CaseTypeSetsAdminPage/index.js +6 -6
  284. package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -1
  285. package/dist/pages/CaseTypesAdminPage/index.js +5 -5
  286. package/dist/pages/CaseTypesAdminPage/index.js.map +1 -1
  287. package/dist/pages/CasesDetailPage/index.js +5 -5
  288. package/dist/pages/CasesDetailPage/index.js.map +1 -1
  289. package/dist/pages/CasesPage/index.js +10 -10
  290. package/dist/pages/CasesPage/index.js.map +1 -1
  291. package/dist/pages/ColSetsAdminPage/index.js +6 -6
  292. package/dist/pages/ColSetsAdminPage/index.js.map +1 -1
  293. package/dist/pages/ColsAdminPage/index.js +5 -5
  294. package/dist/pages/ColsAdminPage/index.js.map +1 -1
  295. package/dist/pages/ConceptRelationsAdminPage/index.js +19 -19
  296. package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -1
  297. package/dist/pages/ConceptSetsAdminPage/index.js +5 -5
  298. package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -1
  299. package/dist/pages/ConceptsAdminPage/index.js +5 -5
  300. package/dist/pages/ConceptsAdminPage/index.js.map +1 -1
  301. package/dist/pages/DataCollectionSetsAdminPage/index.js +12 -12
  302. package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -1
  303. package/dist/pages/DataCollectionVisualizationPage/index.js +4 -4
  304. package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
  305. package/dist/pages/DataCollectionsAdminPage/index.js +4 -4
  306. package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -1
  307. package/dist/pages/DimsAdminPage/index.js +6 -6
  308. package/dist/pages/DimsAdminPage/index.js.map +1 -1
  309. package/dist/pages/DiseasesAdminPage/index.js +4 -4
  310. package/dist/pages/DiseasesAdminPage/index.js.map +1 -1
  311. package/dist/pages/EtiologicalAgentsAdminPage/index.js +4 -4
  312. package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -1
  313. package/dist/pages/EtiologiesAdminPage/index.js +3 -3
  314. package/dist/pages/EtiologiesAdminPage/index.js.map +1 -1
  315. package/dist/pages/EventsDetailPage/index.js +5 -5
  316. package/dist/pages/EventsDetailPage/index.js.map +1 -1
  317. package/dist/pages/EventsPage/index.js +11 -11
  318. package/dist/pages/EventsPage/index.js.map +1 -1
  319. package/dist/pages/HomePage/index.js +2 -2
  320. package/dist/pages/HomePage/index.js.map +1 -1
  321. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +4 -4
  322. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  323. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +4 -4
  324. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -1
  325. package/dist/pages/RefColsAdminPage/index.js +7 -7
  326. package/dist/pages/RefColsAdminPage/index.js.map +1 -1
  327. package/dist/pages/RefDimsAdminPage/index.js +5 -5
  328. package/dist/pages/RefDimsAdminPage/index.js.map +1 -1
  329. package/dist/pages/RegionRelationsAdminPage/index.js +3 -3
  330. package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -1
  331. package/dist/pages/RegionSetShapesAdminPage/index.js +4 -4
  332. package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -1
  333. package/dist/pages/RegionSetsAdminPage/index.js +5 -5
  334. package/dist/pages/RegionSetsAdminPage/index.js.map +1 -1
  335. package/dist/pages/RegionsAdminPage/index.js +5 -5
  336. package/dist/pages/RegionsAdminPage/index.js.map +1 -1
  337. package/dist/pages/TrendsPage/index.js +1 -1
  338. package/dist/pages/TrendsPage/index.js.map +1 -1
  339. package/dist/pages/UploadPage/index.js +1 -1
  340. package/dist/pages/UploadPage/index.js.map +1 -1
  341. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +4 -4
  342. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -1
  343. package/dist/pages/UserEffectiveRightsAdminPage/index.js +12 -12
  344. package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
  345. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +8 -8
  346. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  347. package/dist/pages/UserShareCasePoliciesAdminPage/index.js +4 -4
  348. package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -1
  349. package/dist/routes/adminRoutes.d.ts +1 -1
  350. package/dist/routes/index.js +11 -8
  351. package/dist/routes/index.js.map +1 -1
  352. package/dist/routes/routes.d.ts +1 -1
  353. package/dist/setup/setup.js +5 -5
  354. package/dist/setup/setup.js.map +1 -1
  355. package/dist/stores/dashboardStore/dashboardStore.d.ts +1 -1
  356. package/dist/stores/uploadStore/index.js +2 -2
  357. package/dist/stores/uploadStore/index.js.map +1 -1
  358. package/dist/stores/uploadStore/uploadStore.d.ts +1 -1
  359. package/dist/stores/userProfileStore/index.js +2 -2
  360. package/dist/stores/userProfileStore/index.js.map +1 -1
  361. package/dist/theme/demoTheme/index.js +2 -2
  362. package/dist/theme/demoTheme/index.js.map +1 -1
  363. package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +1 -1
  364. package/dist/utils/CaseDbDataUtil/index.js +1 -1
  365. package/dist/utils/CaseDbDataUtil/index.js.map +1 -1
  366. package/dist/utils/CaseDbStandardConfigUtil/index.js +2488 -1408
  367. package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
  368. package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +1 -1
  369. package/dist/utils/CaseDbTableUtil/index.js +1 -1
  370. package/dist/utils/CaseDbTableUtil/index.js.map +1 -1
  371. package/dist/utils/CaseSelectionUtil/index.js.map +1 -1
  372. package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +1 -1
  373. package/dist/utils/CaseTypeFormUtil/index.js +7 -10
  374. package/dist/utils/CaseTypeFormUtil/index.js.map +1 -1
  375. package/dist/utils/CaseTypeUtil/index.js +1 -1
  376. package/dist/utils/CaseTypeUtil/index.js.map +1 -1
  377. package/dist/utils/CaseUtil/index.js +3 -3
  378. package/dist/utils/CaseUtil/index.js.map +1 -1
  379. package/dist/utils/DashboardUtil/index.js +1 -1
  380. package/dist/utils/DashboardUtil/index.js.map +1 -1
  381. package/dist/utils/DataSetUtil/index.js.map +1 -1
  382. package/dist/utils/FileUtil/index.js +1 -1
  383. package/dist/utils/FileUtil/index.js.map +1 -1
  384. package/dist/utils/FilterUtil/FilterUtil.d.ts +2 -2
  385. package/dist/utils/HistogramUtil/index.js +1 -1
  386. package/dist/utils/HistogramUtil/index.js.map +1 -1
  387. package/dist/utils/MapUtil/index.js +1 -1
  388. package/dist/utils/MapUtil/index.js.map +1 -1
  389. package/dist/utils/StratificationUtil/index.js +3 -2
  390. package/dist/utils/StratificationUtil/index.js.map +1 -1
  391. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -1
  392. package/package.json +19 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ColsAdminPage/ColsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n object,\n string,\n} from 'yup';\nimport { useParams } from 'react-router-dom';\nimport type { UseFormReturn } from 'react-hook-form';\nimport type {\n CaseDbApiPermission,\n CaseDbCol,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbColType,\n CaseDbCommandName,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type {\n FormFieldDefinition,\n OptionBase,\n} from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport {\n useColMapQuery,\n useColOptionsQuery,\n} from '../../dataHooks/useColsQuery';\nimport {\n useCaseTypeMapQuery,\n useCaseTypeOptionsQuery,\n} from '../../dataHooks/useCaseTypesQuery';\nimport {\n useRefColMapQuery,\n useRefColOptionsQuery,\n} from '../../dataHooks/useRefColsQuery';\nimport { useTreeAlgorithmCodeOptionsQuery } from '../../dataHooks/useTreeAlgorithmCodesQuery';\nimport {\n useDimMapQuery,\n useDimOptionsQuery,\n} from '../../dataHooks/useDimsQuery';\nimport { useRefColsValidationRulesQuery } from '../../dataHooks/useRefColsValidationRulesQuery';\nimport { useRefDimMapQuery } from '../../dataHooks/useRefDimsQuery';\nimport { CaseDbDataUtil } from '../../utils/CaseDbDataUtil';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\ntype FormFields = OmitWithMetaData<CaseDbCol, 'case_type' | 'dim' | 'props' | 'ref_col'>;\n\nconst NCBI_TAXID_REGEX = /^NCBI:txid\\d+/;\n\nexport const ColsAdminPage = () => {\n const { t } = useTranslation();\n const { caseTypeId, dimId } = useParams();\n const refColOptionsQuery = useRefColOptionsQuery();\n const refColMapQuery = useRefColMapQuery();\n const refDimMapQuery = useRefDimMapQuery();\n const treeAlgorithmCodesOptionsQuery = useTreeAlgorithmCodeOptionsQuery();\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const colOptionsQuery = useColOptionsQuery();\n const colMapQuery = useColMapQuery();\n const caseTypeMapQuery = useCaseTypeMapQuery();\n const dimMapQuery = useDimMapQuery();\n const dimOptionsQuery = useDimOptionsQuery();\n const colsValidationRulesQuery = useRefColsValidationRulesQuery();\n const loadables = useArray([refDimMapQuery, refColMapQuery, colsValidationRulesQuery, dimOptionsQuery, dimMapQuery, caseTypeMapQuery, caseTypeOptionsQuery, refColOptionsQuery, treeAlgorithmCodesOptionsQuery, colOptionsQuery]);\n const dimOptionsByCaseTypeIdCacheRef = useRef(new Map<string, OptionBase<string>[]>());\n const refColOptionsByDimIdCacheRef = useRef(new Map<string, OptionBase<string>[]>());\n const geneticSequenceColOptionsByCaseTypeIdCacheRef = useRef(new Map<string, OptionBase<string>[]>());\n\n const normalizedCaseTypeId = useMemo(() => {\n if (dimId) {\n return dimMapQuery.map.get(dimId)?.case_type_id ?? null;\n }\n if (caseTypeId) {\n return caseTypeId;\n }\n return null;\n }, [dimId, dimMapQuery.map, caseTypeId]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbCaseApi.getInstance().colsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const fetchAllSelect = useCallback((cols: CaseDbCol[]) => {\n if (dimId) {\n return cols.filter((col) => col.dim_id === dimId);\n }\n return cols;\n }, [dimId]);\n\n const deleteOne = useCallback(async (item: CaseDbCol) => {\n return await CaseDbCaseApi.getInstance().colsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbCol) => {\n return (await CaseDbCaseApi.getInstance().colsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbCaseApi.getInstance().colsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbCol) => {\n return item.label;\n }, []);\n\n const getDimOptionsForCaseTypeId = useCallback((id: string): OptionBase<string>[] => {\n if (dimOptionsByCaseTypeIdCacheRef.current.has(id)) {\n return dimOptionsByCaseTypeIdCacheRef.current.get(id);\n }\n const options = CaseDbDataUtil.getDimOptionsForCaseTypeId({\n caseTypeId: id,\n dimMap: dimMapQuery.map,\n dimOptions: dimOptionsQuery.options,\n });\n dimOptionsByCaseTypeIdCacheRef.current.set(id, options);\n return options;\n }, [dimMapQuery.map, dimOptionsQuery.options]);\n\n const getRefColOptionsForDimId = useCallback((id: string): OptionBase<string>[] => {\n if (refColOptionsByDimIdCacheRef.current.has(id)) {\n return refColOptionsByDimIdCacheRef.current.get(id);\n }\n const options = CaseDbDataUtil.getRefColOptionsForDimId({\n colsValidationRules: colsValidationRulesQuery.data?.valid_col_types_by_dim_type ?? {},\n dimId: id,\n dimMap: dimMapQuery.map,\n refColMap: refColMapQuery.map,\n refColOptions: refColOptionsQuery.options,\n refDimMap: refDimMapQuery.map,\n });\n refColOptionsByDimIdCacheRef.current.set(id, options);\n return options;\n }, [dimMapQuery.map, refColMapQuery.map, refColOptionsQuery.options, colsValidationRulesQuery.data?.valid_col_types_by_dim_type, refDimMapQuery.map]);\n\n const getGeneticSequenceColOptionsForCaseTypeId = useCallback((id: string): OptionBase<string>[] => {\n if (geneticSequenceColOptionsByCaseTypeIdCacheRef.current.has(id)) {\n return geneticSequenceColOptionsByCaseTypeIdCacheRef.current.get(id);\n }\n const options = CaseDbDataUtil.getGeneticSequenceColOptionsForCaseTypeId({\n caseTypeId: id,\n colMap: colMapQuery.map,\n colOptions: colOptionsQuery.options,\n refColMap: refColMapQuery.map,\n });\n geneticSequenceColOptionsByCaseTypeIdCacheRef.current.set(id, options);\n return options;\n }, [refColMapQuery.map, colMapQuery.map, colOptionsQuery.options]);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n case_type_id: string().uuid4().required().max(100),\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n dim_id: string().uuid4().required().max(100),\n genetic_sequence_col_id: string().when('ref_col_id', {\n is: (ref_col_id: string) => refColMapQuery.map.get(ref_col_id)?.col_type === CaseDbColType.GENETIC_DISTANCE,\n otherwise: () => string().nullable().notRequired(),\n then: () => string().uuid4().required(),\n }),\n label: SchemaUtil.label,\n max_datetime: SchemaUtil.isoString.optional(),\n max_length: SchemaUtil.number.integer().positive().max(10000),\n max_value: SchemaUtil.number.positive().max(10000),\n min_datetime: SchemaUtil.isoString.optional(),\n min_length: SchemaUtil.number.integer().positive().max(10000),\n min_value: SchemaUtil.number.positive().max(10000),\n ncbi_taxid: string().when('ref_col_id', {\n is: (ref_col_id: string) => refColMapQuery.map.get(ref_col_id)?.col_type === CaseDbColType.GENETIC_DISTANCE,\n otherwise: () => string().notRequired(),\n then: () => string().matches(NCBI_TAXID_REGEX).required(),\n }),\n pattern: string().regex(),\n rank: SchemaUtil.rank,\n ref_col_id: string().uuid4().required().max(100),\n tree_algorithm_codes: array().when('ref_col_id', {\n is: (ref_col_id: string) => refColMapQuery.map.get(ref_col_id)?.col_type === CaseDbColType.GENETIC_DISTANCE,\n otherwise: () => array().nullable().notRequired(),\n then: () => array().min(1).required(),\n }),\n });\n }, [refColMapQuery.map]);\n\n const onFormChange = useCallback((_item: CaseDbCol, values: FormFields, formMethods: UseFormReturn<FormFields>) => {\n if (values.case_type_id && values.dim_id) {\n const validDimOptions = getDimOptionsForCaseTypeId(values.case_type_id);\n if (!validDimOptions.find(option => option.value === values.dim_id)) {\n formMethods.setValue('dim_id', validDimOptions.length === 1 ? validDimOptions[0].value : null);\n formMethods.setValue('ref_col_id', null);\n }\n }\n\n if (values.dim_id && values.ref_col_id) {\n const validColOptions = getRefColOptionsForDimId(values.dim_id);\n if (!validColOptions.find(option => option.value === values.ref_col_id)) {\n formMethods.setValue('ref_col_id', validColOptions.length === 1 ? validColOptions[0].value : null);\n }\n }\n\n if (values.case_type_id && values.genetic_sequence_col_id) {\n const validColOptions = getGeneticSequenceColOptionsForCaseTypeId(values.case_type_id);\n if (!validColOptions.find(option => option.value === values.genetic_sequence_col_id)) {\n formMethods.setValue('genetic_sequence_col_id', validColOptions.length === 1 ? validColOptions[0].value : null);\n }\n }\n }, [getDimOptionsForCaseTypeId, getRefColOptionsForDimId, getGeneticSequenceColOptionsForCaseTypeId]);\n\n const formFieldDefinitions = useCallback((item: CaseDbCol, values: FormFields): FormFieldDefinition<FormFields>[] => {\n const normalizedDimId = values?.dim_id ?? item?.dim_id ?? null;\n const caseTypeIdFromDimId = dimMapQuery.map.get(normalizedDimId)?.case_type_id ?? null;\n const normalizedCaseTypeIdWithValues = values?.case_type_id ?? normalizedCaseTypeId ?? caseTypeIdFromDimId;\n\n const dimOptions = getDimOptionsForCaseTypeId(normalizedCaseTypeIdWithValues);\n const refColOptions = getRefColOptionsForDimId(normalizedDimId);\n const geneticSequenceColOptions = getGeneticSequenceColOptionsForCaseTypeId(normalizedCaseTypeIdWithValues);\n\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!item,\n label: t`Case type`,\n name: 'case_type_id',\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!item,\n label: t`Dimension`,\n name: 'dim_id',\n options: dimOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!item,\n label: t`Reference column`,\n name: 'ref_col_id',\n options: refColOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Rank`,\n name: 'rank',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Label`,\n name: 'label',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Min value`,\n name: 'min_value',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Max value`,\n name: 'max_value',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n dateFormat: DATE_FORMAT.DATE_TIME,\n definition: FORM_FIELD_DEFINITION_TYPE.DATE,\n label: t`Min datetime`,\n name: 'min_datetime',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n dateFormat: DATE_FORMAT.DATE_TIME,\n definition: FORM_FIELD_DEFINITION_TYPE.DATE,\n label: t`Max datetime`,\n name: 'max_datetime',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Min length`,\n name: 'min_length',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Max length`,\n name: 'max_length',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Genetic sequence column`,\n name: 'genetic_sequence_col_id',\n options: geneticSequenceColOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Tree algorithm codes`,\n multiple: true,\n name: 'tree_algorithm_codes',\n options: treeAlgorithmCodesOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`NCBI TaxID`,\n name: 'ncbi_taxid',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Pattern`,\n name: 'pattern',\n type: 'text',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const satisfies FormFieldDefinition<FormFields>[];\n }, [dimMapQuery.map, caseTypeOptionsQuery.options, getDimOptionsForCaseTypeId, getRefColOptionsForDimId, getGeneticSequenceColOptionsForCaseTypeId, normalizedCaseTypeId, t, treeAlgorithmCodesOptionsQuery.options]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbCol>[] => {\n const columns: TableColumn<CaseDbCol>[] = [];\n if (!caseTypeId) {\n columns.push(TableUtil.createOptionsColumn<CaseDbCol>({ id: 'case_type_id', name: t`Case type`, options: caseTypeOptionsQuery.options }));\n }\n if (!dimId) {\n columns.push(TableUtil.createOptionsColumn<CaseDbCol>({ id: 'dim_id', name: t`Dimension`, options: dimOptionsQuery.options }));\n }\n\n columns.push(\n TableUtil.createOptionsColumn<CaseDbCol>({ id: 'ref_col_id', name: t`Column`, options: refColOptionsQuery.options }),\n TableUtil.createTextColumn<CaseDbCol>({ id: 'code', name: t`Code` }),\n TableUtil.createNumberColumn<CaseDbCol>({ id: 'rank', name: t`Rank` }),\n );\n return columns;\n }, [dimId, dimOptionsQuery.options, caseTypeId, caseTypeOptionsQuery.options, refColOptionsQuery.options, t]);\n\n const getOptimisticUpdateIntermediateItem = useCallback((variables: FormFields, previousItem: CaseDbCol): CaseDbCol => {\n return {\n case_type_id: previousItem.case_type_id,\n dim_id: previousItem.dim_id,\n id: previousItem.id,\n ...variables,\n };\n }, []);\n\n const defaultNewItem = useMemo<Partial<FormFields>>(() => {\n return {\n case_type_id: normalizedCaseTypeId,\n dim_id: dimId ?? null,\n };\n }, [dimId, normalizedCaseTypeId]);\n\n const title = useMemo(() => {\n const parts: string[] = [];\n\n if (caseTypeId && caseTypeMapQuery.map.has(caseTypeId)) {\n parts.push(caseTypeMapQuery.map.get(caseTypeId)?.name);\n }\n if (dimId && dimMapQuery.map.has(dimId)) {\n parts.push(dimMapQuery.map.get(dimId)?.label);\n }\n parts.push(t`Columns`);\n\n return parts;\n }, [caseTypeId, dimId, caseTypeMapQuery.map, dimMapQuery.map, t]);\n\n const tableStoreStorageNamePostFix = useMemo(() => {\n const parts: string[] = [];\n if (caseTypeId) {\n parts.push('CaseType');\n }\n if (dimId) {\n parts.push('Dim');\n }\n return parts.join('_');\n }, [dimId, caseTypeId]);\n\n return (\n <CrudPage<FormFields, CaseDbCol, CaseDbCol, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new column`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ColCrudCommand}\n defaultNewItem={defaultNewItem}\n defaultSortByField={(dimId ?? caseTypeId) ? 'rank' : 'case_type_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n fetchAllSelect={fetchAllSelect}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n getOptimisticUpdateIntermediateItem={getOptimisticUpdateIntermediateItem}\n itemName={t`Column`}\n loadables={loadables}\n onFormChange={onFormChange}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.COLS}\n schema={schema}\n tableColumns={tableColumns}\n tableStoreStorageNamePostFix={tableStoreStorageNamePostFix}\n testIdAttributes={TestIdUtil.createAttributes('ColsAdminPage')}\n title={title}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ColsAdminPage/ColsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n object,\n string,\n} from 'yup';\nimport { useParams } from 'react-router-dom';\nimport type { UseFormReturn } from 'react-hook-form';\nimport type {\n CaseDbApiPermission,\n CaseDbCol,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbColType,\n CaseDbCommandName,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type {\n FormFieldDefinition,\n OptionBase,\n} from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport {\n useColMapQuery,\n useColOptionsQuery,\n} from '../../dataHooks/useColsQuery';\nimport {\n useCaseTypeMapQuery,\n useCaseTypeOptionsQuery,\n} from '../../dataHooks/useCaseTypesQuery';\nimport {\n useRefColMapQuery,\n useRefColOptionsQuery,\n} from '../../dataHooks/useRefColsQuery';\nimport { useTreeAlgorithmCodeOptionsQuery } from '../../dataHooks/useTreeAlgorithmCodesQuery';\nimport {\n useDimMapQuery,\n useDimOptionsQuery,\n} from '../../dataHooks/useDimsQuery';\nimport { useRefColsValidationRulesQuery } from '../../dataHooks/useRefColsValidationRulesQuery';\nimport { useRefDimMapQuery } from '../../dataHooks/useRefDimsQuery';\nimport { CaseDbDataUtil } from '../../utils/CaseDbDataUtil';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\ntype FormFields = OmitWithMetaData<CaseDbCol, 'case_type' | 'dim' | 'props' | 'ref_col'>;\n\nconst NCBI_TAXID_REGEX = /^NCBI:txid\\d+/;\n\nexport const ColsAdminPage = () => {\n const { t } = useTranslation();\n const { caseTypeId, dimId } = useParams();\n const refColOptionsQuery = useRefColOptionsQuery();\n const refColMapQuery = useRefColMapQuery();\n const refDimMapQuery = useRefDimMapQuery();\n const treeAlgorithmCodesOptionsQuery = useTreeAlgorithmCodeOptionsQuery();\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const colOptionsQuery = useColOptionsQuery();\n const colMapQuery = useColMapQuery();\n const caseTypeMapQuery = useCaseTypeMapQuery();\n const dimMapQuery = useDimMapQuery();\n const dimOptionsQuery = useDimOptionsQuery();\n const colsValidationRulesQuery = useRefColsValidationRulesQuery();\n const loadables = useArray([refDimMapQuery, refColMapQuery, colsValidationRulesQuery, dimOptionsQuery, dimMapQuery, caseTypeMapQuery, caseTypeOptionsQuery, refColOptionsQuery, treeAlgorithmCodesOptionsQuery, colOptionsQuery]);\n const dimOptionsByCaseTypeIdCacheRef = useRef(new Map<string, OptionBase<string>[]>());\n const refColOptionsByDimIdCacheRef = useRef(new Map<string, OptionBase<string>[]>());\n const geneticSequenceColOptionsByCaseTypeIdCacheRef = useRef(new Map<string, OptionBase<string>[]>());\n\n const normalizedCaseTypeId = useMemo(() => {\n if (dimId) {\n return dimMapQuery.map.get(dimId)?.case_type_id ?? null;\n }\n if (caseTypeId) {\n return caseTypeId;\n }\n return null;\n }, [dimId, dimMapQuery.map, caseTypeId]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbCaseApi.getInstance().colsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const fetchAllSelect = useCallback((cols: CaseDbCol[]) => {\n if (dimId) {\n return cols.filter((col) => col.dim_id === dimId);\n }\n return cols;\n }, [dimId]);\n\n const deleteOne = useCallback(async (item: CaseDbCol) => {\n return await CaseDbCaseApi.getInstance().colsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbCol) => {\n return (await CaseDbCaseApi.getInstance().colsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbCaseApi.getInstance().colsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbCol) => {\n return item.label;\n }, []);\n\n const getDimOptionsForCaseTypeId = useCallback((id: string): OptionBase<string>[] => {\n if (dimOptionsByCaseTypeIdCacheRef.current.has(id)) {\n return dimOptionsByCaseTypeIdCacheRef.current.get(id);\n }\n const options = CaseDbDataUtil.getDimOptionsForCaseTypeId({\n caseTypeId: id,\n dimMap: dimMapQuery.map,\n dimOptions: dimOptionsQuery.options,\n });\n dimOptionsByCaseTypeIdCacheRef.current.set(id, options);\n return options;\n }, [dimMapQuery.map, dimOptionsQuery.options]);\n\n const getRefColOptionsForDimId = useCallback((id: string): OptionBase<string>[] => {\n if (refColOptionsByDimIdCacheRef.current.has(id)) {\n return refColOptionsByDimIdCacheRef.current.get(id);\n }\n const options = CaseDbDataUtil.getRefColOptionsForDimId({\n colsValidationRules: colsValidationRulesQuery.data?.valid_col_types_by_dim_type ?? {},\n dimId: id,\n dimMap: dimMapQuery.map,\n refColMap: refColMapQuery.map,\n refColOptions: refColOptionsQuery.options,\n refDimMap: refDimMapQuery.map,\n });\n refColOptionsByDimIdCacheRef.current.set(id, options);\n return options;\n }, [dimMapQuery.map, refColMapQuery.map, refColOptionsQuery.options, colsValidationRulesQuery.data?.valid_col_types_by_dim_type, refDimMapQuery.map]);\n\n const getGeneticSequenceColOptionsForCaseTypeId = useCallback((id: string): OptionBase<string>[] => {\n if (geneticSequenceColOptionsByCaseTypeIdCacheRef.current.has(id)) {\n return geneticSequenceColOptionsByCaseTypeIdCacheRef.current.get(id);\n }\n const options = CaseDbDataUtil.getGeneticSequenceColOptionsForCaseTypeId({\n caseTypeId: id,\n colMap: colMapQuery.map,\n colOptions: colOptionsQuery.options,\n refColMap: refColMapQuery.map,\n });\n geneticSequenceColOptionsByCaseTypeIdCacheRef.current.set(id, options);\n return options;\n }, [refColMapQuery.map, colMapQuery.map, colOptionsQuery.options]);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n case_type_id: string().uuid4().required().max(100),\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n dim_id: string().uuid4().required().max(100),\n genetic_sequence_col_id: string().when('ref_col_id', {\n is: (ref_col_id: string) => refColMapQuery.map.get(ref_col_id)?.col_type === CaseDbColType.GENETIC_DISTANCE,\n otherwise: () => string().nullable().notRequired(),\n then: () => string().uuid4().required(),\n }),\n label: SchemaUtil.label,\n max_datetime: SchemaUtil.isoString.optional(),\n max_length: SchemaUtil.number.integer().positive().max(10000),\n max_value: SchemaUtil.number.positive().max(10000),\n min_datetime: SchemaUtil.isoString.optional(),\n min_length: SchemaUtil.number.integer().positive().max(10000),\n min_value: SchemaUtil.number.positive().max(10000),\n ncbi_taxid: string().when('ref_col_id', {\n is: (ref_col_id: string) => refColMapQuery.map.get(ref_col_id)?.col_type === CaseDbColType.GENETIC_DISTANCE,\n otherwise: () => string().notRequired(),\n then: () => string().matches(NCBI_TAXID_REGEX).required(),\n }),\n pattern: string().regex(),\n rank: SchemaUtil.rank,\n ref_col_id: string().uuid4().required().max(100),\n tree_algorithm_codes: array().when('ref_col_id', {\n is: (ref_col_id: string) => refColMapQuery.map.get(ref_col_id)?.col_type === CaseDbColType.GENETIC_DISTANCE,\n otherwise: () => array().nullable().notRequired(),\n then: () => array().min(1).required(),\n }),\n });\n }, [refColMapQuery.map]);\n\n const onFormChange = useCallback((_item: CaseDbCol, values: FormFields, formMethods: UseFormReturn<FormFields>) => {\n if (values.case_type_id && values.dim_id) {\n const validDimOptions = getDimOptionsForCaseTypeId(values.case_type_id);\n if (!validDimOptions.find(option => option.value === values.dim_id)) {\n formMethods.setValue('dim_id', validDimOptions.length === 1 ? validDimOptions[0].value : null);\n formMethods.setValue('ref_col_id', null);\n }\n }\n\n if (values.dim_id && values.ref_col_id) {\n const validColOptions = getRefColOptionsForDimId(values.dim_id);\n if (!validColOptions.find(option => option.value === values.ref_col_id)) {\n formMethods.setValue('ref_col_id', validColOptions.length === 1 ? validColOptions[0].value : null);\n }\n }\n\n if (values.case_type_id && values.genetic_sequence_col_id) {\n const validColOptions = getGeneticSequenceColOptionsForCaseTypeId(values.case_type_id);\n if (!validColOptions.find(option => option.value === values.genetic_sequence_col_id)) {\n formMethods.setValue('genetic_sequence_col_id', validColOptions.length === 1 ? validColOptions[0].value : null);\n }\n }\n }, [getDimOptionsForCaseTypeId, getRefColOptionsForDimId, getGeneticSequenceColOptionsForCaseTypeId]);\n\n const formFieldDefinitions = useCallback((item: CaseDbCol, values: FormFields): FormFieldDefinition<FormFields>[] => {\n const normalizedDimId = values?.dim_id ?? item?.dim_id ?? null;\n const caseTypeIdFromDimId = dimMapQuery.map.get(normalizedDimId)?.case_type_id ?? null;\n const normalizedCaseTypeIdWithValues = values?.case_type_id ?? normalizedCaseTypeId ?? caseTypeIdFromDimId;\n\n const dimOptions = getDimOptionsForCaseTypeId(normalizedCaseTypeIdWithValues);\n const refColOptions = getRefColOptionsForDimId(normalizedDimId);\n const geneticSequenceColOptions = getGeneticSequenceColOptionsForCaseTypeId(normalizedCaseTypeIdWithValues);\n\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!item,\n label: t`Case type`,\n name: 'case_type_id',\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!item,\n label: t`Dimension`,\n name: 'dim_id',\n options: dimOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!item,\n label: t`Reference column`,\n name: 'ref_col_id',\n options: refColOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Rank`,\n name: 'rank',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Label`,\n name: 'label',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Min value`,\n name: 'min_value',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Max value`,\n name: 'max_value',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n dateFormat: DATE_FORMAT.DATE_TIME,\n definition: FORM_FIELD_DEFINITION_TYPE.DATE,\n label: t`Min datetime`,\n name: 'min_datetime',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n dateFormat: DATE_FORMAT.DATE_TIME,\n definition: FORM_FIELD_DEFINITION_TYPE.DATE,\n label: t`Max datetime`,\n name: 'max_datetime',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Min length`,\n name: 'min_length',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.NUMBER,\n label: t`Max length`,\n name: 'max_length',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Genetic sequence column`,\n name: 'genetic_sequence_col_id',\n options: geneticSequenceColOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Tree algorithm codes`,\n multiple: true,\n name: 'tree_algorithm_codes',\n options: treeAlgorithmCodesOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`NCBI TaxID`,\n name: 'ncbi_taxid',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Pattern`,\n name: 'pattern',\n type: 'text',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const satisfies FormFieldDefinition<FormFields>[];\n }, [dimMapQuery.map, caseTypeOptionsQuery.options, getDimOptionsForCaseTypeId, getRefColOptionsForDimId, getGeneticSequenceColOptionsForCaseTypeId, normalizedCaseTypeId, t, treeAlgorithmCodesOptionsQuery.options]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbCol>[] => {\n const columns: TableColumn<CaseDbCol>[] = [];\n if (!caseTypeId) {\n columns.push(TableUtil.createOptionsColumn<CaseDbCol>({ id: 'case_type_id', name: t`Case type`, options: caseTypeOptionsQuery.options }));\n }\n if (!dimId) {\n columns.push(TableUtil.createOptionsColumn<CaseDbCol>({ id: 'dim_id', name: t`Dimension`, options: dimOptionsQuery.options }));\n }\n\n columns.push(\n TableUtil.createOptionsColumn<CaseDbCol>({ id: 'ref_col_id', name: t`Column`, options: refColOptionsQuery.options }),\n TableUtil.createTextColumn<CaseDbCol>({ id: 'code', name: t`Code` }),\n TableUtil.createNumberColumn<CaseDbCol>({ id: 'rank', name: t`Rank` }),\n );\n return columns;\n }, [dimId, dimOptionsQuery.options, caseTypeId, caseTypeOptionsQuery.options, refColOptionsQuery.options, t]);\n\n const getOptimisticUpdateIntermediateItem = useCallback((variables: FormFields, previousItem: CaseDbCol): CaseDbCol => {\n return {\n case_type_id: previousItem.case_type_id,\n dim_id: previousItem.dim_id,\n id: previousItem.id,\n ...variables,\n };\n }, []);\n\n const defaultNewItem = useMemo<Partial<FormFields>>(() => {\n return {\n case_type_id: normalizedCaseTypeId,\n dim_id: dimId ?? null,\n };\n }, [dimId, normalizedCaseTypeId]);\n\n const title = useMemo(() => {\n const parts: string[] = [];\n\n if (caseTypeId && caseTypeMapQuery.map.has(caseTypeId)) {\n parts.push(caseTypeMapQuery.map.get(caseTypeId)?.name);\n }\n if (dimId && dimMapQuery.map.has(dimId)) {\n parts.push(dimMapQuery.map.get(dimId)?.label);\n }\n parts.push(t`Columns`);\n\n return parts;\n }, [caseTypeId, dimId, caseTypeMapQuery.map, dimMapQuery.map, t]);\n\n const tableStoreStorageNamePostFix = useMemo(() => {\n const parts: string[] = [];\n if (caseTypeId) {\n parts.push('CaseType');\n }\n if (dimId) {\n parts.push('Dim');\n }\n return parts.join('_');\n }, [dimId, caseTypeId]);\n\n return (\n <CrudPage<FormFields, CaseDbCol, CaseDbCol, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new column`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ColCrudCommand}\n defaultNewItem={defaultNewItem}\n defaultSortByField={(dimId ?? caseTypeId) ? 'rank' : 'case_type_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n fetchAllSelect={fetchAllSelect}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n getOptimisticUpdateIntermediateItem={getOptimisticUpdateIntermediateItem}\n itemName={t`Column`}\n loadables={loadables}\n onFormChange={onFormChange}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.COLS}\n schema={schema}\n tableColumns={tableColumns}\n tableStoreStorageNamePostFix={tableStoreStorageNamePostFix}\n testIdAttributes={TestIdUtil.createAttributes('ColsAdminPage')}\n title={title}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
@@ -3,32 +3,32 @@ import { useConceptMapQuery as t, useConceptNameFactory as n, useConceptOptionsQ
3
3
  import { useConceptRelationTypeOptionsQuery as i } from "../../dataHooks/useConceptRelationTypeQuery/index.js";
4
4
  import { mixed as a, object as o, string as s } from "yup";
5
5
  import { CaseDbCommandName as c, CaseDbConceptRelationType as l, CaseDbOntologyApi as u } from "@gen-epix/api-casedb";
6
- import { FORM_FIELD_DEFINITION_TYPE as d } from "@gen-epix/ui-form/models/form";
6
+ import { FORM_FIELD_DEFINITION_TYPE as d } from "@gen-epix/ui-core-form/models/form";
7
7
  import { useCallback as f, useMemo as p } from "react";
8
8
  import { useTranslation as m } from "react-i18next";
9
9
  import { jsx as h } from "react/jsx-runtime";
10
10
  import { useArray as g } from "@gen-epix/ui-core/hooks/useArray";
11
- import { TableUtil as _ } from "@gen-epix/ui/utils/TableUtil";
11
+ import { TableUtil as _ } from "@gen-epix/ui-client-common/utils/TableUtil";
12
12
  import { TestIdUtil as v } from "@gen-epix/ui-core/utils/TestIdUtil";
13
- import { CrudPage as y } from "@gen-epix/ui/pages/CrudPage";
13
+ import { CrudPage as y } from "@gen-epix/ui-client-common/pages/CrudPage";
14
14
  //#region src/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.tsx
15
15
  var b = () => {
16
- let { t: b } = m(), x = t(), S = r(), C = i(), w = g([
16
+ let { t: b } = m(), x = t(), S = r(), C = i(), w = n(), T = g([
17
17
  S,
18
18
  x,
19
19
  C,
20
- n()
21
- ]), T = f(async (e) => (await u.getInstance().conceptRelationsGetAll(null, null, { signal: e }))?.data, []), E = f(async (e) => await u.getInstance().conceptRelationsDeleteOne(e.id), []), D = f(async (e, t) => (await u.getInstance().conceptRelationsPutOne(t.id, {
20
+ w
21
+ ]), E = f(async (e) => (await u.getInstance().conceptRelationsGetAll(null, null, { signal: e }))?.data, []), D = f(async (e) => await u.getInstance().conceptRelationsDeleteOne(e.id), []), O = f(async (e, t) => (await u.getInstance().conceptRelationsPutOne(t.id, {
22
22
  id: t.id,
23
23
  ...e
24
- })).data, []), O = f(async (e) => (await u.getInstance().conceptRelationsPostOne(e)).data, []), k = f((e) => {
24
+ })).data, []), k = f(async (e) => (await u.getInstance().conceptRelationsPostOne(e)).data, []), A = f((e) => {
25
25
  let t = x.map.get(e.from_concept_id), n = x.map.get(e.to_concept_id);
26
26
  return t && n ? `${t.name} -> ${n.name}` : `${e.from_concept_id} -> ${e.to_concept_id}`;
27
- }, [x.map]), A = p(() => o().shape({
27
+ }, [x.map]), j = p(() => o().shape({
28
28
  from_concept_id: s().uuid4().required(),
29
29
  relation: a().required().oneOf(Object.values(l)),
30
30
  to_concept_id: s().uuid4().required()
31
- }), []), j = p(() => [
31
+ }), []), M = p(() => [
32
32
  {
33
33
  definition: d.AUTOCOMPLETE,
34
34
  label: b`From Concept`,
@@ -56,7 +56,7 @@ var b = () => {
56
56
  C.isLoading,
57
57
  C.options,
58
58
  b
59
- ]), M = p(() => [
59
+ ]), N = p(() => [
60
60
  _.createOptionsColumn({
61
61
  id: "from_concept_id",
62
62
  name: b`From Concept`,
@@ -79,22 +79,22 @@ var b = () => {
79
79
  ]);
80
80
  return /* @__PURE__ */ h(y, {
81
81
  createItemDialogTitle: b`Create new concept relation`,
82
- createOne: O,
82
+ createOne: k,
83
83
  crudCommandType: c.ConceptRelationCrudCommand,
84
84
  defaultSortByField: "from_concept_id",
85
85
  defaultSortDirection: "asc",
86
- deleteOne: E,
87
- fetchAll: T,
88
- formFieldDefinitions: j,
89
- getName: k,
86
+ deleteOne: D,
87
+ fetchAll: E,
88
+ formFieldDefinitions: M,
89
+ getName: A,
90
90
  itemName: b`Concept relation`,
91
- loadables: w,
91
+ loadables: T,
92
92
  resourceQueryKeyBase: e.CONCEPT_RELATIONS,
93
- schema: A,
94
- tableColumns: M,
93
+ schema: j,
94
+ tableColumns: N,
95
95
  testIdAttributes: v.createAttributes("ConceptRelationsAdminPage"),
96
96
  title: b`Concept Relations`,
97
- updateOne: D
97
+ updateOne: O
98
98
  });
99
99
  };
100
100
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n mixed,\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbConceptRelation,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbConceptRelationType,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport {\n useConceptMapQuery,\n useConceptNameFactory,\n useConceptOptionsQuery,\n} from '../../dataHooks/useConceptQuery';\nimport { useConceptRelationTypeOptionsQuery } from '../../dataHooks/useConceptRelationTypeQuery';\n\n\ntype FormFields = OmitWithMetaData<CaseDbConceptRelation, 'from_concept' | 'id' | 'to_concept'>;\n\nexport const ConceptRelationsAdminPage = () => {\n const { t } = useTranslation();\n\n const conceptMapQuery = useConceptMapQuery();\n const conceptOptionsQuery = useConceptOptionsQuery();\n const conceptRelationTypeOptionsQuery = useConceptRelationTypeOptionsQuery();\n const nameFactory = useConceptNameFactory();\n\n const loadables = useArray([conceptOptionsQuery, conceptMapQuery, conceptRelationTypeOptionsQuery, nameFactory]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().conceptRelationsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbConceptRelation) => {\n return await CaseDbOntologyApi.getInstance().conceptRelationsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbConceptRelation) => {\n return (await CaseDbOntologyApi.getInstance().conceptRelationsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().conceptRelationsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbConceptRelation) => {\n const fromConcept = conceptMapQuery.map.get(item.from_concept_id);\n const toConcept = conceptMapQuery.map.get(item.to_concept_id);\n if (fromConcept && toConcept) {\n return `${fromConcept.name} -> ${toConcept.name}`;\n }\n return `${item.from_concept_id} -> ${item.to_concept_id}`;\n }, [conceptMapQuery.map]);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n from_concept_id: string().uuid4().required(),\n relation: mixed<CaseDbConceptRelationType>().required().oneOf(Object.values(CaseDbConceptRelationType)),\n to_concept_id: string().uuid4().required(),\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`From Concept`,\n loading: conceptOptionsQuery.isLoading,\n name: 'from_concept_id',\n options: conceptOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`To Concept`,\n loading: conceptOptionsQuery.isLoading,\n name: 'to_concept_id',\n options: conceptOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Relation`,\n loading: conceptRelationTypeOptionsQuery.isLoading,\n name: 'relation',\n options: conceptRelationTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [conceptOptionsQuery.isLoading, conceptOptionsQuery.options, conceptRelationTypeOptionsQuery.isLoading, conceptRelationTypeOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbConceptRelation>[] => {\n return [\n TableUtil.createOptionsColumn<CaseDbConceptRelation>({ id: 'from_concept_id', name: t`From Concept`, options: conceptOptionsQuery.options }),\n TableUtil.createOptionsColumn<CaseDbConceptRelation>({ id: 'to_concept_id', name: t`To Concept`, options: conceptOptionsQuery.options }),\n TableUtil.createOptionsColumn<CaseDbConceptRelation>({ id: 'relation', name: t`Relation`, options: conceptRelationTypeOptionsQuery.options }),\n ];\n }, [conceptOptionsQuery.options, conceptRelationTypeOptionsQuery.options, t]);\n\n\n return (\n <CrudPage<FormFields, CaseDbConceptRelation, CaseDbConceptRelation, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new concept relation`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ConceptRelationCrudCommand}\n defaultSortByField={'from_concept_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Concept relation`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.CONCEPT_RELATIONS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('ConceptRelationsAdminPage')}\n title={t`Concept Relations`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAuCA,IAAa,UAAkC;CAC7C,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAkB,EAAmB,GACrC,IAAsB,EAAuB,GAC7C,IAAkC,EAAmC,GAGrE,IAAY,EAAS;EAAC;EAAqB;EAAiB;EAF9C,EAE+E;CAAW,CAAC,GAEzG,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,uBAAuB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MAC9F,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,0BAA0B,EAAK,EAAE,GAC7E,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,uBAAuB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MAC7G,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,wBAAwB,CAAS,EAAA,CAAG,MACjF,CAAC,CAAC,GAEC,IAAU,GAAa,MAAgC;EAC3D,IAAM,IAAc,EAAgB,IAAI,IAAI,EAAK,eAAe,GAC1D,IAAY,EAAgB,IAAI,IAAI,EAAK,aAAa;EAI5D,OAHI,KAAe,IACV,GAAG,EAAY,KAAK,MAAM,EAAU,SAEtC,GAAG,EAAK,gBAAgB,MAAM,EAAK;CAC5C,GAAG,CAAC,EAAgB,GAAG,CAAC,GAElB,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,iBAAiB,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;EAC3C,UAAU,EAAiC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,OAAO,CAAyB,CAAC;EACtG,eAAe,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;CAC3C,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB;EACL;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,SAAS,EAAoB;GAC7B,MAAM;GACN,SAAS,EAAoB;EAC/B;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,SAAS,EAAoB;GAC7B,MAAM;GACN,SAAS,EAAoB;EAC/B;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,SAAS,EAAgC;GACzC,MAAM;GACN,SAAS,EAAgC;EAC3C;CACF,GACC;EAAC,EAAoB;EAAW,EAAoB;EAAS,EAAgC;EAAW,EAAgC;EAAS;CAAC,CAAC,GAEhJ,IAAe,QACZ;EACL,EAAU,oBAA2C;GAAE,IAAI;GAAmB,MAAM,CAAC;GAAgB,SAAS,EAAoB;EAAQ,CAAC;EAC3I,EAAU,oBAA2C;GAAE,IAAI;GAAiB,MAAM,CAAC;GAAc,SAAS,EAAoB;EAAQ,CAAC;EACvI,EAAU,oBAA2C;GAAE,IAAI;GAAY,MAAM,CAAC;GAAY,SAAS,EAAgC;EAAQ,CAAC;CAC9I,GACC;EAAC,EAAoB;EAAS,EAAgC;EAAS;CAAC,CAAC;CAG5E,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACA;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,2BAA2B;EACzE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n mixed,\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbConceptRelation,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbConceptRelationType,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport {\n useConceptMapQuery,\n useConceptNameFactory,\n useConceptOptionsQuery,\n} from '../../dataHooks/useConceptQuery';\nimport { useConceptRelationTypeOptionsQuery } from '../../dataHooks/useConceptRelationTypeQuery';\n\n\ntype FormFields = OmitWithMetaData<CaseDbConceptRelation, 'from_concept' | 'id' | 'to_concept'>;\n\nexport const ConceptRelationsAdminPage = () => {\n const { t } = useTranslation();\n\n const conceptMapQuery = useConceptMapQuery();\n const conceptOptionsQuery = useConceptOptionsQuery();\n const conceptRelationTypeOptionsQuery = useConceptRelationTypeOptionsQuery();\n const nameFactory = useConceptNameFactory();\n\n const loadables = useArray([conceptOptionsQuery, conceptMapQuery, conceptRelationTypeOptionsQuery, nameFactory]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().conceptRelationsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbConceptRelation) => {\n return await CaseDbOntologyApi.getInstance().conceptRelationsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbConceptRelation) => {\n return (await CaseDbOntologyApi.getInstance().conceptRelationsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().conceptRelationsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbConceptRelation) => {\n const fromConcept = conceptMapQuery.map.get(item.from_concept_id);\n const toConcept = conceptMapQuery.map.get(item.to_concept_id);\n if (fromConcept && toConcept) {\n return `${fromConcept.name} -> ${toConcept.name}`;\n }\n return `${item.from_concept_id} -> ${item.to_concept_id}`;\n }, [conceptMapQuery.map]);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n from_concept_id: string().uuid4().required(),\n relation: mixed<CaseDbConceptRelationType>().required().oneOf(Object.values(CaseDbConceptRelationType)),\n to_concept_id: string().uuid4().required(),\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`From Concept`,\n loading: conceptOptionsQuery.isLoading,\n name: 'from_concept_id',\n options: conceptOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`To Concept`,\n loading: conceptOptionsQuery.isLoading,\n name: 'to_concept_id',\n options: conceptOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Relation`,\n loading: conceptRelationTypeOptionsQuery.isLoading,\n name: 'relation',\n options: conceptRelationTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [conceptOptionsQuery.isLoading, conceptOptionsQuery.options, conceptRelationTypeOptionsQuery.isLoading, conceptRelationTypeOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbConceptRelation>[] => {\n return [\n TableUtil.createOptionsColumn<CaseDbConceptRelation>({ id: 'from_concept_id', name: t`From Concept`, options: conceptOptionsQuery.options }),\n TableUtil.createOptionsColumn<CaseDbConceptRelation>({ id: 'to_concept_id', name: t`To Concept`, options: conceptOptionsQuery.options }),\n TableUtil.createOptionsColumn<CaseDbConceptRelation>({ id: 'relation', name: t`Relation`, options: conceptRelationTypeOptionsQuery.options }),\n ];\n }, [conceptOptionsQuery.options, conceptRelationTypeOptionsQuery.options, t]);\n\n\n return (\n <CrudPage<FormFields, CaseDbConceptRelation, CaseDbConceptRelation, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new concept relation`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ConceptRelationCrudCommand}\n defaultSortByField={'from_concept_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Concept relation`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.CONCEPT_RELATIONS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('ConceptRelationsAdminPage')}\n title={t`Concept Relations`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAuCA,IAAa,UAAkC;CAC7C,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAkB,EAAmB,GACrC,IAAsB,EAAuB,GAC7C,IAAkC,EAAmC,GACrE,IAAc,EAAsB,GAEpC,IAAY,EAAS;EAAC;EAAqB;EAAiB;EAAiC;CAAW,CAAC,GAEzG,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,uBAAuB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MAC9F,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,0BAA0B,EAAK,EAAE,GAC7E,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,uBAAuB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MAC7G,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,wBAAwB,CAAS,EAAA,CAAG,MACjF,CAAC,CAAC,GAEC,IAAU,GAAa,MAAgC;EAC3D,IAAM,IAAc,EAAgB,IAAI,IAAI,EAAK,eAAe,GAC1D,IAAY,EAAgB,IAAI,IAAI,EAAK,aAAa;EAI5D,OAHI,KAAe,IACV,GAAG,EAAY,KAAK,MAAM,EAAU,SAEtC,GAAG,EAAK,gBAAgB,MAAM,EAAK;CAC5C,GAAG,CAAC,EAAgB,GAAG,CAAC,GAElB,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,iBAAiB,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;EAC3C,UAAU,EAAiC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,OAAO,CAAyB,CAAC;EACtG,eAAe,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;CAC3C,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB;EACL;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,SAAS,EAAoB;GAC7B,MAAM;GACN,SAAS,EAAoB;EAC/B;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,SAAS,EAAoB;GAC7B,MAAM;GACN,SAAS,EAAoB;EAC/B;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,SAAS,EAAgC;GACzC,MAAM;GACN,SAAS,EAAgC;EAC3C;CACF,GACC;EAAC,EAAoB;EAAW,EAAoB;EAAS,EAAgC;EAAW,EAAgC;EAAS;CAAC,CAAC,GAEhJ,IAAe,QACZ;EACL,EAAU,oBAA2C;GAAE,IAAI;GAAmB,MAAM,CAAC;GAAgB,SAAS,EAAoB;EAAQ,CAAC;EAC3I,EAAU,oBAA2C;GAAE,IAAI;GAAiB,MAAM,CAAC;GAAc,SAAS,EAAoB;EAAQ,CAAC;EACvI,EAAU,oBAA2C;GAAE,IAAI;GAAY,MAAM,CAAC;GAAY,SAAS,EAAgC;EAAQ,CAAC;CAC9I,GACC;EAAC,EAAoB;EAAS,EAAgC;EAAS;CAAC,CAAC;CAG5E,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACA;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,2BAA2B;EACzE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -3,16 +3,16 @@ import { n as t } from "../../_chunks/useUnit.js";
3
3
  import { useConceptSetTypeOptionsQuery as n } from "../../dataHooks/useConceptSetTypeQuery/index.js";
4
4
  import { mixed as r, object as i } from "yup";
5
5
  import { CaseDbCommandName as a, CaseDbConceptSetType as o, CaseDbOntologyApi as s, CaseDbPermissionType as c, CaseDbUnit as l } from "@gen-epix/api-casedb";
6
- import { FORM_FIELD_DEFINITION_TYPE as u } from "@gen-epix/ui-form/models/form";
6
+ import { FORM_FIELD_DEFINITION_TYPE as u } from "@gen-epix/ui-core-form/models/form";
7
7
  import { useCallback as d, useMemo as f } from "react";
8
8
  import { useTranslation as p } from "react-i18next";
9
9
  import { jsx as m } from "react/jsx-runtime";
10
10
  import { useArray as h } from "@gen-epix/ui-core/hooks/useArray";
11
- import { TableUtil as g } from "@gen-epix/ui/utils/TableUtil";
11
+ import { TableUtil as g } from "@gen-epix/ui-client-common/utils/TableUtil";
12
12
  import { TestIdUtil as _ } from "@gen-epix/ui-core/utils/TestIdUtil";
13
- import { SchemaUtil as v } from "@gen-epix/ui-form/utils/SchemaUtil";
14
- import { AuthorizationService as y } from "@gen-epix/ui/classes/services/AuthorizationService";
15
- import { CrudPage as b } from "@gen-epix/ui/pages/CrudPage";
13
+ import { SchemaUtil as v } from "@gen-epix/ui-core-form/utils/SchemaUtil";
14
+ import { AuthorizationService as y } from "@gen-epix/ui-client-common/classes/services/AuthorizationService";
15
+ import { CrudPage as b } from "@gen-epix/ui-client-common/pages/CrudPage";
16
16
  //#region src/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.tsx
17
17
  var x = () => {
18
18
  let x = t(), S = n(), C = h([x, S]), { t: w } = p(), T = d(async (e) => (await s.getInstance().conceptSetsGetAll(null, null, { signal: e }))?.data, []), E = d(async (e) => await s.getInstance().conceptSetsDeleteOne(e.id), []), D = d(async (e, t) => (await s.getInstance().conceptSetsPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n mixed,\n object,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbConceptSet,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbConceptSetType,\n CaseDbOntologyApi,\n CaseDbPermissionType,\n CaseDbUnit,\n} from '@gen-epix/api-casedb';\nimport type { CrudPageSubPage } from '@gen-epix/ui/pages/CrudPage';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { AuthorizationService } from '@gen-epix/ui/classes/services/AuthorizationService';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport { useUnitOptionsQuery } from '../../dataHooks/useUnitQuery/useUnit';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useConceptSetTypeOptionsQuery } from '../../dataHooks/useConceptSetTypeQuery';\n\n\ntype FormFields = OmitWithMetaData<CaseDbConceptSet>;\n\nexport const ConceptSetsAdminPage = () => {\n const unitOptionsQuery = useUnitOptionsQuery();\n const conceptSetTypeOptionsQuery = useConceptSetTypeOptionsQuery();\n\n const loadables = useArray([unitOptionsQuery, conceptSetTypeOptionsQuery]);\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().conceptSetsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbConceptSet) => {\n return await CaseDbOntologyApi.getInstance().conceptSetsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbConceptSet) => {\n return (await CaseDbOntologyApi.getInstance().conceptSetsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().conceptSetsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbConceptSet) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n type: mixed<CaseDbConceptSetType>().required().oneOf(Object.values(CaseDbConceptSetType)),\n unit: mixed<CaseDbUnit>().when('type', {\n is: (type: CaseDbConceptSetType) => type === CaseDbConceptSetType.INTERVAL,\n otherwise: () => mixed<CaseDbUnit>().nullable(),\n then: () => mixed<CaseDbUnit>().required().oneOf(Object.values(CaseDbUnit)),\n }),\n });\n }, []);\n\n const onFormChange = useCallback((_item: CaseDbConceptSet, values: FormFields, formMethods: UseFormReturn<FormFields>) => {\n if (values.type !== CaseDbConceptSetType.INTERVAL) {\n formMethods.setValue('unit', null);\n }\n }, []);\n\n const formFieldDefinitions = useCallback((item: CaseDbConceptSet, values: FormFields): FormFieldDefinition<FormFields>[] => {\n const type = values?.type ?? item?.type ?? null;\n\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Type`,\n loading: conceptSetTypeOptionsQuery.isLoading,\n name: 'type',\n options: conceptSetTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: type !== CaseDbConceptSetType.INTERVAL,\n label: t`Unit`,\n loading: unitOptionsQuery.isLoading,\n name: 'unit',\n options: unitOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [conceptSetTypeOptionsQuery.isLoading, conceptSetTypeOptionsQuery.options, t, unitOptionsQuery.isLoading, unitOptionsQuery.options]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbConceptSet>[] => {\n return [\n TableUtil.createTextColumn<CaseDbConceptSet>({ id: 'name', name: t`Name` }),\n TableUtil.createOptionsColumn<CaseDbConceptSet>({ id: 'type', name: t`Type`, options: conceptSetTypeOptionsQuery.options }),\n ];\n }, [conceptSetTypeOptionsQuery.options, t]);\n\n const subPages = useMemo<CrudPageSubPage<CaseDbConceptSet>[]>(() => {\n if (!AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([\n { command_name: CaseDbCommandName.ConceptCrudCommand, permission_type: CaseDbPermissionType.READ },\n ])) {\n return [];\n }\n\n return [\n {\n getPathName: (item: CaseDbConceptSet) => `/management/concept-sets/${item.id}/concepts`,\n label: t`Manage concepts`,\n } satisfies CrudPageSubPage<CaseDbConceptSet>,\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbConceptSet, CaseDbConceptSet, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new concept set`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ConceptSetCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Concept set`}\n loadables={loadables}\n onFormChange={onFormChange}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.CONCEPT_SETS}\n schema={schema}\n subPages={subPages}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('ConceptSetsAdminPage')}\n title={t`Concepts`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n mixed,\n object,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbConceptSet,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbConceptSetType,\n CaseDbOntologyApi,\n CaseDbPermissionType,\n CaseDbUnit,\n} from '@gen-epix/api-casedb';\nimport type { CrudPageSubPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { AuthorizationService } from '@gen-epix/ui-client-common/classes/services/AuthorizationService';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport { useUnitOptionsQuery } from '../../dataHooks/useUnitQuery/useUnit';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useConceptSetTypeOptionsQuery } from '../../dataHooks/useConceptSetTypeQuery';\n\n\ntype FormFields = OmitWithMetaData<CaseDbConceptSet>;\n\nexport const ConceptSetsAdminPage = () => {\n const unitOptionsQuery = useUnitOptionsQuery();\n const conceptSetTypeOptionsQuery = useConceptSetTypeOptionsQuery();\n\n const loadables = useArray([unitOptionsQuery, conceptSetTypeOptionsQuery]);\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().conceptSetsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbConceptSet) => {\n return await CaseDbOntologyApi.getInstance().conceptSetsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbConceptSet) => {\n return (await CaseDbOntologyApi.getInstance().conceptSetsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().conceptSetsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbConceptSet) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n type: mixed<CaseDbConceptSetType>().required().oneOf(Object.values(CaseDbConceptSetType)),\n unit: mixed<CaseDbUnit>().when('type', {\n is: (type: CaseDbConceptSetType) => type === CaseDbConceptSetType.INTERVAL,\n otherwise: () => mixed<CaseDbUnit>().nullable(),\n then: () => mixed<CaseDbUnit>().required().oneOf(Object.values(CaseDbUnit)),\n }),\n });\n }, []);\n\n const onFormChange = useCallback((_item: CaseDbConceptSet, values: FormFields, formMethods: UseFormReturn<FormFields>) => {\n if (values.type !== CaseDbConceptSetType.INTERVAL) {\n formMethods.setValue('unit', null);\n }\n }, []);\n\n const formFieldDefinitions = useCallback((item: CaseDbConceptSet, values: FormFields): FormFieldDefinition<FormFields>[] => {\n const type = values?.type ?? item?.type ?? null;\n\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Type`,\n loading: conceptSetTypeOptionsQuery.isLoading,\n name: 'type',\n options: conceptSetTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: type !== CaseDbConceptSetType.INTERVAL,\n label: t`Unit`,\n loading: unitOptionsQuery.isLoading,\n name: 'unit',\n options: unitOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [conceptSetTypeOptionsQuery.isLoading, conceptSetTypeOptionsQuery.options, t, unitOptionsQuery.isLoading, unitOptionsQuery.options]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbConceptSet>[] => {\n return [\n TableUtil.createTextColumn<CaseDbConceptSet>({ id: 'name', name: t`Name` }),\n TableUtil.createOptionsColumn<CaseDbConceptSet>({ id: 'type', name: t`Type`, options: conceptSetTypeOptionsQuery.options }),\n ];\n }, [conceptSetTypeOptionsQuery.options, t]);\n\n const subPages = useMemo<CrudPageSubPage<CaseDbConceptSet>[]>(() => {\n if (!AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([\n { command_name: CaseDbCommandName.ConceptCrudCommand, permission_type: CaseDbPermissionType.READ },\n ])) {\n return [];\n }\n\n return [\n {\n getPathName: (item: CaseDbConceptSet) => `/management/concept-sets/${item.id}/concepts`,\n label: t`Manage concepts`,\n } satisfies CrudPageSubPage<CaseDbConceptSet>,\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbConceptSet, CaseDbConceptSet, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new concept set`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ConceptSetCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Concept set`}\n loadables={loadables}\n onFormChange={onFormChange}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.CONCEPT_SETS}\n schema={schema}\n subPages={subPages}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('ConceptSetsAdminPage')}\n title={t`Concepts`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAwCA,IAAa,UAA6B;CACxC,IAAM,IAAmB,EAAoB,GACvC,IAA6B,EAA8B,GAE3D,IAAY,EAAS,CAAC,GAAkB,CAA0B,CAAC,GACnE,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACzF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,qBAAqB,EAAK,EAAE,GACxE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MACxG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,mBAAmB,CAAS,EAAA,CAAG,MAC5E,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,MAAM,EAAW;EACjB,aAAa,EAAW;EACxB,MAAM,EAAW;EACjB,MAAM,EAA4B,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,OAAO,CAAoB,CAAC;EACxF,MAAM,EAAkB,CAAC,CAAC,KAAK,QAAQ;GACrC,KAAK,MAA+B,MAAS,EAAqB;GAClE,iBAAiB,EAAkB,CAAC,CAAC,SAAS;GAC9C,YAAY,EAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,OAAO,CAAU,CAAC;EAC5E,CAAC;CACH,CAAC,GACA,CAAC,CAAC,GAEC,IAAe,GAAa,GAAyB,GAAoB,MAA2C;EACxH,AAAI,EAAO,SAAS,EAAqB,YACvC,EAAY,SAAS,QAAQ,IAAI;CAErC,GAAG,CAAC,CAAC,GAEC,IAAuB,GAAa,GAAwB,MAA0D;EAC1H,IAAM,IAAO,GAAQ,QAAQ,GAAM,QAAQ;EAE3C,OAAO;GACL;IACE,YAAY,EAA2B;IACvC,OAAO,CAAC;IACR,MAAM;GACR;GACA;IACE,YAAY,EAA2B;IACvC,OAAO,CAAC;IACR,MAAM;GACR;GACA;IACE,YAAY,EAA2B;IACvC,OAAO,CAAC;IACR,MAAM;GACR;GACA;IACE,YAAY,EAA2B;IACvC,OAAO,CAAC;IACR,SAAS,EAA2B;IACpC,MAAM;IACN,SAAS,EAA2B;GACtC;GACA;IACE,YAAY,EAA2B;IACvC,UAAU,MAAS,EAAqB;IACxC,OAAO,CAAC;IACR,SAAS,EAAiB;IAC1B,MAAM;IACN,SAAS,EAAiB;GAC5B;EACF;CACF,GAAG;EAAC,EAA2B;EAAW,EAA2B;EAAS;EAAG,EAAiB;EAAW,EAAiB;CAAO,CAAC,GAEhI,IAAe,QACZ,CACL,EAAU,iBAAmC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,GAC1E,EAAU,oBAAsC;EAAE,IAAI;EAAQ,MAAM,CAAC;EAAQ,SAAS,EAA2B;CAAQ,CAAC,CAC5H,GACC,CAAC,EAA2B,SAAS,CAAC,CAAC,GAEpC,IAAW,QACV,EAAqB,YAAY,CAAC,CAAC,uBAA4C,CAClF;EAAE,cAAc,EAAkB;EAAoB,iBAAiB,EAAqB;CAAK,CACnG,CAAC,IAIM,CACL;EACE,cAAc,MAA2B,4BAA4B,EAAK,GAAG;EAC7E,OAAO,CAAC;CACV,CACF,IARS,CAAC,GAST,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACA;EACG;EACd,sBAAsB,EAAiB;EAC/B;EACE;EACI;EACd,kBAAkB,EAAW,iBAAiB,sBAAsB;EACpE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -1,15 +1,15 @@
1
1
  import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
2
- import { t } from "../../_chunks/chunk-KS7C4IRE.js";
2
+ import { t } from "../../_chunks/chunk-BV7QT456.js";
3
3
  import { object as n } from "yup";
4
4
  import { CaseDbCommandName as r, CaseDbOntologyApi as i } from "@gen-epix/api-casedb";
5
- import { FORM_FIELD_DEFINITION_TYPE as a } from "@gen-epix/ui-form/models/form";
5
+ import { FORM_FIELD_DEFINITION_TYPE as a } from "@gen-epix/ui-core-form/models/form";
6
6
  import { useCallback as o, useMemo as s } from "react";
7
7
  import { useTranslation as c } from "react-i18next";
8
8
  import { jsx as l } from "react/jsx-runtime";
9
- import { TableUtil as u } from "@gen-epix/ui/utils/TableUtil";
9
+ import { TableUtil as u } from "@gen-epix/ui-client-common/utils/TableUtil";
10
10
  import { TestIdUtil as d } from "@gen-epix/ui-core/utils/TestIdUtil";
11
- import { SchemaUtil as f } from "@gen-epix/ui-form/utils/SchemaUtil";
12
- import { CrudPage as p } from "@gen-epix/ui/pages/CrudPage";
11
+ import { SchemaUtil as f } from "@gen-epix/ui-core-form/utils/SchemaUtil";
12
+ import { CrudPage as p } from "@gen-epix/ui-client-common/pages/CrudPage";
13
13
  //#region src/pages/ConceptsAdminPage/ConceptsAdminPage.tsx
14
14
  var m = () => {
15
15
  let { conceptSetId: m } = t(), { t: h } = c(), g = o(async (e) => (await i.getInstance().conceptsGetAll(null, null, { signal: e }))?.data, []), _ = o((e) => e.filter((e) => e.concept_set_id === m), [m]), v = o(async (e) => await i.getInstance().conceptsDeleteOne(e.id), []), y = o(async (e, t) => (await i.getInstance().conceptsPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ConceptsAdminPage/ConceptsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { object } from 'yup';\nimport { useParams } from 'react-router-dom';\nimport type {\n CaseDbApiPermission,\n CaseDbConcept,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbConcept, 'concept_set_id' | 'concept_set' | 'props'>;\n\nexport const ConceptsAdminPage = () => {\n const { conceptSetId } = useParams();\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().conceptsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const fetchAllSelect = useCallback((concepts: CaseDbConcept[]) => {\n return concepts.filter((concept) => concept.concept_set_id === conceptSetId);\n }, [conceptSetId]);\n\n const deleteOne = useCallback(async (item: CaseDbConcept) => {\n return await CaseDbOntologyApi.getInstance().conceptsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbConcept) => {\n const updatedItem = (await CaseDbOntologyApi.getInstance().conceptsPutOne(item.id, {\n ...variables,\n concept_set_id: conceptSetId,\n id: item.id,\n })).data;\n return updatedItem;\n }, [conceptSetId]);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().conceptsPostOne({\n ...variables,\n concept_set_id: conceptSetId,\n })).data;\n }, [conceptSetId]);\n\n const getName = useCallback((item: FormFields) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n rank: SchemaUtil.rank,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Rank`,\n name: 'rank',\n type: 'number',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Description`,\n multiline: true,\n name: 'description',\n rows: 4,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbConcept>[] => {\n return [\n TableUtil.createNumberColumn<CaseDbConcept>({ flex: 0.25, id: 'rank', name: t`Rank` }),\n TableUtil.createTextColumn<CaseDbConcept>({ id: 'name', name: t`Name` }),\n TableUtil.createTextColumn<CaseDbConcept>({ id: 'code', name: t`Code` }),\n ];\n }, [t]);\n\n const getOptimisticUpdateIntermediateItem = useCallback((variables: FormFields, previousItem: CaseDbConcept): CaseDbConcept => {\n return {\n concept_set_id: previousItem.concept_set_id,\n id: previousItem.id,\n ...variables,\n };\n }, []);\n\n return (\n <CrudPage<FormFields, CaseDbConcept, CaseDbConcept, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new concept`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ConceptCrudCommand}\n defaultSortByField={'rank'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n fetchAllSelect={fetchAllSelect}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n getOptimisticUpdateIntermediateItem={getOptimisticUpdateIntermediateItem}\n itemName={t`Concept`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.CONCEPTS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('ConceptsAdminPage')}\n title={t`Concepts`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;AA6BA,IAAa,UAA0B;CACrC,IAAM,EAAE,oBAAiB,EAAU,GAC7B,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACtF,CAAC,CAAC,GAEC,IAAiB,GAAa,MAC3B,EAAS,QAAQ,MAAY,EAAQ,mBAAmB,CAAY,GAC1E,CAAC,CAAY,CAAC,GAEX,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,EAAK,EAAE,GACrE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OACrC,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,EAAK,IAAI;EACjF,GAAG;EACH,gBAAgB;EAChB,IAAI,EAAK;CACX,CAAC,EAAA,CAAG,MAEH,CAAC,CAAY,CAAC,GAEX,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,gBAAgB;EAC5D,GAAG;EACH,gBAAgB;CAClB,CAAC,EAAA,CAAG,MACH,CAAC,CAAY,CAAC,GAEX,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,MAAM,EAAW;EACjB,aAAa,EAAW;EACxB,MAAM,EAAW;EACjB,MAAM,EAAW;CACnB,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB;EACL;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,MAAM;GACN,MAAM;EACR;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,MAAM;EACR;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,MAAM;EACR;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,WAAW;GACX,MAAM;GACN,MAAM;EACR;CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ;EACL,EAAU,mBAAkC;GAAE,MAAM;GAAM,IAAI;GAAQ,MAAM,CAAC;EAAO,CAAC;EACrF,EAAU,iBAAgC;GAAE,IAAI;GAAQ,MAAM,CAAC;EAAO,CAAC;EACvE,EAAU,iBAAgC;GAAE,IAAI;GAAQ,MAAM,CAAC;EAAO,CAAC;CACzE,GACC,CAAC,CAAC,CAAC,GAEA,IAAsC,GAAa,GAAuB,OACvE;EACL,gBAAgB,EAAa;EAC7B,IAAI,EAAa;EACjB,GAAG;CACL,IACC,CAAC,CAAC;CAEL,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACM;EACM;EACb;EAC4B;EACrC,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,mBAAmB;EACjE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/ConceptsAdminPage/ConceptsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { object } from 'yup';\nimport { useParams } from 'react-router-dom';\nimport type {\n CaseDbApiPermission,\n CaseDbConcept,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbConcept, 'concept_set_id' | 'concept_set' | 'props'>;\n\nexport const ConceptsAdminPage = () => {\n const { conceptSetId } = useParams();\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().conceptsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const fetchAllSelect = useCallback((concepts: CaseDbConcept[]) => {\n return concepts.filter((concept) => concept.concept_set_id === conceptSetId);\n }, [conceptSetId]);\n\n const deleteOne = useCallback(async (item: CaseDbConcept) => {\n return await CaseDbOntologyApi.getInstance().conceptsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbConcept) => {\n const updatedItem = (await CaseDbOntologyApi.getInstance().conceptsPutOne(item.id, {\n ...variables,\n concept_set_id: conceptSetId,\n id: item.id,\n })).data;\n return updatedItem;\n }, [conceptSetId]);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().conceptsPostOne({\n ...variables,\n concept_set_id: conceptSetId,\n })).data;\n }, [conceptSetId]);\n\n const getName = useCallback((item: FormFields) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n rank: SchemaUtil.rank,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Rank`,\n name: 'rank',\n type: 'number',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Description`,\n multiline: true,\n name: 'description',\n rows: 4,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbConcept>[] => {\n return [\n TableUtil.createNumberColumn<CaseDbConcept>({ flex: 0.25, id: 'rank', name: t`Rank` }),\n TableUtil.createTextColumn<CaseDbConcept>({ id: 'name', name: t`Name` }),\n TableUtil.createTextColumn<CaseDbConcept>({ id: 'code', name: t`Code` }),\n ];\n }, [t]);\n\n const getOptimisticUpdateIntermediateItem = useCallback((variables: FormFields, previousItem: CaseDbConcept): CaseDbConcept => {\n return {\n concept_set_id: previousItem.concept_set_id,\n id: previousItem.id,\n ...variables,\n };\n }, []);\n\n return (\n <CrudPage<FormFields, CaseDbConcept, CaseDbConcept, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new concept`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.ConceptCrudCommand}\n defaultSortByField={'rank'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n fetchAllSelect={fetchAllSelect}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n getOptimisticUpdateIntermediateItem={getOptimisticUpdateIntermediateItem}\n itemName={t`Concept`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.CONCEPTS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('ConceptsAdminPage')}\n title={t`Concepts`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;AA6BA,IAAa,UAA0B;CACrC,IAAM,EAAE,oBAAiB,EAAU,GAC7B,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACtF,CAAC,CAAC,GAEC,IAAiB,GAAa,MAC3B,EAAS,QAAQ,MAAY,EAAQ,mBAAmB,CAAY,GAC1E,CAAC,CAAY,CAAC,GAEX,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,EAAK,EAAE,GACrE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OACrC,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,EAAK,IAAI;EACjF,GAAG;EACH,gBAAgB;EAChB,IAAI,EAAK;CACX,CAAC,EAAA,CAAG,MAEH,CAAC,CAAY,CAAC,GAEX,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,gBAAgB;EAC5D,GAAG;EACH,gBAAgB;CAClB,CAAC,EAAA,CAAG,MACH,CAAC,CAAY,CAAC,GAEX,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,MAAM,EAAW;EACjB,aAAa,EAAW;EACxB,MAAM,EAAW;EACjB,MAAM,EAAW;CACnB,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB;EACL;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,MAAM;GACN,MAAM;EACR;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,MAAM;EACR;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,MAAM;EACR;EACA;GACE,YAAY,EAA2B;GACvC,OAAO,CAAC;GACR,WAAW;GACX,MAAM;GACN,MAAM;EACR;CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ;EACL,EAAU,mBAAkC;GAAE,MAAM;GAAM,IAAI;GAAQ,MAAM,CAAC;EAAO,CAAC;EACrF,EAAU,iBAAgC;GAAE,IAAI;GAAQ,MAAM,CAAC;EAAO,CAAC;EACvE,EAAU,iBAAgC;GAAE,IAAI;GAAQ,MAAM,CAAC;EAAO,CAAC;CACzE,GACC,CAAC,CAAC,CAAC,GAEA,IAAsC,GAAa,GAAuB,OACvE;EACL,gBAAgB,EAAa;EAC7B,IAAI,EAAa;EACjB,GAAG;CACL,IACC,CAAC,CAAC;CAEL,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACM;EACM;EACb;EAC4B;EACrC,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,mBAAmB;EACjE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -3,15 +3,15 @@ import { useDataCollectionOptionsQuery as t } from "../../dataHooks/useDataColle
3
3
  import { useDataCollectionSetMembersQuery as n } from "../../dataHooks/useDataCollectionSetMembersQuery/index.js";
4
4
  import { array as r, object as i, string as a } from "yup";
5
5
  import { CaseDbCommandName as o, CaseDbOrganizationApi as s } from "@gen-epix/api-casedb";
6
- import { FORM_FIELD_DEFINITION_TYPE as c } from "@gen-epix/ui-form/models/form";
6
+ import { FORM_FIELD_DEFINITION_TYPE as c } from "@gen-epix/ui-core-form/models/form";
7
7
  import { useCallback as l, useMemo as u } from "react";
8
8
  import { useTranslation as d } from "react-i18next";
9
9
  import { jsx as f } from "react/jsx-runtime";
10
10
  import { useArray as p } from "@gen-epix/ui-core/hooks/useArray";
11
- import { TableUtil as m } from "@gen-epix/ui/utils/TableUtil";
11
+ import { TableUtil as m } from "@gen-epix/ui-client-common/utils/TableUtil";
12
12
  import { TestIdUtil as h } from "@gen-epix/ui-core/utils/TestIdUtil";
13
- import { SchemaUtil as g } from "@gen-epix/ui-form/utils/SchemaUtil";
14
- import { CrudPage as _ } from "@gen-epix/ui/pages/CrudPage";
13
+ import { SchemaUtil as g } from "@gen-epix/ui-core-form/utils/SchemaUtil";
14
+ import { CrudPage as _ } from "@gen-epix/ui-client-common/pages/CrudPage";
15
15
  //#region src/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.tsx
16
16
  var v = () => {
17
17
  let { t: v } = d(), y = n(), b = t(), x = p([y, b]), S = l(async (e) => (await s.getInstance().dataCollectionSetsGetAll(null, null, { signal: e }))?.data, []), C = l(async (e) => await s.getInstance().dataCollectionSetsDeleteOne(e.id), []), w = l(async (e, t) => (await s.getInstance().dataCollectionSetsPutDataCollections(t.id, { data_collection_set_members: e.dataCollectionIds.map((e) => ({
@@ -65,15 +65,15 @@ var v = () => {
65
65
  type: "number",
66
66
  valueGetter: (e) => e.row.dataCollectionIds.length,
67
67
  widthFlex: .5
68
- }], [b.options.length, v]);
68
+ }], [b.options.length, v]), A = l((e) => !e || !y.data ? [] : e.map((e) => {
69
+ let t = y.data.filter((t) => t.data_collection_set_id === e.id).map((e) => e.data_collection_id);
70
+ return {
71
+ ...e,
72
+ dataCollectionIds: t
73
+ };
74
+ }), [y.data]);
69
75
  return /* @__PURE__ */ f(_, {
70
- convertToTableData: l((e) => !e || !y.data ? [] : e.map((e) => {
71
- let t = y.data.filter((t) => t.data_collection_set_id === e.id).map((e) => e.data_collection_id);
72
- return {
73
- ...e,
74
- dataCollectionIds: t
75
- };
76
- }), [y.data]),
76
+ convertToTableData: A,
77
77
  createItemDialogTitle: v`Create new data collection set`,
78
78
  createOne: T,
79
79
  crudCommandType: o.DataCollectionSetCrudCommand,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbDataCollectionSet,\n CaseDbDataCollectionSetMember,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOrganizationApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useDataCollectionSetMembersQuery } from '../../dataHooks/useDataCollectionSetMembersQuery';\nimport { useDataCollectionOptionsQuery } from '../../dataHooks/useDataCollectionsQuery';\n\n\ntype FormFields = OmitWithMetaData<TableData>;\n\ntype TableData = { dataCollectionIds: string[] } & CaseDbDataCollectionSet;\n\nexport const DataCollectionSetsAdminPage = () => {\n const { t } = useTranslation();\n\n const dataCollectionSetMembersQuery = useDataCollectionSetMembersQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n\n const loadables = useArray([dataCollectionSetMembersQuery, dataCollectionOptionsQuery]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionSetsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbDataCollectionSet) => {\n return await CaseDbOrganizationApi.getInstance().dataCollectionSetsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDataCollectionSet) => {\n await CaseDbOrganizationApi.getInstance().dataCollectionSetsPutDataCollections(item.id, {\n data_collection_set_members: variables.dataCollectionIds.map<CaseDbDataCollectionSetMember>(data_collection_id => ({\n data_collection_id,\n data_collection_set_id: item.id,\n })),\n });\n return (await CaseDbOrganizationApi.getInstance().dataCollectionSetsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n const resultItem = (await CaseDbOrganizationApi.getInstance().dataCollectionSetsPostOne(variables)).data;\n await CaseDbOrganizationApi.getInstance().dataCollectionSetsPutDataCollections(resultItem.id, {\n data_collection_set_members: variables.dataCollectionIds.map<CaseDbDataCollectionSetMember>(data_collection_id => ({\n data_collection_id,\n data_collection_set_id: resultItem.id,\n })),\n });\n return resultItem;\n }, []);\n\n const getName = useCallback((item: CaseDbDataCollectionSet) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n dataCollectionIds: array().of(string().uuid4()).min(1).required(),\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TRANSFER_LIST,\n label: t`Columns`,\n loading: dataCollectionOptionsQuery.isLoading,\n name: 'dataCollectionIds',\n options: dataCollectionOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [dataCollectionOptionsQuery.isLoading, dataCollectionOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<TableData>[] => {\n return [\n TableUtil.createTextColumn<TableData>({ advancedSort: true, id: 'name', name: t`Name` }),\n {\n displayValueGetter: (item) => `${item.row.dataCollectionIds.length} / ${dataCollectionOptionsQuery.options.length}`,\n headerName: t`Data collections`,\n id: 'numDataCollections',\n isInitiallyVisible: true,\n textAlign: 'right',\n type: 'number',\n valueGetter: (item) => item.row.dataCollectionIds.length,\n widthFlex: 0.5,\n },\n ];\n }, [dataCollectionOptionsQuery.options.length, t]);\n\n const convertToTableData = useCallback((items: CaseDbDataCollectionSet[]) => {\n if (!items || !dataCollectionSetMembersQuery.data) {\n return [];\n }\n return items.map<TableData>((item) => {\n const dataCollectionIds = dataCollectionSetMembersQuery.data.filter(member => member.data_collection_set_id === item.id).map(member => member.data_collection_id);\n return {\n ...item,\n dataCollectionIds,\n } satisfies TableData;\n });\n }, [dataCollectionSetMembersQuery.data]);\n\n return (\n <CrudPage<FormFields, CaseDbDataCollectionSet, TableData, CASEDB_QUERY_KEY, CaseDbApiPermission>\n convertToTableData={convertToTableData}\n createItemDialogTitle={t`Create new data collection set`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DataCollectionSetCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Data collection set`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DATA_COLLECTION_SETS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('DataCollectionSetsAdminPage')}\n title={t`Data collection sets`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbDataCollectionSet,\n CaseDbDataCollectionSetMember,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOrganizationApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useDataCollectionSetMembersQuery } from '../../dataHooks/useDataCollectionSetMembersQuery';\nimport { useDataCollectionOptionsQuery } from '../../dataHooks/useDataCollectionsQuery';\n\n\ntype FormFields = OmitWithMetaData<TableData>;\n\ntype TableData = { dataCollectionIds: string[] } & CaseDbDataCollectionSet;\n\nexport const DataCollectionSetsAdminPage = () => {\n const { t } = useTranslation();\n\n const dataCollectionSetMembersQuery = useDataCollectionSetMembersQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n\n const loadables = useArray([dataCollectionSetMembersQuery, dataCollectionOptionsQuery]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionSetsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbDataCollectionSet) => {\n return await CaseDbOrganizationApi.getInstance().dataCollectionSetsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDataCollectionSet) => {\n await CaseDbOrganizationApi.getInstance().dataCollectionSetsPutDataCollections(item.id, {\n data_collection_set_members: variables.dataCollectionIds.map<CaseDbDataCollectionSetMember>(data_collection_id => ({\n data_collection_id,\n data_collection_set_id: item.id,\n })),\n });\n return (await CaseDbOrganizationApi.getInstance().dataCollectionSetsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n const resultItem = (await CaseDbOrganizationApi.getInstance().dataCollectionSetsPostOne(variables)).data;\n await CaseDbOrganizationApi.getInstance().dataCollectionSetsPutDataCollections(resultItem.id, {\n data_collection_set_members: variables.dataCollectionIds.map<CaseDbDataCollectionSetMember>(data_collection_id => ({\n data_collection_id,\n data_collection_set_id: resultItem.id,\n })),\n });\n return resultItem;\n }, []);\n\n const getName = useCallback((item: CaseDbDataCollectionSet) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n dataCollectionIds: array().of(string().uuid4()).min(1).required(),\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TRANSFER_LIST,\n label: t`Columns`,\n loading: dataCollectionOptionsQuery.isLoading,\n name: 'dataCollectionIds',\n options: dataCollectionOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [dataCollectionOptionsQuery.isLoading, dataCollectionOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<TableData>[] => {\n return [\n TableUtil.createTextColumn<TableData>({ advancedSort: true, id: 'name', name: t`Name` }),\n {\n displayValueGetter: (item) => `${item.row.dataCollectionIds.length} / ${dataCollectionOptionsQuery.options.length}`,\n headerName: t`Data collections`,\n id: 'numDataCollections',\n isInitiallyVisible: true,\n textAlign: 'right',\n type: 'number',\n valueGetter: (item) => item.row.dataCollectionIds.length,\n widthFlex: 0.5,\n },\n ];\n }, [dataCollectionOptionsQuery.options.length, t]);\n\n const convertToTableData = useCallback((items: CaseDbDataCollectionSet[]) => {\n if (!items || !dataCollectionSetMembersQuery.data) {\n return [];\n }\n return items.map<TableData>((item) => {\n const dataCollectionIds = dataCollectionSetMembersQuery.data.filter(member => member.data_collection_set_id === item.id).map(member => member.data_collection_id);\n return {\n ...item,\n dataCollectionIds,\n } satisfies TableData;\n });\n }, [dataCollectionSetMembersQuery.data]);\n\n return (\n <CrudPage<FormFields, CaseDbDataCollectionSet, TableData, CASEDB_QUERY_KEY, CaseDbApiPermission>\n convertToTableData={convertToTableData}\n createItemDialogTitle={t`Create new data collection set`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DataCollectionSetCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Data collection set`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DATA_COLLECTION_SETS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('DataCollectionSetsAdminPage')}\n title={t`Data collection sets`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
@@ -8,12 +8,12 @@ import { Autocomplete as p, Box as m, TextField as h, ToggleButton as g, ToggleB
8
8
  import { useCallback as b, useMemo as x, useState as S } from "react";
9
9
  import { useTranslation as C } from "react-i18next";
10
10
  import { jsx as w, jsxs as T } from "react/jsx-runtime";
11
- import { ResponseHandler as E } from "@gen-epix/ui/components/ui/ResponseHandler";
11
+ import { ResponseHandler as E } from "@gen-epix/ui-client-common/components/ui/ResponseHandler";
12
12
  import { useArray as D } from "@gen-epix/ui-core/hooks/useArray";
13
13
  import { TestIdUtil as O } from "@gen-epix/ui-core/utils/TestIdUtil";
14
- import { LoadableUtil as k } from "@gen-epix/ui/utils/LoadableUtil";
15
- import { PageContainer as A } from "@gen-epix/ui/components/ui/PageContainer";
16
- import { useOrganizationMapQuery as j } from "@gen-epix/ui/dataHooks/useOrganizationsQuery";
14
+ import { LoadableUtil as k } from "@gen-epix/ui-client-common/utils/LoadableUtil";
15
+ import { PageContainer as A } from "@gen-epix/ui-client-common/components/ui/PageContainer";
16
+ import { useOrganizationMapQuery as j } from "@gen-epix/ui-client-common/dataHooks/useOrganizationsQuery";
17
17
  //#region src/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.tsx
18
18
  var M = {
19
19
  dispose: o,