@kaspernj/api-maker 1.0.2011 → 1.0.2013
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/is-expo.js +22 -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 +71 -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-styles.js +41 -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 +44 -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/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/is-expo.js +18 -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 +87 -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-styles.js +50 -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 +38 -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,137 @@
|
|
|
1
|
+
import { dig, digg } from "diggerize";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
3
|
+
import idForComponent from "./inputs/id-for-component";
|
|
4
|
+
import nameForComponent from "./inputs/name-for-component";
|
|
5
|
+
import strftime from "strftime";
|
|
6
|
+
import useShape from "set-state-compare/src/use-shape";
|
|
7
|
+
import useValidationErrors from "./use-validation-errors";
|
|
8
|
+
const useInput = ({
|
|
9
|
+
props,
|
|
10
|
+
wrapperOptions,
|
|
11
|
+
...useInputRestProps
|
|
12
|
+
}) => {
|
|
13
|
+
const useInputRestPropsKeys = Object.keys(useInputRestProps);
|
|
14
|
+
if (useInputRestPropsKeys.length > 0) {
|
|
15
|
+
throw new Error(`Unknown props given to useInput: ${useInputRestPropsKeys.join(", ")}`);
|
|
16
|
+
}
|
|
17
|
+
const s = useShape(props);
|
|
18
|
+
const backupRef = useRef();
|
|
19
|
+
s.useStates({
|
|
20
|
+
form: undefined
|
|
21
|
+
});
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setForm();
|
|
24
|
+
}, [s.props.inputRef?.current]);
|
|
25
|
+
s.meta.fakeComponent = {
|
|
26
|
+
props
|
|
27
|
+
};
|
|
28
|
+
s.meta.isCheckbox = props.type == "checkbox" || wrapperOptions?.type == "checkbox";
|
|
29
|
+
s.meta.isSelect = wrapperOptions?.type == "select";
|
|
30
|
+
const formatValue = useCallback(value => {
|
|
31
|
+
const {
|
|
32
|
+
formatValue
|
|
33
|
+
} = s.props;
|
|
34
|
+
if (formatValue) {
|
|
35
|
+
return formatValue(value);
|
|
36
|
+
} else if (value instanceof Date && !isNaN(value.getTime())) {
|
|
37
|
+
// We need to use a certain format for datetime-local
|
|
38
|
+
if (inputType() == "datetime-local") {
|
|
39
|
+
return strftime("%Y-%m-%dT%H:%M:%S", value);
|
|
40
|
+
} else if (inputType() == "date") {
|
|
41
|
+
return strftime("%Y-%m-%d", value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}, []);
|
|
46
|
+
const inputDefaultChecked = useCallback(() => {
|
|
47
|
+
if ("defaultChecked" in s.props) {
|
|
48
|
+
return s.props.defaultChecked;
|
|
49
|
+
} else if (s.props.attribute && s.props.model) {
|
|
50
|
+
if (!s.props.model[s.props.attribute]) throw new Error(`No such attribute: ${s.props.attribute}`);
|
|
51
|
+
return s.props.model[s.props.attribute]();
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
const inputDefaultValue = useCallback(() => {
|
|
55
|
+
if ("defaultValue" in s.props) {
|
|
56
|
+
return formatValue(s.props.defaultValue);
|
|
57
|
+
} else if (s.props.model && s.props.attribute) {
|
|
58
|
+
if (!s.props.model[s.props.attribute]) {
|
|
59
|
+
throw new Error(`No such attribute defined on resource: ${digg(s.props.model.modelClassData(), "name")}#${s.props.attribute}`);
|
|
60
|
+
}
|
|
61
|
+
return formatValue(s.props.model[s.props.attribute]());
|
|
62
|
+
}
|
|
63
|
+
}, []);
|
|
64
|
+
const inputRef = useCallback(() => s.props.inputRef || backupRef);
|
|
65
|
+
const inputType = useCallback(() => {
|
|
66
|
+
if ("type" in s.props) {
|
|
67
|
+
return s.props.type;
|
|
68
|
+
} else if (s.m.isCheckbox) {
|
|
69
|
+
return "checkbox";
|
|
70
|
+
} else {
|
|
71
|
+
return "text";
|
|
72
|
+
}
|
|
73
|
+
}, []);
|
|
74
|
+
const label = useCallback(() => {
|
|
75
|
+
if ("label" in s.props) {
|
|
76
|
+
return s.props.label;
|
|
77
|
+
} else if (s.props.attribute && s.props.model) {
|
|
78
|
+
return s.props.model.modelClass().humanAttributeName(s.props.attribute);
|
|
79
|
+
}
|
|
80
|
+
}, []);
|
|
81
|
+
const setForm = useCallback(() => {
|
|
82
|
+
const inputElement = inputRef().current;
|
|
83
|
+
let form;
|
|
84
|
+
if (inputElement) form = dig(inputElement, "form");
|
|
85
|
+
if (form && form != s.s.form) s.set({
|
|
86
|
+
form
|
|
87
|
+
});
|
|
88
|
+
}, []);
|
|
89
|
+
const getId = useCallback(() => idForComponent(s.m.fakeComponent), []);
|
|
90
|
+
const getName = useCallback(() => nameForComponent(s.m.fakeComponent), []);
|
|
91
|
+
const getInputProps = useCallback(() => {
|
|
92
|
+
const givenInputProps = s.props.inputProps || {};
|
|
93
|
+
const inputProps = Object.assign({
|
|
94
|
+
id: getId(),
|
|
95
|
+
name: getName(),
|
|
96
|
+
ref: inputRef()
|
|
97
|
+
}, givenInputProps);
|
|
98
|
+
if (s.m.isCheckbox) {
|
|
99
|
+
if ("checked" in s.props) {
|
|
100
|
+
inputProps.checked = s.props.checked;
|
|
101
|
+
}
|
|
102
|
+
if ("defaultChecked" in s.props || s.props.attribute && s.props.model) {
|
|
103
|
+
inputProps.defaultChecked = inputDefaultChecked();
|
|
104
|
+
}
|
|
105
|
+
} else if ("value" in s.props) {
|
|
106
|
+
inputProps.value = s.props.value;
|
|
107
|
+
} else if (!("value" in s.props)) {
|
|
108
|
+
inputProps.defaultValue = inputDefaultValue();
|
|
109
|
+
}
|
|
110
|
+
return inputProps;
|
|
111
|
+
}, []);
|
|
112
|
+
const {
|
|
113
|
+
inputProps: oldInputProps,
|
|
114
|
+
wrapperOpts: oldWrapperOpts,
|
|
115
|
+
...restProps
|
|
116
|
+
} = props;
|
|
117
|
+
const type = inputType();
|
|
118
|
+
s.meta.inputProps = getInputProps();
|
|
119
|
+
s.meta.inputNameWithoutId = useMemo(() => s.m.inputProps.name?.replace(/\[(.+)_id\]$/, "[$1]"), [s.m.inputProps.name]);
|
|
120
|
+
if (!s.m.inputProps.ref) throw new Error("No input ref?");
|
|
121
|
+
if (!s.m.isSelect) s.m.inputProps.type = type;
|
|
122
|
+
const {
|
|
123
|
+
validationErrors
|
|
124
|
+
} = useValidationErrors(validationError => validationError.inputName == s.m.inputProps.name || validationError.inputName == s.m.inputNameWithoutId);
|
|
125
|
+
const wrapperOpts = {
|
|
126
|
+
errors: validationErrors,
|
|
127
|
+
form: s.s.form,
|
|
128
|
+
label: label()
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
inputProps: s.m.inputProps,
|
|
132
|
+
wrapperOpts,
|
|
133
|
+
restProps
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
export default useInput;
|
|
137
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWciLCJkaWdnIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwiaWRGb3JDb21wb25lbnQiLCJuYW1lRm9yQ29tcG9uZW50Iiwic3RyZnRpbWUiLCJ1c2VTaGFwZSIsInVzZVZhbGlkYXRpb25FcnJvcnMiLCJ1c2VJbnB1dCIsInByb3BzIiwid3JhcHBlck9wdGlvbnMiLCJ1c2VJbnB1dFJlc3RQcm9wcyIsInVzZUlucHV0UmVzdFByb3BzS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJFcnJvciIsImpvaW4iLCJzIiwiYmFja3VwUmVmIiwidXNlU3RhdGVzIiwiZm9ybSIsInVuZGVmaW5lZCIsInNldEZvcm0iLCJpbnB1dFJlZiIsImN1cnJlbnQiLCJtZXRhIiwiZmFrZUNvbXBvbmVudCIsImlzQ2hlY2tib3giLCJ0eXBlIiwiaXNTZWxlY3QiLCJmb3JtYXRWYWx1ZSIsInZhbHVlIiwiRGF0ZSIsImlzTmFOIiwiZ2V0VGltZSIsImlucHV0VHlwZSIsImlucHV0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0Q2hlY2tlZCIsImF0dHJpYnV0ZSIsIm1vZGVsIiwiaW5wdXREZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJtb2RlbENsYXNzRGF0YSIsIm0iLCJsYWJlbCIsIm1vZGVsQ2xhc3MiLCJodW1hbkF0dHJpYnV0ZU5hbWUiLCJpbnB1dEVsZW1lbnQiLCJzZXQiLCJnZXRJZCIsImdldE5hbWUiLCJnZXRJbnB1dFByb3BzIiwiZ2l2ZW5JbnB1dFByb3BzIiwiaW5wdXRQcm9wcyIsImFzc2lnbiIsImlkIiwibmFtZSIsInJlZiIsImNoZWNrZWQiLCJvbGRJbnB1dFByb3BzIiwid3JhcHBlck9wdHMiLCJvbGRXcmFwcGVyT3B0cyIsInJlc3RQcm9wcyIsImlucHV0TmFtZVdpdGhvdXRJZCIsInJlcGxhY2UiLCJ2YWxpZGF0aW9uRXJyb3JzIiwidmFsaWRhdGlvbkVycm9yIiwiaW5wdXROYW1lIiwiZXJyb3JzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1pbnB1dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RpZywgZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBpZEZvckNvbXBvbmVudCBmcm9tIFwiLi9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgbmFtZUZvckNvbXBvbmVudCBmcm9tIFwiLi9pbnB1dHMvbmFtZS1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBzdHJmdGltZSBmcm9tIFwic3RyZnRpbWVcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvdXNlLXNoYXBlXCJcbmltcG9ydCB1c2VWYWxpZGF0aW9uRXJyb3JzIGZyb20gXCIuL3VzZS12YWxpZGF0aW9uLWVycm9yc1wiXG5cbmNvbnN0IHVzZUlucHV0ID0gKHtwcm9wcywgd3JhcHBlck9wdGlvbnMsIC4uLnVzZUlucHV0UmVzdFByb3BzfSkgPT4ge1xuICBjb25zdCB1c2VJbnB1dFJlc3RQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh1c2VJbnB1dFJlc3RQcm9wcylcblxuICBpZiAodXNlSW5wdXRSZXN0UHJvcHNLZXlzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gdXNlSW5wdXQ6ICR7dXNlSW5wdXRSZXN0UHJvcHNLZXlzLmpvaW4oXCIsIFwiKX1gKVxuICB9XG5cbiAgY29uc3QgcyA9IHVzZVNoYXBlKHByb3BzKVxuICBjb25zdCBiYWNrdXBSZWYgPSB1c2VSZWYoKVxuXG4gIHMudXNlU3RhdGVzKHtcbiAgICBmb3JtOiB1bmRlZmluZWRcbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEZvcm0oKVxuICB9LCBbcy5wcm9wcy5pbnB1dFJlZj8uY3VycmVudF0pXG5cbiAgcy5tZXRhLmZha2VDb21wb25lbnQgPSB7cHJvcHN9XG4gIHMubWV0YS5pc0NoZWNrYm94ID0gcHJvcHMudHlwZSA9PSBcImNoZWNrYm94XCIgfHwgd3JhcHBlck9wdGlvbnM/LnR5cGUgPT0gXCJjaGVja2JveFwiXG4gIHMubWV0YS5pc1NlbGVjdCA9IHdyYXBwZXJPcHRpb25zPy50eXBlID09IFwic2VsZWN0XCJcblxuICBjb25zdCBmb3JtYXRWYWx1ZSA9IHVzZUNhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHtmb3JtYXRWYWx1ZX0gPSBzLnByb3BzXG5cbiAgICBpZiAoZm9ybWF0VmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRWYWx1ZSh2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgLy8gV2UgbmVlZCB0byB1c2UgYSBjZXJ0YWluIGZvcm1hdCBmb3IgZGF0ZXRpbWUtbG9jYWxcbiAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBcImRhdGV0aW1lLWxvY2FsXCIpIHtcbiAgICAgICAgcmV0dXJuIHN0cmZ0aW1lKFwiJVktJW0tJWRUJUg6JU06JVNcIiwgdmFsdWUpXG4gICAgICB9IGVsc2UgaWYgKGlucHV0VHlwZSgpID09IFwiZGF0ZVwiKSB7XG4gICAgICAgIHJldHVybiBzdHJmdGltZShcIiVZLSVtLSVkXCIsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9LCBbXSlcblxuICBjb25zdCBpbnB1dERlZmF1bHRDaGVja2VkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChcImRlZmF1bHRDaGVja2VkXCIgaW4gcy5wcm9wcykge1xuICAgICAgcmV0dXJuIHMucHJvcHMuZGVmYXVsdENoZWNrZWRcbiAgICB9IGVsc2UgaWYgKHMucHJvcHMuYXR0cmlidXRlICYmIHMucHJvcHMubW9kZWwpIHtcbiAgICAgIGlmICghcy5wcm9wcy5tb2RlbFtzLnByb3BzLmF0dHJpYnV0ZV0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBhdHRyaWJ1dGU6ICR7cy5wcm9wcy5hdHRyaWJ1dGV9YClcblxuICAgICAgcmV0dXJuIHMucHJvcHMubW9kZWxbcy5wcm9wcy5hdHRyaWJ1dGVdKClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGlucHV0RGVmYXVsdFZhbHVlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChcImRlZmF1bHRWYWx1ZVwiIGluIHMucHJvcHMpIHtcbiAgICAgIHJldHVybiBmb3JtYXRWYWx1ZShzLnByb3BzLmRlZmF1bHRWYWx1ZSlcbiAgICB9IGVsc2UgaWYgKHMucHJvcHMubW9kZWwgJiYgcy5wcm9wcy5hdHRyaWJ1dGUpIHtcbiAgICAgIGlmICghcy5wcm9wcy5tb2RlbFtzLnByb3BzLmF0dHJpYnV0ZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZSBkZWZpbmVkIG9uIHJlc291cmNlOiAke2RpZ2cocy5wcm9wcy5tb2RlbC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIil9IyR7cy5wcm9wcy5hdHRyaWJ1dGV9YClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKHMucHJvcHMubW9kZWxbcy5wcm9wcy5hdHRyaWJ1dGVdKCkpXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBpbnB1dFJlZiA9IHVzZUNhbGxiYWNrKCgpID0+IHMucHJvcHMuaW5wdXRSZWYgfHwgYmFja3VwUmVmKVxuXG4gIGNvbnN0IGlucHV0VHlwZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoXCJ0eXBlXCIgaW4gcy5wcm9wcykge1xuICAgICAgcmV0dXJuIHMucHJvcHMudHlwZVxuICAgIH0gZWxzZSBpZiAocy5tLmlzQ2hlY2tib3gpIHtcbiAgICAgIHJldHVybiBcImNoZWNrYm94XCJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwidGV4dFwiXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBsYWJlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoXCJsYWJlbFwiIGluIHMucHJvcHMpIHtcbiAgICAgIHJldHVybiBzLnByb3BzLmxhYmVsXG4gICAgfSBlbHNlIGlmIChzLnByb3BzLmF0dHJpYnV0ZSAmJiBzLnByb3BzLm1vZGVsKSB7XG4gICAgICByZXR1cm4gcy5wcm9wcy5tb2RlbC5tb2RlbENsYXNzKCkuaHVtYW5BdHRyaWJ1dGVOYW1lKHMucHJvcHMuYXR0cmlidXRlKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3Qgc2V0Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBpbnB1dFJlZigpLmN1cnJlbnRcblxuICAgIGxldCBmb3JtXG5cbiAgICBpZiAoaW5wdXRFbGVtZW50KSBmb3JtID0gZGlnKGlucHV0RWxlbWVudCwgXCJmb3JtXCIpXG4gICAgaWYgKGZvcm0gJiYgZm9ybSAhPSBzLnMuZm9ybSkgcy5zZXQoe2Zvcm19KVxuICB9LCBbXSlcblxuICBjb25zdCBnZXRJZCA9IHVzZUNhbGxiYWNrKCgpID0+IGlkRm9yQ29tcG9uZW50KHMubS5mYWtlQ29tcG9uZW50KSwgW10pXG4gIGNvbnN0IGdldE5hbWUgPSB1c2VDYWxsYmFjaygoKSA9PiBuYW1lRm9yQ29tcG9uZW50KHMubS5mYWtlQ29tcG9uZW50KSwgW10pXG5cbiAgY29uc3QgZ2V0SW5wdXRQcm9wcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBnaXZlbklucHV0UHJvcHMgPSBzLnByb3BzLmlucHV0UHJvcHMgfHwge31cbiAgICBjb25zdCBpbnB1dFByb3BzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgaWQ6IGdldElkKCksXG4gICAgICAgIG5hbWU6IGdldE5hbWUoKSxcbiAgICAgICAgcmVmOiBpbnB1dFJlZigpXG4gICAgICB9LFxuICAgICAgZ2l2ZW5JbnB1dFByb3BzXG4gICAgKVxuXG4gICAgaWYgKHMubS5pc0NoZWNrYm94KSB7XG4gICAgICBpZiAoXCJjaGVja2VkXCIgaW4gcy5wcm9wcykge1xuICAgICAgICBpbnB1dFByb3BzLmNoZWNrZWQgPSBzLnByb3BzLmNoZWNrZWRcbiAgICAgIH1cblxuICAgICAgaWYgKFwiZGVmYXVsdENoZWNrZWRcIiBpbiBzLnByb3BzIHx8IChzLnByb3BzLmF0dHJpYnV0ZSAmJiBzLnByb3BzLm1vZGVsKSkge1xuICAgICAgICBpbnB1dFByb3BzLmRlZmF1bHRDaGVja2VkID0gaW5wdXREZWZhdWx0Q2hlY2tlZCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gcy5wcm9wcykge1xuICAgICAgaW5wdXRQcm9wcy52YWx1ZSA9IHMucHJvcHMudmFsdWVcbiAgICB9IGVsc2UgaWYgKCEoXCJ2YWx1ZVwiIGluIHMucHJvcHMpKSB7XG4gICAgICBpbnB1dFByb3BzLmRlZmF1bHRWYWx1ZSA9IGlucHV0RGVmYXVsdFZhbHVlKClcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRQcm9wc1xuICB9LCBbXSlcblxuICBjb25zdCB7aW5wdXRQcm9wczogb2xkSW5wdXRQcm9wcywgd3JhcHBlck9wdHM6IG9sZFdyYXBwZXJPcHRzLCAuLi5yZXN0UHJvcHN9ID0gcHJvcHNcbiAgY29uc3QgdHlwZSA9IGlucHV0VHlwZSgpXG5cbiAgcy5tZXRhLmlucHV0UHJvcHMgPSBnZXRJbnB1dFByb3BzKClcbiAgcy5tZXRhLmlucHV0TmFtZVdpdGhvdXRJZCA9IHVzZU1lbW8oKCkgPT4gcy5tLmlucHV0UHJvcHMubmFtZT8ucmVwbGFjZSgvXFxbKC4rKV9pZFxcXSQvLCBcIlskMV1cIiksIFtzLm0uaW5wdXRQcm9wcy5uYW1lXSlcblxuICBpZiAoIXMubS5pbnB1dFByb3BzLnJlZikgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW5wdXQgcmVmP1wiKVxuICBpZiAoIXMubS5pc1NlbGVjdCkgcy5tLmlucHV0UHJvcHMudHlwZSA9IHR5cGVcblxuICBjb25zdCB7dmFsaWRhdGlvbkVycm9yc30gPSB1c2VWYWxpZGF0aW9uRXJyb3JzKCh2YWxpZGF0aW9uRXJyb3IpID0+XG4gICAgdmFsaWRhdGlvbkVycm9yLmlucHV0TmFtZSA9PSBzLm0uaW5wdXRQcm9wcy5uYW1lIHx8IHZhbGlkYXRpb25FcnJvci5pbnB1dE5hbWUgPT0gcy5tLmlucHV0TmFtZVdpdGhvdXRJZFxuICApXG5cbiAgY29uc3Qgd3JhcHBlck9wdHMgPSB7XG4gICAgZXJyb3JzOiB2YWxpZGF0aW9uRXJyb3JzLFxuICAgIGZvcm06IHMucy5mb3JtLFxuICAgIGxhYmVsOiBsYWJlbCgpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlucHV0UHJvcHM6IHMubS5pbnB1dFByb3BzLFxuICAgIHdyYXBwZXJPcHRzLFxuICAgIHJlc3RQcm9wc1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUlucHV0XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLEdBQUcsRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDbkMsU0FBUUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxRQUFPLE9BQU87QUFDN0QsT0FBT0MsY0FBYyxNQUFNLDJCQUEyQjtBQUN0RCxPQUFPQyxnQkFBZ0IsTUFBTSw2QkFBNkI7QUFDMUQsT0FBT0MsUUFBUSxNQUFNLFVBQVU7QUFDL0IsT0FBT0MsUUFBUSxNQUFNLGlDQUFpQztBQUN0RCxPQUFPQyxtQkFBbUIsTUFBTSx5QkFBeUI7QUFFekQsTUFBTUMsUUFBUSxHQUFHQSxDQUFDO0VBQUNDLEtBQUs7RUFBRUMsY0FBYztFQUFFLEdBQUdDO0FBQWlCLENBQUMsS0FBSztFQUNsRSxNQUFNQyxxQkFBcUIsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNILGlCQUFpQixDQUFDO0VBRTVELElBQUlDLHFCQUFxQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3BDLE1BQU0sSUFBSUMsS0FBSyxDQUFDLG9DQUFvQ0oscUJBQXFCLENBQUNLLElBQUksQ0FBQyxJQUFJ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
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { useCallback, useLayoutEffect, useMemo } from "react";
|
|
2
|
+
import debounceFunction from "debounce";
|
|
3
|
+
import ModelEvents from "./model-events";
|
|
4
|
+
import useShape from "set-state-compare/src/use-shape";
|
|
5
|
+
const apiMakerUseModelEvent = (model, event, onCallback, props) => {
|
|
6
|
+
const {
|
|
7
|
+
active = true,
|
|
8
|
+
debounce,
|
|
9
|
+
onConnected,
|
|
10
|
+
...restProps
|
|
11
|
+
} = props || {};
|
|
12
|
+
if (Object.keys(restProps).length > 0) {
|
|
13
|
+
throw new Error(`Unknown props given to apiMakerUseModelEvent: ${Object.keys(restProps).join(", ")}`);
|
|
14
|
+
}
|
|
15
|
+
const s = useShape({
|
|
16
|
+
active,
|
|
17
|
+
debounce,
|
|
18
|
+
model,
|
|
19
|
+
onCallback
|
|
20
|
+
});
|
|
21
|
+
const debounceCallback = useMemo(() => {
|
|
22
|
+
if (typeof debounce == "number") {
|
|
23
|
+
return debounceFunction(s.p.onCallback, debounce);
|
|
24
|
+
} else {
|
|
25
|
+
return debounceFunction(s.p.onCallback);
|
|
26
|
+
}
|
|
27
|
+
}, [debounce]);
|
|
28
|
+
s.updateMeta({
|
|
29
|
+
debounceCallback
|
|
30
|
+
});
|
|
31
|
+
const onCallbackCallback = useCallback((...args) => {
|
|
32
|
+
if (!s.p.active) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (s.p.debounce) {
|
|
36
|
+
s.m.debounceCallback(...args);
|
|
37
|
+
} else {
|
|
38
|
+
s.p.onCallback(...args);
|
|
39
|
+
}
|
|
40
|
+
}, []);
|
|
41
|
+
useLayoutEffect(() => {
|
|
42
|
+
let connectEvent, onConnectedListener;
|
|
43
|
+
if (model) {
|
|
44
|
+
connectEvent = ModelEvents.connect(model, event, onCallbackCallback);
|
|
45
|
+
if (onConnected) {
|
|
46
|
+
onConnectedListener = connectEvent.events.addListener("connected", onConnected);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return () => {
|
|
50
|
+
if (onConnectedListener) {
|
|
51
|
+
connectEvent.events.removeListener("connected", onConnected);
|
|
52
|
+
}
|
|
53
|
+
if (connectEvent) {
|
|
54
|
+
connectEvent.unsubscribe();
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}, [model?.id()]);
|
|
58
|
+
};
|
|
59
|
+
export default apiMakerUseModelEvent;
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJkZWJvdW5jZUZ1bmN0aW9uIiwiTW9kZWxFdmVudHMiLCJ1c2VTaGFwZSIsImFwaU1ha2VyVXNlTW9kZWxFdmVudCIsIm1vZGVsIiwiZXZlbnQiLCJvbkNhbGxiYWNrIiwicHJvcHMiLCJhY3RpdmUiLCJkZWJvdW5jZSIsIm9uQ29ubmVjdGVkIiwicmVzdFByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIkVycm9yIiwiam9pbiIsInMiLCJkZWJvdW5jZUNhbGxiYWNrIiwicCIsInVwZGF0ZU1ldGEiLCJvbkNhbGxiYWNrQ2FsbGJhY2siLCJhcmdzIiwibSIsImNvbm5lY3RFdmVudCIsIm9uQ29ubmVjdGVkTGlzdGVuZXIiLCJjb25uZWN0IiwiZXZlbnRzIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInVuc3Vic2NyaWJlIiwiaWQiXSwic291cmNlcyI6WyIuLi9zcmMvdXNlLW1vZGVsLWV2ZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgTW9kZWxFdmVudHMgZnJvbSBcIi4vbW9kZWwtZXZlbnRzXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3VzZS1zaGFwZVwiXG5cbmNvbnN0IGFwaU1ha2VyVXNlTW9kZWxFdmVudCA9IChtb2RlbCwgZXZlbnQsIG9uQ2FsbGJhY2ssIHByb3BzKSA9PiB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBkZWJvdW5jZSwgb25Db25uZWN0ZWQsIC4uLnJlc3RQcm9wc30gPSBwcm9wcyB8fCB7fVxuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gYXBpTWFrZXJVc2VNb2RlbEV2ZW50OiAke09iamVjdC5rZXlzKHJlc3RQcm9wcykuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICBjb25zdCBzID0gdXNlU2hhcGUoe2FjdGl2ZSwgZGVib3VuY2UsIG1vZGVsLCBvbkNhbGxiYWNrfSlcblxuICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25DYWxsYmFjaywgZGVib3VuY2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHMucC5vbkNhbGxiYWNrKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlXSlcblxuICBzLnVwZGF0ZU1ldGEoe2RlYm91bmNlQ2FsbGJhY2t9KVxuXG4gIGNvbnN0IG9uQ2FsbGJhY2tDYWxsYmFjayA9IHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFzLnAuYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocy5wLmRlYm91bmNlKSB7XG4gICAgICBzLm0uZGVib3VuY2VDYWxsYmFjayguLi5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzLnAub25DYWxsYmFjayguLi5hcmdzKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY29ubmVjdEV2ZW50LCBvbkNvbm5lY3RlZExpc3RlbmVyXG5cbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIGNvbm5lY3RFdmVudCA9IE1vZGVsRXZlbnRzLmNvbm5lY3QobW9kZWwsIGV2ZW50LCBvbkNhbGxiYWNrQ2FsbGJhY2spXG5cbiAgICAgIGlmIChvbkNvbm5lY3RlZCkge1xuICAgICAgICBvbkNvbm5lY3RlZExpc3RlbmVyID0gY29ubmVjdEV2ZW50LmV2ZW50cy5hZGRMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKG9uQ29ubmVjdGVkTGlzdGVuZXIpIHtcbiAgICAgICAgY29ubmVjdEV2ZW50LmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3RFdmVudCkge1xuICAgICAgICBjb25uZWN0RXZlbnQudW5zdWJzY3JpYmUoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW21vZGVsPy5pZCgpXSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBpTWFrZXJVc2VNb2RlbEV2ZW50XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFdBQVcsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUMzRCxPQUFPQyxnQkFBZ0IsTUFBTSxVQUFVO0FBQ3ZDLE9BQU9DLFdBQVcsTUFBTSxnQkFBZ0I7QUFDeEMsT0FBT0MsUUFBUSxNQUFNLGlDQUFpQztBQUV0RCxNQUFNQyxxQkFBcUIsR0FBR0EsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxLQUFLO0VBQ2pFLE1BQU07SUFBQ0MsTUFBTSxHQUFHLElBQUk7SUFBRUMsUUFBUTtJQUFFQyxXQUFXO0lBQUUsR0FBR0M7RUFBUyxDQUFDLEdBQUdKLEtBQUssSUFBSSxDQUFDLENBQUM7RUFFeEUsSUFBSUssTUFBTSxDQUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3JDLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGlEQUFpREgsTUFBTSxDQUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUFDSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN2RztFQUVBLE1BQU1DLENBQUMsR0FBR2YsUUFBUSxDQUFDO0lBQUNNLE1BQU07SUFBRUMsUUFBUTtJQUFFTCxLQUFLO0lBQUVFO0VBQVUsQ0FBQyxDQUFDO0VBRXpELE1BQU1ZLGdCQUFnQixHQUFHbkIsT0FBTyxDQUFDLE1BQU07SUFDckMsSUFBSSxPQUFPVSxRQUFRLElBQUksUUFBUSxFQUFFO01BQy9CLE9BQU9ULGdCQUFnQixDQUFDaUIsQ0FBQyxDQUFDRSxDQUFDLENBQUNiLFVBQVUsRUFBRUcsUUFBUSxDQUFDO0lBQ25ELENBQUMsTUFBTTtNQUNMLE9BQU9ULGdCQUFnQixDQUFDaUIsQ0FBQyxDQUFDRSxDQUFDLENBQUNiLFVBQVUsQ0FBQztJQUN6QztFQUNGLENBQUMsRUFBRSxDQUFDRyxRQUFRLENBQUMsQ0FBQztFQUVkUSxDQUFDLENBQUNHLFVBQVUsQ0FBQztJQUFDRjtFQUFnQixDQUFDLENBQUM7RUFFaEMsTUFBTUcsa0JBQWtCLEdBQUd4QixXQUFXLENBQUMsQ0FBQyxHQUFHeUIsSUFBSSxLQUFLO0lBQ2xELElBQUksQ0FBQ0wsQ0FBQyxDQUFDRSxDQUFDLENBQUNYLE1BQU0sRUFBRTtNQUNmO0lBQ0Y7SUFFQSxJQUFJUyxDQUFDLENBQUNFLENBQUMsQ0FBQ1YsUUFBUSxFQUFFO01BQ2hCUSxDQUFDLENBQUNNLENBQUMsQ0FBQ0wsZ0JBQWdCLENBQUMsR0FBR0ksSUFBSSxDQUFDO0lBQy9CLENBQUMsTUFBTTtNQUNMTCxDQUFDLENBQUNFLENBQUMsQ0FBQ2IsVUFBVSxDQUFDLEdBQUdnQixJQUFJLENBQUM7SUFDekI7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU54QixlQUFlLENBQUMsTUFBTTtJQUNwQixJQUFJMEIsWUFBWSxFQUFFQyxtQkFBbUI7SUFFckMsSUFBSXJCLEtBQUssRUFBRTtNQUNUb0IsWUFBWSxHQUFHdkIsV0FBVyxDQUFDeUIsT0FBTyxDQUFDdEIsS0FBSyxFQUFFQyxLQUFLLEVBQUVnQixrQkFBa0IsQ0FBQztNQUVwRSxJQUFJWCxXQUFXLEVBQUU7UUFDZmUsbUJBQW1CLEdBQUdELFlBQVksQ0FBQ0csTUFBTSxDQUFDQyxXQUFXLENBQUMsV0FBVyxFQUFFbEIsV0FBVyxDQUFDO01BQ2pGO0lBQ0Y7SUFFQSxPQUFPLE1BQU07TUFDWCxJQUFJZSxtQkFBbUIsRUFBRTtRQUN2QkQsWUFBWSxDQUFDRyxNQUFNLENBQUNFLGNBQWMsQ0FBQyxXQUFXLEVBQUVuQixXQUFXLENBQUM7TUFDOUQ7TUFFQSxJQUFJYyxZQUFZLEVBQUU7UUFDaEJBLFlBQVksQ0FBQ00sV0FBVyxDQUFDLENBQUM7TUFDNUI7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUMxQixLQUFLLEVBQUUyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVELGVBQWU1QixxQkFBcUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { useCallback, useLayoutEffect, useMemo } from "react";
|
|
2
|
+
import Devise from "./devise";
|
|
3
|
+
import * as inflection from "inflection";
|
|
4
|
+
import ModelEvents from "./model-events";
|
|
5
|
+
import useQueryParams from "on-location-changed/build/use-query-params";
|
|
6
|
+
import useShape from "set-state-compare/src/use-shape";
|
|
7
|
+
const useModel = (modelClassArg, argsArg = {}) => {
|
|
8
|
+
const queryParams = useQueryParams();
|
|
9
|
+
let args, modelClass;
|
|
10
|
+
if (typeof argsArg == "function") {
|
|
11
|
+
args = argsArg({
|
|
12
|
+
modelClass
|
|
13
|
+
});
|
|
14
|
+
} else {
|
|
15
|
+
args = argsArg;
|
|
16
|
+
}
|
|
17
|
+
const s = useShape(args);
|
|
18
|
+
s.useStates({
|
|
19
|
+
model: undefined,
|
|
20
|
+
notFound: undefined
|
|
21
|
+
});
|
|
22
|
+
if ("active" in s.props && !s.props.active) {
|
|
23
|
+
s.meta.active = false;
|
|
24
|
+
} else {
|
|
25
|
+
s.meta.active = true;
|
|
26
|
+
}
|
|
27
|
+
if (typeof modelClassArg == "object") {
|
|
28
|
+
modelClass = modelClassArg.callback({
|
|
29
|
+
queryParams
|
|
30
|
+
});
|
|
31
|
+
} else {
|
|
32
|
+
modelClass = modelClassArg;
|
|
33
|
+
}
|
|
34
|
+
const paramsVariableName = `${modelClass.modelName().paramKey()}_id`;
|
|
35
|
+
let modelId;
|
|
36
|
+
if (args.loadByQueryParam) {
|
|
37
|
+
modelId = args.loadByQueryParam({
|
|
38
|
+
queryParams
|
|
39
|
+
});
|
|
40
|
+
} else if (!args.query) {
|
|
41
|
+
if (!args.match) throw new Error("Both 'loadByQueryParam' and 'match' wasn't given");
|
|
42
|
+
modelId = args.match.params[paramsVariableName] || args.match.params.id;
|
|
43
|
+
}
|
|
44
|
+
const modelVariableName = inflection.camelize(modelClass.modelClassData().name, true);
|
|
45
|
+
const cacheArgs = [modelId];
|
|
46
|
+
const loadExistingModel = useCallback(async () => {
|
|
47
|
+
let query;
|
|
48
|
+
if (s.m.modelId) {
|
|
49
|
+
query = modelClass.ransack({
|
|
50
|
+
id_eq: s.m.modelId
|
|
51
|
+
});
|
|
52
|
+
} else if (s.m.args.query) {
|
|
53
|
+
query = s.m.args.query.clone();
|
|
54
|
+
} else {
|
|
55
|
+
throw new Error(`No model ID was given: ${s.m.modelId} by '${paramsVariableName}' in query params: ${Object.keys(s.props.match.params).join(", ")}`);
|
|
56
|
+
}
|
|
57
|
+
if (s.props.abilities) query.abilities(s.p.abilities);
|
|
58
|
+
if (s.props.preload) query.preload(s.p.preload);
|
|
59
|
+
if (s.props.select) query.select(s.p.select);
|
|
60
|
+
const model = await query.first();
|
|
61
|
+
s.set({
|
|
62
|
+
model,
|
|
63
|
+
notFound: !model
|
|
64
|
+
});
|
|
65
|
+
}, []);
|
|
66
|
+
const loadNewModel = useCallback(async () => {
|
|
67
|
+
const ModelClass = modelClass;
|
|
68
|
+
const paramKey = ModelClass.modelName().paramKey();
|
|
69
|
+
const modelDataFromParams = s.m.queryParams[paramKey] || {};
|
|
70
|
+
let defaults = {};
|
|
71
|
+
if (s.props.newIfNoId?.defaults) {
|
|
72
|
+
defaults = await s.props.newIfNoId.defaults();
|
|
73
|
+
}
|
|
74
|
+
const modelData = Object.assign(defaults, s.props.newAttributes, modelDataFromParams);
|
|
75
|
+
const model = new ModelClass({
|
|
76
|
+
isNewRecord: true,
|
|
77
|
+
data: {
|
|
78
|
+
a: modelData
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
s.set({
|
|
82
|
+
model
|
|
83
|
+
});
|
|
84
|
+
}, []);
|
|
85
|
+
const loadModel = useCallback(async () => {
|
|
86
|
+
if (!s.m.active) {
|
|
87
|
+
// Not active - don't do anything
|
|
88
|
+
} else if (s.props.newIfNoId && !s.m.modelId) {
|
|
89
|
+
return await loadNewModel();
|
|
90
|
+
} else if (!s.props.optional || s.m.modelId | s.m.args.query) {
|
|
91
|
+
return await loadExistingModel();
|
|
92
|
+
}
|
|
93
|
+
}, []);
|
|
94
|
+
const onDestroyed = useCallback(({
|
|
95
|
+
model
|
|
96
|
+
}) => {
|
|
97
|
+
const forwardArgs = {
|
|
98
|
+
model
|
|
99
|
+
};
|
|
100
|
+
forwardArgs[s.m.modelVariableName] = model;
|
|
101
|
+
s.p.onDestroyed(forwardArgs);
|
|
102
|
+
}, []);
|
|
103
|
+
const onSignedIn = useCallback(() => {
|
|
104
|
+
loadModel();
|
|
105
|
+
}, []);
|
|
106
|
+
const onSignedOut = useCallback(() => {
|
|
107
|
+
loadModel();
|
|
108
|
+
}, []);
|
|
109
|
+
if (args.cacheArgs) {
|
|
110
|
+
cacheArgs.push(...args.cacheArgs);
|
|
111
|
+
}
|
|
112
|
+
s.updateMeta({
|
|
113
|
+
args,
|
|
114
|
+
modelId,
|
|
115
|
+
modelVariableName,
|
|
116
|
+
queryParams
|
|
117
|
+
});
|
|
118
|
+
useMemo(() => {
|
|
119
|
+
loadModel();
|
|
120
|
+
}, cacheArgs);
|
|
121
|
+
useLayoutEffect(() => {
|
|
122
|
+
let reloadModelCallback;
|
|
123
|
+
if (args.events) {
|
|
124
|
+
reloadModelCallback = args.events.addListener("reloadModel", loadModel);
|
|
125
|
+
}
|
|
126
|
+
return () => {
|
|
127
|
+
if (reloadModelCallback) {
|
|
128
|
+
args.events.removeListener("reloadModel", loadModel);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}, [args.events]);
|
|
132
|
+
useLayoutEffect(() => {
|
|
133
|
+
let connectUpdated;
|
|
134
|
+
if (s.s.model && args.eventUpdated) {
|
|
135
|
+
connectUpdated = ModelEvents.connectUpdated(s.s.model, loadModel);
|
|
136
|
+
}
|
|
137
|
+
return () => {
|
|
138
|
+
connectUpdated?.unsubscribe();
|
|
139
|
+
};
|
|
140
|
+
}, [args.eventUpdated, s.s.model?.id()]);
|
|
141
|
+
useLayoutEffect(() => {
|
|
142
|
+
Devise.events().addListener("onDeviseSignIn", onSignedIn);
|
|
143
|
+
Devise.events().addListener("onDeviseSignOut", onSignedOut);
|
|
144
|
+
return () => {
|
|
145
|
+
Devise.events().removeListener("onDeviseSignIn", onSignedIn);
|
|
146
|
+
Devise.events().removeListener("onDeviseSignOut", onSignedOut);
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
useLayoutEffect(() => {
|
|
150
|
+
let connectDestroyed;
|
|
151
|
+
if (s.s.model && args.onDestroyed) {
|
|
152
|
+
connectDestroyed = ModelEvents.connectDestroyed(s.s.model, onDestroyed);
|
|
153
|
+
}
|
|
154
|
+
return () => {
|
|
155
|
+
connectDestroyed?.unsubscribe();
|
|
156
|
+
};
|
|
157
|
+
}, [args.onDestroyed, s.s.model?.id()]);
|
|
158
|
+
const result = {
|
|
159
|
+
model: s.s.model,
|
|
160
|
+
modelId,
|
|
161
|
+
notFound: s.s.notFound
|
|
162
|
+
};
|
|
163
|
+
result[modelVariableName] = s.s.model;
|
|
164
|
+
result[`${modelVariableName}Id`] = modelId;
|
|
165
|
+
result[`${modelVariableName}NotFound`] = s.s.notFound;
|
|
166
|
+
return result;
|
|
167
|
+
};
|
|
168
|
+
export default useModel;
|
|
169
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJEZXZpc2UiLCJpbmZsZWN0aW9uIiwiTW9kZWxFdmVudHMiLCJ1c2VRdWVyeVBhcmFtcyIsInVzZVNoYXBlIiwidXNlTW9kZWwiLCJtb2RlbENsYXNzQXJnIiwiYXJnc0FyZyIsInF1ZXJ5UGFyYW1zIiwiYXJncyIsIm1vZGVsQ2xhc3MiLCJzIiwidXNlU3RhdGVzIiwibW9kZWwiLCJ1bmRlZmluZWQiLCJub3RGb3VuZCIsInByb3BzIiwiYWN0aXZlIiwibWV0YSIsImNhbGxiYWNrIiwicGFyYW1zVmFyaWFibGVOYW1lIiwibW9kZWxOYW1lIiwicGFyYW1LZXkiLCJtb2RlbElkIiwibG9hZEJ5UXVlcnlQYXJhbSIsInF1ZXJ5IiwibWF0Y2giLCJFcnJvciIsInBhcmFtcyIsImlkIiwibW9kZWxWYXJpYWJsZU5hbWUiLCJjYW1lbGl6ZSIsIm1vZGVsQ2xhc3NEYXRhIiwibmFtZSIsImNhY2hlQXJncyIsImxvYWRFeGlzdGluZ01vZGVsIiwibSIsInJhbnNhY2siLCJpZF9lcSIsImNsb25lIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJhYmlsaXRpZXMiLCJwIiwicHJlbG9hZCIsInNlbGVjdCIsImZpcnN0Iiwic2V0IiwibG9hZE5ld01vZGVsIiwiTW9kZWxDbGFzcyIsIm1vZGVsRGF0YUZyb21QYXJhbXMiLCJkZWZhdWx0cyIsIm5ld0lmTm9JZCIsIm1vZGVsRGF0YSIsImFzc2lnbiIsIm5ld0F0dHJpYnV0ZXMiLCJpc05ld1JlY29yZCIsImRhdGEiLCJhIiwibG9hZE1vZGVsIiwib3B0aW9uYWwiLCJvbkRlc3Ryb3llZCIsImZvcndhcmRBcmdzIiwib25TaWduZWRJbiIsIm9uU2lnbmVkT3V0IiwicHVzaCIsInVwZGF0ZU1ldGEiLCJyZWxvYWRNb2RlbENhbGxiYWNrIiwiZXZlbnRzIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImNvbm5lY3RVcGRhdGVkIiwiZXZlbnRVcGRhdGVkIiwidW5zdWJzY3JpYmUiLCJjb25uZWN0RGVzdHJveWVkIiwicmVzdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1tb2RlbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgRGV2aXNlIGZyb20gXCIuL2RldmlzZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBNb2RlbEV2ZW50cyBmcm9tIFwiLi9tb2RlbC1ldmVudHNcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL2J1aWxkL3VzZS1xdWVyeS1wYXJhbXNcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvdXNlLXNoYXBlXCJcblxuY29uc3QgdXNlTW9kZWwgPSAobW9kZWxDbGFzc0FyZywgYXJnc0FyZyA9IHt9KSA9PiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuICBsZXQgYXJncywgbW9kZWxDbGFzc1xuXG4gIGlmICh0eXBlb2YgYXJnc0FyZyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBhcmdzID0gYXJnc0FyZyh7bW9kZWxDbGFzc30pXG4gIH0gZWxzZSB7XG4gICAgYXJncyA9IGFyZ3NBcmdcbiAgfVxuXG4gIGNvbnN0IHMgPSB1c2VTaGFwZShhcmdzKVxuXG4gIHMudXNlU3RhdGVzKHtcbiAgICBtb2RlbDogdW5kZWZpbmVkLFxuICAgIG5vdEZvdW5kOiB1bmRlZmluZWRcbiAgfSlcblxuICBpZiAoXCJhY3RpdmVcIiBpbiBzLnByb3BzICYmICFzLnByb3BzLmFjdGl2ZSkge1xuICAgIHMubWV0YS5hY3RpdmUgPSBmYWxzZVxuICB9IGVsc2Uge1xuICAgIHMubWV0YS5hY3RpdmUgPSB0cnVlXG4gIH1cblxuICBpZiAodHlwZW9mIG1vZGVsQ2xhc3NBcmcgPT0gXCJvYmplY3RcIikge1xuICAgIG1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzQXJnLmNhbGxiYWNrKHtxdWVyeVBhcmFtc30pXG4gIH0gZWxzZSB7XG4gICAgbW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NBcmdcbiAgfVxuXG4gIGNvbnN0IHBhcmFtc1ZhcmlhYmxlTmFtZSA9IGAke21vZGVsQ2xhc3MubW9kZWxOYW1lKCkucGFyYW1LZXkoKX1faWRgXG4gIGxldCBtb2RlbElkXG5cbiAgaWYgKGFyZ3MubG9hZEJ5UXVlcnlQYXJhbSkge1xuICAgIG1vZGVsSWQgPSBhcmdzLmxvYWRCeVF1ZXJ5UGFyYW0oe3F1ZXJ5UGFyYW1zfSlcbiAgfSBlbHNlIGlmICghYXJncy5xdWVyeSkge1xuICAgIGlmICghYXJncy5tYXRjaCkgdGhyb3cgbmV3IEVycm9yKFwiQm90aCAnbG9hZEJ5UXVlcnlQYXJhbScgYW5kICdtYXRjaCcgd2Fzbid0IGdpdmVuXCIpXG5cbiAgICBtb2RlbElkID0gYXJncy5tYXRjaC5wYXJhbXNbcGFyYW1zVmFyaWFibGVOYW1lXSB8fCBhcmdzLm1hdGNoLnBhcmFtcy5pZFxuICB9XG5cbiAgY29uc3QgbW9kZWxWYXJpYWJsZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lLCB0cnVlKVxuICBjb25zdCBjYWNoZUFyZ3MgPSBbbW9kZWxJZF1cblxuICBjb25zdCBsb2FkRXhpc3RpbmdNb2RlbCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBsZXQgcXVlcnlcblxuICAgIGlmIChzLm0ubW9kZWxJZCkge1xuICAgICAgcXVlcnkgPSBtb2RlbENsYXNzLnJhbnNhY2soe2lkX2VxOiBzLm0ubW9kZWxJZH0pXG4gICAgfSBlbHNlIGlmIChzLm0uYXJncy5xdWVyeSkge1xuICAgICAgcXVlcnkgPSBzLm0uYXJncy5xdWVyeS5jbG9uZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWwgSUQgd2FzIGdpdmVuOiAke3MubS5tb2RlbElkfSBieSAnJHtwYXJhbXNWYXJpYWJsZU5hbWV9JyBpbiBxdWVyeSBwYXJhbXM6ICR7T2JqZWN0LmtleXMocy5wcm9wcy5tYXRjaC5wYXJhbXMpLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIGlmIChzLnByb3BzLmFiaWxpdGllcykgcXVlcnkuYWJpbGl0aWVzKHMucC5hYmlsaXRpZXMpXG4gICAgaWYgKHMucHJvcHMucHJlbG9hZCkgcXVlcnkucHJlbG9hZChzLnAucHJlbG9hZClcbiAgICBpZiAocy5wcm9wcy5zZWxlY3QpIHF1ZXJ5LnNlbGVjdChzLnAuc2VsZWN0KVxuXG4gICAgY29uc3QgbW9kZWwgPSBhd2FpdCBxdWVyeS5maXJzdCgpXG5cbiAgICBzLnNldCh7bW9kZWwsIG5vdEZvdW5kOiAhbW9kZWx9KVxuICB9LCBbXSlcblxuICBjb25zdCBsb2FkTmV3TW9kZWwgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcbiAgICBjb25zdCBwYXJhbUtleSA9IE1vZGVsQ2xhc3MubW9kZWxOYW1lKCkucGFyYW1LZXkoKVxuICAgIGNvbnN0IG1vZGVsRGF0YUZyb21QYXJhbXMgPSBzLm0ucXVlcnlQYXJhbXNbcGFyYW1LZXldIHx8IHt9XG5cbiAgICBsZXQgZGVmYXVsdHMgPSB7fVxuXG4gICAgaWYgKHMucHJvcHMubmV3SWZOb0lkPy5kZWZhdWx0cykge1xuICAgICAgZGVmYXVsdHMgPSBhd2FpdCBzLnByb3BzLm5ld0lmTm9JZC5kZWZhdWx0cygpXG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxEYXRhID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0cywgcy5wcm9wcy5uZXdBdHRyaWJ1dGVzLCBtb2RlbERhdGFGcm9tUGFyYW1zKVxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsQ2xhc3Moe1xuICAgICAgaXNOZXdSZWNvcmQ6IHRydWUsXG4gICAgICBkYXRhOiB7YTogbW9kZWxEYXRhfVxuICAgIH0pXG5cbiAgICBzLnNldCh7bW9kZWx9KVxuICB9LCBbXSlcblxuICBjb25zdCBsb2FkTW9kZWwgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFzLm0uYWN0aXZlKSB7XG4gICAgICAvLyBOb3QgYWN0aXZlIC0gZG9uJ3QgZG8gYW55dGhpbmdcbiAgICB9IGVsc2UgaWYgKHMucHJvcHMubmV3SWZOb0lkICYmICFzLm0ubW9kZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGxvYWROZXdNb2RlbCgpXG4gICAgfSBlbHNlIGlmICghcy5wcm9wcy5vcHRpb25hbCB8fCBzLm0ubW9kZWxJZCB8IHMubS5hcmdzLnF1ZXJ5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgbG9hZEV4aXN0aW5nTW9kZWwoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3Qgb25EZXN0cm95ZWQgPSB1c2VDYWxsYmFjaygoe21vZGVsfSkgPT4ge1xuICAgIGNvbnN0IGZvcndhcmRBcmdzID0ge21vZGVsfVxuXG4gICAgZm9yd2FyZEFyZ3Nbcy5tLm1vZGVsVmFyaWFibGVOYW1lXSA9IG1vZGVsXG5cbiAgICBzLnAub25EZXN0cm95ZWQoZm9yd2FyZEFyZ3MpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IG9uU2lnbmVkSW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbG9hZE1vZGVsKClcbiAgfSwgW10pXG5cbiAgY29uc3Qgb25TaWduZWRPdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbG9hZE1vZGVsKClcbiAgfSwgW10pXG5cbiAgaWYgKGFyZ3MuY2FjaGVBcmdzKSB7XG4gICAgY2FjaGVBcmdzLnB1c2goLi4uYXJncy5jYWNoZUFyZ3MpXG4gIH1cblxuICBzLnVwZGF0ZU1ldGEoe2FyZ3MsIG1vZGVsSWQsIG1vZGVsVmFyaWFibGVOYW1lLCBxdWVyeVBhcmFtc30pXG5cbiAgdXNlTWVtbyhcbiAgICAoKSA9PiB7IGxvYWRNb2RlbCgpIH0sXG4gICAgY2FjaGVBcmdzXG4gIClcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGxldCByZWxvYWRNb2RlbENhbGxiYWNrXG5cbiAgICBpZiAoYXJncy5ldmVudHMpIHtcbiAgICAgIHJlbG9hZE1vZGVsQ2FsbGJhY2sgPSBhcmdzLmV2ZW50cy5hZGRMaXN0ZW5lcihcInJlbG9hZE1vZGVsXCIsIGxvYWRNb2RlbClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlbG9hZE1vZGVsQ2FsbGJhY2spIHtcbiAgICAgICAgYXJncy5ldmVudHMucmVtb3ZlTGlzdGVuZXIoXCJyZWxvYWRNb2RlbFwiLCBsb2FkTW9kZWwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbYXJncy5ldmVudHNdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNvbm5lY3RVcGRhdGVkXG5cbiAgICBpZiAocy5zLm1vZGVsICYmIGFyZ3MuZXZlbnRVcGRhdGVkKSB7XG4gICAgICBjb25uZWN0VXBkYXRlZCA9IE1vZGVsRXZlbnRzLmNvbm5lY3RVcGRhdGVkKHMucy5tb2RlbCwgbG9hZE1vZGVsKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25uZWN0VXBkYXRlZD8udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfSwgW2FyZ3MuZXZlbnRVcGRhdGVkLCBzLnMubW9kZWw/LmlkKCldKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgRGV2aXNlLmV2ZW50cygpLmFkZExpc3RlbmVyKFwib25EZXZpc2VTaWduSW5cIiwgb25TaWduZWRJbilcbiAgICBEZXZpc2UuZXZlbnRzKCkuYWRkTGlzdGVuZXIoXCJvbkRldmlzZVNpZ25PdXRcIiwgb25TaWduZWRPdXQpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgRGV2aXNlLmV2ZW50cygpLnJlbW92ZUxpc3RlbmVyKFwib25EZXZpc2VTaWduSW5cIiwgb25TaWduZWRJbilcbiAgICAgIERldmlzZS5ldmVudHMoKS5yZW1vdmVMaXN0ZW5lcihcIm9uRGV2aXNlU2lnbk91dFwiLCBvblNpZ25lZE91dClcbiAgICB9XG4gIH0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY29ubmVjdERlc3Ryb3llZFxuXG4gICAgaWYgKHMucy5tb2RlbCAmJiBhcmdzLm9uRGVzdHJveWVkKSB7XG4gICAgICBjb25uZWN0RGVzdHJveWVkID0gTW9kZWxFdmVudHMuY29ubmVjdERlc3Ryb3llZChzLnMubW9kZWwsIG9uRGVzdHJveWVkKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25uZWN0RGVzdHJveWVkPy51bnN1YnNjcmliZSgpXG4gICAgfVxuICB9LCBbYXJncy5vbkRlc3Ryb3llZCwgcy5zLm1vZGVsPy5pZCgpXSlcblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgbW9kZWw6IHMucy5tb2RlbCxcbiAgICBtb2RlbElkLFxuICAgIG5vdEZvdW5kOiBzLnMubm90Rm91bmRcbiAgfVxuXG4gIHJlc3VsdFttb2RlbFZhcmlhYmxlTmFtZV0gPSBzLnMubW9kZWxcbiAgcmVzdWx0W2Ake21vZGVsVmFyaWFibGVOYW1lfUlkYF0gPSBtb2RlbElkXG4gIHJlc3VsdFtgJHttb2RlbFZhcmlhYmxlTmFtZX1Ob3RGb3VuZGBdID0gcy5zLm5vdEZvdW5kXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VNb2RlbFxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxXQUFXLEVBQUVDLGVBQWUsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFDM0QsT0FBT0MsTUFBTSxNQUFNLFVBQVU7QUFDN0IsT0FBTyxLQUFLQyxVQUFVLE1BQU0sWUFBWTtBQUN4QyxPQUFPQyxXQUFXLE1BQU0sZ0JBQWdCO0FBQ3hDLE9BQU9DLGNBQWMsTUFBTSw0Q0FBNEM7QUFDdkUsT0FBT0MsUUFBUSxNQUFNLGlDQUFpQztBQUV0RCxNQUFNQyxRQUFRLEdBQUdBLENBQUNDLGFBQWEsRUFBRUMsT0FBTyxHQUFH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
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useCallback, useLayoutEffect, useMemo } from "react";
|
|
2
|
+
import useShape from "set-state-compare/src/use-shape";
|
|
3
|
+
const useResizeObserver = (element, callback) => {
|
|
4
|
+
const s = useShape({
|
|
5
|
+
callback
|
|
6
|
+
});
|
|
7
|
+
const onResize = useCallback((...args) => {
|
|
8
|
+
s.p.callback(...args);
|
|
9
|
+
}, []);
|
|
10
|
+
const observer = useMemo(() => new ResizeObserver(onResize), []);
|
|
11
|
+
useLayoutEffect(() => {
|
|
12
|
+
if (element) {
|
|
13
|
+
observer.observe(element);
|
|
14
|
+
}
|
|
15
|
+
return () => {
|
|
16
|
+
if (element) {
|
|
17
|
+
observer.disconnect();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}, [element]);
|
|
21
|
+
};
|
|
22
|
+
export default useResizeObserver;
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTaGFwZSIsInVzZVJlc2l6ZU9ic2VydmVyIiwiZWxlbWVudCIsImNhbGxiYWNrIiwicyIsIm9uUmVzaXplIiwiYXJncyIsInAiLCJvYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiXSwic291cmNlcyI6WyIuLi9zcmMvdXNlLXJlc2l6ZS1vYnNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgdXNlU2hhcGUgZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy91c2Utc2hhcGVcIlxuXG5jb25zdCB1c2VSZXNpemVPYnNlcnZlciA9IChlbGVtZW50LCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCBzID0gdXNlU2hhcGUoe2NhbGxiYWNrfSlcbiAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgIHMucC5jYWxsYmFjayguLi5hcmdzKVxuICB9LCBbXSlcbiAgY29uc3Qgb2JzZXJ2ZXIgPSB1c2VNZW1vKCgpID0+IG5ldyBSZXNpemVPYnNlcnZlcihvblJlc2l6ZSksIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbZWxlbWVudF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVJlc2l6ZU9ic2VydmVyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFdBQVcsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUMzRCxPQUFPQyxRQUFRLE1BQU0saUNBQWlDO0FBRXRELE1BQU1DLGlCQUFpQixHQUFHQSxDQUFDQyxPQUFPLEVBQUVDLFFBQVEsS0FBSztFQUMvQyxNQUFNQyxDQUFDLEdBQUdKLFFBQVEsQ0FBQztJQUFDRztFQUFRLENBQUMsQ0FBQztFQUM5QixNQUFNRSxRQUFRLEdBQUdSLFdBQVcsQ0FBQyxDQUFDLEdBQUdTLElBQUksS0FBSztJQUN4Q0YsQ0FBQyxDQUFDRyxDQUFDLENBQUNKLFFBQVEsQ0FBQyxHQUFHRyxJQUFJLENBQUM7RUFDdkIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNOLE1BQU1FLFFBQVEsR0FBR1QsT0FBTyxDQUFDLE1BQU0sSUFBSVUsY0FBYyxDQUFDSixRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFaEVQLGVBQWUsQ0FBQyxNQUFNO0lBQ3BCLElBQUlJLE9BQU8sRUFBRTtNQUNYTSxRQUFRLENBQUNFLE9BQU8sQ0FBQ1IsT0FBTyxDQUFDO0lBQzNCO0lBRUEsT0FBTyxNQUFNO01BQ1gsSUFBSUEsT0FBTyxFQUFFO1FBQ1hNLFFBQVEsQ0FBQ0csVUFBVSxDQUFDLENBQUM7TUFDdkI7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNULE9BQU8sQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVELGVBQWVELGlCQUFpQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import config from "./config";
|
|
2
|
+
import escapeStringRegexp from "escape-string-regexp";
|
|
3
|
+
import * as inflection from "inflection";
|
|
4
|
+
import PropTypes from "prop-types";
|
|
5
|
+
import propTypesExact from "prop-types-exact";
|
|
6
|
+
import { useCallback, useMemo } from "react";
|
|
7
|
+
import useShape from "set-state-compare/src/use-shape";
|
|
8
|
+
const useRouterPropTypes = propTypesExact({
|
|
9
|
+
locales: PropTypes.array.isRequired,
|
|
10
|
+
path: PropTypes.string,
|
|
11
|
+
routeDefinitions: PropTypes.object.isRequired,
|
|
12
|
+
routes: PropTypes.object.isRequired
|
|
13
|
+
});
|
|
14
|
+
const useRouter = props => {
|
|
15
|
+
PropTypes.checkPropTypes(useRouterPropTypes, props, "prop", "useRouter");
|
|
16
|
+
const s = useShape(props);
|
|
17
|
+
const findRouteParams = useCallback(routeDefinition => {
|
|
18
|
+
const result = [];
|
|
19
|
+
const parts = routeDefinition.path.split("/");
|
|
20
|
+
for (const part of parts) {
|
|
21
|
+
if (part.match(/^:([a-z_]+)$/)) result.push(part);
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}, []);
|
|
25
|
+
const getPath = useCallback(() => {
|
|
26
|
+
let path = s.p.path || window.location.pathname;
|
|
27
|
+
path = path.replace(/[/]+$/, "");
|
|
28
|
+
return path;
|
|
29
|
+
}, []);
|
|
30
|
+
const getRouteDefinitions = useCallback(() => s.p.routeDefinitions || config.getRouteDefinitions(), []);
|
|
31
|
+
const getRoutes = useCallback(() => s.p.routes || config.getRoutes(), []);
|
|
32
|
+
const parseRouteDefinitions = useCallback(() => {
|
|
33
|
+
const routeDefinitions = getRouteDefinitions();
|
|
34
|
+
const routes = getRoutes();
|
|
35
|
+
const regex = /:([A-z\d_]+)/;
|
|
36
|
+
const parsedRouteDefinitions = [];
|
|
37
|
+
for (const locale of s.p.locales) {
|
|
38
|
+
for (const routeDefinition of routeDefinitions.routes) {
|
|
39
|
+
const routePathName = `${inflection.camelize(routeDefinition.name, true)}Path`;
|
|
40
|
+
const params = findRouteParams(routeDefinition);
|
|
41
|
+
params.push({
|
|
42
|
+
locale
|
|
43
|
+
});
|
|
44
|
+
if (!(routePathName in routes)) throw new Error(`${routePathName} not found in routes: ${Object.keys(routes, ", ")}`);
|
|
45
|
+
const routePath = routes[routePathName](...params).replace(/[/]+$/, "");
|
|
46
|
+
const groups = [];
|
|
47
|
+
let pathRegexString = "^";
|
|
48
|
+
pathRegexString += escapeStringRegexp(routePath);
|
|
49
|
+
while (true) {
|
|
50
|
+
const match = pathRegexString.match(regex);
|
|
51
|
+
if (!match) break;
|
|
52
|
+
const variableName = match[1];
|
|
53
|
+
groups.push(variableName);
|
|
54
|
+
pathRegexString = pathRegexString.replace(match[0], "([^/]+)");
|
|
55
|
+
}
|
|
56
|
+
pathRegexString += "$";
|
|
57
|
+
const pathRegex = new RegExp(pathRegexString);
|
|
58
|
+
parsedRouteDefinitions.push({
|
|
59
|
+
groups,
|
|
60
|
+
pathRegex,
|
|
61
|
+
routeDefinition
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return parsedRouteDefinitions;
|
|
66
|
+
}, []);
|
|
67
|
+
const parsedRouteDefinitions = useMemo(() => parseRouteDefinitions(), []);
|
|
68
|
+
s.updateMeta({
|
|
69
|
+
parsedRouteDefinitions
|
|
70
|
+
});
|
|
71
|
+
const findMatchingRoute = useCallback(() => {
|
|
72
|
+
const path = getPath();
|
|
73
|
+
for (const parsedRouteDefinition of s.m.parsedRouteDefinitions) {
|
|
74
|
+
const match = path.match(parsedRouteDefinition.pathRegex);
|
|
75
|
+
let matched, params;
|
|
76
|
+
if (match) {
|
|
77
|
+
matched = true;
|
|
78
|
+
params = {};
|
|
79
|
+
for (const groupKey in parsedRouteDefinition.groups) {
|
|
80
|
+
const groupName = parsedRouteDefinition.groups[groupKey];
|
|
81
|
+
params[groupName] = match[Number(groupKey) + 1];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (path == "" && parsedRouteDefinition.routeDefinition.path == "/") matched = true;
|
|
85
|
+
if (matched) {
|
|
86
|
+
return {
|
|
87
|
+
params,
|
|
88
|
+
parsedRouteDefinition
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}, []);
|
|
93
|
+
const matchingRoute = findMatchingRoute();
|
|
94
|
+
const params = matchingRoute?.params || {};
|
|
95
|
+
const match = {
|
|
96
|
+
matchingRoute,
|
|
97
|
+
params
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
match
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export default useRouter;
|
|
104
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25maWciLCJlc2NhcGVTdHJpbmdSZWdleHAiLCJpbmZsZWN0aW9uIiwiUHJvcFR5cGVzIiwicHJvcFR5cGVzRXhhY3QiLCJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTaGFwZSIsInVzZVJvdXRlclByb3BUeXBlcyIsImxvY2FsZXMiLCJhcnJheSIsImlzUmVxdWlyZWQiLCJwYXRoIiwic3RyaW5nIiwicm91dGVEZWZpbml0aW9ucyIsIm9iamVjdCIsInJvdXRlcyIsInVzZVJvdXRlciIsInByb3BzIiwiY2hlY2tQcm9wVHlwZXMiLCJzIiwiZmluZFJvdXRlUGFyYW1zIiwicm91dGVEZWZpbml0aW9uIiwicmVzdWx0IiwicGFydHMiLCJzcGxpdCIsInBhcnQiLCJtYXRjaCIsInB1c2giLCJnZXRQYXRoIiwicCIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwiZ2V0Um91dGVEZWZpbml0aW9ucyIsImdldFJvdXRlcyIsInBhcnNlUm91dGVEZWZpbml0aW9ucyIsInJlZ2V4IiwicGFyc2VkUm91dGVEZWZpbml0aW9ucyIsImxvY2FsZSIsInJvdXRlUGF0aE5hbWUiLCJjYW1lbGl6ZSIsIm5hbWUiLCJwYXJhbXMiLCJFcnJvciIsIk9iamVjdCIsImtleXMiLCJyb3V0ZVBhdGgiLCJncm91cHMiLCJwYXRoUmVnZXhTdHJpbmciLCJ2YXJpYWJsZU5hbWUiLCJwYXRoUmVnZXgiLCJSZWdFeHAiLCJ1cGRhdGVNZXRhIiwiZmluZE1hdGNoaW5nUm91dGUiLCJwYXJzZWRSb3V0ZURlZmluaXRpb24iLCJtIiwibWF0Y2hlZCIsImdyb3VwS2V5IiwiZ3JvdXBOYW1lIiwiTnVtYmVyIiwibWF0Y2hpbmdSb3V0ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2Utcm91dGVyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiXG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gXCJlc2NhcGUtc3RyaW5nLXJlZ2V4cFwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgdXNlU2hhcGUgZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy91c2Utc2hhcGVcIlxuXG5jb25zdCB1c2VSb3V0ZXJQcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gIGxvY2FsZXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBwYXRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByb3V0ZURlZmluaXRpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHJvdXRlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59KVxuXG5jb25zdCB1c2VSb3V0ZXIgPSAocHJvcHMpID0+IHtcbiAgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKHVzZVJvdXRlclByb3BUeXBlcywgcHJvcHMsIFwicHJvcFwiLCBcInVzZVJvdXRlclwiKVxuXG4gIGNvbnN0IHMgPSB1c2VTaGFwZShwcm9wcylcblxuICBjb25zdCBmaW5kUm91dGVQYXJhbXMgPSB1c2VDYWxsYmFjaygocm91dGVEZWZpbml0aW9uKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW11cbiAgICBjb25zdCBwYXJ0cyA9IHJvdXRlRGVmaW5pdGlvbi5wYXRoLnNwbGl0KFwiL1wiKVxuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAocGFydC5tYXRjaCgvXjooW2Etel9dKykkLykpXG4gICAgICAgIHJlc3VsdC5wdXNoKHBhcnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCBbXSlcblxuICBjb25zdCBnZXRQYXRoID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxldCBwYXRoID0gcy5wLnBhdGggfHwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXG5cbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9bL10rJC8sIFwiXCIpXG5cbiAgICByZXR1cm4gcGF0aFxuICB9LCBbXSlcblxuICBjb25zdCBnZXRSb3V0ZURlZmluaXRpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4gcy5wLnJvdXRlRGVmaW5pdGlvbnMgfHwgY29uZmlnLmdldFJvdXRlRGVmaW5pdGlvbnMoKSwgW10pXG4gIGNvbnN0IGdldFJvdXRlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHMucC5yb3V0ZXMgfHwgY29uZmlnLmdldFJvdXRlcygpLCBbXSlcblxuICBjb25zdCBwYXJzZVJvdXRlRGVmaW5pdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVEZWZpbml0aW9ucyA9IGdldFJvdXRlRGVmaW5pdGlvbnMoKVxuICAgIGNvbnN0IHJvdXRlcyA9IGdldFJvdXRlcygpXG4gICAgY29uc3QgcmVnZXggPSAvOihbQS16XFxkX10rKS9cbiAgICBjb25zdCBwYXJzZWRSb3V0ZURlZmluaXRpb25zID0gW11cblxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIHMucC5sb2NhbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvdXRlRGVmaW5pdGlvbiBvZiByb3V0ZURlZmluaXRpb25zLnJvdXRlcykge1xuICAgICAgICBjb25zdCByb3V0ZVBhdGhOYW1lID0gYCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShyb3V0ZURlZmluaXRpb24ubmFtZSwgdHJ1ZSl9UGF0aGBcbiAgICAgICAgY29uc3QgcGFyYW1zID0gZmluZFJvdXRlUGFyYW1zKHJvdXRlRGVmaW5pdGlvbilcblxuICAgICAgICBwYXJhbXMucHVzaCh7bG9jYWxlfSlcblxuICAgICAgICBpZiAoIShyb3V0ZVBhdGhOYW1lIGluIHJvdXRlcykpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3JvdXRlUGF0aE5hbWV9IG5vdCBmb3VuZCBpbiByb3V0ZXM6ICR7T2JqZWN0LmtleXMocm91dGVzLCBcIiwgXCIpfWApXG5cbiAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gcm91dGVzW3JvdXRlUGF0aE5hbWVdKC4uLnBhcmFtcykucmVwbGFjZSgvWy9dKyQvLCBcIlwiKVxuICAgICAgICBjb25zdCBncm91cHMgPSBbXVxuICAgICAgICBsZXQgcGF0aFJlZ2V4U3RyaW5nID0gXCJeXCJcblxuICAgICAgICBwYXRoUmVnZXhTdHJpbmcgKz0gZXNjYXBlU3RyaW5nUmVnZXhwKHJvdXRlUGF0aClcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gcGF0aFJlZ2V4U3RyaW5nLm1hdGNoKHJlZ2V4KVxuXG4gICAgICAgICAgaWYgKCFtYXRjaCkgYnJlYWtcblxuICAgICAgICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IG1hdGNoWzFdXG5cbiAgICAgICAgICBncm91cHMucHVzaCh2YXJpYWJsZU5hbWUpXG5cbiAgICAgICAgICBwYXRoUmVnZXhTdHJpbmcgPSBwYXRoUmVnZXhTdHJpbmcucmVwbGFjZShtYXRjaFswXSwgXCIoW14vXSspXCIpXG4gICAgICAgIH1cblxuICAgICAgICBwYXRoUmVnZXhTdHJpbmcgKz0gXCIkXCJcblxuICAgICAgICBjb25zdCBwYXRoUmVnZXggPSBuZXcgUmVnRXhwKHBhdGhSZWdleFN0cmluZylcblxuICAgICAgICBwYXJzZWRSb3V0ZURlZmluaXRpb25zLnB1c2goe2dyb3VwcywgcGF0aFJlZ2V4LCByb3V0ZURlZmluaXRpb259KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWRSb3V0ZURlZmluaXRpb25zXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHBhcnNlZFJvdXRlRGVmaW5pdGlvbnMgPSB1c2VNZW1vKCgpID0+IHBhcnNlUm91dGVEZWZpbml0aW9ucygpLCBbXSlcblxuICBzLnVwZGF0ZU1ldGEoe3BhcnNlZFJvdXRlRGVmaW5pdGlvbnN9KVxuXG4gIGNvbnN0IGZpbmRNYXRjaGluZ1JvdXRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKClcblxuICAgIGZvciAoY29uc3QgcGFyc2VkUm91dGVEZWZpbml0aW9uIG9mIHMubS5wYXJzZWRSb3V0ZURlZmluaXRpb25zKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHBhdGgubWF0Y2gocGFyc2VkUm91dGVEZWZpbml0aW9uLnBhdGhSZWdleClcbiAgICAgIGxldCBtYXRjaGVkLCBwYXJhbXNcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoZWQgPSB0cnVlXG4gICAgICAgIHBhcmFtcyA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBncm91cEtleSBpbiBwYXJzZWRSb3V0ZURlZmluaXRpb24uZ3JvdXBzKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBOYW1lID0gcGFyc2VkUm91dGVEZWZpbml0aW9uLmdyb3Vwc1tncm91cEtleV1cblxuICAgICAgICAgIHBhcmFtc1tncm91cE5hbWVdID0gbWF0Y2hbTnVtYmVyKGdyb3VwS2V5KSArIDFdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGggPT0gXCJcIiAmJiBwYXJzZWRSb3V0ZURlZmluaXRpb24ucm91dGVEZWZpbml0aW9uLnBhdGggPT0gXCIvXCIpIG1hdGNoZWQgPSB0cnVlXG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICByZXR1cm4ge3BhcmFtcywgcGFyc2VkUm91dGVEZWZpbml0aW9ufVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgbWF0Y2hpbmdSb3V0ZSA9IGZpbmRNYXRjaGluZ1JvdXRlKClcbiAgY29uc3QgcGFyYW1zID0gbWF0Y2hpbmdSb3V0ZT8ucGFyYW1zIHx8IHt9XG4gIGNvbnN0IG1hdGNoID0ge1xuICAgIG1hdGNoaW5nUm91dGUsXG4gICAgcGFyYW1zXG4gIH1cblxuICByZXR1cm4ge21hdGNofVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VSb3V0ZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFVBQVU7QUFDN0IsT0FBT0Msa0JBQWtCLE1BQU0sc0JBQXNCO0FBQ3JELE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsY0FBYyxNQUFNLGtCQUFrQjtBQUM3QyxTQUFRQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQzFDLE9BQU9DLFFBQVEsTUFBTSxpQ0FBaUM7QUFFdEQsTUFBTUMsa0JBQWtCLEdBQUdKLGNBQWMsQ0FBQztFQUN4Q0ssT0FBTyxFQUFFTixTQUFTLENBQUNPLEtBQUssQ0FBQ0MsVUFBVTtFQUNuQ0MsSUFBSSxFQUFFVCxTQUFTLENBQUNVLE1BQU07RUFDdEJDLGdCQUFnQixFQUFFWCxTQUFTLENBQUNZLE1BQU0sQ0FBQ0osVUFBVTtFQUM3Q0ssTUFBTSxFQUFFYixTQUFTLENBQUNZLE1BQU0sQ0FBQ0o7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsTUFBTU0sU0FBUyxHQUFJQyxLQUFLLElBQUs7RUFDM0JmLFNBQVMsQ0FBQ2dCLGNBQWMsQ0FBQ1gsa0JBQWtCLEVBQUVVLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO0VBRXhFLE1BQU1FLENBQUMsR0FBR2IsUUFBUSxDQUFDVyxLQUFLLENBQUM7RUFFekIsTUFBTUcsZUFBZSxHQUFHaEIsV0FBVyxDQUFFaUIsZUFBZSxJQUFLO0lBQ3ZELE1BQU1DLE1BQU0sR0FBRyxFQUFFO0lBQ2pCLE1BQU1DLEtBQUssR0FBR0YsZUFBZSxDQUFDVixJQUFJLENBQUNhLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFFN0MsS0FBSyxNQUFNQyxJQUFJLElBQUlGLEtBQUssRUFBRTtNQUN4QixJQUFJRSxJQUFJLENBQUNDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFDNUJKLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDRixJQUFJLENBQUM7SUFDckI7SUFFQSxPQUFPSCxNQUFNO0VBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLE1BQU1NLE9BQU8sR0FBR3hCLFdBQVcsQ0FBQyxNQUFNO0lBQ2hDLElBQUlPLElBQUksR0FBR1EsQ0FBQyxDQUFDVSxDQUFDLENBQUNsQixJQUFJLElBQUltQixNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsUUFBUTtJQUUvQ3JCLElBQUksR0FBR0EsSUFBSSxDQUFDc0IsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFFaEMsT0FBT3RCLElBQUk7RUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sTUFBTXVCLG1CQUFtQixHQUFHOUIsV0FBVyxDQUFDLE1BQU1lLENBQUMsQ0FBQ1UsQ0FBQyxDQUFDaEIsZ0JBQWdCLElBQUlkLE1BQU0sQ0FBQ21DLG1CQUFtQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDdkcsTUFBTUMsU0FBUyxHQUFHL0IsV0FBVyxDQUFDLE1BQU1lLENBQUMsQ0FBQ1UsQ0FBQyxDQUFDZCxNQUFNLElBQUloQixNQUFNLENBQUNvQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUV6RSxNQUFNQyxxQkFBcUIsR0FBR2hDLFdBQVcsQ0FBQyxNQUFNO0lBQzlDLE1BQU1TLGdCQUFnQixHQUFHcUIsbUJBQW1CLENBQUMsQ0FBQztJQUM5QyxNQUFNbkIsTUFBTSxHQUFHb0IsU0FBUyxDQUFDLENBQUM7SUFDMUIsTUFBTUUsS0FBSyxHQUFHLGNBQWM7SUFDNUIsTUFBTUMsc0JBQXNCLEdBQUcsRUFBRTtJQUVqQyxLQUFLLE1BQU1DLE1BQU0sSUFBSXBCLENBQUMsQ0FBQ1UsQ0FBQyxDQUFDckIsT0FBTyxFQUFFO01BQ2hDLEtBQUssTUFBTWEsZUFBZSxJQUFJUixnQkFBZ0IsQ0FBQ0UsTUFBTSxFQUFFO1FBQ3JELE1BQU15QixhQUFhLEdBQUcsR0FBR3ZDLFVBQVUsQ0FBQ3dDLFFBQVEsQ0FBQ3BCLGVBQWUsQ0FBQ3FCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtRQUM5RSxNQUFNQyxNQUFNLEdBQUd2QixlQUFlLENBQUNDLGVBQWUsQ0FBQztRQUUvQ3NCLE1BQU0sQ0FBQ2hCLElBQUksQ0FBQztVQUFDWTtRQUFNLENBQUMsQ0FBQztRQUVyQixJQUFJLEVBQUVDLGFBQWEsSUFBSXpCLE1BQU0sQ0FBQyxFQUM1QixNQUFNLElBQUk2QixLQUFLLENBQUMsR0FBR0osYUFBYSx5QkFBeUJLLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFdkYsTUFBTWdDLFNBQVMsR0FBR2hDLE1BQU0sQ0FBQ3lCLGFBQWEsQ0FBQyxDQUFDLEdBQUdHLE1BQU0sQ0FBQyxDQUFDVixPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN2RSxNQUFNZSxNQUFNLEdBQUcsRUFBRTtRQUNqQixJQUFJQyxlQUFlLEdBQUcsR0FBRztRQUV6QkEsZUFBZSxJQUFJakQsa0JBQWtCLENBQUMrQyxTQUFTLENBQUM7UUFFaEQsT0FBTyxJQUFJLEVBQUU7VUFDWCxNQUFNckIsS0FBSyxHQUFHdUIsZUFBZSxDQUFDdkIsS0FBSyxDQUFDVyxLQUFLLENBQUM7VUFFMUMsSUFBSSxDQUFDWCxLQUFLLEVBQUU7VUFFWixNQUFNd0IsWUFBWSxHQUFHeEIsS0FBSyxDQUFDLENBQUMsQ0FBQztVQUU3QnNCLE1BQU0sQ0FBQ3JCLElBQUksQ0FBQ3VCLFlBQVksQ0FBQztVQUV6QkQsZUFBZSxHQUFHQSxlQUFlLENBQUNoQixPQUFPLENBQUNQLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7UUFDaEU7UUFFQXVCLGVBQWUsSUFBSSxHQUFHO1FBRXRCLE1BQU1FLFNBQVMsR0FBRyxJQUFJQyxNQUFNLENBQUNILGVBQWUsQ0FBQztRQUU3Q1gsc0JBQXNCLENBQUNYLElBQUksQ0FBQztVQUFDcUIsTUFBTTtVQUFFRyxTQUFTO1VBQUU5QjtRQUFlLENBQUMsQ0FBQztNQUNuRTtJQUNGO0lBRUEsT0FBT2lCLHNCQUFzQjtFQUMvQixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sTUFBTUEsc0JBQXNCLEdBQUdqQyxPQUFPLENBQUMsTUFBTStCLHFCQUFxQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFekVqQixDQUFDLENBQUNrQyxVQUFVLENBQUM7SUFBQ2Y7RUFBc0IsQ0FBQyxDQUFDO0VBRXRDLE1BQU1nQixpQkFBaUIsR0FBR2xELFdBQVcsQ0FBQyxNQUFNO0lBQzFDLE1BQU1PLElBQUksR0FBR2lCLE9BQU8sQ0FBQyxDQUFDO0lBRXRCLEtBQUssTUFBTTJCLHFCQUFxQixJQUFJcEMsQ0FBQyxDQUFDcUMsQ0FBQyxDQUFDbEIsc0JBQXNCLEVBQUU7TUFDOUQsTUFBTVosS0FBSyxHQUFHZixJQUFJLENBQUNlLEtBQUssQ0FBQzZCLHFCQUFxQixDQUFDSixTQUFTLENBQUM7TUFDekQsSUFBSU0sT0FBTyxFQUFFZCxNQUFNO01BRW5CLElBQUlqQixLQUFLLEVBQUU7UUFDVCtCLE9BQU8sR0FBRyxJQUFJO1FBQ2RkLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFWCxLQUFLLE1BQU1lLFFBQVEsSUFBSUgscUJBQXFCLENBQUNQLE1BQU0sRUFBRTtVQUNuRCxNQUFNVyxTQUFTLEdBQUdKLHFCQUFxQixDQUFDUCxNQUFNLENBQUNVLFFBQVEsQ0FBQztVQUV4RGYsTUFBTSxDQUFDZ0IsU0FBUyxDQUFDLEdBQUdqQyxLQUFLLENBQUNrQyxNQUFNLENBQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRDtNQUNGO01BRUEsSUFBSS9DLElBQUksSUFBSSxFQUFFLElBQUk0QyxxQkFBcUIsQ0FBQ2xDLGVBQWUsQ0FBQ1YsSUFBSSxJQUFJLEdBQUcsRUFBRThDLE9BQU8sR0FBRyxJQUFJO01BQ25GLElBQUlBLE9BQU8sRUFBRTtRQUNYLE9BQU87VUFBQ2QsTUFBTTtVQUFFWTtRQUFxQixDQUFDO01BQ3hDO0lBQ0Y7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sTUFBTU0sYUFBYSxHQUFHUCxpQkFBaUIsQ0FBQyxDQUFDO0VBQ3pDLE1BQU1YLE1BQU0sR0FBR2tCLGFBQWEsRUFBRWxCLE1BQU0sSUFBSSxDQUFDLENBQUM7RUFDMUMsTUFBTWpCLEtBQUssR0FBRztJQUNabUMsYUFBYTtJQUNibEI7RUFDRixDQUFDO0VBRUQsT0FBTztJQUFDakI7RUFBSyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxlQUFlVixTQUFTIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Platform, useWindowDimensions } from "react-native";
|
|
2
|
+
const getWindowLayout = width => {
|
|
3
|
+
if (width <= 575) {
|
|
4
|
+
return "xs";
|
|
5
|
+
} else if (width <= 767) {
|
|
6
|
+
return "sm";
|
|
7
|
+
} else if (width <= 991) {
|
|
8
|
+
return "md";
|
|
9
|
+
} else if (width <= 1199) {
|
|
10
|
+
return "lg";
|
|
11
|
+
} else if (width <= 1399) {
|
|
12
|
+
return "xl";
|
|
13
|
+
} else if (width >= 1400) {
|
|
14
|
+
return "xxl";
|
|
15
|
+
} else {
|
|
16
|
+
console.error(`Couldn't determine window layout from width: ${width}`);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const useScreenLayout = () => {
|
|
20
|
+
if (Platform.OS == "web") {
|
|
21
|
+
const shared = useMemo(() => ({}));
|
|
22
|
+
shared.width = window.innerWidth;
|
|
23
|
+
const [screenLayout, setScreenLayout] = useState(() => getWindowLayout(shared.width));
|
|
24
|
+
const onResize = useCallback(() => {
|
|
25
|
+
const newWindowLayout = getWindowLayout(window.innerWidth);
|
|
26
|
+
if (shared.screenlayout != newWindowLayout) {
|
|
27
|
+
setScreenLayout(newWindowLayout);
|
|
28
|
+
}
|
|
29
|
+
}, []);
|
|
30
|
+
useEventListener(window, "resize", onResize);
|
|
31
|
+
shared.screenLayout = screenLayout;
|
|
32
|
+
return shared.screenLayout;
|
|
33
|
+
} else {
|
|
34
|
+
const windowDimensions = useWindowDimensions();
|
|
35
|
+
return getWindowLayout(windowDimensions.width);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
export default useScreenLayout;
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbGF0Zm9ybSIsInVzZVdpbmRvd0RpbWVuc2lvbnMiLCJnZXRXaW5kb3dMYXlvdXQiLCJ3aWR0aCIsImNvbnNvbGUiLCJlcnJvciIsInVzZVNjcmVlbkxheW91dCIsIk9TIiwic2hhcmVkIiwidXNlTWVtbyIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJzY3JlZW5MYXlvdXQiLCJzZXRTY3JlZW5MYXlvdXQiLCJ1c2VTdGF0ZSIsIm9uUmVzaXplIiwidXNlQ2FsbGJhY2siLCJuZXdXaW5kb3dMYXlvdXQiLCJzY3JlZW5sYXlvdXQiLCJ1c2VFdmVudExpc3RlbmVyIiwid2luZG93RGltZW5zaW9ucyJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2Utc2NyZWVuLWxheW91dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BsYXRmb3JtLCB1c2VXaW5kb3dEaW1lbnNpb25zfSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcblxuY29uc3QgZ2V0V2luZG93TGF5b3V0ID0gKHdpZHRoKSA9PiB7XG4gIGlmICh3aWR0aCA8PSA1NzUpIHtcbiAgICByZXR1cm4gXCJ4c1wiXG4gIH0gZWxzZSBpZiAod2lkdGggPD0gNzY3KSB7XG4gICAgcmV0dXJuIFwic21cIlxuICB9IGVsc2UgaWYgKHdpZHRoIDw9IDk5MSkge1xuICAgIHJldHVybiBcIm1kXCJcbiAgfSBlbHNlIGlmICh3aWR0aCA8PSAxMTk5KSB7XG4gICAgcmV0dXJuIFwibGdcIlxuICB9IGVsc2UgaWYgKHdpZHRoIDw9IDEzOTkpIHtcbiAgICByZXR1cm4gXCJ4bFwiXG4gIH0gZWxzZSBpZiAod2lkdGggPj0gMTQwMCkge1xuICAgIHJldHVybiBcInh4bFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgQ291bGRuJ3QgZGV0ZXJtaW5lIHdpbmRvdyBsYXlvdXQgZnJvbSB3aWR0aDogJHt3aWR0aH1gKVxuICB9XG59XG5cbmNvbnN0IHVzZVNjcmVlbkxheW91dCA9ICgpID0+IHtcbiAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICBjb25zdCBzaGFyZWQgPSB1c2VNZW1vKCgpID0+ICh7fSkpXG5cbiAgICBzaGFyZWQud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuXG4gICAgY29uc3QgW3NjcmVlbkxheW91dCwgc2V0U2NyZWVuTGF5b3V0XSA9IHVzZVN0YXRlKCgpID0+IGdldFdpbmRvd0xheW91dChzaGFyZWQud2lkdGgpKVxuXG4gICAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBuZXdXaW5kb3dMYXlvdXQgPSBnZXRXaW5kb3dMYXlvdXQod2luZG93LmlubmVyV2lkdGgpXG5cbiAgICAgIGlmIChzaGFyZWQuc2NyZWVubGF5b3V0ICE9IG5ld1dpbmRvd0xheW91dCkge1xuICAgICAgICBzZXRTY3JlZW5MYXlvdXQobmV3V2luZG93TGF5b3V0KVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwicmVzaXplXCIsIG9uUmVzaXplKVxuXG4gICAgc2hhcmVkLnNjcmVlbkxheW91dCA9IHNjcmVlbkxheW91dFxuXG4gICAgcmV0dXJuIHNoYXJlZC5zY3JlZW5MYXlvdXRcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB3aW5kb3dEaW1lbnNpb25zID0gdXNlV2luZG93RGltZW5zaW9ucygpXG5cbiAgICByZXR1cm4gZ2V0V2luZG93TGF5b3V0KHdpbmRvd0RpbWVuc2lvbnMud2lkdGgpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlU2NyZWVuTGF5b3V0XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFFBQVEsRUFBRUMsbUJBQW1CLFFBQU8sY0FBYztBQUUxRCxNQUFNQyxlQUFlLEdBQUlDLEtBQUssSUFBSztFQUNqQyxJQUFJQSxLQUFLLElBQUksR0FBRyxFQUFFO0lBQ2hCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sS0FBSztFQUNkLENBQUMsTUFBTTtJQUNMQyxPQUFPLENBQUNDLEtBQUssQ0FBQyxnREFBZ0RGLEtBQUssRUFBRSxDQUFDO0VBQ3hFO0FBQ0YsQ0FBQztBQUVELE1BQU1HLGVBQWUsR0FBR0EsQ0FBQSxLQUFNO0VBQzVCLElBQUlOLFFBQVEsQ0FBQ08sRUFBRSxJQUFJLEtBQUssRUFBRTtJQUN4QixNQUFNQyxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbENELE1BQU0sQ0FBQ0wsS0FBSyxHQUFHTyxNQUFNLENBQUNDLFVBQVU7SUFFaEMsTUFBTSxDQUFDQyxZQUFZLEVBQUVDLGVBQWUsQ0FBQyxHQUFHQyxRQUFRLENBQUMsTUFBTVosZUFBZSxDQUFDTSxNQUFNLENBQUNMLEtBQUssQ0FBQyxDQUFDO0lBRXJGLE1BQU1ZLFFBQVEsR0FBR0MsV0FBVyxDQUFDLE1BQU07TUFDakMsTUFBTUMsZUFBZSxHQUFHZixlQUFlLENBQUNRLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDO01BRTFELElBQUlILE1BQU0sQ0FBQ1UsWUFBWSxJQUFJRCxlQUFlLEVBQUU7UUFDMUNKLGVBQWUsQ0FBQ0ksZUFBZSxDQUFDO01BQ2xDO0lBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUVORSxnQkFBZ0IsQ0FBQ1QsTUFBTSxFQUFFLFFBQVEsRUFBRUssUUFBUSxDQUFDO0lBRTVDUCxNQUFNLENBQUNJLFlBQVksR0FBR0EsWUFBWTtJQUVsQyxPQUFPSixNQUFNLENBQUNJLFlBQVk7RUFDNUIsQ0FBQyxNQUFNO0lBQ0wsTUFBTVEsZ0JBQWdCLEdBQUduQixtQkFBbUIsQ0FBQyxDQUFDO0lBRTlDLE9BQU9DLGVBQWUsQ0FBQ2tCLGdCQUFnQixDQUFDakIsS0FBSyxDQUFDO0VBQ2hEO0FBQ0YsQ0FBQztBQUVELGVBQWVHLGVBQWUiLCJpZ25vcmVMaXN0IjpbXX0=
|