@kaspernj/api-maker 1.0.445 → 1.0.447

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/{.eslintrc.cjs → .eslintrc.js} +4 -0
  2. package/README.md +35 -0
  3. package/android/build.gradle +43 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +50 -0
  6. package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +30 -0
  7. package/build/api.js +120 -0
  8. package/build/attribute-not-loaded-error.js +2 -0
  9. package/build/base-component.js +5 -0
  10. package/build/base-error.js +33 -0
  11. package/build/base-model/attribute.js +25 -0
  12. package/build/base-model/column.js +11 -0
  13. package/build/base-model/reflection.js +14 -0
  14. package/build/base-model/scope.js +11 -0
  15. package/build/base-model.js +828 -0
  16. package/build/bootstrap/attribute-row/index.js +105 -0
  17. package/build/bootstrap/attribute-rows.js +31 -0
  18. package/build/bootstrap/card.js +138 -0
  19. package/build/bootstrap/checkbox.js +97 -0
  20. package/build/bootstrap/checkboxes.js +183 -0
  21. package/build/bootstrap/index.js +2 -0
  22. package/build/bootstrap/input.js +128 -0
  23. package/build/bootstrap/invalid-feedback.js +27 -0
  24. package/build/bootstrap/paginate.js +150 -0
  25. package/build/bootstrap/radio-buttons.js +72 -0
  26. package/build/bootstrap/select.js +88 -0
  27. package/build/bootstrap/sort-link.js +130 -0
  28. package/build/cable-connection-pool.js +128 -0
  29. package/build/cable-subscription-pool.js +207 -0
  30. package/build/cable-subscription.js +21 -0
  31. package/build/cache-key-generator.js +81 -0
  32. package/build/can-can.js +134 -0
  33. package/build/channels-consumer.js +3 -0
  34. package/build/collection-loader.js +48 -0
  35. package/build/collection.js +279 -0
  36. package/build/command-submit-data.js +81 -0
  37. package/build/commands-pool.js +195 -0
  38. package/build/compose.js +9 -0
  39. package/build/config.js +53 -0
  40. package/build/custom-error.js +5 -0
  41. package/build/data-set-to-attributes.js +10 -0
  42. package/build/deserializer.js +56 -0
  43. package/build/destroy-error.js +5 -0
  44. package/build/devise.js +109 -0
  45. package/build/draggable-sort/controller.js +136 -0
  46. package/build/draggable-sort/index.js +114 -0
  47. package/build/draggable-sort/item.js +188 -0
  48. package/build/error-logger.js +101 -0
  49. package/build/error-messages.js +13 -0
  50. package/build/event-connection.js +32 -0
  51. package/build/event-model-class.js +24 -0
  52. package/build/events.js +5 -0
  53. package/build/form.js +83 -0
  54. package/build/index.js +3 -0
  55. package/build/inputs/attachment.js +121 -0
  56. package/build/inputs/auto-submit.js +36 -0
  57. package/build/inputs/checkbox.js +145 -0
  58. package/build/inputs/checkboxes.js +111 -0
  59. package/build/inputs/id-for-component.js +15 -0
  60. package/build/inputs/input-wrapper.js +18 -0
  61. package/build/inputs/input.js +230 -0
  62. package/build/inputs/money.js +179 -0
  63. package/build/inputs/name-for-component.js +13 -0
  64. package/build/inputs/select.js +92 -0
  65. package/build/instance-of-class-name.js +23 -0
  66. package/build/key-value-store.js +53 -0
  67. package/build/link.js +68 -0
  68. package/build/logger.js +30 -0
  69. package/build/modal.js +37 -0
  70. package/build/model-class-require.js +13 -0
  71. package/build/model-events.js +30 -0
  72. package/build/model-name.js +28 -0
  73. package/build/model-prop-type.js +101 -0
  74. package/build/model-recipes-loader.js +32 -0
  75. package/build/model-recipes-model-loader.js +357 -0
  76. package/build/models-response-reader.js +40 -0
  77. package/build/models.js +8 -0
  78. package/build/money-formatter.js +77 -0
  79. package/build/not-loaded-error.js +2 -0
  80. package/build/params.js +60 -0
  81. package/build/preloaded.js +38 -0
  82. package/build/resize-observer.js +11 -0
  83. package/build/result.js +13 -0
  84. package/build/router/route.js +262 -0
  85. package/build/router/switch.js +72 -0
  86. package/build/router.js +57 -0
  87. package/build/routes-native.js +202 -0
  88. package/build/routes.js +50 -0
  89. package/build/run-last.js +35 -0
  90. package/build/serializer.js +63 -0
  91. package/build/services.js +20 -0
  92. package/build/session-status-updater.js +126 -0
  93. package/build/source-maps-loader.js +171 -0
  94. package/build/super-admin/config-reader.js +84 -0
  95. package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
  96. package/build/super-admin/edit-page/edit-attribute-content.js +54 -0
  97. package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
  98. package/build/super-admin/edit-page/edit-attribute.js +76 -0
  99. package/build/super-admin/edit-page.js +120 -0
  100. package/build/super-admin/has-edit-config.js +12 -0
  101. package/build/super-admin/index-page.js +24 -0
  102. package/build/super-admin/index.js +180 -0
  103. package/build/super-admin/layout/header/index.js +151 -0
  104. package/build/super-admin/layout/index.js +109 -0
  105. package/build/super-admin/layout/menu/index.js +93 -0
  106. package/build/super-admin/layout/menu/menu-content.js +40 -0
  107. package/build/super-admin/layout/menu/menu-item.js +83 -0
  108. package/build/super-admin/layout/no-access.js +25 -0
  109. package/build/super-admin/model-class-table.js +61 -0
  110. package/build/super-admin/models.js +8 -0
  111. package/build/super-admin/show-nav.js +49 -0
  112. package/build/super-admin/show-page/belongs-to-attribute-row.js +28 -0
  113. package/build/super-admin/show-page/index.js +141 -0
  114. package/build/super-admin/show-reflection-actions.js +47 -0
  115. package/build/super-admin/show-reflection-link.js +46 -0
  116. package/build/super-admin/show-reflection-page.js +47 -0
  117. package/build/table/column-content.js +112 -0
  118. package/build/table/column-identifier.js +18 -0
  119. package/build/table/column-visible.js +7 -0
  120. package/build/table/components/column.js +20 -0
  121. package/build/table/components/flat-list.js +20 -0
  122. package/build/table/components/header.js +25 -0
  123. package/build/table/components/row.js +25 -0
  124. package/build/table/filters/attribute-element.js +43 -0
  125. package/build/table/filters/filter-form.js +392 -0
  126. package/build/table/filters/filter.js +89 -0
  127. package/build/table/filters/index.js +182 -0
  128. package/build/table/filters/load-search-modal.js +174 -0
  129. package/build/table/filters/reflection-element.js +36 -0
  130. package/build/table/filters/save-search-modal.js +86 -0
  131. package/build/table/filters/scope-element.js +41 -0
  132. package/build/table/header-column-content.js +67 -0
  133. package/build/table/header-column.js +144 -0
  134. package/build/table/header-select.js +104 -0
  135. package/build/table/model-callback-args.js +10 -0
  136. package/build/table/model-column.js +87 -0
  137. package/build/table/model-row.js +179 -0
  138. package/build/table/select-calculator.js +63 -0
  139. package/build/table/settings/column-row.js +97 -0
  140. package/build/table/settings/download-action.js +78 -0
  141. package/build/table/settings/index.js +92 -0
  142. package/build/table/table-settings.js +219 -0
  143. package/build/table/table.js +972 -0
  144. package/build/table/use-sorting.js +34 -0
  145. package/build/table/widths.js +75 -0
  146. package/build/table/worker-plugins-check-all-checkbox.js +125 -0
  147. package/build/table/worker-plugins-checkbox.js +115 -0
  148. package/build/translated-attributes.js +10 -0
  149. package/build/translated-collections.js +11 -0
  150. package/build/updated-attribute.js +76 -0
  151. package/build/url-encode.js +15 -0
  152. package/build/use-breakpoint.js +44 -0
  153. package/build/use-can-can.js +55 -0
  154. package/build/use-collection.js +225 -0
  155. package/build/use-created-event.js +52 -0
  156. package/build/use-current-user.js +73 -0
  157. package/build/use-destroyed-event.js +60 -0
  158. package/build/use-event-emitter.js +13 -0
  159. package/build/use-event-listener.js +16 -0
  160. package/build/use-input.js +140 -0
  161. package/build/use-model-event.js +60 -0
  162. package/build/use-model.js +169 -0
  163. package/build/use-resize-observer.js +23 -0
  164. package/build/use-router.js +102 -0
  165. package/build/use-screen-layout.js +39 -0
  166. package/build/use-updated-event.js +60 -0
  167. package/build/use-validation-errors.js +30 -0
  168. package/build/utils/card.js +51 -0
  169. package/build/utils/checkbox.js +48 -0
  170. package/build/utils/default-style.js +18 -0
  171. package/build/utils/modal.js +61 -0
  172. package/build/utils/text.js +18 -0
  173. package/build/validation-error.js +28 -0
  174. package/build/validation-errors.js +98 -0
  175. package/build/with-collection.js +13 -0
  176. package/build/with-current-user.js +9 -0
  177. package/build/with-model.js +14 -0
  178. package/build/with-router.js +21 -0
  179. package/expo-module.config.json +17 -0
  180. package/ios/ApiMaker.podspec +29 -0
  181. package/ios/ApiMakerModule.swift +48 -0
  182. package/ios/ApiMakerView.swift +38 -0
  183. package/package.json +35 -14
  184. package/src/{api.mjs → api.js} +5 -5
  185. package/src/{base-error.mjs → base-error.js} +1 -1
  186. package/src/base-model/{attribute.mjs → attribute.js} +1 -1
  187. package/src/base-model/{reflection.mjs → reflection.js} +1 -1
  188. package/src/{base-model.mjs → base-model.js} +14 -14
  189. package/src/bootstrap/attribute-row/index.jsx +2 -2
  190. package/src/bootstrap/attribute-rows.jsx +1 -1
  191. package/src/bootstrap/card.jsx +1 -1
  192. package/src/bootstrap/checkbox.jsx +1 -1
  193. package/src/bootstrap/checkboxes.jsx +1 -1
  194. package/src/bootstrap/input.jsx +1 -1
  195. package/src/bootstrap/paginate.jsx +2 -2
  196. package/src/bootstrap/sort-link.jsx +3 -3
  197. package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +3 -3
  198. package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +4 -4
  199. package/src/{cable-subscription.mjs → cable-subscription.js} +1 -1
  200. package/src/{can-can.mjs → can-can.js} +1 -1
  201. package/src/collection-loader.jsx +2 -2
  202. package/src/{collection.mjs → collection.js} +3 -3
  203. package/src/{commands-pool.mjs → commands-pool.js} +11 -11
  204. package/src/{custom-error.mjs → custom-error.js} +1 -1
  205. package/src/{deserializer.mjs → deserializer.js} +2 -2
  206. package/src/{destroy-error.mjs → destroy-error.js} +1 -1
  207. package/src/{devise.mjs → devise.js} +5 -9
  208. package/src/draggable-sort/controller.js +137 -0
  209. package/src/draggable-sort/index.jsx +108 -0
  210. package/src/draggable-sort/item.jsx +174 -0
  211. package/src/{error-logger.mjs → error-logger.js} +1 -1
  212. package/src/event-connection.jsx +1 -1
  213. package/src/event-model-class.jsx +1 -1
  214. package/src/form.jsx +1 -1
  215. package/src/index.js +3 -0
  216. package/src/inputs/attachment.jsx +2 -2
  217. package/src/inputs/checkbox.jsx +7 -6
  218. package/src/inputs/checkboxes.jsx +1 -1
  219. package/src/inputs/input-wrapper.jsx +1 -1
  220. package/src/inputs/input.jsx +8 -7
  221. package/src/inputs/money.jsx +3 -3
  222. package/src/inputs/select.jsx +1 -1
  223. package/src/{key-value-store.mjs → key-value-store.js} +1 -1
  224. package/src/link.jsx +2 -2
  225. package/src/modal.jsx +1 -1
  226. package/src/{model-class-require.mjs → model-class-require.js} +4 -2
  227. package/src/{model-events.mjs → model-events.js} +1 -1
  228. package/src/{model-name.mjs → model-name.js} +1 -1
  229. package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
  230. package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +2 -2
  231. package/src/{models-response-reader.mjs → models-response-reader.js} +2 -2
  232. package/src/models.js +7 -0
  233. package/src/{models.mjs.erb → models.js.erb} +1 -1
  234. package/src/{params.mjs → params.js} +2 -2
  235. package/src/{preloaded.mjs → preloaded.js} +1 -1
  236. package/src/resize-observer.jsx +1 -1
  237. package/src/router/route.jsx +1 -1
  238. package/src/router/switch.jsx +1 -1
  239. package/src/router.jsx +1 -1
  240. package/src/{routes-native.mjs → routes-native.js} +1 -1
  241. package/src/{services.mjs → services.js} +1 -1
  242. package/src/{session-status-updater.mjs → session-status-updater.js} +3 -3
  243. package/src/{source-maps-loader.mjs → source-maps-loader.js} +1 -1
  244. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +1 -1
  245. package/src/super-admin/edit-page/edit-attribute-content.jsx +1 -1
  246. package/src/super-admin/edit-page/edit-attribute-input.jsx +1 -1
  247. package/src/super-admin/edit-page/edit-attribute.jsx +1 -1
  248. package/src/super-admin/edit-page.jsx +2 -2
  249. package/src/super-admin/has-edit-config.js +1 -1
  250. package/src/super-admin/index-page.jsx +1 -1
  251. package/src/super-admin/index.jsx +7 -7
  252. package/src/super-admin/layout/header/index.jsx +2 -2
  253. package/src/super-admin/layout/index.jsx +3 -3
  254. package/src/super-admin/layout/menu/index.jsx +3 -3
  255. package/src/super-admin/layout/menu/menu-content.jsx +2 -2
  256. package/src/super-admin/layout/menu/{menu-item/index.jsx → menu-item.jsx} +5 -6
  257. package/src/super-admin/layout/no-access.jsx +2 -2
  258. package/src/super-admin/model-class-table.jsx +3 -3
  259. package/src/super-admin/models.js +1 -1
  260. package/src/super-admin/show-nav.jsx +2 -2
  261. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +1 -1
  262. package/src/super-admin/show-page/index.jsx +2 -2
  263. package/src/super-admin/show-reflection-actions.jsx +1 -1
  264. package/src/super-admin/show-reflection-link.jsx +1 -1
  265. package/src/super-admin/show-reflection-page.jsx +1 -1
  266. package/src/table/column-content.jsx +1 -1
  267. package/src/table/components/column.jsx +8 -2
  268. package/src/table/components/header.jsx +2 -2
  269. package/src/table/filters/filter-form.jsx +1 -1
  270. package/src/table/filters/index.jsx +5 -3
  271. package/src/table/filters/load-search-modal.jsx +6 -4
  272. package/src/table/filters/save-search-modal.jsx +4 -4
  273. package/src/table/header-column.jsx +59 -79
  274. package/src/table/header-select.jsx +1 -1
  275. package/src/table/model-column.jsx +12 -6
  276. package/src/table/model-row.jsx +11 -7
  277. package/src/table/{select-calculator.mjs → select-calculator.js} +1 -1
  278. package/src/table/settings/column-row.jsx +4 -3
  279. package/src/table/settings/download-action.jsx +3 -3
  280. package/src/table/settings/index.jsx +3 -3
  281. package/src/table/table-settings.js +5 -4
  282. package/src/table/table.jsx +149 -71
  283. package/src/table/{use-sorting.mjs → use-sorting.js} +1 -1
  284. package/src/table/{widths.mjs → widths.jsx} +11 -2
  285. package/src/table/worker-plugins-check-all-checkbox.jsx +2 -2
  286. package/src/table/worker-plugins-checkbox.jsx +2 -2
  287. package/src/{translated-collections.mjs → translated-collections.js} +1 -1
  288. package/src/updated-attribute.jsx +1 -1
  289. package/src/{use-breakpoint.mjs → use-breakpoint.js} +2 -2
  290. package/src/use-can-can.js +55 -0
  291. package/src/{use-collection.mjs → use-collection.js} +4 -4
  292. package/src/{use-created-event.mjs → use-created-event.js} +2 -2
  293. package/src/{use-current-user.mjs → use-current-user.js} +6 -5
  294. package/src/{use-destroyed-event.mjs → use-destroyed-event.js} +2 -2
  295. package/src/{use-input.mjs → use-input.js} +5 -5
  296. package/src/use-model-event.js +2 -2
  297. package/src/{use-model.mjs → use-model.js} +4 -4
  298. package/src/{use-resize-observer.mjs → use-resize-observer.js} +1 -1
  299. package/src/use-router.jsx +2 -2
  300. package/src/{use-updated-event.mjs → use-updated-event.js} +2 -2
  301. package/src/{use-validation-errors.mjs → use-validation-errors.js} +3 -3
  302. package/src/utils/checkbox.jsx +2 -2
  303. package/src/{validation-error.mjs → validation-error.js} +1 -1
  304. package/src/{validation-errors.mjs → validation-errors.js} +1 -1
  305. package/src/with-current-user.jsx +1 -1
  306. package/src/with-model.jsx +1 -1
  307. package/__tests__/base-model.test.mjs +0 -71
  308. package/__tests__/cable-connection-pool.test.mjs +0 -227
  309. package/__tests__/cable-subscription-pool.test.mjs +0 -27
  310. package/__tests__/can-can.test.mjs +0 -34
  311. package/__tests__/collection.test.mjs +0 -51
  312. package/__tests__/custom-error.test.mjs +0 -13
  313. package/__tests__/model-name.test.mjs +0 -34
  314. package/__tests__/model-prop-type.test.mjs +0 -113
  315. package/__tests__/params.test.mjs +0 -40
  316. package/__tests__/routes-native.test.mjs +0 -104
  317. package/__tests__/routes.test.mjs +0 -47
  318. package/__tests__/serializer.test.mjs +0 -30
  319. package/__tests__/support/task.mjs +0 -27
  320. package/__tests__/support/user.mjs +0 -32
  321. package/index.js +0 -1
  322. package/jest.config.js +0 -9
  323. package/src/event-created.jsx +0 -12
  324. package/src/event-destroyed.jsx +0 -25
  325. package/src/event-emitter-listener.jsx +0 -10
  326. package/src/event-listener.jsx +0 -25
  327. package/src/event-updated.jsx +0 -27
  328. package/src/super-admin/layout/menu/menu-item/style.scss +0 -10
  329. package/src/use-can-can.mjs +0 -48
  330. package/src/with-can-can.jsx +0 -12
  331. package/webpack.config.js +0 -15
  332. /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
  333. /package/src/base-model/{column.mjs → column.js} +0 -0
  334. /package/src/base-model/{scope.mjs → scope.js} +0 -0
  335. /package/src/{cache-key-generator.mjs → cache-key-generator.js} +0 -0
  336. /package/src/{channels-consumer.mjs → channels-consumer.js} +0 -0
  337. /package/src/{command-submit-data.mjs → command-submit-data.js} +0 -0
  338. /package/src/{config.mjs → config.js} +0 -0
  339. /package/src/{data-set-to-attributes.mjs → data-set-to-attributes.js} +0 -0
  340. /package/src/{error-messages.mjs → error-messages.js} +0 -0
  341. /package/src/{events.mjs → events.js} +0 -0
  342. /package/src/inputs/{auto-submit.mjs → auto-submit.js} +0 -0
  343. /package/src/inputs/{id-for-component.mjs → id-for-component.js} +0 -0
  344. /package/src/inputs/{name-for-component.mjs → name-for-component.js} +0 -0
  345. /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
  346. /package/src/{logger.mjs → logger.js} +0 -0
  347. /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
  348. /package/src/{money-formatter.mjs → money-formatter.js} +0 -0
  349. /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
  350. /package/src/{result.mjs → result.js} +0 -0
  351. /package/src/{routes.mjs → routes.js} +0 -0
  352. /package/src/{run-last.mjs → run-last.js} +0 -0
  353. /package/src/{serializer.mjs → serializer.js} +0 -0
  354. /package/src/table/{column-identifier.mjs → column-identifier.js} +0 -0
  355. /package/src/table/{column-visible.mjs → column-visible.js} +0 -0
  356. /package/src/table/{model-callback-args.mjs → model-callback-args.js} +0 -0
  357. /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
  358. /package/src/{url-encode.mjs → url-encode.js} +0 -0
  359. /package/src/{use-event-emitter.mjs → use-event-emitter.js} +0 -0
  360. /package/src/{use-event-listener.mjs → use-event-listener.js} +0 -0
  361. /package/src/{use-screen-layout.mjs → use-screen-layout.js} +0 -0
@@ -0,0 +1,15 @@
1
+ import * as inflection from "inflection";
2
+ export default function apiMakerIdForComponent(component) {
3
+ if ("id" in component.props) {
4
+ return component.props.id;
5
+ } else if (component.props.attribute && component.props.model) {
6
+ return `${component.props.model.modelClassData().paramKey}_${inflection.underscore(component.props.attribute)}`;
7
+ } else if (component.generatedInputId) {
8
+ return component.generatedInputId;
9
+ } else {
10
+ const generatedInputId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
11
+ component.generatedInputId = generatedInputId;
12
+ return generatedInputId;
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiYXBpTWFrZXJJZEZvckNvbXBvbmVudCIsImNvbXBvbmVudCIsInByb3BzIiwiaWQiLCJhdHRyaWJ1dGUiLCJtb2RlbCIsIm1vZGVsQ2xhc3NEYXRhIiwicGFyYW1LZXkiLCJ1bmRlcnNjb3JlIiwiZ2VuZXJhdGVkSW5wdXRJZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBpTWFrZXJJZEZvckNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgaWYgKFwiaWRcIiBpbiBjb21wb25lbnQucHJvcHMpIHtcbiAgICByZXR1cm4gY29tcG9uZW50LnByb3BzLmlkXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50LnByb3BzLmF0dHJpYnV0ZSAmJiBjb21wb25lbnQucHJvcHMubW9kZWwpIHtcbiAgICByZXR1cm4gYCR7Y29tcG9uZW50LnByb3BzLm1vZGVsLm1vZGVsQ2xhc3NEYXRhKCkucGFyYW1LZXl9XyR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKGNvbXBvbmVudC5wcm9wcy5hdHRyaWJ1dGUpfWBcbiAgfSBlbHNlIGlmIChjb21wb25lbnQuZ2VuZXJhdGVkSW5wdXRJZCkge1xuICAgIHJldHVybiBjb21wb25lbnQuZ2VuZXJhdGVkSW5wdXRJZFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGdlbmVyYXRlZElucHV0SWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KVxuICAgIGNvbXBvbmVudC5nZW5lcmF0ZWRJbnB1dElkID0gZ2VuZXJhdGVkSW5wdXRJZFxuICAgIHJldHVybiBnZW5lcmF0ZWRJbnB1dElkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLQSxVQUFVLE1BQU0sWUFBWTtBQUV4QyxlQUFlLFNBQVNDLHNCQUFzQkEsQ0FBQ0MsU0FBUyxFQUFFO0VBQ3hELElBQUksSUFBSSxJQUFJQSxTQUFTLENBQUNDLEtBQUssRUFBRTtJQUMzQixPQUFPRCxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsRUFBRTtFQUMzQixDQUFDLE1BQU0sSUFBSUYsU0FBUyxDQUFDQyxLQUFLLENBQUNFLFNBQVMsSUFBSUgsU0FBUyxDQUFDQyxLQUFLLENBQUNHLEtBQUssRUFBRTtJQUM3RCxPQUFPLEdBQUdKLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDRyxLQUFLLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUNDLFFBQVEsSUFBSVIsVUFBVSxDQUFDUyxVQUFVLENBQUNQLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDRSxTQUFTLENBQUMsRUFBRTtFQUNqSCxDQUFDLE1BQU0sSUFBSUgsU0FBUyxDQUFDUSxnQkFBZ0IsRUFBRTtJQUNyQyxPQUFPUixTQUFTLENBQUNRLGdCQUFnQjtFQUNuQyxDQUFDLE1BQU07SUFDTCxNQUFNQSxnQkFBZ0IsR0FBR0MsSUFBSSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUdILElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsSFosU0FBUyxDQUFDUSxnQkFBZ0IsR0FBR0EsZ0JBQWdCO0lBQzdDLE9BQU9BLGdCQUFnQjtFQUN6QjtBQUNGIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,18 @@
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 useInput from "../use-input";
3
+ const inputWrapper = (WrapperComponentClass, wrapperOptions = {}) => props => {
4
+ const {
5
+ inputProps,
6
+ restProps,
7
+ wrapperOpts
8
+ } = useInput({
9
+ props,
10
+ wrapperOptions
11
+ });
12
+ return /*#__PURE__*/React.createElement(WrapperComponentClass, _extends({
13
+ inputProps: inputProps,
14
+ wrapperOpts: wrapperOpts
15
+ }, restProps));
16
+ };
17
+ export default inputWrapper;
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VJbnB1dCIsImlucHV0V3JhcHBlciIsIldyYXBwZXJDb21wb25lbnRDbGFzcyIsIndyYXBwZXJPcHRpb25zIiwicHJvcHMiLCJpbnB1dFByb3BzIiwicmVzdFByb3BzIiwid3JhcHBlck9wdHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnB1dHMvaW5wdXQtd3JhcHBlci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHVzZUlucHV0IGZyb20gXCIuLi91c2UtaW5wdXRcIlxuXG5jb25zdCBpbnB1dFdyYXBwZXIgPSAoV3JhcHBlckNvbXBvbmVudENsYXNzLCB3cmFwcGVyT3B0aW9ucyA9IHt9KSA9PiAocHJvcHMpID0+IHtcbiAgY29uc3Qge2lucHV0UHJvcHMsIHJlc3RQcm9wcywgd3JhcHBlck9wdHN9ID0gdXNlSW5wdXQoe3Byb3BzLCB3cmFwcGVyT3B0aW9uc30pXG5cbiAgcmV0dXJuIChcbiAgICA8V3JhcHBlckNvbXBvbmVudENsYXNzXG4gICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxuICAgICAgd3JhcHBlck9wdHM9e3dyYXBwZXJPcHRzfVxuICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IGlucHV0V3JhcHBlclxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsUUFBUSxNQUFNLGNBQWM7QUFFbkMsTUFBTUMsWUFBWSxHQUFHQSxDQUFDQyxxQkFBcUIsRUFBRUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFNQyxLQUFLLElBQUs7RUFDOUUsTUFBTTtJQUFDQyxVQUFVO0lBQUVDLFNBQVM7SUFBRUM7RUFBVyxDQUFDLEdBQUdQLFFBQVEsQ0FBQztJQUFDSSxLQUFLO0lBQUVEO0VBQWMsQ0FBQyxDQUFDO0VBRTlFLG9CQUNFSyxLQUFBLENBQUFDLGFBQUEsQ0FBQ1AscUJBQXFCLEVBQUFRLFFBQUE7SUFDcEJMLFVBQVUsRUFBRUEsVUFBVztJQUN2QkUsV0FBVyxFQUFFQTtFQUFZLEdBQ3JCRCxTQUFTLENBQ2QsQ0FBQztBQUVOLENBQUM7QUFFRCxlQUFlTCxZQUFZIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,230 @@
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 { 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 useUpdatedEvent from "../use-updated-event";
15
+ const ApiMakerInputsInput = memo(shapeComponent(class ApiMakerInputsInput extends BaseComponent {
16
+ static defaultProps = {
17
+ autoRefresh: false,
18
+ autoSubmit: false,
19
+ model: null,
20
+ localizedNumber: false
21
+ };
22
+ static propTypes = {
23
+ attribute: PropTypes.string,
24
+ autoRefresh: PropTypes.bool.isRequired,
25
+ autoSubmit: PropTypes.bool.isRequired,
26
+ className: PropTypes.string,
27
+ formatValue: PropTypes.func,
28
+ id: PropTypes.string,
29
+ localizedNumber: PropTypes.bool.isRequired,
30
+ model: PropTypes.object,
31
+ name: PropTypes.string,
32
+ onChange: PropTypes.func,
33
+ onMatchValidationError: PropTypes.func,
34
+ type: PropTypes.string
35
+ };
36
+ setup() {
37
+ const {
38
+ autoRefresh,
39
+ inputProps,
40
+ model
41
+ } = this.p;
42
+ const {
43
+ defaultValue,
44
+ name
45
+ } = inputProps;
46
+ this.form = useForm();
47
+ this.visibleInputRef = useRef();
48
+ this.useStates({
49
+ blankInputName: digg(inputProps, "type") == "file"
50
+ });
51
+ useMemo(() => {
52
+ if (name) {
53
+ this.tt.form?.setValue(name, defaultValue);
54
+ }
55
+ }, []);
56
+ useUpdatedEvent(model, this.tt.onModelUpdated, {
57
+ active: Boolean(autoRefresh && model)
58
+ });
59
+ }
60
+ render() {
61
+ const {
62
+ attribute,
63
+ autoRefresh,
64
+ autoSubmit,
65
+ defaultValue,
66
+ formatValue,
67
+ id,
68
+ inputProps,
69
+ inputRef,
70
+ localizedNumber,
71
+ model,
72
+ name,
73
+ onChange,
74
+ onErrors,
75
+ onMatchValidationError,
76
+ type,
77
+ wrapperOpts,
78
+ ...restProps
79
+ } = this.props;
80
+ const sharedProps = {
81
+ id: localizedNumber ? null : inputProps.id,
82
+ name: localizedNumber ? null : inputProps.name
83
+ };
84
+ const ref = localizedNumber ? this.visibleInputRef : this.inputReference();
85
+ const {
86
+ ref: inputPropsRef,
87
+ ...inputPropsWithoutRef
88
+ } = inputProps;
89
+ return /*#__PURE__*/React.createElement(React.Fragment, null, localizedNumber && /*#__PURE__*/React.createElement("input", {
90
+ defaultValue: defaultValue,
91
+ id: inputProps.id,
92
+ name: this.inputName(),
93
+ ref: this.inputReference(),
94
+ type: "hidden"
95
+ }), type == "money" && /*#__PURE__*/React.createElement(Money, _extends({
96
+ attribute: attribute,
97
+ defaultValue: this.inputDefaultValueLocalized(),
98
+ inputRef: this.inputReference(),
99
+ model: model,
100
+ onChange: this.onInputChanged
101
+ }, inputPropsWithoutRef, sharedProps, restProps)), type == "textarea" && /*#__PURE__*/React.createElement("textarea", _extends({
102
+ defaultValue: this.inputDefaultValueLocalized(),
103
+ onChange: this.onInputChanged,
104
+ ref: ref
105
+ }, inputPropsWithoutRef, sharedProps, restProps)), type != "money" && type != "textarea" && /*#__PURE__*/React.createElement("input", _extends({
106
+ defaultValue: this.inputDefaultValueLocalized(),
107
+ onChange: this.onInputChanged,
108
+ ref: ref
109
+ }, inputPropsWithoutRef, sharedProps, {
110
+ name: localizedNumber ? null : this.inputName()
111
+ }, restProps)));
112
+ }
113
+ actualValue(visibleInput) {
114
+ const {
115
+ localizedNumber
116
+ } = digs(this.props, "localizedNumber");
117
+ const value = digg(visibleInput, "value");
118
+ if (localizedNumber) {
119
+ const decimal = I18n.t("number.currency.format.separator");
120
+ const integerSeparator = I18n.t("number.currency.format.delimiter");
121
+ let unformatted = replaceall(integerSeparator, "", value);
122
+ unformatted = replaceall(decimal, ".", unformatted);
123
+ return unformatted;
124
+ }
125
+ return value;
126
+ }
127
+ autoSubmit = () => new AutoSubmit({
128
+ component: this
129
+ }).autoSubmit();
130
+ formatValue(value) {
131
+ const {
132
+ formatValue,
133
+ type
134
+ } = this.props;
135
+ if (formatValue) {
136
+ return formatValue(value);
137
+ } else if (value instanceof Date && !isNaN(value.getTime())) {
138
+ // We need to use a certain format for datetime-local
139
+ if (type == "datetime-local") {
140
+ return strftime("%Y-%m-%dT%H:%M:%S", value);
141
+ } else if (type == "date") {
142
+ return strftime("%Y-%m-%d", value);
143
+ }
144
+ }
145
+ return value;
146
+ }
147
+ inputDefaultValueLocalized() {
148
+ const {
149
+ defaultValue
150
+ } = this.props;
151
+ const {
152
+ localizedNumber
153
+ } = digs(this.props, "localizedNumber");
154
+ if (localizedNumber && defaultValue !== null && defaultValue !== undefined) {
155
+ const separator = I18n.t("number.currency.format.separator");
156
+ const delimiter = I18n.t("number.currency.format.delimiter");
157
+ let formatted = `${defaultValue}`;
158
+ formatted = replaceall(".", "{{separator}}", formatted);
159
+ formatted = replaceall(",", "{{delimiter}}", formatted);
160
+ formatted = replaceall("{{separator}}", separator, formatted);
161
+ formatted = replaceall("{{delimiter}}", delimiter, formatted);
162
+ return formatted;
163
+ }
164
+ return defaultValue;
165
+ }
166
+ inputName() {
167
+ if (this.state.blankInputName) return "";
168
+ return this.props.inputProps.name;
169
+ }
170
+ inputReference = () => digg(this, "props", "inputProps", "ref");
171
+ onModelUpdated = args => {
172
+ const inputRef = this.inputReference();
173
+ if (!inputRef.current) {
174
+ // This can happen if the component is being unmounted
175
+ return;
176
+ }
177
+ const {
178
+ attribute
179
+ } = digs(this.props, "attribute");
180
+ const newModel = digg(args, "model");
181
+ const currentValue = digg(inputRef, "current", "value");
182
+ const newValue = newModel.readAttribute(attribute);
183
+ const newFormattedValue = this.formatValue(newValue);
184
+ if (currentValue != newFormattedValue) {
185
+ inputRef.current.value = newFormattedValue;
186
+ }
187
+ };
188
+ onInputChanged = e => {
189
+ const {
190
+ form
191
+ } = this.tt;
192
+ const {
193
+ attribute,
194
+ autoSubmit,
195
+ inputProps,
196
+ model,
197
+ onChange
198
+ } = this.props;
199
+ const {
200
+ localizedNumber
201
+ } = digs(this.props, "localizedNumber");
202
+ const {
203
+ name
204
+ } = inputProps;
205
+ if (localizedNumber) this.inputReference().current.value = this.actualValue(digg(e, "target"));
206
+ if (attribute && autoSubmit && model) this.delayAutoSubmit();
207
+ if (digg(inputProps, "type") == "file") this.setState({
208
+ blankInputName: this.getBlankInputName()
209
+ });
210
+ if (form && name) {
211
+ form.setValue(name, e.target.value);
212
+ }
213
+ if (onChange) onChange(e);
214
+ };
215
+ delayAutoSubmit() {
216
+ if (this.delayAutoSubmitTimeout) {
217
+ clearTimeout(this.delayAutoSubmitTimeout);
218
+ }
219
+ this.delayAutoSubmitTimeout = setTimeout(this.autoSubmit, 200);
220
+ }
221
+
222
+ // This fixes an issue in Firefox and ActiveStorage, where uploads would be a blank string if a file wasn't chosen
223
+ getBlankInputName() {
224
+ const value = dig(this.inputReference(), "current", "value");
225
+ if (this.props.inputProps.type == "file" && value == "") return true;
226
+ }
227
+ }));
228
+ export { ApiMakerInputsInput as Input };
229
+ export default inputWrapper(ApiMakerInputsInput);
230
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRvU3VibWl0IiwiQmFzZUNvbXBvbmVudCIsImRpZyIsImRpZ2ciLCJkaWdzIiwiaW5wdXRXcmFwcGVyIiwibWVtbyIsIk1vbmV5IiwiUHJvcFR5cGVzIiwidXNlTWVtbyIsInVzZVJlZiIsInJlcGxhY2VhbGwiLCJzaGFwZUNvbXBvbmVudCIsInN0cmZ0aW1lIiwidXNlRm9ybSIsInVzZVVwZGF0ZWRFdmVudCIsIkFwaU1ha2VySW5wdXRzSW5wdXQiLCJkZWZhdWx0UHJvcHMiLCJhdXRvUmVmcmVzaCIsImF1dG9TdWJtaXQiLCJtb2RlbCIsImxvY2FsaXplZE51bWJlciIsInByb3BUeXBlcyIsImF0dHJpYnV0ZSIsInN0cmluZyIsImJvb2wiLCJpc1JlcXVpcmVkIiwiY2xhc3NOYW1lIiwiZm9ybWF0VmFsdWUiLCJmdW5jIiwiaWQiLCJvYmplY3QiLCJuYW1lIiwib25DaGFuZ2UiLCJvbk1hdGNoVmFsaWRhdGlvbkVycm9yIiwidHlwZSIsInNldHVwIiwiaW5wdXRQcm9wcyIsInAiLCJkZWZhdWx0VmFsdWUiLCJmb3JtIiwidmlzaWJsZUlucHV0UmVmIiwidXNlU3RhdGVzIiwiYmxhbmtJbnB1dE5hbWUiLCJ0dCIsInNldFZhbHVlIiwib25Nb2RlbFVwZGF0ZWQiLCJhY3RpdmUiLCJCb29sZWFuIiwicmVuZGVyIiwiaW5wdXRSZWYiLCJvbkVycm9ycyIsIndyYXBwZXJPcHRzIiwicmVzdFByb3BzIiwicHJvcHMiLCJzaGFyZWRQcm9wcyIsInJlZiIsImlucHV0UmVmZXJlbmNlIiwiaW5wdXRQcm9wc1JlZiIsImlucHV0UHJvcHNXaXRob3V0UmVmIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJpbnB1dE5hbWUiLCJfZXh0ZW5kcyIsImlucHV0RGVmYXVsdFZhbHVlTG9jYWxpemVkIiwib25JbnB1dENoYW5nZWQiLCJhY3R1YWxWYWx1ZSIsInZpc2libGVJbnB1dCIsInZhbHVlIiwiZGVjaW1hbCIsIkkxOG4iLCJ0IiwiaW50ZWdlclNlcGFyYXRvciIsInVuZm9ybWF0dGVkIiwiY29tcG9uZW50IiwiRGF0ZSIsImlzTmFOIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsInNlcGFyYXRvciIsImRlbGltaXRlciIsImZvcm1hdHRlZCIsInN0YXRlIiwiYXJncyIsImN1cnJlbnQiLCJuZXdNb2RlbCIsImN1cnJlbnRWYWx1ZSIsIm5ld1ZhbHVlIiwicmVhZEF0dHJpYnV0ZSIsIm5ld0Zvcm1hdHRlZFZhbHVlIiwiZSIsImRlbGF5QXV0b1N1Ym1pdCIsInNldFN0YXRlIiwiZ2V0QmxhbmtJbnB1dE5hbWUiLCJ0YXJnZXQiLCJkZWxheUF1dG9TdWJtaXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIklucHV0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0cy9pbnB1dC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1dG9TdWJtaXQgZnJvbSBcIi4vYXV0by1zdWJtaXRcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCB7ZGlnLCBkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBpbnB1dFdyYXBwZXIgZnJvbSBcIi4vaW5wdXQtd3JhcHBlclwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IE1vbmV5IGZyb20gXCIuL21vbmV5XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHt1c2VNZW1vLCB1c2VSZWZ9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgcmVwbGFjZWFsbCBmcm9tIFwicmVwbGFjZWFsbFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3NoYXBlLWNvbXBvbmVudFwiXG5pbXBvcnQgc3RyZnRpbWUgZnJvbSBcInN0cmZ0aW1lXCJcbmltcG9ydCB7dXNlRm9ybX0gZnJvbSBcIi4uL2Zvcm1cIlxuaW1wb3J0IHVzZVVwZGF0ZWRFdmVudCBmcm9tIFwiLi4vdXNlLXVwZGF0ZWQtZXZlbnRcIlxuXG5jb25zdCBBcGlNYWtlcklucHV0c0lucHV0ID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBBcGlNYWtlcklucHV0c0lucHV0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYXV0b1JlZnJlc2g6IGZhbHNlLFxuICAgIGF1dG9TdWJtaXQ6IGZhbHNlLFxuICAgIG1vZGVsOiBudWxsLFxuICAgIGxvY2FsaXplZE51bWJlcjogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGF1dG9SZWZyZXNoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGF1dG9TdWJtaXQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvcm1hdFZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsb2NhbGl6ZWROdW1iZXI6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25NYXRjaFZhbGlkYXRpb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9XG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge2F1dG9SZWZyZXNoLCBpbnB1dFByb3BzLCBtb2RlbH0gPSB0aGlzLnBcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBuYW1lfSA9IGlucHV0UHJvcHNcblxuICAgIHRoaXMuZm9ybSA9IHVzZUZvcm0oKVxuICAgIHRoaXMudmlzaWJsZUlucHV0UmVmID0gdXNlUmVmKClcblxuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGJsYW5rSW5wdXROYW1lOiBkaWdnKGlucHV0UHJvcHMsIFwidHlwZVwiKSA9PSBcImZpbGVcIlxuICAgIH0pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHRoaXMudHQuZm9ybT8uc2V0VmFsdWUobmFtZSwgZGVmYXVsdFZhbHVlKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCB0aGlzLnR0Lm9uTW9kZWxVcGRhdGVkLCB7YWN0aXZlOiBCb29sZWFuKGF1dG9SZWZyZXNoICYmIG1vZGVsKX0pXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZSxcbiAgICAgIGF1dG9SZWZyZXNoLFxuICAgICAgYXV0b1N1Ym1pdCxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGZvcm1hdFZhbHVlLFxuICAgICAgaWQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBsb2NhbGl6ZWROdW1iZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIG5hbWUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRXJyb3JzLFxuICAgICAgb25NYXRjaFZhbGlkYXRpb25FcnJvcixcbiAgICAgIHR5cGUsXG4gICAgICB3cmFwcGVyT3B0cyxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBjb25zdCBzaGFyZWRQcm9wcyA9IHtcbiAgICAgIGlkOiBsb2NhbGl6ZWROdW1iZXIgPyBudWxsIDogaW5wdXRQcm9wcy5pZCxcbiAgICAgIG5hbWU6IGxvY2FsaXplZE51bWJlciA/IG51bGwgOiBpbnB1dFByb3BzLm5hbWUsXG4gICAgfVxuICAgIGNvbnN0IHJlZiA9IGxvY2FsaXplZE51bWJlciA/IHRoaXMudmlzaWJsZUlucHV0UmVmIDogdGhpcy5pbnB1dFJlZmVyZW5jZSgpXG4gICAgY29uc3Qge3JlZjogaW5wdXRQcm9wc1JlZiwgLi4uaW5wdXRQcm9wc1dpdGhvdXRSZWZ9ID0gaW5wdXRQcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtsb2NhbGl6ZWROdW1iZXIgJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICAgICAgaWQ9e2lucHV0UHJvcHMuaWR9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLmlucHV0TmFtZSgpfVxuICAgICAgICAgICAgcmVmPXt0aGlzLmlucHV0UmVmZXJlbmNlKCl9XG4gICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHt0eXBlID09IFwibW9uZXlcIiAmJlxuICAgICAgICAgIDxNb25leVxuICAgICAgICAgICAgYXR0cmlidXRlPXthdHRyaWJ1dGV9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuaW5wdXREZWZhdWx0VmFsdWVMb2NhbGl6ZWQoKX1cbiAgICAgICAgICAgIGlucHV0UmVmPXt0aGlzLmlucHV0UmVmZXJlbmNlKCl9XG4gICAgICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbklucHV0Q2hhbmdlZH1cbiAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzV2l0aG91dFJlZn1cbiAgICAgICAgICAgIHsuLi5zaGFyZWRQcm9wc31cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dHlwZSA9PSBcInRleHRhcmVhXCIgJiZcbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5pbnB1dERlZmF1bHRWYWx1ZUxvY2FsaXplZCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25JbnB1dENoYW5nZWR9XG4gICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzV2l0aG91dFJlZn1cbiAgICAgICAgICAgIHsuLi5zaGFyZWRQcm9wc31cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dHlwZSAhPSBcIm1vbmV5XCIgJiYgdHlwZSAhPSBcInRleHRhcmVhXCIgJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5pbnB1dERlZmF1bHRWYWx1ZUxvY2FsaXplZCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25JbnB1dENoYW5nZWR9XG4gICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzV2l0aG91dFJlZn1cbiAgICAgICAgICAgIHsuLi5zaGFyZWRQcm9wc31cbiAgICAgICAgICAgIG5hbWU9e2xvY2FsaXplZE51bWJlciA/IG51bGwgOiB0aGlzLmlucHV0TmFtZSgpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICBhY3R1YWxWYWx1ZSAodmlzaWJsZUlucHV0KSB7XG4gICAgY29uc3Qge2xvY2FsaXplZE51bWJlcn0gPSBkaWdzKHRoaXMucHJvcHMsIFwibG9jYWxpemVkTnVtYmVyXCIpXG4gICAgY29uc3QgdmFsdWUgPSBkaWdnKHZpc2libGVJbnB1dCwgXCJ2YWx1ZVwiKVxuXG4gICAgaWYgKGxvY2FsaXplZE51bWJlcikge1xuICAgICAgY29uc3QgZGVjaW1hbCA9IEkxOG4udChcIm51bWJlci5jdXJyZW5jeS5mb3JtYXQuc2VwYXJhdG9yXCIpXG4gICAgICBjb25zdCBpbnRlZ2VyU2VwYXJhdG9yID0gSTE4bi50KFwibnVtYmVyLmN1cnJlbmN5LmZvcm1hdC5kZWxpbWl0ZXJcIilcblxuICAgICAgbGV0IHVuZm9ybWF0dGVkID0gcmVwbGFjZWFsbChpbnRlZ2VyU2VwYXJhdG9yLCBcIlwiLCB2YWx1ZSlcblxuICAgICAgdW5mb3JtYXR0ZWQgPSByZXBsYWNlYWxsKGRlY2ltYWwsIFwiLlwiLCB1bmZvcm1hdHRlZClcblxuICAgICAgcmV0dXJuIHVuZm9ybWF0dGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBhdXRvU3VibWl0ID0gKCkgPT4gbmV3IEF1dG9TdWJtaXQoe2NvbXBvbmVudDogdGhpc30pLmF1dG9TdWJtaXQoKVxuXG4gIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xuICAgIGNvbnN0IHtmb3JtYXRWYWx1ZSwgdHlwZX0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZm9ybWF0VmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRWYWx1ZSh2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgLy8gV2UgbmVlZCB0byB1c2UgYSBjZXJ0YWluIGZvcm1hdCBmb3IgZGF0ZXRpbWUtbG9jYWxcbiAgICAgIGlmICh0eXBlID09IFwiZGF0ZXRpbWUtbG9jYWxcIikge1xuICAgICAgICByZXR1cm4gc3RyZnRpbWUoXCIlWS0lbS0lZFQlSDolTTolU1wiLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImRhdGVcIikge1xuICAgICAgICByZXR1cm4gc3RyZnRpbWUoXCIlWS0lbS0lZFwiLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGlucHV0RGVmYXVsdFZhbHVlTG9jYWxpemVkICgpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bG9jYWxpemVkTnVtYmVyfSA9IGRpZ3ModGhpcy5wcm9wcywgXCJsb2NhbGl6ZWROdW1iZXJcIilcblxuICAgIGlmIChsb2NhbGl6ZWROdW1iZXIgJiYgZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBJMThuLnQoXCJudW1iZXIuY3VycmVuY3kuZm9ybWF0LnNlcGFyYXRvclwiKVxuICAgICAgY29uc3QgZGVsaW1pdGVyID0gSTE4bi50KFwibnVtYmVyLmN1cnJlbmN5LmZvcm1hdC5kZWxpbWl0ZXJcIilcblxuICAgICAgbGV0IGZvcm1hdHRlZCA9IGAke2RlZmF1bHRWYWx1ZX1gXG5cbiAgICAgIGZvcm1hdHRlZCA9IHJlcGxhY2VhbGwoXCIuXCIsIFwie3tzZXBhcmF0b3J9fVwiLCBmb3JtYXR0ZWQpXG4gICAgICBmb3JtYXR0ZWQgPSByZXBsYWNlYWxsKFwiLFwiLCBcInt7ZGVsaW1pdGVyfX1cIiwgZm9ybWF0dGVkKVxuICAgICAgZm9ybWF0dGVkID0gcmVwbGFjZWFsbChcInt7c2VwYXJhdG9yfX1cIiwgc2VwYXJhdG9yLCBmb3JtYXR0ZWQpXG4gICAgICBmb3JtYXR0ZWQgPSByZXBsYWNlYWxsKFwie3tkZWxpbWl0ZXJ9fVwiLCBkZWxpbWl0ZXIsIGZvcm1hdHRlZClcblxuICAgICAgcmV0dXJuIGZvcm1hdHRlZFxuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgfVxuXG4gIGlucHV0TmFtZSAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuYmxhbmtJbnB1dE5hbWUpIHJldHVybiBcIlwiXG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dFByb3BzLm5hbWVcbiAgfVxuXG4gIGlucHV0UmVmZXJlbmNlID0gKCkgPT4gZGlnZyh0aGlzLCBcInByb3BzXCIsIFwiaW5wdXRQcm9wc1wiLCBcInJlZlwiKVxuXG4gIG9uTW9kZWxVcGRhdGVkID0gKGFyZ3MpID0+IHtcbiAgICBjb25zdCBpbnB1dFJlZiA9IHRoaXMuaW5wdXRSZWZlcmVuY2UoKVxuXG4gICAgaWYgKCFpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGNvbXBvbmVudCBpcyBiZWluZyB1bm1vdW50ZWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHthdHRyaWJ1dGV9ID0gZGlncyh0aGlzLnByb3BzLCBcImF0dHJpYnV0ZVwiKVxuICAgIGNvbnN0IG5ld01vZGVsID0gZGlnZyhhcmdzLCBcIm1vZGVsXCIpXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gZGlnZyhpbnB1dFJlZiwgXCJjdXJyZW50XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld01vZGVsLnJlYWRBdHRyaWJ1dGUoYXR0cmlidXRlKVxuICAgIGNvbnN0IG5ld0Zvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShuZXdWYWx1ZSlcblxuICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbmV3Rm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSBuZXdGb3JtYXR0ZWRWYWx1ZVxuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2VkID0gKGUpID0+IHtcbiAgICBjb25zdCB7Zm9ybX0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgYXV0b1N1Ym1pdCwgaW5wdXRQcm9wcywgbW9kZWwsIG9uQ2hhbmdlfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bG9jYWxpemVkTnVtYmVyfSA9IGRpZ3ModGhpcy5wcm9wcywgXCJsb2NhbGl6ZWROdW1iZXJcIilcbiAgICBjb25zdCB7bmFtZX0gPSBpbnB1dFByb3BzXG5cbiAgICBpZiAobG9jYWxpemVkTnVtYmVyKSB0aGlzLmlucHV0UmVmZXJlbmNlKCkuY3VycmVudC52YWx1ZSA9IHRoaXMuYWN0dWFsVmFsdWUoZGlnZyhlLCBcInRhcmdldFwiKSlcblxuICAgIGlmIChhdHRyaWJ1dGUgJiYgYXV0b1N1Ym1pdCAmJiBtb2RlbCkgdGhpcy5kZWxheUF1dG9TdWJtaXQoKVxuICAgIGlmIChkaWdnKGlucHV0UHJvcHMsIFwidHlwZVwiKSA9PSBcImZpbGVcIikgdGhpcy5zZXRTdGF0ZSh7YmxhbmtJbnB1dE5hbWU6IHRoaXMuZ2V0QmxhbmtJbnB1dE5hbWUoKX0pXG5cbiAgICBpZiAoZm9ybSAmJiBuYW1lKSB7XG4gICAgICBmb3JtLnNldFZhbHVlKG5hbWUsIGUudGFyZ2V0LnZhbHVlKVxuICAgIH1cblxuICAgIGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZSlcbiAgfVxuXG4gIGRlbGF5QXV0b1N1Ym1pdCAoKSB7XG4gICAgaWYgKHRoaXMuZGVsYXlBdXRvU3VibWl0VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlBdXRvU3VibWl0VGltZW91dClcbiAgICB9XG5cbiAgICB0aGlzLmRlbGF5QXV0b1N1Ym1pdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuYXV0b1N1Ym1pdCwgMjAwKVxuICB9XG5cbiAgLy8gVGhpcyBmaXhlcyBhbiBpc3N1ZSBpbiBGaXJlZm94IGFuZCBBY3RpdmVTdG9yYWdlLCB3aGVyZSB1cGxvYWRzIHdvdWxkIGJlIGEgYmxhbmsgc3RyaW5nIGlmIGEgZmlsZSB3YXNuJ3QgY2hvc2VuXG4gIGdldEJsYW5rSW5wdXROYW1lICgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRpZyh0aGlzLmlucHV0UmVmZXJlbmNlKCksIFwiY3VycmVudFwiLCBcInZhbHVlXCIpXG5cbiAgICBpZiAodGhpcy5wcm9wcy5pbnB1dFByb3BzLnR5cGUgPT0gXCJmaWxlXCIgJiYgdmFsdWUgPT0gXCJcIilcbiAgICAgIHJldHVybiB0cnVlXG4gIH1cbn0pKVxuXG5leHBvcnQge0FwaU1ha2VySW5wdXRzSW5wdXQgYXMgSW5wdXR9XG5leHBvcnQgZGVmYXVsdCBpbnB1dFdyYXBwZXIoQXBpTWFrZXJJbnB1dHNJbnB1dClcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLFVBQVUsTUFBTSxlQUFlO0FBQ3RDLE9BQU9DLGFBQWEsTUFBTSxtQkFBbUI7QUFDN0MsU0FBUUMsR0FBRyxFQUFF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
@@ -0,0 +1,179 @@
1
+ import classNames from "classnames";
2
+ import Config from "../config";
3
+ import { digg } from "diggerize";
4
+ import idForComponent from "./id-for-component";
5
+ import * as inflection from "inflection";
6
+ import memo from "set-state-compare/src/memo";
7
+ import MoneyFormatter from "../money-formatter";
8
+ import PropTypes from "prop-types";
9
+ import PropTypesExact from "prop-types-exact";
10
+ import { useRef } from "react";
11
+ import { shapeComponent, ShapeComponent } from "set-state-compare/src/shape-component";
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiQ29uZmlnIiwiZGlnZyIsImlkRm9yQ29tcG9uZW50IiwiaW5mbGVjdGlvbiIsIm1lbW8iLCJNb25leUZvcm1hdHRlciIsIlByb3BUeXBlcyIsIlByb3BUeXBlc0V4YWN0IiwidXNlUmVmIiwic2hhcGVDb21wb25lbnQiLCJTaGFwZUNvbXBvbmVudCIsIkFwaU1ha2VySW5wdXRzTW9uZXkiLCJkZWZhdWx0UHJvcHMiLCJkaXNhYmxlZCIsInNob3dDdXJyZW5jeU9wdGlvbnMiLCJwcm9wVHlwZXMiLCJhdHRyaWJ1dGUiLCJzdHJpbmciLCJjZW50c0lucHV0TmFtZSIsImNsYXNzTmFtZSIsImN1cnJlbmNpZXNDb2xsZWN0aW9uIiwiYXJyYXkiLCJjdXJyZW5jeU5hbWUiLCJjdXJyZW5jeVJlZiIsIm9iamVjdCIsImRlZmF1bHRWYWx1ZSIsImJvb2wiLCJpc1JlcXVpcmVkIiwiaWQiLCJpbnB1dFJlZiIsImxhYmVsIiwibm9kZSIsIm1vZGVsIiwibmFtZSIsIm9uQ2hhbmdlIiwiZnVuYyIsInBsYWNlaG9sZGVyIiwic21hbGwiLCJ0eXBlIiwid2hvbGVSZWYiLCJzZXR1cCIsImN1cnJlbmN5UmVmQmFja3VwIiwicHJvcHMiLCJ3aG9sZVJlZkJhY2t1cCIsImdldElucHV0UmVmIiwicmVuZGVyIiwiZ2V0Q3VycmVuY2llc0NvbGxlY3Rpb24iLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJpbnB1dERlZmF1bHRDZW50c1ZhbHVlIiwiaW5wdXRDZW50c0lkIiwiaW5wdXRDZW50c05hbWUiLCJyZWYiLCJpbnB1dERlZmF1bHRWYWx1ZSIsImlucHV0SWQiLCJvbkJsdXIiLCJvbktleVVwIiwiaW5wdXRDdXJyZW5jeVZhbHVlIiwiaW5wdXRDdXJyZW5jeUlkIiwiaW5wdXRDdXJyZW5jeU5hbWUiLCJtYXAiLCJvcHRpb24iLCJrZXkiLCJ2YWx1ZSIsIm1vZGVsQ2xhc3NEYXRhIiwicGFyYW1LZXkiLCJ1bmRlcnNjb3JlIiwiY3VycmVuY3lGcm9tTW9uZXkiLCJjb2RlIiwiZnJvbU1vbmV5IiwiYW1vdW50IiwiY3VycmVuY3kiLCJkZWNpbWFscyIsImV4Y2x1ZGVDdXJyZW5jeSIsInRvU3RyaW5nIiwiY3VycmVudCIsImFtb3VudEZyb21Nb25leSIsIm9uQ3VycmVuY3lDaGFuZ2VkIiwic2V0QW1vdW50IiwiaW5wdXRFbGVtZW50IiwiY2VudHMiLCJwYXJzZUZsb2F0IiwiZm9ybWF0dGVkIiwic2V0Q2VudHMiLCJ3aG9sZSIsInN0cmluZ1RvRmxvYXQiLCJwYXJzZUludCIsIm9sZENlbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0cy9tb25leS5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vY29uZmlnXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgaWRGb3JDb21wb25lbnQgZnJvbSBcIi4vaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvbWVtb1wiXG5pbXBvcnQgTW9uZXlGb3JtYXR0ZXIgZnJvbSBcIi4uL21vbmV5LWZvcm1hdHRlclwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQge3VzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3NoYXBlLWNvbXBvbmVudFwiXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJJbnB1dHNNb25leSBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0N1cnJlbmN5T3B0aW9uczogdHJ1ZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IFByb3BUeXBlc0V4YWN0KHtcbiAgICBhdHRyaWJ1dGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2VudHNJbnB1dE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGN1cnJlbmNpZXNDb2xsZWN0aW9uOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgY3VycmVuY3lOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGN1cnJlbmN5UmVmOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpbnB1dFJlZjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIHNob3dDdXJyZW5jeU9wdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICAgIHNtYWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHdob2xlUmVmOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pXG5cbiAgc2V0dXAoKSB7XG4gICAgdGhpcy5pbnB1dFJlZiA9IHVzZVJlZigpXG4gICAgdGhpcy5jdXJyZW5jeVJlZkJhY2t1cCA9IHVzZVJlZigpXG4gICAgdGhpcy5jdXJyZW5jeVJlZiA9IHRoaXMucHJvcHMuY3VycmVuY3lSZWYgfHwgdGhpcy5jdXJyZW5jeVJlZkJhY2t1cFxuICAgIHRoaXMud2hvbGVSZWZCYWNrdXAgPSB1c2VSZWYoKVxuICAgIHRoaXMud2hvbGVSZWYgPSB0aGlzLnByb3BzLndob2xlUmVmIHx8IHRoaXMud2hvbGVSZWZCYWNrdXBcbiAgfVxuXG4gIGdldElucHV0UmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dFJlZiB8fCB0aGlzLmlucHV0UmVmXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGNsYXNzTmFtZSwgZGlzYWJsZWQsIG1vZGVsLCBzaG93Q3VycmVuY3lPcHRpb25zfSA9IHRoaXMucHJvcHNcbiAgICBsZXQge2N1cnJlbmNpZXNDb2xsZWN0aW9ufSA9IHRoaXMucHJvcHNcblxuICAgIGlmICghY3VycmVuY2llc0NvbGxlY3Rpb24pIGN1cnJlbmNpZXNDb2xsZWN0aW9uID0gQ29uZmlnLmdldEN1cnJlbmNpZXNDb2xsZWN0aW9uKClcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwaS1tYWtlci1pbnB1dHMtbW9uZXlcIiBkYXRhLWF0dHJpYnV0ZT17YXR0cmlidXRlfSBkYXRhLW1vZGVsLWlkPXttb2RlbD8uaWQoKX0+XG4gICAgICAgIDxpbnB1dCBkZWZhdWx0VmFsdWU9e3RoaXMuaW5wdXREZWZhdWx0Q2VudHNWYWx1ZSgpfSBpZD17dGhpcy5pbnB1dENlbnRzSWQoKX0gbmFtZT17dGhpcy5pbnB1dENlbnRzTmFtZSgpfSByZWY9e3RoaXMuZ2V0SW5wdXRSZWYoKX0gdHlwZT1cImhpZGRlblwiIC8+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcIm1vbmV5LWNlbnRzXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmlucHV0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIGlkPXt0aGlzLmlucHV0SWQoKX1cbiAgICAgICAgICBvbkJsdXI9e2RpZ2codGhpcywgXCJzZXRBbW91bnRcIil9XG4gICAgICAgICAgb25DaGFuZ2U9e2RpZ2codGhpcywgXCJzZXRDZW50c1wiKX1cbiAgICAgICAgICBvbktleVVwPXtkaWdnKHRoaXMsIFwic2V0Q2VudHNcIil9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgcmVmPXt0aGlzLndob2xlUmVmfVxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgLz5cbiAgICAgICAge3Nob3dDdXJyZW5jeU9wdGlvbnMgJiZcbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJtb25leS1jdXJyZW5jeVwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuaW5wdXRDdXJyZW5jeVZhbHVlKCl9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBpZD17dGhpcy5pbnB1dEN1cnJlbmN5SWQoKX1cbiAgICAgICAgICAgIG5hbWU9e3RoaXMuaW5wdXRDdXJyZW5jeU5hbWUoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtkaWdnKHRoaXMsIFwib25DdXJyZW5jeUNoYW5nZWRcIil9XG4gICAgICAgICAgICByZWY9e3RoaXMuY3VycmVuY3lSZWZ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbj48L29wdGlvbj5cbiAgICAgICAgICAgIHtjdXJyZW5jaWVzQ29sbGVjdGlvbi5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICA8b3B0aW9uIGtleT17YHNlbGVjdC1vcHRpb24tJHtvcHRpb25bMV19YH0gdmFsdWU9e29wdGlvblsxXX0+XG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc21hbGwgJiYgb3B0aW9uWzFdfVxuICAgICAgICAgICAgICAgIHshdGhpcy5wcm9wcy5zbWFsbCAmJiBvcHRpb25bMF19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIGlucHV0Q3VycmVuY3lJZCAoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuaW5wdXRJZCgpfV9jdXJyZW5jeWBcbiAgfVxuXG4gIGlucHV0Q3VycmVuY3lOYW1lICgpIHtcbiAgICBpZiAoXCJjdXJyZW5jeU5hbWVcIiBpbiB0aGlzLnByb3BzKVxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY3VycmVuY3lOYW1lXG5cbiAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5tb2RlbC5tb2RlbENsYXNzRGF0YSgpLnBhcmFtS2V5fVske2luZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLnByb3BzLmF0dHJpYnV0ZSl9X2N1cnJlbmN5XWBcbiAgfVxuXG4gIGlucHV0Q3VycmVuY3lWYWx1ZSAoKSB7XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZX0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gTW9uZXlGb3JtYXR0ZXIuY3VycmVuY3lGcm9tTW9uZXkoZGVmYXVsdFZhbHVlKS5jb2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIkRLS1wiXG4gICAgfVxuICB9XG5cbiAgaW5wdXREZWZhdWx0VmFsdWUgKCkge1xuICAgIGNvbnN0IHtkZWZhdWx0VmFsdWV9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIE1vbmV5Rm9ybWF0dGVyLmZyb21Nb25leSh7YW1vdW50OiBkZWZhdWx0VmFsdWUuYW1vdW50LCBjdXJyZW5jeTogdGhpcy5pbnB1dEN1cnJlbmN5VmFsdWUoKX0sIHtkZWNpbWFsczogMiwgZXhjbHVkZUN1cnJlbmN5OiB0cnVlfSkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIlxuICAgIH1cbiAgfVxuXG4gIGlucHV0RGVmYXVsdENlbnRzVmFsdWUgKCkge1xuICAgIGNvbnN0IHtkZWZhdWx0VmFsdWV9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKHRoaXMuZ2V0SW5wdXRSZWYoKS5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gZGlnZyh0aGlzLmdldElucHV0UmVmKCksIFwiY3VycmVudFwiLCBcInZhbHVlXCIpXG4gICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBNb25leUZvcm1hdHRlci5hbW91bnRGcm9tTW9uZXkoZGVmYXVsdFZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2VudHNJZCAoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuaW5wdXRJZCgpfV9jZW50c2BcbiAgfVxuXG4gIGlucHV0Q2VudHNOYW1lICgpIHtcbiAgICBpZiAoXCJuYW1lXCIgaW4gdGhpcy5wcm9wcylcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm5hbWVcblxuICAgIHJldHVybiBgJHt0aGlzLnByb3BzLm1vZGVsLm1vZGVsQ2xhc3NEYXRhKCkucGFyYW1LZXl9WyR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHRoaXMucHJvcHMuYXR0cmlidXRlKX1fY2VudHNdYFxuICB9XG5cbiAgaW5wdXRJZCAoKSB7XG4gICAgcmV0dXJuIGlkRm9yQ29tcG9uZW50KHRoaXMpXG4gIH1cblxuICBvbkN1cnJlbmN5Q2hhbmdlZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSlcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoKVxuICB9XG5cbiAgc2V0QW1vdW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuZ2V0SW5wdXRSZWYoKS5jdXJyZW50XG5cbiAgICBpZiAoIWlucHV0RWxlbWVudC52YWx1ZSAmJiBpbnB1dEVsZW1lbnQudmFsdWUgPT0gXCJcIikge1xuICAgICAgdGhpcy53aG9sZVJlZi5jdXJyZW50LnZhbHVlID0gXCJcIlxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjZW50cyA9IHBhcnNlRmxvYXQoaW5wdXRFbGVtZW50LnZhbHVlKVxuICAgICAgY29uc3QgZm9ybWF0dGVkID0gTW9uZXlGb3JtYXR0ZXIuZnJvbU1vbmV5KHthbW91bnQ6IGNlbnRzLCBjdXJyZW5jeTogdGhpcy5pbnB1dEN1cnJlbmN5VmFsdWUoKX0sIHtkZWNpbWFsczogMiwgZXhjbHVkZUN1cnJlbmN5OiB0cnVlfSkudG9TdHJpbmcoKVxuXG4gICAgICB0aGlzLndob2xlUmVmLmN1cnJlbnQudmFsdWUgPSBmb3JtYXR0ZWRcbiAgICB9XG4gIH1cblxuICBzZXRDZW50cyA9ICgpID0+IHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmdldElucHV0UmVmKCkuY3VycmVudFxuXG4gICAgbGV0IHdob2xlID0gTW9uZXlGb3JtYXR0ZXIuc3RyaW5nVG9GbG9hdCh0aGlzLndob2xlUmVmLmN1cnJlbnQudmFsdWUpXG4gICAgbGV0IGNlbnRzID0gcGFyc2VJbnQod2hvbGUgKiAxMDAsIDEwKVxuICAgIGxldCBvbGRDZW50cyA9IHBhcnNlSW50KGlucHV0RWxlbWVudC52YWx1ZSwgMTApXG5cbiAgICBpZiAodHlwZW9mIGNlbnRzID09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlucHV0RWxlbWVudC52YWx1ZSA9IGNlbnRzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0RWxlbWVudC52YWx1ZSA9ICcnXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UgJiYgb2xkQ2VudHMgIT0gY2VudHMpXG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKClcbiAgfVxufSkpXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFVBQVUsTUFBTSxZQUFZO0FBQ25DLE9BQU9DLE1BQU0sTUFBTSxXQUFXO0FBQzlCLFNBQVFDLElBQUksUUFBTyxXQUFXO0FBQzlCLE9BQU9DLGNBQWMsTUFBTSxvQkFBb0I7QUFDL0MsT0FB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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,92 @@
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 PropTypes from "prop-types";
5
+ import memo from "set-state-compare/src/memo";
6
+ import { shapeComponent } from "set-state-compare/src/shape-component";
7
+ import { useForm } from "../form";
8
+ const ApiMakerInputsSelect = memo(shapeComponent(class ApiMakerInputsSelect extends BaseComponent {
9
+ static propTypes = {
10
+ attribute: PropTypes.string,
11
+ children: PropTypes.node,
12
+ defaultValue: PropTypes.oneOfType([PropTypes.array, PropTypes.number, PropTypes.string]),
13
+ id: PropTypes.string,
14
+ includeBlank: PropTypes.oneOfType([PropTypes.bool, PropTypes.node]),
15
+ inputProps: PropTypes.object.isRequired,
16
+ model: PropTypes.object,
17
+ name: PropTypes.string,
18
+ onChange: PropTypes.func,
19
+ options: PropTypes.array,
20
+ wrapperOpts: PropTypes.object.isRequired
21
+ };
22
+ setup() {
23
+ this.form = useForm();
24
+ }
25
+ render() {
26
+ const {
27
+ attribute,
28
+ children,
29
+ defaultValue,
30
+ id,
31
+ includeBlank,
32
+ inputProps,
33
+ inputRef,
34
+ model,
35
+ name,
36
+ onChange,
37
+ options,
38
+ wrapperOpts,
39
+ ...restProps
40
+ } = this.props;
41
+ return /*#__PURE__*/React.createElement("select", _extends({
42
+ onChange: this.tt.onChange
43
+ }, inputProps, restProps), this.includeBlank() && /*#__PURE__*/React.createElement("option", {
44
+ "data-include-blank": "true"
45
+ }, typeof includeBlank != "boolean" ? includeBlank : null), options && options.map(option => /*#__PURE__*/React.createElement("option", {
46
+ key: this.optionKey(option),
47
+ value: this.optionValue(option)
48
+ }, this.optionLabel(option))), children);
49
+ }
50
+ onChange = e => {
51
+ const {
52
+ form
53
+ } = this.tt;
54
+ const {
55
+ name,
56
+ onChange
57
+ } = this.props;
58
+ if (form && name) form.setValue(name, e.target.value);
59
+ if (onChange) onChange(e);
60
+ };
61
+ optionKey(option) {
62
+ if (Array.isArray(option)) {
63
+ return `select-option-${option[1]}`;
64
+ } else {
65
+ return `select-option-${option}`;
66
+ }
67
+ }
68
+ optionLabel(option) {
69
+ if (Array.isArray(option)) {
70
+ return option[0];
71
+ } else {
72
+ return option;
73
+ }
74
+ }
75
+ optionValue(option) {
76
+ if (Array.isArray(option)) {
77
+ return option[1];
78
+ } else {
79
+ return option;
80
+ }
81
+ }
82
+ includeBlank() {
83
+ if (this.props.includeBlank && !this.props.multiple) {
84
+ return true;
85
+ } else {
86
+ return false;
87
+ }
88
+ }
89
+ }));
90
+ export { ApiMakerInputsSelect as Select };
91
+ export default inputWrapper(ApiMakerInputsSelect);
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29tcG9uZW50IiwiaW5wdXRXcmFwcGVyIiwiUHJvcFR5cGVzIiwibWVtbyIsInNoYXBlQ29tcG9uZW50IiwidXNlRm9ybSIsIkFwaU1ha2VySW5wdXRzU2VsZWN0IiwicHJvcFR5cGVzIiwiYXR0cmlidXRlIiwic3RyaW5nIiwiY2hpbGRyZW4iLCJub2RlIiwiZGVmYXVsdFZhbHVlIiwib25lT2ZUeXBlIiwiYXJyYXkiLCJudW1iZXIiLCJpZCIsImluY2x1ZGVCbGFuayIsImJvb2wiLCJpbnB1dFByb3BzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsIm1vZGVsIiwibmFtZSIsIm9uQ2hhbmdlIiwiZnVuYyIsIm9wdGlvbnMiLCJ3cmFwcGVyT3B0cyIsInNldHVwIiwiZm9ybSIsInJlbmRlciIsImlucHV0UmVmIiwicmVzdFByb3BzIiwicHJvcHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsInR0IiwibWFwIiwib3B0aW9uIiwia2V5Iiwib3B0aW9uS2V5IiwidmFsdWUiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwiZSIsInNldFZhbHVlIiwidGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwibXVsdGlwbGUiLCJTZWxlY3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5wdXRzL3NlbGVjdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCBpbnB1dFdyYXBwZXIgZnJvbSBcIi4vaW5wdXQtd3JhcHBlclwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvbWVtb1wiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3NoYXBlLWNvbXBvbmVudFwiXG5pbXBvcnQge3VzZUZvcm19IGZyb20gXCIuLi9mb3JtXCJcblxuY29uc3QgQXBpTWFrZXJJbnB1dHNTZWxlY3QgPSBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VySW5wdXRzU2VsZWN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGluY2x1ZGVCbGFuazogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5ub2RlXSksXG4gICAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheSxcbiAgICB3cmFwcGVyT3B0czogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICB0aGlzLmZvcm0gPSB1c2VGb3JtKClcbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXR0cmlidXRlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBpZCxcbiAgICAgIGluY2x1ZGVCbGFuayxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIG1vZGVsLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHdyYXBwZXJPcHRzLFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIHJldHVybiAoXG4gICAgICA8c2VsZWN0IG9uQ2hhbmdlPXt0aGlzLnR0Lm9uQ2hhbmdlfSB7Li4uaW5wdXRQcm9wc30gey4uLnJlc3RQcm9wc30+XG4gICAgICAgIHt0aGlzLmluY2x1ZGVCbGFuaygpICYmXG4gICAgICAgICAgPG9wdGlvbiBkYXRhLWluY2x1ZGUtYmxhbms9XCJ0cnVlXCI+XG4gICAgICAgICAgICB7dHlwZW9mIGluY2x1ZGVCbGFuayAhPSBcImJvb2xlYW5cIiA/IGluY2x1ZGVCbGFuayA6IG51bGx9XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIH1cbiAgICAgICAge29wdGlvbnMgJiYgb3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgICA8b3B0aW9uIGtleT17dGhpcy5vcHRpb25LZXkob3B0aW9uKX0gdmFsdWU9e3RoaXMub3B0aW9uVmFsdWUob3B0aW9uKX0+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25MYWJlbChvcHRpb24pfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApfVxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3NlbGVjdD5cbiAgICApXG4gIH1cblxuICBvbkNoYW5nZSA9IChlKSA9PiB7XG4gICAgY29uc3Qge2Zvcm19ID0gdGhpcy50dFxuICAgIGNvbnN0IHtuYW1lLCBvbkNoYW5nZX0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZm9ybSAmJiBuYW1lKSBmb3JtLnNldFZhbHVlKG5hbWUsIGUudGFyZ2V0LnZhbHVlKVxuICAgIGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZSlcbiAgfVxuXG4gIG9wdGlvbktleSAob3B0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgcmV0dXJuIGBzZWxlY3Qtb3B0aW9uLSR7b3B0aW9uWzFdfWBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBzZWxlY3Qtb3B0aW9uLSR7b3B0aW9ufWBcbiAgICB9XG4gIH1cblxuICBvcHRpb25MYWJlbCAob3B0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgcmV0dXJuIG9wdGlvblswXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9uXG4gICAgfVxuICB9XG5cbiAgb3B0aW9uVmFsdWUgKG9wdGlvbikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbikpIHtcbiAgICAgIHJldHVybiBvcHRpb25bMV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvblxuICAgIH1cbiAgfVxuXG4gIGluY2x1ZGVCbGFuayAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaW5jbHVkZUJsYW5rICYmICF0aGlzLnByb3BzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn0pKVxuXG5leHBvcnQge0FwaU1ha2VySW5wdXRzU2VsZWN0IGFzIFNlbGVjdH1cbmV4cG9ydCBkZWZhdWx0IGlucHV0V3JhcHBlcihBcGlNYWtlcklucHV0c1NlbGVjdClcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLGFBQWEsTUFBTSxtQkFBbUI7QUFDN0MsT0FBT0MsWUFBWSxNQUFNLGlCQUFpQjtBQUMxQyxPQUFPQyxTQUFTLE1BQU0sWUFBWTtBQUNsQyxPQUFPQyxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLFNBQVFDLGNBQWMsUUFBTyx1Q0FBdUM7QUFDcEUsU0FBUUMsT0FBTyxRQUFPLFNBQVM7QUFFL0IsTUFBTUMsb0JBQW9CLEdBQUdILElBQUksQ0FBQ0MsY0FBYyxDQUFDLE1BQU1FLG9CQUFvQixTQUFTTixhQUFhLENBQUM7RUFDaEcsT0FBT08sU0FBUyxHQUFHO0lBQ2pCQyxTQUFTLEVBQUVOLFNBQVMsQ0FBQ08sTUFBTTtJQUMzQkMsUUFBUSxFQUFFUixTQUFTLENBQUNTLElBQUk7SUFDeEJDLFlBQVks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