@kaspernj/api-maker 1.0.2011 → 1.0.2012

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 (410) hide show
  1. package/{.eslintrc.cjs → .eslintrc.js} +10 -1
  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.js +135 -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 +129 -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 +131 -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 +9 -0
  34. package/build/collection-loader.js +48 -0
  35. package/build/collection.js +280 -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 +62 -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 +112 -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-emitter-listener.js +15 -0
  52. package/build/event-model-class.js +24 -0
  53. package/build/events.js +5 -0
  54. package/build/flash-message.js +79 -0
  55. package/build/form.js +83 -0
  56. package/build/history-expo.js +20 -0
  57. package/build/history-react-native.js +20 -0
  58. package/build/history.js +3 -0
  59. package/build/index.js +3 -0
  60. package/build/inputs/attachment.js +133 -0
  61. package/build/inputs/auto-submit.js +36 -0
  62. package/build/inputs/checkbox.js +138 -0
  63. package/build/inputs/checkboxes.js +112 -0
  64. package/build/inputs/id-for-component.js +15 -0
  65. package/build/inputs/input-wrapper.js +19 -0
  66. package/build/inputs/input.js +243 -0
  67. package/build/inputs/money.js +179 -0
  68. package/build/inputs/name-for-component.js +13 -0
  69. package/build/inputs/select.js +93 -0
  70. package/build/instance-of-class-name.js +23 -0
  71. package/build/key-value-store.js +53 -0
  72. package/build/link.js +73 -0
  73. package/build/logger.js +30 -0
  74. package/build/modal.js +38 -0
  75. package/build/model-class-require.js +13 -0
  76. package/build/model-events.js +30 -0
  77. package/build/model-name.js +28 -0
  78. package/build/model-prop-type.js +101 -0
  79. package/build/model-recipes-loader.js +32 -0
  80. package/build/model-recipes-model-loader.js +357 -0
  81. package/build/models-response-reader.js +40 -0
  82. package/build/models.js +8 -0
  83. package/build/money-formatter.js +78 -0
  84. package/build/not-loaded-error.js +2 -0
  85. package/build/params.js +61 -0
  86. package/build/preloaded.js +38 -0
  87. package/build/resize-observer.js +11 -0
  88. package/build/result.js +13 -0
  89. package/build/router/route.js +270 -0
  90. package/build/router/switch.js +72 -0
  91. package/build/router.js +59 -0
  92. package/build/routes-native.js +202 -0
  93. package/build/routes.js +50 -0
  94. package/build/run-last.js +35 -0
  95. package/build/serializer.js +63 -0
  96. package/build/services.js +20 -0
  97. package/build/session-status-updater.js +134 -0
  98. package/build/source-maps-loader.js +184 -0
  99. package/build/super-admin/config-reader.js +85 -0
  100. package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
  101. package/build/super-admin/edit-page/edit-attribute-content.js +55 -0
  102. package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
  103. package/build/super-admin/edit-page/edit-attribute.js +77 -0
  104. package/build/super-admin/edit-page.js +123 -0
  105. package/build/super-admin/has-edit-config.js +12 -0
  106. package/build/super-admin/index-page.js +25 -0
  107. package/build/super-admin/index.js +181 -0
  108. package/build/super-admin/layout/header/index.js +161 -0
  109. package/build/super-admin/layout/index.js +164 -0
  110. package/build/super-admin/layout/menu/index.js +206 -0
  111. package/build/super-admin/layout/menu/menu-content.js +46 -0
  112. package/build/super-admin/layout/menu/menu-item.js +84 -0
  113. package/build/super-admin/layout/no-access.js +27 -0
  114. package/build/super-admin/model-class-table.js +61 -0
  115. package/build/super-admin/models.js +8 -0
  116. package/build/super-admin/show-nav.js +51 -0
  117. package/build/super-admin/show-page/belongs-to-attribute-row.js +29 -0
  118. package/build/super-admin/show-page/index.js +141 -0
  119. package/build/super-admin/show-reflection-actions.js +47 -0
  120. package/build/super-admin/show-reflection-link.js +48 -0
  121. package/build/super-admin/show-reflection-page.js +48 -0
  122. package/build/table/column-content.js +117 -0
  123. package/build/table/column-identifier.js +18 -0
  124. package/build/table/column-visible.js +7 -0
  125. package/build/table/components/column.js +21 -0
  126. package/build/table/components/flat-list.js +21 -0
  127. package/build/table/components/header.js +26 -0
  128. package/build/table/components/row.js +26 -0
  129. package/build/table/filters/attribute-element.js +44 -0
  130. package/build/table/filters/filter-form.js +402 -0
  131. package/build/table/filters/filter.js +90 -0
  132. package/build/table/filters/index.js +184 -0
  133. package/build/table/filters/load-search-modal.js +175 -0
  134. package/build/table/filters/reflection-element.js +37 -0
  135. package/build/table/filters/save-search-modal.js +88 -0
  136. package/build/table/filters/scope-element.js +42 -0
  137. package/build/table/header-column-content.js +68 -0
  138. package/build/table/header-column.js +144 -0
  139. package/build/table/header-select.js +105 -0
  140. package/build/table/model-callback-args.js +10 -0
  141. package/build/table/model-column.js +97 -0
  142. package/build/table/model-row.js +193 -0
  143. package/build/table/select-calculator.js +63 -0
  144. package/build/table/settings/column-row.js +97 -0
  145. package/build/table/settings/download-action.js +79 -0
  146. package/build/table/settings/index.js +92 -0
  147. package/build/table/table-settings.js +219 -0
  148. package/build/table/table.js +972 -0
  149. package/build/table/use-sorting.js +34 -0
  150. package/build/table/widths.js +75 -0
  151. package/build/table/worker-plugins-check-all-checkbox.js +125 -0
  152. package/build/table/worker-plugins-checkbox.js +115 -0
  153. package/build/translated-attributes.js +10 -0
  154. package/build/translated-collections.js +12 -0
  155. package/build/updated-attribute.js +76 -0
  156. package/build/url-encode.js +15 -0
  157. package/build/use-breakpoint.js +62 -0
  158. package/build/use-can-can.js +55 -0
  159. package/build/use-collection.js +225 -0
  160. package/build/use-created-event.js +52 -0
  161. package/build/use-current-user.js +76 -0
  162. package/build/use-destroyed-event.js +60 -0
  163. package/build/use-event-emitter.js +13 -0
  164. package/build/use-event-listener.js +16 -0
  165. package/build/use-input.js +137 -0
  166. package/build/use-model-event.js +60 -0
  167. package/build/use-model.js +169 -0
  168. package/build/use-resize-observer.js +23 -0
  169. package/build/use-router.js +104 -0
  170. package/build/use-screen-layout.js +39 -0
  171. package/build/use-updated-event.js +60 -0
  172. package/build/use-validation-errors.js +30 -0
  173. package/build/utils/card.js +51 -0
  174. package/build/utils/checkbox.js +78 -0
  175. package/build/utils/checkboxes.js +163 -0
  176. package/build/utils/default-style.js +18 -0
  177. package/build/utils/icon.js +23 -0
  178. package/build/utils/invalid-feedback.js +19 -0
  179. package/build/utils/modal.js +62 -0
  180. package/build/utils/text.js +19 -0
  181. package/build/validation-error.js +28 -0
  182. package/build/validation-errors.js +98 -0
  183. package/build/with-api-maker.js +29 -0
  184. package/build/with-collection.js +14 -0
  185. package/build/with-current-user.js +10 -0
  186. package/build/with-model.js +15 -0
  187. package/build/with-router.js +22 -0
  188. package/expo-module.config.json +17 -0
  189. package/ios/ApiMaker.podspec +29 -0
  190. package/ios/ApiMakerModule.swift +48 -0
  191. package/ios/ApiMakerView.swift +38 -0
  192. package/link.sh +8 -0
  193. package/package.json +49 -46
  194. package/src/{api.mjs → api.js} +38 -37
  195. package/src/base-component.jsx +5 -0
  196. package/src/{base-error.mjs → base-error.js} +4 -6
  197. package/src/base-model/attribute.js +33 -0
  198. package/src/base-model/column.js +13 -0
  199. package/src/base-model/reflection.js +15 -0
  200. package/src/base-model/scope.js +12 -0
  201. package/src/{base-model.mjs → base-model.js} +302 -144
  202. package/src/bootstrap/attribute-row.jsx +135 -0
  203. package/src/bootstrap/attribute-rows.jsx +27 -0
  204. package/src/bootstrap/card.jsx +149 -0
  205. package/src/bootstrap/checkbox.jsx +86 -0
  206. package/src/bootstrap/checkboxes.jsx +185 -0
  207. package/src/bootstrap/index.js +0 -0
  208. package/src/bootstrap/input.jsx +173 -0
  209. package/src/bootstrap/invalid-feedback.jsx +31 -0
  210. package/src/bootstrap/paginate.jsx +187 -0
  211. package/src/bootstrap/radio-buttons.jsx +87 -0
  212. package/src/bootstrap/select.jsx +110 -0
  213. package/src/bootstrap/sort-link.jsx +106 -0
  214. package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +16 -36
  215. package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +26 -21
  216. package/src/{cable-subscription.mjs → cable-subscription.js} +6 -4
  217. package/src/cache-key-generator.js +100 -0
  218. package/src/{can-can.mjs → can-can.js} +13 -12
  219. package/src/channels-consumer.js +10 -0
  220. package/src/collection-loader.jsx +58 -224
  221. package/src/{collection.mjs → collection.js} +98 -44
  222. package/src/{command-submit-data.mjs → command-submit-data.js} +2 -7
  223. package/src/{commands-pool.mjs → commands-pool.js} +57 -41
  224. package/src/compose.js +11 -0
  225. package/src/{config.mjs → config.js} +6 -2
  226. package/src/{custom-error.mjs → custom-error.js} +1 -1
  227. package/src/data-set-to-attributes.js +13 -0
  228. package/src/{deserializer.mjs → deserializer.js} +3 -3
  229. package/src/destroy-error.js +7 -0
  230. package/src/devise.js +129 -0
  231. package/src/draggable-sort/controller.js +137 -0
  232. package/src/draggable-sort/index.jsx +108 -0
  233. package/src/draggable-sort/item.jsx +174 -0
  234. package/src/{error-logger.mjs → error-logger.js} +12 -7
  235. package/src/{error-messages.mjs → error-messages.js} +1 -0
  236. package/src/event-connection.jsx +1 -1
  237. package/src/event-emitter-listener.jsx +8 -27
  238. package/src/event-model-class.jsx +2 -4
  239. package/src/events.js +7 -0
  240. package/src/flash-message.js +70 -0
  241. package/src/form.jsx +91 -0
  242. package/src/history-expo.js +23 -0
  243. package/src/history-react-native.js +25 -0
  244. package/src/history.js +3 -0
  245. package/src/index.js +3 -0
  246. package/src/inputs/attachment.jsx +108 -0
  247. package/src/inputs/auto-submit.js +37 -0
  248. package/src/inputs/checkbox.jsx +125 -0
  249. package/src/inputs/checkboxes.jsx +116 -0
  250. package/src/inputs/id-for-component.js +15 -0
  251. package/src/inputs/input-wrapper.jsx +16 -0
  252. package/src/inputs/input.jsx +260 -0
  253. package/src/inputs/money.jsx +187 -0
  254. package/src/inputs/name-for-component.js +15 -0
  255. package/src/inputs/select.jsx +104 -0
  256. package/src/{key-value-store.mjs → key-value-store.js} +1 -1
  257. package/src/link.jsx +54 -9
  258. package/src/logger.js +38 -0
  259. package/src/modal.jsx +37 -0
  260. package/src/model-class-require.js +17 -0
  261. package/src/{model-events.mjs → model-events.js} +1 -1
  262. package/src/{model-name.mjs → model-name.js} +8 -8
  263. package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
  264. package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +5 -5
  265. package/src/{models-response-reader.mjs → models-response-reader.js} +3 -4
  266. package/src/models.js +7 -0
  267. package/src/{models.mjs.erb → models.js.erb} +6 -3
  268. package/src/{money-formatter.mjs → money-formatter.js} +5 -4
  269. package/src/{params.mjs → params.js} +17 -7
  270. package/src/{preloaded.mjs → preloaded.js} +2 -2
  271. package/src/resize-observer.jsx +10 -0
  272. package/src/result.js +13 -0
  273. package/src/router/route.jsx +246 -0
  274. package/src/router/switch.jsx +76 -0
  275. package/src/router.jsx +23 -21
  276. package/src/{routes-native.mjs → routes-native.js} +12 -6
  277. package/src/{routes.mjs → routes.js} +1 -1
  278. package/src/run-last.js +39 -0
  279. package/src/{serializer.mjs → serializer.js} +2 -2
  280. package/src/{services.mjs → services.js} +1 -1
  281. package/src/session-status-updater.js +172 -0
  282. package/src/{source-maps-loader.mjs → source-maps-loader.js} +54 -28
  283. package/src/super-admin/config-reader.jsx +93 -0
  284. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +81 -0
  285. package/src/super-admin/edit-page/edit-attribute-content.jsx +57 -0
  286. package/src/super-admin/edit-page/edit-attribute-input.jsx +71 -0
  287. package/src/super-admin/edit-page/edit-attribute.jsx +81 -0
  288. package/src/super-admin/edit-page.jsx +117 -0
  289. package/src/super-admin/has-edit-config.js +15 -0
  290. package/src/super-admin/index-page.jsx +23 -0
  291. package/src/super-admin/index.jsx +197 -0
  292. package/src/super-admin/layout/header/index.jsx +144 -0
  293. package/src/super-admin/layout/header/style.scss +45 -0
  294. package/src/super-admin/layout/index.jsx +154 -0
  295. package/src/super-admin/layout/menu/index.jsx +171 -0
  296. package/src/super-admin/layout/menu/menu-content.jsx +43 -0
  297. package/src/super-admin/layout/menu/menu-item.jsx +70 -0
  298. package/src/super-admin/layout/menu/style.scss +11 -0
  299. package/src/super-admin/layout/no-access.jsx +26 -0
  300. package/src/super-admin/model-class-table.jsx +66 -0
  301. package/src/super-admin/models.js +11 -0
  302. package/src/super-admin/show-nav.jsx +44 -0
  303. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +30 -0
  304. package/src/super-admin/show-page/index.jsx +141 -0
  305. package/src/super-admin/show-reflection-actions.jsx +49 -0
  306. package/src/super-admin/show-reflection-link.jsx +40 -0
  307. package/src/super-admin/show-reflection-page.jsx +47 -0
  308. package/src/super-admin/stylesheets/variables.scss +11 -0
  309. package/src/table/column-content.jsx +122 -0
  310. package/src/table/column-identifier.js +23 -0
  311. package/src/table/column-visible.js +7 -0
  312. package/src/table/components/column.jsx +19 -0
  313. package/src/table/components/flat-list.jsx +19 -0
  314. package/src/table/components/header.jsx +21 -0
  315. package/src/table/components/row.jsx +23 -0
  316. package/src/table/filters/attribute-element.jsx +47 -0
  317. package/src/table/filters/filter-form.jsx +407 -0
  318. package/src/table/filters/filter.jsx +70 -0
  319. package/src/table/filters/index.jsx +170 -0
  320. package/src/table/filters/load-search-modal.jsx +146 -0
  321. package/src/table/filters/reflection-element.jsx +38 -0
  322. package/src/table/filters/save-search-modal.jsx +74 -0
  323. package/src/table/filters/scope-element.jsx +44 -0
  324. package/src/table/header-column-content.jsx +55 -0
  325. package/src/table/header-column.jsx +129 -0
  326. package/src/table/header-select.jsx +73 -0
  327. package/src/table/model-callback-args.js +10 -0
  328. package/src/table/model-column.jsx +82 -0
  329. package/src/table/model-row.jsx +136 -0
  330. package/src/table/select-calculator.js +65 -0
  331. package/src/table/settings/column-row.jsx +93 -0
  332. package/src/table/settings/download-action.jsx +68 -0
  333. package/src/table/settings/index.jsx +65 -0
  334. package/src/table/table-settings.js +263 -0
  335. package/src/table/table.jsx +950 -0
  336. package/src/table/use-sorting.js +35 -0
  337. package/src/table/variables.scss +11 -0
  338. package/src/table/widths.jsx +87 -0
  339. package/src/table/worker-plugins-check-all-checkbox.jsx +112 -0
  340. package/src/table/worker-plugins-checkbox.jsx +104 -0
  341. package/src/translated-attributes.js +11 -0
  342. package/src/{translated-collections.mjs → translated-collections.js} +3 -2
  343. package/src/updated-attribute.jsx +1 -1
  344. package/src/url-encode.js +18 -0
  345. package/src/use-breakpoint.js +76 -0
  346. package/src/use-can-can.js +55 -0
  347. package/src/use-collection.js +280 -0
  348. package/src/use-created-event.js +55 -0
  349. package/src/use-current-user.js +88 -0
  350. package/src/use-destroyed-event.js +60 -0
  351. package/src/use-event-emitter.js +15 -0
  352. package/src/use-event-listener.js +19 -0
  353. package/src/use-input.js +157 -0
  354. package/src/use-model-event.js +60 -0
  355. package/src/use-model.js +189 -0
  356. package/src/use-resize-observer.js +24 -0
  357. package/src/use-router.jsx +128 -0
  358. package/src/use-screen-layout.js +49 -0
  359. package/src/use-updated-event.js +60 -0
  360. package/src/use-validation-errors.js +33 -0
  361. package/src/utils/card.jsx +49 -0
  362. package/src/utils/checkbox.jsx +80 -0
  363. package/src/utils/checkboxes.jsx +158 -0
  364. package/src/utils/default-style.jsx +25 -0
  365. package/src/utils/icon.jsx +21 -0
  366. package/src/utils/invalid-feedback.jsx +20 -0
  367. package/src/utils/modal.jsx +60 -0
  368. package/src/utils/text.jsx +16 -0
  369. package/src/{validation-error.mjs → validation-error.js} +9 -5
  370. package/src/{validation-errors.mjs → validation-errors.js} +15 -27
  371. package/src/with-api-maker.jsx +31 -0
  372. package/src/with-collection.jsx +17 -0
  373. package/src/with-current-user.jsx +7 -25
  374. package/src/with-model.jsx +16 -0
  375. package/src/with-router.jsx +7 -129
  376. package/__tests__/base-model.test.js +0 -71
  377. package/__tests__/cable-connection-pool.test.js +0 -227
  378. package/__tests__/cable-subscription-pool.test.js +0 -26
  379. package/__tests__/can-can.test.js +0 -34
  380. package/__tests__/collection.test.js +0 -51
  381. package/__tests__/custom-error.test.js +0 -13
  382. package/__tests__/model-name.test.js +0 -34
  383. package/__tests__/model-prop-type.test.js +0 -113
  384. package/__tests__/params.test.js +0 -40
  385. package/__tests__/routes-native.test.js +0 -103
  386. package/__tests__/routes.test.js +0 -46
  387. package/__tests__/serializer.test.js +0 -30
  388. package/__tests__/support/task.js +0 -27
  389. package/__tests__/support/user.js +0 -32
  390. package/index.js +0 -1
  391. package/jest.config.js +0 -4
  392. package/src/can-can-loader.jsx +0 -54
  393. package/src/channels-consumer.mjs +0 -3
  394. package/src/destroy-error.mjs +0 -7
  395. package/src/devise.mjs +0 -122
  396. package/src/event-created.jsx +0 -65
  397. package/src/event-destroyed.jsx +0 -29
  398. package/src/event-listener.jsx +0 -38
  399. package/src/event-updated.jsx +0 -74
  400. package/src/logger.mjs +0 -25
  401. package/src/model-class-require.mjs +0 -10
  402. package/src/model-load-wrapper.jsx +0 -116
  403. package/src/result.mjs +0 -29
  404. package/src/session-status-updater.mjs +0 -116
  405. package/webpack.config.js +0 -15
  406. /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
  407. /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
  408. /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
  409. /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
  410. /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
@@ -0,0 +1,62 @@
1
+ import * as inflection from "inflection";
2
+ const accessors = {
3
+ breakPoints: {
4
+ default: [["xxl", 1400], ["xl", 1200], ["lg", 992], ["md", 768], ["sm", 576], ["xs", 0]],
5
+ required: true
6
+ },
7
+ cableUrl: {
8
+ require: false
9
+ },
10
+ currenciesCollection: {
11
+ required: true
12
+ },
13
+ history: {
14
+ required: true
15
+ },
16
+ host: {
17
+ required: false
18
+ },
19
+ i18n: {
20
+ required: false
21
+ },
22
+ linkTo: {
23
+ required: true
24
+ },
25
+ modal: {
26
+ required: false
27
+ },
28
+ navigation: {
29
+ required: true
30
+ },
31
+ routes: {
32
+ required: false
33
+ },
34
+ routeDefinitions: {
35
+ required: false
36
+ }
37
+ };
38
+ class ApiMakerConfig {
39
+ constructor() {
40
+ if (!globalThis.apiMakerConfigGlobal) globalThis.apiMakerConfigGlobal = {};
41
+ this.global = globalThis.apiMakerConfigGlobal;
42
+ }
43
+ }
44
+ for (const accessorName in accessors) {
45
+ const accessorData = accessors[accessorName];
46
+ const camelizedAccessor = inflection.camelize(accessorName);
47
+ ApiMakerConfig.prototype[`set${camelizedAccessor}`] = function (newValue) {
48
+ this.global[accessorName] = newValue;
49
+ };
50
+ ApiMakerConfig.prototype[`get${camelizedAccessor}`] = function (...args) {
51
+ if (!this.global[accessorName]) {
52
+ if (accessorData.default) return accessorData.default;
53
+ if (accessorData.required) throw new Error(`${accessorName} hasn't been set`);
54
+ }
55
+ const value = this.global[accessorName];
56
+ if (typeof value == "function") return value(...args);
57
+ return value;
58
+ };
59
+ }
60
+ const apiMakerConfig = new ApiMakerConfig();
61
+ export default apiMakerConfig;
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiYWNjZXNzb3JzIiwiYnJlYWtQb2ludHMiLCJkZWZhdWx0IiwicmVxdWlyZWQiLCJjYWJsZVVybCIsInJlcXVpcmUiLCJjdXJyZW5jaWVzQ29sbGVjdGlvbiIsImhpc3RvcnkiLCJob3N0IiwiaTE4biIsImxpbmtUbyIsIm1vZGFsIiwibmF2aWdhdGlvbiIsInJvdXRlcyIsInJvdXRlRGVmaW5pdGlvbnMiLCJBcGlNYWtlckNvbmZpZyIsImNvbnN0cnVjdG9yIiwiZ2xvYmFsVGhpcyIsImFwaU1ha2VyQ29uZmlnR2xvYmFsIiwiZ2xvYmFsIiwiYWNjZXNzb3JOYW1lIiwiYWNjZXNzb3JEYXRhIiwiY2FtZWxpemVkQWNjZXNzb3IiLCJjYW1lbGl6ZSIsInByb3RvdHlwZSIsIm5ld1ZhbHVlIiwiYXJncyIsIkVycm9yIiwidmFsdWUiLCJhcGlNYWtlckNvbmZpZyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbmNvbnN0IGFjY2Vzc29ycyA9IHtcbiAgYnJlYWtQb2ludHM6IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICBbXCJ4eGxcIiwgMTQwMF0sXG4gICAgICBbXCJ4bFwiLCAxMjAwXSxcbiAgICAgIFtcImxnXCIsIDk5Ml0sXG4gICAgICBbXCJtZFwiLCA3NjhdLFxuICAgICAgW1wic21cIiwgNTc2XSxcbiAgICAgIFtcInhzXCIsIDBdXG4gICAgXSxcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LFxuICBjYWJsZVVybDoge3JlcXVpcmU6IGZhbHNlfSxcbiAgY3VycmVuY2llc0NvbGxlY3Rpb246IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIGhpc3Rvcnk6IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIGhvc3Q6IHtyZXF1aXJlZDogZmFsc2V9LFxuICBpMThuOiB7cmVxdWlyZWQ6IGZhbHNlfSxcbiAgbGlua1RvOiB7cmVxdWlyZWQ6IHRydWV9LFxuICBtb2RhbDoge3JlcXVpcmVkOiBmYWxzZX0sXG4gIG5hdmlnYXRpb246IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIHJvdXRlczoge3JlcXVpcmVkOiBmYWxzZX0sXG4gIHJvdXRlRGVmaW5pdGlvbnM6IHtyZXF1aXJlZDogZmFsc2V9XG59XG5cbmNsYXNzIEFwaU1ha2VyQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCFnbG9iYWxUaGlzLmFwaU1ha2VyQ29uZmlnR2xvYmFsKSBnbG9iYWxUaGlzLmFwaU1ha2VyQ29uZmlnR2xvYmFsID0ge31cblxuICAgIHRoaXMuZ2xvYmFsID0gZ2xvYmFsVGhpcy5hcGlNYWtlckNvbmZpZ0dsb2JhbFxuICB9XG59XG5cbmZvciAoY29uc3QgYWNjZXNzb3JOYW1lIGluIGFjY2Vzc29ycykge1xuICBjb25zdCBhY2Nlc3NvckRhdGEgPSBhY2Nlc3NvcnNbYWNjZXNzb3JOYW1lXVxuICBjb25zdCBjYW1lbGl6ZWRBY2Nlc3NvciA9IGluZmxlY3Rpb24uY2FtZWxpemUoYWNjZXNzb3JOYW1lKVxuXG4gIEFwaU1ha2VyQ29uZmlnLnByb3RvdHlwZVtgc2V0JHtjYW1lbGl6ZWRBY2Nlc3Nvcn1gXSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkgeyB0aGlzLmdsb2JhbFthY2Nlc3Nvck5hbWVdID0gbmV3VmFsdWUgfVxuICBBcGlNYWtlckNvbmZpZy5wcm90b3R5cGVbYGdldCR7Y2FtZWxpemVkQWNjZXNzb3J9YF0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmICghdGhpcy5nbG9iYWxbYWNjZXNzb3JOYW1lXSkge1xuICAgICAgaWYgKGFjY2Vzc29yRGF0YS5kZWZhdWx0KSByZXR1cm4gYWNjZXNzb3JEYXRhLmRlZmF1bHRcbiAgICAgIGlmIChhY2Nlc3NvckRhdGEucmVxdWlyZWQpIHRocm93IG5ldyBFcnJvcihgJHthY2Nlc3Nvck5hbWV9IGhhc24ndCBiZWVuIHNldGApXG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdsb2JhbFthY2Nlc3Nvck5hbWVdXG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbHVlKC4uLmFyZ3MpXG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5jb25zdCBhcGlNYWtlckNvbmZpZyA9IG5ldyBBcGlNYWtlckNvbmZpZygpXG5cbmV4cG9ydCBkZWZhdWx0IGFwaU1ha2VyQ29uZmlnXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBS0EsVUFBVSxNQUFNLFlBQVk7QUFFeEMsTUFBTUMsU0FBUyxHQUFHO0VBQ2hCQyxXQUFXLEVBQUU7SUFDWEMsT0FBTyxFQUFFLENBQ1AsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQ2IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQ1osQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ1Y7SUFDREMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEQyxRQUFRLEVBQUU7SUFBQ0MsT0FBTyxFQUFFO0VBQUssQ0FBQztFQUMxQkMsb0JBQW9CLEVBQUU7SUFBQ0gsUUFBUSxFQUFFO0VBQUksQ0FBQztFQUN0Q0ksT0FBTyxFQUFFO0lBQUNKLFFBQVEsRUFBRTtFQUFJLENBQUM7RUFDekJLLElBQUksRUFBRTtJQUFDTCxRQUFRLEVBQUU7RUFBSyxDQUFDO0VBQ3ZCTSxJQUFJLEVBQUU7SUFBQ04sUUFBUSxFQUFFO0VBQUssQ0FBQztFQUN2Qk8sTUFBTSxFQUFFO0lBQUNQLFFBQVEsRUFBRTtFQUFJLENBQUM7RUFDeEJRLEtBQUssRUFBRTtJQUFDUixRQUFRLEVBQUU7RUFBSyxDQUFDO0VBQ3hCUyxVQUFVLEVBQUU7SUFBQ1QsUUFBUSxFQUFFO0VBQUksQ0FBQztFQUM1QlUsTUFBTSxFQUFFO0lBQUNWLFFBQVEsRUFBRTtFQUFLLENBQUM7RUFDekJXLGdCQUFnQixFQUFFO0lBQUNYLFFBQVEsRUFBRTtFQUFLO0FBQ3BDLENBQUM7QUFFRCxNQUFNWSxjQUFjLENBQUM7RUFDbkJDLFdBQVdBLENBQUEsRUFBRztJQUNaLElBQUksQ0FBQ0MsVUFBVSxDQUFDQyxvQkFBb0IsRUFBRUQsVUFBVSxDQUFDQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7SUFFMUUsSUFBSSxDQUFDQyxNQUFNLEdBQUdGLFVBQVUsQ0FBQ0Msb0JBQW9CO0VBQy9DO0FBQ0Y7QUFFQSxLQUFLLE1BQU1FLFlBQVksSUFBSXBCLFNBQVMsRUFBRTtFQUNwQyxNQUFNcUIsWUFBWSxHQUFHckIsU0FBUyxDQUFDb0IsWUFBWSxDQUFDO0VBQzVDLE1BQU1FLGlCQUFpQixHQUFHdkIsVUFBVSxDQUFDd0IsUUFBUSxDQUFDSCxZQUFZLENBQUM7RUFFM0RMLGNBQWMsQ0FBQ1MsU0FBUyxDQUFDLE1BQU1GLGlCQUFpQixFQUFFLENBQUMsR0FBRyxVQUFVRyxRQUFRLEVBQUU7SUFBRSxJQUFJLENBQUNOLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLEdBQUdLLFFBQVE7RUFBQyxDQUFDO0VBQ2xIVixjQUFjLENBQUNTLFNBQVMsQ0FBQyxNQUFNRixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsVUFBVSxHQUFHSSxJQUFJLEVBQUU7SUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQ1AsTUFBTSxDQUFDQyxZQUFZLENBQUMsRUFBRTtNQUM5QixJQUFJQyxZQUFZLENBQUNuQixPQUFPLEVBQUUsT0FBT21CLFlBQVksQ0FBQ25CLE9BQU87TUFDckQsSUFBSW1CLFlBQVksQ0FBQ2xCLFFBQVEsRUFBRSxNQUFNLElBQUl3QixLQUFLLENBQUMsR0FBR1AsWUFBWSxrQkFBa0IsQ0FBQztJQUMvRTtJQUVBLE1BQU1RLEtBQUssR0FBRyxJQUFJLENBQUNULE1BQU0sQ0FBQ0MsWUFBWSxDQUFDO0lBRXZDLElBQUksT0FBT1EsS0FBSyxJQUFJLFVBQVUsRUFBRSxPQUFPQSxLQUFLLENBQUMsR0FBR0YsSUFBSSxDQUFDO0lBRXJELE9BQU9FLEtBQUs7RUFDZCxDQUFDO0FBQ0g7QUFFQSxNQUFNQyxjQUFjLEdBQUcsSUFBSWQsY0FBYyxDQUFDLENBQUM7QUFFM0MsZUFBZWMsY0FBYyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,5 @@
1
+ import BaseError from "./base-error";
2
+ class CustomError extends BaseError {}
3
+ CustomError.apiMakerType = "CustomError";
4
+ export default CustomError;
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJDdXN0b21FcnJvciIsImFwaU1ha2VyVHlwZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jdXN0b20tZXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VFcnJvciBmcm9tIFwiLi9iYXNlLWVycm9yXCJcblxuY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cblxuQ3VzdG9tRXJyb3IuYXBpTWFrZXJUeXBlID0gXCJDdXN0b21FcnJvclwiXG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbUVycm9yXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFNBQVMsTUFBTSxjQUFjO0FBRXBDLE1BQU1DLFdBQVcsU0FBU0QsU0FBUyxDQUFDO0FBRXBDQyxXQUFXLENBQUNDLFlBQVksR0FBRyxhQUFhO0FBRXhDLGVBQWVELFdBQVciLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,10 @@
1
+ import * as inflection from "inflection";
2
+ export default function dataSetToAttributes(dataSet) {
3
+ const result = {};
4
+ for (const key in dataSet) {
5
+ const dasherizedKey = `data-${inflection.dasherize(inflection.underscore(key))}`;
6
+ result[dasherizedKey] = dataSet[key];
7
+ }
8
+ return result;
9
+ }
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiZGF0YVNldFRvQXR0cmlidXRlcyIsImRhdGFTZXQiLCJyZXN1bHQiLCJrZXkiLCJkYXNoZXJpemVkS2V5IiwiZGFzaGVyaXplIiwidW5kZXJzY29yZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLXNldC10by1hdHRyaWJ1dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkYXRhU2V0VG9BdHRyaWJ1dGVzKGRhdGFTZXQpIHtcbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhU2V0KSB7XG4gICAgY29uc3QgZGFzaGVyaXplZEtleSA9IGBkYXRhLSR7aW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSkpfWBcblxuICAgIHJlc3VsdFtkYXNoZXJpemVkS2V5XSA9IGRhdGFTZXRba2V5XVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUtBLFVBQVUsTUFBTSxZQUFZO0FBRXhDLGVBQWUsU0FBU0MsbUJBQW1CQSxDQUFDQyxPQUFPLEVBQUU7RUFDbkQsTUFBTUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUVqQixLQUFLLE1BQU1DLEdBQUcsSUFBSUYsT0FBTyxFQUFFO0lBQ3pCLE1BQU1HLGFBQWEsR0FBRyxRQUFRTCxVQUFVLENBQUNNLFNBQVMsQ0FBQ04sVUFBVSxDQUFDTyxVQUFVLENBQUNILEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFFaEZELE1BQU0sQ0FBQ0UsYUFBYSxDQUFDLEdBQUdILE9BQU8sQ0FBQ0UsR0FBRyxDQUFDO0VBQ3RDO0VBRUEsT0FBT0QsTUFBTTtBQUNmIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,56 @@
1
+ import { digg } from "diggerize";
2
+ import * as inflection from "inflection";
3
+ import modelClassRequire from "./model-class-require";
4
+ import ModelsResponseReader from "./models-response-reader";
5
+ import Money from "js-money";
6
+ export default class ApiMakerDeserializer {
7
+ static parse(object) {
8
+ if (Array.isArray(object)) {
9
+ return object.map(value => ApiMakerDeserializer.parse(value));
10
+ } else if (object && typeof object == "object") {
11
+ if (object.api_maker_type == "date") {
12
+ const date = new Date(digg(object, "value"));
13
+ date.apiMakerType = "date";
14
+ return date;
15
+ } else if (object.api_maker_type == "time") {
16
+ const date = new Date(digg(object, "value"));
17
+ date.apiMakerType = "time";
18
+ return date;
19
+ } else if (object.api_maker_type == "collection") {
20
+ // Need to remove type to avoid circular error
21
+ const {
22
+ api_maker_type,
23
+ ...restObject
24
+ } = object;
25
+ return ModelsResponseReader.collection(ApiMakerDeserializer.parse(restObject));
26
+ } else if (object.api_maker_type == "money") {
27
+ const cents = digg(object, "amount");
28
+ const currency = digg(object, "currency");
29
+ return Money.fromInteger(cents, currency);
30
+ } else if (object.api_maker_type == "model") {
31
+ const modelClassName = inflection.classify(digg(object, "model_name"));
32
+ const ModelClass = modelClassRequire(modelClassName);
33
+ const data = ApiMakerDeserializer.parse(digg(object, "serialized"));
34
+ const model = new ModelClass({
35
+ data,
36
+ isNewRecord: false
37
+ });
38
+ return model;
39
+ } else if (object.api_maker_type == "resource") {
40
+ const modelClassName = inflection.classify(digg(object, "name"));
41
+ const ModelClass = modelClassRequire(modelClassName);
42
+ return ModelClass;
43
+ } else {
44
+ const newObject = {};
45
+ for (const key in object) {
46
+ const value = object[key];
47
+ newObject[key] = ApiMakerDeserializer.parse(value);
48
+ }
49
+ return newObject;
50
+ }
51
+ } else {
52
+ return object;
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiaW5mbGVjdGlvbiIsIm1vZGVsQ2xhc3NSZXF1aXJlIiwiTW9kZWxzUmVzcG9uc2VSZWFkZXIiLCJNb25leSIsIkFwaU1ha2VyRGVzZXJpYWxpemVyIiwicGFyc2UiLCJvYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJ2YWx1ZSIsImFwaV9tYWtlcl90eXBlIiwiZGF0ZSIsIkRhdGUiLCJhcGlNYWtlclR5cGUiLCJyZXN0T2JqZWN0IiwiY29sbGVjdGlvbiIsImNlbnRzIiwiY3VycmVuY3kiLCJmcm9tSW50ZWdlciIsIm1vZGVsQ2xhc3NOYW1lIiwiY2xhc3NpZnkiLCJNb2RlbENsYXNzIiwiZGF0YSIsIm1vZGVsIiwiaXNOZXdSZWNvcmQiLCJuZXdPYmplY3QiLCJrZXkiXSwic291cmNlcyI6WyIuLi9zcmMvZGVzZXJpYWxpemVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBNb2RlbHNSZXNwb25zZVJlYWRlciBmcm9tIFwiLi9tb2RlbHMtcmVzcG9uc2UtcmVhZGVyXCJcbmltcG9ydCBNb25leSBmcm9tIFwianMtbW9uZXlcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckRlc2VyaWFsaXplciB7XG4gIHN0YXRpYyBwYXJzZSAob2JqZWN0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgcmV0dXJuIG9iamVjdC5tYXAoKHZhbHVlKSA9PiBBcGlNYWtlckRlc2VyaWFsaXplci5wYXJzZSh2YWx1ZSkpXG4gICAgfSBlbHNlIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0LmFwaV9tYWtlcl90eXBlID09IFwiZGF0ZVwiKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkaWdnKG9iamVjdCwgXCJ2YWx1ZVwiKSlcblxuICAgICAgICBkYXRlLmFwaU1ha2VyVHlwZSA9IFwiZGF0ZVwiXG5cbiAgICAgICAgcmV0dXJuIGRhdGVcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0LmFwaV9tYWtlcl90eXBlID09IFwidGltZVwiKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkaWdnKG9iamVjdCwgXCJ2YWx1ZVwiKSlcblxuICAgICAgICBkYXRlLmFwaU1ha2VyVHlwZSA9IFwidGltZVwiXG5cbiAgICAgICAgcmV0dXJuIGRhdGVcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0LmFwaV9tYWtlcl90eXBlID09IFwiY29sbGVjdGlvblwiKSB7XG4gICAgICAgIC8vIE5lZWQgdG8gcmVtb3ZlIHR5cGUgdG8gYXZvaWQgY2lyY3VsYXIgZXJyb3JcbiAgICAgICAgY29uc3Qge2FwaV9tYWtlcl90eXBlLCAuLi5yZXN0T2JqZWN0fSA9IG9iamVjdFxuXG4gICAgICAgIHJldHVybiBNb2RlbHNSZXNwb25zZVJlYWRlci5jb2xsZWN0aW9uKEFwaU1ha2VyRGVzZXJpYWxpemVyLnBhcnNlKHJlc3RPYmplY3QpKVxuICAgICAgfSBlbHNlIGlmIChvYmplY3QuYXBpX21ha2VyX3R5cGUgPT0gXCJtb25leVwiKSB7XG4gICAgICAgIGNvbnN0IGNlbnRzID0gZGlnZyhvYmplY3QsIFwiYW1vdW50XCIpXG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gZGlnZyhvYmplY3QsIFwiY3VycmVuY3lcIilcblxuICAgICAgICByZXR1cm4gTW9uZXkuZnJvbUludGVnZXIoY2VudHMsIGN1cnJlbmN5KVxuICAgICAgfSBlbHNlIGlmIChvYmplY3QuYXBpX21ha2VyX3R5cGUgPT0gXCJtb2RlbFwiKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gaW5mbGVjdGlvbi5jbGFzc2lmeShkaWdnKG9iamVjdCwgXCJtb2RlbF9uYW1lXCIpKVxuICAgICAgICBjb25zdCBNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUobW9kZWxDbGFzc05hbWUpXG4gICAgICAgIGNvbnN0IGRhdGEgPSBBcGlNYWtlckRlc2VyaWFsaXplci5wYXJzZShkaWdnKG9iamVjdCwgXCJzZXJpYWxpemVkXCIpKVxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbENsYXNzKHtkYXRhLCBpc05ld1JlY29yZDogZmFsc2V9KVxuXG4gICAgICAgIHJldHVybiBtb2RlbFxuICAgICAgfSBlbHNlIGlmIChvYmplY3QuYXBpX21ha2VyX3R5cGUgPT0gXCJyZXNvdXJjZVwiKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gaW5mbGVjdGlvbi5jbGFzc2lmeShkaWdnKG9iamVjdCwgXCJuYW1lXCIpKVxuICAgICAgICBjb25zdCBNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUobW9kZWxDbGFzc05hbWUpXG5cbiAgICAgICAgcmV0dXJuIE1vZGVsQ2xhc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld09iamVjdCA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAgICAgICAgIG5ld09iamVjdFtrZXldID0gQXBpTWFrZXJEZXNlcmlhbGl6ZXIucGFyc2UodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqZWN0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsSUFBSSxRQUFPLFdBQVc7QUFDOUIsT0FBTyxLQUFLQyxVQUFVLE1BQU0sWUFBWTtBQUN4QyxPQUFPQyxpQkFBaUIsTUFBTSx1QkFBdUI7QUFDckQsT0FBT0Msb0JBQW9CLE1BQU0s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
@@ -0,0 +1,5 @@
1
+ import CustomError from "./custom-error";
2
+ class DestroyError extends CustomError {}
3
+ DestroyError.apiMakerType = "DestroyError";
4
+ export default DestroyError;
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDdXN0b21FcnJvciIsIkRlc3Ryb3lFcnJvciIsImFwaU1ha2VyVHlwZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXN0cm95LWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDdXN0b21FcnJvciBmcm9tIFwiLi9jdXN0b20tZXJyb3JcIlxuXG5jbGFzcyBEZXN0cm95RXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7fVxuXG5EZXN0cm95RXJyb3IuYXBpTWFrZXJUeXBlID0gXCJEZXN0cm95RXJyb3JcIlxuXG5leHBvcnQgZGVmYXVsdCBEZXN0cm95RXJyb3JcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBVyxNQUFNLGdCQUFnQjtBQUV4QyxNQUFNQyxZQUFZLFNBQVNELFdBQVcsQ0FBQztBQUV2Q0MsWUFBWSxDQUFDQyxZQUFZLEdBQUcsY0FBYztBQUUxQyxlQUFlRCxZQUFZIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,112 @@
1
+ import Deserializer from "./deserializer";
2
+ import events from "./events";
3
+ import * as inflection from "inflection";
4
+ import modelClassRequire from "./model-class-require";
5
+ import Services from "./services";
6
+ if (!globalThis.ApiMakerDevise) globalThis.ApiMakerDevise = {
7
+ scopes: {}
8
+ };
9
+ const shared = globalThis.ApiMakerDevise;
10
+ export default class ApiMakerDevise {
11
+ static callSignOutEvent(args) {
12
+ events.emit("onDeviseSignOut", {
13
+ args
14
+ });
15
+ }
16
+ static current() {
17
+ if (!shared.currentApiMakerDevise) {
18
+ shared.currentApiMakerDevise = new ApiMakerDevise();
19
+ }
20
+ return shared.currentApiMakerDevise;
21
+ }
22
+ static events() {
23
+ return events;
24
+ }
25
+ static addUserScope(scope, args = {}) {
26
+ const currentMethodName = `current${inflection.camelize(scope)}`;
27
+ const isSignedInMethodName = `is${inflection.camelize(scope)}SignedIn`;
28
+ const getArgsMethodName = `get${inflection.camelize(scope)}Args`;
29
+ ApiMakerDevise[currentMethodName] = () => ApiMakerDevise.current().getCurrentScope(scope);
30
+ ApiMakerDevise[isSignedInMethodName] = () => Boolean(ApiMakerDevise.current().getCurrentScope(scope));
31
+ ApiMakerDevise[getArgsMethodName] = () => args;
32
+ }
33
+ static async signIn(username, password, args = {}) {
34
+ if (!args.scope) args.scope = "user";
35
+ const postData = {
36
+ username,
37
+ password,
38
+ args
39
+ };
40
+ const response = await Services.current().sendRequest("Devise::SignIn", postData);
41
+ let model = response.model;
42
+ if (Array.isArray(model)) model = model[0];
43
+ ApiMakerDevise.updateSession(model);
44
+ events.emit("onDeviseSignIn", Object.assign({
45
+ username
46
+ }, args));
47
+ return {
48
+ model,
49
+ response
50
+ };
51
+ }
52
+ static updateSession(model, args = {}) {
53
+ if (!args.scope) args.scope = "user";
54
+ const camelizedScopeName = inflection.camelize(args.scope, true);
55
+ ApiMakerDevise.current().currents[camelizedScopeName] = model;
56
+ }
57
+ hasCurrentScope(scope) {
58
+ const camelizedScopeName = inflection.camelize(scope, true);
59
+ return camelizedScopeName in ApiMakerDevise.current().currents;
60
+ }
61
+ static setSignedOut(args) {
62
+ ApiMakerDevise.current().currents[inflection.camelize(args.scope, true)] = null;
63
+ }
64
+ static async signOut(args = {}) {
65
+ if (!args.scope) {
66
+ args.scope = "user";
67
+ }
68
+ const response = await Services.current().sendRequest("Devise::SignOut", {
69
+ args
70
+ });
71
+
72
+ // Cannot use the class because they would both import each other
73
+ if (shared.apiMakerSessionStatusUpdater) {
74
+ shared.apiMakerSessionStatusUpdater.updateSessionStatus();
75
+ }
76
+ ApiMakerDevise.setSignedOut(args);
77
+ ApiMakerDevise.callSignOutEvent(args);
78
+ return response;
79
+ }
80
+ constructor() {
81
+ this.currents = {};
82
+ }
83
+ getCurrentScope(scope) {
84
+ if (!(scope in this.currents)) {
85
+ this.currents[scope] = this.loadCurrentScope(scope);
86
+ }
87
+ return this.currents[scope];
88
+ }
89
+ hasGlobalCurrentScope(scope) {
90
+ if (globalThis.apiMakerDeviseCurrent && scope in globalThis.apiMakerDeviseCurrent) {
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+ loadCurrentScope(scope) {
96
+ if (!this.hasGlobalCurrentScope(scope)) {
97
+ return null;
98
+ }
99
+ const scopeData = globalThis.apiMakerDeviseCurrent[scope];
100
+ if (!scopeData) return null;
101
+ const parsedScopeData = Deserializer.parse(scopeData);
102
+
103
+ // Might be a collection with preloaded relationships
104
+ if (Array.isArray(parsedScopeData)) return parsedScopeData[0];
105
+ const ModelClass = modelClassRequire(scope);
106
+ const modelInstance = new ModelClass({
107
+ data: parsedScopeData
108
+ });
109
+ return modelInstance;
110
+ }
111
+ }
112
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXNlcmlhbGl6ZXIiLCJldmVudHMiLCJpbmZsZWN0aW9uIiwibW9kZWxDbGFzc1JlcXVpcmUiLCJTZXJ2aWNlcyIsImdsb2JhbFRoaXMiLCJBcGlNYWtlckRldmlzZSIsInNjb3BlcyIsInNoYXJlZCIsImNhbGxTaWduT3V0RXZlbnQiLCJhcmdzIiwiZW1pdCIsImN1cnJlbnQiLCJjdXJyZW50QXBpTWFrZXJEZXZpc2UiLCJhZGRVc2VyU2NvcGUiLCJzY29wZSIsImN1cnJlbnRNZXRob2ROYW1lIiwiY2FtZWxpemUiLCJpc1NpZ25lZEluTWV0aG9kTmFtZSIsImdldEFyZ3NNZXRob2ROYW1lIiwiZ2V0Q3VycmVudFNjb3BlIiwiQm9vbGVhbiIsInNpZ25JbiIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJwb3N0RGF0YSIsInJlc3BvbnNlIiwic2VuZFJlcXVlc3QiLCJtb2RlbCIsIkFycmF5IiwiaXNBcnJheSIsInVwZGF0ZVNlc3Npb24iLCJPYmplY3QiLCJhc3NpZ24iLCJjYW1lbGl6ZWRTY29wZU5hbWUiLCJjdXJyZW50cyIsImhhc0N1cnJlbnRTY29wZSIsInNldFNpZ25lZE91dCIsInNpZ25PdXQiLCJhcGlNYWtlclNlc3Npb25TdGF0dXNVcGRhdGVyIiwidXBkYXRlU2Vzc2lvblN0YXR1cyIsImNvbnN0cnVjdG9yIiwibG9hZEN1cnJlbnRTY29wZSIsImhhc0dsb2JhbEN1cnJlbnRTY29wZSIsImFwaU1ha2VyRGV2aXNlQ3VycmVudCIsInNjb3BlRGF0YSIsInBhcnNlZFNjb3BlRGF0YSIsInBhcnNlIiwiTW9kZWxDbGFzcyIsIm1vZGVsSW5zdGFuY2UiLCJkYXRhIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RldmlzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVzZXJpYWxpemVyIGZyb20gXCIuL2Rlc2VyaWFsaXplclwiXG5pbXBvcnQgZXZlbnRzIGZyb20gXCIuL2V2ZW50c1wiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBTZXJ2aWNlcyBmcm9tIFwiLi9zZXJ2aWNlc1wiXG5cbmlmICghZ2xvYmFsVGhpcy5BcGlNYWtlckRldmlzZSkgZ2xvYmFsVGhpcy5BcGlNYWtlckRldmlzZSA9IHtzY29wZXM6IHt9fVxuXG5jb25zdCBzaGFyZWQgPSBnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyRGV2aXNlIHtcbiAgc3RhdGljIGNhbGxTaWduT3V0RXZlbnQoYXJncykge1xuICAgIGV2ZW50cy5lbWl0KFwib25EZXZpc2VTaWduT3V0XCIsIHthcmdzfSlcbiAgfVxuXG4gIHN0YXRpYyBjdXJyZW50KCkge1xuICAgIGlmICghc2hhcmVkLmN1cnJlbnRBcGlNYWtlckRldmlzZSkge1xuICAgICAgc2hhcmVkLmN1cnJlbnRBcGlNYWtlckRldmlzZSA9IG5ldyBBcGlNYWtlckRldmlzZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJEZXZpc2VcbiAgfVxuXG4gIHN0YXRpYyBldmVudHMoKSB7XG4gICAgcmV0dXJuIGV2ZW50c1xuICB9XG5cbiAgc3RhdGljIGFkZFVzZXJTY29wZShzY29wZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3QgY3VycmVudE1ldGhvZE5hbWUgPSBgY3VycmVudCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShzY29wZSl9YFxuICAgIGNvbnN0IGlzU2lnbmVkSW5NZXRob2ROYW1lID0gYGlzJHtpbmZsZWN0aW9uLmNhbWVsaXplKHNjb3BlKX1TaWduZWRJbmBcbiAgICBjb25zdCBnZXRBcmdzTWV0aG9kTmFtZSA9IGBnZXQke2luZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUpfUFyZ3NgXG5cbiAgICBBcGlNYWtlckRldmlzZVtjdXJyZW50TWV0aG9kTmFtZV0gPSAoKSA9PiBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuZ2V0Q3VycmVudFNjb3BlKHNjb3BlKVxuICAgIEFwaU1ha2VyRGV2aXNlW2lzU2lnbmVkSW5NZXRob2ROYW1lXSA9ICgpID0+IEJvb2xlYW4oQXBpTWFrZXJEZXZpc2UuY3VycmVudCgpLmdldEN1cnJlbnRTY29wZShzY29wZSkpXG4gICAgQXBpTWFrZXJEZXZpc2VbZ2V0QXJnc01ldGhvZE5hbWVdID0gKCkgPT4gYXJnc1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHNpZ25Jbih1c2VybmFtZSwgcGFzc3dvcmQsIGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkgYXJncy5zY29wZSA9IFwidXNlclwiXG5cbiAgICBjb25zdCBwb3N0RGF0YSA9IHt1c2VybmFtZSwgcGFzc3dvcmQsIGFyZ3N9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJEZXZpc2U6OlNpZ25JblwiLCBwb3N0RGF0YSlcblxuICAgIGxldCBtb2RlbCA9IHJlc3BvbnNlLm1vZGVsXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbCkpIG1vZGVsID0gbW9kZWxbMF1cblxuICAgIEFwaU1ha2VyRGV2aXNlLnVwZGF0ZVNlc3Npb24obW9kZWwpXG4gICAgZXZlbnRzLmVtaXQoXCJvbkRldmlzZVNpZ25JblwiLCBPYmplY3QuYXNzaWduKHt1c2VybmFtZX0sIGFyZ3MpKVxuXG4gICAgcmV0dXJuIHttb2RlbCwgcmVzcG9uc2V9XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlU2Vzc2lvbihtb2RlbCwgYXJncyA9IHt9KSB7XG4gICAgaWYgKCFhcmdzLnNjb3BlKSBhcmdzLnNjb3BlID0gXCJ1c2VyXCJcblxuICAgIGNvbnN0IGNhbWVsaXplZFNjb3BlTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXJncy5zY29wZSwgdHJ1ZSlcblxuICAgIEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5jdXJyZW50c1tjYW1lbGl6ZWRTY29wZU5hbWVdID0gbW9kZWxcbiAgfVxuXG4gIGhhc0N1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGNvbnN0IGNhbWVsaXplZFNjb3BlTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUsIHRydWUpXG5cbiAgICByZXR1cm4gY2FtZWxpemVkU2NvcGVOYW1lIGluIEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5jdXJyZW50c1xuICB9XG5cbiAgc3RhdGljIHNldFNpZ25lZE91dChhcmdzKSB7XG4gICAgQXBpTWFrZXJEZXZpc2UuY3VycmVudCgpLmN1cnJlbnRzW2luZmxlY3Rpb24uY2FtZWxpemUoYXJncy5zY29wZSwgdHJ1ZSldID0gbnVsbFxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHNpZ25PdXQoYXJncyA9IHt9KSB7XG4gICAgaWYgKCFhcmdzLnNjb3BlKSB7XG4gICAgICBhcmdzLnNjb3BlID0gXCJ1c2VyXCJcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIkRldmlzZTo6U2lnbk91dFwiLCB7YXJnc30pXG5cbiAgICAvLyBDYW5ub3QgdXNlIHRoZSBjbGFzcyBiZWNhdXNlIHRoZXkgd291bGQgYm90aCBpbXBvcnQgZWFjaCBvdGhlclxuICAgIGlmIChzaGFyZWQuYXBpTWFrZXJTZXNzaW9uU3RhdHVzVXBkYXRlcikge1xuICAgICAgc2hhcmVkLmFwaU1ha2VyU2Vzc2lvblN0YXR1c1VwZGF0ZXIudXBkYXRlU2Vzc2lvblN0YXR1cygpXG4gICAgfVxuXG4gICAgQXBpTWFrZXJEZXZpc2Uuc2V0U2lnbmVkT3V0KGFyZ3MpXG4gICAgQXBpTWFrZXJEZXZpc2UuY2FsbFNpZ25PdXRFdmVudChhcmdzKVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN1cnJlbnRzID0ge31cbiAgfVxuXG4gIGdldEN1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGlmICghKHNjb3BlIGluIHRoaXMuY3VycmVudHMpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRzW3Njb3BlXSA9IHRoaXMubG9hZEN1cnJlbnRTY29wZShzY29wZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50c1tzY29wZV1cbiAgfVxuXG4gIGhhc0dsb2JhbEN1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGlmIChnbG9iYWxUaGlzLmFwaU1ha2VyRGV2aXNlQ3VycmVudCAmJiBzY29wZSBpbiBnbG9iYWxUaGlzLmFwaU1ha2VyRGV2aXNlQ3VycmVudCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGxvYWRDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBpZiAoIXRoaXMuaGFzR2xvYmFsQ3VycmVudFNjb3BlKHNjb3BlKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZURhdGEgPSBnbG9iYWxUaGlzLmFwaU1ha2VyRGV2aXNlQ3VycmVudFtzY29wZV1cblxuICAgIGlmICghc2NvcGVEYXRhKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcGFyc2VkU2NvcGVEYXRhID0gRGVzZXJpYWxpemVyLnBhcnNlKHNjb3BlRGF0YSlcblxuICAgIC8vIE1pZ2h0IGJlIGEgY29sbGVjdGlvbiB3aXRoIHByZWxvYWRlZCByZWxhdGlvbnNoaXBzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkU2NvcGVEYXRhKSkgcmV0dXJuIHBhcnNlZFNjb3BlRGF0YVswXVxuXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NSZXF1aXJlKHNjb3BlKVxuICAgIGNvbnN0IG1vZGVsSW5zdGFuY2UgPSBuZXcgTW9kZWxDbGFzcyh7ZGF0YTogcGFyc2VkU2NvcGVEYXRhfSlcblxuICAgIHJldHVybiBtb2RlbEluc3RhbmNlXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxNQUFNLGdCQUFnQjtBQUN6QyxP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
@@ -0,0 +1,136 @@
1
+ import { digg } from "diggerize";
2
+ import EventEmitter from "events";
3
+ export default class DraggableSortController {
4
+ constructor({
5
+ data,
6
+ events,
7
+ keyExtractor
8
+ }) {
9
+ this.data = data;
10
+ this.currentOrder = [...data];
11
+ this.events = events || new EventEmitter();
12
+ this.keyExtractor = keyExtractor;
13
+ this.draggedItem = null;
14
+ this.draggedItemData = null;
15
+ this.draggedItemNewPosition = null;
16
+ this.draggedOverItem = null;
17
+ this.draggedOverItemData = null;
18
+ this.itemData = {};
19
+ for (const itemIndex in data) {
20
+ this.itemData[itemIndex] = {
21
+ index: itemIndex,
22
+ item: data[itemIndex],
23
+ position: itemIndex
24
+ };
25
+ }
26
+ }
27
+ getEvents = () => this.events;
28
+ getItemDataForItem = item => this.getItemDataForIndex(this.data.indexOf(item));
29
+ getItemDataForKey = key => this.itemData.find(itemDataI => digg(itemDataI, "key") == key);
30
+ getItemDataForIndex = index => digg(this, "itemData", index);
31
+ onDragStart = ({
32
+ item,
33
+ itemIndex
34
+ }) => {
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", {
41
+ item,
42
+ itemData: this.draggedItemData
43
+ });
44
+ }
45
+ };
46
+ onDragEnd = () => {
47
+ const itemData = this.draggedItemData;
48
+ const fromIndex = itemData.index;
49
+ const fromPosition = digg(this, "draggedItemPosition");
50
+ const toPosition = this.draggedItemNewPosition;
51
+ const fromItem = this.draggedItem;
52
+ const toItem = this.draggedOverItem;
53
+ const callbackArgs = {
54
+ item: itemData.item,
55
+ itemData,
56
+ fromIndex,
57
+ fromItem,
58
+ fromPosition,
59
+ toItem,
60
+ toPosition
61
+ };
62
+ this.draggedItemData.events.emit("resetPosition", {
63
+ callback: () => {
64
+ this.events.emit("onDragEndAnimation", callbackArgs);
65
+ }
66
+ });
67
+ this.draggedItem = null;
68
+ this.draggedItemData = null;
69
+ this.draggedItemNewPosition = null;
70
+ this.draggedOverItem = null;
71
+ this.draggedOverItemData = null;
72
+ this.events.emit("onDragEnd", callbackArgs);
73
+ };
74
+ onItemLayout = ({
75
+ events,
76
+ index,
77
+ item,
78
+ layout
79
+ }) => {
80
+ if (!(index in this.itemData)) throw new Error(`Item not found for index ${index}`);
81
+ const itemData = this.itemData[index];
82
+ itemData.layout = layout;
83
+ if (!itemData.initialLayout) {
84
+ itemData.baseX = layout.x;
85
+ itemData.events = events;
86
+ itemData.initialLayout = layout;
87
+ itemData.key = this.keyExtractor(item);
88
+ }
89
+ };
90
+ onMove = ({
91
+ gestate
92
+ }) => {
93
+ // Send move-event to the item being dragged so it will actually move around
94
+ this.draggedItemData?.events?.emit("move", {
95
+ gestate
96
+ });
97
+ const moveX = gestate.dx + this.initialDragPosition.x;
98
+ for (const itemIndex in this.itemData) {
99
+ const itemData = this.getItemDataForIndex(itemIndex);
100
+ const baseX = digg(itemData, "baseX");
101
+ let smallestWidth = this.draggedItemData.layout.width;
102
+ if (itemData.layout.width < smallestWidth) smallestWidth = itemData.layout.width;
103
+ if (moveX > baseX && moveX < baseX + smallestWidth && itemIndex != this.draggedItemData.index) {
104
+ this.draggedOverItem = itemData.item;
105
+ this.draggedOverItemData = itemData;
106
+ const positionOfDraggedItem = this.currentOrder.indexOf(this.draggedItemData.item);
107
+ const positionOfOverItem = this.currentOrder.indexOf(this.draggedOverItemData.item);
108
+ this.currentOrder[positionOfDraggedItem] = this.draggedOverItemData.item;
109
+ this.currentOrder[positionOfOverItem] = this.draggedItemData.item;
110
+ this.draggedItemData.position = positionOfOverItem;
111
+ this.draggedOverItemData.position = positionOfDraggedItem;
112
+ this.updatePositionOfItems();
113
+ this.draggedItemNewPosition = positionOfOverItem;
114
+ }
115
+ }
116
+ };
117
+ setInitialDragPosition = initialDragPosition => {
118
+ this.initialDragPosition = initialDragPosition;
119
+ };
120
+ updatePositionOfItems() {
121
+ let currentPosition = 0;
122
+ for (const item of this.currentOrder) {
123
+ const itemData = this.getItemDataForItem(item);
124
+ if (digg(itemData, "index") != digg(this, "draggedItemData", "index")) {
125
+ // Dont animate dragged element to a new position because it is currently being dragged
126
+ itemData.events.emit("moveToPosition", {
127
+ x: currentPosition,
128
+ y: 0
129
+ });
130
+ }
131
+ itemData.baseX = currentPosition;
132
+ currentPosition += digg(itemData, "layout", "width");
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiRXZlbnRFbWl0dGVyIiwiRHJhZ2dhYmxlU29ydENvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImRhdGEiLCJldmVudHMiLCJrZXlFeHRyYWN0b3IiLCJjdXJyZW50T3JkZXIiLCJkcmFnZ2VkSXRlbSIsImRyYWdnZWRJdGVtRGF0YSIsImRyYWdnZWRJdGVtTmV3UG9zaXRpb24iLCJkcmFnZ2VkT3Zlckl0ZW0iLCJkcmFnZ2VkT3Zlckl0ZW1EYXRhIiwiaXRlbURhdGEiLCJpdGVtSW5kZXgiLCJpbmRleCIsIml0ZW0iLCJwb3NpdGlvbiIsImdldEV2ZW50cyIsImdldEl0ZW1EYXRhRm9ySXRlbSIsImdldEl0ZW1EYXRhRm9ySW5kZXgiLCJpbmRleE9mIiwiZ2V0SXRlbURhdGFGb3JLZXkiLCJrZXkiLCJmaW5kIiwiaXRlbURhdGFJIiwib25EcmFnU3RhcnQiLCJkcmFnZ2VkSXRlbUluZGV4IiwiZHJhZ2dlZEl0ZW1Qb3NpdGlvbiIsImVtaXQiLCJvbkRyYWdFbmQiLCJmcm9tSW5kZXgiLCJmcm9tUG9zaXRpb24iLCJ0b1Bvc2l0aW9uIiwiZnJvbUl0ZW0iLCJ0b0l0ZW0iLCJjYWxsYmFja0FyZ3MiLCJjYWxsYmFjayIsIm9uSXRlbUxheW91dCIsImxheW91dCIsIkVycm9yIiwiaW5pdGlhbExheW91dCIsImJhc2VYIiwieCIsIm9uTW92ZSIsImdlc3RhdGUiLCJtb3ZlWCIsImR4IiwiaW5pdGlhbERyYWdQb3NpdGlvbiIsInNtYWxsZXN0V2lkdGgiLCJ3aWR0aCIsInBvc2l0aW9uT2ZEcmFnZ2VkSXRlbSIsInBvc2l0aW9uT2ZPdmVySXRlbSIsInVwZGF0ZVBvc2l0aW9uT2ZJdGVtcyIsInNldEluaXRpYWxEcmFnUG9zaXRpb24iLCJjdXJyZW50UG9zaXRpb24iLCJ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyYWdnYWJsZS1zb3J0L2NvbnRyb2xsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWdnYWJsZVNvcnRDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3Ioe2RhdGEsIGV2ZW50cywga2V5RXh0cmFjdG9yfSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB0aGlzLmN1cnJlbnRPcmRlciA9IFsuLi5kYXRhXVxuICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzIHx8IG5ldyBFdmVudEVtaXR0ZXIoKVxuICAgIHRoaXMua2V5RXh0cmFjdG9yID0ga2V5RXh0cmFjdG9yXG5cbiAgICB0aGlzLmRyYWdnZWRJdGVtID0gbnVsbFxuICAgIHRoaXMuZHJhZ2dlZEl0ZW1EYXRhID0gbnVsbFxuICAgIHRoaXMuZHJhZ2dlZEl0ZW1OZXdQb3NpdGlvbiA9IG51bGxcblxuICAgIHRoaXMuZHJhZ2dlZE92ZXJJdGVtID0gbnVsbFxuICAgIHRoaXMuZHJhZ2dlZE92ZXJJdGVtRGF0YSA9IG51bGxcblxuICAgIHRoaXMuaXRlbURhdGEgPSB7fVxuXG4gICAgZm9yIChjb25zdCBpdGVtSW5kZXggaW4gZGF0YSkge1xuICAgICAgdGhpcy5pdGVtRGF0YVtpdGVtSW5kZXhdID0ge1xuICAgICAgICBpbmRleDogaXRlbUluZGV4LFxuICAgICAgICBpdGVtOiBkYXRhW2l0ZW1JbmRleF0sXG4gICAgICAgIHBvc2l0aW9uOiBpdGVtSW5kZXhcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRFdmVudHMgPSAoKSA9PiB0aGlzLmV2ZW50c1xuICBnZXRJdGVtRGF0YUZvckl0ZW0gPSAoaXRlbSkgPT4gdGhpcy5nZXRJdGVtRGF0YUZvckluZGV4KHRoaXMuZGF0YS5pbmRleE9mKGl0ZW0pKVxuICBnZXRJdGVtRGF0YUZvcktleSA9IChrZXkpID0+IHRoaXMuaXRlbURhdGEuZmluZCgoaXRlbURhdGFJKSA9PiBkaWdnKGl0ZW1EYXRhSSwgXCJrZXlcIikgPT0ga2V5KVxuICBnZXRJdGVtRGF0YUZvckluZGV4ID0gKGluZGV4KSA9PiBkaWdnKHRoaXMsIFwiaXRlbURhdGFcIiwgaW5kZXgpXG5cbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW0sIGl0ZW1JbmRleH0pID0+IHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5kcmFnZ2VkSXRlbSA9IGl0ZW1cbiAgICAgIHRoaXMuZHJhZ2dlZEl0ZW1EYXRhID0gdGhpcy5nZXRJdGVtRGF0YUZvckluZGV4KGl0ZW1JbmRleClcbiAgICAgIHRoaXMuZHJhZ2dlZEl0ZW1JbmRleCA9IGl0ZW1JbmRleFxuICAgICAgdGhpcy5kcmFnZ2VkSXRlbVBvc2l0aW9uID0gdGhpcy5kcmFnZ2VkSXRlbURhdGEucG9zaXRpb25cbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvbkRyYWdTdGFydFwiLCB7aXRlbSwgaXRlbURhdGE6IHRoaXMuZHJhZ2dlZEl0ZW1EYXRhfSlcbiAgICB9XG4gIH1cblxuICBvbkRyYWdFbmQgPSAoKSA9PiB7XG4gICAgY29uc3QgaXRlbURhdGEgPSB0aGlzLmRyYWdnZWRJdGVtRGF0YVxuICAgIGNvbnN0IGZyb21JbmRleCA9IGl0ZW1EYXRhLmluZGV4XG4gICAgY29uc3QgZnJvbVBvc2l0aW9uID0gZGlnZyh0aGlzLCBcImRyYWdnZWRJdGVtUG9zaXRpb25cIilcbiAgICBjb25zdCB0b1Bvc2l0aW9uID0gdGhpcy5kcmFnZ2VkSXRlbU5ld1Bvc2l0aW9uXG4gICAgY29uc3QgZnJvbUl0ZW0gPSB0aGlzLmRyYWdnZWRJdGVtXG4gICAgY29uc3QgdG9JdGVtID0gdGhpcy5kcmFnZ2VkT3Zlckl0ZW1cbiAgICBjb25zdCBjYWxsYmFja0FyZ3MgPSB7aXRlbTogaXRlbURhdGEuaXRlbSwgaXRlbURhdGEsIGZyb21JbmRleCwgZnJvbUl0ZW0sIGZyb21Qb3NpdGlvbiwgdG9JdGVtLCB0b1Bvc2l0aW9ufVxuXG4gICAgdGhpcy5kcmFnZ2VkSXRlbURhdGEuZXZlbnRzLmVtaXQoXCJyZXNldFBvc2l0aW9uXCIsIHtcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvbkRyYWdFbmRBbmltYXRpb25cIiwgY2FsbGJhY2tBcmdzKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmRyYWdnZWRJdGVtID0gbnVsbFxuICAgIHRoaXMuZHJhZ2dlZEl0ZW1EYXRhID0gbnVsbFxuICAgIHRoaXMuZHJhZ2dlZEl0ZW1OZXdQb3NpdGlvbiA9IG51bGxcblxuICAgIHRoaXMuZHJhZ2dlZE92ZXJJdGVtID0gbnVsbFxuICAgIHRoaXMuZHJhZ2dlZE92ZXJJdGVtRGF0YSA9IG51bGxcblxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvbkRyYWdFbmRcIiwgY2FsbGJhY2tBcmdzKVxuICB9XG5cbiAgb25JdGVtTGF5b3V0ID0gKHtldmVudHMsIGluZGV4LCBpdGVtLCBsYXlvdXR9KSA9PiB7XG4gICAgaWYgKCEoaW5kZXggaW4gdGhpcy5pdGVtRGF0YSkpIHRocm93IG5ldyBFcnJvcihgSXRlbSBub3QgZm91bmQgZm9yIGluZGV4ICR7aW5kZXh9YClcblxuICAgIGNvbnN0IGl0ZW1EYXRhID0gdGhpcy5pdGVtRGF0YVtpbmRleF1cblxuICAgIGl0ZW1EYXRhLmxheW91dCA9IGxheW91dFxuXG4gICAgaWYgKCFpdGVtRGF0YS5pbml0aWFsTGF5b3V0KSB7XG4gICAgICBpdGVtRGF0YS5iYXNlWCA9IGxheW91dC54XG4gICAgICBpdGVtRGF0YS5ldmVudHMgPSBldmVudHNcbiAgICAgIGl0ZW1EYXRhLmluaXRpYWxMYXlvdXQgPSBsYXlvdXRcbiAgICAgIGl0ZW1EYXRhLmtleSA9IHRoaXMua2V5RXh0cmFjdG9yKGl0ZW0pXG4gICAgfVxuICB9XG5cbiAgb25Nb3ZlID0gKHtnZXN0YXRlfSkgPT4ge1xuICAgIC8vIFNlbmQgbW92ZS1ldmVudCB0byB0aGUgaXRlbSBiZWluZyBkcmFnZ2VkIHNvIGl0IHdpbGwgYWN0dWFsbHkgbW92ZSBhcm91bmRcbiAgICB0aGlzLmRyYWdnZWRJdGVtRGF0YT8uZXZlbnRzPy5lbWl0KFwibW92ZVwiLCB7Z2VzdGF0ZX0pXG5cbiAgICBjb25zdCBtb3ZlWCA9IGdlc3RhdGUuZHggKyB0aGlzLmluaXRpYWxEcmFnUG9zaXRpb24ueFxuXG4gICAgZm9yIChjb25zdCBpdGVtSW5kZXggaW4gdGhpcy5pdGVtRGF0YSkge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSB0aGlzLmdldEl0ZW1EYXRhRm9ySW5kZXgoaXRlbUluZGV4KVxuICAgICAgY29uc3QgYmFzZVggPSBkaWdnKGl0ZW1EYXRhLCBcImJhc2VYXCIpXG4gICAgICBsZXQgc21hbGxlc3RXaWR0aCA9IHRoaXMuZHJhZ2dlZEl0ZW1EYXRhLmxheW91dC53aWR0aFxuXG4gICAgICBpZiAoaXRlbURhdGEubGF5b3V0LndpZHRoIDwgc21hbGxlc3RXaWR0aCkgc21hbGxlc3RXaWR0aCA9IGl0ZW1EYXRhLmxheW91dC53aWR0aFxuXG4gICAgICBpZiAobW92ZVggPiBiYXNlWCAmJiBtb3ZlWCA8IChiYXNlWCArIHNtYWxsZXN0V2lkdGgpICYmIGl0ZW1JbmRleCAhPSB0aGlzLmRyYWdnZWRJdGVtRGF0YS5pbmRleCkge1xuICAgICAgICB0aGlzLmRyYWdnZWRPdmVySXRlbSA9IGl0ZW1EYXRhLml0ZW1cbiAgICAgICAgdGhpcy5kcmFnZ2VkT3Zlckl0ZW1EYXRhID0gaXRlbURhdGFcblxuICAgICAgICBjb25zdCBwb3NpdGlvbk9mRHJhZ2dlZEl0ZW0gPSB0aGlzLmN1cnJlbnRPcmRlci5pbmRleE9mKHRoaXMuZHJhZ2dlZEl0ZW1EYXRhLml0ZW0pXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uT2ZPdmVySXRlbSA9IHRoaXMuY3VycmVudE9yZGVyLmluZGV4T2YodGhpcy5kcmFnZ2VkT3Zlckl0ZW1EYXRhLml0ZW0pXG5cbiAgICAgICAgdGhpcy5jdXJyZW50T3JkZXJbcG9zaXRpb25PZkRyYWdnZWRJdGVtXSA9IHRoaXMuZHJhZ2dlZE92ZXJJdGVtRGF0YS5pdGVtXG4gICAgICAgIHRoaXMuY3VycmVudE9yZGVyW3Bvc2l0aW9uT2ZPdmVySXRlbV0gPSB0aGlzLmRyYWdnZWRJdGVtRGF0YS5pdGVtXG5cbiAgICAgICAgdGhpcy5kcmFnZ2VkSXRlbURhdGEucG9zaXRpb24gPSBwb3NpdGlvbk9mT3Zlckl0ZW1cbiAgICAgICAgdGhpcy5kcmFnZ2VkT3Zlckl0ZW1EYXRhLnBvc2l0aW9uID0gcG9zaXRpb25PZkRyYWdnZWRJdGVtXG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbk9mSXRlbXMoKVxuICAgICAgICB0aGlzLmRyYWdnZWRJdGVtTmV3UG9zaXRpb24gPSBwb3NpdGlvbk9mT3Zlckl0ZW1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRJbml0aWFsRHJhZ1Bvc2l0aW9uID0gKGluaXRpYWxEcmFnUG9zaXRpb24pID0+IHtcbiAgICB0aGlzLmluaXRpYWxEcmFnUG9zaXRpb24gPSBpbml0aWFsRHJhZ1Bvc2l0aW9uXG4gIH1cblxuICB1cGRhdGVQb3NpdGlvbk9mSXRlbXMoKSB7XG4gICAgbGV0IGN1cnJlbnRQb3NpdGlvbiA9IDBcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmN1cnJlbnRPcmRlcikge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSB0aGlzLmdldEl0ZW1EYXRhRm9ySXRlbShpdGVtKVxuXG4gICAgICBpZiAoZGlnZyhpdGVtRGF0YSwgXCJpbmRleFwiKSAhPSBkaWdnKHRoaXMsIFwiZHJhZ2dlZEl0ZW1EYXRhXCIsIFwiaW5kZXhcIikpIHsgLy8gRG9udCBhbmltYXRlIGRyYWdnZWQgZWxlbWVudCB0byBhIG5ldyBwb3NpdGlvbiBiZWNhdXNlIGl0IGlzIGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkXG4gICAgICAgIGl0ZW1EYXRhLmV2ZW50cy5lbWl0KFwibW92ZVRvUG9zaXRpb25cIiwge1xuICAgICAgICAgIHg6IGN1cnJlbnRQb3NpdGlvbixcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGl0ZW1EYXRhLmJhc2VYID0gY3VycmVudFBvc2l0aW9uXG4gICAgICBjdXJyZW50UG9zaXRpb24gKz0gZGlnZyhpdGVtRGF0YSwgXCJsYXlvdXRcIiwgXCJ3aWR0aFwiKVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxJQUFJLFFBQU8sV0FBVztBQUM5QixPQUFPQyxZQUFZLE1BQU0sUUFBUTtBQUVqQyxlQUFlLE1BQU1DLHVCQUF1QixDQUFDO0VBQzNDQyxXQUFXQSxDQUFDO0lBQUNDLElBQUk7SUFBRUMsTUFBTTtJQUFFQztFQUFZLENBQUMsRUFBRTtJQUN4QyxJQUFJLENBQUNGLElBQUksR0FBR0EsSUFBSTtJQUNoQixJQUFJLENBQUNHLFlBQVksR0FBRyxDQUFDLEdBQUdILElBQUksQ0FBQztJQUM3QixJQUFJLENBQUNDLE1BQU0sR0FBR0EsTUFBTSxJQUFJLElBQUlKLFlBQVksQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQ0ssWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ0UsV0FBVyxHQUFHLElBQUk7SUFDdkIsSUFBSSxDQUFDQyxlQUFlLEdBQUcsSUFBSTtJQUMzQixJQUFJLENBQUNDLHNCQUFzQixHQUFHLElBQUk7SUFFbEMsSUFBSSxDQUFDQyxlQUFlLEdBQUcsSUFBSTtJQUMzQixJQUFJLENBQUNDLG1CQUFtQixHQUFHLElBQUk7SUFFL0IsSUFBSSxDQUFDQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLEtBQUssTUFBTUMsU0FBUyxJQUFJVixJQUFJLEVBQUU7TUFDNUIsSUFBSSxDQUFDUyxRQUFRLENBQUNDLFNBQVMsQ0FBQyxHQUFHO1FBQ3pCQyxLQUFLLEVBQUVELFNBQVM7UUFDaEJFLElBQUksRUFBRVosSUFBSSxDQUFDVSxTQUFTLENBQUM7UUFDckJHLFFBQVEsRUFBRUg7TUFDWixDQUFDO0lBQ0g7RUFDRjtFQUVBSSxTQUFTLEdBQUdBLENBQUEsS0FBTSxJQUFJLENBQUNiLE1BQU07RUFDN0JjLGtCQUFrQixHQUFJSCxJQUFJLElBQUssSUFBSSxDQUFDSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUNoQixJQUFJ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
@@ -0,0 +1,114 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ import React, { useMemo } from "react";
3
+ import { Animated, PanResponder } from "react-native";
4
+ import { shapeComponent, ShapeComponent } from "set-state-compare/src/shape-component";
5
+ import Controller from "./controller";
6
+ import DraggableSortItem from "./item";
7
+ import EventEmitter from "events";
8
+ import memo from "set-state-compare/src/memo";
9
+ import PropTypes from "prop-types";
10
+ import propTypesExact from "prop-types-exact";
11
+ import useEventEmitter from "../use-event-emitter";
12
+ export default memo(shapeComponent(class DraggableSort extends ShapeComponent {
13
+ static defaultProps = {
14
+ horizontal: false
15
+ };
16
+ static propTypes = propTypesExact({
17
+ cacheKeyExtractor: PropTypes.func,
18
+ data: PropTypes.array.isRequired,
19
+ dataSet: PropTypes.object,
20
+ events: PropTypes.instanceOf(EventEmitter),
21
+ horizontal: PropTypes.bool.isRequired,
22
+ keyExtractor: PropTypes.func.isRequired,
23
+ onDragItemEnd: PropTypes.func,
24
+ onDragItemStart: PropTypes.func,
25
+ onItemMoved: PropTypes.func,
26
+ onReordered: PropTypes.func.isRequired,
27
+ renderItem: PropTypes.func.isRequired
28
+ });
29
+ setup() {
30
+ const {
31
+ data,
32
+ keyExtractor
33
+ } = this.p;
34
+ const {
35
+ events
36
+ } = this.props;
37
+ this.controller = useMemo(() => new Controller({
38
+ data,
39
+ events,
40
+ keyExtractor
41
+ }), []);
42
+ this.panResponder = useMemo(() => PanResponder.create({
43
+ onStartShouldSetPanResponder: e => {
44
+ const initialDragPosition = {
45
+ x: e.nativeEvent.locationX,
46
+ y: e.nativeEvent.locationY
47
+ };
48
+ this.controller.setInitialDragPosition(initialDragPosition);
49
+ if (this.controller.draggedItemData) {
50
+ return true;
51
+ }
52
+ },
53
+ onPanResponderMove: (e, gestate) => {
54
+ this.tt.controller.onMove({
55
+ gestate
56
+ });
57
+ },
58
+ onPanResponderRelease: (e, gestate) => {
59
+ if (this.controller.draggedItem) {
60
+ this.tt.controller.onDragEnd();
61
+ }
62
+ }
63
+ }), []);
64
+ useEventEmitter(this.controller.getEvents(), "onDragStart", this.tt.onDragItemStart);
65
+ useEventEmitter(this.controller.getEvents(), "onDragEnd", this.tt.onDragItemEnd);
66
+ }
67
+ render() {
68
+ const {
69
+ data,
70
+ horizontal,
71
+ keyExtractor,
72
+ renderItem
73
+ } = this.p;
74
+ const {
75
+ cacheKeyExtractor,
76
+ dataSet
77
+ } = this.props;
78
+ const actualDataSet = useMemo(() => Object.assign({
79
+ component: "draggable-sort"
80
+ }, dataSet), [dataSet]);
81
+ return /*#__PURE__*/React.createElement(Animated.View, _extends({
82
+ dataSet: actualDataSet,
83
+ style: {
84
+ flexDirection: horizontal ? "row" : "column"
85
+ }
86
+ }, this.tt.panResponder.panHandlers), data.map((item, itemIndex) => /*#__PURE__*/React.createElement(DraggableSortItem, {
87
+ cacheKey: cacheKeyExtractor ? cacheKeyExtractor(item) : undefined,
88
+ controller: this.tt.controller,
89
+ item: item,
90
+ itemIndex: itemIndex,
91
+ key: keyExtractor(item),
92
+ onItemMoved: this.props.onItemMoved,
93
+ renderItem: renderItem
94
+ })));
95
+ }
96
+ onDragItemStart = ({
97
+ itemData
98
+ }) => {
99
+ if (this.props.onDragItemStart) {
100
+ this.p.onDragItemStart({
101
+ itemData
102
+ });
103
+ }
104
+ };
105
+ onDragItemEnd = args => {
106
+ if (args.toPosition !== null) {
107
+ this.p.onReordered(args);
108
+ }
109
+ if (this.props.onDragItemEnd) {
110
+ this.p.onDragItemEnd(args);
111
+ }
112
+ };
113
+ }));
114
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJBbmltYXRlZCIsIlBhblJlc3BvbmRlciIsInNoYXBlQ29tcG9uZW50IiwiU2hhcGVDb21wb25lbnQiLCJDb250cm9sbGVyIiwiRHJhZ2dhYmxlU29ydEl0ZW0iLCJFdmVudEVtaXR0ZXIiLCJtZW1vIiwiUHJvcFR5cGVzIiwicHJvcFR5cGVzRXhhY3QiLCJ1c2VFdmVudEVtaXR0ZXIiLCJEcmFnZ2FibGVTb3J0IiwiZGVmYXVsdFByb3BzIiwiaG9yaXpvbnRhbCIsInByb3BUeXBlcyIsImNhY2hlS2V5RXh0cmFjdG9yIiwiZnVuYyIsImRhdGEiLCJhcnJheSIsImlzUmVxdWlyZWQiLCJkYXRhU2V0Iiwib2JqZWN0IiwiZXZlbnRzIiwiaW5zdGFuY2VPZiIsImJvb2wiLCJrZXlFeHRyYWN0b3IiLCJvbkRyYWdJdGVtRW5kIiwib25EcmFnSXRlbVN0YXJ0Iiwib25JdGVtTW92ZWQiLCJvblJlb3JkZXJlZCIsInJlbmRlckl0ZW0iLCJzZXR1cCIsInAiLCJwcm9wcyIsImNvbnRyb2xsZXIiLCJwYW5SZXNwb25kZXIiLCJjcmVhdGUiLCJvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyIiwiZSIsImluaXRpYWxEcmFnUG9zaXRpb24iLCJ4IiwibmF0aXZlRXZlbnQiLCJsb2NhdGlvblgiLCJ5IiwibG9jYXRpb25ZIiwic2V0SW5pdGlhbERyYWdQb3NpdGlvbiIsImRyYWdnZWRJdGVtRGF0YSIsIm9uUGFuUmVzcG9uZGVyTW92ZSIsImdlc3RhdGUiLCJ0dCIsIm9uTW92ZSIsIm9uUGFuUmVzcG9uZGVyUmVsZWFzZSIsImRyYWdnZWRJdGVtIiwib25EcmFnRW5kIiwiZ2V0RXZlbnRzIiwicmVuZGVyIiwiYWN0dWFsRGF0YVNldCIsIk9iamVjdCIsImFzc2lnbiIsImNvbXBvbmVudCIsImNyZWF0ZUVsZW1lbnQiLCJWaWV3IiwiX2V4dGVuZHMiLCJzdHlsZSIsImZsZXhEaXJlY3Rpb24iLCJwYW5IYW5kbGVycyIsIm1hcCIsIml0ZW0iLCJpdGVtSW5kZXgiLCJjYWNoZUtleSIsInVuZGVmaW5lZCIsImtleSIsIml0ZW1EYXRhIiwiYXJncyIsInRvUG9zaXRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhZ2dhYmxlLXNvcnQvaW5kZXguanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge3VzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQYW5SZXNwb25kZXJ9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvc2hhcGUtY29tcG9uZW50XCJcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCIuL2NvbnRyb2xsZXJcIlxuaW1wb3J0IERyYWdnYWJsZVNvcnRJdGVtIGZyb20gXCIuL2l0ZW1cIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvbWVtb1wiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91c2UtZXZlbnQtZW1pdHRlclwiXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgRHJhZ2dhYmxlU29ydCBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBob3Jpem9udGFsOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBjYWNoZUtleUV4dHJhY3RvcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBldmVudHM6IFByb3BUeXBlcy5pbnN0YW5jZU9mKEV2ZW50RW1pdHRlciksXG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBrZXlFeHRyYWN0b3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25EcmFnSXRlbUVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25EcmFnSXRlbVN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkl0ZW1Nb3ZlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25SZW9yZGVyZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVuZGVySXRlbTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9KVxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHtkYXRhLCBrZXlFeHRyYWN0b3J9ID0gdGhpcy5wXG4gICAgY29uc3Qge2V2ZW50c30gPSB0aGlzLnByb3BzXG5cbiAgICB0aGlzLmNvbnRyb2xsZXIgPSB1c2VNZW1vKCgpID0+IG5ldyBDb250cm9sbGVyKHtkYXRhLCBldmVudHMsIGtleUV4dHJhY3Rvcn0pLCBbXSlcbiAgICB0aGlzLnBhblJlc3BvbmRlciA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBQYW5SZXNwb25kZXIuY3JlYXRlKHtcbiAgICAgICAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcjogKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbml0aWFsRHJhZ1Bvc2l0aW9uID0ge3g6IGUubmF0aXZlRXZlbnQubG9jYXRpb25YLCB5OiBlLm5hdGl2ZUV2ZW50LmxvY2F0aW9uWX1cblxuICAgICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRJbml0aWFsRHJhZ1Bvc2l0aW9uKGluaXRpYWxEcmFnUG9zaXRpb24pXG5cbiAgICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmRyYWdnZWRJdGVtRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUGFuUmVzcG9uZGVyTW92ZTogKGUsIGdlc3RhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLnR0LmNvbnRyb2xsZXIub25Nb3ZlKHtnZXN0YXRlfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25QYW5SZXNwb25kZXJSZWxlYXNlOiAoZSwgZ2VzdGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuZHJhZ2dlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMudHQuY29udHJvbGxlci5vbkRyYWdFbmQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBbXVxuICAgIClcblxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLmNvbnRyb2xsZXIuZ2V0RXZlbnRzKCksIFwib25EcmFnU3RhcnRcIiwgdGhpcy50dC5vbkRyYWdJdGVtU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMuY29udHJvbGxlci5nZXRFdmVudHMoKSwgXCJvbkRyYWdFbmRcIiwgdGhpcy50dC5vbkRyYWdJdGVtRW5kKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtkYXRhLCBob3Jpem9udGFsLCBrZXlFeHRyYWN0b3IsIHJlbmRlckl0ZW19ID0gdGhpcy5wXG4gICAgY29uc3Qge2NhY2hlS2V5RXh0cmFjdG9yLCBkYXRhU2V0fSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBhY3R1YWxEYXRhU2V0ID0gdXNlTWVtbyhcbiAgICAgICgpID0+IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFwiZHJhZ2dhYmxlLXNvcnRcIlxuICAgICAgICB9LFxuICAgICAgICBkYXRhU2V0XG4gICAgICApLFxuICAgICAgW2RhdGFTZXRdXG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3IGRhdGFTZXQ9e2FjdHVhbERhdGFTZXR9IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogaG9yaXpvbnRhbCA/IFwicm93XCIgOiBcImNvbHVtblwifX0gey4uLnRoaXMudHQucGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzfT5cbiAgICAgICAge2RhdGEubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICAgICAgPERyYWdnYWJsZVNvcnRJdGVtXG4gICAgICAgICAgICBjYWNoZUtleT17Y2FjaGVLZXlFeHRyYWN0b3IgPyBjYWNoZUtleUV4dHJhY3RvcihpdGVtKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGNvbnRyb2xsZXI9e3RoaXMudHQuY29udHJvbGxlcn1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgICAgIGtleT17a2V5RXh0cmFjdG9yKGl0ZW0pfVxuICAgICAgICAgICAgb25JdGVtTW92ZWQ9e3RoaXMucHJvcHMub25JdGVtTW92ZWR9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXtyZW5kZXJJdGVtfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgKVxuICB9XG5cbiAgb25EcmFnSXRlbVN0YXJ0ID0gKHtpdGVtRGF0YX0pID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdJdGVtU3RhcnQpIHtcbiAgICAgIHRoaXMucC5vbkRyYWdJdGVtU3RhcnQoe2l0ZW1EYXRhfSlcbiAgICB9XG4gIH1cblxuICBvbkRyYWdJdGVtRW5kID0gKGFyZ3MpID0+IHtcbiAgICBpZiAoYXJncy50b1Bvc2l0aW9uICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnAub25SZW9yZGVyZWQoYXJncylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdJdGVtRW5kKSB7XG4gICAgICB0aGlzLnAub25EcmFnSXRlbUVuZChhcmdzKVxuICAgIH1cbiAgfVxufSkpXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLElB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