@kaspernj/api-maker 1.0.2011 → 1.0.2013

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 (413) 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/is-expo.js +22 -0
  72. package/build/key-value-store.js +53 -0
  73. package/build/link.js +73 -0
  74. package/build/logger.js +30 -0
  75. package/build/modal.js +38 -0
  76. package/build/model-class-require.js +13 -0
  77. package/build/model-events.js +30 -0
  78. package/build/model-name.js +28 -0
  79. package/build/model-prop-type.js +101 -0
  80. package/build/model-recipes-loader.js +32 -0
  81. package/build/model-recipes-model-loader.js +357 -0
  82. package/build/models-response-reader.js +40 -0
  83. package/build/models.js +8 -0
  84. package/build/money-formatter.js +78 -0
  85. package/build/not-loaded-error.js +2 -0
  86. package/build/params.js +61 -0
  87. package/build/preloaded.js +38 -0
  88. package/build/resize-observer.js +11 -0
  89. package/build/result.js +13 -0
  90. package/build/router/route.js +270 -0
  91. package/build/router/switch.js +72 -0
  92. package/build/router.js +59 -0
  93. package/build/routes-native.js +202 -0
  94. package/build/routes.js +50 -0
  95. package/build/run-last.js +35 -0
  96. package/build/serializer.js +63 -0
  97. package/build/services.js +20 -0
  98. package/build/session-status-updater.js +134 -0
  99. package/build/source-maps-loader.js +184 -0
  100. package/build/super-admin/config-reader.js +85 -0
  101. package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
  102. package/build/super-admin/edit-page/edit-attribute-content.js +55 -0
  103. package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
  104. package/build/super-admin/edit-page/edit-attribute.js +77 -0
  105. package/build/super-admin/edit-page.js +123 -0
  106. package/build/super-admin/has-edit-config.js +12 -0
  107. package/build/super-admin/index-page.js +25 -0
  108. package/build/super-admin/index.js +181 -0
  109. package/build/super-admin/layout/header/index.js +161 -0
  110. package/build/super-admin/layout/index.js +164 -0
  111. package/build/super-admin/layout/menu/index.js +206 -0
  112. package/build/super-admin/layout/menu/menu-content.js +46 -0
  113. package/build/super-admin/layout/menu/menu-item.js +84 -0
  114. package/build/super-admin/layout/no-access.js +27 -0
  115. package/build/super-admin/model-class-table.js +61 -0
  116. package/build/super-admin/models.js +8 -0
  117. package/build/super-admin/show-nav.js +51 -0
  118. package/build/super-admin/show-page/belongs-to-attribute-row.js +29 -0
  119. package/build/super-admin/show-page/index.js +141 -0
  120. package/build/super-admin/show-reflection-actions.js +47 -0
  121. package/build/super-admin/show-reflection-link.js +48 -0
  122. package/build/super-admin/show-reflection-page.js +48 -0
  123. package/build/table/column-content.js +117 -0
  124. package/build/table/column-identifier.js +18 -0
  125. package/build/table/column-visible.js +7 -0
  126. package/build/table/components/column.js +21 -0
  127. package/build/table/components/flat-list.js +21 -0
  128. package/build/table/components/header.js +26 -0
  129. package/build/table/components/row.js +26 -0
  130. package/build/table/filters/attribute-element.js +44 -0
  131. package/build/table/filters/filter-form.js +402 -0
  132. package/build/table/filters/filter.js +90 -0
  133. package/build/table/filters/index.js +184 -0
  134. package/build/table/filters/load-search-modal.js +175 -0
  135. package/build/table/filters/reflection-element.js +37 -0
  136. package/build/table/filters/save-search-modal.js +88 -0
  137. package/build/table/filters/scope-element.js +42 -0
  138. package/build/table/header-column-content.js +68 -0
  139. package/build/table/header-column.js +144 -0
  140. package/build/table/header-select.js +105 -0
  141. package/build/table/model-callback-args.js +10 -0
  142. package/build/table/model-column.js +97 -0
  143. package/build/table/model-row.js +193 -0
  144. package/build/table/select-calculator.js +63 -0
  145. package/build/table/settings/column-row.js +97 -0
  146. package/build/table/settings/download-action.js +79 -0
  147. package/build/table/settings/index.js +92 -0
  148. package/build/table/table-settings.js +219 -0
  149. package/build/table/table.js +972 -0
  150. package/build/table/use-sorting.js +34 -0
  151. package/build/table/widths.js +75 -0
  152. package/build/table/worker-plugins-check-all-checkbox.js +125 -0
  153. package/build/table/worker-plugins-checkbox.js +115 -0
  154. package/build/translated-attributes.js +10 -0
  155. package/build/translated-collections.js +12 -0
  156. package/build/updated-attribute.js +76 -0
  157. package/build/url-encode.js +15 -0
  158. package/build/use-breakpoint.js +71 -0
  159. package/build/use-can-can.js +55 -0
  160. package/build/use-collection.js +225 -0
  161. package/build/use-created-event.js +52 -0
  162. package/build/use-current-user.js +76 -0
  163. package/build/use-destroyed-event.js +60 -0
  164. package/build/use-event-emitter.js +13 -0
  165. package/build/use-event-listener.js +16 -0
  166. package/build/use-input.js +137 -0
  167. package/build/use-model-event.js +60 -0
  168. package/build/use-model.js +169 -0
  169. package/build/use-resize-observer.js +23 -0
  170. package/build/use-router.js +104 -0
  171. package/build/use-screen-layout.js +39 -0
  172. package/build/use-styles.js +41 -0
  173. package/build/use-updated-event.js +60 -0
  174. package/build/use-validation-errors.js +30 -0
  175. package/build/utils/card.js +51 -0
  176. package/build/utils/checkbox.js +78 -0
  177. package/build/utils/checkboxes.js +163 -0
  178. package/build/utils/default-style.js +18 -0
  179. package/build/utils/icon.js +23 -0
  180. package/build/utils/invalid-feedback.js +19 -0
  181. package/build/utils/modal.js +62 -0
  182. package/build/utils/text.js +44 -0
  183. package/build/validation-error.js +28 -0
  184. package/build/validation-errors.js +98 -0
  185. package/build/with-api-maker.js +29 -0
  186. package/build/with-collection.js +14 -0
  187. package/build/with-current-user.js +10 -0
  188. package/build/with-model.js +15 -0
  189. package/build/with-router.js +22 -0
  190. package/expo-module.config.json +17 -0
  191. package/ios/ApiMaker.podspec +29 -0
  192. package/ios/ApiMakerModule.swift +48 -0
  193. package/ios/ApiMakerView.swift +38 -0
  194. package/package.json +49 -46
  195. package/src/{api.mjs → api.js} +38 -37
  196. package/src/base-component.jsx +5 -0
  197. package/src/{base-error.mjs → base-error.js} +4 -6
  198. package/src/base-model/attribute.js +33 -0
  199. package/src/base-model/column.js +13 -0
  200. package/src/base-model/reflection.js +15 -0
  201. package/src/base-model/scope.js +12 -0
  202. package/src/{base-model.mjs → base-model.js} +302 -144
  203. package/src/bootstrap/attribute-row.jsx +135 -0
  204. package/src/bootstrap/attribute-rows.jsx +27 -0
  205. package/src/bootstrap/card.jsx +149 -0
  206. package/src/bootstrap/checkbox.jsx +86 -0
  207. package/src/bootstrap/checkboxes.jsx +185 -0
  208. package/src/bootstrap/index.js +0 -0
  209. package/src/bootstrap/input.jsx +173 -0
  210. package/src/bootstrap/invalid-feedback.jsx +31 -0
  211. package/src/bootstrap/paginate.jsx +187 -0
  212. package/src/bootstrap/radio-buttons.jsx +87 -0
  213. package/src/bootstrap/select.jsx +110 -0
  214. package/src/bootstrap/sort-link.jsx +106 -0
  215. package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +16 -36
  216. package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +26 -21
  217. package/src/{cable-subscription.mjs → cable-subscription.js} +6 -4
  218. package/src/cache-key-generator.js +100 -0
  219. package/src/{can-can.mjs → can-can.js} +13 -12
  220. package/src/channels-consumer.js +10 -0
  221. package/src/collection-loader.jsx +58 -224
  222. package/src/{collection.mjs → collection.js} +98 -44
  223. package/src/{command-submit-data.mjs → command-submit-data.js} +2 -7
  224. package/src/{commands-pool.mjs → commands-pool.js} +57 -41
  225. package/src/compose.js +11 -0
  226. package/src/{config.mjs → config.js} +6 -2
  227. package/src/{custom-error.mjs → custom-error.js} +1 -1
  228. package/src/data-set-to-attributes.js +13 -0
  229. package/src/{deserializer.mjs → deserializer.js} +3 -3
  230. package/src/destroy-error.js +7 -0
  231. package/src/devise.js +129 -0
  232. package/src/draggable-sort/controller.js +137 -0
  233. package/src/draggable-sort/index.jsx +108 -0
  234. package/src/draggable-sort/item.jsx +174 -0
  235. package/src/{error-logger.mjs → error-logger.js} +12 -7
  236. package/src/{error-messages.mjs → error-messages.js} +1 -0
  237. package/src/event-connection.jsx +1 -1
  238. package/src/event-emitter-listener.jsx +8 -27
  239. package/src/event-model-class.jsx +2 -4
  240. package/src/events.js +7 -0
  241. package/src/flash-message.js +70 -0
  242. package/src/form.jsx +91 -0
  243. package/src/history-expo.js +23 -0
  244. package/src/history-react-native.js +25 -0
  245. package/src/history.js +3 -0
  246. package/src/index.js +3 -0
  247. package/src/inputs/attachment.jsx +108 -0
  248. package/src/inputs/auto-submit.js +37 -0
  249. package/src/inputs/checkbox.jsx +125 -0
  250. package/src/inputs/checkboxes.jsx +116 -0
  251. package/src/inputs/id-for-component.js +15 -0
  252. package/src/inputs/input-wrapper.jsx +16 -0
  253. package/src/inputs/input.jsx +260 -0
  254. package/src/inputs/money.jsx +187 -0
  255. package/src/inputs/name-for-component.js +15 -0
  256. package/src/inputs/select.jsx +104 -0
  257. package/src/is-expo.js +18 -0
  258. package/src/{key-value-store.mjs → key-value-store.js} +1 -1
  259. package/src/link.jsx +54 -9
  260. package/src/logger.js +38 -0
  261. package/src/modal.jsx +37 -0
  262. package/src/model-class-require.js +17 -0
  263. package/src/{model-events.mjs → model-events.js} +1 -1
  264. package/src/{model-name.mjs → model-name.js} +8 -8
  265. package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
  266. package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +5 -5
  267. package/src/{models-response-reader.mjs → models-response-reader.js} +3 -4
  268. package/src/models.js +7 -0
  269. package/src/{models.mjs.erb → models.js.erb} +6 -3
  270. package/src/{money-formatter.mjs → money-formatter.js} +5 -4
  271. package/src/{params.mjs → params.js} +17 -7
  272. package/src/{preloaded.mjs → preloaded.js} +2 -2
  273. package/src/resize-observer.jsx +10 -0
  274. package/src/result.js +13 -0
  275. package/src/router/route.jsx +246 -0
  276. package/src/router/switch.jsx +76 -0
  277. package/src/router.jsx +23 -21
  278. package/src/{routes-native.mjs → routes-native.js} +12 -6
  279. package/src/{routes.mjs → routes.js} +1 -1
  280. package/src/run-last.js +39 -0
  281. package/src/{serializer.mjs → serializer.js} +2 -2
  282. package/src/{services.mjs → services.js} +1 -1
  283. package/src/session-status-updater.js +172 -0
  284. package/src/{source-maps-loader.mjs → source-maps-loader.js} +54 -28
  285. package/src/super-admin/config-reader.jsx +93 -0
  286. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +81 -0
  287. package/src/super-admin/edit-page/edit-attribute-content.jsx +57 -0
  288. package/src/super-admin/edit-page/edit-attribute-input.jsx +71 -0
  289. package/src/super-admin/edit-page/edit-attribute.jsx +81 -0
  290. package/src/super-admin/edit-page.jsx +117 -0
  291. package/src/super-admin/has-edit-config.js +15 -0
  292. package/src/super-admin/index-page.jsx +23 -0
  293. package/src/super-admin/index.jsx +197 -0
  294. package/src/super-admin/layout/header/index.jsx +144 -0
  295. package/src/super-admin/layout/header/style.scss +45 -0
  296. package/src/super-admin/layout/index.jsx +154 -0
  297. package/src/super-admin/layout/menu/index.jsx +171 -0
  298. package/src/super-admin/layout/menu/menu-content.jsx +43 -0
  299. package/src/super-admin/layout/menu/menu-item.jsx +70 -0
  300. package/src/super-admin/layout/menu/style.scss +11 -0
  301. package/src/super-admin/layout/no-access.jsx +26 -0
  302. package/src/super-admin/model-class-table.jsx +66 -0
  303. package/src/super-admin/models.js +11 -0
  304. package/src/super-admin/show-nav.jsx +44 -0
  305. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +30 -0
  306. package/src/super-admin/show-page/index.jsx +141 -0
  307. package/src/super-admin/show-reflection-actions.jsx +49 -0
  308. package/src/super-admin/show-reflection-link.jsx +40 -0
  309. package/src/super-admin/show-reflection-page.jsx +47 -0
  310. package/src/super-admin/stylesheets/variables.scss +11 -0
  311. package/src/table/column-content.jsx +122 -0
  312. package/src/table/column-identifier.js +23 -0
  313. package/src/table/column-visible.js +7 -0
  314. package/src/table/components/column.jsx +19 -0
  315. package/src/table/components/flat-list.jsx +19 -0
  316. package/src/table/components/header.jsx +21 -0
  317. package/src/table/components/row.jsx +23 -0
  318. package/src/table/filters/attribute-element.jsx +47 -0
  319. package/src/table/filters/filter-form.jsx +407 -0
  320. package/src/table/filters/filter.jsx +70 -0
  321. package/src/table/filters/index.jsx +170 -0
  322. package/src/table/filters/load-search-modal.jsx +146 -0
  323. package/src/table/filters/reflection-element.jsx +38 -0
  324. package/src/table/filters/save-search-modal.jsx +74 -0
  325. package/src/table/filters/scope-element.jsx +44 -0
  326. package/src/table/header-column-content.jsx +55 -0
  327. package/src/table/header-column.jsx +129 -0
  328. package/src/table/header-select.jsx +73 -0
  329. package/src/table/model-callback-args.js +10 -0
  330. package/src/table/model-column.jsx +82 -0
  331. package/src/table/model-row.jsx +136 -0
  332. package/src/table/select-calculator.js +65 -0
  333. package/src/table/settings/column-row.jsx +93 -0
  334. package/src/table/settings/download-action.jsx +68 -0
  335. package/src/table/settings/index.jsx +65 -0
  336. package/src/table/table-settings.js +263 -0
  337. package/src/table/table.jsx +950 -0
  338. package/src/table/use-sorting.js +35 -0
  339. package/src/table/variables.scss +11 -0
  340. package/src/table/widths.jsx +87 -0
  341. package/src/table/worker-plugins-check-all-checkbox.jsx +112 -0
  342. package/src/table/worker-plugins-checkbox.jsx +104 -0
  343. package/src/translated-attributes.js +11 -0
  344. package/src/{translated-collections.mjs → translated-collections.js} +3 -2
  345. package/src/updated-attribute.jsx +1 -1
  346. package/src/url-encode.js +18 -0
  347. package/src/use-breakpoint.js +87 -0
  348. package/src/use-can-can.js +55 -0
  349. package/src/use-collection.js +280 -0
  350. package/src/use-created-event.js +55 -0
  351. package/src/use-current-user.js +88 -0
  352. package/src/use-destroyed-event.js +60 -0
  353. package/src/use-event-emitter.js +15 -0
  354. package/src/use-event-listener.js +19 -0
  355. package/src/use-input.js +157 -0
  356. package/src/use-model-event.js +60 -0
  357. package/src/use-model.js +189 -0
  358. package/src/use-resize-observer.js +24 -0
  359. package/src/use-router.jsx +128 -0
  360. package/src/use-screen-layout.js +49 -0
  361. package/src/use-styles.js +50 -0
  362. package/src/use-updated-event.js +60 -0
  363. package/src/use-validation-errors.js +33 -0
  364. package/src/utils/card.jsx +49 -0
  365. package/src/utils/checkbox.jsx +80 -0
  366. package/src/utils/checkboxes.jsx +158 -0
  367. package/src/utils/default-style.jsx +25 -0
  368. package/src/utils/icon.jsx +21 -0
  369. package/src/utils/invalid-feedback.jsx +20 -0
  370. package/src/utils/modal.jsx +60 -0
  371. package/src/utils/text.jsx +38 -0
  372. package/src/{validation-error.mjs → validation-error.js} +9 -5
  373. package/src/{validation-errors.mjs → validation-errors.js} +15 -27
  374. package/src/with-api-maker.jsx +31 -0
  375. package/src/with-collection.jsx +17 -0
  376. package/src/with-current-user.jsx +7 -25
  377. package/src/with-model.jsx +16 -0
  378. package/src/with-router.jsx +7 -129
  379. package/__tests__/base-model.test.js +0 -71
  380. package/__tests__/cable-connection-pool.test.js +0 -227
  381. package/__tests__/cable-subscription-pool.test.js +0 -26
  382. package/__tests__/can-can.test.js +0 -34
  383. package/__tests__/collection.test.js +0 -51
  384. package/__tests__/custom-error.test.js +0 -13
  385. package/__tests__/model-name.test.js +0 -34
  386. package/__tests__/model-prop-type.test.js +0 -113
  387. package/__tests__/params.test.js +0 -40
  388. package/__tests__/routes-native.test.js +0 -103
  389. package/__tests__/routes.test.js +0 -46
  390. package/__tests__/serializer.test.js +0 -30
  391. package/__tests__/support/task.js +0 -27
  392. package/__tests__/support/user.js +0 -32
  393. package/index.js +0 -1
  394. package/jest.config.js +0 -4
  395. package/src/can-can-loader.jsx +0 -54
  396. package/src/channels-consumer.mjs +0 -3
  397. package/src/destroy-error.mjs +0 -7
  398. package/src/devise.mjs +0 -122
  399. package/src/event-created.jsx +0 -65
  400. package/src/event-destroyed.jsx +0 -29
  401. package/src/event-listener.jsx +0 -38
  402. package/src/event-updated.jsx +0 -74
  403. package/src/logger.mjs +0 -25
  404. package/src/model-class-require.mjs +0 -10
  405. package/src/model-load-wrapper.jsx +0 -116
  406. package/src/result.mjs +0 -29
  407. package/src/session-status-updater.mjs +0 -116
  408. package/webpack.config.js +0 -15
  409. /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
  410. /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
  411. /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
  412. /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
  413. /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
@@ -0,0 +1,243 @@
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 AutoSubmit from "./auto-submit";
3
+ import BaseComponent from "../base-component";
4
+ import { dig, digg, digs } from "diggerize";
5
+ import inputWrapper from "./input-wrapper";
6
+ import memo from "set-state-compare/src/memo";
7
+ import Money from "./money";
8
+ import PropTypes from "prop-types";
9
+ import React, { useMemo, useRef } from "react";
10
+ import replaceall from "replaceall";
11
+ import { shapeComponent } from "set-state-compare/src/shape-component";
12
+ import strftime from "strftime";
13
+ import { useForm } from "../form";
14
+ import useI18n from "i18n-on-steroids/src/use-i18n";
15
+ import useUpdatedEvent from "../use-updated-event";
16
+ const ApiMakerInputsInput = memo(shapeComponent(class ApiMakerInputsInput extends BaseComponent {
17
+ static defaultProps = {
18
+ autoRefresh: false,
19
+ autoSubmit: false,
20
+ model: null,
21
+ localizedNumber: false
22
+ };
23
+ static propTypes = {
24
+ attribute: PropTypes.string,
25
+ autoRefresh: PropTypes.bool.isRequired,
26
+ autoSubmit: PropTypes.bool.isRequired,
27
+ className: PropTypes.string,
28
+ formatValue: PropTypes.func,
29
+ id: PropTypes.string,
30
+ localizedNumber: PropTypes.bool.isRequired,
31
+ model: PropTypes.object,
32
+ name: PropTypes.string,
33
+ onChange: PropTypes.func,
34
+ onMatchValidationError: PropTypes.func,
35
+ type: PropTypes.string
36
+ };
37
+ setup() {
38
+ const {
39
+ t
40
+ } = useI18n({
41
+ namespace: "js.api_maker.inputs.input"
42
+ });
43
+ const {
44
+ autoRefresh,
45
+ inputProps,
46
+ model
47
+ } = this.p;
48
+ const {
49
+ defaultValue,
50
+ name
51
+ } = inputProps;
52
+ this.form = useForm();
53
+ this.visibleInputRef = useRef();
54
+ this.t = t;
55
+ this.useStates({
56
+ blankInputName: digg(inputProps, "type") == "file"
57
+ });
58
+ useMemo(() => {
59
+ if (name) {
60
+ this.tt.form?.setValue(name, defaultValue);
61
+ }
62
+ }, []);
63
+ useUpdatedEvent(model, this.tt.onModelUpdated, {
64
+ active: Boolean(autoRefresh && model)
65
+ });
66
+ }
67
+ render() {
68
+ const {
69
+ attribute,
70
+ autoRefresh,
71
+ autoSubmit,
72
+ defaultValue,
73
+ formatValue,
74
+ id,
75
+ inputProps,
76
+ inputRef,
77
+ localizedNumber,
78
+ model,
79
+ name,
80
+ onChange,
81
+ onErrors,
82
+ onMatchValidationError,
83
+ type,
84
+ wrapperOpts,
85
+ ...restProps
86
+ } = this.props;
87
+ const sharedProps = {
88
+ id: localizedNumber ? null : inputProps.id,
89
+ name: localizedNumber ? null : inputProps.name
90
+ };
91
+ const ref = localizedNumber ? this.visibleInputRef : this.inputReference();
92
+ const {
93
+ ref: inputPropsRef,
94
+ ...inputPropsWithoutRef
95
+ } = inputProps;
96
+ return /*#__PURE__*/React.createElement(React.Fragment, null, localizedNumber && /*#__PURE__*/React.createElement("input", {
97
+ defaultValue: defaultValue,
98
+ id: inputProps.id,
99
+ name: this.inputName(),
100
+ ref: this.inputReference(),
101
+ type: "hidden"
102
+ }), type == "money" && /*#__PURE__*/React.createElement(Money, _extends({
103
+ attribute: attribute,
104
+ defaultValue: this.inputDefaultValueLocalized(),
105
+ inputRef: this.inputReference(),
106
+ model: model,
107
+ onChange: this.onInputChanged
108
+ }, inputPropsWithoutRef, sharedProps, restProps)), type == "textarea" && /*#__PURE__*/React.createElement("textarea", _extends({
109
+ defaultValue: this.inputDefaultValueLocalized(),
110
+ onChange: this.onInputChanged,
111
+ ref: ref
112
+ }, inputPropsWithoutRef, sharedProps, restProps)), type != "money" && type != "textarea" && /*#__PURE__*/React.createElement("input", _extends({
113
+ defaultValue: this.inputDefaultValueLocalized(),
114
+ onChange: this.onInputChanged,
115
+ ref: ref
116
+ }, inputPropsWithoutRef, sharedProps, {
117
+ name: localizedNumber ? null : this.inputName()
118
+ }, restProps)));
119
+ }
120
+ actualValue(visibleInput) {
121
+ const {
122
+ t
123
+ } = this.tt;
124
+ const {
125
+ localizedNumber
126
+ } = digs(this.props, "localizedNumber");
127
+ const value = digg(visibleInput, "value");
128
+ if (localizedNumber) {
129
+ const decimal = t("number.currency.format.separator");
130
+ const integerSeparator = t("number.currency.format.delimiter");
131
+ let unformatted = replaceall(integerSeparator, "", value);
132
+ unformatted = replaceall(decimal, ".", unformatted);
133
+ return unformatted;
134
+ }
135
+ return value;
136
+ }
137
+ autoSubmit = () => new AutoSubmit({
138
+ component: this
139
+ }).autoSubmit();
140
+ formatValue(value) {
141
+ const {
142
+ formatValue,
143
+ type
144
+ } = this.props;
145
+ if (formatValue) {
146
+ return formatValue(value);
147
+ } else if (value instanceof Date && !isNaN(value.getTime())) {
148
+ // We need to use a certain format for datetime-local
149
+ if (type == "datetime-local") {
150
+ return strftime("%Y-%m-%dT%H:%M:%S", value);
151
+ } else if (type == "date") {
152
+ return strftime("%Y-%m-%d", value);
153
+ }
154
+ }
155
+ return value;
156
+ }
157
+ inputDefaultValueLocalized() {
158
+ const {
159
+ t
160
+ } = this.tt;
161
+ const {
162
+ defaultValue
163
+ } = this.props;
164
+ const {
165
+ localizedNumber
166
+ } = digs(this.props, "localizedNumber");
167
+ if (localizedNumber && defaultValue !== null && defaultValue !== undefined) {
168
+ const separator = t("number.currency.format.separator");
169
+ const delimiter = t("number.currency.format.delimiter");
170
+ let formatted = `${defaultValue}`;
171
+ formatted = replaceall(".", "{{separator}}", formatted);
172
+ formatted = replaceall(",", "{{delimiter}}", formatted);
173
+ formatted = replaceall("{{separator}}", separator, formatted);
174
+ formatted = replaceall("{{delimiter}}", delimiter, formatted);
175
+ return formatted;
176
+ }
177
+ return defaultValue;
178
+ }
179
+ inputName() {
180
+ if (this.state.blankInputName) return "";
181
+ return this.props.inputProps.name;
182
+ }
183
+ inputReference = () => digg(this, "props", "inputProps", "ref");
184
+ onModelUpdated = args => {
185
+ const inputRef = this.inputReference();
186
+ if (!inputRef.current) {
187
+ // This can happen if the component is being unmounted
188
+ return;
189
+ }
190
+ const {
191
+ attribute
192
+ } = digs(this.props, "attribute");
193
+ const newModel = digg(args, "model");
194
+ const currentValue = digg(inputRef, "current", "value");
195
+ const newValue = newModel.readAttribute(attribute);
196
+ const newFormattedValue = this.formatValue(newValue);
197
+ if (currentValue != newFormattedValue) {
198
+ inputRef.current.value = newFormattedValue;
199
+ }
200
+ };
201
+ onInputChanged = e => {
202
+ const {
203
+ form
204
+ } = this.tt;
205
+ const {
206
+ attribute,
207
+ autoSubmit,
208
+ inputProps,
209
+ model,
210
+ onChange
211
+ } = this.props;
212
+ const {
213
+ localizedNumber
214
+ } = digs(this.props, "localizedNumber");
215
+ const {
216
+ name
217
+ } = inputProps;
218
+ if (localizedNumber) this.inputReference().current.value = this.actualValue(digg(e, "target"));
219
+ if (attribute && autoSubmit && model) this.delayAutoSubmit();
220
+ if (digg(inputProps, "type") == "file") this.setState({
221
+ blankInputName: this.getBlankInputName()
222
+ });
223
+ if (form && name) {
224
+ form.setValue(name, e.target.value);
225
+ }
226
+ if (onChange) onChange(e);
227
+ };
228
+ delayAutoSubmit() {
229
+ if (this.delayAutoSubmitTimeout) {
230
+ clearTimeout(this.delayAutoSubmitTimeout);
231
+ }
232
+ this.delayAutoSubmitTimeout = setTimeout(this.autoSubmit, 200);
233
+ }
234
+
235
+ // This fixes an issue in Firefox and ActiveStorage, where uploads would be a blank string if a file wasn't chosen
236
+ getBlankInputName() {
237
+ const value = dig(this.inputReference(), "current", "value");
238
+ if (this.props.inputProps.type == "file" && value == "") return true;
239
+ }
240
+ }));
241
+ export { ApiMakerInputsInput as Input };
242
+ export default inputWrapper(ApiMakerInputsInput);
243
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRvU3VibWl0IiwiQmFzZUNvbXBvbmVudCIsImRpZyIsImRpZ2ciLCJkaWdzIiwiaW5wdXRXcmFwcGVyIiwibWVtbyIsIk1vbmV5IiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwicmVwbGFjZWFsbCIsInNoYXBlQ29tcG9uZW50Iiwic3RyZnRpbWUiLCJ1c2VGb3JtIiwidXNlSTE4biIsInVzZVVwZGF0ZWRFdmVudCIsIkFwaU1ha2VySW5wdXRzSW5wdXQiLCJkZWZhdWx0UHJvcHMiLCJhdXRvUmVmcmVzaCIsImF1dG9TdWJtaXQiLCJtb2RlbCIsImxvY2FsaXplZE51bWJlciIsInByb3BUeXBlcyIsImF0dHJpYnV0ZSIsInN0cmluZyIsImJvb2wiLCJpc1JlcXVpcmVkIiwiY2xhc3NOYW1lIiwiZm9ybWF0VmFsdWUiLCJmdW5jIiwiaWQiLCJvYmplY3QiLCJuYW1lIiwib25DaGFuZ2UiLCJvbk1hdGNoVmFsaWRhdGlvbkVycm9yIiwidHlwZSIsInNldHVwIiwidCIsIm5hbWVzcGFjZSIsImlucHV0UHJvcHMiLCJwIiwiZGVmYXVsdFZhbHVlIiwiZm9ybSIsInZpc2libGVJbnB1dFJlZiIsInVzZVN0YXRlcyIsImJsYW5rSW5wdXROYW1lIiwidHQiLCJzZXRWYWx1ZSIsIm9uTW9kZWxVcGRhdGVkIiwiYWN0aXZlIiwiQm9vbGVhbiIsInJlbmRlciIsImlucHV0UmVmIiwib25FcnJvcnMiLCJ3cmFwcGVyT3B0cyIsInJlc3RQcm9wcyIsInByb3BzIiwic2hhcmVkUHJvcHMiLCJyZWYiLCJpbnB1dFJlZmVyZW5jZSIsImlucHV0UHJvcHNSZWYiLCJpbnB1dFByb3BzV2l0aG91dFJlZiIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImlucHV0TmFtZSIsIl9leHRlbmRzIiwiaW5wdXREZWZhdWx0VmFsdWVMb2NhbGl6ZWQiLCJvbklucHV0Q2hhbmdlZCIsImFjdHVhbFZhbHVlIiwidmlzaWJsZUlucHV0IiwidmFsdWUiLCJkZWNpbWFsIiwiaW50ZWdlclNlcGFyYXRvciIsInVuZm9ybWF0dGVkIiwiY29tcG9uZW50IiwiRGF0ZSIsImlzTmFOIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsInNlcGFyYXRvciIsImRlbGltaXRlciIsImZvcm1hdHRlZCIsInN0YXRlIiwiYXJncyIsImN1cnJlbnQiLCJuZXdNb2RlbCIsImN1cnJlbnRWYWx1ZSIsIm5ld1ZhbHVlIiwicmVhZEF0dHJpYnV0ZSIsIm5ld0Zvcm1hdHRlZFZhbHVlIiwiZSIsImRlbGF5QXV0b1N1Ym1pdCIsInNldFN0YXRlIiwiZ2V0QmxhbmtJbnB1dE5hbWUiLCJ0YXJnZXQiLCJkZWxheUF1dG9TdWJtaXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIklucHV0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0cy9pbnB1dC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1dG9TdWJtaXQgZnJvbSBcIi4vYXV0by1zdWJtaXRcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCB7ZGlnLCBkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBpbnB1dFdyYXBwZXIgZnJvbSBcIi4vaW5wdXQtd3JhcHBlclwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IE1vbmV5IGZyb20gXCIuL21vbmV5XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHJlcGxhY2VhbGwgZnJvbSBcInJlcGxhY2VhbGxcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9zaGFwZS1jb21wb25lbnRcIlxuaW1wb3J0IHN0cmZ0aW1lIGZyb20gXCJzdHJmdGltZVwiXG5pbXBvcnQge3VzZUZvcm19IGZyb20gXCIuLi9mb3JtXCJcbmltcG9ydCB1c2VJMThuIGZyb20gXCJpMThuLW9uLXN0ZXJvaWRzL3NyYy91c2UtaTE4blwiXG5pbXBvcnQgdXNlVXBkYXRlZEV2ZW50IGZyb20gXCIuLi91c2UtdXBkYXRlZC1ldmVudFwiXG5cbmNvbnN0IEFwaU1ha2VySW5wdXRzSW5wdXQgPSBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VySW5wdXRzSW5wdXQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvUmVmcmVzaDogZmFsc2UsXG4gICAgYXV0b1N1Ym1pdDogZmFsc2UsXG4gICAgbW9kZWw6IG51bGwsXG4gICAgbG9jYWxpemVkTnVtYmVyOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhdHRyaWJ1dGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXV0b1JlZnJlc2g6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgYXV0b1N1Ym1pdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9ybWF0VmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2FsaXplZE51bWJlcjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk1hdGNoVmFsaWRhdGlvbkVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLmlucHV0cy5pbnB1dFwifSlcbiAgICBjb25zdCB7YXV0b1JlZnJlc2gsIGlucHV0UHJvcHMsIG1vZGVsfSA9IHRoaXMucFxuICAgIGNvbnN0IHtkZWZhdWx0VmFsdWUsIG5hbWV9ID0gaW5wdXRQcm9wc1xuXG4gICAgdGhpcy5mb3JtID0gdXNlRm9ybSgpXG4gICAgdGhpcy52aXNpYmxlSW5wdXRSZWYgPSB1c2VSZWYoKVxuICAgIHRoaXMudCA9IHRcblxuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGJsYW5rSW5wdXROYW1lOiBkaWdnKGlucHV0UHJvcHMsIFwidHlwZVwiKSA9PSBcImZpbGVcIlxuICAgIH0pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHRoaXMudHQuZm9ybT8uc2V0VmFsdWUobmFtZSwgZGVmYXVsdFZhbHVlKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCB0aGlzLnR0Lm9uTW9kZWxVcGRhdGVkLCB7YWN0aXZlOiBCb29sZWFuKGF1dG9SZWZyZXNoICYmIG1vZGVsKX0pXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZSxcbiAgICAgIGF1dG9SZWZyZXNoLFxuICAgICAgYXV0b1N1Ym1pdCxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGZvcm1hdFZhbHVlLFxuICAgICAgaWQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBsb2NhbGl6ZWROdW1iZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIG5hbWUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRXJyb3JzLFxuICAgICAgb25NYXRjaFZhbGlkYXRpb25FcnJvcixcbiAgICAgIHR5cGUsXG4gICAgICB3cmFwcGVyT3B0cyxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBjb25zdCBzaGFyZWRQcm9wcyA9IHtcbiAgICAgIGlkOiBsb2NhbGl6ZWROdW1iZXIgPyBudWxsIDogaW5wdXRQcm9wcy5pZCxcbiAgICAgIG5hbWU6IGxvY2FsaXplZE51bWJlciA/IG51bGwgOiBpbnB1dFByb3BzLm5hbWUsXG4gICAgfVxuICAgIGNvbnN0IHJlZiA9IGxvY2FsaXplZE51bWJlciA/IHRoaXMudmlzaWJsZUlucHV0UmVmIDogdGhpcy5pbnB1dFJlZmVyZW5jZSgpXG4gICAgY29uc3Qge3JlZjogaW5wdXRQcm9wc1JlZiwgLi4uaW5wdXRQcm9wc1dpdGhvdXRSZWZ9ID0gaW5wdXRQcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtsb2NhbGl6ZWROdW1iZXIgJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICAgICAgaWQ9e2lucHV0UHJvcHMuaWR9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLmlucHV0TmFtZSgpfVxuICAgICAgICAgICAgcmVmPXt0aGlzLmlucHV0UmVmZXJlbmNlKCl9XG4gICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHt0eXBlID09IFwibW9uZXlcIiAmJlxuICAgICAgICAgIDxNb25leVxuICAgICAgICAgICAgYXR0cmlidXRlPXthdHRyaWJ1dGV9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuaW5wdXREZWZhdWx0VmFsdWVMb2NhbGl6ZWQoKX1cbiAgICAgICAgICAgIGlucHV0UmVmPXt0aGlzLmlucHV0UmVmZXJlbmNlKCl9XG4gICAgICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbklucHV0Q2hhbmdlZH1cbiAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzV2l0aG91dFJlZn1cbiAgICAgICAgICAgIHsuLi5zaGFyZWRQcm9wc31cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dHlwZSA9PSBcInRleHRhcmVhXCIgJiZcbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5pbnB1dERlZmF1bHRWYWx1ZUxvY2FsaXplZCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25JbnB1dENoYW5nZWR9XG4gICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzV2l0aG91dFJlZn1cbiAgICAgICAgICAgIHsuLi5zaGFyZWRQcm9wc31cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dHlwZSAhPSBcIm1vbmV5XCIgJiYgdHlwZSAhPSBcInRleHRhcmVhXCIgJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5pbnB1dERlZmF1bHRWYWx1ZUxvY2FsaXplZCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25JbnB1dENoYW5nZWR9XG4gICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzV2l0aG91dFJlZn1cbiAgICAgICAgICAgIHsuLi5zaGFyZWRQcm9wc31cbiAgICAgICAgICAgIG5hbWU9e2xvY2FsaXplZE51bWJlciA/IG51bGwgOiB0aGlzLmlucHV0TmFtZSgpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICBhY3R1YWxWYWx1ZSAodmlzaWJsZUlucHV0KSB7XG4gICAgY29uc3Qge3R9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtsb2NhbGl6ZWROdW1iZXJ9ID0gZGlncyh0aGlzLnByb3BzLCBcImxvY2FsaXplZE51bWJlclwiKVxuICAgIGNvbnN0IHZhbHVlID0gZGlnZyh2aXNpYmxlSW5wdXQsIFwidmFsdWVcIilcblxuICAgIGlmIChsb2NhbGl6ZWROdW1iZXIpIHtcbiAgICAgIGNvbnN0IGRlY2ltYWwgPSB0KFwibnVtYmVyLmN1cnJlbmN5LmZvcm1hdC5zZXBhcmF0b3JcIilcbiAgICAgIGNvbnN0IGludGVnZXJTZXBhcmF0b3IgPSB0KFwibnVtYmVyLmN1cnJlbmN5LmZvcm1hdC5kZWxpbWl0ZXJcIilcblxuICAgICAgbGV0IHVuZm9ybWF0dGVkID0gcmVwbGFjZWFsbChpbnRlZ2VyU2VwYXJhdG9yLCBcIlwiLCB2YWx1ZSlcblxuICAgICAgdW5mb3JtYXR0ZWQgPSByZXBsYWNlYWxsKGRlY2ltYWwsIFwiLlwiLCB1bmZvcm1hdHRlZClcblxuICAgICAgcmV0dXJuIHVuZm9ybWF0dGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBhdXRvU3VibWl0ID0gKCkgPT4gbmV3IEF1dG9TdWJtaXQoe2NvbXBvbmVudDogdGhpc30pLmF1dG9TdWJtaXQoKVxuXG4gIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xuICAgIGNvbnN0IHtmb3JtYXRWYWx1ZSwgdHlwZX0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZm9ybWF0VmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRWYWx1ZSh2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgLy8gV2UgbmVlZCB0byB1c2UgYSBjZXJ0YWluIGZvcm1hdCBmb3IgZGF0ZXRpbWUtbG9jYWxcbiAgICAgIGlmICh0eXBlID09IFwiZGF0ZXRpbWUtbG9jYWxcIikge1xuICAgICAgICByZXR1cm4gc3RyZnRpbWUoXCIlWS0lbS0lZFQlSDolTTolU1wiLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImRhdGVcIikge1xuICAgICAgICByZXR1cm4gc3RyZnRpbWUoXCIlWS0lbS0lZFwiLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGlucHV0RGVmYXVsdFZhbHVlTG9jYWxpemVkICgpIHtcbiAgICBjb25zdCB7dH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge2xvY2FsaXplZE51bWJlcn0gPSBkaWdzKHRoaXMucHJvcHMsIFwibG9jYWxpemVkTnVtYmVyXCIpXG5cbiAgICBpZiAobG9jYWxpemVkTnVtYmVyICYmIGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdChcIm51bWJlci5jdXJyZW5jeS5mb3JtYXQuc2VwYXJhdG9yXCIpXG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSB0KFwibnVtYmVyLmN1cnJlbmN5LmZvcm1hdC5kZWxpbWl0ZXJcIilcblxuICAgICAgbGV0IGZvcm1hdHRlZCA9IGAke2RlZmF1bHRWYWx1ZX1gXG5cbiAgICAgIGZvcm1hdHRlZCA9IHJlcGxhY2VhbGwoXCIuXCIsIFwie3tzZXBhcmF0b3J9fVwiLCBmb3JtYXR0ZWQpXG4gICAgICBmb3JtYXR0ZWQgPSByZXBsYWNlYWxsKFwiLFwiLCBcInt7ZGVsaW1pdGVyfX1cIiwgZm9ybWF0dGVkKVxuICAgICAgZm9ybWF0dGVkID0gcmVwbGFjZWFsbChcInt7c2VwYXJhdG9yfX1cIiwgc2VwYXJhdG9yLCBmb3JtYXR0ZWQpXG4gICAgICBmb3JtYXR0ZWQgPSByZXBsYWNlYWxsKFwie3tkZWxpbWl0ZXJ9fVwiLCBkZWxpbWl0ZXIsIGZvcm1hdHRlZClcblxuICAgICAgcmV0dXJuIGZvcm1hdHRlZFxuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgfVxuXG4gIGlucHV0TmFtZSAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuYmxhbmtJbnB1dE5hbWUpIHJldHVybiBcIlwiXG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dFByb3BzLm5hbWVcbiAgfVxuXG4gIGlucHV0UmVmZXJlbmNlID0gKCkgPT4gZGlnZyh0aGlzLCBcInByb3BzXCIsIFwiaW5wdXRQcm9wc1wiLCBcInJlZlwiKVxuXG4gIG9uTW9kZWxVcGRhdGVkID0gKGFyZ3MpID0+IHtcbiAgICBjb25zdCBpbnB1dFJlZiA9IHRoaXMuaW5wdXRSZWZlcmVuY2UoKVxuXG4gICAgaWYgKCFpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGNvbXBvbmVudCBpcyBiZWluZyB1bm1vdW50ZWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHthdHRyaWJ1dGV9ID0gZGlncyh0aGlzLnByb3BzLCBcImF0dHJpYnV0ZVwiKVxuICAgIGNvbnN0IG5ld01vZGVsID0gZGlnZyhhcmdzLCBcIm1vZGVsXCIpXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gZGlnZyhpbnB1dFJlZiwgXCJjdXJyZW50XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld01vZGVsLnJlYWRBdHRyaWJ1dGUoYXR0cmlidXRlKVxuICAgIGNvbnN0IG5ld0Zvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShuZXdWYWx1ZSlcblxuICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbmV3Rm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSBuZXdGb3JtYXR0ZWRWYWx1ZVxuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2VkID0gKGUpID0+IHtcbiAgICBjb25zdCB7Zm9ybX0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgYXV0b1N1Ym1pdCwgaW5wdXRQcm9wcywgbW9kZWwsIG9uQ2hhbmdlfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bG9jYWxpemVkTnVtYmVyfSA9IGRpZ3ModGhpcy5wcm9wcywgXCJsb2NhbGl6ZWROdW1iZXJcIilcbiAgICBjb25zdCB7bmFtZX0gPSBpbnB1dFByb3BzXG5cbiAgICBpZiAobG9jYWxpemVkTnVtYmVyKSB0aGlzLmlucHV0UmVmZXJlbmNlKCkuY3VycmVudC52YWx1ZSA9IHRoaXMuYWN0dWFsVmFsdWUoZGlnZyhlLCBcInRhcmdldFwiKSlcblxuICAgIGlmIChhdHRyaWJ1dGUgJiYgYXV0b1N1Ym1pdCAmJiBtb2RlbCkgdGhpcy5kZWxheUF1dG9TdWJtaXQoKVxuICAgIGlmIChkaWdnKGlucHV0UHJvcHMsIFwidHlwZVwiKSA9PSBcImZpbGVcIikgdGhpcy5zZXRTdGF0ZSh7YmxhbmtJbnB1dE5hbWU6IHRoaXMuZ2V0QmxhbmtJbnB1dE5hbWUoKX0pXG5cbiAgICBpZiAoZm9ybSAmJiBuYW1lKSB7XG4gICAgICBmb3JtLnNldFZhbHVlKG5hbWUsIGUudGFyZ2V0LnZhbHVlKVxuICAgIH1cblxuICAgIGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZSlcbiAgfVxuXG4gIGRlbGF5QXV0b1N1Ym1pdCAoKSB7XG4gICAgaWYgKHRoaXMuZGVsYXlBdXRvU3VibWl0VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlBdXRvU3VibWl0VGltZW91dClcbiAgICB9XG5cbiAgICB0aGlzLmRlbGF5QXV0b1N1Ym1pdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuYXV0b1N1Ym1pdCwgMjAwKVxuICB9XG5cbiAgLy8gVGhpcyBmaXhlcyBhbiBpc3N1ZSBpbiBGaXJlZm94IGFuZCBBY3RpdmVTdG9yYWdlLCB3aGVyZSB1cGxvYWRzIHdvdWxkIGJlIGEgYmxhbmsgc3RyaW5nIGlmIGEgZmlsZSB3YXNuJ3QgY2hvc2VuXG4gIGdldEJsYW5rSW5wdXROYW1lICgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRpZyh0aGlzLmlucHV0UmVmZXJlbmNlKCksIFwiY3VycmVudFwiLCBcInZhbHVlXCIpXG5cbiAgICBpZiAodGhpcy5wcm9wcy5pbnB1dFByb3BzLnR5cGUgPT0gXCJmaWxlXCIgJiYgdmFsdWUgPT0gXCJcIilcbiAgICAgIHJldHVybiB0cnVlXG4gIH1cbn0pKVxuXG5leHBvcnQge0FwaU1ha2VySW5wdXRzSW5wdXQgYXMgSW5wdXR9XG5leHBvcnQgZGVmYXVsdCBpbnB1dFdyYXBwZXIoQXBpTWFrZXJJbnB1dHNJbnB1dClcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLFVBQVUsTUFBTSxlQUFlO0FBQ3RDLE9BQU9DLGFBQWEsTUFBTSxtQkFBbUI7QUFDN0MsU0FBUUMsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLElBQUksUUFBTyxXQUFXO0FBQ3pDLE9BQU9DLFlBQVksTUFBTSxpQkFBaUI7QUFDMUMsT0FBT0MsSUFBSSxNQUFNLDRCQUE0QjtBQUM3QyxPQUFPQyxLQUFLLE1BQU0sU0FBUztBQUMzQixPQUFPQyxTQUFTLE1BQU0sWUFBWTtBQUNsQyxPQUFPQyxLQUFLLElBQUdDLE9BQU8sRUFBRUMsTUFBTSxRQUFPLE9BQU87QUFDNUMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsU0FBUUMsY0FBYyxRQUFPLHVDQUF1QztBQUNwRSxPQUFPQyxRQUFRLE1BQU0sVUFBVTtBQUMvQixTQUFRQyxPQUFPLFFBQU8sU0FBUztBQUMvQixPQUFPQyxPQUFPLE1BQU0sK0JBQStCO0FBQ25ELE9BQU9DLGVBQWUsTUFBTSxzQkFBc0I7QUFFbEQsTUFBTUMsbUJBQW1CLEdBQUdaLElBQUksQ0FBQ08sY0FBYyxDQUFDLE1BQU1LLG1CQUFtQixTQUFTakIsYUFBYSxDQUFDO0VBQzlGLE9BQU9rQixZQUFZLEdBQUc7SUFDcEJDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxVQUFVLEVBQUUsS0FBSztJQUNqQkMsS0FBSyxFQUFFLElBQUk7SUFDWEMsZUFBZSxFQUFFO0VBQ25CLENBQUM7RUFFRCxPQUFPQyxTQUFTLEdBQUc7SUFDakJDLFNBQVMsRUFBRWpCLFNBQVMsQ0FBQ2tCLE1BQU07SUFDM0JOLFdBQVcsRUFBRVosU0FBUyxDQUFDbUIsSUFBSSxDQUFDQyxVQUFVO0lBQ3RDUCxVQUFVLEVBQUViLFNBQVMsQ0FBQ21CLElBQUksQ0FBQ0MsVUFBVTtJQUNyQ0MsU0FB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LENBQUNzRCxLQUFLLEVBQUUsaUJBQWlCLENBQUM7SUFDN0QsTUFBTTtNQUFDeEI7SUFBSSxDQUFDLEdBQUdPLFVBQVU7SUFFekIsSUFBSWxCLGVBQWUsRUFBRSxJQUFJLENBQUNzQyxjQUFjLENBQUMsQ0FBQyxDQUFDeUIsT0FBTyxDQUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDRixXQUFXLENBQUNuRSxJQUFJLENBQUN5RixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFOUYsSUFBSW5FLFNBQVMsSUFBSUosVUFBVSxJQUFJQyxLQUFLLEVBQUUsSUFBSSxDQUFDdUUsZUFBZSxDQUFDLENBQUM7SUFDNUQsSUFBSTFGLElBQUksQ0FBQ3NDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDcUQsUUFBUSxDQUFDO01BQUMvQyxjQUFjLEVBQUUsSUFBSSxDQUFDZ0QsaUJBQWlCLENBQUM7SUFBQyxDQUFDLENBQUM7SUFFakcsSUFBSW5ELElBQUksSUFBSVYsSUFBSSxFQUFFO01BQ2hCVSxJQUFJLENBQUNLLFFBQVEsQ0FBQ2YsSUFBSSxFQUFFMEQsQ0FBQyxDQUFDSSxNQUFNLENBQUN4QixLQUFLLENBQUM7SUFDckM7SUFFQSxJQUFJckMsUUFBUSxFQUFFQSxRQUFRLENBQUN5RCxDQUFDLENBQUM7RUFDM0IsQ0FBQztFQUVEQyxlQUFlQSxDQUFBLEVBQUk7SUFDakIsSUFBSSxJQUFJLENBQUNJLHNCQUFzQixFQUFFO01BQy9CQyxZQUFZLENBQUMsSUFBSSxDQUFDRCxzQkFBc0IsQ0FBQztJQUMzQztJQUVBLElBQUksQ0FBQ0Esc0JBQXNCLEdBQUdFLFVBQVUsQ0FBQyxJQUFJLENBQUM5RSxVQUFVLEVBQUUsR0FBRyxDQUFDO0VBQ2hFOztFQUVBO0VBQ0EwRSxpQkFBaUJBLENBQUEsRUFBSTtJQUNuQixNQUFNdkIsS0FBSyxHQUFHdEUsR0FBRyxDQUFDLElBQUksQ0FBQzJELGNBQWMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQztJQUU1RCxJQUFJLElBQUksQ0FBQ0gsS0FBSyxDQUFDakIsVUFBVSxDQUFDSixJQUFJLElBQUksTUFBTSxJQUFJbUMsS0FBSyxJQUFJLEVBQUUsRUFDckQsT0FBTyxJQUFJO0VBQ2Y7QUFDRixDQUFDLENBQUMsQ0FBQztBQUVILFNBQVF0RCxtQkFBbUIsSUFBSWtGLEtBQUs7QUFDcEMsZUFBZS9GLFlBQVksQ0FBQ2EsbUJBQW1CLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,179 @@
1
+ import React, { useRef } from "react";
2
+ import { shapeComponent, ShapeComponent } from "set-state-compare/src/shape-component";
3
+ import classNames from "classnames";
4
+ import Config from "../config";
5
+ import { digg } from "diggerize";
6
+ import idForComponent from "./id-for-component";
7
+ import * as inflection from "inflection";
8
+ import memo from "set-state-compare/src/memo";
9
+ import MoneyFormatter from "../money-formatter";
10
+ import PropTypes from "prop-types";
11
+ import PropTypesExact from "prop-types-exact";
12
+ export default memo(shapeComponent(class ApiMakerInputsMoney extends ShapeComponent {
13
+ static defaultProps = {
14
+ disabled: false,
15
+ showCurrencyOptions: true
16
+ };
17
+ static propTypes = PropTypesExact({
18
+ attribute: PropTypes.string,
19
+ centsInputName: PropTypes.string,
20
+ className: PropTypes.string,
21
+ currenciesCollection: PropTypes.array,
22
+ currencyName: PropTypes.string,
23
+ currencyRef: PropTypes.object,
24
+ defaultValue: PropTypes.object,
25
+ disabled: PropTypes.bool.isRequired,
26
+ id: PropTypes.string,
27
+ inputRef: PropTypes.object,
28
+ label: PropTypes.node,
29
+ model: PropTypes.object,
30
+ name: PropTypes.string,
31
+ onChange: PropTypes.func,
32
+ placeholder: PropTypes.node,
33
+ showCurrencyOptions: PropTypes.bool,
34
+ small: PropTypes.bool,
35
+ type: PropTypes.string,
36
+ wholeRef: PropTypes.object
37
+ });
38
+ setup() {
39
+ this.inputRef = useRef();
40
+ this.currencyRefBackup = useRef();
41
+ this.currencyRef = this.props.currencyRef || this.currencyRefBackup;
42
+ this.wholeRefBackup = useRef();
43
+ this.wholeRef = this.props.wholeRef || this.wholeRefBackup;
44
+ }
45
+ getInputRef() {
46
+ return this.props.inputRef || this.inputRef;
47
+ }
48
+ render() {
49
+ const {
50
+ attribute,
51
+ className,
52
+ disabled,
53
+ model,
54
+ showCurrencyOptions
55
+ } = this.props;
56
+ let {
57
+ currenciesCollection
58
+ } = this.props;
59
+ if (!currenciesCollection) currenciesCollection = Config.getCurrenciesCollection();
60
+ return /*#__PURE__*/React.createElement("div", {
61
+ className: "api-maker-inputs-money",
62
+ "data-attribute": attribute,
63
+ "data-model-id": model?.id()
64
+ }, /*#__PURE__*/React.createElement("input", {
65
+ defaultValue: this.inputDefaultCentsValue(),
66
+ id: this.inputCentsId(),
67
+ name: this.inputCentsName(),
68
+ ref: this.getInputRef(),
69
+ type: "hidden"
70
+ }), /*#__PURE__*/React.createElement("input", {
71
+ className: classNames("money-cents", className),
72
+ defaultValue: this.inputDefaultValue(),
73
+ disabled: disabled,
74
+ id: this.inputId(),
75
+ onBlur: digg(this, "setAmount"),
76
+ onChange: digg(this, "setCents"),
77
+ onKeyUp: digg(this, "setCents"),
78
+ placeholder: this.props.placeholder,
79
+ ref: this.wholeRef,
80
+ type: "text"
81
+ }), showCurrencyOptions && /*#__PURE__*/React.createElement("select", {
82
+ className: "money-currency",
83
+ defaultValue: this.inputCurrencyValue(),
84
+ disabled: disabled,
85
+ id: this.inputCurrencyId(),
86
+ name: this.inputCurrencyName(),
87
+ onChange: digg(this, "onCurrencyChanged"),
88
+ ref: this.currencyRef
89
+ }, /*#__PURE__*/React.createElement("option", null), currenciesCollection.map(option => /*#__PURE__*/React.createElement("option", {
90
+ key: `select-option-${option[1]}`,
91
+ value: option[1]
92
+ }, this.props.small && option[1], !this.props.small && option[0]))));
93
+ }
94
+ inputCurrencyId() {
95
+ return `${this.inputId()}_currency`;
96
+ }
97
+ inputCurrencyName() {
98
+ if ("currencyName" in this.props) return this.props.currencyName;
99
+ return `${this.props.model.modelClassData().paramKey}[${inflection.underscore(this.props.attribute)}_currency]`;
100
+ }
101
+ inputCurrencyValue() {
102
+ const {
103
+ defaultValue
104
+ } = this.props;
105
+ if (defaultValue) {
106
+ return MoneyFormatter.currencyFromMoney(defaultValue).code;
107
+ } else {
108
+ return "DKK";
109
+ }
110
+ }
111
+ inputDefaultValue() {
112
+ const {
113
+ defaultValue
114
+ } = this.props;
115
+ if (defaultValue) {
116
+ return MoneyFormatter.fromMoney({
117
+ amount: defaultValue.amount,
118
+ currency: this.inputCurrencyValue()
119
+ }, {
120
+ decimals: 2,
121
+ excludeCurrency: true
122
+ }).toString();
123
+ } else {
124
+ return "";
125
+ }
126
+ }
127
+ inputDefaultCentsValue() {
128
+ const {
129
+ defaultValue
130
+ } = this.props;
131
+ if (this.getInputRef().current) {
132
+ return digg(this.getInputRef(), "current", "value");
133
+ } else if (defaultValue) {
134
+ return MoneyFormatter.amountFromMoney(defaultValue);
135
+ }
136
+ }
137
+ inputCentsId() {
138
+ return `${this.inputId()}_cents`;
139
+ }
140
+ inputCentsName() {
141
+ if ("name" in this.props) return this.props.name;
142
+ return `${this.props.model.modelClassData().paramKey}[${inflection.underscore(this.props.attribute)}_cents]`;
143
+ }
144
+ inputId() {
145
+ return idForComponent(this);
146
+ }
147
+ onCurrencyChanged = () => {
148
+ if (this.props.onChange) this.props.onChange();
149
+ };
150
+ setAmount = () => {
151
+ const inputElement = this.getInputRef().current;
152
+ if (!inputElement.value && inputElement.value == "") {
153
+ this.wholeRef.current.value = "";
154
+ } else {
155
+ const cents = parseFloat(inputElement.value);
156
+ const formatted = MoneyFormatter.fromMoney({
157
+ amount: cents,
158
+ currency: this.inputCurrencyValue()
159
+ }, {
160
+ decimals: 2,
161
+ excludeCurrency: true
162
+ }).toString();
163
+ this.wholeRef.current.value = formatted;
164
+ }
165
+ };
166
+ setCents = () => {
167
+ const inputElement = this.getInputRef().current;
168
+ let whole = MoneyFormatter.stringToFloat(this.wholeRef.current.value);
169
+ let cents = parseInt(whole * 100, 10);
170
+ let oldCents = parseInt(inputElement.value, 10);
171
+ if (typeof cents == "number") {
172
+ inputElement.value = cents;
173
+ } else {
174
+ inputElement.value = '';
175
+ }
176
+ if (this.props.onChange && oldCents != cents) this.props.onChange();
177
+ };
178
+ }));
179
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVJlZiIsInNoYXBlQ29tcG9uZW50IiwiU2hhcGVDb21wb25lbnQiLCJjbGFzc05hbWVzIiwiQ29uZmlnIiwiZGlnZyIsImlkRm9yQ29tcG9uZW50IiwiaW5mbGVjdGlvbiIsIm1lbW8iLCJNb25leUZvcm1hdHRlciIsIlByb3BUeXBlcyIsIlByb3BUeXBlc0V4YWN0IiwiQXBpTWFrZXJJbnB1dHNNb25leSIsImRlZmF1bHRQcm9wcyIsImRpc2FibGVkIiwic2hvd0N1cnJlbmN5T3B0aW9ucyIsInByb3BUeXBlcyIsImF0dHJpYnV0ZSIsInN0cmluZyIsImNlbnRzSW5wdXROYW1lIiwiY2xhc3NOYW1lIiwiY3VycmVuY2llc0NvbGxlY3Rpb24iLCJhcnJheSIsImN1cnJlbmN5TmFtZSIsImN1cnJlbmN5UmVmIiwib2JqZWN0IiwiZGVmYXVsdFZhbHVlIiwiYm9vbCIsImlzUmVxdWlyZWQiLCJpZCIsImlucHV0UmVmIiwibGFiZWwiLCJub2RlIiwibW9kZWwiLCJuYW1lIiwib25DaGFuZ2UiLCJmdW5jIiwicGxhY2Vob2xkZXIiLCJzbWFsbCIsInR5cGUiLCJ3aG9sZVJlZiIsInNldHVwIiwiY3VycmVuY3lSZWZCYWNrdXAiLCJwcm9wcyIsIndob2xlUmVmQmFja3VwIiwiZ2V0SW5wdXRSZWYiLCJyZW5kZXIiLCJnZXRDdXJyZW5jaWVzQ29sbGVjdGlvbiIsImNyZWF0ZUVsZW1lbnQiLCJpbnB1dERlZmF1bHRDZW50c1ZhbHVlIiwiaW5wdXRDZW50c0lkIiwiaW5wdXRDZW50c05hbWUiLCJyZWYiLCJpbnB1dERlZmF1bHRWYWx1ZSIsImlucHV0SWQiLCJvbkJsdXIiLCJvbktleVVwIiwiaW5wdXRDdXJyZW5jeVZhbHVlIiwiaW5wdXRDdXJyZW5jeUlkIiwiaW5wdXRDdXJyZW5jeU5hbWUiLCJtYXAiLCJvcHRpb24iLCJrZXkiLCJ2YWx1ZSIsIm1vZGVsQ2xhc3NEYXRhIiwicGFyYW1LZXkiLCJ1bmRlcnNjb3JlIiwiY3VycmVuY3lGcm9tTW9uZXkiLCJjb2RlIiwiZnJvbU1vbmV5IiwiYW1vdW50IiwiY3VycmVuY3kiLCJkZWNpbWFscyIsImV4Y2x1ZGVDdXJyZW5jeSIsInRvU3RyaW5nIiwiY3VycmVudCIsImFtb3VudEZyb21Nb25leSIsIm9uQ3VycmVuY3lDaGFuZ2VkIiwic2V0QW1vdW50IiwiaW5wdXRFbGVtZW50IiwiY2VudHMiLCJwYXJzZUZsb2F0IiwiZm9ybWF0dGVkIiwic2V0Q2VudHMiLCJ3aG9sZSIsInN0cmluZ1RvRmxvYXQiLCJwYXJzZUludCIsIm9sZENlbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0cy9tb25leS5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7dXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvc2hhcGUtY29tcG9uZW50XCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBDb25maWcgZnJvbSBcIi4uL2NvbmZpZ1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IGlkRm9yQ29tcG9uZW50IGZyb20gXCIuL2lkLWZvci1jb21wb25lbnRcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IE1vbmV5Rm9ybWF0dGVyIGZyb20gXCIuLi9tb25leS1mb3JtYXR0ZXJcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgUHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VySW5wdXRzTW9uZXkgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dDdXJyZW5jeU9wdGlvbnM6IHRydWVcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBQcm9wVHlwZXNFeGFjdCh7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNlbnRzSW5wdXROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjdXJyZW5jaWVzQ29sbGVjdGlvbjogUHJvcFR5cGVzLmFycmF5LFxuICAgIGN1cnJlbmN5TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjdXJyZW5jeVJlZjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW5wdXRSZWY6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzaG93Q3VycmVuY3lPcHRpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzbWFsbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB3aG9sZVJlZjogUHJvcFR5cGVzLm9iamVjdFxuICB9KVxuXG4gIHNldHVwKCkge1xuICAgIHRoaXMuaW5wdXRSZWYgPSB1c2VSZWYoKVxuICAgIHRoaXMuY3VycmVuY3lSZWZCYWNrdXAgPSB1c2VSZWYoKVxuICAgIHRoaXMuY3VycmVuY3lSZWYgPSB0aGlzLnByb3BzLmN1cnJlbmN5UmVmIHx8IHRoaXMuY3VycmVuY3lSZWZCYWNrdXBcbiAgICB0aGlzLndob2xlUmVmQmFja3VwID0gdXNlUmVmKClcbiAgICB0aGlzLndob2xlUmVmID0gdGhpcy5wcm9wcy53aG9sZVJlZiB8fCB0aGlzLndob2xlUmVmQmFja3VwXG4gIH1cblxuICBnZXRJbnB1dFJlZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5wdXRSZWYgfHwgdGhpcy5pbnB1dFJlZlxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBjbGFzc05hbWUsIGRpc2FibGVkLCBtb2RlbCwgc2hvd0N1cnJlbmN5T3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgbGV0IHtjdXJyZW5jaWVzQ29sbGVjdGlvbn0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoIWN1cnJlbmNpZXNDb2xsZWN0aW9uKSBjdXJyZW5jaWVzQ29sbGVjdGlvbiA9IENvbmZpZy5nZXRDdXJyZW5jaWVzQ29sbGVjdGlvbigpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcGktbWFrZXItaW5wdXRzLW1vbmV5XCIgZGF0YS1hdHRyaWJ1dGU9e2F0dHJpYnV0ZX0gZGF0YS1tb2RlbC1pZD17bW9kZWw/LmlkKCl9PlxuICAgICAgICA8aW5wdXQgZGVmYXVsdFZhbHVlPXt0aGlzLmlucHV0RGVmYXVsdENlbnRzVmFsdWUoKX0gaWQ9e3RoaXMuaW5wdXRDZW50c0lkKCl9IG5hbWU9e3RoaXMuaW5wdXRDZW50c05hbWUoKX0gcmVmPXt0aGlzLmdldElucHV0UmVmKCl9IHR5cGU9XCJoaWRkZW5cIiAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJtb25leS1jZW50c1wiLCBjbGFzc05hbWUpfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5pbnB1dERlZmF1bHRWYWx1ZSgpfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBpZD17dGhpcy5pbnB1dElkKCl9XG4gICAgICAgICAgb25CbHVyPXtkaWdnKHRoaXMsIFwic2V0QW1vdW50XCIpfVxuICAgICAgICAgIG9uQ2hhbmdlPXtkaWdnKHRoaXMsIFwic2V0Q2VudHNcIil9XG4gICAgICAgICAgb25LZXlVcD17ZGlnZyh0aGlzLCBcInNldENlbnRzXCIpfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHJlZj17dGhpcy53aG9sZVJlZn1cbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIC8+XG4gICAgICAgIHtzaG93Q3VycmVuY3lPcHRpb25zICYmXG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibW9uZXktY3VycmVuY3lcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmlucHV0Q3VycmVuY3lWYWx1ZSgpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgaWQ9e3RoaXMuaW5wdXRDdXJyZW5jeUlkKCl9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLmlucHV0Q3VycmVuY3lOYW1lKCl9XG4gICAgICAgICAgICBvbkNoYW5nZT17ZGlnZyh0aGlzLCBcIm9uQ3VycmVuY3lDaGFuZ2VkXCIpfVxuICAgICAgICAgICAgcmVmPXt0aGlzLmN1cnJlbmN5UmVmfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb24+PC9vcHRpb24+XG4gICAgICAgICAgICB7Y3VycmVuY2llc0NvbGxlY3Rpb24ubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2BzZWxlY3Qtb3B0aW9uLSR7b3B0aW9uWzFdfWB9IHZhbHVlPXtvcHRpb25bMV19PlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNtYWxsICYmIG9wdGlvblsxXX1cbiAgICAgICAgICAgICAgICB7IXRoaXMucHJvcHMuc21hbGwgJiYgb3B0aW9uWzBdfVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBpbnB1dEN1cnJlbmN5SWQgKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmlucHV0SWQoKX1fY3VycmVuY3lgXG4gIH1cblxuICBpbnB1dEN1cnJlbmN5TmFtZSAoKSB7XG4gICAgaWYgKFwiY3VycmVuY3lOYW1lXCIgaW4gdGhpcy5wcm9wcylcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmN1cnJlbmN5TmFtZVxuXG4gICAgcmV0dXJuIGAke3RoaXMucHJvcHMubW9kZWwubW9kZWxDbGFzc0RhdGEoKS5wYXJhbUtleX1bJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5wcm9wcy5hdHRyaWJ1dGUpfV9jdXJyZW5jeV1gXG4gIH1cblxuICBpbnB1dEN1cnJlbmN5VmFsdWUgKCkge1xuICAgIGNvbnN0IHtkZWZhdWx0VmFsdWV9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIE1vbmV5Rm9ybWF0dGVyLmN1cnJlbmN5RnJvbU1vbmV5KGRlZmF1bHRWYWx1ZSkuY29kZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJES0tcIlxuICAgIH1cbiAgfVxuXG4gIGlucHV0RGVmYXVsdFZhbHVlICgpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBNb25leUZvcm1hdHRlci5mcm9tTW9uZXkoe2Ftb3VudDogZGVmYXVsdFZhbHVlLmFtb3VudCwgY3VycmVuY3k6IHRoaXMuaW5wdXRDdXJyZW5jeVZhbHVlKCl9LCB7ZGVjaW1hbHM6IDIsIGV4Y2x1ZGVDdXJyZW5jeTogdHJ1ZX0pLnRvU3RyaW5nKClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCJcbiAgICB9XG4gIH1cblxuICBpbnB1dERlZmF1bHRDZW50c1ZhbHVlICgpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICh0aGlzLmdldElucHV0UmVmKCkuY3VycmVudCkge1xuICAgICAgcmV0dXJuIGRpZ2codGhpcy5nZXRJbnB1dFJlZigpLCBcImN1cnJlbnRcIiwgXCJ2YWx1ZVwiKVxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gTW9uZXlGb3JtYXR0ZXIuYW1vdW50RnJvbU1vbmV5KGRlZmF1bHRWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBpbnB1dENlbnRzSWQgKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmlucHV0SWQoKX1fY2VudHNgXG4gIH1cblxuICBpbnB1dENlbnRzTmFtZSAoKSB7XG4gICAgaWYgKFwibmFtZVwiIGluIHRoaXMucHJvcHMpXG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lXG5cbiAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5tb2RlbC5tb2RlbENsYXNzRGF0YSgpLnBhcmFtS2V5fVske2luZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLnByb3BzLmF0dHJpYnV0ZSl9X2NlbnRzXWBcbiAgfVxuXG4gIGlucHV0SWQgKCkge1xuICAgIHJldHVybiBpZEZvckNvbXBvbmVudCh0aGlzKVxuICB9XG5cbiAgb25DdXJyZW5jeUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpXG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKClcbiAgfVxuXG4gIHNldEFtb3VudCA9ICgpID0+IHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmdldElucHV0UmVmKCkuY3VycmVudFxuXG4gICAgaWYgKCFpbnB1dEVsZW1lbnQudmFsdWUgJiYgaW5wdXRFbGVtZW50LnZhbHVlID09IFwiXCIpIHtcbiAgICAgIHRoaXMud2hvbGVSZWYuY3VycmVudC52YWx1ZSA9IFwiXCJcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2VudHMgPSBwYXJzZUZsb2F0KGlucHV0RWxlbWVudC52YWx1ZSlcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IE1vbmV5Rm9ybWF0dGVyLmZyb21Nb25leSh7YW1vdW50OiBjZW50cywgY3VycmVuY3k6IHRoaXMuaW5wdXRDdXJyZW5jeVZhbHVlKCl9LCB7ZGVjaW1hbHM6IDIsIGV4Y2x1ZGVDdXJyZW5jeTogdHJ1ZX0pLnRvU3RyaW5nKClcblxuICAgICAgdGhpcy53aG9sZVJlZi5jdXJyZW50LnZhbHVlID0gZm9ybWF0dGVkXG4gICAgfVxuICB9XG5cbiAgc2V0Q2VudHMgPSAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5nZXRJbnB1dFJlZigpLmN1cnJlbnRcblxuICAgIGxldCB3aG9sZSA9IE1vbmV5Rm9ybWF0dGVyLnN0cmluZ1RvRmxvYXQodGhpcy53aG9sZVJlZi5jdXJyZW50LnZhbHVlKVxuICAgIGxldCBjZW50cyA9IHBhcnNlSW50KHdob2xlICogMTAwLCAxMClcbiAgICBsZXQgb2xkQ2VudHMgPSBwYXJzZUludChpbnB1dEVsZW1lbnQudmFsdWUsIDEwKVxuXG4gICAgaWYgKHR5cGVvZiBjZW50cyA9PSBcIm51bWJlclwiKSB7XG4gICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSBjZW50c1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSAnJ1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlICYmIG9sZENlbnRzICE9IGNlbnRzKVxuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSgpXG4gIH1cbn0pKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxLQUFLLElBQUdDLE1BQU0sUUFBTyxPQUFPO0FBQ25DLFNBQVFDLGNBQWMsRUFBRUMsY0FBYyxRQUFPLHVDQUF1QztBQUNwRixPQUFPQyxVQUFVLE1BQU0sWUFBWTtBQUNuQyxP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
@@ -0,0 +1,13 @@
1
+ import * as inflection from "inflection";
2
+ export default function apiMakerNameForComponent(component) {
3
+ if ("name" in component.props) {
4
+ return component.props.name;
5
+ } else if (component.props.attribute && component.props.model) {
6
+ let attributeName = inflection.underscore(component.props.attribute);
7
+ if (component.props.type == "money") {
8
+ attributeName += "_cents";
9
+ }
10
+ return `${component.props.model.modelClassData().paramKey}[${attributeName}]`;
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiYXBpTWFrZXJOYW1lRm9yQ29tcG9uZW50IiwiY29tcG9uZW50IiwicHJvcHMiLCJuYW1lIiwiYXR0cmlidXRlIiwibW9kZWwiLCJhdHRyaWJ1dGVOYW1lIiwidW5kZXJzY29yZSIsInR5cGUiLCJtb2RlbENsYXNzRGF0YSIsInBhcmFtS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0cy9uYW1lLWZvci1jb21wb25lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwaU1ha2VyTmFtZUZvckNvbXBvbmVudCAoY29tcG9uZW50KSB7XG4gIGlmIChcIm5hbWVcIiBpbiBjb21wb25lbnQucHJvcHMpIHtcbiAgICByZXR1cm4gY29tcG9uZW50LnByb3BzLm5hbWVcbiAgfSBlbHNlIGlmIChjb21wb25lbnQucHJvcHMuYXR0cmlidXRlICYmIGNvbXBvbmVudC5wcm9wcy5tb2RlbCkge1xuICAgIGxldCBhdHRyaWJ1dGVOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGNvbXBvbmVudC5wcm9wcy5hdHRyaWJ1dGUpXG5cbiAgICBpZiAoY29tcG9uZW50LnByb3BzLnR5cGUgPT0gXCJtb25leVwiKSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lICs9IFwiX2NlbnRzXCJcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y29tcG9uZW50LnByb3BzLm1vZGVsLm1vZGVsQ2xhc3NEYXRhKCkucGFyYW1LZXl9WyR7YXR0cmlidXRlTmFtZX1dYFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBS0EsVUFBVSxNQUFNLFlBQVk7QUFFeEMsZUFBZSxTQUFTQyx3QkFBd0JBLENBQUVDLFNBQVMsRUFBRTtFQUMzRCxJQUFJLE1BQU0sSUFBSUEsU0FBUyxDQUFDQyxLQUFLLEVBQUU7SUFDN0IsT0FBT0QsU0FBUyxDQUFDQyxLQUFLLENBQUNDLElBQUk7RUFDN0IsQ0FBQyxNQUFNLElBQUlGLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDRSxTQUFTLElBQUlILFNBQVMsQ0FBQ0MsS0FBSyxDQUFDRyxLQUFLLEVBQUU7SUFDN0QsSUFBSUMsYUFBYSxHQUFHUCxVQUFVLENBQUNRLFVBQVUsQ0FBQ04sU0FBUyxDQUFDQyxLQUFLLENBQUNFLFNBQVMsQ0FBQztJQUVwRSxJQUFJSCxTQUFTLENBQUNDLEtBQUssQ0FBQ00sSUFBSSxJQUFJLE9BQU8sRUFBRTtNQUNuQ0YsYUFBYSxJQUFJLFFBQVE7SUFDM0I7SUFFQSxPQUFPLEdBQUdMLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDRyxLQUFLLENBQUNJLGNBQWMsQ0FBQyxDQUFDLENBQUNDLFFBQVEsSUFBSUosYUFBYSxHQUFHO0VBQy9FO0FBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,93 @@
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 BaseComponent from "../base-component";
3
+ import inputWrapper from "./input-wrapper";
4
+ import memo from "set-state-compare/src/memo";
5
+ import PropTypes from "prop-types";
6
+ import React from "react";
7
+ import { shapeComponent } from "set-state-compare/src/shape-component";
8
+ import { useForm } from "../form";
9
+ const ApiMakerInputsSelect = memo(shapeComponent(class ApiMakerInputsSelect extends BaseComponent {
10
+ static propTypes = {
11
+ attribute: PropTypes.string,
12
+ children: PropTypes.node,
13
+ defaultValue: PropTypes.oneOfType([PropTypes.array, PropTypes.number, PropTypes.string]),
14
+ id: PropTypes.string,
15
+ includeBlank: PropTypes.oneOfType([PropTypes.bool, PropTypes.node]),
16
+ inputProps: PropTypes.object.isRequired,
17
+ model: PropTypes.object,
18
+ name: PropTypes.string,
19
+ onChange: PropTypes.func,
20
+ options: PropTypes.array,
21
+ wrapperOpts: PropTypes.object.isRequired
22
+ };
23
+ setup() {
24
+ this.form = useForm();
25
+ }
26
+ render() {
27
+ const {
28
+ attribute,
29
+ children,
30
+ defaultValue,
31
+ id,
32
+ includeBlank,
33
+ inputProps,
34
+ inputRef,
35
+ model,
36
+ name,
37
+ onChange,
38
+ options,
39
+ wrapperOpts,
40
+ ...restProps
41
+ } = this.props;
42
+ return /*#__PURE__*/React.createElement("select", _extends({
43
+ onChange: this.tt.onChange
44
+ }, inputProps, restProps), this.includeBlank() && /*#__PURE__*/React.createElement("option", {
45
+ "data-include-blank": "true"
46
+ }, typeof includeBlank != "boolean" ? includeBlank : null), options && options.map(option => /*#__PURE__*/React.createElement("option", {
47
+ key: this.optionKey(option),
48
+ value: this.optionValue(option)
49
+ }, this.optionLabel(option))), children);
50
+ }
51
+ onChange = e => {
52
+ const {
53
+ form
54
+ } = this.tt;
55
+ const {
56
+ name,
57
+ onChange
58
+ } = this.props;
59
+ if (form && name) form.setValue(name, e.target.value);
60
+ if (onChange) onChange(e);
61
+ };
62
+ optionKey(option) {
63
+ if (Array.isArray(option)) {
64
+ return `select-option-${option[1]}`;
65
+ } else {
66
+ return `select-option-${option}`;
67
+ }
68
+ }
69
+ optionLabel(option) {
70
+ if (Array.isArray(option)) {
71
+ return option[0];
72
+ } else {
73
+ return option;
74
+ }
75
+ }
76
+ optionValue(option) {
77
+ if (Array.isArray(option)) {
78
+ return option[1];
79
+ } else {
80
+ return option;
81
+ }
82
+ }
83
+ includeBlank() {
84
+ if (this.props.includeBlank && !this.props.multiple) {
85
+ return true;
86
+ } else {
87
+ return false;
88
+ }
89
+ }
90
+ }));
91
+ export { ApiMakerInputsSelect as Select };
92
+ export default inputWrapper(ApiMakerInputsSelect);
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29tcG9uZW50IiwiaW5wdXRXcmFwcGVyIiwibWVtbyIsIlByb3BUeXBlcyIsIlJlYWN0Iiwic2hhcGVDb21wb25lbnQiLCJ1c2VGb3JtIiwiQXBpTWFrZXJJbnB1dHNTZWxlY3QiLCJwcm9wVHlwZXMiLCJhdHRyaWJ1dGUiLCJzdHJpbmciLCJjaGlsZHJlbiIsIm5vZGUiLCJkZWZhdWx0VmFsdWUiLCJvbmVPZlR5cGUiLCJhcnJheSIsIm51bWJlciIsImlkIiwiaW5jbHVkZUJsYW5rIiwiYm9vbCIsImlucHV0UHJvcHMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwibW9kZWwiLCJuYW1lIiwib25DaGFuZ2UiLCJmdW5jIiwib3B0aW9ucyIsIndyYXBwZXJPcHRzIiwic2V0dXAiLCJmb3JtIiwicmVuZGVyIiwiaW5wdXRSZWYiLCJyZXN0UHJvcHMiLCJwcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsInR0IiwibWFwIiwib3B0aW9uIiwia2V5Iiwib3B0aW9uS2V5IiwidmFsdWUiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwiZSIsInNldFZhbHVlIiwidGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwibXVsdGlwbGUiLCJTZWxlY3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5wdXRzL3NlbGVjdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCBpbnB1dFdyYXBwZXIgZnJvbSBcIi4vaW5wdXQtd3JhcHBlclwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvc2hhcGUtY29tcG9uZW50XCJcbmltcG9ydCB7dXNlRm9ybX0gZnJvbSBcIi4uL2Zvcm1cIlxuXG5jb25zdCBBcGlNYWtlcklucHV0c1NlbGVjdCA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJJbnB1dHNTZWxlY3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhdHRyaWJ1dGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW5jbHVkZUJsYW5rOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm5vZGVdKSxcbiAgICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICAgIHdyYXBwZXJPcHRzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbiAgfVxuXG4gIHNldHVwKCkge1xuICAgIHRoaXMuZm9ybSA9IHVzZUZvcm0oKVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhdHRyaWJ1dGUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGlkLFxuICAgICAgaW5jbHVkZUJsYW5rLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbW9kZWwsXG4gICAgICBuYW1lLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgd3JhcHBlck9wdHMsXG4gICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzZWxlY3Qgb25DaGFuZ2U9e3RoaXMudHQub25DaGFuZ2V9IHsuLi5pbnB1dFByb3BzfSB7Li4ucmVzdFByb3BzfT5cbiAgICAgICAge3RoaXMuaW5jbHVkZUJsYW5rKCkgJiZcbiAgICAgICAgICA8b3B0aW9uIGRhdGEtaW5jbHVkZS1ibGFuaz1cInRydWVcIj5cbiAgICAgICAgICAgIHt0eXBlb2YgaW5jbHVkZUJsYW5rICE9IFwiYm9vbGVhblwiID8gaW5jbHVkZUJsYW5rIDogbnVsbH1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgfVxuICAgICAgICB7b3B0aW9ucyAmJiBvcHRpb25zLm1hcCgob3B0aW9uKSA9PlxuICAgICAgICAgIDxvcHRpb24ga2V5PXt0aGlzLm9wdGlvbktleShvcHRpb24pfSB2YWx1ZT17dGhpcy5vcHRpb25WYWx1ZShvcHRpb24pfT5cbiAgICAgICAgICAgIHt0aGlzLm9wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICl9XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvc2VsZWN0PlxuICAgIClcbiAgfVxuXG4gIG9uQ2hhbmdlID0gKGUpID0+IHtcbiAgICBjb25zdCB7Zm9ybX0gPSB0aGlzLnR0XG4gICAgY29uc3Qge25hbWUsIG9uQ2hhbmdlfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChmb3JtICYmIG5hbWUpIGZvcm0uc2V0VmFsdWUobmFtZSwgZS50YXJnZXQudmFsdWUpXG4gICAgaWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShlKVxuICB9XG5cbiAgb3B0aW9uS2V5IChvcHRpb24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICByZXR1cm4gYHNlbGVjdC1vcHRpb24tJHtvcHRpb25bMV19YFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYHNlbGVjdC1vcHRpb24tJHtvcHRpb259YFxuICAgIH1cbiAgfVxuXG4gIG9wdGlvbkxhYmVsIChvcHRpb24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICByZXR1cm4gb3B0aW9uWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25cbiAgICB9XG4gIH1cblxuICBvcHRpb25WYWx1ZSAob3B0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgcmV0dXJuIG9wdGlvblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9uXG4gICAgfVxuICB9XG5cbiAgaW5jbHVkZUJsYW5rICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pbmNsdWRlQmxhbmsgJiYgIXRoaXMucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufSkpXG5cbmV4cG9ydCB7QXBpTWFrZXJJbnB1dHNTZWxlY3QgYXMgU2VsZWN0fVxuZXhwb3J0IGRlZmF1bHQgaW5wdXRXcmFwcGVyKEFwaU1ha2VySW5wdXRzU2VsZWN0KVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsYUFBYSxNQUFNLG1CQUFtQjtBQUM3QyxPQUFPQyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLE9BQU9DLElBQUksTUFBTSw0QkFBNEI7QUFDN0MsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsS0FBSyxNQUFNLE9BQU87QUFDekIsU0FBUUMsY0FBYyxRQUFPLHVDQUF1QztBQUNwRSxTQUFRQyxPQUFPLFFBQU8sU0FBUztBQUUvQixNQUFNQyxvQkFBb0IsR0FBR0wsSUFBSSxDQUFDRyxjQUFjLENBQUMsTUFBTUUsb0JBQW9CLFNBQVNQLGFBQWEsQ0FBQztFQUNoRyxPQUFPUSxTQUFTLEdBQUc7SUFDakJDLFNBQVMsRUFBRU4sU0FBUyxD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
@@ -0,0 +1,23 @@
1
+ import { digg } from "diggerize";
2
+ const propTypesValidator = (expectedClassName, args = {}) => (props, propName, componentName) => {
3
+ const prop = digg(props, propName);
4
+ if (!prop) {
5
+ if (args.required) {
6
+ return new Error(`The prop \`${propName}\` is marked as required in \`${componentName}\`, but its value is \`${typeof prop}\`.`);
7
+ }
8
+ return;
9
+ }
10
+ const className = digg(prop, "constructor", "name");
11
+ if (className != expectedClassName) {
12
+ return new Error(`Invalid prop '${propName}' passed to '${componentName}'. Expected a class name of '${expectedClassName}' but got '${className}'.`);
13
+ }
14
+ };
15
+ const instanceOfClassName = expectedClassName => {
16
+ const validator = propTypesValidator(expectedClassName);
17
+ validator.isRequired = propTypesValidator(expectedClassName, {
18
+ required: true
19
+ });
20
+ return validator;
21
+ };
22
+ export default instanceOfClassName;
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwicHJvcFR5cGVzVmFsaWRhdG9yIiwiZXhwZWN0ZWRDbGFzc05hbWUiLCJhcmdzIiwicHJvcHMiLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJwcm9wIiwicmVxdWlyZWQiLCJFcnJvciIsImNsYXNzTmFtZSIsImluc3RhbmNlT2ZDbGFzc05hbWUiLCJ2YWxpZGF0b3IiLCJpc1JlcXVpcmVkIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luc3RhbmNlLW9mLWNsYXNzLW5hbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcblxuY29uc3QgcHJvcFR5cGVzVmFsaWRhdG9yID0gKGV4cGVjdGVkQ2xhc3NOYW1lLCBhcmdzID0ge30pID0+IChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpID0+IHtcbiAgY29uc3QgcHJvcCA9IGRpZ2cocHJvcHMsIHByb3BOYW1lKVxuXG4gIGlmICghcHJvcCkge1xuICAgIGlmIChhcmdzLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBUaGUgcHJvcCBcXGAke3Byb3BOYW1lfVxcYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gXFxgJHtjb21wb25lbnROYW1lfVxcYCwgYnV0IGl0cyB2YWx1ZSBpcyBcXGAke3R5cGVvZiBwcm9wfVxcYC5gKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gZGlnZyhwcm9wLCBcImNvbnN0cnVjdG9yXCIsIFwibmFtZVwiKVxuXG4gIGlmIChjbGFzc05hbWUgIT0gZXhwZWN0ZWRDbGFzc05hbWUpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBJbnZhbGlkIHByb3AgJyR7cHJvcE5hbWV9JyBwYXNzZWQgdG8gJyR7Y29tcG9uZW50TmFtZX0nLiBFeHBlY3RlZCBhIGNsYXNzIG5hbWUgb2YgJyR7ZXhwZWN0ZWRDbGFzc05hbWV9JyBidXQgZ290ICcke2NsYXNzTmFtZX0nLmApXG4gIH1cbn1cblxuY29uc3QgaW5zdGFuY2VPZkNsYXNzTmFtZSA9IChleHBlY3RlZENsYXNzTmFtZSkgPT4ge1xuICBjb25zdCB2YWxpZGF0b3IgPSBwcm9wVHlwZXNWYWxpZGF0b3IoZXhwZWN0ZWRDbGFzc05hbWUpXG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBwcm9wVHlwZXNWYWxpZGF0b3IoZXhwZWN0ZWRDbGFzc05hbWUsIHtyZXF1aXJlZDogdHJ1ZX0pXG5cbiAgcmV0dXJuIHZhbGlkYXRvclxufVxuXG5leHBvcnQgZGVmYXVsdCBpbnN0YW5jZU9mQ2xhc3NOYW1lXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLElBQUksUUFBTyxXQUFXO0FBRTlCLE1BQU1DLGtCQUFrQixHQUFHQSxDQUFDQyxpQkFBaUIsRUFBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUNDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxhQUFhLEtBQUs7RUFDL0YsTUFBTUMsSUFBSSxHQUFHUCxJQUFJLENBQUNJLEtBQUssRUFBRUMsUUFBUSxDQUFDO0VBRWxDLElBQUksQ0FBQ0UsSUFBSSxFQUFFO0lBQ1QsSUFBSUosSUFBSSxDQUFDSyxRQUFRLEVBQUU7TUFDakIsT0FBTyxJQUFJQyxLQUFLLENBQUMsY0FBY0osUUFBUSxpQ0FBaUNDLGFBQWEsMEJBQTBCLE9BQU9DLElBQUksS0FBSyxDQUFDO0lBQ2xJO0lBRUE7RUFDRjtFQUVBLE1BQU1HLFNBQVMsR0FBR1YsSUFBSSxDQUFDTyxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQztFQUVuRCxJQUFJRyxTQUFTLElBQUlSLGlCQUFpQixFQUFFO0lBQ2xDLE9BQU8sSUFBSU8sS0FBSyxDQUFDLGlCQUFpQkosUUFBUSxnQkFBZ0JDLGFBQWEsZ0NBQWdDSixpQkFBaUIsY0FBY1EsU0FBUyxJQUFJLENBQUM7RUFDdEo7QUFDRixDQUFDO0FBRUQsTUFBTUMsbUJBQW1CLEdBQUlULGlCQUFpQixJQUFLO0VBQ2pELE1BQU1VLFNBQVMsR0FBR1gsa0JBQWtCLENBQUNDLGlCQUFpQixDQUFDO0VBRXZEVSxTQUFTLENBQUNDLFVBQVUsR0FBR1osa0JBQWtCLENBQUNDLGlCQUFpQixFQUFFO0lBQUNNLFFBQVEsRUFBRTtFQUFJLENBQUMsQ0FBQztFQUU5RSxPQUFPSSxTQUFTO0FBQ2xCLENBQUM7QUFFRCxlQUFlRCxtQkFBbUIiLCJpZ25vcmVMaXN0IjpbXX0=