@kaspernj/api-maker 1.0.445 → 1.0.447

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 (361) 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 -14
  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/controller.js +137 -0
  209. package/src/draggable-sort/index.jsx +108 -0
  210. package/src/draggable-sort/item.jsx +174 -0
  211. package/src/{error-logger.mjs → error-logger.js} +1 -1
  212. package/src/event-connection.jsx +1 -1
  213. package/src/event-model-class.jsx +1 -1
  214. package/src/form.jsx +1 -1
  215. package/src/index.js +3 -0
  216. package/src/inputs/attachment.jsx +2 -2
  217. package/src/inputs/checkbox.jsx +7 -6
  218. package/src/inputs/checkboxes.jsx +1 -1
  219. package/src/inputs/input-wrapper.jsx +1 -1
  220. package/src/inputs/input.jsx +8 -7
  221. package/src/inputs/money.jsx +3 -3
  222. package/src/inputs/select.jsx +1 -1
  223. package/src/{key-value-store.mjs → key-value-store.js} +1 -1
  224. package/src/link.jsx +2 -2
  225. package/src/modal.jsx +1 -1
  226. package/src/{model-class-require.mjs → model-class-require.js} +4 -2
  227. package/src/{model-events.mjs → model-events.js} +1 -1
  228. package/src/{model-name.mjs → model-name.js} +1 -1
  229. package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
  230. package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +2 -2
  231. package/src/{models-response-reader.mjs → models-response-reader.js} +2 -2
  232. package/src/models.js +7 -0
  233. package/src/{models.mjs.erb → models.js.erb} +1 -1
  234. package/src/{params.mjs → params.js} +2 -2
  235. package/src/{preloaded.mjs → preloaded.js} +1 -1
  236. package/src/resize-observer.jsx +1 -1
  237. package/src/router/route.jsx +1 -1
  238. package/src/router/switch.jsx +1 -1
  239. package/src/router.jsx +1 -1
  240. package/src/{routes-native.mjs → routes-native.js} +1 -1
  241. package/src/{services.mjs → services.js} +1 -1
  242. package/src/{session-status-updater.mjs → session-status-updater.js} +3 -3
  243. package/src/{source-maps-loader.mjs → source-maps-loader.js} +1 -1
  244. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +1 -1
  245. package/src/super-admin/edit-page/edit-attribute-content.jsx +1 -1
  246. package/src/super-admin/edit-page/edit-attribute-input.jsx +1 -1
  247. package/src/super-admin/edit-page/edit-attribute.jsx +1 -1
  248. package/src/super-admin/edit-page.jsx +2 -2
  249. package/src/super-admin/has-edit-config.js +1 -1
  250. package/src/super-admin/index-page.jsx +1 -1
  251. package/src/super-admin/index.jsx +7 -7
  252. package/src/super-admin/layout/header/index.jsx +2 -2
  253. package/src/super-admin/layout/index.jsx +3 -3
  254. package/src/super-admin/layout/menu/index.jsx +3 -3
  255. package/src/super-admin/layout/menu/menu-content.jsx +2 -2
  256. package/src/super-admin/layout/menu/{menu-item/index.jsx → menu-item.jsx} +5 -6
  257. package/src/super-admin/layout/no-access.jsx +2 -2
  258. package/src/super-admin/model-class-table.jsx +3 -3
  259. package/src/super-admin/models.js +1 -1
  260. package/src/super-admin/show-nav.jsx +2 -2
  261. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +1 -1
  262. package/src/super-admin/show-page/index.jsx +2 -2
  263. package/src/super-admin/show-reflection-actions.jsx +1 -1
  264. package/src/super-admin/show-reflection-link.jsx +1 -1
  265. package/src/super-admin/show-reflection-page.jsx +1 -1
  266. package/src/table/column-content.jsx +1 -1
  267. package/src/table/components/column.jsx +8 -2
  268. package/src/table/components/header.jsx +2 -2
  269. package/src/table/filters/filter-form.jsx +1 -1
  270. package/src/table/filters/index.jsx +5 -3
  271. package/src/table/filters/load-search-modal.jsx +6 -4
  272. package/src/table/filters/save-search-modal.jsx +4 -4
  273. package/src/table/header-column.jsx +59 -79
  274. package/src/table/header-select.jsx +1 -1
  275. package/src/table/model-column.jsx +12 -6
  276. package/src/table/model-row.jsx +11 -7
  277. package/src/table/{select-calculator.mjs → select-calculator.js} +1 -1
  278. package/src/table/settings/column-row.jsx +4 -3
  279. package/src/table/settings/download-action.jsx +3 -3
  280. package/src/table/settings/index.jsx +3 -3
  281. package/src/table/table-settings.js +5 -4
  282. package/src/table/table.jsx +149 -71
  283. package/src/table/{use-sorting.mjs → use-sorting.js} +1 -1
  284. package/src/table/{widths.mjs → widths.jsx} +11 -2
  285. package/src/table/worker-plugins-check-all-checkbox.jsx +2 -2
  286. package/src/table/worker-plugins-checkbox.jsx +2 -2
  287. package/src/{translated-collections.mjs → translated-collections.js} +1 -1
  288. package/src/updated-attribute.jsx +1 -1
  289. package/src/{use-breakpoint.mjs → use-breakpoint.js} +2 -2
  290. package/src/use-can-can.js +55 -0
  291. package/src/{use-collection.mjs → use-collection.js} +4 -4
  292. package/src/{use-created-event.mjs → use-created-event.js} +2 -2
  293. package/src/{use-current-user.mjs → use-current-user.js} +6 -5
  294. package/src/{use-destroyed-event.mjs → use-destroyed-event.js} +2 -2
  295. package/src/{use-input.mjs → use-input.js} +5 -5
  296. package/src/use-model-event.js +2 -2
  297. package/src/{use-model.mjs → use-model.js} +4 -4
  298. package/src/{use-resize-observer.mjs → use-resize-observer.js} +1 -1
  299. package/src/use-router.jsx +2 -2
  300. package/src/{use-updated-event.mjs → use-updated-event.js} +2 -2
  301. package/src/{use-validation-errors.mjs → use-validation-errors.js} +3 -3
  302. package/src/utils/checkbox.jsx +2 -2
  303. package/src/{validation-error.mjs → validation-error.js} +1 -1
  304. package/src/{validation-errors.mjs → validation-errors.js} +1 -1
  305. package/src/with-current-user.jsx +1 -1
  306. package/src/with-model.jsx +1 -1
  307. package/__tests__/base-model.test.mjs +0 -71
  308. package/__tests__/cable-connection-pool.test.mjs +0 -227
  309. package/__tests__/cable-subscription-pool.test.mjs +0 -27
  310. package/__tests__/can-can.test.mjs +0 -34
  311. package/__tests__/collection.test.mjs +0 -51
  312. package/__tests__/custom-error.test.mjs +0 -13
  313. package/__tests__/model-name.test.mjs +0 -34
  314. package/__tests__/model-prop-type.test.mjs +0 -113
  315. package/__tests__/params.test.mjs +0 -40
  316. package/__tests__/routes-native.test.mjs +0 -104
  317. package/__tests__/routes.test.mjs +0 -47
  318. package/__tests__/serializer.test.mjs +0 -30
  319. package/__tests__/support/task.mjs +0 -27
  320. package/__tests__/support/user.mjs +0 -32
  321. package/index.js +0 -1
  322. package/jest.config.js +0 -9
  323. package/src/event-created.jsx +0 -12
  324. package/src/event-destroyed.jsx +0 -25
  325. package/src/event-emitter-listener.jsx +0 -10
  326. package/src/event-listener.jsx +0 -25
  327. package/src/event-updated.jsx +0 -27
  328. package/src/super-admin/layout/menu/menu-item/style.scss +0 -10
  329. package/src/use-can-can.mjs +0 -48
  330. package/src/with-can-can.jsx +0 -12
  331. package/webpack.config.js +0 -15
  332. /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
  333. /package/src/base-model/{column.mjs → column.js} +0 -0
  334. /package/src/base-model/{scope.mjs → scope.js} +0 -0
  335. /package/src/{cache-key-generator.mjs → cache-key-generator.js} +0 -0
  336. /package/src/{channels-consumer.mjs → channels-consumer.js} +0 -0
  337. /package/src/{command-submit-data.mjs → command-submit-data.js} +0 -0
  338. /package/src/{config.mjs → config.js} +0 -0
  339. /package/src/{data-set-to-attributes.mjs → data-set-to-attributes.js} +0 -0
  340. /package/src/{error-messages.mjs → error-messages.js} +0 -0
  341. /package/src/{events.mjs → events.js} +0 -0
  342. /package/src/inputs/{auto-submit.mjs → auto-submit.js} +0 -0
  343. /package/src/inputs/{id-for-component.mjs → id-for-component.js} +0 -0
  344. /package/src/inputs/{name-for-component.mjs → name-for-component.js} +0 -0
  345. /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
  346. /package/src/{logger.mjs → logger.js} +0 -0
  347. /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
  348. /package/src/{money-formatter.mjs → money-formatter.js} +0 -0
  349. /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
  350. /package/src/{result.mjs → result.js} +0 -0
  351. /package/src/{routes.mjs → routes.js} +0 -0
  352. /package/src/{run-last.mjs → run-last.js} +0 -0
  353. /package/src/{serializer.mjs → serializer.js} +0 -0
  354. /package/src/table/{column-identifier.mjs → column-identifier.js} +0 -0
  355. /package/src/table/{column-visible.mjs → column-visible.js} +0 -0
  356. /package/src/table/{model-callback-args.mjs → model-callback-args.js} +0 -0
  357. /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
  358. /package/src/{url-encode.mjs → url-encode.js} +0 -0
  359. /package/src/{use-event-emitter.mjs → use-event-emitter.js} +0 -0
  360. /package/src/{use-event-listener.mjs → use-event-listener.js} +0 -0
  361. /package/src/{use-screen-layout.mjs → use-screen-layout.js} +0 -0
@@ -0,0 +1,48 @@
1
+ import ExpoModulesCore
2
+
3
+ public class ApiMakerModule: Module {
4
+ // Each module class must implement the definition function. The definition consists of components
5
+ // that describes the module's functionality and behavior.
6
+ // See https://docs.expo.dev/modules/module-api for more details about available components.
7
+ public func definition() -> ModuleDefinition {
8
+ // Sets the name of the module that JavaScript code will use to refer to the module. Takes a string as an argument.
9
+ // Can be inferred from module's class name, but it's recommended to set it explicitly for clarity.
10
+ // The module will be accessible from `requireNativeModule('ApiMaker')` in JavaScript.
11
+ Name("ApiMaker")
12
+
13
+ // Sets constant properties on the module. Can take a dictionary or a closure that returns a dictionary.
14
+ Constants([
15
+ "PI": Double.pi
16
+ ])
17
+
18
+ // Defines event names that the module can send to JavaScript.
19
+ Events("onChange")
20
+
21
+ // Defines a JavaScript synchronous function that runs the native code on the JavaScript thread.
22
+ Function("hello") {
23
+ return "Hello world! 👋"
24
+ }
25
+
26
+ // Defines a JavaScript function that always returns a Promise and whose native code
27
+ // is by default dispatched on the different thread than the JavaScript runtime runs on.
28
+ AsyncFunction("setValueAsync") { (value: String) in
29
+ // Send an event to JavaScript.
30
+ self.sendEvent("onChange", [
31
+ "value": value
32
+ ])
33
+ }
34
+
35
+ // Enables the module to be used as a native view. Definition components that are accepted as part of the
36
+ // view definition: Prop, Events.
37
+ View(ApiMakerView.self) {
38
+ // Defines a setter for the `url` prop.
39
+ Prop("url") { (view: ApiMakerView, url: URL) in
40
+ if view.webView.url != url {
41
+ view.webView.load(URLRequest(url: url))
42
+ }
43
+ }
44
+
45
+ Events("onLoad")
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,38 @@
1
+ import ExpoModulesCore
2
+ import WebKit
3
+
4
+ // This view will be used as a native component. Make sure to inherit from `ExpoView`
5
+ // to apply the proper styling (e.g. border radius and shadows).
6
+ class ApiMakerView: ExpoView {
7
+ let webView = WKWebView()
8
+ let onLoad = EventDispatcher()
9
+ var delegate: WebViewDelegate?
10
+
11
+ required init(appContext: AppContext? = nil) {
12
+ super.init(appContext: appContext)
13
+ clipsToBounds = true
14
+ delegate = WebViewDelegate { url in
15
+ self.onLoad(["url": url])
16
+ }
17
+ webView.navigationDelegate = delegate
18
+ addSubview(webView)
19
+ }
20
+
21
+ override func layoutSubviews() {
22
+ webView.frame = bounds
23
+ }
24
+ }
25
+
26
+ class WebViewDelegate: NSObject, WKNavigationDelegate {
27
+ let onUrlChange: (String) -> Void
28
+
29
+ init(onUrlChange: @escaping (String) -> Void) {
30
+ self.onUrlChange = onUrlChange
31
+ }
32
+
33
+ func webView(_ webView: WKWebView, didFinish navigation: WKNavigation) {
34
+ if let url = webView.url {
35
+ onUrlChange(url.absoluteString)
36
+ }
37
+ }
38
+ }
package/package.json CHANGED
@@ -1,24 +1,38 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
- "version": "1.0.445",
4
- "type": "module",
5
- "description": "",
6
- "main": "index.js",
3
+ "version": "1.0.447",
4
+ "description": "My new module",
5
+ "main": "build/index.js",
6
+ "scripts": {
7
+ "build": "babel src --out-dir build --extensions \".js,.jsx\" --source-maps inline",
8
+ "build-expo": "expo-module build",
9
+ "clean": "expo-module clean",
10
+ "lint": "expo-module lint",
11
+ "test": "expo-module test",
12
+ "prepare": "npm run clean && npm run build",
13
+ "prepublishOnly": "expo-module prepublishOnly",
14
+ "expo-module": "expo-module",
15
+ "open:ios": "xed example/ios",
16
+ "open:android": "open -a \"Android Studio\" example/android",
17
+ "eslint": "eslint --ext .js,.jsx",
18
+ "eslint-find-rules": "eslint-find-rules"
19
+ },
20
+ "keywords": [
21
+ "react-native",
22
+ "expo",
23
+ "api-maker",
24
+ "ApiMaker"
25
+ ],
7
26
  "repository": {
8
27
  "type": "git",
9
28
  "url": "git+https://github.com/kaspernj/api_maker.git"
10
29
  },
11
- "author": "kaspernj",
12
- "license": "ISC",
13
30
  "bugs": {
14
31
  "url": "https://github.com/kaspernj/api_maker/issues"
15
32
  },
16
- "homepage": "https://github.com/kaspernj/api_maker",
17
- "scripts": {
18
- "eslint": "eslint --ext .mjs,.js,.jsx",
19
- "eslint-find-rules": "eslint-find-rules",
20
- "test": "node --experimental-vm-modules ./node_modules/.bin/jest"
21
- },
33
+ "author": "kaspernj <kasper@diestoeckels.de> (github.com/kaspernj)",
34
+ "license": "MIT",
35
+ "homepage": "https://github.com/kaspernj/api_maker#readme",
22
36
  "dependencies": {
23
37
  "clone-deep": ">= 4.0.1",
24
38
  "debounce": ">= 2.0.0",
@@ -47,14 +61,21 @@
47
61
  "devDependencies": {
48
62
  "@babel/eslint-parser": "^7.16.3",
49
63
  "@babel/preset-env": "^7.12.11",
50
- "@babel/preset-react": "^7.12.10",
64
+ "@babel/preset-react": "^7.26.3",
51
65
  "babel-jest": "^29.0.1",
52
66
  "eslint": "^8.2.0",
53
67
  "eslint-find-rules": "^4.0.0",
54
68
  "eslint-plugin-jest": "^28.2.0",
55
69
  "eslint-plugin-react": "^7.23.2",
70
+ "expo": "~52.0.0",
71
+ "expo-module-scripts": "^4.0.2",
56
72
  "i18n-on-steroids": "^1.0.15",
57
73
  "jest": "^29.0.1",
58
- "jsdom": "^25.0.0"
74
+ "react-native": "0.76.0"
75
+ },
76
+ "peerDependencies": {
77
+ "expo": "*",
78
+ "react": "*",
79
+ "react-native": "*"
59
80
  }
60
81
  }
@@ -1,10 +1,10 @@
1
- import config from "./config.mjs"
2
- import CustomError from "./custom-error.mjs"
1
+ import config from "./config"
2
+ import CustomError from "./custom-error"
3
3
  import FormDataObjectizer from "form-data-objectizer"
4
- import Logger from "./logger.mjs"
4
+ import Logger from "./logger"
5
5
  import qs from "qs"
6
- import SessionStatusUpdater from "./session-status-updater.mjs"
7
- import urlEncode from "./url-encode.mjs"
6
+ import SessionStatusUpdater from "./session-status-updater"
7
+ import urlEncode from "./url-encode"
8
8
 
9
9
  const logger = new Logger({name: "ApiMaker / Api"})
10
10
 
@@ -1,5 +1,5 @@
1
1
  import {dig, digg} from "diggerize"
2
- import errorMessages from "./error-messages.mjs"
2
+ import errorMessages from "./error-messages"
3
3
 
4
4
  export default class BaseError extends Error {
5
5
  static apiMakerType = "BaseError"
@@ -1,4 +1,4 @@
1
- import Column from "./column.mjs"
1
+ import Column from "./column"
2
2
  import {digg} from "diggerize"
3
3
 
4
4
  export default class ApiMakerBaseModelAttribute {
@@ -1,6 +1,6 @@
1
1
  import {digg} from "diggerize"
2
2
  import * as inflection from "inflection"
3
- import modelClassRequire from "../model-class-require.mjs"
3
+ import modelClassRequire from "../model-class-require"
4
4
 
5
5
  export default class ApiMakerBaseModelReflection {
6
6
  constructor(reflectionData) {
@@ -1,21 +1,21 @@
1
- import Attribute from "./base-model/attribute.mjs"
2
- import AttributeNotLoadedError from "./attribute-not-loaded-error.mjs"
3
- import CacheKeyGenerator from "./cache-key-generator.mjs"
4
- import Collection from "./collection.mjs"
5
- import CommandsPool from "./commands-pool.mjs"
6
- import Config from "./config.mjs"
7
- import CustomError from "./custom-error.mjs"
1
+ import Attribute from "./base-model/attribute"
2
+ import AttributeNotLoadedError from "./attribute-not-loaded-error"
3
+ import CacheKeyGenerator from "./cache-key-generator"
4
+ import Collection from "./collection"
5
+ import CommandsPool from "./commands-pool"
6
+ import Config from "./config"
7
+ import CustomError from "./custom-error"
8
8
  import {digg} from "diggerize"
9
9
  import FormDataObjectizer from "form-data-objectizer"
10
10
  import * as inflection from "inflection"
11
- import ModelName from "./model-name.mjs"
12
- import NotLoadedError from "./not-loaded-error.mjs"
11
+ import ModelName from "./model-name"
12
+ import NotLoadedError from "./not-loaded-error"
13
13
  import objectToFormData from "object-to-formdata"
14
- import Reflection from "./base-model/reflection.mjs"
15
- import Scope from "./base-model/scope.mjs"
16
- import Services from "./services.mjs"
17
- import ValidationError from "./validation-error.mjs"
18
- import {ValidationErrors} from "./validation-errors.mjs"
14
+ import Reflection from "./base-model/reflection"
15
+ import Scope from "./base-model/scope"
16
+ import Services from "./services"
17
+ import ValidationError from "./validation-error"
18
+ import {ValidationErrors} from "./validation-errors"
19
19
 
20
20
  const objectToUnderscore = (object) => {
21
21
  const newObject = {}
@@ -5,9 +5,9 @@ import memo from "set-state-compare/src/memo"
5
5
  import MoneyFormatter from "../../money-formatter"
6
6
  import PropTypes from "prop-types"
7
7
  import {useMemo} from "react"
8
- import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
8
+ import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component"
9
9
  import strftime from "strftime"
10
- import useI18n from "i18n-on-steroids/src/use-i18n.mjs"
10
+ import useI18n from "i18n-on-steroids/src/use-i18n"
11
11
 
12
12
  export default memo(shapeComponent(class ApiMakerBootstrapAttributeRow extends ShapeComponent {
13
13
  static defaultProps = {
@@ -3,7 +3,7 @@ import BaseComponent from "../base-component"
3
3
  import memo from "set-state-compare/src/memo"
4
4
  import PropTypes from "prop-types"
5
5
  import propTypesExact from "prop-types-exact"
6
- import {shapeComponent} from "set-state-compare/src/shape-component.js"
6
+ import {shapeComponent} from "set-state-compare/src/shape-component"
7
7
 
8
8
  export default memo(shapeComponent(class ApiMakerBootstrapAttributeRows extends BaseComponent {
9
9
  static defaultProps = {
@@ -4,7 +4,7 @@ import {digg, digs} from "diggerize"
4
4
  import memo from "set-state-compare/src/memo"
5
5
  import PropTypes from "prop-types"
6
6
  import {useRef} from "react"
7
- import {shapeComponent} from "set-state-compare/src/shape-component.js"
7
+ import {shapeComponent} from "set-state-compare/src/shape-component"
8
8
 
9
9
  export default memo(shapeComponent(class ApiMakerBootstrapCard extends BaseComponent {
10
10
  static defaultProps = {
@@ -1,4 +1,4 @@
1
- import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
1
+ import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component"
2
2
  import Checkbox from "../inputs/checkbox"
3
3
  import classNames from "classnames"
4
4
  import {digs} from "diggerize"
@@ -1,4 +1,4 @@
1
- import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
1
+ import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component"
2
2
  import {digs} from "diggerize"
3
3
  import {useForm} from "../form"
4
4
  import * as inflection from "inflection"
@@ -5,7 +5,7 @@ import InvalidFeedback from "./invalid-feedback"
5
5
  import Money from "../inputs/money"
6
6
  import PropTypes from "prop-types"
7
7
  import memo from "set-state-compare/src/memo"
8
- import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
8
+ import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component"
9
9
 
10
10
  const ApiMakerBootstrapInput = memo(shapeComponent(class ApiMakerBootstrapInput extends ShapeComponent {
11
11
  static propTypes = {
@@ -8,8 +8,8 @@ import qs from "qs"
8
8
  import {useMemo} from "react"
9
9
  import Text from "../utils/text"
10
10
  import Result from "../result"
11
- import {shapeComponent} from "set-state-compare/src/shape-component.js"
12
- import urlEncode from "../url-encode.mjs"
11
+ import {shapeComponent} from "set-state-compare/src/shape-component"
12
+ import urlEncode from "../url-encode"
13
13
 
14
14
  export default memo(shapeComponent(class ApiMakerBootstrapPaginate extends BaseComponent {
15
15
  static propTypes = propTypesExact({
@@ -5,9 +5,9 @@ import PropTypes from "prop-types"
5
5
  import qs from "qs"
6
6
  import memo from "set-state-compare/src/memo"
7
7
  import Text from "../utils/text"
8
- import {shapeComponent} from "set-state-compare/src/shape-component.js"
9
- import urlEncode from "../url-encode.mjs"
10
- import useSorting from "../table/use-sorting.mjs"
8
+ import {shapeComponent} from "set-state-compare/src/shape-component"
9
+ import urlEncode from "../url-encode"
10
+ import useSorting from "../table/use-sorting"
11
11
 
12
12
  import Link from "../link"
13
13
  import useQueryParams from "on-location-changed/src/use-query-params"
@@ -1,7 +1,7 @@
1
- import CableSubscriptionPool from "./cable-subscription-pool.mjs"
2
- import CableSubscription from "./cable-subscription.mjs"
1
+ import CableSubscriptionPool from "./cable-subscription-pool"
2
+ import CableSubscription from "./cable-subscription"
3
3
  import {dig} from "diggerize"
4
- import RunLast from "./run-last.mjs"
4
+ import RunLast from "./run-last"
5
5
 
6
6
  const shared = {}
7
7
 
@@ -1,9 +1,9 @@
1
- import ChannelsConsumer from "./channels-consumer.mjs"
2
- import CommandsPool from "./commands-pool.mjs"
3
- import Deserializer from "./deserializer.mjs"
1
+ import ChannelsConsumer from "./channels-consumer"
2
+ import CommandsPool from "./commands-pool"
3
+ import Deserializer from "./deserializer"
4
4
  import {digg} from "diggerize"
5
5
  import * as inflection from "inflection"
6
- import Logger from "./logger.mjs"
6
+ import Logger from "./logger"
7
7
 
8
8
  const logger = new Logger({name: "ApiMaker / CableSubscriptionPool"})
9
9
 
@@ -1,5 +1,5 @@
1
1
  import EventEmitter from "events"
2
- import Logger from "./logger.mjs"
2
+ import Logger from "./logger"
3
3
 
4
4
  const logger = new Logger({name: "ApiMaker / CableSubscription"})
5
5
 
@@ -2,7 +2,7 @@ import {digg} from "diggerize"
2
2
  import EventEmitter from "events"
3
3
  import * as inflection from "inflection"
4
4
  import {ReadersWriterLock} from "epic-locks"
5
- import Services from "./services.mjs"
5
+ import Services from "./services"
6
6
 
7
7
  const shared = {}
8
8
 
@@ -1,11 +1,11 @@
1
- import Collection from "./collection.mjs"
1
+ import Collection from "./collection"
2
2
  import {digg} from "diggerize"
3
3
  import memo from "set-state-compare/src/memo"
4
4
  import {useMemo} from "react"
5
5
  import PropTypes from "prop-types"
6
6
  import PropTypesExact from "prop-types-exact"
7
7
  import useCollection from "./use-collection"
8
- import useShape from "set-state-compare/src/use-shape.js"
8
+ import useShape from "set-state-compare/src/use-shape"
9
9
 
10
10
  const CollectionLoader = ({component, ...restProps}) => {
11
11
  const s = useShape(restProps)
@@ -1,10 +1,10 @@
1
1
  import cloneDeep from "clone-deep"
2
- import CommandsPool from "./commands-pool.mjs"
2
+ import CommandsPool from "./commands-pool"
3
3
  import {digg} from "diggerize"
4
4
  import * as inflection from "inflection"
5
5
  import {incorporate} from "incorporator"
6
- import modelClassRequire from "./model-class-require.mjs"
7
- import Result from "./result.mjs"
6
+ import modelClassRequire from "./model-class-require"
7
+ import Result from "./result"
8
8
 
9
9
  export default class ApiMakerCollection {
10
10
  static apiMakerType = "Collection"
@@ -1,16 +1,16 @@
1
- import Api from "./api.mjs"
2
- import CommandSubmitData from "./command-submit-data.mjs"
3
- import CustomError from "./custom-error.mjs"
4
- import DestroyError from "./destroy-error.mjs"
5
- import Deserializer from "./deserializer.mjs"
1
+ import Api from "./api"
2
+ import CommandSubmitData from "./command-submit-data"
3
+ import CustomError from "./custom-error"
4
+ import DestroyError from "./destroy-error"
5
+ import Deserializer from "./deserializer"
6
6
  import {dig, digg} from "diggerize"
7
- import events from "./events.mjs"
7
+ import events from "./events"
8
8
  import FormDataObjectizer from "form-data-objectizer"
9
- import RunLast from "./run-last.mjs"
10
- import Serializer from "./serializer.mjs"
11
- import SessionStatusUpdater from "./session-status-updater.mjs"
12
- import ValidationError from "./validation-error.mjs"
13
- import {ValidationErrors} from "./validation-errors.mjs"
9
+ import RunLast from "./run-last"
10
+ import Serializer from "./serializer"
11
+ import SessionStatusUpdater from "./session-status-updater"
12
+ import ValidationError from "./validation-error"
13
+ import {ValidationErrors} from "./validation-errors"
14
14
 
15
15
  const shared = {}
16
16
 
@@ -1,4 +1,4 @@
1
- import BaseError from "./base-error.mjs"
1
+ import BaseError from "./base-error"
2
2
 
3
3
  class CustomError extends BaseError {}
4
4
 
@@ -1,7 +1,7 @@
1
1
  import {digg} from "diggerize"
2
2
  import * as inflection from "inflection"
3
- import modelClassRequire from "./model-class-require.mjs"
4
- import ModelsResponseReader from "./models-response-reader.mjs"
3
+ import modelClassRequire from "./model-class-require"
4
+ import ModelsResponseReader from "./models-response-reader"
5
5
  import Money from "js-money"
6
6
 
7
7
  export default class ApiMakerDeserializer {
@@ -1,4 +1,4 @@
1
- import CustomError from "./custom-error.mjs"
1
+ import CustomError from "./custom-error"
2
2
 
3
3
  class DestroyError extends CustomError {}
4
4
 
@@ -1,10 +1,10 @@
1
- import CanCan from "./can-can.mjs"
2
- import Deserializer from "./deserializer.mjs"
1
+ import CanCan from "./can-can"
2
+ import Deserializer from "./deserializer"
3
3
  import {digg} from "diggerize"
4
- import events from "./events.mjs"
4
+ import events from "./events"
5
5
  import * as inflection from "inflection"
6
- import modelClassRequire from "./model-class-require.mjs"
7
- import Services from "./services.mjs"
6
+ import modelClassRequire from "./model-class-require"
7
+ import Services from "./services"
8
8
 
9
9
  const shared = {}
10
10
 
@@ -45,8 +45,6 @@ export default class ApiMakerDevise {
45
45
 
46
46
  if (Array.isArray(model)) model = model[0]
47
47
 
48
- await CanCan.current().resetAbilities()
49
-
50
48
  ApiMakerDevise.updateSession(model)
51
49
  events.emit("onDeviseSignIn", Object.assign({username}, args))
52
50
 
@@ -78,8 +76,6 @@ export default class ApiMakerDevise {
78
76
 
79
77
  const response = await Services.current().sendRequest("Devise::SignOut", {args})
80
78
 
81
- await CanCan.current().resetAbilities()
82
-
83
79
  // Cannot use the class because they would both import each other
84
80
  if (shared.apiMakerSessionStatusUpdater) {
85
81
  shared.apiMakerSessionStatusUpdater.updateSessionStatus()
@@ -0,0 +1,137 @@
1
+ import {digg} from "diggerize"
2
+ import EventEmitter from "events"
3
+
4
+ export default class DraggableSortController {
5
+ constructor({data, events, keyExtractor}) {
6
+ this.data = data
7
+ this.currentOrder = [...data]
8
+ this.events = events || new EventEmitter()
9
+ this.keyExtractor = keyExtractor
10
+
11
+ this.draggedItem = null
12
+ this.draggedItemData = null
13
+ this.draggedItemNewPosition = null
14
+
15
+ this.draggedOverItem = null
16
+ this.draggedOverItemData = null
17
+
18
+ this.itemData = {}
19
+
20
+ for (const itemIndex in data) {
21
+ this.itemData[itemIndex] = {
22
+ index: itemIndex,
23
+ item: data[itemIndex],
24
+ position: itemIndex
25
+ }
26
+ }
27
+ }
28
+
29
+ getEvents = () => this.events
30
+ getItemDataForItem = (item) => this.getItemDataForIndex(this.data.indexOf(item))
31
+ getItemDataForKey = (key) => this.itemData.find((itemDataI) => digg(itemDataI, "key") == key)
32
+ getItemDataForIndex = (index) => digg(this, "itemData", index)
33
+
34
+ onDragStart = ({item, itemIndex}) => {
35
+ if (item) {
36
+ this.draggedItem = item
37
+ this.draggedItemData = this.getItemDataForIndex(itemIndex)
38
+ this.draggedItemIndex = itemIndex
39
+ this.draggedItemPosition = this.draggedItemData.position
40
+ this.events.emit("onDragStart", {item, itemData: this.draggedItemData})
41
+ }
42
+ }
43
+
44
+ onDragEnd = () => {
45
+ const itemData = this.draggedItemData
46
+ const fromIndex = itemData.index
47
+ const fromPosition = digg(this, "draggedItemPosition")
48
+ const toPosition = this.draggedItemNewPosition
49
+ const fromItem = this.draggedItem
50
+ const toItem = this.draggedOverItem
51
+ const callbackArgs = {item: itemData.item, itemData, fromIndex, fromItem, fromPosition, toItem, toPosition}
52
+
53
+ this.draggedItemData.events.emit("resetPosition", {
54
+ callback: () => {
55
+ this.events.emit("onDragEndAnimation", callbackArgs)
56
+ }
57
+ })
58
+
59
+ this.draggedItem = null
60
+ this.draggedItemData = null
61
+ this.draggedItemNewPosition = null
62
+
63
+ this.draggedOverItem = null
64
+ this.draggedOverItemData = null
65
+
66
+ this.events.emit("onDragEnd", callbackArgs)
67
+ }
68
+
69
+ onItemLayout = ({events, index, item, layout}) => {
70
+ if (!(index in this.itemData)) throw new Error(`Item not found for index ${index}`)
71
+
72
+ const itemData = this.itemData[index]
73
+
74
+ itemData.layout = layout
75
+
76
+ if (!itemData.initialLayout) {
77
+ itemData.baseX = layout.x
78
+ itemData.events = events
79
+ itemData.initialLayout = layout
80
+ itemData.key = this.keyExtractor(item)
81
+ }
82
+ }
83
+
84
+ onMove = ({gestate}) => {
85
+ // Send move-event to the item being dragged so it will actually move around
86
+ this.draggedItemData?.events?.emit("move", {gestate})
87
+
88
+ const moveX = gestate.dx + this.initialDragPosition.x
89
+
90
+ for (const itemIndex in this.itemData) {
91
+ const itemData = this.getItemDataForIndex(itemIndex)
92
+ const baseX = digg(itemData, "baseX")
93
+ let smallestWidth = this.draggedItemData.layout.width
94
+
95
+ if (itemData.layout.width < smallestWidth) smallestWidth = itemData.layout.width
96
+
97
+ if (moveX > baseX && moveX < (baseX + smallestWidth) && itemIndex != this.draggedItemData.index) {
98
+ this.draggedOverItem = itemData.item
99
+ this.draggedOverItemData = itemData
100
+
101
+ const positionOfDraggedItem = this.currentOrder.indexOf(this.draggedItemData.item)
102
+ const positionOfOverItem = this.currentOrder.indexOf(this.draggedOverItemData.item)
103
+
104
+ this.currentOrder[positionOfDraggedItem] = this.draggedOverItemData.item
105
+ this.currentOrder[positionOfOverItem] = this.draggedItemData.item
106
+
107
+ this.draggedItemData.position = positionOfOverItem
108
+ this.draggedOverItemData.position = positionOfDraggedItem
109
+
110
+ this.updatePositionOfItems()
111
+ this.draggedItemNewPosition = positionOfOverItem
112
+ }
113
+ }
114
+ }
115
+
116
+ setInitialDragPosition = (initialDragPosition) => {
117
+ this.initialDragPosition = initialDragPosition
118
+ }
119
+
120
+ updatePositionOfItems() {
121
+ let currentPosition = 0
122
+
123
+ for (const item of this.currentOrder) {
124
+ const itemData = this.getItemDataForItem(item)
125
+
126
+ if (digg(itemData, "index") != digg(this, "draggedItemData", "index")) { // Dont animate dragged element to a new position because it is currently being dragged
127
+ itemData.events.emit("moveToPosition", {
128
+ x: currentPosition,
129
+ y: 0
130
+ })
131
+ }
132
+
133
+ itemData.baseX = currentPosition
134
+ currentPosition += digg(itemData, "layout", "width")
135
+ }
136
+ }
137
+ }