@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
package/src/with-router.jsx
CHANGED
|
@@ -1,133 +1,11 @@
|
|
|
1
|
-
import config from "./config.mjs"
|
|
2
|
-
import escapeStringRegexp from "escape-string-regexp"
|
|
3
|
-
import inflection from "inflection"
|
|
4
|
-
import PropTypes from "prop-types"
|
|
5
1
|
import React from "react"
|
|
6
|
-
import
|
|
2
|
+
import useRouter from "./use-router"
|
|
7
3
|
|
|
8
|
-
export default (WrapperComponent) =>
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
routeDefinitions: PropTypes.object,
|
|
12
|
-
routes: PropTypes.object
|
|
13
|
-
}
|
|
4
|
+
export default (WrapperComponent) => (props) => {
|
|
5
|
+
const {path, routes, routeDefinitions, ...restProps} = props
|
|
6
|
+
const {match} = useRouter({path, routes, routeDefinitions})
|
|
14
7
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return shouldComponentUpdate(this, nextProps, nextState)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
findRouteParams(routeDefinition) {
|
|
22
|
-
const result = []
|
|
23
|
-
const parts = routeDefinition.path.split("/")
|
|
24
|
-
|
|
25
|
-
for (const part of parts) {
|
|
26
|
-
if (part.match(/^:([a-z_]+)$/))
|
|
27
|
-
result.push(part)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return result
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
path() {
|
|
34
|
-
let path = this.props.path || window.location.pathname
|
|
35
|
-
|
|
36
|
-
path = path.replace(/[/]+$/, "")
|
|
37
|
-
|
|
38
|
-
return path
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
routeDefinitions() {
|
|
42
|
-
return this.props.routeDefinitions || config.getRouteDefinitions()
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
routes() {
|
|
46
|
-
return this.props.routes || config.getRoutes()
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
parseRouteDefinitions() {
|
|
50
|
-
const Locales = require("shared/locales").default
|
|
51
|
-
const routeDefinitions = this.routeDefinitions()
|
|
52
|
-
const routes = this.routes()
|
|
53
|
-
const regex = /:([A-z\d_]+)/
|
|
54
|
-
const parsedRouteDefinitions = []
|
|
55
|
-
|
|
56
|
-
for (const locale of Locales.availableLocales()) {
|
|
57
|
-
for (const routeDefinition of routeDefinitions.routes) {
|
|
58
|
-
const routePathName = `${inflection.camelize(routeDefinition.name, true)}Path`
|
|
59
|
-
const params = this.findRouteParams(routeDefinition)
|
|
60
|
-
|
|
61
|
-
params.push({locale})
|
|
62
|
-
|
|
63
|
-
if (!(routePathName in routes))
|
|
64
|
-
throw new Error(`${routePathName} not found in routes: ${Object.keys(routes, ", ")}`)
|
|
65
|
-
|
|
66
|
-
const routePath = routes[routePathName](...params).replace(/[/]+$/, "")
|
|
67
|
-
const groups = []
|
|
68
|
-
let pathRegexString = "^"
|
|
69
|
-
|
|
70
|
-
pathRegexString += escapeStringRegexp(routePath)
|
|
71
|
-
|
|
72
|
-
while (true) {
|
|
73
|
-
const match = pathRegexString.match(regex)
|
|
74
|
-
|
|
75
|
-
if (!match) break
|
|
76
|
-
|
|
77
|
-
const variableName = match[1]
|
|
78
|
-
|
|
79
|
-
groups.push(variableName)
|
|
80
|
-
|
|
81
|
-
pathRegexString = pathRegexString.replace(match[0], "([^/]+)")
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
pathRegexString += "$"
|
|
85
|
-
|
|
86
|
-
const pathRegex = new RegExp(pathRegexString)
|
|
87
|
-
|
|
88
|
-
parsedRouteDefinitions.push({groups, pathRegex, routeDefinition})
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return parsedRouteDefinitions
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
findMatchingRoute() {
|
|
96
|
-
const path = this.path()
|
|
97
|
-
|
|
98
|
-
for (const parsedRouteDefinition of this.parsedRouteDefinitions) {
|
|
99
|
-
const match = path.match(parsedRouteDefinition.pathRegex)
|
|
100
|
-
let matched, params
|
|
101
|
-
|
|
102
|
-
if (match) {
|
|
103
|
-
matched = true
|
|
104
|
-
params = {}
|
|
105
|
-
|
|
106
|
-
for (const groupKey in parsedRouteDefinition.groups) {
|
|
107
|
-
const groupName = parsedRouteDefinition.groups[groupKey]
|
|
108
|
-
|
|
109
|
-
params[groupName] = match[Number(groupKey) + 1]
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (path == "" && parsedRouteDefinition.routeDefinition.path == "/") matched = true
|
|
114
|
-
if (matched) {
|
|
115
|
-
return {params, parsedRouteDefinition}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
render() {
|
|
121
|
-
const {path, routes, routeDefinitions, ...restProps} = this.props
|
|
122
|
-
const matchingRoute = this.findMatchingRoute()
|
|
123
|
-
const params = matchingRoute?.params || {}
|
|
124
|
-
const match = {
|
|
125
|
-
matchingRoute,
|
|
126
|
-
params
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return (
|
|
130
|
-
<WrapperComponent match={match} {...restProps} />
|
|
131
|
-
)
|
|
132
|
-
}
|
|
8
|
+
return (
|
|
9
|
+
<WrapperComponent match={match} {...restProps} />
|
|
10
|
+
)
|
|
133
11
|
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import BaseModel from "../src/base-model.mjs"
|
|
2
|
-
import CustomError from "../src/custom-error.mjs"
|
|
3
|
-
import {jest} from "@jest/globals"
|
|
4
|
-
import {JSDOM} from "jsdom"
|
|
5
|
-
import ValidationError from "../src/validation-error.mjs"
|
|
6
|
-
import User from "./support/user.mjs"
|
|
7
|
-
|
|
8
|
-
jest.mock("@rails/actioncable", () => ({
|
|
9
|
-
createConsumer: () => ({})
|
|
10
|
-
}))
|
|
11
|
-
|
|
12
|
-
const {window} = new JSDOM()
|
|
13
|
-
const document = window.document
|
|
14
|
-
|
|
15
|
-
describe("BaseModel", () => {
|
|
16
|
-
describe("identifierKey", () => {
|
|
17
|
-
it("returns the id when persisted", () => {
|
|
18
|
-
const user = new User({a: {id: 5}})
|
|
19
|
-
|
|
20
|
-
expect(user.identifierKey()).toEqual(5)
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it("returns the unique key when new record", () => {
|
|
24
|
-
const user = new User({isNewRecord: true})
|
|
25
|
-
|
|
26
|
-
user.uniqueKey = () => 45
|
|
27
|
-
|
|
28
|
-
expect(user.identifierKey()).toEqual(45)
|
|
29
|
-
})
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
describe("update", () => {
|
|
33
|
-
it("aborts if no changes", async () => {
|
|
34
|
-
const model = new BaseModel()
|
|
35
|
-
|
|
36
|
-
// This will fail because of missing setup if it doesn't abort.
|
|
37
|
-
const response = await model.update({})
|
|
38
|
-
|
|
39
|
-
// There will be extra objects in the hash if it actually calls the backend.
|
|
40
|
-
expect(response).toEqual({model})
|
|
41
|
-
})
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
describe("parseValidationErrors", () => {
|
|
45
|
-
const error = new CustomError("Some validation error", {
|
|
46
|
-
response: {
|
|
47
|
-
validation_errors: []
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
const form = document.createElement("form")
|
|
51
|
-
const model = new BaseModel()
|
|
52
|
-
const dispatchEventSpy = jest.spyOn(form, "dispatchEvent").mockImplementation(() => "asd")
|
|
53
|
-
const newCustomEventSpy = jest.spyOn(BaseModel, "newCustomEvent").mockImplementation(() => "asd")
|
|
54
|
-
|
|
55
|
-
it("throws the validation errors if no options are given", () => {
|
|
56
|
-
expect(() => BaseModel.parseValidationErrors({error, model})).toThrow(ValidationError)
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
it("throws the validation errors and dispatches an event to the form", () => {
|
|
60
|
-
expect(() => BaseModel.parseValidationErrors({error, model, options: {form}})).toThrow(ValidationError)
|
|
61
|
-
expect(dispatchEventSpy).toHaveBeenCalled()
|
|
62
|
-
expect(newCustomEventSpy).toHaveBeenCalled()
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it("doesnt throw validation errors if disabled", () => {
|
|
66
|
-
BaseModel.parseValidationErrors({error, model, options: {throwValidationError: false}})
|
|
67
|
-
expect(dispatchEventSpy).toHaveBeenCalled()
|
|
68
|
-
expect(newCustomEventSpy).toHaveBeenCalled()
|
|
69
|
-
})
|
|
70
|
-
})
|
|
71
|
-
})
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import CableConnectionPool from "../src/cable-connection-pool.mjs"
|
|
2
|
-
import CableSubscriptionPool from "../src/cable-subscription-pool.mjs"
|
|
3
|
-
import {digg} from "diggerize"
|
|
4
|
-
import {jest} from "@jest/globals"
|
|
5
|
-
|
|
6
|
-
jest.mock("@rails/actioncable", () => ({
|
|
7
|
-
createConsumer: () => ({})
|
|
8
|
-
}))
|
|
9
|
-
|
|
10
|
-
describe("CableConnectionPool", () => {
|
|
11
|
-
describe("connectCreated", () => {
|
|
12
|
-
it("creates a new create event and connects", () => {
|
|
13
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
14
|
-
|
|
15
|
-
cableConnectionPool.scheduleConnectUpcoming = function () {
|
|
16
|
-
const subscriptionData = this.upcomingSubscriptionData
|
|
17
|
-
const subscriptions = this.upcomingSubscriptions
|
|
18
|
-
|
|
19
|
-
this.upcomingSubscriptionData = {}
|
|
20
|
-
this.upcomingSubscriptions = {}
|
|
21
|
-
|
|
22
|
-
const cableSubscriptionPool = {subscriptionData, subscriptions}
|
|
23
|
-
|
|
24
|
-
this.cableSubscriptionPools.push(cableSubscriptionPool)
|
|
25
|
-
}
|
|
26
|
-
cableConnectionPool.cableSubscriptionPools = []
|
|
27
|
-
cableConnectionPool.connectCreated("Contact", () => console.log("Callback"))
|
|
28
|
-
|
|
29
|
-
expect(cableConnectionPool.cableSubscriptionPools.length).toEqual(1)
|
|
30
|
-
|
|
31
|
-
const newCableSubscriptionPool = digg(cableConnectionPool, "cableSubscriptionPools", 0)
|
|
32
|
-
const subscriptions = digg(newCableSubscriptionPool, "subscriptions", "Contact", "creates")
|
|
33
|
-
|
|
34
|
-
expect(subscriptions.length).toEqual(1)
|
|
35
|
-
})
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
describe("connectDestroyed", () => {
|
|
39
|
-
it("creates a new destroy event and connects", () => {
|
|
40
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
41
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
42
|
-
|
|
43
|
-
cableSubscriptionPool.subscriptions = {
|
|
44
|
-
Contact: {
|
|
45
|
-
updates: {
|
|
46
|
-
modelId: []
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
cableConnectionPool.scheduleConnectUpcoming = function () {
|
|
52
|
-
const subscriptionData = this.upcomingSubscriptionData
|
|
53
|
-
const subscriptions = this.upcomingSubscriptions
|
|
54
|
-
|
|
55
|
-
this.upcomingSubscriptionData = {}
|
|
56
|
-
this.upcomingSubscriptions = {}
|
|
57
|
-
|
|
58
|
-
const cableSubscriptionPool = {subscriptionData, subscriptions}
|
|
59
|
-
|
|
60
|
-
this.cableSubscriptionPools.push(cableSubscriptionPool)
|
|
61
|
-
}
|
|
62
|
-
cableConnectionPool.cableSubscriptionPools = [cableSubscriptionPool]
|
|
63
|
-
cableConnectionPool.connectDestroyed("Contact", "modelId", () => { })
|
|
64
|
-
|
|
65
|
-
expect(cableConnectionPool.cableSubscriptionPools.length).toEqual(2)
|
|
66
|
-
|
|
67
|
-
const newCableSubscriptionPool = cableConnectionPool.cableSubscriptionPools[1]
|
|
68
|
-
const subscriptions = digg(newCableSubscriptionPool, "subscriptions", "Contact", "destroys", "modelId")
|
|
69
|
-
|
|
70
|
-
expect(subscriptions.length).toEqual(1)
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
it("connects to an existing destroy event", () => {
|
|
74
|
-
let connectedUnsubscribeEvent = false
|
|
75
|
-
|
|
76
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
77
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
78
|
-
|
|
79
|
-
cableSubscriptionPool.connected = true
|
|
80
|
-
cableSubscriptionPool.connectUnsubscriptionForSubscription = function () {
|
|
81
|
-
connectedUnsubscribeEvent = true
|
|
82
|
-
}
|
|
83
|
-
cableSubscriptionPool.subscriptions = {
|
|
84
|
-
Contact: {
|
|
85
|
-
destroys: {
|
|
86
|
-
modelId: []
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
cableConnectionPool.connectUpcoming = () => console.log("connectUpcoming")
|
|
92
|
-
cableConnectionPool.cableSubscriptionPools = [cableSubscriptionPool]
|
|
93
|
-
cableConnectionPool.connectDestroyed("Contact", "modelId", () => { })
|
|
94
|
-
|
|
95
|
-
const subscriptions = digg(cableSubscriptionPool, "subscriptions", "Contact", "destroys", "modelId")
|
|
96
|
-
|
|
97
|
-
expect(subscriptions.length).toEqual(1)
|
|
98
|
-
expect(connectedUnsubscribeEvent).toEqual(true)
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
it("doesnt connect to an existing destroy event that is disconnected", () => {
|
|
102
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
103
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
104
|
-
|
|
105
|
-
cableSubscriptionPool.subscriptions = {
|
|
106
|
-
Contact: {
|
|
107
|
-
destroys: {
|
|
108
|
-
modelId: []
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
cableConnectionPool.connected = false
|
|
114
|
-
cableConnectionPool.connectUpcoming = function () {
|
|
115
|
-
const subscriptionData = this.upcomingSubscriptionData
|
|
116
|
-
const subscriptions = this.upcomingSubscriptions
|
|
117
|
-
|
|
118
|
-
this.upcomingSubscriptionData = {}
|
|
119
|
-
this.upcomingSubscriptions = {}
|
|
120
|
-
|
|
121
|
-
const cableSubscriptionPool = {subscriptionData, subscriptions}
|
|
122
|
-
|
|
123
|
-
this.cableSubscriptionPools.push(cableSubscriptionPool)
|
|
124
|
-
}
|
|
125
|
-
cableConnectionPool.cableSubscriptionPools = [cableSubscriptionPool]
|
|
126
|
-
cableConnectionPool.scheduleConnectUpcoming = () => cableConnectionPool.connectUpcoming()
|
|
127
|
-
cableConnectionPool.connectDestroyed("Contact", "modelId", () => { })
|
|
128
|
-
|
|
129
|
-
const subscriptions = digg(cableSubscriptionPool, "subscriptions", "Contact", "destroys", "modelId")
|
|
130
|
-
|
|
131
|
-
expect(subscriptions.length).toEqual(0)
|
|
132
|
-
expect(cableConnectionPool.cableSubscriptionPools.length).toEqual(2)
|
|
133
|
-
})
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
describe("connectUpdate", () => {
|
|
137
|
-
it("creates a new update event and connects", () => {
|
|
138
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
139
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
140
|
-
|
|
141
|
-
cableSubscriptionPool.subscriptions = {
|
|
142
|
-
Contact: {
|
|
143
|
-
destroys: {
|
|
144
|
-
modelId: []
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
cableConnectionPool.scheduleConnectUpcoming = function () {
|
|
150
|
-
const subscriptionData = this.upcomingSubscriptionData
|
|
151
|
-
const subscriptions = this.upcomingSubscriptions
|
|
152
|
-
|
|
153
|
-
this.upcomingSubscriptionData = {}
|
|
154
|
-
this.upcomingSubscriptions = {}
|
|
155
|
-
|
|
156
|
-
const cableSubscriptionPool = {subscriptionData, subscriptions}
|
|
157
|
-
|
|
158
|
-
this.cableSubscriptionPools.push(cableSubscriptionPool)
|
|
159
|
-
}
|
|
160
|
-
cableConnectionPool.cableSubscriptionPools = [cableSubscriptionPool]
|
|
161
|
-
cableConnectionPool.connectUpdate("Contact", "modelId", () => console.log("Update callback"))
|
|
162
|
-
|
|
163
|
-
expect(cableConnectionPool.cableSubscriptionPools.length).toEqual(2)
|
|
164
|
-
|
|
165
|
-
const newCableSubscriptionPool = cableConnectionPool.cableSubscriptionPools[1]
|
|
166
|
-
const subscriptions = digg(newCableSubscriptionPool, "subscriptions", "Contact", "updates", "modelId")
|
|
167
|
-
|
|
168
|
-
expect(subscriptions.length).toEqual(1)
|
|
169
|
-
})
|
|
170
|
-
|
|
171
|
-
it("connects to an existing update event", () => {
|
|
172
|
-
let connectedUnsubscribeEvent = false
|
|
173
|
-
|
|
174
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
175
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
176
|
-
|
|
177
|
-
cableSubscriptionPool.connected = true
|
|
178
|
-
cableSubscriptionPool.connectUnsubscriptionForSubscription = function () {
|
|
179
|
-
connectedUnsubscribeEvent = true
|
|
180
|
-
}
|
|
181
|
-
cableSubscriptionPool.subscriptions = {
|
|
182
|
-
Contact: {
|
|
183
|
-
updates: {
|
|
184
|
-
modelId: []
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
cableConnectionPool.connectUpcoming = () => console.log("connectUpcoming")
|
|
190
|
-
cableConnectionPool.cableSubscriptionPools = [cableSubscriptionPool]
|
|
191
|
-
cableConnectionPool.connectUpdate("Contact", "modelId", () => { })
|
|
192
|
-
|
|
193
|
-
const subscriptions = digg(cableSubscriptionPool, "subscriptions", "Contact", "updates", "modelId")
|
|
194
|
-
|
|
195
|
-
expect(subscriptions.length).toEqual(1)
|
|
196
|
-
expect(connectedUnsubscribeEvent).toEqual(true)
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
it("connects to an existing update event if the model ID is truthy like 1 is", () => {
|
|
200
|
-
let connectedUnsubscribeEvent = false
|
|
201
|
-
|
|
202
|
-
const cableConnectionPool = new CableConnectionPool()
|
|
203
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
204
|
-
|
|
205
|
-
cableSubscriptionPool.connected = true
|
|
206
|
-
cableSubscriptionPool.connectUnsubscriptionForSubscription = function () {
|
|
207
|
-
connectedUnsubscribeEvent = true
|
|
208
|
-
}
|
|
209
|
-
cableSubscriptionPool.subscriptions = {
|
|
210
|
-
Contact: {
|
|
211
|
-
updates: {
|
|
212
|
-
1: []
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
cableConnectionPool.connectUpcoming = () => console.log("connectUpcoming")
|
|
218
|
-
cableConnectionPool.cableSubscriptionPools = [cableSubscriptionPool]
|
|
219
|
-
cableConnectionPool.connectUpdate("Contact", 1, () => console.log("Update callback called"))
|
|
220
|
-
|
|
221
|
-
const subscriptions = digg(cableSubscriptionPool, "subscriptions", "Contact", "updates", 1)
|
|
222
|
-
|
|
223
|
-
expect(subscriptions.length).toEqual(1)
|
|
224
|
-
expect(connectedUnsubscribeEvent).toEqual(true)
|
|
225
|
-
})
|
|
226
|
-
})
|
|
227
|
-
})
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
jest.mock("@rails/actioncable", () => ({
|
|
2
|
-
createConsumer: () => ({})
|
|
3
|
-
}))
|
|
4
|
-
import CableSubscriptionPool from "../src/cable-subscription-pool.mjs"
|
|
5
|
-
|
|
6
|
-
describe("CableSubscriptionPool", () => {
|
|
7
|
-
describe("onUnsubscribe", () => {
|
|
8
|
-
it("unsubscribes from ActionCable", () => {
|
|
9
|
-
const cableSubscriptionPool = new CableSubscriptionPool()
|
|
10
|
-
|
|
11
|
-
let unsubscribeCalled = false
|
|
12
|
-
|
|
13
|
-
cableSubscriptionPool.activeSubscriptions = 1
|
|
14
|
-
cableSubscriptionPool.subscription = {
|
|
15
|
-
unsubscribe: () => {
|
|
16
|
-
unsubscribeCalled = true
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
cableSubscriptionPool.onUnsubscribe()
|
|
20
|
-
|
|
21
|
-
expect(unsubscribeCalled).toEqual(true)
|
|
22
|
-
expect(cableSubscriptionPool.activeSubscriptions).toEqual(0)
|
|
23
|
-
expect(cableSubscriptionPool.isConnected()).toEqual(false)
|
|
24
|
-
})
|
|
25
|
-
})
|
|
26
|
-
})
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import CanCan from "../src/can-can.mjs"
|
|
2
|
-
import {jest} from "@jest/globals"
|
|
3
|
-
|
|
4
|
-
jest.mock("../src/services.mjs")
|
|
5
|
-
|
|
6
|
-
describe("CanCan", () => {
|
|
7
|
-
const canCan = CanCan.current()
|
|
8
|
-
|
|
9
|
-
describe("resetAbilities", () => {
|
|
10
|
-
test("that reset abilities and load abilities not have concurrency issues", async () => {
|
|
11
|
-
import Services from "../src/services.mjs"
|
|
12
|
-
const mockedCurrent = jest.fn().mockReturnValue({
|
|
13
|
-
sendRequest: async () => ({abilities: ["loaded"]})
|
|
14
|
-
})
|
|
15
|
-
Services.current = mockedCurrent
|
|
16
|
-
|
|
17
|
-
const loadAbilitiesPromise = canCan.loadAbilities([["user", ["read"]]])
|
|
18
|
-
const resetPromise = canCan.resetAbilities()
|
|
19
|
-
|
|
20
|
-
await Promise.all([loadAbilitiesPromise, resetPromise])
|
|
21
|
-
|
|
22
|
-
expect(canCan.abilities).toEqual([])
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it("dispatches an event", async () => {
|
|
26
|
-
const eventListener = jest.fn()
|
|
27
|
-
canCan.events.addListener("onResetAbilities", eventListener)
|
|
28
|
-
|
|
29
|
-
await canCan.resetAbilities()
|
|
30
|
-
|
|
31
|
-
expect(eventListener).toHaveBeenCalled()
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
})
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import Collection from "../src/collection.mjs"
|
|
2
|
-
|
|
3
|
-
describe("Collection", () => {
|
|
4
|
-
describe("count", () => {
|
|
5
|
-
it("is able to clone the collection and merge count into it without manipulating the original given query", () => {
|
|
6
|
-
let collection = new Collection({}, {})
|
|
7
|
-
|
|
8
|
-
collection.ransack({name_cont: "Kasper"})
|
|
9
|
-
|
|
10
|
-
let countCollection = collection.clone()._merge({count: true})
|
|
11
|
-
|
|
12
|
-
expect(collection.queryArgs).toEqual({ransack: {name_cont: "Kasper"}})
|
|
13
|
-
expect(countCollection.queryArgs).toEqual({count: true, ransack: {name_cont: "Kasper"}})
|
|
14
|
-
})
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
describe("ransack", () => {
|
|
18
|
-
it("handles undefined arguments", () => {
|
|
19
|
-
// This can happen if someone does something like this and users_q isn't set:
|
|
20
|
-
// query.ransack(params.users_q)
|
|
21
|
-
|
|
22
|
-
let collection = new Collection({}, {ransack: {id_eq: 5}})
|
|
23
|
-
|
|
24
|
-
collection.ransack(undefined)
|
|
25
|
-
|
|
26
|
-
expect(collection.queryArgs).toEqual({ransack: {id_eq: 5}})
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it("handles sorts of different types", () => {
|
|
30
|
-
let collection = new Collection({}, {})
|
|
31
|
-
|
|
32
|
-
collection = collection.ransack({s: "created_at"})
|
|
33
|
-
expect(collection.queryArgs.ransack.s).toEqual("created_at")
|
|
34
|
-
|
|
35
|
-
collection = collection.ransack({s: ["id", "name"]})
|
|
36
|
-
expect(collection.queryArgs.ransack.s).toEqual(["created_at", "id", "name"])
|
|
37
|
-
})
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
describe("selectColumns", () => {
|
|
41
|
-
it("adds selected columns to the query", () => {
|
|
42
|
-
let collection = new Collection({}, {})
|
|
43
|
-
|
|
44
|
-
collection = collection.selectColumns({User: ["id"]})
|
|
45
|
-
expect(collection.queryArgs.selectColumns).toEqual({user: ["id"]})
|
|
46
|
-
|
|
47
|
-
collection = collection.selectColumns({User: ["email"]})
|
|
48
|
-
expect(collection.queryArgs.selectColumns).toEqual({user: ["id", "email"]})
|
|
49
|
-
})
|
|
50
|
-
})
|
|
51
|
-
})
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import CustomError from "../src/custom-error.mjs"
|
|
2
|
-
|
|
3
|
-
describe("CustomError", () => {
|
|
4
|
-
it("handles when response is a string", () => {
|
|
5
|
-
const xhr = {status: 401}
|
|
6
|
-
const response = "An error happened"
|
|
7
|
-
const customError = new CustomError(`Request failed with code: ${xhr.status}`, {response, xhr})
|
|
8
|
-
|
|
9
|
-
expect(customError.message).toEqual("Request failed with code: 401")
|
|
10
|
-
expect(customError.errorMessages()).toEqual(undefined)
|
|
11
|
-
expect(customError.errorTypes()).toEqual(undefined)
|
|
12
|
-
})
|
|
13
|
-
})
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import I18nOnSteroids from "i18n-on-steroids"
|
|
2
|
-
import ModelName from "../src/model-name.mjs"
|
|
3
|
-
|
|
4
|
-
const i18n = new I18nOnSteroids()
|
|
5
|
-
|
|
6
|
-
const initializeI18n = () => {
|
|
7
|
-
i18n.scanObject({
|
|
8
|
-
da: {
|
|
9
|
-
activerecord: {
|
|
10
|
-
models: {
|
|
11
|
-
user: {
|
|
12
|
-
one: "Bruger",
|
|
13
|
-
other: "Brugere"
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
i18n.setLocale("da")
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
describe("ModelName", () => {
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
initializeI18n()
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
test("human", () => {
|
|
28
|
-
const modelClassData = {i18nKey: "user"}
|
|
29
|
-
const modelName = new ModelName({i18n, modelClassData})
|
|
30
|
-
|
|
31
|
-
expect(modelName.human()).toEqual("Bruger")
|
|
32
|
-
expect(modelName.human({count: 2})).toEqual("Brugere")
|
|
33
|
-
})
|
|
34
|
-
})
|