@kaspernj/api-maker 1.0.2011 → 1.0.2012
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{.eslintrc.cjs → .eslintrc.js} +10 -1
- package/README.md +35 -0
- package/android/build.gradle +43 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +50 -0
- package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +30 -0
- package/build/api.js +120 -0
- package/build/attribute-not-loaded-error.js +2 -0
- package/build/base-component.js +5 -0
- package/build/base-error.js +33 -0
- package/build/base-model/attribute.js +25 -0
- package/build/base-model/column.js +11 -0
- package/build/base-model/reflection.js +14 -0
- package/build/base-model/scope.js +11 -0
- package/build/base-model.js +828 -0
- package/build/bootstrap/attribute-row.js +135 -0
- package/build/bootstrap/attribute-rows.js +31 -0
- package/build/bootstrap/card.js +138 -0
- package/build/bootstrap/checkbox.js +97 -0
- package/build/bootstrap/checkboxes.js +183 -0
- package/build/bootstrap/index.js +2 -0
- package/build/bootstrap/input.js +129 -0
- package/build/bootstrap/invalid-feedback.js +27 -0
- package/build/bootstrap/paginate.js +150 -0
- package/build/bootstrap/radio-buttons.js +72 -0
- package/build/bootstrap/select.js +88 -0
- package/build/bootstrap/sort-link.js +131 -0
- package/build/cable-connection-pool.js +128 -0
- package/build/cable-subscription-pool.js +207 -0
- package/build/cable-subscription.js +21 -0
- package/build/cache-key-generator.js +81 -0
- package/build/can-can.js +134 -0
- package/build/channels-consumer.js +9 -0
- package/build/collection-loader.js +48 -0
- package/build/collection.js +280 -0
- package/build/command-submit-data.js +81 -0
- package/build/commands-pool.js +195 -0
- package/build/compose.js +9 -0
- package/build/config.js +62 -0
- package/build/custom-error.js +5 -0
- package/build/data-set-to-attributes.js +10 -0
- package/build/deserializer.js +56 -0
- package/build/destroy-error.js +5 -0
- package/build/devise.js +112 -0
- package/build/draggable-sort/controller.js +136 -0
- package/build/draggable-sort/index.js +114 -0
- package/build/draggable-sort/item.js +188 -0
- package/build/error-logger.js +101 -0
- package/build/error-messages.js +13 -0
- package/build/event-connection.js +32 -0
- package/build/event-emitter-listener.js +15 -0
- package/build/event-model-class.js +24 -0
- package/build/events.js +5 -0
- package/build/flash-message.js +79 -0
- package/build/form.js +83 -0
- package/build/history-expo.js +20 -0
- package/build/history-react-native.js +20 -0
- package/build/history.js +3 -0
- package/build/index.js +3 -0
- package/build/inputs/attachment.js +133 -0
- package/build/inputs/auto-submit.js +36 -0
- package/build/inputs/checkbox.js +138 -0
- package/build/inputs/checkboxes.js +112 -0
- package/build/inputs/id-for-component.js +15 -0
- package/build/inputs/input-wrapper.js +19 -0
- package/build/inputs/input.js +243 -0
- package/build/inputs/money.js +179 -0
- package/build/inputs/name-for-component.js +13 -0
- package/build/inputs/select.js +93 -0
- package/build/instance-of-class-name.js +23 -0
- package/build/key-value-store.js +53 -0
- package/build/link.js +73 -0
- package/build/logger.js +30 -0
- package/build/modal.js +38 -0
- package/build/model-class-require.js +13 -0
- package/build/model-events.js +30 -0
- package/build/model-name.js +28 -0
- package/build/model-prop-type.js +101 -0
- package/build/model-recipes-loader.js +32 -0
- package/build/model-recipes-model-loader.js +357 -0
- package/build/models-response-reader.js +40 -0
- package/build/models.js +8 -0
- package/build/money-formatter.js +78 -0
- package/build/not-loaded-error.js +2 -0
- package/build/params.js +61 -0
- package/build/preloaded.js +38 -0
- package/build/resize-observer.js +11 -0
- package/build/result.js +13 -0
- package/build/router/route.js +270 -0
- package/build/router/switch.js +72 -0
- package/build/router.js +59 -0
- package/build/routes-native.js +202 -0
- package/build/routes.js +50 -0
- package/build/run-last.js +35 -0
- package/build/serializer.js +63 -0
- package/build/services.js +20 -0
- package/build/session-status-updater.js +134 -0
- package/build/source-maps-loader.js +184 -0
- package/build/super-admin/config-reader.js +85 -0
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
- package/build/super-admin/edit-page/edit-attribute-content.js +55 -0
- package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
- package/build/super-admin/edit-page/edit-attribute.js +77 -0
- package/build/super-admin/edit-page.js +123 -0
- package/build/super-admin/has-edit-config.js +12 -0
- package/build/super-admin/index-page.js +25 -0
- package/build/super-admin/index.js +181 -0
- package/build/super-admin/layout/header/index.js +161 -0
- package/build/super-admin/layout/index.js +164 -0
- package/build/super-admin/layout/menu/index.js +206 -0
- package/build/super-admin/layout/menu/menu-content.js +46 -0
- package/build/super-admin/layout/menu/menu-item.js +84 -0
- package/build/super-admin/layout/no-access.js +27 -0
- package/build/super-admin/model-class-table.js +61 -0
- package/build/super-admin/models.js +8 -0
- package/build/super-admin/show-nav.js +51 -0
- package/build/super-admin/show-page/belongs-to-attribute-row.js +29 -0
- package/build/super-admin/show-page/index.js +141 -0
- package/build/super-admin/show-reflection-actions.js +47 -0
- package/build/super-admin/show-reflection-link.js +48 -0
- package/build/super-admin/show-reflection-page.js +48 -0
- package/build/table/column-content.js +117 -0
- package/build/table/column-identifier.js +18 -0
- package/build/table/column-visible.js +7 -0
- package/build/table/components/column.js +21 -0
- package/build/table/components/flat-list.js +21 -0
- package/build/table/components/header.js +26 -0
- package/build/table/components/row.js +26 -0
- package/build/table/filters/attribute-element.js +44 -0
- package/build/table/filters/filter-form.js +402 -0
- package/build/table/filters/filter.js +90 -0
- package/build/table/filters/index.js +184 -0
- package/build/table/filters/load-search-modal.js +175 -0
- package/build/table/filters/reflection-element.js +37 -0
- package/build/table/filters/save-search-modal.js +88 -0
- package/build/table/filters/scope-element.js +42 -0
- package/build/table/header-column-content.js +68 -0
- package/build/table/header-column.js +144 -0
- package/build/table/header-select.js +105 -0
- package/build/table/model-callback-args.js +10 -0
- package/build/table/model-column.js +97 -0
- package/build/table/model-row.js +193 -0
- package/build/table/select-calculator.js +63 -0
- package/build/table/settings/column-row.js +97 -0
- package/build/table/settings/download-action.js +79 -0
- package/build/table/settings/index.js +92 -0
- package/build/table/table-settings.js +219 -0
- package/build/table/table.js +972 -0
- package/build/table/use-sorting.js +34 -0
- package/build/table/widths.js +75 -0
- package/build/table/worker-plugins-check-all-checkbox.js +125 -0
- package/build/table/worker-plugins-checkbox.js +115 -0
- package/build/translated-attributes.js +10 -0
- package/build/translated-collections.js +12 -0
- package/build/updated-attribute.js +76 -0
- package/build/url-encode.js +15 -0
- package/build/use-breakpoint.js +62 -0
- package/build/use-can-can.js +55 -0
- package/build/use-collection.js +225 -0
- package/build/use-created-event.js +52 -0
- package/build/use-current-user.js +76 -0
- package/build/use-destroyed-event.js +60 -0
- package/build/use-event-emitter.js +13 -0
- package/build/use-event-listener.js +16 -0
- package/build/use-input.js +137 -0
- package/build/use-model-event.js +60 -0
- package/build/use-model.js +169 -0
- package/build/use-resize-observer.js +23 -0
- package/build/use-router.js +104 -0
- package/build/use-screen-layout.js +39 -0
- package/build/use-updated-event.js +60 -0
- package/build/use-validation-errors.js +30 -0
- package/build/utils/card.js +51 -0
- package/build/utils/checkbox.js +78 -0
- package/build/utils/checkboxes.js +163 -0
- package/build/utils/default-style.js +18 -0
- package/build/utils/icon.js +23 -0
- package/build/utils/invalid-feedback.js +19 -0
- package/build/utils/modal.js +62 -0
- package/build/utils/text.js +19 -0
- package/build/validation-error.js +28 -0
- package/build/validation-errors.js +98 -0
- package/build/with-api-maker.js +29 -0
- package/build/with-collection.js +14 -0
- package/build/with-current-user.js +10 -0
- package/build/with-model.js +15 -0
- package/build/with-router.js +22 -0
- package/expo-module.config.json +17 -0
- package/ios/ApiMaker.podspec +29 -0
- package/ios/ApiMakerModule.swift +48 -0
- package/ios/ApiMakerView.swift +38 -0
- package/link.sh +8 -0
- package/package.json +49 -46
- package/src/{api.mjs → api.js} +38 -37
- package/src/base-component.jsx +5 -0
- package/src/{base-error.mjs → base-error.js} +4 -6
- package/src/base-model/attribute.js +33 -0
- package/src/base-model/column.js +13 -0
- package/src/base-model/reflection.js +15 -0
- package/src/base-model/scope.js +12 -0
- package/src/{base-model.mjs → base-model.js} +302 -144
- package/src/bootstrap/attribute-row.jsx +135 -0
- package/src/bootstrap/attribute-rows.jsx +27 -0
- package/src/bootstrap/card.jsx +149 -0
- package/src/bootstrap/checkbox.jsx +86 -0
- package/src/bootstrap/checkboxes.jsx +185 -0
- package/src/bootstrap/index.js +0 -0
- package/src/bootstrap/input.jsx +173 -0
- package/src/bootstrap/invalid-feedback.jsx +31 -0
- package/src/bootstrap/paginate.jsx +187 -0
- package/src/bootstrap/radio-buttons.jsx +87 -0
- package/src/bootstrap/select.jsx +110 -0
- package/src/bootstrap/sort-link.jsx +106 -0
- package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +16 -36
- package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +26 -21
- package/src/{cable-subscription.mjs → cable-subscription.js} +6 -4
- package/src/cache-key-generator.js +100 -0
- package/src/{can-can.mjs → can-can.js} +13 -12
- package/src/channels-consumer.js +10 -0
- package/src/collection-loader.jsx +58 -224
- package/src/{collection.mjs → collection.js} +98 -44
- package/src/{command-submit-data.mjs → command-submit-data.js} +2 -7
- package/src/{commands-pool.mjs → commands-pool.js} +57 -41
- package/src/compose.js +11 -0
- package/src/{config.mjs → config.js} +6 -2
- package/src/{custom-error.mjs → custom-error.js} +1 -1
- package/src/data-set-to-attributes.js +13 -0
- package/src/{deserializer.mjs → deserializer.js} +3 -3
- package/src/destroy-error.js +7 -0
- package/src/devise.js +129 -0
- package/src/draggable-sort/controller.js +137 -0
- package/src/draggable-sort/index.jsx +108 -0
- package/src/draggable-sort/item.jsx +174 -0
- package/src/{error-logger.mjs → error-logger.js} +12 -7
- package/src/{error-messages.mjs → error-messages.js} +1 -0
- package/src/event-connection.jsx +1 -1
- package/src/event-emitter-listener.jsx +8 -27
- package/src/event-model-class.jsx +2 -4
- package/src/events.js +7 -0
- package/src/flash-message.js +70 -0
- package/src/form.jsx +91 -0
- package/src/history-expo.js +23 -0
- package/src/history-react-native.js +25 -0
- package/src/history.js +3 -0
- package/src/index.js +3 -0
- package/src/inputs/attachment.jsx +108 -0
- package/src/inputs/auto-submit.js +37 -0
- package/src/inputs/checkbox.jsx +125 -0
- package/src/inputs/checkboxes.jsx +116 -0
- package/src/inputs/id-for-component.js +15 -0
- package/src/inputs/input-wrapper.jsx +16 -0
- package/src/inputs/input.jsx +260 -0
- package/src/inputs/money.jsx +187 -0
- package/src/inputs/name-for-component.js +15 -0
- package/src/inputs/select.jsx +104 -0
- package/src/{key-value-store.mjs → key-value-store.js} +1 -1
- package/src/link.jsx +54 -9
- package/src/logger.js +38 -0
- package/src/modal.jsx +37 -0
- package/src/model-class-require.js +17 -0
- package/src/{model-events.mjs → model-events.js} +1 -1
- package/src/{model-name.mjs → model-name.js} +8 -8
- package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
- package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +5 -5
- package/src/{models-response-reader.mjs → models-response-reader.js} +3 -4
- package/src/models.js +7 -0
- package/src/{models.mjs.erb → models.js.erb} +6 -3
- package/src/{money-formatter.mjs → money-formatter.js} +5 -4
- package/src/{params.mjs → params.js} +17 -7
- package/src/{preloaded.mjs → preloaded.js} +2 -2
- package/src/resize-observer.jsx +10 -0
- package/src/result.js +13 -0
- package/src/router/route.jsx +246 -0
- package/src/router/switch.jsx +76 -0
- package/src/router.jsx +23 -21
- package/src/{routes-native.mjs → routes-native.js} +12 -6
- package/src/{routes.mjs → routes.js} +1 -1
- package/src/run-last.js +39 -0
- package/src/{serializer.mjs → serializer.js} +2 -2
- package/src/{services.mjs → services.js} +1 -1
- package/src/session-status-updater.js +172 -0
- package/src/{source-maps-loader.mjs → source-maps-loader.js} +54 -28
- package/src/super-admin/config-reader.jsx +93 -0
- package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +81 -0
- package/src/super-admin/edit-page/edit-attribute-content.jsx +57 -0
- package/src/super-admin/edit-page/edit-attribute-input.jsx +71 -0
- package/src/super-admin/edit-page/edit-attribute.jsx +81 -0
- package/src/super-admin/edit-page.jsx +117 -0
- package/src/super-admin/has-edit-config.js +15 -0
- package/src/super-admin/index-page.jsx +23 -0
- package/src/super-admin/index.jsx +197 -0
- package/src/super-admin/layout/header/index.jsx +144 -0
- package/src/super-admin/layout/header/style.scss +45 -0
- package/src/super-admin/layout/index.jsx +154 -0
- package/src/super-admin/layout/menu/index.jsx +171 -0
- package/src/super-admin/layout/menu/menu-content.jsx +43 -0
- package/src/super-admin/layout/menu/menu-item.jsx +70 -0
- package/src/super-admin/layout/menu/style.scss +11 -0
- package/src/super-admin/layout/no-access.jsx +26 -0
- package/src/super-admin/model-class-table.jsx +66 -0
- package/src/super-admin/models.js +11 -0
- package/src/super-admin/show-nav.jsx +44 -0
- package/src/super-admin/show-page/belongs-to-attribute-row.jsx +30 -0
- package/src/super-admin/show-page/index.jsx +141 -0
- package/src/super-admin/show-reflection-actions.jsx +49 -0
- package/src/super-admin/show-reflection-link.jsx +40 -0
- package/src/super-admin/show-reflection-page.jsx +47 -0
- package/src/super-admin/stylesheets/variables.scss +11 -0
- package/src/table/column-content.jsx +122 -0
- package/src/table/column-identifier.js +23 -0
- package/src/table/column-visible.js +7 -0
- package/src/table/components/column.jsx +19 -0
- package/src/table/components/flat-list.jsx +19 -0
- package/src/table/components/header.jsx +21 -0
- package/src/table/components/row.jsx +23 -0
- package/src/table/filters/attribute-element.jsx +47 -0
- package/src/table/filters/filter-form.jsx +407 -0
- package/src/table/filters/filter.jsx +70 -0
- package/src/table/filters/index.jsx +170 -0
- package/src/table/filters/load-search-modal.jsx +146 -0
- package/src/table/filters/reflection-element.jsx +38 -0
- package/src/table/filters/save-search-modal.jsx +74 -0
- package/src/table/filters/scope-element.jsx +44 -0
- package/src/table/header-column-content.jsx +55 -0
- package/src/table/header-column.jsx +129 -0
- package/src/table/header-select.jsx +73 -0
- package/src/table/model-callback-args.js +10 -0
- package/src/table/model-column.jsx +82 -0
- package/src/table/model-row.jsx +136 -0
- package/src/table/select-calculator.js +65 -0
- package/src/table/settings/column-row.jsx +93 -0
- package/src/table/settings/download-action.jsx +68 -0
- package/src/table/settings/index.jsx +65 -0
- package/src/table/table-settings.js +263 -0
- package/src/table/table.jsx +950 -0
- package/src/table/use-sorting.js +35 -0
- package/src/table/variables.scss +11 -0
- package/src/table/widths.jsx +87 -0
- package/src/table/worker-plugins-check-all-checkbox.jsx +112 -0
- package/src/table/worker-plugins-checkbox.jsx +104 -0
- package/src/translated-attributes.js +11 -0
- package/src/{translated-collections.mjs → translated-collections.js} +3 -2
- package/src/updated-attribute.jsx +1 -1
- package/src/url-encode.js +18 -0
- package/src/use-breakpoint.js +76 -0
- package/src/use-can-can.js +55 -0
- package/src/use-collection.js +280 -0
- package/src/use-created-event.js +55 -0
- package/src/use-current-user.js +88 -0
- package/src/use-destroyed-event.js +60 -0
- package/src/use-event-emitter.js +15 -0
- package/src/use-event-listener.js +19 -0
- package/src/use-input.js +157 -0
- package/src/use-model-event.js +60 -0
- package/src/use-model.js +189 -0
- package/src/use-resize-observer.js +24 -0
- package/src/use-router.jsx +128 -0
- package/src/use-screen-layout.js +49 -0
- package/src/use-updated-event.js +60 -0
- package/src/use-validation-errors.js +33 -0
- package/src/utils/card.jsx +49 -0
- package/src/utils/checkbox.jsx +80 -0
- package/src/utils/checkboxes.jsx +158 -0
- package/src/utils/default-style.jsx +25 -0
- package/src/utils/icon.jsx +21 -0
- package/src/utils/invalid-feedback.jsx +20 -0
- package/src/utils/modal.jsx +60 -0
- package/src/utils/text.jsx +16 -0
- package/src/{validation-error.mjs → validation-error.js} +9 -5
- package/src/{validation-errors.mjs → validation-errors.js} +15 -27
- package/src/with-api-maker.jsx +31 -0
- package/src/with-collection.jsx +17 -0
- package/src/with-current-user.jsx +7 -25
- package/src/with-model.jsx +16 -0
- package/src/with-router.jsx +7 -129
- package/__tests__/base-model.test.js +0 -71
- package/__tests__/cable-connection-pool.test.js +0 -227
- package/__tests__/cable-subscription-pool.test.js +0 -26
- package/__tests__/can-can.test.js +0 -34
- package/__tests__/collection.test.js +0 -51
- package/__tests__/custom-error.test.js +0 -13
- package/__tests__/model-name.test.js +0 -34
- package/__tests__/model-prop-type.test.js +0 -113
- package/__tests__/params.test.js +0 -40
- package/__tests__/routes-native.test.js +0 -103
- package/__tests__/routes.test.js +0 -46
- package/__tests__/serializer.test.js +0 -30
- package/__tests__/support/task.js +0 -27
- package/__tests__/support/user.js +0 -32
- package/index.js +0 -1
- package/jest.config.js +0 -4
- package/src/can-can-loader.jsx +0 -54
- package/src/channels-consumer.mjs +0 -3
- package/src/destroy-error.mjs +0 -7
- package/src/devise.mjs +0 -122
- package/src/event-created.jsx +0 -65
- package/src/event-destroyed.jsx +0 -29
- package/src/event-listener.jsx +0 -38
- package/src/event-updated.jsx +0 -74
- package/src/logger.mjs +0 -25
- package/src/model-class-require.mjs +0 -10
- package/src/model-load-wrapper.jsx +0 -116
- package/src/result.mjs +0 -29
- package/src/session-status-updater.mjs +0 -116
- package/webpack.config.js +0 -15
- /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
- /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
- /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
- /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
- /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=
|