@kaspernj/api-maker 1.0.446 → 1.0.448

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 (357) hide show
  1. package/{.eslintrc.cjs → .eslintrc.js} +4 -0
  2. package/README.md +35 -0
  3. package/android/build.gradle +43 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +50 -0
  6. package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +30 -0
  7. package/build/api.js +120 -0
  8. package/build/attribute-not-loaded-error.js +2 -0
  9. package/build/base-component.js +5 -0
  10. package/build/base-error.js +33 -0
  11. package/build/base-model/attribute.js +25 -0
  12. package/build/base-model/column.js +11 -0
  13. package/build/base-model/reflection.js +14 -0
  14. package/build/base-model/scope.js +11 -0
  15. package/build/base-model.js +828 -0
  16. package/build/bootstrap/attribute-row/index.js +105 -0
  17. package/build/bootstrap/attribute-rows.js +31 -0
  18. package/build/bootstrap/card.js +138 -0
  19. package/build/bootstrap/checkbox.js +97 -0
  20. package/build/bootstrap/checkboxes.js +183 -0
  21. package/build/bootstrap/index.js +2 -0
  22. package/build/bootstrap/input.js +128 -0
  23. package/build/bootstrap/invalid-feedback.js +27 -0
  24. package/build/bootstrap/paginate.js +150 -0
  25. package/build/bootstrap/radio-buttons.js +72 -0
  26. package/build/bootstrap/select.js +88 -0
  27. package/build/bootstrap/sort-link.js +130 -0
  28. package/build/cable-connection-pool.js +128 -0
  29. package/build/cable-subscription-pool.js +207 -0
  30. package/build/cable-subscription.js +21 -0
  31. package/build/cache-key-generator.js +81 -0
  32. package/build/can-can.js +134 -0
  33. package/build/channels-consumer.js +3 -0
  34. package/build/collection-loader.js +48 -0
  35. package/build/collection.js +279 -0
  36. package/build/command-submit-data.js +81 -0
  37. package/build/commands-pool.js +195 -0
  38. package/build/compose.js +9 -0
  39. package/build/config.js +53 -0
  40. package/build/custom-error.js +5 -0
  41. package/build/data-set-to-attributes.js +10 -0
  42. package/build/deserializer.js +56 -0
  43. package/build/destroy-error.js +5 -0
  44. package/build/devise.js +109 -0
  45. package/build/draggable-sort/controller.js +136 -0
  46. package/build/draggable-sort/index.js +114 -0
  47. package/build/draggable-sort/item.js +188 -0
  48. package/build/error-logger.js +101 -0
  49. package/build/error-messages.js +13 -0
  50. package/build/event-connection.js +32 -0
  51. package/build/event-model-class.js +24 -0
  52. package/build/events.js +5 -0
  53. package/build/form.js +83 -0
  54. package/build/index.js +3 -0
  55. package/build/inputs/attachment.js +121 -0
  56. package/build/inputs/auto-submit.js +36 -0
  57. package/build/inputs/checkbox.js +145 -0
  58. package/build/inputs/checkboxes.js +111 -0
  59. package/build/inputs/id-for-component.js +15 -0
  60. package/build/inputs/input-wrapper.js +18 -0
  61. package/build/inputs/input.js +230 -0
  62. package/build/inputs/money.js +179 -0
  63. package/build/inputs/name-for-component.js +13 -0
  64. package/build/inputs/select.js +92 -0
  65. package/build/instance-of-class-name.js +23 -0
  66. package/build/key-value-store.js +53 -0
  67. package/build/link.js +68 -0
  68. package/build/logger.js +30 -0
  69. package/build/modal.js +37 -0
  70. package/build/model-class-require.js +13 -0
  71. package/build/model-events.js +30 -0
  72. package/build/model-name.js +28 -0
  73. package/build/model-prop-type.js +101 -0
  74. package/build/model-recipes-loader.js +32 -0
  75. package/build/model-recipes-model-loader.js +357 -0
  76. package/build/models-response-reader.js +40 -0
  77. package/build/models.js +8 -0
  78. package/build/money-formatter.js +77 -0
  79. package/build/not-loaded-error.js +2 -0
  80. package/build/params.js +60 -0
  81. package/build/preloaded.js +38 -0
  82. package/build/resize-observer.js +11 -0
  83. package/build/result.js +13 -0
  84. package/build/router/route.js +262 -0
  85. package/build/router/switch.js +72 -0
  86. package/build/router.js +57 -0
  87. package/build/routes-native.js +202 -0
  88. package/build/routes.js +50 -0
  89. package/build/run-last.js +35 -0
  90. package/build/serializer.js +63 -0
  91. package/build/services.js +20 -0
  92. package/build/session-status-updater.js +126 -0
  93. package/build/source-maps-loader.js +171 -0
  94. package/build/super-admin/config-reader.js +84 -0
  95. package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
  96. package/build/super-admin/edit-page/edit-attribute-content.js +54 -0
  97. package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
  98. package/build/super-admin/edit-page/edit-attribute.js +76 -0
  99. package/build/super-admin/edit-page.js +120 -0
  100. package/build/super-admin/has-edit-config.js +12 -0
  101. package/build/super-admin/index-page.js +24 -0
  102. package/build/super-admin/index.js +180 -0
  103. package/build/super-admin/layout/header/index.js +151 -0
  104. package/build/super-admin/layout/index.js +109 -0
  105. package/build/super-admin/layout/menu/index.js +93 -0
  106. package/build/super-admin/layout/menu/menu-content.js +40 -0
  107. package/build/super-admin/layout/menu/menu-item.js +83 -0
  108. package/build/super-admin/layout/no-access.js +25 -0
  109. package/build/super-admin/model-class-table.js +61 -0
  110. package/build/super-admin/models.js +8 -0
  111. package/build/super-admin/show-nav.js +49 -0
  112. package/build/super-admin/show-page/belongs-to-attribute-row.js +28 -0
  113. package/build/super-admin/show-page/index.js +141 -0
  114. package/build/super-admin/show-reflection-actions.js +47 -0
  115. package/build/super-admin/show-reflection-link.js +46 -0
  116. package/build/super-admin/show-reflection-page.js +47 -0
  117. package/build/table/column-content.js +112 -0
  118. package/build/table/column-identifier.js +18 -0
  119. package/build/table/column-visible.js +7 -0
  120. package/build/table/components/column.js +20 -0
  121. package/build/table/components/flat-list.js +20 -0
  122. package/build/table/components/header.js +25 -0
  123. package/build/table/components/row.js +25 -0
  124. package/build/table/filters/attribute-element.js +43 -0
  125. package/build/table/filters/filter-form.js +392 -0
  126. package/build/table/filters/filter.js +89 -0
  127. package/build/table/filters/index.js +182 -0
  128. package/build/table/filters/load-search-modal.js +174 -0
  129. package/build/table/filters/reflection-element.js +36 -0
  130. package/build/table/filters/save-search-modal.js +86 -0
  131. package/build/table/filters/scope-element.js +41 -0
  132. package/build/table/header-column-content.js +67 -0
  133. package/build/table/header-column.js +144 -0
  134. package/build/table/header-select.js +104 -0
  135. package/build/table/model-callback-args.js +10 -0
  136. package/build/table/model-column.js +87 -0
  137. package/build/table/model-row.js +179 -0
  138. package/build/table/select-calculator.js +63 -0
  139. package/build/table/settings/column-row.js +97 -0
  140. package/build/table/settings/download-action.js +78 -0
  141. package/build/table/settings/index.js +92 -0
  142. package/build/table/table-settings.js +219 -0
  143. package/build/table/table.js +972 -0
  144. package/build/table/use-sorting.js +34 -0
  145. package/build/table/widths.js +75 -0
  146. package/build/table/worker-plugins-check-all-checkbox.js +125 -0
  147. package/build/table/worker-plugins-checkbox.js +115 -0
  148. package/build/translated-attributes.js +10 -0
  149. package/build/translated-collections.js +11 -0
  150. package/build/updated-attribute.js +76 -0
  151. package/build/url-encode.js +15 -0
  152. package/build/use-breakpoint.js +44 -0
  153. package/build/use-can-can.js +55 -0
  154. package/build/use-collection.js +225 -0
  155. package/build/use-created-event.js +52 -0
  156. package/build/use-current-user.js +73 -0
  157. package/build/use-destroyed-event.js +60 -0
  158. package/build/use-event-emitter.js +13 -0
  159. package/build/use-event-listener.js +16 -0
  160. package/build/use-input.js +140 -0
  161. package/build/use-model-event.js +60 -0
  162. package/build/use-model.js +169 -0
  163. package/build/use-resize-observer.js +23 -0
  164. package/build/use-router.js +102 -0
  165. package/build/use-screen-layout.js +39 -0
  166. package/build/use-updated-event.js +60 -0
  167. package/build/use-validation-errors.js +30 -0
  168. package/build/utils/card.js +51 -0
  169. package/build/utils/checkbox.js +48 -0
  170. package/build/utils/default-style.js +18 -0
  171. package/build/utils/modal.js +61 -0
  172. package/build/utils/text.js +18 -0
  173. package/build/validation-error.js +28 -0
  174. package/build/validation-errors.js +98 -0
  175. package/build/with-collection.js +13 -0
  176. package/build/with-current-user.js +9 -0
  177. package/build/with-model.js +14 -0
  178. package/build/with-router.js +21 -0
  179. package/expo-module.config.json +17 -0
  180. package/ios/ApiMaker.podspec +29 -0
  181. package/ios/ApiMakerModule.swift +48 -0
  182. package/ios/ApiMakerView.swift +38 -0
  183. package/package.json +35 -16
  184. package/src/{api.mjs → api.js} +5 -5
  185. package/src/{base-error.mjs → base-error.js} +1 -1
  186. package/src/base-model/{attribute.mjs → attribute.js} +1 -1
  187. package/src/base-model/{reflection.mjs → reflection.js} +1 -1
  188. package/src/{base-model.mjs → base-model.js} +14 -14
  189. package/src/bootstrap/attribute-row/index.jsx +2 -2
  190. package/src/bootstrap/attribute-rows.jsx +1 -1
  191. package/src/bootstrap/card.jsx +1 -1
  192. package/src/bootstrap/checkbox.jsx +1 -1
  193. package/src/bootstrap/checkboxes.jsx +1 -1
  194. package/src/bootstrap/input.jsx +1 -1
  195. package/src/bootstrap/paginate.jsx +2 -2
  196. package/src/bootstrap/sort-link.jsx +3 -3
  197. package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +3 -3
  198. package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +4 -4
  199. package/src/{cable-subscription.mjs → cable-subscription.js} +1 -1
  200. package/src/{can-can.mjs → can-can.js} +1 -1
  201. package/src/collection-loader.jsx +2 -2
  202. package/src/{collection.mjs → collection.js} +3 -3
  203. package/src/{commands-pool.mjs → commands-pool.js} +11 -11
  204. package/src/{custom-error.mjs → custom-error.js} +1 -1
  205. package/src/{deserializer.mjs → deserializer.js} +2 -2
  206. package/src/{destroy-error.mjs → destroy-error.js} +1 -1
  207. package/src/{devise.mjs → devise.js} +5 -9
  208. package/src/draggable-sort/index.jsx +3 -3
  209. package/src/draggable-sort/item.jsx +2 -2
  210. package/src/{error-logger.mjs → error-logger.js} +1 -1
  211. package/src/event-connection.jsx +1 -1
  212. package/src/event-model-class.jsx +1 -1
  213. package/src/form.jsx +1 -1
  214. package/src/index.js +3 -0
  215. package/src/inputs/attachment.jsx +2 -2
  216. package/src/inputs/checkbox.jsx +7 -6
  217. package/src/inputs/checkboxes.jsx +1 -1
  218. package/src/inputs/input-wrapper.jsx +1 -1
  219. package/src/inputs/input.jsx +8 -7
  220. package/src/inputs/money.jsx +3 -3
  221. package/src/inputs/select.jsx +1 -1
  222. package/src/{key-value-store.mjs → key-value-store.js} +1 -1
  223. package/src/link.jsx +2 -2
  224. package/src/modal.jsx +1 -1
  225. package/src/{model-class-require.mjs → model-class-require.js} +4 -2
  226. package/src/{model-events.mjs → model-events.js} +1 -1
  227. package/src/{model-name.mjs → model-name.js} +1 -1
  228. package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
  229. package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +2 -2
  230. package/src/{models-response-reader.mjs → models-response-reader.js} +2 -2
  231. package/src/models.js +7 -0
  232. package/src/{models.mjs.erb → models.js.erb} +1 -1
  233. package/src/{params.mjs → params.js} +2 -2
  234. package/src/{preloaded.mjs → preloaded.js} +1 -1
  235. package/src/resize-observer.jsx +1 -1
  236. package/src/router/route.jsx +1 -1
  237. package/src/router/switch.jsx +1 -1
  238. package/src/router.jsx +1 -1
  239. package/src/{routes-native.mjs → routes-native.js} +1 -1
  240. package/src/{services.mjs → services.js} +1 -1
  241. package/src/{session-status-updater.mjs → session-status-updater.js} +3 -3
  242. package/src/{source-maps-loader.mjs → source-maps-loader.js} +1 -1
  243. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +1 -1
  244. package/src/super-admin/edit-page/edit-attribute-content.jsx +1 -1
  245. package/src/super-admin/edit-page/edit-attribute-input.jsx +1 -1
  246. package/src/super-admin/edit-page/edit-attribute.jsx +1 -1
  247. package/src/super-admin/edit-page.jsx +2 -2
  248. package/src/super-admin/has-edit-config.js +1 -1
  249. package/src/super-admin/index-page.jsx +1 -1
  250. package/src/super-admin/index.jsx +7 -7
  251. package/src/super-admin/layout/header/index.jsx +2 -2
  252. package/src/super-admin/layout/index.jsx +3 -3
  253. package/src/super-admin/layout/menu/index.jsx +3 -3
  254. package/src/super-admin/layout/menu/menu-content.jsx +2 -2
  255. package/src/super-admin/layout/menu/{menu-item/index.jsx → menu-item.jsx} +5 -6
  256. package/src/super-admin/layout/no-access.jsx +2 -2
  257. package/src/super-admin/model-class-table.jsx +3 -3
  258. package/src/super-admin/models.js +1 -1
  259. package/src/super-admin/show-nav.jsx +2 -2
  260. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +1 -1
  261. package/src/super-admin/show-page/index.jsx +2 -2
  262. package/src/super-admin/show-reflection-actions.jsx +1 -1
  263. package/src/super-admin/show-reflection-link.jsx +1 -1
  264. package/src/super-admin/show-reflection-page.jsx +1 -1
  265. package/src/table/column-content.jsx +1 -1
  266. package/src/table/filters/filter-form.jsx +1 -1
  267. package/src/table/filters/index.jsx +5 -3
  268. package/src/table/filters/load-search-modal.jsx +6 -4
  269. package/src/table/filters/save-search-modal.jsx +4 -4
  270. package/src/table/header-select.jsx +1 -1
  271. package/src/table/model-column.jsx +1 -1
  272. package/src/table/model-row.jsx +2 -2
  273. package/src/table/{select-calculator.mjs → select-calculator.js} +1 -1
  274. package/src/table/settings/column-row.jsx +2 -2
  275. package/src/table/settings/download-action.jsx +3 -3
  276. package/src/table/settings/index.jsx +3 -3
  277. package/src/table/table-settings.js +5 -4
  278. package/src/table/table.jsx +8 -8
  279. package/src/table/{use-sorting.mjs → use-sorting.js} +1 -1
  280. package/src/table/worker-plugins-check-all-checkbox.jsx +2 -2
  281. package/src/table/worker-plugins-checkbox.jsx +2 -2
  282. package/src/{translated-collections.mjs → translated-collections.js} +1 -1
  283. package/src/updated-attribute.jsx +1 -1
  284. package/src/{use-breakpoint.mjs → use-breakpoint.js} +2 -2
  285. package/src/use-can-can.js +55 -0
  286. package/src/{use-collection.mjs → use-collection.js} +4 -4
  287. package/src/{use-created-event.mjs → use-created-event.js} +2 -2
  288. package/src/{use-current-user.mjs → use-current-user.js} +6 -5
  289. package/src/{use-destroyed-event.mjs → use-destroyed-event.js} +2 -2
  290. package/src/{use-input.mjs → use-input.js} +5 -5
  291. package/src/use-model-event.js +2 -2
  292. package/src/{use-model.mjs → use-model.js} +4 -4
  293. package/src/{use-resize-observer.mjs → use-resize-observer.js} +1 -1
  294. package/src/use-router.jsx +2 -2
  295. package/src/{use-updated-event.mjs → use-updated-event.js} +2 -2
  296. package/src/{use-validation-errors.mjs → use-validation-errors.js} +3 -3
  297. package/src/utils/checkbox.jsx +2 -2
  298. package/src/{validation-error.mjs → validation-error.js} +1 -1
  299. package/src/{validation-errors.mjs → validation-errors.js} +1 -1
  300. package/src/with-current-user.jsx +1 -1
  301. package/src/with-model.jsx +1 -1
  302. package/__tests__/base-model.test.mjs +0 -71
  303. package/__tests__/cable-connection-pool.test.mjs +0 -227
  304. package/__tests__/cable-subscription-pool.test.mjs +0 -27
  305. package/__tests__/can-can.test.mjs +0 -34
  306. package/__tests__/collection.test.mjs +0 -51
  307. package/__tests__/custom-error.test.mjs +0 -13
  308. package/__tests__/model-name.test.mjs +0 -34
  309. package/__tests__/model-prop-type.test.mjs +0 -113
  310. package/__tests__/params.test.mjs +0 -40
  311. package/__tests__/routes-native.test.mjs +0 -104
  312. package/__tests__/routes.test.mjs +0 -47
  313. package/__tests__/serializer.test.mjs +0 -30
  314. package/__tests__/support/task.mjs +0 -27
  315. package/__tests__/support/user.mjs +0 -32
  316. package/index.js +0 -1
  317. package/jest.config.js +0 -9
  318. package/src/event-created.jsx +0 -12
  319. package/src/event-destroyed.jsx +0 -25
  320. package/src/event-emitter-listener.jsx +0 -10
  321. package/src/event-listener.jsx +0 -25
  322. package/src/event-updated.jsx +0 -27
  323. package/src/super-admin/layout/menu/menu-item/style.scss +0 -10
  324. package/src/use-can-can.mjs +0 -48
  325. package/src/with-can-can.jsx +0 -12
  326. package/webpack.config.js +0 -15
  327. /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
  328. /package/src/base-model/{column.mjs → column.js} +0 -0
  329. /package/src/base-model/{scope.mjs → scope.js} +0 -0
  330. /package/src/{cache-key-generator.mjs → cache-key-generator.js} +0 -0
  331. /package/src/{channels-consumer.mjs → channels-consumer.js} +0 -0
  332. /package/src/{command-submit-data.mjs → command-submit-data.js} +0 -0
  333. /package/src/{config.mjs → config.js} +0 -0
  334. /package/src/{data-set-to-attributes.mjs → data-set-to-attributes.js} +0 -0
  335. /package/src/draggable-sort/{controller.mjs → controller.js} +0 -0
  336. /package/src/{error-messages.mjs → error-messages.js} +0 -0
  337. /package/src/{events.mjs → events.js} +0 -0
  338. /package/src/inputs/{auto-submit.mjs → auto-submit.js} +0 -0
  339. /package/src/inputs/{id-for-component.mjs → id-for-component.js} +0 -0
  340. /package/src/inputs/{name-for-component.mjs → name-for-component.js} +0 -0
  341. /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
  342. /package/src/{logger.mjs → logger.js} +0 -0
  343. /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
  344. /package/src/{money-formatter.mjs → money-formatter.js} +0 -0
  345. /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
  346. /package/src/{result.mjs → result.js} +0 -0
  347. /package/src/{routes.mjs → routes.js} +0 -0
  348. /package/src/{run-last.mjs → run-last.js} +0 -0
  349. /package/src/{serializer.mjs → serializer.js} +0 -0
  350. /package/src/table/{column-identifier.mjs → column-identifier.js} +0 -0
  351. /package/src/table/{column-visible.mjs → column-visible.js} +0 -0
  352. /package/src/table/{model-callback-args.mjs → model-callback-args.js} +0 -0
  353. /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
  354. /package/src/{url-encode.mjs → url-encode.js} +0 -0
  355. /package/src/{use-event-emitter.mjs → use-event-emitter.js} +0 -0
  356. /package/src/{use-event-listener.mjs → use-event-listener.js} +0 -0
  357. /package/src/{use-screen-layout.mjs → use-screen-layout.js} +0 -0
@@ -0,0 +1,140 @@
1
+ import { dig, digg } from "diggerize";
2
+ import { useCallback, useEffect, useMemo } from "react";
3
+ import idForComponent from "./inputs/id-for-component";
4
+ import nameForComponent from "./inputs/name-for-component";
5
+ import strftime from "strftime";
6
+ import useShape from "set-state-compare/src/use-shape";
7
+ import useValidationErrors from "./use-validation-errors";
8
+ const useInput = ({
9
+ props,
10
+ wrapperOptions,
11
+ ...useInputRestProps
12
+ }) => {
13
+ const useInputRestPropsKeys = Object.keys(useInputRestProps);
14
+ if (useInputRestPropsKeys.length > 0) {
15
+ throw new Error(`Unknown props given to useInput: ${useInputRestPropsKeys.join(", ")}`);
16
+ }
17
+ const s = useShape(props);
18
+ s.useStates({
19
+ form: undefined
20
+ });
21
+ useEffect(() => {
22
+ setForm();
23
+ }, [s.props.inputRef?.current]);
24
+ s.meta.fakeComponent = {
25
+ props
26
+ };
27
+ s.meta.isCheckbox = props.type == "checkbox" || wrapperOptions?.type == "checkbox";
28
+ s.meta.isSelect = wrapperOptions?.type == "select";
29
+ const formatValue = useCallback(value => {
30
+ const {
31
+ formatValue
32
+ } = s.props;
33
+ if (formatValue) {
34
+ return formatValue(value);
35
+ } else if (value instanceof Date && !isNaN(value.getTime())) {
36
+ // We need to use a certain format for datetime-local
37
+ if (inputType() == "datetime-local") {
38
+ return strftime("%Y-%m-%dT%H:%M:%S", value);
39
+ } else if (inputType() == "date") {
40
+ return strftime("%Y-%m-%d", value);
41
+ }
42
+ }
43
+ return value;
44
+ }, []);
45
+ const inputDefaultChecked = useCallback(() => {
46
+ if ("defaultChecked" in s.props) {
47
+ return s.props.defaultChecked;
48
+ } else if (s.props.attribute && s.props.model) {
49
+ if (!s.props.model[s.props.attribute]) throw new Error(`No such attribute: ${s.props.attribute}`);
50
+ return s.props.model[s.props.attribute]();
51
+ }
52
+ }, []);
53
+ const inputDefaultValue = useCallback(() => {
54
+ if ("defaultValue" in s.props) {
55
+ return formatValue(s.props.defaultValue);
56
+ } else if (s.props.model && s.props.attribute) {
57
+ if (!s.props.model[s.props.attribute]) {
58
+ throw new Error(`No such attribute defined on resource: ${digg(s.props.model.modelClassData(), "name")}#${s.props.attribute}`);
59
+ }
60
+ return formatValue(s.props.model[s.props.attribute]());
61
+ }
62
+ }, []);
63
+ const inputRefBackup = useCallback(() => {
64
+ if (!s.meta._inputRefBackup) s.meta._inputRefBackup = React.createRef();
65
+ return s.meta._inputRefBackup;
66
+ }, []);
67
+ const inputRef = useCallback(() => s.props.inputRef || inputRefBackup());
68
+ const inputType = useCallback(() => {
69
+ if ("type" in s.props) {
70
+ return s.props.type;
71
+ } else if (s.m.isCheckbox) {
72
+ return "checkbox";
73
+ } else {
74
+ return "text";
75
+ }
76
+ }, []);
77
+ const label = useCallback(() => {
78
+ if ("label" in s.props) {
79
+ return s.props.label;
80
+ } else if (s.props.attribute && s.props.model) {
81
+ return s.props.model.modelClass().humanAttributeName(s.props.attribute);
82
+ }
83
+ }, []);
84
+ const setForm = useCallback(() => {
85
+ const inputElement = inputRef().current;
86
+ let form;
87
+ if (inputElement) form = dig(inputElement, "form");
88
+ if (form && form != s.s.form) s.set({
89
+ form
90
+ });
91
+ }, []);
92
+ const getId = useCallback(() => idForComponent(s.m.fakeComponent), []);
93
+ const getName = useCallback(() => nameForComponent(s.m.fakeComponent), []);
94
+ const getInputProps = useCallback(() => {
95
+ const givenInputProps = s.props.inputProps || {};
96
+ const inputProps = Object.assign({
97
+ id: getId(),
98
+ name: getName(),
99
+ ref: inputRef()
100
+ }, givenInputProps);
101
+ if (s.m.isCheckbox) {
102
+ if ("checked" in s.props) {
103
+ inputProps.checked = s.props.checked;
104
+ }
105
+ if ("defaultChecked" in s.props || s.props.attribute && s.props.model) {
106
+ inputProps.defaultChecked = inputDefaultChecked();
107
+ }
108
+ } else if ("value" in s.props) {
109
+ inputProps.value = s.props.value;
110
+ } else if (!("value" in s.props)) {
111
+ inputProps.defaultValue = inputDefaultValue();
112
+ }
113
+ return inputProps;
114
+ }, []);
115
+ const {
116
+ inputProps: oldInputProps,
117
+ wrapperOpts: oldWrapperOpts,
118
+ ...restProps
119
+ } = props;
120
+ const type = inputType();
121
+ s.meta.inputProps = getInputProps();
122
+ s.meta.inputNameWithoutId = useMemo(() => s.m.inputProps.name?.replace(/\[(.+)_id\]$/, "[$1]"), [s.m.inputProps.name]);
123
+ if (!s.m.inputProps.ref) throw new Error("No input ref?");
124
+ if (!s.m.isSelect) s.m.inputProps.type = type;
125
+ const {
126
+ validationErrors
127
+ } = useValidationErrors(validationError => validationError.inputName == s.m.inputProps.name || validationError.inputName == s.m.inputNameWithoutId);
128
+ const wrapperOpts = {
129
+ errors: validationErrors,
130
+ form: s.s.form,
131
+ label: label()
132
+ };
133
+ return {
134
+ inputProps: s.m.inputProps,
135
+ wrapperOpts,
136
+ restProps
137
+ };
138
+ };
139
+ export default useInput;
140
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWciLCJkaWdnIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwiaWRGb3JDb21wb25lbnQiLCJuYW1lRm9yQ29tcG9uZW50Iiwic3RyZnRpbWUiLCJ1c2VTaGFwZSIsInVzZVZhbGlkYXRpb25FcnJvcnMiLCJ1c2VJbnB1dCIsInByb3BzIiwid3JhcHBlck9wdGlvbnMiLCJ1c2VJbnB1dFJlc3RQcm9wcyIsInVzZUlucHV0UmVzdFByb3BzS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJFcnJvciIsImpvaW4iLCJzIiwidXNlU3RhdGVzIiwiZm9ybSIsInVuZGVmaW5lZCIsInNldEZvcm0iLCJpbnB1dFJlZiIsImN1cnJlbnQiLCJtZXRhIiwiZmFrZUNvbXBvbmVudCIsImlzQ2hlY2tib3giLCJ0eXBlIiwiaXNTZWxlY3QiLCJmb3JtYXRWYWx1ZSIsInZhbHVlIiwiRGF0ZSIsImlzTmFOIiwiZ2V0VGltZSIsImlucHV0VHlwZSIsImlucHV0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0Q2hlY2tlZCIsImF0dHJpYnV0ZSIsIm1vZGVsIiwiaW5wdXREZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJtb2RlbENsYXNzRGF0YSIsImlucHV0UmVmQmFja3VwIiwiX2lucHV0UmVmQmFja3VwIiwiUmVhY3QiLCJjcmVhdGVSZWYiLCJtIiwibGFiZWwiLCJtb2RlbENsYXNzIiwiaHVtYW5BdHRyaWJ1dGVOYW1lIiwiaW5wdXRFbGVtZW50Iiwic2V0IiwiZ2V0SWQiLCJnZXROYW1lIiwiZ2V0SW5wdXRQcm9wcyIsImdpdmVuSW5wdXRQcm9wcyIsImlucHV0UHJvcHMiLCJhc3NpZ24iLCJpZCIsIm5hbWUiLCJyZWYiLCJjaGVja2VkIiwib2xkSW5wdXRQcm9wcyIsIndyYXBwZXJPcHRzIiwib2xkV3JhcHBlck9wdHMiLCJyZXN0UHJvcHMiLCJpbnB1dE5hbWVXaXRob3V0SWQiLCJyZXBsYWNlIiwidmFsaWRhdGlvbkVycm9ycyIsInZhbGlkYXRpb25FcnJvciIsImlucHV0TmFtZSIsImVycm9ycyJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2UtaW5wdXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IGlkRm9yQ29tcG9uZW50IGZyb20gXCIuL2lucHV0cy9pZC1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBuYW1lRm9yQ29tcG9uZW50IGZyb20gXCIuL2lucHV0cy9uYW1lLWZvci1jb21wb25lbnRcIlxuaW1wb3J0IHN0cmZ0aW1lIGZyb20gXCJzdHJmdGltZVwiXG5pbXBvcnQgdXNlU2hhcGUgZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy91c2Utc2hhcGVcIlxuaW1wb3J0IHVzZVZhbGlkYXRpb25FcnJvcnMgZnJvbSBcIi4vdXNlLXZhbGlkYXRpb24tZXJyb3JzXCJcblxuY29uc3QgdXNlSW5wdXQgPSAoe3Byb3BzLCB3cmFwcGVyT3B0aW9ucywgLi4udXNlSW5wdXRSZXN0UHJvcHN9KSA9PiB7XG4gIGNvbnN0IHVzZUlucHV0UmVzdFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKHVzZUlucHV0UmVzdFByb3BzKVxuXG4gIGlmICh1c2VJbnB1dFJlc3RQcm9wc0tleXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwcm9wcyBnaXZlbiB0byB1c2VJbnB1dDogJHt1c2VJbnB1dFJlc3RQcm9wc0tleXMuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICBjb25zdCBzID0gdXNlU2hhcGUocHJvcHMpXG5cbiAgcy51c2VTdGF0ZXMoe1xuICAgIGZvcm06IHVuZGVmaW5lZFxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0Rm9ybSgpXG4gIH0sIFtzLnByb3BzLmlucHV0UmVmPy5jdXJyZW50XSlcblxuICBzLm1ldGEuZmFrZUNvbXBvbmVudCA9IHtwcm9wc31cbiAgcy5tZXRhLmlzQ2hlY2tib3ggPSBwcm9wcy50eXBlID09IFwiY2hlY2tib3hcIiB8fCB3cmFwcGVyT3B0aW9ucz8udHlwZSA9PSBcImNoZWNrYm94XCJcbiAgcy5tZXRhLmlzU2VsZWN0ID0gd3JhcHBlck9wdGlvbnM/LnR5cGUgPT0gXCJzZWxlY3RcIlxuXG4gIGNvbnN0IGZvcm1hdFZhbHVlID0gdXNlQ2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgY29uc3Qge2Zvcm1hdFZhbHVlfSA9IHMucHJvcHNcblxuICAgIGlmIChmb3JtYXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVzZSBhIGNlcnRhaW4gZm9ybWF0IGZvciBkYXRldGltZS1sb2NhbFxuICAgICAgaWYgKGlucHV0VHlwZSgpID09IFwiZGF0ZXRpbWUtbG9jYWxcIikge1xuICAgICAgICByZXR1cm4gc3RyZnRpbWUoXCIlWS0lbS0lZFQlSDolTTolU1wiLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXRUeXBlKCkgPT0gXCJkYXRlXCIpIHtcbiAgICAgICAgcmV0dXJuIHN0cmZ0aW1lKFwiJVktJW0tJWRcIiwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGlucHV0RGVmYXVsdENoZWNrZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKFwiZGVmYXVsdENoZWNrZWRcIiBpbiBzLnByb3BzKSB7XG4gICAgICByZXR1cm4gcy5wcm9wcy5kZWZhdWx0Q2hlY2tlZFxuICAgIH0gZWxzZSBpZiAocy5wcm9wcy5hdHRyaWJ1dGUgJiYgcy5wcm9wcy5tb2RlbCkge1xuICAgICAgaWYgKCFzLnByb3BzLm1vZGVsW3MucHJvcHMuYXR0cmlidXRlXSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZTogJHtzLnByb3BzLmF0dHJpYnV0ZX1gKVxuXG4gICAgICByZXR1cm4gcy5wcm9wcy5tb2RlbFtzLnByb3BzLmF0dHJpYnV0ZV0oKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaW5wdXREZWZhdWx0VmFsdWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKFwiZGVmYXVsdFZhbHVlXCIgaW4gcy5wcm9wcykge1xuICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKHMucHJvcHMuZGVmYXVsdFZhbHVlKVxuICAgIH0gZWxzZSBpZiAocy5wcm9wcy5tb2RlbCAmJiBzLnByb3BzLmF0dHJpYnV0ZSkge1xuICAgICAgaWYgKCFzLnByb3BzLm1vZGVsW3MucHJvcHMuYXR0cmlidXRlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggYXR0cmlidXRlIGRlZmluZWQgb24gcmVzb3VyY2U6ICR7ZGlnZyhzLnByb3BzLm1vZGVsLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKX0jJHtzLnByb3BzLmF0dHJpYnV0ZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybWF0VmFsdWUocy5wcm9wcy5tb2RlbFtzLnByb3BzLmF0dHJpYnV0ZV0oKSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGlucHV0UmVmQmFja3VwID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghcy5tZXRhLl9pbnB1dFJlZkJhY2t1cCkgcy5tZXRhLl9pbnB1dFJlZkJhY2t1cCA9IFJlYWN0LmNyZWF0ZVJlZigpXG5cbiAgICByZXR1cm4gcy5tZXRhLl9pbnB1dFJlZkJhY2t1cFxuICB9LCBbXSlcblxuICBjb25zdCBpbnB1dFJlZiA9IHVzZUNhbGxiYWNrKCgpID0+IHMucHJvcHMuaW5wdXRSZWYgfHwgaW5wdXRSZWZCYWNrdXAoKSlcblxuICBjb25zdCBpbnB1dFR5cGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKFwidHlwZVwiIGluIHMucHJvcHMpIHtcbiAgICAgIHJldHVybiBzLnByb3BzLnR5cGVcbiAgICB9IGVsc2UgaWYgKHMubS5pc0NoZWNrYm94KSB7XG4gICAgICByZXR1cm4gXCJjaGVja2JveFwiXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInRleHRcIlxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgbGFiZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKFwibGFiZWxcIiBpbiBzLnByb3BzKSB7XG4gICAgICByZXR1cm4gcy5wcm9wcy5sYWJlbFxuICAgIH0gZWxzZSBpZiAocy5wcm9wcy5hdHRyaWJ1dGUgJiYgcy5wcm9wcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIHMucHJvcHMubW9kZWwubW9kZWxDbGFzcygpLmh1bWFuQXR0cmlidXRlTmFtZShzLnByb3BzLmF0dHJpYnV0ZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNldEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gaW5wdXRSZWYoKS5jdXJyZW50XG5cbiAgICBsZXQgZm9ybVxuXG4gICAgaWYgKGlucHV0RWxlbWVudCkgZm9ybSA9IGRpZyhpbnB1dEVsZW1lbnQsIFwiZm9ybVwiKVxuICAgIGlmIChmb3JtICYmIGZvcm0gIT0gcy5zLmZvcm0pIHMuc2V0KHtmb3JtfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgZ2V0SWQgPSB1c2VDYWxsYmFjaygoKSA9PiBpZEZvckNvbXBvbmVudChzLm0uZmFrZUNvbXBvbmVudCksIFtdKVxuICBjb25zdCBnZXROYW1lID0gdXNlQ2FsbGJhY2soKCkgPT4gbmFtZUZvckNvbXBvbmVudChzLm0uZmFrZUNvbXBvbmVudCksIFtdKVxuXG4gIGNvbnN0IGdldElucHV0UHJvcHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZ2l2ZW5JbnB1dFByb3BzID0gcy5wcm9wcy5pbnB1dFByb3BzIHx8IHt9XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGlkOiBnZXRJZCgpLFxuICAgICAgICBuYW1lOiBnZXROYW1lKCksXG4gICAgICAgIHJlZjogaW5wdXRSZWYoKVxuICAgICAgfSxcbiAgICAgIGdpdmVuSW5wdXRQcm9wc1xuICAgIClcblxuICAgIGlmIChzLm0uaXNDaGVja2JveCkge1xuICAgICAgaWYgKFwiY2hlY2tlZFwiIGluIHMucHJvcHMpIHtcbiAgICAgICAgaW5wdXRQcm9wcy5jaGVja2VkID0gcy5wcm9wcy5jaGVja2VkXG4gICAgICB9XG5cbiAgICAgIGlmIChcImRlZmF1bHRDaGVja2VkXCIgaW4gcy5wcm9wcyB8fCAocy5wcm9wcy5hdHRyaWJ1dGUgJiYgcy5wcm9wcy5tb2RlbCkpIHtcbiAgICAgICAgaW5wdXRQcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IGlucHV0RGVmYXVsdENoZWNrZWQoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIHMucHJvcHMpIHtcbiAgICAgIGlucHV0UHJvcHMudmFsdWUgPSBzLnByb3BzLnZhbHVlXG4gICAgfSBlbHNlIGlmICghKFwidmFsdWVcIiBpbiBzLnByb3BzKSkge1xuICAgICAgaW5wdXRQcm9wcy5kZWZhdWx0VmFsdWUgPSBpbnB1dERlZmF1bHRWYWx1ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0UHJvcHNcbiAgfSwgW10pXG5cbiAgY29uc3Qge2lucHV0UHJvcHM6IG9sZElucHV0UHJvcHMsIHdyYXBwZXJPcHRzOiBvbGRXcmFwcGVyT3B0cywgLi4ucmVzdFByb3BzfSA9IHByb3BzXG4gIGNvbnN0IHR5cGUgPSBpbnB1dFR5cGUoKVxuXG4gIHMubWV0YS5pbnB1dFByb3BzID0gZ2V0SW5wdXRQcm9wcygpXG4gIHMubWV0YS5pbnB1dE5hbWVXaXRob3V0SWQgPSB1c2VNZW1vKCgpID0+IHMubS5pbnB1dFByb3BzLm5hbWU/LnJlcGxhY2UoL1xcWyguKylfaWRcXF0kLywgXCJbJDFdXCIpLCBbcy5tLmlucHV0UHJvcHMubmFtZV0pXG5cbiAgaWYgKCFzLm0uaW5wdXRQcm9wcy5yZWYpIHRocm93IG5ldyBFcnJvcihcIk5vIGlucHV0IHJlZj9cIilcbiAgaWYgKCFzLm0uaXNTZWxlY3QpIHMubS5pbnB1dFByb3BzLnR5cGUgPSB0eXBlXG5cbiAgY29uc3Qge3ZhbGlkYXRpb25FcnJvcnN9ID0gdXNlVmFsaWRhdGlvbkVycm9ycygodmFsaWRhdGlvbkVycm9yKSA9PlxuICAgIHZhbGlkYXRpb25FcnJvci5pbnB1dE5hbWUgPT0gcy5tLmlucHV0UHJvcHMubmFtZSB8fCB2YWxpZGF0aW9uRXJyb3IuaW5wdXROYW1lID09IHMubS5pbnB1dE5hbWVXaXRob3V0SWRcbiAgKVxuXG4gIGNvbnN0IHdyYXBwZXJPcHRzID0ge1xuICAgIGVycm9yczogdmFsaWRhdGlvbkVycm9ycyxcbiAgICBmb3JtOiBzLnMuZm9ybSxcbiAgICBsYWJlbDogbGFiZWwoKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbnB1dFByb3BzOiBzLm0uaW5wdXRQcm9wcyxcbiAgICB3cmFwcGVyT3B0cyxcbiAgICByZXN0UHJvcHNcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VJbnB1dFxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxHQUFHLEVBQUVDLElBQUksUUFBTyxXQUFXO0FBQ25DLFNBQVFDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUNyRCxPQUFPQyxjQUFjLE1BQU0sMkJBQTJCO0FBQ3RELE9BQU9DLGdCQUFnQixNQUFNLDZCQUE2QjtBQUMxRCxPQUFPQyxRQUFRLE1BQU0sVUFBVTtBQUMvQixPQUFPQyxRQUFRLE1BQU0saUNBQWlDO0FBQ3RELE9BQU9DLG1CQUFtQixNQUFNLHlCQUF5QjtBQUV6RCxNQUFNQyxRQUFRLEdBQUdBLENBQUM7RUFBQ0MsS0FBSztFQUFFQyxjQUFjO0VBQUUsR0FBR0M7QUFBaUIsQ0FBQyxLQUFLO0VB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LENBQUM7SUFDL0M7SUFFQSxPQUFPaUIsVUFBVTtFQUNuQixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sTUFBTTtJQUFDQSxVQUFVLEVBQUVNLGFBQWE7SUFBRUMsV0FBVyxFQUFFQyxjQUFjO0lBQUUsR0FBR0M7RUFBUyxDQUFDLEdBQUd6RCxLQUFLO0VBQ3BGLE1BQU1tQixJQUFJLEdBQUdPLFNBQVMsQ0FBQyxDQUFDO0VBRXhCakIsQ0FBQyxDQUFDTyxJQUFJLENBQUNnQyxVQUFVLEdBQUdGLGFBQWEsQ0FBQyxDQUFDO0VBQ25DckMsQ0FBQyxDQUFDTyxJQUFJLENBQUMwQyxrQkFBa0IsR0FBR2pFLE9BQU8sQ0FBQyxNQUFNZ0IsQ0FBQyxDQUFDNkIsQ0FBQyxDQUFDVSxVQUFVLENBQUNHLElBQUksRUFBRVEsT0FBTyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDbEQsQ0FBQyxDQUFDNkIsQ0FBQyxDQUFDVSxVQUFVLENBQUNHLElBQUksQ0FBQyxDQUFDO0VBRXRILElBQUksQ0FBQzFDLENBQUMsQ0FBQzZCLENBQUMsQ0FBQ1UsVUFBVSxDQUFDSSxHQUFHLEVBQUUsTUFBTSxJQUFJN0MsS0FBSyxDQUFDLGVBQWUsQ0FBQztFQUN6RCxJQUFJLENBQUNFLENBQUMsQ0FBQzZCLENBQUMsQ0FBQ2xCLFFBQVEsRUFBRVgsQ0FBQyxDQUFDNkIsQ0FBQyxDQUFDVSxVQUFVLENBQUM3QixJQUFJLEdBQUdBLElBQUk7RUFFN0MsTUFBTTtJQUFDeUM7RUFBZ0IsQ0FBQyxHQUFHOUQsbUJBQW1CLENBQUUrRCxlQUFlLElBQzdEQSxlQUFlLENBQUNDLFNBQVMsSUFBSXJELENBQUMsQ0FBQzZCLENBQUMsQ0FBQ1UsVUFBVSxDQUFDRyxJQUFJLElBQUlVLGVBQWUsQ0FBQ0MsU0FBUyxJQUFJckQsQ0FBQyxDQUFDNkIsQ0FBQyxDQUFDb0Isa0JBQ3ZGLENBQUM7RUFFRCxNQUFNSCxXQUFXLEdBQUc7SUFDbEJRLE1BQU0sRUFBRUgsZ0JBQWdCO0lBQ3hCakQsSUFBSSxFQUFFRixDQUFDLENBQUNBLENBQUMsQ0FBQ0UsSUFBSTtJQUNkNEIsS0FBSyxFQUFFQSxLQUFLLENBQUM7RUFDZixDQUFDO0VBRUQsT0FBTztJQUNMUyxVQUFVLEVBQUV2QyxDQUFDLENBQUM2QixDQUFDLENBQUNVLFVBQVU7SUFDMUJPLFdBQVc7SUFDWEU7RUFDRixDQUFDO0FBQ0gsQ0FBQztBQUVELGVBQWUxRCxRQUFRIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,60 @@
1
+ import { useCallback, useLayoutEffect, useMemo } from "react";
2
+ import debounceFunction from "debounce";
3
+ import ModelEvents from "./model-events";
4
+ import useShape from "set-state-compare/src/use-shape";
5
+ const apiMakerUseModelEvent = (model, event, onCallback, props) => {
6
+ const {
7
+ active = true,
8
+ debounce,
9
+ onConnected,
10
+ ...restProps
11
+ } = props || {};
12
+ if (Object.keys(restProps).length > 0) {
13
+ throw new Error(`Unknown props given to apiMakerUseModelEvent: ${Object.keys(restProps).join(", ")}`);
14
+ }
15
+ const s = useShape({
16
+ active,
17
+ debounce,
18
+ model,
19
+ onCallback
20
+ });
21
+ const debounceCallback = useMemo(() => {
22
+ if (typeof debounce == "number") {
23
+ return debounceFunction(s.p.onCallback, debounce);
24
+ } else {
25
+ return debounceFunction(s.p.onCallback);
26
+ }
27
+ }, [debounce]);
28
+ s.updateMeta({
29
+ debounceCallback
30
+ });
31
+ const onCallbackCallback = useCallback((...args) => {
32
+ if (!s.p.active) {
33
+ return;
34
+ }
35
+ if (s.p.debounce) {
36
+ s.m.debounceCallback(...args);
37
+ } else {
38
+ s.p.onCallback(...args);
39
+ }
40
+ }, []);
41
+ useLayoutEffect(() => {
42
+ let connectEvent, onConnectedListener;
43
+ if (model) {
44
+ connectEvent = ModelEvents.connect(model, event, onCallbackCallback);
45
+ if (onConnected) {
46
+ onConnectedListener = connectEvent.events.addListener("connected", onConnected);
47
+ }
48
+ }
49
+ return () => {
50
+ if (onConnectedListener) {
51
+ connectEvent.events.removeListener("connected", onConnected);
52
+ }
53
+ if (connectEvent) {
54
+ connectEvent.unsubscribe();
55
+ }
56
+ };
57
+ }, [model?.id()]);
58
+ };
59
+ export default apiMakerUseModelEvent;
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJkZWJvdW5jZUZ1bmN0aW9uIiwiTW9kZWxFdmVudHMiLCJ1c2VTaGFwZSIsImFwaU1ha2VyVXNlTW9kZWxFdmVudCIsIm1vZGVsIiwiZXZlbnQiLCJvbkNhbGxiYWNrIiwicHJvcHMiLCJhY3RpdmUiLCJkZWJvdW5jZSIsIm9uQ29ubmVjdGVkIiwicmVzdFByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIkVycm9yIiwiam9pbiIsInMiLCJkZWJvdW5jZUNhbGxiYWNrIiwicCIsInVwZGF0ZU1ldGEiLCJvbkNhbGxiYWNrQ2FsbGJhY2siLCJhcmdzIiwibSIsImNvbm5lY3RFdmVudCIsIm9uQ29ubmVjdGVkTGlzdGVuZXIiLCJjb25uZWN0IiwiZXZlbnRzIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInVuc3Vic2NyaWJlIiwiaWQiXSwic291cmNlcyI6WyIuLi9zcmMvdXNlLW1vZGVsLWV2ZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgTW9kZWxFdmVudHMgZnJvbSBcIi4vbW9kZWwtZXZlbnRzXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3VzZS1zaGFwZVwiXG5cbmNvbnN0IGFwaU1ha2VyVXNlTW9kZWxFdmVudCA9IChtb2RlbCwgZXZlbnQsIG9uQ2FsbGJhY2ssIHByb3BzKSA9PiB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBkZWJvdW5jZSwgb25Db25uZWN0ZWQsIC4uLnJlc3RQcm9wc30gPSBwcm9wcyB8fCB7fVxuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gYXBpTWFrZXJVc2VNb2RlbEV2ZW50OiAke09iamVjdC5rZXlzKHJlc3RQcm9wcykuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICBjb25zdCBzID0gdXNlU2hhcGUoe2FjdGl2ZSwgZGVib3VuY2UsIG1vZGVsLCBvbkNhbGxiYWNrfSlcblxuICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25DYWxsYmFjaywgZGVib3VuY2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHMucC5vbkNhbGxiYWNrKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlXSlcblxuICBzLnVwZGF0ZU1ldGEoe2RlYm91bmNlQ2FsbGJhY2t9KVxuXG4gIGNvbnN0IG9uQ2FsbGJhY2tDYWxsYmFjayA9IHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFzLnAuYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocy5wLmRlYm91bmNlKSB7XG4gICAgICBzLm0uZGVib3VuY2VDYWxsYmFjayguLi5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzLnAub25DYWxsYmFjayguLi5hcmdzKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY29ubmVjdEV2ZW50LCBvbkNvbm5lY3RlZExpc3RlbmVyXG5cbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIGNvbm5lY3RFdmVudCA9IE1vZGVsRXZlbnRzLmNvbm5lY3QobW9kZWwsIGV2ZW50LCBvbkNhbGxiYWNrQ2FsbGJhY2spXG5cbiAgICAgIGlmIChvbkNvbm5lY3RlZCkge1xuICAgICAgICBvbkNvbm5lY3RlZExpc3RlbmVyID0gY29ubmVjdEV2ZW50LmV2ZW50cy5hZGRMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKG9uQ29ubmVjdGVkTGlzdGVuZXIpIHtcbiAgICAgICAgY29ubmVjdEV2ZW50LmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3RFdmVudCkge1xuICAgICAgICBjb25uZWN0RXZlbnQudW5zdWJzY3JpYmUoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW21vZGVsPy5pZCgpXSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBpTWFrZXJVc2VNb2RlbEV2ZW50XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFdBQVcsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUMzRCxPQUFPQyxnQkFBZ0IsTUFBTSxVQUFVO0FBQ3ZDLE9BQU9DLFdBQVcsTUFBTSxnQkFBZ0I7QUFDeEMsT0FBT0MsUUFBUSxNQUFNLGlDQUFpQztBQUV0RCxNQUFNQyxxQkFBcUIsR0FBR0EsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxLQUFLO0VBQ2pFLE1BQU07SUFBQ0MsTUFBTSxHQUFHLElBQUk7SUFBRUMsUUFBUTtJQUFFQyxXQUFXO0lBQUUsR0FBR0M7RUFBUyxDQUFDLEdBQUdKLEtBQUssSUFBSSxDQUFDLENBQUM7RUFFeEUsSUFBSUssTUFBTSxDQUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3JDLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGlEQUFpREgsTUFBTSxDQUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUFDSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN2RztFQUVBLE1BQU1DLENBQUMsR0FBR2YsUUFBUSxDQUFDO0lBQUNNLE1BQU07SUFBRUMsUUFBUTtJQUFFTCxLQUFLO0lBQUVFO0VBQVUsQ0FBQyxDQUFDO0VBRXpELE1BQU1ZLGdCQUFnQixHQUFHbkIsT0FBTyxDQUFDLE1BQU07SUFDckMsSUFBSSxPQUFPVSxRQUFRLElBQUksUUFBUSxFQUFFO01BQy9CLE9BQU9ULGdCQUFnQixDQUFDaUIsQ0FBQyxDQUFDRSxDQUFDLENBQUNiLFVBQVUsRUFBRUcsUUFBUSxDQUFDO0lBQ25ELENBQUMsTUFBTTtNQUNMLE9BQU9ULGdCQUFnQixDQUFDaUIsQ0FBQyxDQUFDRSxDQUFDLENBQUNiLFVBQVUsQ0FBQztJQUN6QztFQUNGLENBQUMsRUFBRSxDQUFDRyxRQUFRLENBQUMsQ0FBQztFQUVkUSxDQUFDLENBQUNHLFVBQVUsQ0FBQztJQUFDRjtFQUFnQixDQUFDLENBQUM7RUFFaEMsTUFBTUcsa0JBQWtCLEdBQUd4QixXQUFXLENBQUMsQ0FBQyxHQUFHeUIsSUFBSSxLQUFLO0lBQ2xELElBQUksQ0FBQ0wsQ0FBQyxDQUFDRSxDQUFDLENBQUNYLE1BQU0sRUFBRTtNQUNmO0lBQ0Y7SUFFQSxJQUFJUyxDQUFDLENBQUNFLENBQUMsQ0FBQ1YsUUFBUSxFQUFFO01BQ2hCUSxDQUFDLENBQUNNLENBQUMsQ0FBQ0wsZ0JBQWdCLENBQUMsR0FBR0ksSUFBSSxDQUFDO0lBQy9CLENBQUMsTUFBTTtNQUNMTCxDQUFDLENBQUNFLENBQUMsQ0FBQ2IsVUFBVSxDQUFDLEdBQUdnQixJQUFJLENBQUM7SUFDekI7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU54QixlQUFlLENBQUMsTUFBTTtJQUNwQixJQUFJMEIsWUFBWSxFQUFFQyxtQkFBbUI7SUFFckMsSUFBSXJCLEtBQUssRUFBRTtNQUNUb0IsWUFBWSxHQUFHdkIsV0FBVyxDQUFDeUIsT0FBTyxDQUFDdEIsS0FBSyxFQUFFQyxLQUFLLEVBQUVnQixrQkFBa0IsQ0FBQztNQUVwRSxJQUFJWCxXQUFXLEVBQUU7UUFDZmUsbUJBQW1CLEdBQUdELFlBQVksQ0FBQ0csTUFBTSxDQUFDQyxXQUFXLENBQUMsV0FBVyxFQUFFbEIsV0FBVyxDQUFDO01BQ2pGO0lBQ0Y7SUFFQSxPQUFPLE1BQU07TUFDWCxJQUFJZSxtQkFBbUIsRUFBRTtRQUN2QkQsWUFBWSxDQUFDRyxNQUFNLENBQUNFLGNBQWMsQ0FBQyxXQUFXLEVBQUVuQixXQUFXLENBQUM7TUFDOUQ7TUFFQSxJQUFJYyxZQUFZLEVBQUU7UUFDaEJBLFlBQVksQ0FBQ00sV0FBVyxDQUFDLENBQUM7TUFDNUI7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUMxQixLQUFLLEVBQUUyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVELGVBQWU1QixxQkFBcUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,169 @@
1
+ import { useCallback, useLayoutEffect, useMemo } from "react";
2
+ import Devise from "./devise";
3
+ import * as inflection from "inflection";
4
+ import ModelEvents from "./model-events";
5
+ import useQueryParams from "on-location-changed/src/use-query-params";
6
+ import useShape from "set-state-compare/src/use-shape";
7
+ const useModel = (modelClassArg, argsArg = {}) => {
8
+ const queryParams = useQueryParams();
9
+ let args, modelClass;
10
+ if (typeof argsArg == "function") {
11
+ args = argsArg({
12
+ modelClass
13
+ });
14
+ } else {
15
+ args = argsArg;
16
+ }
17
+ const s = useShape(args);
18
+ s.useStates({
19
+ model: undefined,
20
+ notFound: undefined
21
+ });
22
+ if ("active" in s.props && !s.props.active) {
23
+ s.meta.active = false;
24
+ } else {
25
+ s.meta.active = true;
26
+ }
27
+ if (typeof modelClassArg == "object") {
28
+ modelClass = modelClassArg.callback({
29
+ queryParams
30
+ });
31
+ } else {
32
+ modelClass = modelClassArg;
33
+ }
34
+ const paramsVariableName = `${modelClass.modelName().paramKey()}_id`;
35
+ let modelId;
36
+ if (args.loadByQueryParam) {
37
+ modelId = args.loadByQueryParam({
38
+ queryParams
39
+ });
40
+ } else if (!args.query) {
41
+ if (!args.match) throw new Error("Both 'loadByQueryParam' and 'match' wasn't given");
42
+ modelId = args.match.params[paramsVariableName] || args.match.params.id;
43
+ }
44
+ const modelVariableName = inflection.camelize(modelClass.modelClassData().name, true);
45
+ const cacheArgs = [modelId];
46
+ const loadExistingModel = useCallback(async () => {
47
+ let query;
48
+ if (s.m.modelId) {
49
+ query = modelClass.ransack({
50
+ id_eq: s.m.modelId
51
+ });
52
+ } else if (s.m.args.query) {
53
+ query = s.m.args.query.clone();
54
+ } else {
55
+ throw new Error(`No model ID was given: ${s.m.modelId} by '${paramsVariableName}' in query params: ${Object.keys(s.props.match.params).join(", ")}`);
56
+ }
57
+ if (s.props.abilities) query.abilities(s.p.abilities);
58
+ if (s.props.preload) query.preload(s.p.preload);
59
+ if (s.props.select) query.select(s.p.select);
60
+ const model = await query.first();
61
+ s.set({
62
+ model,
63
+ notFound: !model
64
+ });
65
+ }, []);
66
+ const loadNewModel = useCallback(async () => {
67
+ const ModelClass = modelClass;
68
+ const paramKey = ModelClass.modelName().paramKey();
69
+ const modelDataFromParams = s.m.queryParams[paramKey] || {};
70
+ let defaults = {};
71
+ if (s.props.newIfNoId?.defaults) {
72
+ defaults = await s.props.newIfNoId.defaults();
73
+ }
74
+ const modelData = Object.assign(defaults, s.props.newAttributes, modelDataFromParams);
75
+ const model = new ModelClass({
76
+ isNewRecord: true,
77
+ data: {
78
+ a: modelData
79
+ }
80
+ });
81
+ s.set({
82
+ model
83
+ });
84
+ }, []);
85
+ const loadModel = useCallback(async () => {
86
+ if (!s.m.active) {
87
+ // Not active - don't do anything
88
+ } else if (s.props.newIfNoId && !s.m.modelId) {
89
+ return await loadNewModel();
90
+ } else if (!s.props.optional || s.m.modelId | s.m.args.query) {
91
+ return await loadExistingModel();
92
+ }
93
+ }, []);
94
+ const onDestroyed = useCallback(({
95
+ model
96
+ }) => {
97
+ const forwardArgs = {
98
+ model
99
+ };
100
+ forwardArgs[s.m.modelVariableName] = model;
101
+ s.p.onDestroyed(forwardArgs);
102
+ }, []);
103
+ const onSignedIn = useCallback(() => {
104
+ loadModel();
105
+ }, []);
106
+ const onSignedOut = useCallback(() => {
107
+ loadModel();
108
+ }, []);
109
+ if (args.cacheArgs) {
110
+ cacheArgs.push(...args.cacheArgs);
111
+ }
112
+ s.updateMeta({
113
+ args,
114
+ modelId,
115
+ modelVariableName,
116
+ queryParams
117
+ });
118
+ useMemo(() => {
119
+ loadModel();
120
+ }, cacheArgs);
121
+ useLayoutEffect(() => {
122
+ let reloadModelCallback;
123
+ if (args.events) {
124
+ reloadModelCallback = args.events.addListener("reloadModel", loadModel);
125
+ }
126
+ return () => {
127
+ if (reloadModelCallback) {
128
+ args.events.removeListener("reloadModel", loadModel);
129
+ }
130
+ };
131
+ }, [args.events]);
132
+ useLayoutEffect(() => {
133
+ let connectUpdated;
134
+ if (s.s.model && args.eventUpdated) {
135
+ connectUpdated = ModelEvents.connectUpdated(s.s.model, loadModel);
136
+ }
137
+ return () => {
138
+ connectUpdated?.unsubscribe();
139
+ };
140
+ }, [args.eventUpdated, s.s.model?.id()]);
141
+ useLayoutEffect(() => {
142
+ Devise.events().addListener("onDeviseSignIn", onSignedIn);
143
+ Devise.events().addListener("onDeviseSignOut", onSignedOut);
144
+ return () => {
145
+ Devise.events().removeListener("onDeviseSignIn", onSignedIn);
146
+ Devise.events().removeListener("onDeviseSignOut", onSignedOut);
147
+ };
148
+ });
149
+ useLayoutEffect(() => {
150
+ let connectDestroyed;
151
+ if (s.s.model && args.onDestroyed) {
152
+ connectDestroyed = ModelEvents.connectDestroyed(s.s.model, onDestroyed);
153
+ }
154
+ return () => {
155
+ connectDestroyed?.unsubscribe();
156
+ };
157
+ }, [args.onDestroyed, s.s.model?.id()]);
158
+ const result = {
159
+ model: s.s.model,
160
+ modelId,
161
+ notFound: s.s.notFound
162
+ };
163
+ result[modelVariableName] = s.s.model;
164
+ result[`${modelVariableName}Id`] = modelId;
165
+ result[`${modelVariableName}NotFound`] = s.s.notFound;
166
+ return result;
167
+ };
168
+ export default useModel;
169
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJEZXZpc2UiLCJpbmZsZWN0aW9uIiwiTW9kZWxFdmVudHMiLCJ1c2VRdWVyeVBhcmFtcyIsInVzZVNoYXBlIiwidXNlTW9kZWwiLCJtb2RlbENsYXNzQXJnIiwiYXJnc0FyZyIsInF1ZXJ5UGFyYW1zIiwiYXJncyIsIm1vZGVsQ2xhc3MiLCJzIiwidXNlU3RhdGVzIiwibW9kZWwiLCJ1bmRlZmluZWQiLCJub3RGb3VuZCIsInByb3BzIiwiYWN0aXZlIiwibWV0YSIsImNhbGxiYWNrIiwicGFyYW1zVmFyaWFibGVOYW1lIiwibW9kZWxOYW1lIiwicGFyYW1LZXkiLCJtb2RlbElkIiwibG9hZEJ5UXVlcnlQYXJhbSIsInF1ZXJ5IiwibWF0Y2giLCJFcnJvciIsInBhcmFtcyIsImlkIiwibW9kZWxWYXJpYWJsZU5hbWUiLCJjYW1lbGl6ZSIsIm1vZGVsQ2xhc3NEYXRhIiwibmFtZSIsImNhY2hlQXJncyIsImxvYWRFeGlzdGluZ01vZGVsIiwibSIsInJhbnNhY2siLCJpZF9lcSIsImNsb25lIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJhYmlsaXRpZXMiLCJwIiwicHJlbG9hZCIsInNlbGVjdCIsImZpcnN0Iiwic2V0IiwibG9hZE5ld01vZGVsIiwiTW9kZWxDbGFzcyIsIm1vZGVsRGF0YUZyb21QYXJhbXMiLCJkZWZhdWx0cyIsIm5ld0lmTm9JZCIsIm1vZGVsRGF0YSIsImFzc2lnbiIsIm5ld0F0dHJpYnV0ZXMiLCJpc05ld1JlY29yZCIsImRhdGEiLCJhIiwibG9hZE1vZGVsIiwib3B0aW9uYWwiLCJvbkRlc3Ryb3llZCIsImZvcndhcmRBcmdzIiwib25TaWduZWRJbiIsIm9uU2lnbmVkT3V0IiwicHVzaCIsInVwZGF0ZU1ldGEiLCJyZWxvYWRNb2RlbENhbGxiYWNrIiwiZXZlbnRzIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImNvbm5lY3RVcGRhdGVkIiwiZXZlbnRVcGRhdGVkIiwidW5zdWJzY3JpYmUiLCJjb25uZWN0RGVzdHJveWVkIiwicmVzdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1tb2RlbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgRGV2aXNlIGZyb20gXCIuL2RldmlzZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBNb2RlbEV2ZW50cyBmcm9tIFwiLi9tb2RlbC1ldmVudHNcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL3NyYy91c2UtcXVlcnktcGFyYW1zXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3VzZS1zaGFwZVwiXG5cbmNvbnN0IHVzZU1vZGVsID0gKG1vZGVsQ2xhc3NBcmcsIGFyZ3NBcmcgPSB7fSkgPT4ge1xuICBjb25zdCBxdWVyeVBhcmFtcyA9IHVzZVF1ZXJ5UGFyYW1zKClcbiAgbGV0IGFyZ3MsIG1vZGVsQ2xhc3NcblxuICBpZiAodHlwZW9mIGFyZ3NBcmcgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgYXJncyA9IGFyZ3NBcmcoe21vZGVsQ2xhc3N9KVxuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBhcmdzQXJnXG4gIH1cblxuICBjb25zdCBzID0gdXNlU2hhcGUoYXJncylcblxuICBzLnVzZVN0YXRlcyh7XG4gICAgbW9kZWw6IHVuZGVmaW5lZCxcbiAgICBub3RGb3VuZDogdW5kZWZpbmVkXG4gIH0pXG5cbiAgaWYgKFwiYWN0aXZlXCIgaW4gcy5wcm9wcyAmJiAhcy5wcm9wcy5hY3RpdmUpIHtcbiAgICBzLm1ldGEuYWN0aXZlID0gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBzLm1ldGEuYWN0aXZlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2RlbENsYXNzQXJnID09IFwib2JqZWN0XCIpIHtcbiAgICBtb2RlbENsYXNzID0gbW9kZWxDbGFzc0FyZy5jYWxsYmFjayh7cXVlcnlQYXJhbXN9KVxuICB9IGVsc2Uge1xuICAgIG1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzQXJnXG4gIH1cblxuICBjb25zdCBwYXJhbXNWYXJpYWJsZU5hbWUgPSBgJHttb2RlbENsYXNzLm1vZGVsTmFtZSgpLnBhcmFtS2V5KCl9X2lkYFxuICBsZXQgbW9kZWxJZFxuXG4gIGlmIChhcmdzLmxvYWRCeVF1ZXJ5UGFyYW0pIHtcbiAgICBtb2RlbElkID0gYXJncy5sb2FkQnlRdWVyeVBhcmFtKHtxdWVyeVBhcmFtc30pXG4gIH0gZWxzZSBpZiAoIWFyZ3MucXVlcnkpIHtcbiAgICBpZiAoIWFyZ3MubWF0Y2gpIHRocm93IG5ldyBFcnJvcihcIkJvdGggJ2xvYWRCeVF1ZXJ5UGFyYW0nIGFuZCAnbWF0Y2gnIHdhc24ndCBnaXZlblwiKVxuXG4gICAgbW9kZWxJZCA9IGFyZ3MubWF0Y2gucGFyYW1zW3BhcmFtc1ZhcmlhYmxlTmFtZV0gfHwgYXJncy5tYXRjaC5wYXJhbXMuaWRcbiAgfVxuXG4gIGNvbnN0IG1vZGVsVmFyaWFibGVOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSwgdHJ1ZSlcbiAgY29uc3QgY2FjaGVBcmdzID0gW21vZGVsSWRdXG5cbiAgY29uc3QgbG9hZEV4aXN0aW5nTW9kZWwgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgbGV0IHF1ZXJ5XG5cbiAgICBpZiAocy5tLm1vZGVsSWQpIHtcbiAgICAgIHF1ZXJ5ID0gbW9kZWxDbGFzcy5yYW5zYWNrKHtpZF9lcTogcy5tLm1vZGVsSWR9KVxuICAgIH0gZWxzZSBpZiAocy5tLmFyZ3MucXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gcy5tLmFyZ3MucXVlcnkuY2xvbmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vZGVsIElEIHdhcyBnaXZlbjogJHtzLm0ubW9kZWxJZH0gYnkgJyR7cGFyYW1zVmFyaWFibGVOYW1lfScgaW4gcXVlcnkgcGFyYW1zOiAke09iamVjdC5rZXlzKHMucHJvcHMubWF0Y2gucGFyYW1zKS5qb2luKFwiLCBcIil9YClcbiAgICB9XG5cbiAgICBpZiAocy5wcm9wcy5hYmlsaXRpZXMpIHF1ZXJ5LmFiaWxpdGllcyhzLnAuYWJpbGl0aWVzKVxuICAgIGlmIChzLnByb3BzLnByZWxvYWQpIHF1ZXJ5LnByZWxvYWQocy5wLnByZWxvYWQpXG4gICAgaWYgKHMucHJvcHMuc2VsZWN0KSBxdWVyeS5zZWxlY3Qocy5wLnNlbGVjdClcblxuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgcXVlcnkuZmlyc3QoKVxuXG4gICAgcy5zZXQoe21vZGVsLCBub3RGb3VuZDogIW1vZGVsfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgbG9hZE5ld01vZGVsID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgY29uc3QgcGFyYW1LZXkgPSBNb2RlbENsYXNzLm1vZGVsTmFtZSgpLnBhcmFtS2V5KClcbiAgICBjb25zdCBtb2RlbERhdGFGcm9tUGFyYW1zID0gcy5tLnF1ZXJ5UGFyYW1zW3BhcmFtS2V5XSB8fCB7fVxuXG4gICAgbGV0IGRlZmF1bHRzID0ge31cblxuICAgIGlmIChzLnByb3BzLm5ld0lmTm9JZD8uZGVmYXVsdHMpIHtcbiAgICAgIGRlZmF1bHRzID0gYXdhaXQgcy5wcm9wcy5uZXdJZk5vSWQuZGVmYXVsdHMoKVxuICAgIH1cblxuICAgIGNvbnN0IG1vZGVsRGF0YSA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdHMsIHMucHJvcHMubmV3QXR0cmlidXRlcywgbW9kZWxEYXRhRnJvbVBhcmFtcylcbiAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbENsYXNzKHtcbiAgICAgIGlzTmV3UmVjb3JkOiB0cnVlLFxuICAgICAgZGF0YToge2E6IG1vZGVsRGF0YX1cbiAgICB9KVxuXG4gICAgcy5zZXQoe21vZGVsfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgbG9hZE1vZGVsID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghcy5tLmFjdGl2ZSkge1xuICAgICAgLy8gTm90IGFjdGl2ZSAtIGRvbid0IGRvIGFueXRoaW5nXG4gICAgfSBlbHNlIGlmIChzLnByb3BzLm5ld0lmTm9JZCAmJiAhcy5tLm1vZGVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBsb2FkTmV3TW9kZWwoKVxuICAgIH0gZWxzZSBpZiAoIXMucHJvcHMub3B0aW9uYWwgfHwgcy5tLm1vZGVsSWQgfCBzLm0uYXJncy5xdWVyeSkge1xuICAgICAgcmV0dXJuIGF3YWl0IGxvYWRFeGlzdGluZ01vZGVsKClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IG9uRGVzdHJveWVkID0gdXNlQ2FsbGJhY2soKHttb2RlbH0pID0+IHtcbiAgICBjb25zdCBmb3J3YXJkQXJncyA9IHttb2RlbH1cblxuICAgIGZvcndhcmRBcmdzW3MubS5tb2RlbFZhcmlhYmxlTmFtZV0gPSBtb2RlbFxuXG4gICAgcy5wLm9uRGVzdHJveWVkKGZvcndhcmRBcmdzKVxuICB9LCBbXSlcblxuICBjb25zdCBvblNpZ25lZEluID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxvYWRNb2RlbCgpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IG9uU2lnbmVkT3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxvYWRNb2RlbCgpXG4gIH0sIFtdKVxuXG4gIGlmIChhcmdzLmNhY2hlQXJncykge1xuICAgIGNhY2hlQXJncy5wdXNoKC4uLmFyZ3MuY2FjaGVBcmdzKVxuICB9XG5cbiAgcy51cGRhdGVNZXRhKHthcmdzLCBtb2RlbElkLCBtb2RlbFZhcmlhYmxlTmFtZSwgcXVlcnlQYXJhbXN9KVxuXG4gIHVzZU1lbW8oXG4gICAgKCkgPT4geyBsb2FkTW9kZWwoKSB9LFxuICAgIGNhY2hlQXJnc1xuICApXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBsZXQgcmVsb2FkTW9kZWxDYWxsYmFja1xuXG4gICAgaWYgKGFyZ3MuZXZlbnRzKSB7XG4gICAgICByZWxvYWRNb2RlbENhbGxiYWNrID0gYXJncy5ldmVudHMuYWRkTGlzdGVuZXIoXCJyZWxvYWRNb2RlbFwiLCBsb2FkTW9kZWwpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyZWxvYWRNb2RlbENhbGxiYWNrKSB7XG4gICAgICAgIGFyZ3MuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKFwicmVsb2FkTW9kZWxcIiwgbG9hZE1vZGVsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2FyZ3MuZXZlbnRzXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjb25uZWN0VXBkYXRlZFxuXG4gICAgaWYgKHMucy5tb2RlbCAmJiBhcmdzLmV2ZW50VXBkYXRlZCkge1xuICAgICAgY29ubmVjdFVwZGF0ZWQgPSBNb2RlbEV2ZW50cy5jb25uZWN0VXBkYXRlZChzLnMubW9kZWwsIGxvYWRNb2RlbClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29ubmVjdFVwZGF0ZWQ/LnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH0sIFthcmdzLmV2ZW50VXBkYXRlZCwgcy5zLm1vZGVsPy5pZCgpXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIERldmlzZS5ldmVudHMoKS5hZGRMaXN0ZW5lcihcIm9uRGV2aXNlU2lnbkluXCIsIG9uU2lnbmVkSW4pXG4gICAgRGV2aXNlLmV2ZW50cygpLmFkZExpc3RlbmVyKFwib25EZXZpc2VTaWduT3V0XCIsIG9uU2lnbmVkT3V0KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIERldmlzZS5ldmVudHMoKS5yZW1vdmVMaXN0ZW5lcihcIm9uRGV2aXNlU2lnbkluXCIsIG9uU2lnbmVkSW4pXG4gICAgICBEZXZpc2UuZXZlbnRzKCkucmVtb3ZlTGlzdGVuZXIoXCJvbkRldmlzZVNpZ25PdXRcIiwgb25TaWduZWRPdXQpXG4gICAgfVxuICB9KVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNvbm5lY3REZXN0cm95ZWRcblxuICAgIGlmIChzLnMubW9kZWwgJiYgYXJncy5vbkRlc3Ryb3llZCkge1xuICAgICAgY29ubmVjdERlc3Ryb3llZCA9IE1vZGVsRXZlbnRzLmNvbm5lY3REZXN0cm95ZWQocy5zLm1vZGVsLCBvbkRlc3Ryb3llZClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29ubmVjdERlc3Ryb3llZD8udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfSwgW2FyZ3Mub25EZXN0cm95ZWQsIHMucy5tb2RlbD8uaWQoKV0pXG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIG1vZGVsOiBzLnMubW9kZWwsXG4gICAgbW9kZWxJZCxcbiAgICBub3RGb3VuZDogcy5zLm5vdEZvdW5kXG4gIH1cblxuICByZXN1bHRbbW9kZWxWYXJpYWJsZU5hbWVdID0gcy5zLm1vZGVsXG4gIHJlc3VsdFtgJHttb2RlbFZhcmlhYmxlTmFtZX1JZGBdID0gbW9kZWxJZFxuICByZXN1bHRbYCR7bW9kZWxWYXJpYWJsZU5hbWV9Tm90Rm91bmRgXSA9IHMucy5ub3RGb3VuZFxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlTW9kZWxcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxlQUFlLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQzNELE9BQU9DLE1BQU0sTUFBTSxVQUFVO0FBQzdCLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsT0FBT0MsV0FBVyxNQUFNLGdCQUFnQjtBQUN4QyxPQUFPQyxjQUFjLE1BQU0sMENBQTBDO0FBQ3JFLE9BQU9DLFFBQVEsTUFBTSxpQ0FBaUM7QUFFdEQsTUFBTUMsUUFBUSxHQUFHQSxDQUFDQyxhQUFhLEVBQUVDLE9BQU8sR0FBRyxD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
@@ -0,0 +1,23 @@
1
+ import { useCallback, useLayoutEffect, useMemo } from "react";
2
+ import useShape from "set-state-compare/src/use-shape";
3
+ const useResizeObserver = (element, callback) => {
4
+ const s = useShape({
5
+ callback
6
+ });
7
+ const onResize = useCallback((...args) => {
8
+ s.p.callback(...args);
9
+ }, []);
10
+ const observer = useMemo(() => new ResizeObserver(onResize), []);
11
+ useLayoutEffect(() => {
12
+ if (element) {
13
+ observer.observe(element);
14
+ }
15
+ return () => {
16
+ if (element) {
17
+ observer.disconnect();
18
+ }
19
+ };
20
+ }, [element]);
21
+ };
22
+ export default useResizeObserver;
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTaGFwZSIsInVzZVJlc2l6ZU9ic2VydmVyIiwiZWxlbWVudCIsImNhbGxiYWNrIiwicyIsIm9uUmVzaXplIiwiYXJncyIsInAiLCJvYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiXSwic291cmNlcyI6WyIuLi9zcmMvdXNlLXJlc2l6ZS1vYnNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgdXNlU2hhcGUgZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy91c2Utc2hhcGVcIlxuXG5jb25zdCB1c2VSZXNpemVPYnNlcnZlciA9IChlbGVtZW50LCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCBzID0gdXNlU2hhcGUoe2NhbGxiYWNrfSlcbiAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgIHMucC5jYWxsYmFjayguLi5hcmdzKVxuICB9LCBbXSlcbiAgY29uc3Qgb2JzZXJ2ZXIgPSB1c2VNZW1vKCgpID0+IG5ldyBSZXNpemVPYnNlcnZlcihvblJlc2l6ZSksIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbZWxlbWVudF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVJlc2l6ZU9ic2VydmVyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFdBQVcsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUMzRCxPQUFPQyxRQUFRLE1BQU0saUNBQWlDO0FBRXRELE1BQU1DLGlCQUFpQixHQUFHQSxDQUFDQyxPQUFPLEVBQUVDLFFBQVEsS0FBSztFQUMvQyxNQUFNQyxDQUFDLEdBQUdKLFFBQVEsQ0FBQztJQUFDRztFQUFRLENBQUMsQ0FBQztFQUM5QixNQUFNRSxRQUFRLEdBQUdSLFdBQVcsQ0FBQyxDQUFDLEdBQUdTLElBQUksS0FBSztJQUN4Q0YsQ0FBQyxDQUFDRyxDQUFDLENBQUNKLFFBQVEsQ0FBQyxHQUFHRyxJQUFJLENBQUM7RUFDdkIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNOLE1BQU1FLFFBQVEsR0FBR1QsT0FBTyxDQUFDLE1BQU0sSUFBSVUsY0FBYyxDQUFDSixRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFaEVQLGVBQWUsQ0FBQyxNQUFNO0lBQ3BCLElBQUlJLE9BQU8sRUFBRTtNQUNYTSxRQUFRLENBQUNFLE9BQU8sQ0FBQ1IsT0FBTyxDQUFDO0lBQzNCO0lBRUEsT0FBTyxNQUFNO01BQ1gsSUFBSUEsT0FBTyxFQUFFO1FBQ1hNLFFBQVEsQ0FBQ0csVUFBVSxDQUFDLENBQUM7TUFDdkI7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNULE9BQU8sQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVELGVBQWVELGlCQUFpQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,102 @@
1
+ import config from "./config";
2
+ import escapeStringRegexp from "escape-string-regexp";
3
+ import * as inflection from "inflection";
4
+ import PropTypes from "prop-types";
5
+ import { useCallback, useMemo } from "react";
6
+ import useShape from "set-state-compare/src/use-shape";
7
+ const useRouter = props => {
8
+ const s = useShape(props);
9
+ const findRouteParams = useCallback(routeDefinition => {
10
+ const result = [];
11
+ const parts = routeDefinition.path.split("/");
12
+ for (const part of parts) {
13
+ if (part.match(/^:([a-z_]+)$/)) result.push(part);
14
+ }
15
+ return result;
16
+ }, []);
17
+ const getPath = useCallback(() => {
18
+ let path = s.p.path || window.location.pathname;
19
+ path = path.replace(/[/]+$/, "");
20
+ return path;
21
+ }, []);
22
+ const getRouteDefinitions = useCallback(() => s.p.routeDefinitions || config.getRouteDefinitions(), []);
23
+ const getRoutes = useCallback(() => s.p.routes || config.getRoutes(), []);
24
+ const parseRouteDefinitions = useCallback(() => {
25
+ const Locales = require("shared/locales").default;
26
+ const routeDefinitions = getRouteDefinitions();
27
+ const routes = getRoutes();
28
+ const regex = /:([A-z\d_]+)/;
29
+ const parsedRouteDefinitions = [];
30
+ for (const locale of Locales.availableLocales()) {
31
+ for (const routeDefinition of routeDefinitions.routes) {
32
+ const routePathName = `${inflection.camelize(routeDefinition.name, true)}Path`;
33
+ const params = findRouteParams(routeDefinition);
34
+ params.push({
35
+ locale
36
+ });
37
+ if (!(routePathName in routes)) throw new Error(`${routePathName} not found in routes: ${Object.keys(routes, ", ")}`);
38
+ const routePath = routes[routePathName](...params).replace(/[/]+$/, "");
39
+ const groups = [];
40
+ let pathRegexString = "^";
41
+ pathRegexString += escapeStringRegexp(routePath);
42
+ while (true) {
43
+ const match = pathRegexString.match(regex);
44
+ if (!match) break;
45
+ const variableName = match[1];
46
+ groups.push(variableName);
47
+ pathRegexString = pathRegexString.replace(match[0], "([^/]+)");
48
+ }
49
+ pathRegexString += "$";
50
+ const pathRegex = new RegExp(pathRegexString);
51
+ parsedRouteDefinitions.push({
52
+ groups,
53
+ pathRegex,
54
+ routeDefinition
55
+ });
56
+ }
57
+ }
58
+ return parsedRouteDefinitions;
59
+ }, []);
60
+ const parsedRouteDefinitions = useMemo(() => parseRouteDefinitions(), []);
61
+ s.updateMeta({
62
+ parsedRouteDefinitions
63
+ });
64
+ const findMatchingRoute = useCallback(() => {
65
+ const path = getPath();
66
+ for (const parsedRouteDefinition of s.m.parsedRouteDefinitions) {
67
+ const match = path.match(parsedRouteDefinition.pathRegex);
68
+ let matched, params;
69
+ if (match) {
70
+ matched = true;
71
+ params = {};
72
+ for (const groupKey in parsedRouteDefinition.groups) {
73
+ const groupName = parsedRouteDefinition.groups[groupKey];
74
+ params[groupName] = match[Number(groupKey) + 1];
75
+ }
76
+ }
77
+ if (path == "" && parsedRouteDefinition.routeDefinition.path == "/") matched = true;
78
+ if (matched) {
79
+ return {
80
+ params,
81
+ parsedRouteDefinition
82
+ };
83
+ }
84
+ }
85
+ }, []);
86
+ const matchingRoute = findMatchingRoute();
87
+ const params = matchingRoute?.params || {};
88
+ const match = {
89
+ matchingRoute,
90
+ params
91
+ };
92
+ return {
93
+ match
94
+ };
95
+ };
96
+ useRouter.propTypes = {
97
+ path: PropTypes.string,
98
+ routeDefinitions: PropTypes.object,
99
+ routes: PropTypes.object
100
+ };
101
+ export default useRouter;
102
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25maWciLCJlc2NhcGVTdHJpbmdSZWdleHAiLCJpbmZsZWN0aW9uIiwiUHJvcFR5cGVzIiwidXNlQ2FsbGJhY2siLCJ1c2VNZW1vIiwidXNlU2hhcGUiLCJ1c2VSb3V0ZXIiLCJwcm9wcyIsInMiLCJmaW5kUm91dGVQYXJhbXMiLCJyb3V0ZURlZmluaXRpb24iLCJyZXN1bHQiLCJwYXJ0cyIsInBhdGgiLCJzcGxpdCIsInBhcnQiLCJtYXRjaCIsInB1c2giLCJnZXRQYXRoIiwicCIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwiZ2V0Um91dGVEZWZpbml0aW9ucyIsInJvdXRlRGVmaW5pdGlvbnMiLCJnZXRSb3V0ZXMiLCJyb3V0ZXMiLCJwYXJzZVJvdXRlRGVmaW5pdGlvbnMiLCJMb2NhbGVzIiwicmVxdWlyZSIsImRlZmF1bHQiLCJyZWdleCIsInBhcnNlZFJvdXRlRGVmaW5pdGlvbnMiLCJsb2NhbGUiLCJhdmFpbGFibGVMb2NhbGVzIiwicm91dGVQYXRoTmFtZSIsImNhbWVsaXplIiwibmFtZSIsInBhcmFtcyIsIkVycm9yIiwiT2JqZWN0Iiwia2V5cyIsInJvdXRlUGF0aCIsImdyb3VwcyIsInBhdGhSZWdleFN0cmluZyIsInZhcmlhYmxlTmFtZSIsInBhdGhSZWdleCIsIlJlZ0V4cCIsInVwZGF0ZU1ldGEiLCJmaW5kTWF0Y2hpbmdSb3V0ZSIsInBhcnNlZFJvdXRlRGVmaW5pdGlvbiIsIm0iLCJtYXRjaGVkIiwiZ3JvdXBLZXkiLCJncm91cE5hbWUiLCJOdW1iZXIiLCJtYXRjaGluZ1JvdXRlIiwicHJvcFR5cGVzIiwic3RyaW5nIiwib2JqZWN0Il0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1yb3V0ZXIuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSBcIi4vY29uZmlnXCJcbmltcG9ydCBlc2NhcGVTdHJpbmdSZWdleHAgZnJvbSBcImVzY2FwZS1zdHJpbmctcmVnZXhwXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvdXNlLXNoYXBlXCJcblxuY29uc3QgdXNlUm91dGVyID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHMgPSB1c2VTaGFwZShwcm9wcylcblxuICBjb25zdCBmaW5kUm91dGVQYXJhbXMgPSB1c2VDYWxsYmFjaygocm91dGVEZWZpbml0aW9uKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW11cbiAgICBjb25zdCBwYXJ0cyA9IHJvdXRlRGVmaW5pdGlvbi5wYXRoLnNwbGl0KFwiL1wiKVxuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAocGFydC5tYXRjaCgvXjooW2Etel9dKykkLykpXG4gICAgICAgIHJlc3VsdC5wdXNoKHBhcnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCBbXSlcblxuICBjb25zdCBnZXRQYXRoID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxldCBwYXRoID0gcy5wLnBhdGggfHwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXG5cbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9bL10rJC8sIFwiXCIpXG5cbiAgICByZXR1cm4gcGF0aFxuICB9LCBbXSlcblxuICBjb25zdCBnZXRSb3V0ZURlZmluaXRpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4gIHMucC5yb3V0ZURlZmluaXRpb25zIHx8IGNvbmZpZy5nZXRSb3V0ZURlZmluaXRpb25zKCksIFtdKVxuICBjb25zdCBnZXRSb3V0ZXMgPSB1c2VDYWxsYmFjaygoKSA9PiBzLnAucm91dGVzIHx8IGNvbmZpZy5nZXRSb3V0ZXMoKSwgW10pXG5cbiAgY29uc3QgcGFyc2VSb3V0ZURlZmluaXRpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IExvY2FsZXMgPSByZXF1aXJlKFwic2hhcmVkL2xvY2FsZXNcIikuZGVmYXVsdFxuICAgIGNvbnN0IHJvdXRlRGVmaW5pdGlvbnMgPSBnZXRSb3V0ZURlZmluaXRpb25zKClcbiAgICBjb25zdCByb3V0ZXMgPSBnZXRSb3V0ZXMoKVxuICAgIGNvbnN0IHJlZ2V4ID0gLzooW0EtelxcZF9dKykvXG4gICAgY29uc3QgcGFyc2VkUm91dGVEZWZpbml0aW9ucyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBMb2NhbGVzLmF2YWlsYWJsZUxvY2FsZXMoKSkge1xuICAgICAgZm9yIChjb25zdCByb3V0ZURlZmluaXRpb24gb2Ygcm91dGVEZWZpbml0aW9ucy5yb3V0ZXMpIHtcbiAgICAgICAgY29uc3Qgcm91dGVQYXRoTmFtZSA9IGAke2luZmxlY3Rpb24uY2FtZWxpemUocm91dGVEZWZpbml0aW9uLm5hbWUsIHRydWUpfVBhdGhgXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGZpbmRSb3V0ZVBhcmFtcyhyb3V0ZURlZmluaXRpb24pXG5cbiAgICAgICAgcGFyYW1zLnB1c2goe2xvY2FsZX0pXG5cbiAgICAgICAgaWYgKCEocm91dGVQYXRoTmFtZSBpbiByb3V0ZXMpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyb3V0ZVBhdGhOYW1lfSBub3QgZm91bmQgaW4gcm91dGVzOiAke09iamVjdC5rZXlzKHJvdXRlcywgXCIsIFwiKX1gKVxuXG4gICAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IHJvdXRlc1tyb3V0ZVBhdGhOYW1lXSguLi5wYXJhbXMpLnJlcGxhY2UoL1svXSskLywgXCJcIilcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gW11cbiAgICAgICAgbGV0IHBhdGhSZWdleFN0cmluZyA9IFwiXlwiXG5cbiAgICAgICAgcGF0aFJlZ2V4U3RyaW5nICs9IGVzY2FwZVN0cmluZ1JlZ2V4cChyb3V0ZVBhdGgpXG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHBhdGhSZWdleFN0cmluZy5tYXRjaChyZWdleClcblxuICAgICAgICAgIGlmICghbWF0Y2gpIGJyZWFrXG5cbiAgICAgICAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSBtYXRjaFsxXVxuXG4gICAgICAgICAgZ3JvdXBzLnB1c2godmFyaWFibGVOYW1lKVxuXG4gICAgICAgICAgcGF0aFJlZ2V4U3RyaW5nID0gcGF0aFJlZ2V4U3RyaW5nLnJlcGxhY2UobWF0Y2hbMF0sIFwiKFteL10rKVwiKVxuICAgICAgICB9XG5cbiAgICAgICAgcGF0aFJlZ2V4U3RyaW5nICs9IFwiJFwiXG5cbiAgICAgICAgY29uc3QgcGF0aFJlZ2V4ID0gbmV3IFJlZ0V4cChwYXRoUmVnZXhTdHJpbmcpXG5cbiAgICAgICAgcGFyc2VkUm91dGVEZWZpbml0aW9ucy5wdXNoKHtncm91cHMsIHBhdGhSZWdleCwgcm91dGVEZWZpbml0aW9ufSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkUm91dGVEZWZpbml0aW9uc1xuICB9LCBbXSlcblxuICBjb25zdCBwYXJzZWRSb3V0ZURlZmluaXRpb25zID0gdXNlTWVtbygoKSA9PiBwYXJzZVJvdXRlRGVmaW5pdGlvbnMoKSwgW10pXG5cbiAgcy51cGRhdGVNZXRhKHtwYXJzZWRSb3V0ZURlZmluaXRpb25zfSlcblxuICBjb25zdCBmaW5kTWF0Y2hpbmdSb3V0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aCgpXG5cbiAgICBmb3IgKGNvbnN0IHBhcnNlZFJvdXRlRGVmaW5pdGlvbiBvZiBzLm0ucGFyc2VkUm91dGVEZWZpbml0aW9ucykge1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXRoLm1hdGNoKHBhcnNlZFJvdXRlRGVmaW5pdGlvbi5wYXRoUmVnZXgpXG4gICAgICBsZXQgbWF0Y2hlZCwgcGFyYW1zXG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaGVkID0gdHJ1ZVxuICAgICAgICBwYXJhbXMgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBLZXkgaW4gcGFyc2VkUm91dGVEZWZpbml0aW9uLmdyb3Vwcykge1xuICAgICAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IHBhcnNlZFJvdXRlRGVmaW5pdGlvbi5ncm91cHNbZ3JvdXBLZXldXG5cbiAgICAgICAgICBwYXJhbXNbZ3JvdXBOYW1lXSA9IG1hdGNoW051bWJlcihncm91cEtleSkgKyAxXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXRoID09IFwiXCIgJiYgcGFyc2VkUm91dGVEZWZpbml0aW9uLnJvdXRlRGVmaW5pdGlvbi5wYXRoID09IFwiL1wiKSBtYXRjaGVkID0gdHJ1ZVxuICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgcmV0dXJuIHtwYXJhbXMsIHBhcnNlZFJvdXRlRGVmaW5pdGlvbn1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IG1hdGNoaW5nUm91dGUgPSBmaW5kTWF0Y2hpbmdSb3V0ZSgpXG4gIGNvbnN0IHBhcmFtcyA9IG1hdGNoaW5nUm91dGU/LnBhcmFtcyB8fCB7fVxuICBjb25zdCBtYXRjaCA9IHtcbiAgICBtYXRjaGluZ1JvdXRlLFxuICAgIHBhcmFtc1xuICB9XG5cbiAgcmV0dXJuIHttYXRjaH1cbn1cblxudXNlUm91dGVyLnByb3BUeXBlcyA9IHtcbiAgcGF0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcm91dGVEZWZpbml0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgcm91dGVzOiBQcm9wVHlwZXMub2JqZWN0XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVJvdXRlclxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sVUFBVTtBQUM3QixPQUFPQyxrQkFBa0IsTUFBTSxzQkFBc0I7QUFDckQsT0FBTyxLQUFLQyxVQUFVLE1BQU0sWUFBWTtBQUN4QyxPQUFPQyxTQUFTLE1B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
@@ -0,0 +1,39 @@
1
+ import { Platform, useWindowDimensions } from "react-native";
2
+ const getWindowLayout = width => {
3
+ if (width <= 575) {
4
+ return "xs";
5
+ } else if (width <= 767) {
6
+ return "sm";
7
+ } else if (width <= 991) {
8
+ return "md";
9
+ } else if (width <= 1199) {
10
+ return "lg";
11
+ } else if (width <= 1399) {
12
+ return "xl";
13
+ } else if (width >= 1400) {
14
+ return "xxl";
15
+ } else {
16
+ console.error(`Couldn't determine window layout from width: ${width}`);
17
+ }
18
+ };
19
+ const useScreenLayout = () => {
20
+ if (Platform.OS == "web") {
21
+ const shared = useMemo(() => ({}));
22
+ shared.width = window.innerWidth;
23
+ const [screenLayout, setScreenLayout] = useState(() => getWindowLayout(shared.width));
24
+ const onResize = useCallback(() => {
25
+ const newWindowLayout = getWindowLayout(window.innerWidth);
26
+ if (shared.screenlayout != newWindowLayout) {
27
+ setScreenLayout(newWindowLayout);
28
+ }
29
+ }, []);
30
+ useEventListener(window, "resize", onResize);
31
+ shared.screenLayout = screenLayout;
32
+ return shared.screenLayout;
33
+ } else {
34
+ const windowDimensions = useWindowDimensions();
35
+ return getWindowLayout(windowDimensions.width);
36
+ }
37
+ };
38
+ export default useScreenLayout;
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbGF0Zm9ybSIsInVzZVdpbmRvd0RpbWVuc2lvbnMiLCJnZXRXaW5kb3dMYXlvdXQiLCJ3aWR0aCIsImNvbnNvbGUiLCJlcnJvciIsInVzZVNjcmVlbkxheW91dCIsIk9TIiwic2hhcmVkIiwidXNlTWVtbyIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJzY3JlZW5MYXlvdXQiLCJzZXRTY3JlZW5MYXlvdXQiLCJ1c2VTdGF0ZSIsIm9uUmVzaXplIiwidXNlQ2FsbGJhY2siLCJuZXdXaW5kb3dMYXlvdXQiLCJzY3JlZW5sYXlvdXQiLCJ1c2VFdmVudExpc3RlbmVyIiwid2luZG93RGltZW5zaW9ucyJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2Utc2NyZWVuLWxheW91dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BsYXRmb3JtLCB1c2VXaW5kb3dEaW1lbnNpb25zfSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcblxuY29uc3QgZ2V0V2luZG93TGF5b3V0ID0gKHdpZHRoKSA9PiB7XG4gIGlmICh3aWR0aCA8PSA1NzUpIHtcbiAgICByZXR1cm4gXCJ4c1wiXG4gIH0gZWxzZSBpZiAod2lkdGggPD0gNzY3KSB7XG4gICAgcmV0dXJuIFwic21cIlxuICB9IGVsc2UgaWYgKHdpZHRoIDw9IDk5MSkge1xuICAgIHJldHVybiBcIm1kXCJcbiAgfSBlbHNlIGlmICh3aWR0aCA8PSAxMTk5KSB7XG4gICAgcmV0dXJuIFwibGdcIlxuICB9IGVsc2UgaWYgKHdpZHRoIDw9IDEzOTkpIHtcbiAgICByZXR1cm4gXCJ4bFwiXG4gIH0gZWxzZSBpZiAod2lkdGggPj0gMTQwMCkge1xuICAgIHJldHVybiBcInh4bFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgQ291bGRuJ3QgZGV0ZXJtaW5lIHdpbmRvdyBsYXlvdXQgZnJvbSB3aWR0aDogJHt3aWR0aH1gKVxuICB9XG59XG5cbmNvbnN0IHVzZVNjcmVlbkxheW91dCA9ICgpID0+IHtcbiAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICBjb25zdCBzaGFyZWQgPSB1c2VNZW1vKCgpID0+ICh7fSkpXG5cbiAgICBzaGFyZWQud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuXG4gICAgY29uc3QgW3NjcmVlbkxheW91dCwgc2V0U2NyZWVuTGF5b3V0XSA9IHVzZVN0YXRlKCgpID0+IGdldFdpbmRvd0xheW91dChzaGFyZWQud2lkdGgpKVxuXG4gICAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBuZXdXaW5kb3dMYXlvdXQgPSBnZXRXaW5kb3dMYXlvdXQod2luZG93LmlubmVyV2lkdGgpXG5cbiAgICAgIGlmIChzaGFyZWQuc2NyZWVubGF5b3V0ICE9IG5ld1dpbmRvd0xheW91dCkge1xuICAgICAgICBzZXRTY3JlZW5MYXlvdXQobmV3V2luZG93TGF5b3V0KVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwicmVzaXplXCIsIG9uUmVzaXplKVxuXG4gICAgc2hhcmVkLnNjcmVlbkxheW91dCA9IHNjcmVlbkxheW91dFxuXG4gICAgcmV0dXJuIHNoYXJlZC5zY3JlZW5MYXlvdXRcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB3aW5kb3dEaW1lbnNpb25zID0gdXNlV2luZG93RGltZW5zaW9ucygpXG5cbiAgICByZXR1cm4gZ2V0V2luZG93TGF5b3V0KHdpbmRvd0RpbWVuc2lvbnMud2lkdGgpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlU2NyZWVuTGF5b3V0XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFFBQVEsRUFBRUMsbUJBQW1CLFFBQU8sY0FBYztBQUUxRCxNQUFNQyxlQUFlLEdBQUlDLEtBQUssSUFBSztFQUNqQyxJQUFJQSxLQUFLLElBQUksR0FBRyxFQUFFO0lBQ2hCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sS0FBSztFQUNkLENBQUMsTUFBTTtJQUNMQyxPQUFPLENBQUNDLEtBQUssQ0FBQyxnREFBZ0RGLEtBQUssRUFBRSxDQUFDO0VBQ3hFO0FBQ0YsQ0FBQztBQUVELE1BQU1HLGVBQWUsR0FBR0EsQ0FBQSxLQUFNO0VBQzVCLElBQUlOLFFBQVEsQ0FBQ08sRUFBRSxJQUFJLEtBQUssRUFBRTtJQUN4QixNQUFNQyxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbENELE1BQU0sQ0FBQ0wsS0FBSyxHQUFHTyxNQUFNLENBQUNDLFVBQVU7SUFFaEMsTUFBTSxDQUFDQyxZQUFZLEVBQUVDLGVBQWUsQ0FBQyxHQUFHQyxRQUFRLENBQUMsTUFBTVosZUFBZSxDQUFDTSxNQUFNLENBQUNMLEtBQUssQ0FBQyxDQUFDO0lBRXJGLE1BQU1ZLFFBQVEsR0FBR0MsV0FBVyxDQUFDLE1BQU07TUFDakMsTUFBTUMsZUFBZSxHQUFHZixlQUFlLENBQUNRLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDO01BRTFELElBQUlILE1BQU0sQ0FBQ1UsWUFBWSxJQUFJRCxlQUFlLEVBQUU7UUFDMUNKLGVBQWUsQ0FBQ0ksZUFBZSxDQUFDO01BQ2xDO0lBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUVORSxnQkFBZ0IsQ0FBQ1QsTUFBTSxFQUFFLFFBQVEsRUFBRUssUUFBUSxDQUFDO0lBRTVDUCxNQUFNLENBQUNJLFlBQVksR0FBR0EsWUFBWTtJQUVsQyxPQUFPSixNQUFNLENBQUNJLFlBQVk7RUFDNUIsQ0FBQyxNQUFNO0lBQ0wsTUFBTVEsZ0JBQWdCLEdBQUduQixtQkFBbUIsQ0FBQyxDQUFDO0lBRTlDLE9BQU9DLGVBQWUsQ0FBQ2tCLGdCQUFnQixDQUFDakIsS0FBSyxDQUFDO0VBQ2hEO0FBQ0YsQ0FBQztBQUVELGVBQWVHLGVBQWUiLCJpZ25vcmVMaXN0IjpbXX0=