@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
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import ModelPropType from "../src/model-prop-type.mjs"
|
|
2
|
-
import Task from "./support/task.mjs"
|
|
3
|
-
import User from "./support/user.mjs"
|
|
4
|
-
|
|
5
|
-
describe("ModelPropType", () => {
|
|
6
|
-
describe("ofModel", () => {
|
|
7
|
-
it("validates model class successfully", () => {
|
|
8
|
-
const user = new User({})
|
|
9
|
-
const validator = ModelPropType.ofModel(User).isRequired
|
|
10
|
-
const validation = validator({user}, "user")
|
|
11
|
-
|
|
12
|
-
expect(validation).toBeUndefined()
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
it("validates model class unsuccessfully", () => {
|
|
16
|
-
const task = new Task()
|
|
17
|
-
const validator = ModelPropType.ofModel(User).isRequired
|
|
18
|
-
const validation = validator({user: task}, "user")
|
|
19
|
-
|
|
20
|
-
expect(validation).toEqual(new Error("Expected user to be of type User but it wasn't: Task"))
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
describe("withLoadedAbilities", () => {
|
|
25
|
-
it("validates required attributes successfully", () => {
|
|
26
|
-
const user = new User({a: {id: 5}, b: {destroy: false, edit: true}})
|
|
27
|
-
const validator = ModelPropType.ofModel(User).withLoadedAbilities(["destroy", "edit"]).isRequired
|
|
28
|
-
const validation = validator({user}, "user")
|
|
29
|
-
|
|
30
|
-
expect(validation).toBeUndefined()
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it("validates required attributes unsuccessfully", () => {
|
|
34
|
-
const user = new User({a: {id: 5}, b: {edit: true}})
|
|
35
|
-
const validator = ModelPropType.ofModel(User).withLoadedAbilities(["destroy", "edit"]).isRequired
|
|
36
|
-
const validation = validator({user}, "user")
|
|
37
|
-
|
|
38
|
-
expect(validation).toEqual(new Error("The ability destroy was required to be loaded in user of the User type but it wasn't"))
|
|
39
|
-
})
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
describe("withLoadedAssociation", () => {
|
|
43
|
-
it("validates association is loaded overall successfully", () => {
|
|
44
|
-
const task = new Task()
|
|
45
|
-
const user = new User({r: {tasks: [task]}})
|
|
46
|
-
|
|
47
|
-
const validator = ModelPropType
|
|
48
|
-
.ofModel(User)
|
|
49
|
-
.withLoadedAssociation("tasks")
|
|
50
|
-
.previous()
|
|
51
|
-
.isRequired
|
|
52
|
-
|
|
53
|
-
const validation = validator({user}, "user")
|
|
54
|
-
|
|
55
|
-
expect(validation).toBeUndefined()
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
it("validates association is loaded overall unsuccessfully", () => {
|
|
59
|
-
const user = new User({r: {}})
|
|
60
|
-
|
|
61
|
-
const validator = ModelPropType
|
|
62
|
-
.ofModel(User)
|
|
63
|
-
.withLoadedAssociation("tasks")
|
|
64
|
-
.previous()
|
|
65
|
-
.isRequired
|
|
66
|
-
|
|
67
|
-
const validation = validator({user}, "user")
|
|
68
|
-
|
|
69
|
-
expect(validation).toEqual(new Error("The association tasks was required to be loaded in user of the User type but it wasn't"))
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
it("validates attributes on nested associations", () => {
|
|
73
|
-
const task = new Task({a: {id: 4, name: "Test task"}})
|
|
74
|
-
const user = new User({r: {tasks: [task]}})
|
|
75
|
-
|
|
76
|
-
const validator = ModelPropType.ofModel(User)
|
|
77
|
-
.withLoadedAssociation("tasks")
|
|
78
|
-
.withLoadedAttributes(["id", "name", "updatedAt"])
|
|
79
|
-
.previous()
|
|
80
|
-
.isRequired
|
|
81
|
-
|
|
82
|
-
const validation = validator({user}, "user")
|
|
83
|
-
|
|
84
|
-
expect(validation).toEqual(new Error("The attribute updatedAt was required to be loaded in user.tasks of the Task type but it wasn't"))
|
|
85
|
-
})
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
describe("withLoadedAttributes", () => {
|
|
89
|
-
it("validates required attributes successfully", () => {
|
|
90
|
-
const user = new User({a: {id: 5, name: "Donald Duck"}})
|
|
91
|
-
const validator = ModelPropType.ofModel(User).withLoadedAttributes(["id", "name"]).isRequired
|
|
92
|
-
const validation = validator({user}, "user")
|
|
93
|
-
|
|
94
|
-
expect(validation).toBeUndefined()
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
it("validates required attributes unsuccessfully", () => {
|
|
98
|
-
const user = new User({a: {id: 5}})
|
|
99
|
-
const validator = ModelPropType.ofModel(User).withLoadedAttributes(["id", "name"]).isRequired
|
|
100
|
-
const validation = validator({user}, "user")
|
|
101
|
-
|
|
102
|
-
expect(validation).toEqual(new Error("The attribute name was required to be loaded in user of the User type but it wasn't"))
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
it("ignores if the model is a new record", () => {
|
|
106
|
-
const user = new User({isNewRecord: true})
|
|
107
|
-
const validator = ModelPropType.ofModel(User).withLoadedAttributes(["id", "name"]).isRequired
|
|
108
|
-
const validation = validator({user}, "user")
|
|
109
|
-
|
|
110
|
-
expect(validation).toBeUndefined()
|
|
111
|
-
})
|
|
112
|
-
})
|
|
113
|
-
})
|
package/__tests__/params.test.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import Params from "../src/params.mjs"
|
|
2
|
-
|
|
3
|
-
describe("Params", () => {
|
|
4
|
-
describe("change", () => {
|
|
5
|
-
it("changes the params", () => {
|
|
6
|
-
delete global.location
|
|
7
|
-
|
|
8
|
-
global.location = {
|
|
9
|
-
search: "?q[name_cont]=kasper"
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const result = Params.change({q: {s: "name asc"}})
|
|
13
|
-
|
|
14
|
-
expect(result).toEqual({
|
|
15
|
-
q: {
|
|
16
|
-
name_cont: "kasper",
|
|
17
|
-
s: "name asc"
|
|
18
|
-
}
|
|
19
|
-
})
|
|
20
|
-
})
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
describe("parse", () => {
|
|
24
|
-
it("parses the current path", () => {
|
|
25
|
-
delete global.location
|
|
26
|
-
|
|
27
|
-
global.location = {
|
|
28
|
-
search: "?q[name_cont]=kasper"
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const result = Params.parse()
|
|
32
|
-
|
|
33
|
-
expect(result).toEqual({
|
|
34
|
-
q: {
|
|
35
|
-
name_cont: "kasper"
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
})
|
|
39
|
-
})
|
|
40
|
-
})
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import RoutesNative from "../src/routes-native.mjs"
|
|
2
|
-
const testRoutes = () => ({
|
|
3
|
-
routes: [
|
|
4
|
-
{"name": "blank", "path": "/blank", "component": "blank"},
|
|
5
|
-
|
|
6
|
-
{"name": "root", "path": "", "component": "dashboard"},
|
|
7
|
-
|
|
8
|
-
{"name": "new_drink", "path": "/drinks/new", "component": "drinks/edit"},
|
|
9
|
-
{"name": "edit_drink", "path": "/drinks/:id/edit", "component": "drinks/edit"},
|
|
10
|
-
{"name": "drink", "path": "/drinks/:id", "component": "drinks/show"},
|
|
11
|
-
{"name": "drinks", "path": "/drinks", "component": "drinks/index"}
|
|
12
|
-
]
|
|
13
|
-
})
|
|
14
|
-
const testTranslations = () => ({
|
|
15
|
-
locales: {
|
|
16
|
-
da: {
|
|
17
|
-
routes: {
|
|
18
|
-
drink: "drink",
|
|
19
|
-
edit: "rediger"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
en: {
|
|
23
|
-
routes: {
|
|
24
|
-
drink: "drink",
|
|
25
|
-
edit: "edit"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
const routesNative = ({args, currentLocale}) => {
|
|
32
|
-
const test = new RoutesNative({
|
|
33
|
-
getLocale: () => currentLocale
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
test.loadRouteTranslations(testTranslations())
|
|
37
|
-
test.loadRouteDefinitions(testRoutes(), args)
|
|
38
|
-
|
|
39
|
-
return test
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
describe("RoutesNative", () => {
|
|
43
|
-
it("translates routes from the current locale", () => {
|
|
44
|
-
const test = routesNative({args: {localized: true}, currentLocale: "da"})
|
|
45
|
-
const daRoute = test.editDrinkPath(5)
|
|
46
|
-
|
|
47
|
-
expect(daRoute).toEqual("/da/drinks/5/rediger")
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it("translates routes from the locale-param", () => {
|
|
51
|
-
const test = routesNative({args: {localized: true}, currentLocale: "en"})
|
|
52
|
-
const daRoute = test.editDrinkPath(5, {locale: "da"})
|
|
53
|
-
|
|
54
|
-
expect(daRoute).toEqual("/da/drinks/5/rediger")
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it("defaults to the locale given by the getLocale callback", () => {
|
|
58
|
-
const test = routesNative({args: {localized: true}, currentLocale: "en"})
|
|
59
|
-
const daRoute = test.editDrinkPath(5)
|
|
60
|
-
|
|
61
|
-
expect(daRoute).toEqual("/en/drinks/5/edit")
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
it("uses the rest of the params as a query string", () => {
|
|
65
|
-
const test = routesNative({args: {localized: true}, currentLocale: "en"})
|
|
66
|
-
const daRoute = test.editDrinkPath(5, {drink: {name: "Pina Colada"}, locale: "da"})
|
|
67
|
-
|
|
68
|
-
expect(daRoute).toEqual("/da/drinks/5/rediger?drink%5Bname%5D=Pina%20Colada")
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
it("translates a route without localization", () => {
|
|
72
|
-
const test = routesNative({currentLocale: "en"})
|
|
73
|
-
const daRoute = test.editDrinkPath(5, {drink: {name: "Pina Colada"}})
|
|
74
|
-
|
|
75
|
-
expect(daRoute).toEqual("/drinks/5/edit?drink%5Bname%5D=Pina%20Colada")
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
it("generates urls", () => {
|
|
79
|
-
if (!globalThis.location) globalThis.location = {} // eslint-disable-line jest/no-if
|
|
80
|
-
|
|
81
|
-
globalThis.location.host = "localhost"
|
|
82
|
-
globalThis.location.protocol = "http:"
|
|
83
|
-
|
|
84
|
-
const test = routesNative({args: {localized: true}, currentLocale: "en"})
|
|
85
|
-
const daRoute = test.editDrinkUrl(5, {drink: {name: "Pina Colada"}, locale: "da"})
|
|
86
|
-
|
|
87
|
-
expect(daRoute).toEqual("http://localhost/da/drinks/5/rediger?drink%5Bname%5D=Pina%20Colada")
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
it("generates urls with custom options", () => {
|
|
91
|
-
const test = routesNative({args: {localized: true}, currentLocale: "en"})
|
|
92
|
-
const daRoute = test.editDrinkUrl(5, {drink: {name: "Pina Colada"}, locale: "da", host: "google.com", port: 123, protocol: "https"})
|
|
93
|
-
|
|
94
|
-
expect(daRoute).toEqual("https://google.com:123/da/drinks/5/rediger?drink%5Bname%5D=Pina%20Colada")
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
it("generates urls without locales", () => {
|
|
98
|
-
const test = routesNative({currentLocale: "en"})
|
|
99
|
-
const daRoute = test.editDrinkUrl(5, {drink: {name: "Pina Colada"}, locale: "da", host: "google.com", port: 123, protocol: "https"})
|
|
100
|
-
|
|
101
|
-
expect(daRoute).toEqual("https://google.com:123/drinks/5/edit?drink%5Bname%5D=Pina%20Colada")
|
|
102
|
-
})
|
|
103
|
-
})
|
package/__tests__/routes.test.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import Routes from "../src/routes.mjs"
|
|
2
|
-
const testRoutes = {
|
|
3
|
-
routes: [
|
|
4
|
-
{"name": "blank", "path": "/blank", "component": "blank"},
|
|
5
|
-
|
|
6
|
-
{"name": "root", "path": "", "component": "dashboard"},
|
|
7
|
-
|
|
8
|
-
{"name": "new_drink", "path": "/drinks/new", "component": "drinks/edit"},
|
|
9
|
-
{"name": "edit_drink", "path": "/drinks/:id/edit", "component": "drinks/edit"},
|
|
10
|
-
{"name": "drink", "path": "/drinks/:id", "component": "drinks/show"},
|
|
11
|
-
{"name": "drinks", "path": "/drinks", "component": "drinks/index"}
|
|
12
|
-
]
|
|
13
|
-
}
|
|
14
|
-
const fakeJsRoutes = {
|
|
15
|
-
blankPath: () => "/blank",
|
|
16
|
-
blankUrl: () => "https://localhost/blank",
|
|
17
|
-
newDrinkPath: () => "/drinks/new",
|
|
18
|
-
newDrinkUrl: () => "/drinks/new",
|
|
19
|
-
editDrinkPath: (drinkId) => `/drinks/${drinkId}/edit`,
|
|
20
|
-
editDrinkUrl: (drinkId) => `https://localhost/drinks/${drinkId}/edit`,
|
|
21
|
-
drinkPath: (drinkId) => `/druiks/${drinkId}`,
|
|
22
|
-
drinkUrl: (drinkId) => `https://localhost/drinks/${drinkId}`,
|
|
23
|
-
drinksPath: () => "/drinks",
|
|
24
|
-
drinksUrl: () => "https://localhost/drinks",
|
|
25
|
-
rootPath: () => "/root",
|
|
26
|
-
rootUrl: () => "https://localhost"
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const routes = new Routes({
|
|
30
|
-
jsRoutes: fakeJsRoutes,
|
|
31
|
-
routeDefinitions: testRoutes
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
describe("Routes", () => {
|
|
35
|
-
it("generates paths", () => {
|
|
36
|
-
const daRoute = routes.editDrinkPath(5)
|
|
37
|
-
|
|
38
|
-
expect(daRoute).toEqual("/drinks/5/edit")
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it("generates urls", () => {
|
|
42
|
-
const daRoute = routes.editDrinkUrl(5)
|
|
43
|
-
|
|
44
|
-
expect(daRoute).toEqual("https://localhost/drinks/5/edit")
|
|
45
|
-
})
|
|
46
|
-
})
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import Serializer from "../src/serializer.mjs"
|
|
2
|
-
import User from "./support/user.mjs"
|
|
3
|
-
|
|
4
|
-
describe("Serializer", () => {
|
|
5
|
-
test("it serializes model classes", () => {
|
|
6
|
-
const testObject = {
|
|
7
|
-
userModel: User
|
|
8
|
-
}
|
|
9
|
-
const serialized = Serializer.serialize(testObject)
|
|
10
|
-
|
|
11
|
-
expect(serialized).toEqual({userModel: {api_maker_type: "resource", name: "User"}})
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
test("it serializes dates", () => {
|
|
15
|
-
// Mock time zone offset
|
|
16
|
-
var getTimezoneOffset = Date.prototype.getTimezoneOffset
|
|
17
|
-
|
|
18
|
-
Date.prototype.getTimezoneOffset = function () {
|
|
19
|
-
return -120
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const date = new Date(1985, 5, 17, 10, 30, 5)
|
|
23
|
-
const serialized = Serializer.serialize(date)
|
|
24
|
-
|
|
25
|
-
// Restore time zone offset
|
|
26
|
-
Date.prototype.getTimezoneOffset = getTimezoneOffset
|
|
27
|
-
|
|
28
|
-
expect(serialized).toEqual({api_maker_type: "datetime", value: "1985-6-17 10:30:5+0200"})
|
|
29
|
-
})
|
|
30
|
-
})
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export default class Task {
|
|
2
|
-
static modelClassData () {
|
|
3
|
-
return {
|
|
4
|
-
attributes: [],
|
|
5
|
-
name: "Task"
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
static modelName () {
|
|
10
|
-
return "Task"
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
constructor ({a, b, isNewRecord = false, r} = {}) {
|
|
14
|
-
this.abilities = b
|
|
15
|
-
this._isNewRecord = isNewRecord
|
|
16
|
-
this.modelData = a
|
|
17
|
-
this.relationshipsCache = r
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
isNewRecord () {
|
|
21
|
-
return this._isNewRecord
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
isPersisted () {
|
|
25
|
-
return !this._isNewRecord
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import BaseModel from "../../src/base-model.mjs"
|
|
2
|
-
|
|
3
|
-
export default class User extends BaseModel {
|
|
4
|
-
static modelClassData () {
|
|
5
|
-
return {
|
|
6
|
-
attributes: [],
|
|
7
|
-
name: "User",
|
|
8
|
-
primaryKey: "id"
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
static modelName () {
|
|
13
|
-
return "User"
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
constructor ({a, b, isNewRecord = false, r}) {
|
|
17
|
-
super({a})
|
|
18
|
-
|
|
19
|
-
this.abilities = b
|
|
20
|
-
this._isNewRecord = isNewRecord
|
|
21
|
-
this.modelData = a
|
|
22
|
-
this.relationshipsCache = r
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
isNewRecord () {
|
|
26
|
-
return this._isNewRecord
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
isPersisted () {
|
|
30
|
-
return !this._isNewRecord
|
|
31
|
-
}
|
|
32
|
-
}
|
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {}
|
package/jest.config.js
DELETED
package/src/can-can-loader.jsx
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import ApiMakerEventEmitterListener from "./event-emitter-listener"
|
|
2
|
-
import {digg, digs} from "diggerize"
|
|
3
|
-
import CanCan from "./can-can.mjs"
|
|
4
|
-
import PropTypes from "prop-types"
|
|
5
|
-
import propTypesExact from "prop-types-exact"
|
|
6
|
-
import React from "react"
|
|
7
|
-
|
|
8
|
-
export default class ApiMakerCanCanLoader extends React.PureComponent {
|
|
9
|
-
static propTypes = propTypesExact({
|
|
10
|
-
abilities: PropTypes.array.isRequired,
|
|
11
|
-
component: PropTypes.object.isRequired
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
componentDidMount () {
|
|
15
|
-
this.loadAbilities()
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async loadAbilities () {
|
|
19
|
-
const canCan = CanCan.current()
|
|
20
|
-
const {abilities} = digs(this.props, "abilities")
|
|
21
|
-
|
|
22
|
-
await canCan.loadAbilities(abilities)
|
|
23
|
-
|
|
24
|
-
this.updateComponent({canCan})
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
render () {
|
|
28
|
-
const canCan = CanCan.current()
|
|
29
|
-
const events = digg(canCan, "events")
|
|
30
|
-
|
|
31
|
-
return (
|
|
32
|
-
<ApiMakerEventEmitterListener
|
|
33
|
-
event="onResetAbilities"
|
|
34
|
-
events={events}
|
|
35
|
-
onCalled={this.onResetAbilities}
|
|
36
|
-
/>
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
onResetAbilities = () => {
|
|
41
|
-
this.updateComponent({canCan: undefined})
|
|
42
|
-
this.loadAbilities()
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
updateComponent (updatedState) {
|
|
46
|
-
const {component} = digs(this.props, "component")
|
|
47
|
-
|
|
48
|
-
if (component.shape) {
|
|
49
|
-
component.shape.set(updatedState)
|
|
50
|
-
} else {
|
|
51
|
-
component.setState(updatedState)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
package/src/destroy-error.mjs
DELETED
package/src/devise.mjs
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import CanCan from "./can-can.mjs"
|
|
2
|
-
import Deserializer from "./deserializer.mjs"
|
|
3
|
-
import {digg} from "diggerize"
|
|
4
|
-
import EventEmitter from "events"
|
|
5
|
-
import inflection from "inflection"
|
|
6
|
-
import modelClassRequire from "./model-class-require.mjs"
|
|
7
|
-
import Services from "./services.mjs"
|
|
8
|
-
|
|
9
|
-
export default class ApiMakerDevise {
|
|
10
|
-
static callSignOutEvent (args) {
|
|
11
|
-
ApiMakerDevise.events().emit("onDeviseSignOut", {args})
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
static current () {
|
|
15
|
-
if (!globalThis.currentApiMakerDevise)
|
|
16
|
-
globalThis.currentApiMakerDevise = new ApiMakerDevise()
|
|
17
|
-
|
|
18
|
-
return globalThis.currentApiMakerDevise
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
static events () {
|
|
22
|
-
if (!globalThis.apiMakerDeviseEvents) {
|
|
23
|
-
globalThis.apiMakerDeviseEvents = new EventEmitter()
|
|
24
|
-
globalThis.apiMakerDeviseEvents.setMaxListeners(1000)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return globalThis.apiMakerDeviseEvents
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
static addUserScope (scope) {
|
|
31
|
-
const currentMethodName = `current${inflection.camelize(scope)}`
|
|
32
|
-
|
|
33
|
-
ApiMakerDevise[currentMethodName] = function () {
|
|
34
|
-
return ApiMakerDevise.current().getCurrentScope(scope)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const isSignedInMethodName = `is${inflection.camelize(scope)}SignedIn`
|
|
38
|
-
|
|
39
|
-
ApiMakerDevise[isSignedInMethodName] = function () {
|
|
40
|
-
if (ApiMakerDevise.current().getCurrentScope(scope)) {
|
|
41
|
-
return true
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return false
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
static async signIn (username, password, args = {}) {
|
|
49
|
-
if (!args.scope) args.scope = "user"
|
|
50
|
-
|
|
51
|
-
const postData = {username, password, args}
|
|
52
|
-
const response = await Services.current().sendRequest("Devise::SignIn", postData)
|
|
53
|
-
|
|
54
|
-
let model = response.model
|
|
55
|
-
|
|
56
|
-
if (Array.isArray(model)) model = model[0]
|
|
57
|
-
|
|
58
|
-
await CanCan.current().resetAbilities()
|
|
59
|
-
|
|
60
|
-
ApiMakerDevise.updateSession(model)
|
|
61
|
-
ApiMakerDevise.events().emit("onDeviseSignIn", Object.assign({username}, args))
|
|
62
|
-
|
|
63
|
-
return {model, response}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
static updateSession (model) {
|
|
67
|
-
const scope = digg(model.modelClassData(), "name")
|
|
68
|
-
const camelizedScopeName = inflection.camelize(scope, true)
|
|
69
|
-
|
|
70
|
-
ApiMakerDevise.current().currents[camelizedScopeName] = model
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
static setSignedOut (args) {
|
|
74
|
-
ApiMakerDevise.current().currents[inflection.camelize(args.scope, true)] = null
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
static async signOut (args = {}) {
|
|
78
|
-
if (!args.scope)
|
|
79
|
-
args.scope = "user"
|
|
80
|
-
|
|
81
|
-
const response = await Services.current().sendRequest("Devise::SignOut", {args})
|
|
82
|
-
|
|
83
|
-
await CanCan.current().resetAbilities()
|
|
84
|
-
|
|
85
|
-
// Cannot use the class because they would both import each other
|
|
86
|
-
if (globalThis.apiMakerSessionStatusUpdater) {
|
|
87
|
-
globalThis.apiMakerSessionStatusUpdater.updateSessionStatus()
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
ApiMakerDevise.setSignedOut(args)
|
|
91
|
-
ApiMakerDevise.callSignOutEvent(args)
|
|
92
|
-
|
|
93
|
-
return response
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
constructor () {
|
|
97
|
-
this.currents = {}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
getCurrentScope (scope) {
|
|
101
|
-
if (!(scope in this.currents))
|
|
102
|
-
this.currents[scope] = this.loadCurrentScope(scope)
|
|
103
|
-
|
|
104
|
-
return this.currents[scope]
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
loadCurrentScope (scope) {
|
|
108
|
-
const scopeData = globalThis.apiMakerDeviseCurrent[scope]
|
|
109
|
-
|
|
110
|
-
if (!scopeData) return null
|
|
111
|
-
|
|
112
|
-
const parsedScopeData = Deserializer.parse(scopeData)
|
|
113
|
-
|
|
114
|
-
// Might be a collection with preloaded relationships
|
|
115
|
-
if (Array.isArray(parsedScopeData)) return parsedScopeData[0]
|
|
116
|
-
|
|
117
|
-
const ModelClass = modelClassRequire(scope)
|
|
118
|
-
const modelInstance = new ModelClass({data: parsedScopeData})
|
|
119
|
-
|
|
120
|
-
return modelInstance
|
|
121
|
-
}
|
|
122
|
-
}
|
package/src/event-created.jsx
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import debounce from "debounce"
|
|
2
|
-
import ModelEvents from "./model-events.mjs"
|
|
3
|
-
import PropTypes from "prop-types"
|
|
4
|
-
import propTypesExact from "prop-types-exact"
|
|
5
|
-
import React from "react"
|
|
6
|
-
|
|
7
|
-
export default class ApiMakerEventCreated extends React.PureComponent {
|
|
8
|
-
static defaultProps = {
|
|
9
|
-
active: true
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
static propTypes = propTypesExact({
|
|
13
|
-
active: PropTypes.bool.isRequired,
|
|
14
|
-
debounce: PropTypes.oneOfType([
|
|
15
|
-
PropTypes.bool,
|
|
16
|
-
PropTypes.number
|
|
17
|
-
]),
|
|
18
|
-
modelClass: PropTypes.func.isRequired,
|
|
19
|
-
onCreated: PropTypes.func.isRequired
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
componentDidMount () {
|
|
23
|
-
this.connect()
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
componentWillUnmount () {
|
|
27
|
-
if (this.connectCreated) {
|
|
28
|
-
this.connectCreated.unsubscribe()
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
connect () {
|
|
33
|
-
this.connectCreated = ModelEvents.connectCreated(this.props.modelClass, (...args) => this.onCreated(...args))
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
debounce () {
|
|
37
|
-
if (!this.debounceInstance) {
|
|
38
|
-
const {onCreated} = digs(this.props, "onCreated")
|
|
39
|
-
|
|
40
|
-
if (typeof this.props.debounce == "number") {
|
|
41
|
-
this.debounceInstance = debounce(onCreated, this.props.debounce)
|
|
42
|
-
} else {
|
|
43
|
-
this.debounceInstance = debounce(onCreated)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return this.debounceInstance
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
onCreated (...args) {
|
|
51
|
-
if (!this.props.active) {
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (this.props.debounce) {
|
|
56
|
-
this.debounce()(...args)
|
|
57
|
-
} else {
|
|
58
|
-
this.props.onCreated(...args)
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
render () {
|
|
63
|
-
return null
|
|
64
|
-
}
|
|
65
|
-
}
|
package/src/event-destroyed.jsx
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import ModelEvents from "./model-events.mjs"
|
|
2
|
-
import PropTypes from "prop-types"
|
|
3
|
-
import propTypesExact from "prop-types-exact"
|
|
4
|
-
import React from "react"
|
|
5
|
-
|
|
6
|
-
export default class ApiMakerEventDestroyed extends React.PureComponent {
|
|
7
|
-
static propTypes = propTypesExact({
|
|
8
|
-
model: PropTypes.object.isRequired,
|
|
9
|
-
onDestroyed: PropTypes.func.isRequired
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
componentDidMount () {
|
|
13
|
-
this.connect()
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
componentWillUnmount () {
|
|
17
|
-
if (this.connectDestroyed) {
|
|
18
|
-
this.connectDestroyed.unsubscribe()
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
connect () {
|
|
23
|
-
this.connectDestroyed = ModelEvents.connectDestroyed(this.props.model, this.props.onDestroyed)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
render () {
|
|
27
|
-
return null
|
|
28
|
-
}
|
|
29
|
-
}
|