codeforlife 2.8.3 → 2.9.1

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 (454) hide show
  1. package/dist/Countdown-DFI1RljW.js +28 -0
  2. package/dist/Countdown-DFI1RljW.js.map +1 -0
  3. package/dist/Countdown-zY3nMzmi.cjs +2 -0
  4. package/dist/Countdown-zY3nMzmi.cjs.map +1 -0
  5. package/dist/Image-D5jC9UoX.js +21 -0
  6. package/dist/Image-D5jC9UoX.js.map +1 -0
  7. package/dist/Image-mgT45r_B.cjs +2 -0
  8. package/dist/Image-mgT45r_B.cjs.map +1 -0
  9. package/dist/LinkButton-BYFkvL_O.cjs +2 -0
  10. package/dist/LinkButton-BYFkvL_O.cjs.map +1 -0
  11. package/dist/LinkButton-oK0RThqn.js +12 -0
  12. package/dist/LinkButton-oK0RThqn.js.map +1 -0
  13. package/dist/Navigate-Dq47aqC8.js +25 -0
  14. package/dist/Navigate-Dq47aqC8.js.map +1 -0
  15. package/dist/Navigate-dQocLhzN.cjs +2 -0
  16. package/dist/Navigate-dQocLhzN.cjs.map +1 -0
  17. package/dist/api/createApi.d.ts +7 -0
  18. package/dist/api/endpoints/authFactor.d.ts +11 -0
  19. package/dist/api/endpoints/index.cjs.js +2 -0
  20. package/dist/api/endpoints/index.cjs.js.map +1 -0
  21. package/dist/api/endpoints/index.d.ts +9 -0
  22. package/dist/api/endpoints/index.es.js +78 -0
  23. package/dist/api/endpoints/index.es.js.map +1 -0
  24. package/dist/api/endpoints/klass.d.ts +26 -0
  25. package/dist/api/endpoints/school.d.ts +11 -0
  26. package/dist/api/endpoints/session.d.ts +9 -0
  27. package/dist/api/endpoints/user.d.ts +19 -0
  28. package/dist/api/index.cjs.js +4 -0
  29. package/dist/api/index.cjs.js.map +1 -0
  30. package/dist/api/index.d.ts +5 -0
  31. package/dist/api/index.es.js +541 -0
  32. package/dist/api/index.es.js.map +1 -0
  33. package/dist/api/models.d.ts +92 -0
  34. package/dist/api/schemas.d.ts +20 -0
  35. package/dist/api/tagTypes.d.ts +3 -0
  36. package/dist/api/urls.d.ts +31 -0
  37. package/dist/api-Cbyt3rw0.js +92 -0
  38. package/dist/api-Cbyt3rw0.js.map +1 -0
  39. package/dist/api-CnMfjRk3.cjs +2 -0
  40. package/dist/api-CnMfjRk3.cjs.map +1 -0
  41. package/dist/api-Cs4Y-WeI.js +20 -0
  42. package/dist/api-Cs4Y-WeI.js.map +1 -0
  43. package/dist/api-DIgp_6Vr.cjs +2 -0
  44. package/dist/api-DIgp_6Vr.cjs.map +1 -0
  45. package/dist/auth-BPfUPjmM.js +237 -0
  46. package/dist/auth-BPfUPjmM.js.map +1 -0
  47. package/dist/auth-Vf1MgMci.cjs +2 -0
  48. package/dist/auth-Vf1MgMci.cjs.map +1 -0
  49. package/dist/components/App.d.ts +18 -0
  50. package/dist/components/ClickableTooltip.d.ts +6 -0
  51. package/dist/components/CopyIconButton.d.ts +7 -0
  52. package/dist/components/CopyIconButton.test.d.ts +1 -0
  53. package/dist/components/Countdown.d.ts +9 -0
  54. package/dist/components/DownloadFileButton.d.ts +13 -0
  55. package/dist/components/ElevatedAppBar.d.ts +8 -0
  56. package/dist/components/Image.d.ts +10 -0
  57. package/dist/components/InputFileButton.d.ts +7 -0
  58. package/dist/components/ItemizedList.d.ts +11 -0
  59. package/dist/components/OrderedGrid.d.ts +21 -0
  60. package/dist/components/ScrollIntoViewLink.d.ts +8 -0
  61. package/dist/components/SyncError.d.ts +5 -0
  62. package/dist/components/TablePagination.d.ts +20 -0
  63. package/dist/components/YouTubeVideo.d.ts +7 -0
  64. package/dist/components/form/ApiAutocompleteField.d.ts +14 -0
  65. package/dist/components/form/AutocompleteField.d.ts +11 -0
  66. package/dist/components/form/CheckboxField.d.ts +11 -0
  67. package/dist/components/form/CountryField.d.ts +10 -0
  68. package/dist/components/form/DatePickerField.d.ts +10 -0
  69. package/dist/components/form/EmailField.d.ts +5 -0
  70. package/dist/components/form/FirstNameField.d.ts +5 -0
  71. package/dist/components/form/Form.d.ts +36 -0
  72. package/dist/components/form/OtpField.d.ts +5 -0
  73. package/dist/components/form/PasswordField.d.ts +9 -0
  74. package/dist/components/form/RepeatField.d.ts +9 -0
  75. package/dist/components/form/SubmitButton.d.ts +6 -0
  76. package/dist/components/form/TextField.d.ts +14 -0
  77. package/dist/components/form/UkCountyField.d.ts +10 -0
  78. package/dist/components/form/index.cjs.js +2 -0
  79. package/dist/components/form/index.cjs.js.map +1 -0
  80. package/dist/components/form/index.d.ts +14 -0
  81. package/dist/components/form/index.es.js +18 -0
  82. package/dist/components/form/index.es.js.map +1 -0
  83. package/dist/components/index.cjs.js +11 -0
  84. package/dist/components/index.cjs.js.map +1 -0
  85. package/dist/components/index.d.ts +18 -0
  86. package/dist/components/index.es.js +383 -0
  87. package/dist/components/index.es.js.map +1 -0
  88. package/dist/components/page/Banner.d.ts +13 -0
  89. package/dist/components/page/Notification.d.ts +10 -0
  90. package/dist/components/page/Page.d.ts +19 -0
  91. package/dist/components/page/Section.d.ts +7 -0
  92. package/dist/components/page/TabBar.d.ts +13 -0
  93. package/dist/components/page/index.cjs.js +2 -0
  94. package/dist/components/page/index.cjs.js.map +1 -0
  95. package/dist/components/page/index.d.ts +5 -0
  96. package/dist/components/page/index.es.js +9 -0
  97. package/dist/components/page/index.es.js.map +1 -0
  98. package/dist/components/router/Link.d.ts +9 -0
  99. package/dist/components/router/LinkButton.d.ts +9 -0
  100. package/dist/components/router/LinkIconButton.d.ts +9 -0
  101. package/dist/components/router/LinkListItem.d.ts +9 -0
  102. package/dist/components/router/LinkTab.d.ts +9 -0
  103. package/dist/components/router/Navigate.d.ts +15 -0
  104. package/dist/components/router/index.cjs.js +2 -0
  105. package/dist/components/router/index.cjs.js.map +1 -0
  106. package/dist/components/router/index.d.ts +6 -0
  107. package/dist/components/router/index.es.js +11 -0
  108. package/dist/components/router/index.es.js.map +1 -0
  109. package/dist/components/table/CellStack.d.ts +7 -0
  110. package/dist/components/table/Table.d.ts +12 -0
  111. package/dist/components/table/index.cjs.js +2 -0
  112. package/dist/components/table/index.cjs.js.map +1 -0
  113. package/dist/components/table/index.d.ts +3 -0
  114. package/dist/components/table/index.es.js +9 -0
  115. package/dist/components/table/index.es.js.map +1 -0
  116. package/dist/en-gb-B_rK7Jx1.js +20 -0
  117. package/dist/en-gb-B_rK7Jx1.js.map +1 -0
  118. package/dist/en-gb-CpyEkKq3.cjs +2 -0
  119. package/dist/en-gb-CpyEkKq3.cjs.map +1 -0
  120. package/dist/features/InactiveDialog.d.ts +7 -0
  121. package/dist/features/ScreenTimeDialog.d.ts +7 -0
  122. package/dist/features/index.cjs.js +2 -0
  123. package/dist/features/index.cjs.js.map +1 -0
  124. package/dist/features/index.d.ts +4 -0
  125. package/dist/features/index.es.js +47 -0
  126. package/dist/features/index.es.js.map +1 -0
  127. package/dist/general-BPbbmkeX.cjs +2 -0
  128. package/dist/general-BPbbmkeX.cjs.map +1 -0
  129. package/dist/general-CtTJPCJn.js +58 -0
  130. package/dist/general-CtTJPCJn.js.map +1 -0
  131. package/dist/hooks/api.d.ts +15 -0
  132. package/dist/hooks/auth.d.ts +46 -0
  133. package/{src/hooks/form.tsx → dist/hooks/form.d.ts} +2 -5
  134. package/dist/hooks/general.d.ts +13 -0
  135. package/dist/hooks/index.cjs.js +2 -0
  136. package/dist/hooks/index.cjs.js.map +1 -0
  137. package/dist/hooks/index.d.ts +5 -0
  138. package/dist/hooks/index.es.js +25 -0
  139. package/dist/hooks/index.es.js.map +1 -0
  140. package/dist/hooks/router.d.ts +29 -0
  141. package/dist/index-2W--_sNE.js +30 -0
  142. package/dist/index-2W--_sNE.js.map +1 -0
  143. package/dist/index-BUMdUVBH.cjs +5 -0
  144. package/dist/index-BUMdUVBH.cjs.map +1 -0
  145. package/dist/index-B_Zy_zwA.cjs +2 -0
  146. package/dist/index-B_Zy_zwA.cjs.map +1 -0
  147. package/dist/index-BgsynEGX.cjs +2 -0
  148. package/dist/index-BgsynEGX.cjs.map +1 -0
  149. package/dist/index-CA-ugBSa.cjs +2 -0
  150. package/dist/index-CA-ugBSa.cjs.map +1 -0
  151. package/dist/index-CNtOlJ49.js +572 -0
  152. package/dist/index-CNtOlJ49.js.map +1 -0
  153. package/dist/index-DkM_cG3a.js +237 -0
  154. package/dist/index-DkM_cG3a.js.map +1 -0
  155. package/dist/index-Dqp7dpn3.js +1111 -0
  156. package/dist/index-Dqp7dpn3.js.map +1 -0
  157. package/dist/index.cjs.js +2 -0
  158. package/dist/index.cjs.js.map +1 -0
  159. package/dist/index.d.ts +2 -0
  160. package/dist/index.es.js +7 -0
  161. package/dist/index.es.js.map +1 -0
  162. package/dist/jsx-runtime-CeSfJrVB.cjs +31 -0
  163. package/dist/jsx-runtime-CeSfJrVB.cjs.map +1 -0
  164. package/dist/jsx-runtime-Dpn_P65e.js +634 -0
  165. package/dist/jsx-runtime-Dpn_P65e.js.map +1 -0
  166. package/dist/middlewares/index.cjs.js +2 -0
  167. package/dist/middlewares/index.cjs.js.map +1 -0
  168. package/dist/middlewares/index.d.ts +1 -0
  169. package/dist/middlewares/index.es.js +10 -0
  170. package/dist/middlewares/index.es.js.map +1 -0
  171. package/dist/middlewares/session.d.ts +2 -0
  172. package/dist/palette-CE2mKYse.cjs +2 -0
  173. package/dist/palette-CE2mKYse.cjs.map +1 -0
  174. package/dist/palette-C_L0akN_.js +43 -0
  175. package/dist/palette-C_L0akN_.js.map +1 -0
  176. package/dist/rtk-query.modern-CjetfYPg.js +3038 -0
  177. package/dist/rtk-query.modern-CjetfYPg.js.map +1 -0
  178. package/dist/rtk-query.modern-PBCErCqb.cjs +15 -0
  179. package/dist/rtk-query.modern-PBCErCqb.cjs.map +1 -0
  180. package/dist/schemas-BZbJpkD5.cjs +2 -0
  181. package/dist/schemas-BZbJpkD5.cjs.map +1 -0
  182. package/dist/schemas-DlOtf2vf.js +162 -0
  183. package/dist/schemas-DlOtf2vf.js.map +1 -0
  184. package/dist/scripts/index.d.ts +0 -0
  185. package/dist/server.cjs.js +6 -0
  186. package/dist/server.cjs.js.map +1 -0
  187. package/dist/server.d.ts +44 -0
  188. package/dist/server.es.js +127 -0
  189. package/dist/server.es.js.map +1 -0
  190. package/dist/session-CE2U7oL1.cjs +2 -0
  191. package/dist/session-CE2U7oL1.cjs.map +1 -0
  192. package/dist/session-CacrgFSv.cjs +2 -0
  193. package/dist/session-CacrgFSv.cjs.map +1 -0
  194. package/dist/session-D312kYKk.js +32 -0
  195. package/dist/session-D312kYKk.js.map +1 -0
  196. package/dist/session-oI-Ht2C8.js +30 -0
  197. package/dist/session-oI-Ht2C8.js.map +1 -0
  198. package/dist/settings/custom.d.ts +11 -0
  199. package/dist/settings/index.cjs.js +2 -0
  200. package/dist/settings/index.cjs.js.map +1 -0
  201. package/dist/settings/index.d.ts +4 -0
  202. package/dist/settings/index.es.js +17 -0
  203. package/dist/settings/index.es.js.map +1 -0
  204. package/dist/settings/vite.d.ts +10 -0
  205. package/dist/setupTests.d.ts +0 -0
  206. package/dist/slices/createSlice.d.ts +3 -0
  207. package/dist/slices/index.cjs.js +2 -0
  208. package/dist/slices/index.cjs.js.map +1 -0
  209. package/dist/slices/index.d.ts +2 -0
  210. package/dist/slices/index.es.js +6 -0
  211. package/dist/slices/index.es.js.map +1 -0
  212. package/dist/slices/session.d.ts +28 -0
  213. package/dist/style.css +1 -0
  214. package/dist/theme/ThemedBox.d.ts +10 -0
  215. package/dist/theme/colors.d.ts +18 -0
  216. package/dist/theme/components/MuiAccordion.d.ts +3 -0
  217. package/dist/theme/components/MuiAutocomplete.d.ts +3 -0
  218. package/dist/theme/components/MuiButton.d.ts +3 -0
  219. package/dist/theme/components/MuiCardActions.d.ts +3 -0
  220. package/dist/theme/components/MuiCheckbox.d.ts +3 -0
  221. package/dist/theme/components/MuiContainer.d.ts +3 -0
  222. package/dist/theme/components/MuiDialog.d.ts +3 -0
  223. package/dist/theme/components/MuiFormControlLabel.d.ts +3 -0
  224. package/dist/theme/components/MuiFormHelperText.d.ts +3 -0
  225. package/dist/theme/components/MuiGrid2.d.ts +3 -0
  226. package/dist/theme/components/MuiInputBase.d.ts +3 -0
  227. package/dist/theme/components/MuiLink.d.ts +3 -0
  228. package/dist/theme/components/MuiList.d.ts +3 -0
  229. package/dist/theme/components/MuiListItemText.d.ts +3 -0
  230. package/dist/theme/components/MuiMenu.d.ts +3 -0
  231. package/dist/theme/components/MuiMenuItem.d.ts +3 -0
  232. package/dist/theme/components/MuiSelect.d.ts +3 -0
  233. package/dist/theme/components/MuiTab.d.ts +3 -0
  234. package/dist/theme/components/MuiTable.d.ts +3 -0
  235. package/dist/theme/components/MuiTableBody.d.ts +3 -0
  236. package/dist/theme/components/MuiTableHead.d.ts +3 -0
  237. package/dist/theme/components/MuiTabs.d.ts +3 -0
  238. package/dist/theme/components/MuiTextField.d.ts +3 -0
  239. package/dist/theme/components/MuiToolbar.d.ts +3 -0
  240. package/dist/theme/components/MuiTypography.d.ts +3 -0
  241. package/dist/theme/components/_components.d.ts +11 -0
  242. package/dist/theme/components/index.cjs.js +2 -0
  243. package/dist/theme/components/index.cjs.js.map +1 -0
  244. package/dist/theme/components/index.d.ts +3 -0
  245. package/dist/theme/components/index.es.js +6 -0
  246. package/dist/theme/components/index.es.js.map +1 -0
  247. package/dist/theme/index.cjs.js +2 -0
  248. package/dist/theme/index.cjs.js.map +1 -0
  249. package/dist/theme/index.d.ts +7 -0
  250. package/dist/theme/index.es.js +222 -0
  251. package/dist/theme/index.es.js.map +1 -0
  252. package/dist/theme/palette.d.ts +79 -0
  253. package/dist/theme/spacing.d.ts +1 -0
  254. package/dist/theme/typography.d.ts +4 -0
  255. package/dist/urls-DtHr1d3H.js +14 -0
  256. package/dist/urls-DtHr1d3H.js.map +1 -0
  257. package/dist/urls-MaVXL_C2.cjs +2 -0
  258. package/dist/urls-MaVXL_C2.cjs.map +1 -0
  259. package/dist/utils/api.cjs.js +2 -0
  260. package/dist/utils/api.cjs.js.map +1 -0
  261. package/dist/utils/api.d.ts +72 -0
  262. package/dist/utils/api.es.js +16 -0
  263. package/dist/utils/api.es.js.map +1 -0
  264. package/dist/utils/api.test.d.ts +1 -0
  265. package/dist/utils/auth.cjs.js +2 -0
  266. package/dist/utils/auth.cjs.js.map +1 -0
  267. package/dist/utils/auth.d.ts +28 -0
  268. package/dist/utils/auth.es.js +117 -0
  269. package/dist/utils/auth.es.js.map +1 -0
  270. package/dist/utils/form.cjs.js +2 -0
  271. package/dist/utils/form.cjs.js.map +1 -0
  272. package/dist/utils/form.d.ts +25 -0
  273. package/dist/utils/form.es.js +76 -0
  274. package/dist/utils/form.es.js.map +1 -0
  275. package/dist/utils/form.test.d.ts +1 -0
  276. package/dist/utils/general.cjs.js +2 -0
  277. package/dist/utils/general.cjs.js.map +1 -0
  278. package/dist/utils/general.d.ts +30 -0
  279. package/{src/utils/general.ts → dist/utils/general.es.js} +87 -165
  280. package/dist/utils/general.es.js.map +1 -0
  281. package/dist/utils/general.test.d.ts +1 -0
  282. package/dist/utils/router.cjs.js +2 -0
  283. package/dist/utils/router.cjs.js.map +1 -0
  284. package/dist/utils/router.d.ts +19 -0
  285. package/dist/utils/router.es.js +33 -0
  286. package/dist/utils/router.es.js.map +1 -0
  287. package/dist/utils/router.test.d.ts +1 -0
  288. package/dist/utils/schema.cjs.js +2 -0
  289. package/dist/utils/schema.cjs.js.map +1 -0
  290. package/dist/utils/schema.d.ts +43 -0
  291. package/dist/utils/schema.es.js +123 -0
  292. package/dist/utils/schema.es.js.map +1 -0
  293. package/dist/utils/store.cjs.js +2 -0
  294. package/dist/utils/store.cjs.js.map +1 -0
  295. package/dist/utils/store.d.ts +10 -0
  296. package/dist/utils/store.es.js +20 -0
  297. package/dist/utils/store.es.js.map +1 -0
  298. package/dist/utils/test.cjs.js +2 -0
  299. package/dist/utils/test.cjs.js.map +1 -0
  300. package/dist/utils/test.d.ts +53 -0
  301. package/dist/utils/test.es.js +60 -0
  302. package/dist/utils/test.es.js.map +1 -0
  303. package/dist/utils/theme.cjs.js +2 -0
  304. package/dist/utils/theme.cjs.js.map +1 -0
  305. package/dist/utils/theme.d.ts +11 -0
  306. package/dist/utils/theme.es.js +12 -0
  307. package/dist/utils/theme.es.js.map +1 -0
  308. package/dist/utils/window.cjs.js +2 -0
  309. package/dist/utils/window.cjs.js.map +1 -0
  310. package/dist/utils/window.d.ts +2 -0
  311. package/dist/utils/window.es.js +11 -0
  312. package/dist/utils/window.es.js.map +1 -0
  313. package/package.json +142 -37
  314. package/.github/workflows/main.yml +0 -55
  315. package/.prettierignore +0 -1
  316. package/CHANGELOG.md +0 -2027
  317. package/CONTRIBUTING.md +0 -3
  318. package/eslint.config.js +0 -17
  319. package/src/api/createApi.ts +0 -91
  320. package/src/api/endpoints/authFactor.ts +0 -31
  321. package/src/api/endpoints/index.ts +0 -9
  322. package/src/api/endpoints/klass.ts +0 -87
  323. package/src/api/endpoints/school.ts +0 -34
  324. package/src/api/endpoints/session.ts +0 -47
  325. package/src/api/endpoints/user.ts +0 -70
  326. package/src/api/index.ts +0 -5
  327. package/src/api/models.ts +0 -145
  328. package/src/api/schemas.ts +0 -243
  329. package/src/api/tagTypes.ts +0 -12
  330. package/src/api/urls.ts +0 -13
  331. package/src/components/App.css +0 -38
  332. package/src/components/App.tsx +0 -152
  333. package/src/components/ClickableTooltip.tsx +0 -43
  334. package/src/components/CopyIconButton.test.tsx +0 -16
  335. package/src/components/CopyIconButton.tsx +0 -27
  336. package/src/components/Countdown.tsx +0 -42
  337. package/src/components/DownloadFileButton.tsx +0 -55
  338. package/src/components/ElevatedAppBar.tsx +0 -41
  339. package/src/components/Image.tsx +0 -41
  340. package/src/components/InputFileButton.tsx +0 -27
  341. package/src/components/ItemizedList.tsx +0 -63
  342. package/src/components/OrderedGrid.tsx +0 -92
  343. package/src/components/ScrollIntoViewLink.tsx +0 -22
  344. package/src/components/SyncError.tsx +0 -14
  345. package/src/components/TablePagination.tsx +0 -142
  346. package/src/components/YouTubeVideo.tsx +0 -26
  347. package/src/components/form/ApiAutocompleteField.tsx +0 -187
  348. package/src/components/form/AutocompleteField.tsx +0 -135
  349. package/src/components/form/CheckboxField.tsx +0 -86
  350. package/src/components/form/CountryField.tsx +0 -75
  351. package/src/components/form/DatePickerField.tsx +0 -126
  352. package/src/components/form/EmailField.tsx +0 -38
  353. package/src/components/form/FirstNameField.tsx +0 -40
  354. package/src/components/form/Form.tsx +0 -165
  355. package/src/components/form/OtpField.tsx +0 -28
  356. package/src/components/form/PasswordField.tsx +0 -71
  357. package/src/components/form/RepeatField.tsx +0 -123
  358. package/src/components/form/SubmitButton.tsx +0 -57
  359. package/src/components/form/TextField.tsx +0 -150
  360. package/src/components/form/UkCountyField.tsx +0 -68
  361. package/src/components/form/index.tsx +0 -35
  362. package/src/components/index.ts +0 -28
  363. package/src/components/page/Banner.tsx +0 -95
  364. package/src/components/page/Notification.tsx +0 -71
  365. package/src/components/page/Page.tsx +0 -73
  366. package/src/components/page/Section.tsx +0 -21
  367. package/src/components/page/TabBar.tsx +0 -131
  368. package/src/components/page/index.ts +0 -10
  369. package/src/components/router/Link.tsx +0 -23
  370. package/src/components/router/LinkButton.tsx +0 -22
  371. package/src/components/router/LinkIconButton.tsx +0 -22
  372. package/src/components/router/LinkListItem.tsx +0 -22
  373. package/src/components/router/LinkTab.tsx +0 -22
  374. package/src/components/router/Navigate.tsx +0 -33
  375. package/src/components/router/index.tsx +0 -9
  376. package/src/components/table/CellStack.tsx +0 -19
  377. package/src/components/table/Table.tsx +0 -55
  378. package/src/components/table/index.tsx +0 -8
  379. package/src/features/InactiveDialog.tsx +0 -40
  380. package/src/features/ScreenTimeDialog.tsx +0 -30
  381. package/src/features/index.ts +0 -4
  382. package/src/fonts/ttf/Inter-VariableFont_slnt,wght.ttf +0 -0
  383. package/src/fonts/ttf/SpaceGrotesk-VariableFont_wght.ttf +0 -0
  384. package/src/hooks/api.tsx +0 -39
  385. package/src/hooks/auth.tsx +0 -397
  386. package/src/hooks/general.tsx +0 -110
  387. package/src/hooks/index.ts +0 -5
  388. package/src/hooks/router.tsx +0 -168
  389. package/src/images/svg/brain.svg +0 -1
  390. package/src/index.ts +0 -2
  391. package/src/middlewares/index.ts +0 -1
  392. package/src/middlewares/session.ts +0 -21
  393. package/src/scripts/freshDesk.js +0 -473
  394. package/src/scripts/index.ts +0 -1
  395. package/src/server.js +0 -187
  396. package/src/settings/custom.ts +0 -22
  397. package/src/settings/index.ts +0 -7
  398. package/src/settings/vite.ts +0 -26
  399. package/src/setupTests.ts +0 -2
  400. package/src/slices/createSlice.ts +0 -8
  401. package/src/slices/index.ts +0 -2
  402. package/src/slices/session.ts +0 -32
  403. package/src/theme/ThemedBox.tsx +0 -265
  404. package/src/theme/colors.ts +0 -57
  405. package/src/theme/components/MuiAccordion.tsx +0 -13
  406. package/src/theme/components/MuiAutocomplete.tsx +0 -11
  407. package/src/theme/components/MuiButton.ts +0 -70
  408. package/src/theme/components/MuiCardActions.tsx +0 -12
  409. package/src/theme/components/MuiCheckbox.ts +0 -12
  410. package/src/theme/components/MuiContainer.ts +0 -19
  411. package/src/theme/components/MuiDialog.tsx +0 -16
  412. package/src/theme/components/MuiFormControlLabel.ts +0 -18
  413. package/src/theme/components/MuiFormHelperText.ts +0 -12
  414. package/src/theme/components/MuiGrid2.ts +0 -16
  415. package/src/theme/components/MuiInputBase.ts +0 -14
  416. package/src/theme/components/MuiLink.ts +0 -41
  417. package/src/theme/components/MuiList.ts +0 -12
  418. package/src/theme/components/MuiListItemText.ts +0 -18
  419. package/src/theme/components/MuiMenu.ts +0 -14
  420. package/src/theme/components/MuiMenuItem.ts +0 -15
  421. package/src/theme/components/MuiSelect.ts +0 -16
  422. package/src/theme/components/MuiTab.ts +0 -29
  423. package/src/theme/components/MuiTable.ts +0 -29
  424. package/src/theme/components/MuiTableBody.ts +0 -15
  425. package/src/theme/components/MuiTableHead.ts +0 -26
  426. package/src/theme/components/MuiTabs.ts +0 -26
  427. package/src/theme/components/MuiTextField.ts +0 -86
  428. package/src/theme/components/MuiToolbar.ts +0 -11
  429. package/src/theme/components/MuiTypography.ts +0 -12
  430. package/src/theme/components/_components.ts +0 -95
  431. package/src/theme/components/index.ts +0 -57
  432. package/src/theme/index.ts +0 -25
  433. package/src/theme/palette.ts +0 -98
  434. package/src/theme/spacing.ts +0 -8
  435. package/src/theme/typography.ts +0 -101
  436. package/src/utils/api.test.ts +0 -19
  437. package/src/utils/api.tsx +0 -339
  438. package/src/utils/auth.ts +0 -78
  439. package/src/utils/form.test.ts +0 -50
  440. package/src/utils/form.ts +0 -193
  441. package/src/utils/general.test.ts +0 -55
  442. package/src/utils/router.test.ts +0 -156
  443. package/src/utils/router.ts +0 -67
  444. package/src/utils/schema.ts +0 -290
  445. package/src/utils/store.ts +0 -31
  446. package/src/utils/test.tsx +0 -82
  447. package/src/utils/theme.tsx +0 -83
  448. package/src/utils/window.ts +0 -11
  449. package/src/vite-env.d.ts +0 -1
  450. package/tsconfig.app.json +0 -4
  451. package/tsconfig.json +0 -7
  452. package/tsconfig.node.json +0 -4
  453. package/types/fixes.d.ts +0 -18
  454. package/vite.config.ts +0 -23
@@ -1,57 +0,0 @@
1
- import { type ThemeOptions } from "@mui/material"
2
-
3
- import MuiAccordion from "./MuiAccordion"
4
- import MuiAutocomplete from "./MuiAutocomplete"
5
- import MuiButton from "./MuiButton"
6
- import MuiCardActions from "./MuiCardActions"
7
- import MuiCheckbox from "./MuiCheckbox"
8
- import MuiContainer from "./MuiContainer"
9
- import MuiDialog from "./MuiDialog"
10
- import MuiFormControlLabel from "./MuiFormControlLabel"
11
- import MuiFormHelperText from "./MuiFormHelperText"
12
- import MuiGrid2 from "./MuiGrid2"
13
- import MuiInputBase from "./MuiInputBase"
14
- import MuiLink from "./MuiLink"
15
- import MuiList from "./MuiList"
16
- import MuiListItemText from "./MuiListItemText"
17
- import MuiMenu from "./MuiMenu"
18
- import MuiMenuItem from "./MuiMenuItem"
19
- import MuiSelect from "./MuiSelect"
20
- import MuiTab from "./MuiTab"
21
- import MuiTable from "./MuiTable"
22
- import MuiTableBody from "./MuiTableBody"
23
- import MuiTableHead from "./MuiTableHead"
24
- import MuiTabs from "./MuiTabs"
25
- import MuiTextField from "./MuiTextField"
26
- import MuiToolbar from "./MuiToolbar"
27
- import MuiTypography from "./MuiTypography"
28
-
29
- const components: ThemeOptions["components"] = {
30
- MuiAccordion,
31
- MuiAutocomplete,
32
- MuiButton,
33
- MuiCardActions,
34
- MuiCheckbox,
35
- MuiContainer,
36
- MuiDialog,
37
- MuiFormControlLabel,
38
- MuiFormHelperText,
39
- MuiGrid2,
40
- MuiInputBase,
41
- MuiLink,
42
- MuiList,
43
- MuiListItemText,
44
- MuiMenu,
45
- MuiMenuItem,
46
- MuiSelect,
47
- MuiTab,
48
- MuiTable,
49
- MuiTableBody,
50
- MuiTableHead,
51
- MuiTabs,
52
- MuiTextField,
53
- MuiToolbar,
54
- MuiTypography,
55
- }
56
-
57
- export default components
@@ -1,25 +0,0 @@
1
- import {
2
- type ThemeOptions,
3
- createTheme,
4
- responsiveFontSizes,
5
- } from "@mui/material"
6
-
7
- import components from "./components"
8
- import palette from "./palette"
9
- import spacing from "./spacing"
10
- import typography from "./typography"
11
-
12
- export * from "./palette"
13
- export * from "./ThemedBox"
14
- export { default as ThemedBox } from "./ThemedBox"
15
-
16
- export const themeOptions: ThemeOptions = {
17
- palette,
18
- components,
19
- spacing,
20
- typography,
21
- }
22
-
23
- const theme = responsiveFontSizes(createTheme(themeOptions))
24
-
25
- export default theme
@@ -1,98 +0,0 @@
1
- import {
2
- type PaletteColor,
3
- type PaletteColorOptions,
4
- type PaletteOptions,
5
- createTheme,
6
- } from "@mui/material"
7
-
8
- import { primary, secondary, tertiary } from "./colors"
9
-
10
- // Extend palette to include a custom colors.
11
- declare module "@mui/material/styles" {
12
- interface CustomPaletteColors {
13
- tertiary: PaletteColor
14
- white: PaletteColor
15
- black: PaletteColor
16
- teacher: PaletteColor
17
- student: PaletteColor
18
- indy: PaletteColor
19
- }
20
- interface Palette extends CustomPaletteColors {}
21
- interface PaletteOptions extends CustomPaletteColors {}
22
- }
23
-
24
- export interface PropsColorOverrides {
25
- tertiary: true
26
- white: true
27
- black: true
28
- teacher: true
29
- student: true
30
- indy: true
31
- }
32
-
33
- declare module "@mui/material" {
34
- interface FabPropsColorOverrides extends PropsColorOverrides {}
35
- interface CardPropsColorOverrides extends PropsColorOverrides {}
36
- interface ChipPropsColorOverrides extends PropsColorOverrides {}
37
- interface IconPropsColorOverrides extends PropsColorOverrides {}
38
- interface AlertPropsColorOverrides extends PropsColorOverrides {}
39
- interface BadgePropsColorOverrides extends PropsColorOverrides {}
40
- interface RadioPropsColorOverrides extends PropsColorOverrides {}
41
- interface AppBarPropsColorOverrides extends PropsColorOverrides {}
42
- interface ButtonPropsColorOverrides extends PropsColorOverrides {}
43
- interface SliderPropsColorOverrides extends PropsColorOverrides {}
44
- interface SwitchPropsColorOverrides extends PropsColorOverrides {}
45
- interface SvgIconPropsColorOverrides extends PropsColorOverrides {}
46
- interface CheckboxPropsColorOverrides extends PropsColorOverrides {}
47
- interface FormLabelPropsColorOverrides extends PropsColorOverrides {}
48
- interface InputBasePropsColorOverrides extends PropsColorOverrides {}
49
- interface TextFieldPropsColorOverrides extends PropsColorOverrides {}
50
- interface IconButtonPropsColorOverrides extends PropsColorOverrides {}
51
- interface PaginationPropsColorOverrides extends PropsColorOverrides {}
52
- interface ButtonGroupPropsColorOverrides extends PropsColorOverrides {}
53
- interface FormControlPropsColorOverrides extends PropsColorOverrides {}
54
- interface ToggleButtonPropsColorOverrides extends PropsColorOverrides {}
55
- interface LinearProgressPropsColorOverrides extends PropsColorOverrides {}
56
- interface PaginationItemPropsColorOverrides extends PropsColorOverrides {}
57
- interface CircularProgressPropsColorOverrides extends PropsColorOverrides {}
58
- interface TabsPropsIndicatorColorOverrides extends PropsColorOverrides {}
59
- interface ToggleButtonGroupPropsColorOverrides extends PropsColorOverrides {}
60
- }
61
-
62
- const {
63
- palette: { augmentColor },
64
- } = createTheme()
65
-
66
- const teacher: PaletteColorOptions = {
67
- main: primary[500],
68
- contrastText: "#fff",
69
- }
70
-
71
- const student: PaletteColorOptions = {
72
- main: tertiary[500],
73
- contrastText: "#fff",
74
- }
75
-
76
- const indy: PaletteColorOptions = {
77
- main: secondary[500],
78
- contrastText: "#000",
79
- }
80
-
81
- const palette: PaletteOptions = {
82
- // primary / teacher
83
- primary: teacher,
84
- teacher: augmentColor({ color: teacher }),
85
- // secondary / indy
86
- secondary: indy,
87
- indy: augmentColor({ color: indy }),
88
- // tertiary / student
89
- tertiary: augmentColor({ color: student }),
90
- student: augmentColor({ color: student }),
91
- // other
92
- white: augmentColor({ color: { main: "#fff" } }),
93
- black: augmentColor({ color: { main: "#000" } }),
94
- info: { main: "#f1ecec" },
95
- error: { main: "#d50000" },
96
- }
97
-
98
- export default palette
@@ -1,8 +0,0 @@
1
- export default function spacing(
2
- factor: number,
3
- important: boolean = false,
4
- ): string {
5
- let spacing = `${8 * factor}px`
6
- if (important) spacing += " !important"
7
- return spacing
8
- }
@@ -1,101 +0,0 @@
1
- import {
2
- type CSSProperties,
3
- type TypographyOptions,
4
- } from "@mui/material/styles/createTypography"
5
-
6
- // Pseudo typography variant for all form text.
7
- export const form: CSSProperties = {
8
- fontFamily: '"Inter"',
9
- fontSize: "14px !important",
10
- fontWeight: 600,
11
- margin: 0,
12
- marginBottom: "12px",
13
- letterSpacing: 0,
14
- }
15
-
16
- // TODO: assess if line-height is needed.
17
- // Doesn't play well with responsiveFontSizes.
18
- // https://mui.com/material-ui/customization/theming/#responsivefontsizes-theme-options-theme
19
-
20
- const typography: TypographyOptions = {
21
- h1: {
22
- color: "#383b3b",
23
- fontFamily: '"SpaceGrotesk"',
24
- fontWeight: 500,
25
- fontSize: "60px",
26
- // lineHeight: '60px',
27
- marginBottom: "24px",
28
- letterSpacing: 0,
29
- },
30
- h2: {
31
- color: "#383b3b",
32
- fontFamily: '"SpaceGrotesk"',
33
- fontWeight: 500,
34
- fontSize: "55px",
35
- // lineHeight: '55px',
36
- marginBottom: "22px",
37
- letterSpacing: 0,
38
- },
39
- h3: {
40
- color: "#383b3b",
41
- fontFamily: '"SpaceGrotesk"',
42
- fontWeight: 500,
43
- fontSize: "45px",
44
- // lineHeight: '47px',
45
- marginBottom: "20px",
46
- letterSpacing: 0,
47
- },
48
- h4: {
49
- color: "#383b3b",
50
- fontFamily: '"SpaceGrotesk"',
51
- fontWeight: 500,
52
- fontSize: "30px",
53
- // lineHeight: '38px',
54
- marginBottom: "18px",
55
- letterSpacing: 0,
56
- },
57
- h5: {
58
- color: "#383b3b",
59
- fontFamily: '"SpaceGrotesk"',
60
- fontWeight: 500,
61
- fontSize: "25px",
62
- // lineHeight: '32px',
63
- marginBottom: "16px",
64
- letterSpacing: 0,
65
- },
66
- h6: {
67
- color: "#383b3b",
68
- fontFamily: '"SpaceGrotesk"',
69
- fontWeight: 500,
70
- fontSize: "21px",
71
- // lineHeight: '26px',
72
- marginBottom: "10px",
73
- letterSpacing: 0,
74
- },
75
- body1: {
76
- color: "#383b3b",
77
- fontFamily: '"Inter"',
78
- fontWeight: 500,
79
- fontSize: "1.07rem !important",
80
- // lineHeight: '22px',
81
- marginBottom: "16px",
82
- letterSpacing: 0,
83
- },
84
- body2: {
85
- color: "#383b3b",
86
- fontFamily: '"Inter"',
87
- fontWeight: 500,
88
- fontSize: "0.92rem !important",
89
- // lineHeight: '20px',
90
- marginBottom: "14px",
91
- letterSpacing: 0,
92
- },
93
- button: {
94
- fontFamily: '"Inter"',
95
- fontSize: "15px",
96
- fontWeight: 600,
97
- letterSpacing: 0,
98
- },
99
- }
100
-
101
- export default typography
@@ -1,19 +0,0 @@
1
- import { buildUrl } from "./api"
2
-
3
- test("url params", () => {
4
- const url = buildUrl("<id>/", { url: { id: 1 } })
5
-
6
- expect(url).toBe("1/")
7
- })
8
-
9
- test("single search value", () => {
10
- const url = buildUrl("/", { search: { age: 18 } })
11
-
12
- expect(url).toBe("/?age=18")
13
- })
14
-
15
- test("multiple search values", () => {
16
- const url = buildUrl("/", { search: { age: [18, 21] } })
17
-
18
- expect(url).toBe("/?age=18&age=21")
19
- })
package/src/utils/api.tsx DELETED
@@ -1,339 +0,0 @@
1
- import type {
2
- FetchBaseQueryError,
3
- TypedUseMutationResult,
4
- TypedUseQueryHookResult,
5
- TypedUseQueryStateResult,
6
- } from "@reduxjs/toolkit/query/react"
7
- import { CircularProgress } from "@mui/material"
8
- import { type ReactNode } from "react"
9
-
10
- import { type Optional, type Required, getNestedProperty } from "./general"
11
- import { type SchemaMap } from "./schema"
12
- import SyncError from "../components/SyncError"
13
-
14
- // -----------------------------------------------------------------------------
15
- // Model Types
16
- // -----------------------------------------------------------------------------
17
-
18
- // The fields of a model.
19
- export type Fields = Record<string, unknown>
20
-
21
- export interface Tag<Type extends string> {
22
- type: Type
23
- id: string
24
- }
25
-
26
- export type ModelId = string | number
27
-
28
- /**
29
- * A data model.
30
- * Id: The type of Id.
31
- * Data: The data fields.
32
- */
33
- export type Model<Id extends ModelId, MFields extends Fields = Fields> = {
34
- id: Id
35
- } & Omit<MFields, "id">
36
-
37
- export type Schemas<M extends Model<any>> = {
38
- [K in keyof M]-?: SchemaMap<M[K]>
39
- }
40
-
41
- export type Result<
42
- M extends Model<any>,
43
- MFields extends keyof Omit<M, "id"> = never,
44
- > = Pick<M, "id" | MFields>
45
-
46
- export type Arg<
47
- M extends Model<any>,
48
- RequiredFields extends keyof Omit<M, "id">,
49
- OptionalFields extends keyof Omit<M, "id" | RequiredFields> = never,
50
- > = Required<M, RequiredFields> & Optional<M, OptionalFields>
51
-
52
- // -----------------------------------------------------------------------------
53
- // CRUD Types
54
- // https://www.django-rest-framework.org/api-guide/viewsets/#viewset-actions
55
- // -----------------------------------------------------------------------------
56
-
57
- // Create
58
-
59
- export type CreateResult<
60
- M extends Model<any>,
61
- MFields extends keyof Omit<M, "id"> = never,
62
- > = Result<M, MFields>
63
-
64
- export type CreateArg<
65
- M extends Model<any>,
66
- RequiredFields extends keyof Omit<M, "id">,
67
- OptionalFields extends keyof Omit<M, "id" | RequiredFields> = never,
68
- > = Arg<M, RequiredFields, OptionalFields>
69
-
70
- export type BulkCreateResult<
71
- M extends Model<any>,
72
- MFields extends keyof Omit<M, "id"> = never,
73
- ExtraFields extends Fields = Fields,
74
- > = Array<Result<M, MFields> & ExtraFields>
75
-
76
- export type BulkCreateArg<
77
- M extends Model<any>,
78
- RequiredFields extends keyof Omit<M, "id">,
79
- OptionalFields extends keyof Omit<M, "id" | RequiredFields> = never,
80
- ExtraFields extends Fields = Fields,
81
- > = Array<Arg<M, RequiredFields, OptionalFields> & ExtraFields>
82
-
83
- // Read
84
-
85
- export type RetrieveResult<
86
- M extends Model<any>,
87
- MFields extends keyof Omit<M, "id"> = never,
88
- > = Result<M, MFields>
89
-
90
- export type RetrieveArg<M extends Model<any>> = M["id"]
91
-
92
- export interface ListResult<
93
- M extends Model<any>,
94
- MFields extends keyof Omit<M, "id"> = never,
95
- ExtraFields extends Fields = Fields,
96
- > {
97
- count: number
98
- offset: number
99
- limit: number
100
- max_limit: number
101
- data: Array<Result<M, MFields> & ExtraFields>
102
- }
103
-
104
- export type ListArg<Filters extends Fields = Fields> = {
105
- limit: number
106
- offset: number
107
- } & Partial<Omit<Filters, "limit" | "offset">>
108
-
109
- // Update
110
-
111
- export type UpdateResult<
112
- M extends Model<any>,
113
- MFields extends keyof Omit<M, "id"> = never,
114
- > = Result<M, MFields>
115
-
116
- type UpdateWithBody<
117
- M extends Model<any>,
118
- RequiredFields extends keyof Omit<M, "id">,
119
- OptionalFields extends keyof Omit<M, "id" | RequiredFields>,
120
- > = Pick<M, "id"> & Arg<M, RequiredFields, OptionalFields>
121
-
122
- // NOTE: Sometimes update does not require a body. For example, if calling the
123
- // "refresh" action on an invitation object updates the expiry date to be 24
124
- // hours from now. In this case, you only need to pass the ID of the object.
125
- export type UpdateArg<
126
- M extends Model<any>,
127
- RequiredFields extends keyof Omit<M, "id"> = never,
128
- OptionalFields extends keyof Omit<M, "id" | RequiredFields> = never,
129
- > = [RequiredFields] extends [never]
130
- ? [OptionalFields] extends [never]
131
- ? M["id"]
132
- : UpdateWithBody<M, RequiredFields, OptionalFields>
133
- : UpdateWithBody<M, RequiredFields, OptionalFields>
134
-
135
- export type BulkUpdateResult<
136
- M extends Model<any>,
137
- MFields extends keyof Omit<M, "id"> = never,
138
- ExtraFields extends Fields = Fields,
139
- > = Array<Result<M, MFields> & ExtraFields>
140
-
141
- export type BulkUpdateArg<
142
- M extends Model<any>,
143
- RequiredFields extends keyof Omit<M, "id">,
144
- OptionalFields extends keyof Omit<M, "id" | RequiredFields> = never,
145
- ExtraFields extends Fields = Fields,
146
- > = Record<M["id"], Arg<M, RequiredFields, OptionalFields> & ExtraFields>
147
-
148
- // Delete
149
-
150
- export type DestroyResult = null
151
-
152
- export type DestroyArg<M extends Model<any>> = M["id"]
153
-
154
- export type BulkDestroyResult = null
155
-
156
- export type BulkDestroyArg<M extends Model<any>> = Array<M["id"]>
157
-
158
- // -----------------------------------------------------------------------------
159
- // Functions
160
- // -----------------------------------------------------------------------------
161
-
162
- export function buildUrl(
163
- url: string,
164
- params: {
165
- search?: Fields
166
- url?: Fields
167
- },
168
- ): string {
169
- if (params.url) {
170
- Object.entries(params.url).forEach(([key, value]) => {
171
- url = url.replace(`<${key}>`, String(value))
172
- })
173
- }
174
-
175
- if (params.search) {
176
- const searchParams: string[][] = []
177
- for (const key in params.search) {
178
- const values = params.search[key]
179
- if (values === undefined) continue
180
-
181
- if (Array.isArray(values)) {
182
- for (const value of values) searchParams.push([key, String(value)])
183
- } else {
184
- // eslint-disable-next-line @typescript-eslint/no-base-to-string
185
- searchParams.push([key, String(values)])
186
- }
187
- }
188
-
189
- if (searchParams.length !== 0) {
190
- url += `?${new URLSearchParams(searchParams).toString()}`
191
- }
192
- }
193
-
194
- return url
195
- }
196
-
197
- export function isModelId(value: unknown): boolean {
198
- return typeof value === "number" || typeof value === "string"
199
- }
200
-
201
- export function listTag<Type extends string>(type: Type): Tag<Type> {
202
- return { type, id: "LIST" }
203
- }
204
-
205
- export type TagDataOptions = Partial<{
206
- includeListTag: boolean
207
- argKeysAreIds: boolean
208
- id: string
209
- }>
210
-
211
- export function tagData<Type extends string, M extends Model<any>>(
212
- type: Type,
213
- options?: TagDataOptions,
214
- ): (
215
- result:
216
- | Result<M, any>
217
- | Array<Result<M, any>>
218
- | ListResult<M, any>
219
- | null
220
- | undefined,
221
- error: FetchBaseQueryError | undefined,
222
- arg:
223
- | Arg<M, any>
224
- | Array<Arg<M, any>>
225
- | Record<M["id"], Arg<M, any>>
226
- | ListArg<any>
227
- | Array<M["id"]>
228
- | string
229
- | number
230
- | undefined,
231
- ) => Array<Tag<Type>> {
232
- const {
233
- includeListTag = false,
234
- argKeysAreIds = false,
235
- id = "id",
236
- } = options || {}
237
-
238
- function tags(
239
- ids: ModelId[],
240
- list: boolean = includeListTag,
241
- ): Array<Tag<Type>> {
242
- const tags = ids.map(id => ({ type, id: String(id) }))
243
- if (list) tags.push(listTag(type))
244
- return tags
245
- }
246
-
247
- function getModelId(result: Result<M, any>) {
248
- return getNestedProperty(result, id) as ModelId
249
- }
250
-
251
- return (result, error, arg) => {
252
- if (!error) {
253
- if (arg) {
254
- // The argument is an ID.
255
- if (isModelId(arg)) return tags([arg as ModelId])
256
-
257
- // The argument is an array of IDs.
258
- if (Array.isArray(arg)) {
259
- if (arg.length && isModelId(arg[0])) {
260
- return tags(arg as Array<M["id"]>)
261
- }
262
- }
263
- // The argument is an object that contains the id field.
264
- else if (typeof arg === "object" && argKeysAreIds) {
265
- return tags(Object.keys(arg as Record<M["id"], any>))
266
- }
267
- }
268
-
269
- if (result) {
270
- // The result is an array of models that contain the id field.
271
- if (Array.isArray(result)) {
272
- return tags(result.map(getModelId))
273
- }
274
-
275
- // The result is a model that contains the id field.
276
- if (getModelId(result as Result<M, any>) !== undefined) {
277
- return tags([getModelId(result as Result<M, any>)])
278
- }
279
-
280
- // The result is a list that contains an array of models that contain
281
- // the id field.
282
- return tags((result as ListResult<M, any>).data.map(getModelId), true)
283
- }
284
- }
285
-
286
- return tags([])
287
- }
288
- }
289
-
290
- export function modelUrls(list: string, detail: string) {
291
- if (list === detail) throw Error("List and detail are the same.")
292
-
293
- return { list, detail }
294
- }
295
-
296
- export type HandleQueryStateOptions = Partial<{
297
- loading: ReactNode
298
- error: ReactNode
299
- }>
300
-
301
- export function handleResultState<QueryArg, ResultType>(
302
- result:
303
- | TypedUseQueryHookResult<ResultType, QueryArg, any>
304
- | TypedUseQueryStateResult<ResultType, QueryArg, any>
305
- | TypedUseMutationResult<ResultType, QueryArg, any>,
306
- children: (data: NonNullable<ResultType>) => ReactNode,
307
- options?: HandleQueryStateOptions,
308
- ): ReactNode {
309
- const { data, isLoading, isSuccess } = result
310
- const error = result.error as string | undefined
311
-
312
- const {
313
- loading: loadingNode = <CircularProgress />,
314
- error: errorNode = <SyncError />,
315
- } = options || {}
316
-
317
- // An error occurred.
318
- if (error) {
319
- console.error(error)
320
- return errorNode
321
- }
322
-
323
- // Busy calling the API.
324
- if (isLoading) return loadingNode
325
-
326
- // Called the API and got data.
327
- if (data) return children(data)
328
-
329
- // Called the API and did not get data.
330
- if (isSuccess) throw Error("Expected to get data from API but got nothing.")
331
-
332
- // Have yet to call the API.
333
- return loadingNode
334
- }
335
-
336
- export function isSafeHttpMethod(method: string) {
337
- // https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.2.1
338
- return ["GET", "HEAD", "OPTIONS", "TRACE"].includes(method.toUpperCase())
339
- }