@kaspernj/api-maker 1.0.116 → 1.0.120
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.js +5 -2
- package/__tests__/base-model.test.js +17 -0
- package/__tests__/cable-connection-pool.test.js +1 -1
- package/__tests__/support/task.js +1 -1
- package/__tests__/support/user.js +7 -2
- package/index.js +2 -0
- package/package.json +4 -4
- package/src/base-model.cjs +7 -27
- package/src/cable-connection-pool.cjs +1 -1
- package/src/cable-subscription-pool.cjs +1 -1
- package/src/can-can-loader.jsx +4 -4
- package/src/can-can.cjs +1 -1
- package/src/collection.cjs +2 -2
- package/src/commands-pool.cjs +1 -1
- package/src/custom-error.cjs +1 -1
- package/src/deserializer.cjs +3 -3
- package/src/devise.cjs +3 -3
- package/src/event-connection.jsx +3 -2
- package/src/event-created.jsx +3 -2
- package/src/event-destroyed.jsx +3 -2
- package/src/event-emitter-listener.jsx +1 -1
- package/src/event-listener.jsx +1 -1
- package/src/event-location-changed.jsx +21 -0
- package/src/event-model-class.jsx +3 -2
- package/src/event-updated.jsx +3 -2
- package/src/history-listener.jsx +1 -1
- package/src/instance-of-class-name.cjs +1 -1
- package/src/model-events.cjs +38 -0
- package/src/model-prop-type.cjs +1 -1
- package/src/models-response-reader.cjs +2 -2
- package/src/models.js.erb +6 -0
- package/src/preloaded.cjs +2 -2
- package/src/resource-route.cjs +1 -1
- package/src/resource-routes.jsx +1 -1
- package/src/routes-native.cjs +1 -1
- package/src/routes.cjs +1 -1
- package/src/serializer.cjs +1 -1
- package/src/translated-collections-data.js.erb +5 -0
- package/src/translated-collections.cjs +11 -0
- package/src/updated-attribute.jsx +4 -3
- package/src/validation-error.cjs +1 -1
- package/src/validation-errors.cjs +2 -2
package/.eslintrc.js
CHANGED
|
@@ -73,7 +73,9 @@ module.exports = {
|
|
|
73
73
|
"jest/no-large-snapshots": "error",
|
|
74
74
|
"jest/no-restricted-matchers": "error",
|
|
75
75
|
"jest/no-test-return-statement": "error",
|
|
76
|
+
"jest/prefer-expect-resolves": "off", // Needs configuration and no documentation could be found?
|
|
76
77
|
"jest/prefer-hooks-on-top": "error",
|
|
78
|
+
"jest/prefer-to-be": "off", // Needs configuration and no documentation could be found?
|
|
77
79
|
"jest/prefer-spy-on": "error",
|
|
78
80
|
"jest/prefer-to-be-null": "error",
|
|
79
81
|
"jest/prefer-to-be-undefined": "error",
|
|
@@ -86,7 +88,7 @@ module.exports = {
|
|
|
86
88
|
"key-spacing": "error",
|
|
87
89
|
"keyword-spacing": "error",
|
|
88
90
|
"linebreak-style": ["error", "unix"],
|
|
89
|
-
"line-comment-position": "
|
|
91
|
+
"line-comment-position": "off",
|
|
90
92
|
"lines-around-comment": "error",
|
|
91
93
|
"lines-between-class-members": "error",
|
|
92
94
|
"max-classes-per-file": "error",
|
|
@@ -118,7 +120,7 @@ module.exports = {
|
|
|
118
120
|
"no-implicit-coercion": "error",
|
|
119
121
|
"no-implicit-globals": "error",
|
|
120
122
|
"no-implied-eval": "error",
|
|
121
|
-
"no-inline-comments": "
|
|
123
|
+
"no-inline-comments": "off",
|
|
122
124
|
"no-invalid-this": "error",
|
|
123
125
|
"no-iterator": "error",
|
|
124
126
|
"no-label-var": "error",
|
|
@@ -244,6 +246,7 @@ module.exports = {
|
|
|
244
246
|
"react/no-did-mount-set-state": "error",
|
|
245
247
|
"react/no-did-update-set-state": "error",
|
|
246
248
|
"react/no-multi-comp": "error",
|
|
249
|
+
"react/no-namespace": "error",
|
|
247
250
|
"react/no-redundant-should-component-update": "error",
|
|
248
251
|
"react/no-set-state": "error",
|
|
249
252
|
"react/no-this-in-sfc": "error",
|
|
@@ -8,8 +8,25 @@ const {JSDOM} = require("jsdom")
|
|
|
8
8
|
const {window} = new JSDOM()
|
|
9
9
|
const document = window.document
|
|
10
10
|
const ValidationError = require("../src/validation-error.cjs")
|
|
11
|
+
const User = require("./support/user")
|
|
11
12
|
|
|
12
13
|
describe("BaseModel", () => {
|
|
14
|
+
describe("identifierKey", () => {
|
|
15
|
+
it("returns the id when persisted", () => {
|
|
16
|
+
const user = new User({a: {id: 5}})
|
|
17
|
+
|
|
18
|
+
expect(user.identifierKey()).toEqual(5)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it("returns the unique key when new record", () => {
|
|
22
|
+
const user = new User({isNewRecord: true})
|
|
23
|
+
|
|
24
|
+
user.uniqueKey = () => 45
|
|
25
|
+
|
|
26
|
+
expect(user.identifierKey()).toEqual(45)
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
|
|
13
30
|
describe("update", () => {
|
|
14
31
|
it("aborts if no changes", async () => {
|
|
15
32
|
const model = new BaseModel()
|
|
@@ -3,7 +3,7 @@ jest.mock("@rails/actioncable", () => ({
|
|
|
3
3
|
}))
|
|
4
4
|
const CableConnectionPool = require("../src/cable-connection-pool.cjs")
|
|
5
5
|
const CableSubscriptionPool = require("../src/cable-subscription-pool.cjs")
|
|
6
|
-
const {digg} = require("
|
|
6
|
+
const {digg} = require("diggerize")
|
|
7
7
|
|
|
8
8
|
describe("CableConnectionPool", () => {
|
|
9
9
|
describe("connectCreated", () => {
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
const BaseModel = require("../../src/base-model.cjs")
|
|
2
|
+
|
|
3
|
+
module.exports = class User extends BaseModel {
|
|
2
4
|
static modelClassData() {
|
|
3
5
|
return {
|
|
4
6
|
attributes: [],
|
|
5
|
-
name: "User"
|
|
7
|
+
name: "User",
|
|
8
|
+
primaryKey: "id"
|
|
6
9
|
}
|
|
7
10
|
}
|
|
8
11
|
|
|
@@ -11,6 +14,8 @@ module.exports = class User {
|
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
constructor({a, b, isNewRecord = false, r}) {
|
|
17
|
+
super({a})
|
|
18
|
+
|
|
14
19
|
this.abilities = b
|
|
15
20
|
this._isNewRecord = isNewRecord
|
|
16
21
|
this.modelData = a
|
package/index.js
CHANGED
|
@@ -16,6 +16,7 @@ const EventCreated = require("./src/event-created").default
|
|
|
16
16
|
const EventDestroyed = require("./src/event-destroyed").default
|
|
17
17
|
const EventEmitterListener = require("./src/event-emitter-listener").default
|
|
18
18
|
const EventListener = require("./src/event-listener").default
|
|
19
|
+
const EventLocationChanged = require("./src/event-location-changed").default
|
|
19
20
|
const EventModelClass = require("./src/event-model-class").default
|
|
20
21
|
const EventUpdated = require("./src/event-updated").default
|
|
21
22
|
const HistoryListener = require("./src/history-listener").default
|
|
@@ -61,6 +62,7 @@ export {
|
|
|
61
62
|
EventDestroyed,
|
|
62
63
|
EventEmitterListener,
|
|
63
64
|
EventListener,
|
|
65
|
+
EventLocationChanged,
|
|
64
66
|
EventModelClass,
|
|
65
67
|
EventUpdated,
|
|
66
68
|
HistoryListener,
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
]
|
|
17
17
|
},
|
|
18
18
|
"name": "@kaspernj/api-maker",
|
|
19
|
-
"version": "1.0.
|
|
19
|
+
"version": "1.0.120",
|
|
20
20
|
"description": "",
|
|
21
21
|
"main": "index.js",
|
|
22
22
|
"repository": {
|
|
@@ -51,15 +51,15 @@
|
|
|
51
51
|
"eslint-find-rules": "^3.6.1",
|
|
52
52
|
"eslint-plugin-jest": "^24.3.6",
|
|
53
53
|
"eslint-plugin-react": "^7.23.2",
|
|
54
|
-
"i18n-on-steroids": "^1.0.
|
|
54
|
+
"i18n-on-steroids": "^1.0.2",
|
|
55
55
|
"jest": "^27.0.6",
|
|
56
|
-
"jsdom": "^
|
|
56
|
+
"jsdom": "^18.0.0"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@kaspernj/object-digger": ">= 1.0.2",
|
|
60
59
|
"@rails/actioncable": ">= 6.1.0",
|
|
61
60
|
"clone-deep": ">= 4.0.1",
|
|
62
61
|
"debounce": ">= 1.2.1",
|
|
62
|
+
"diggerize": ">= 1.0.3",
|
|
63
63
|
"epic-locks": ">= 1.0.1",
|
|
64
64
|
"form-data-objectizer": ">= 1.0.0",
|
|
65
65
|
"form-serialize": ">= 0.7.2",
|
package/src/base-model.cjs
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
const AttributeNotLoadedError = require("./attribute-not-loaded-error.cjs")
|
|
2
|
-
const CableConnectionPool = require("./cable-connection-pool.cjs")
|
|
3
2
|
const Collection = require("./collection.cjs")
|
|
4
3
|
const CommandsPool = require("./commands-pool.cjs")
|
|
5
4
|
const CustomError = require("./custom-error.cjs")
|
|
6
|
-
const {digg} = require("
|
|
5
|
+
const {digg} = require("diggerize")
|
|
7
6
|
const FormDataObjectizer = require("form-data-objectizer")
|
|
8
7
|
const inflection = require("inflection")
|
|
9
8
|
const ModelName = require("./model-name.cjs")
|
|
@@ -128,31 +127,6 @@ module.exports = class BaseModel {
|
|
|
128
127
|
return clone
|
|
129
128
|
}
|
|
130
129
|
|
|
131
|
-
connect(eventName, callback) {
|
|
132
|
-
const cableSubscription = CableConnectionPool.current().connectEvent(digg(this.modelClassData(), "name"), this.primaryKey(), eventName, callback)
|
|
133
|
-
return cableSubscription
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
static connect(eventName, callback) {
|
|
137
|
-
const cableSubscription = CableConnectionPool.current().connectModelClassEvent(digg(this.modelClassData(), "name"), eventName, callback)
|
|
138
|
-
return cableSubscription
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
static connectCreated(callback) {
|
|
142
|
-
const cableSubscription = CableConnectionPool.current().connectCreated(digg(this.modelClassData(), "name"), callback)
|
|
143
|
-
return cableSubscription
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
connectDestroyed(callback) {
|
|
147
|
-
const cableSubscription = CableConnectionPool.current().connectDestroyed(digg(this.modelClassData(), "name"), this.primaryKey(), callback)
|
|
148
|
-
return cableSubscription
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
connectUpdated(callback) {
|
|
152
|
-
const cableSubscription = CableConnectionPool.current().connectUpdate(digg(this.modelClassData(), "name"), this.primaryKey(), callback)
|
|
153
|
-
return cableSubscription
|
|
154
|
-
}
|
|
155
|
-
|
|
156
130
|
cacheKey() {
|
|
157
131
|
if (this.isPersisted()) {
|
|
158
132
|
const keyParts = [
|
|
@@ -310,6 +284,12 @@ module.exports = class BaseModel {
|
|
|
310
284
|
throw new new CustomError("Response wasn't successful", {model: this, response})
|
|
311
285
|
}
|
|
312
286
|
|
|
287
|
+
identifierKey() {
|
|
288
|
+
if (!this._identifierKey) this._identifierKey = this.isPersisted() ? this.primaryKey() : this.uniqueKey()
|
|
289
|
+
|
|
290
|
+
return this._identifierKey
|
|
291
|
+
}
|
|
292
|
+
|
|
313
293
|
isAssociationLoaded(associationName) {
|
|
314
294
|
if (associationName in this.relationshipsCache) return true
|
|
315
295
|
return false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const CableSubscriptionPool = require("./cable-subscription-pool.cjs")
|
|
2
2
|
const CableSubscription = require("./cable-subscription.cjs")
|
|
3
|
-
const {dig} = require("
|
|
3
|
+
const {dig} = require("diggerize")
|
|
4
4
|
|
|
5
5
|
module.exports = class ApiMakerCableConnectionPool {
|
|
6
6
|
static current() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const ChannelsConsumer = require("./channels-consumer.cjs")
|
|
2
2
|
const CommandsPool = require("./commands-pool.cjs")
|
|
3
3
|
const Deserializer = require("./deserializer.cjs")
|
|
4
|
-
const {digg} = require("
|
|
4
|
+
const {digg} = require("diggerize")
|
|
5
5
|
const inflection = require("inflection")
|
|
6
6
|
const Logger = require("./logger.cjs")
|
|
7
7
|
|
package/src/can-can-loader.jsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import ApiMakerEventEmitterListener from "./event-emitter-listener"
|
|
2
|
-
import {digg, digs} from "
|
|
2
|
+
import {digg, digs} from "diggerize"
|
|
3
3
|
const CanCan = require("./can-can.cjs")
|
|
4
4
|
const PropTypes = require("prop-types")
|
|
5
5
|
const PropTypesExact = require("prop-types-exact")
|
|
6
6
|
const React = require("react")
|
|
7
7
|
|
|
8
|
-
export default class ApiMakerCanCanLoader extends React.
|
|
8
|
+
export default class ApiMakerCanCanLoader extends React.PureComponent {
|
|
9
9
|
static propTypes = PropTypesExact({
|
|
10
10
|
abilities: PropTypes.array.isRequired,
|
|
11
11
|
component: PropTypes.object.isRequired
|
|
@@ -32,12 +32,12 @@ export default class ApiMakerCanCanLoader extends React.Component {
|
|
|
32
32
|
<ApiMakerEventEmitterListener
|
|
33
33
|
events={events}
|
|
34
34
|
event="onResetAbilities"
|
|
35
|
-
onCalled={
|
|
35
|
+
onCalled={this.onResetAbilities}
|
|
36
36
|
/>
|
|
37
37
|
)
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
onResetAbilities() {
|
|
40
|
+
onResetAbilities = () => {
|
|
41
41
|
this.updateComponent({canCan: undefined})
|
|
42
42
|
this.loadAbilities()
|
|
43
43
|
}
|
package/src/can-can.cjs
CHANGED
package/src/collection.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const cloneDeep = require("clone-deep")
|
|
2
2
|
const CommandsPool = require("./commands-pool.cjs")
|
|
3
|
-
const {digg} = require("
|
|
3
|
+
const {digg} = require("diggerize")
|
|
4
4
|
const inflection = require("inflection")
|
|
5
5
|
const {merge} = require("./merge.cjs")
|
|
6
6
|
const ModelsResponseReader = require("./models-response-reader.cjs")
|
|
@@ -205,7 +205,7 @@ module.exports = class ApiMakerCollection {
|
|
|
205
205
|
modelClass() {
|
|
206
206
|
const modelName = digg(this.args.modelClass.modelClassData(), "name")
|
|
207
207
|
|
|
208
|
-
return digg(require("api-maker/models"), modelName)
|
|
208
|
+
return digg(require("@kaspernj/api-maker/src/models"), modelName)
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
clone() {
|
package/src/commands-pool.cjs
CHANGED
|
@@ -2,7 +2,7 @@ const Api = require("./api.cjs")
|
|
|
2
2
|
const CommandSubmitData = require("./command-submit-data.cjs")
|
|
3
3
|
const CustomError = require("./custom-error.cjs")
|
|
4
4
|
const Deserializer = require("./deserializer.cjs")
|
|
5
|
-
const {dig, digg} = require("
|
|
5
|
+
const {dig, digg} = require("diggerize")
|
|
6
6
|
const FormDataObjectizer = require("form-data-objectizer")
|
|
7
7
|
const Serializer = require("./serializer.cjs")
|
|
8
8
|
const ValidationError = require("./validation-error.cjs")
|
package/src/custom-error.cjs
CHANGED
package/src/deserializer.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {digg} = require("
|
|
1
|
+
const {digg} = require("diggerize")
|
|
2
2
|
const inflection = require("inflection")
|
|
3
3
|
const Money = require("js-money")
|
|
4
4
|
|
|
@@ -18,14 +18,14 @@ module.exports = class ApiMakerDeserializer {
|
|
|
18
18
|
return Money.fromInteger(cents, currency)
|
|
19
19
|
} else if (object.api_maker_type == "model") {
|
|
20
20
|
const modelClassName = inflection.classify(digg(object, "model_name"))
|
|
21
|
-
const modelClass = digg(require("api-maker/models"), modelClassName)
|
|
21
|
+
const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
|
|
22
22
|
const data = ApiMakerDeserializer.parse(digg(object, "serialized"))
|
|
23
23
|
const model = new modelClass({data, isNewRecord: false})
|
|
24
24
|
|
|
25
25
|
return model
|
|
26
26
|
} else if (object.api_maker_type == "resource") {
|
|
27
27
|
const modelClassName = inflection.classify(digg(object, "name"))
|
|
28
|
-
const modelClass = digg(require("api-maker/models"), modelClassName)
|
|
28
|
+
const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
|
|
29
29
|
|
|
30
30
|
return modelClass
|
|
31
31
|
} else {
|
package/src/devise.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const CanCan = require("./can-can.cjs")
|
|
2
2
|
const Deserializer = require("./deserializer.cjs")
|
|
3
|
-
const {digg} = require("
|
|
3
|
+
const {digg} = require("diggerize")
|
|
4
4
|
const EventEmitter = require("events")
|
|
5
5
|
const inflection = require("inflection")
|
|
6
6
|
const Services = require("./services.cjs")
|
|
@@ -50,7 +50,7 @@ module.exports = class ApiMakerDevise {
|
|
|
50
50
|
|
|
51
51
|
const postData = {username, password, args}
|
|
52
52
|
const response = await Services.current().sendRequest("Devise::SignIn", postData)
|
|
53
|
-
const modelClass = digg(require("api-maker/models"), inflection.camelize(args.scope))
|
|
53
|
+
const modelClass = digg(require("@kaspernj/api-maker/src/models"), inflection.camelize(args.scope))
|
|
54
54
|
const modelInstance = new modelClass(digg(response, "model_data"))
|
|
55
55
|
|
|
56
56
|
await CanCan.current().resetAbilities()
|
|
@@ -109,7 +109,7 @@ module.exports = class ApiMakerDevise {
|
|
|
109
109
|
return null
|
|
110
110
|
|
|
111
111
|
const parsedScopeData = Deserializer.parse(scopeData)
|
|
112
|
-
const modelClass = digg(require("api-maker/models"), inflection.camelize(scope))
|
|
112
|
+
const modelClass = digg(require("@kaspernj/api-maker/src/models"), inflection.camelize(scope))
|
|
113
113
|
const modelInstance = new modelClass({data: parsedScopeData})
|
|
114
114
|
|
|
115
115
|
return modelInstance
|
package/src/event-connection.jsx
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
const ModelEvents = require("./model-events.cjs")
|
|
1
2
|
const PropTypes = require("prop-types")
|
|
2
3
|
const PropTypesExact = require("prop-types-exact")
|
|
3
4
|
const React = require("react")
|
|
4
5
|
|
|
5
|
-
export default class ApiMakerEventConnection extends React.
|
|
6
|
+
export default class ApiMakerEventConnection extends React.PureComponent {
|
|
6
7
|
static defaultProps = {
|
|
7
8
|
active: true
|
|
8
9
|
}
|
|
@@ -15,7 +16,7 @@ export default class ApiMakerEventConnection extends React.Component {
|
|
|
15
16
|
})
|
|
16
17
|
|
|
17
18
|
componentDidMount() {
|
|
18
|
-
this.subscription = this.props.model
|
|
19
|
+
this.subscription = ModelEvents.connect(this.props.model, this.props.event, (...args) => this.onCall(...args))
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
componentWillUnmount() {
|
package/src/event-created.jsx
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
const debounce = require("debounce")
|
|
2
|
+
const ModelEvents = require("./model-events.cjs")
|
|
2
3
|
const PropTypes = require("prop-types")
|
|
3
4
|
const PropTypesExact = require("prop-types-exact")
|
|
4
5
|
const React = require("react")
|
|
5
6
|
|
|
6
|
-
export default class ApiMakerEventCreated extends React.
|
|
7
|
+
export default class ApiMakerEventCreated extends React.PureComponent {
|
|
7
8
|
static defaultProps = {
|
|
8
9
|
active: true
|
|
9
10
|
}
|
|
@@ -29,7 +30,7 @@ export default class ApiMakerEventCreated extends React.Component {
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
connect() {
|
|
32
|
-
this.connectCreated = this.props.modelClass
|
|
33
|
+
this.connectCreated = ModelEvents.connectCreated(this.props.modelClass, (...args) => this.onCreated(...args))
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
debounce() {
|
package/src/event-destroyed.jsx
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
const ModelEvents = require("./model-events.cjs")
|
|
1
2
|
const PropTypes = require("prop-types")
|
|
2
3
|
const PropTypesExact = require("prop-types-exact")
|
|
3
4
|
const React = require("react")
|
|
4
5
|
|
|
5
|
-
export default class ApiMakerEventDestroyed extends React.
|
|
6
|
+
export default class ApiMakerEventDestroyed extends React.PureComponent {
|
|
6
7
|
static propTypes = PropTypesExact({
|
|
7
8
|
model: PropTypes.object.isRequired,
|
|
8
9
|
onDestroyed: PropTypes.func.isRequired
|
|
@@ -19,7 +20,7 @@ export default class ApiMakerEventDestroyed extends React.Component {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
connect() {
|
|
22
|
-
this.connectDestroyed = this.props.model
|
|
23
|
+
this.connectDestroyed = ModelEvents.connectDestroyed(this.props.model, this.props.onDestroyed)
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
render() {
|
|
@@ -2,7 +2,7 @@ const EventEmitter = require("events")
|
|
|
2
2
|
const PropTypes = require("prop-types")
|
|
3
3
|
const React = require("react")
|
|
4
4
|
|
|
5
|
-
export default class ApiMakerEventEmitterListener extends React.
|
|
5
|
+
export default class ApiMakerEventEmitterListener extends React.PureComponent {
|
|
6
6
|
static propTypes = {
|
|
7
7
|
events: PropTypes.instanceOf(EventEmitter).isRequired,
|
|
8
8
|
event: PropTypes.string.isRequired,
|
package/src/event-listener.jsx
CHANGED
|
@@ -2,7 +2,7 @@ const PropTypes = require("prop-types")
|
|
|
2
2
|
const PropTypesExact = require("prop-types-exact")
|
|
3
3
|
const React = require("react")
|
|
4
4
|
|
|
5
|
-
export default class ApiMakerEventListener extends React.
|
|
5
|
+
export default class ApiMakerEventListener extends React.PureComponent {
|
|
6
6
|
static callEvent(target, eventName, args = []) {
|
|
7
7
|
let event = document.createEvent("Event")
|
|
8
8
|
event.initEvent(eventName, false, true)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import PropTypes from "prop-types"
|
|
2
|
+
import React from "react"
|
|
3
|
+
|
|
4
|
+
export default class EventLocationChanged extends React.PureComponent {
|
|
5
|
+
static propTypes = {
|
|
6
|
+
history: PropTypes.object.isRequired,
|
|
7
|
+
onChanged: PropTypes.func.isRequired
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
componentDidMount() {
|
|
11
|
+
this.appHistoryUnlisten = this.props.history.listen(this.props.onChanged)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
componentWillUnmount() {
|
|
15
|
+
this.appHistoryUnlisten()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
render() {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
const ModelEvents = require("./model-events.cjs")
|
|
1
2
|
const PropTypes = require("prop-types")
|
|
2
3
|
const PropTypesExact = require("prop-types-exact")
|
|
3
4
|
const React = require("react")
|
|
4
5
|
|
|
5
|
-
export default class ApiMakerEventModelClass extends React.
|
|
6
|
+
export default class ApiMakerEventModelClass extends React.PureComponent {
|
|
6
7
|
static propTypes = PropTypesExact({
|
|
7
8
|
event: PropTypes.string.isRequired,
|
|
8
9
|
modelClass: PropTypes.func.isRequired,
|
|
@@ -20,7 +21,7 @@ export default class ApiMakerEventModelClass extends React.Component {
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
connect() {
|
|
23
|
-
this.connection = this.props.modelClass
|
|
24
|
+
this.connection = ModelEvents.connectModelClass(this.props.modelClass, this.props.event, this.props.onCall)
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
render() {
|
package/src/event-updated.jsx
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
const debounce = require("debounce")
|
|
2
|
+
const ModelEvents = require("./model-events.cjs")
|
|
2
3
|
const PropTypes = require("prop-types")
|
|
3
4
|
const PropTypesExact = require("prop-types-exact")
|
|
4
5
|
const React = require("react")
|
|
5
6
|
|
|
6
|
-
export default class ApiMakerEventUpdated extends React.
|
|
7
|
+
export default class ApiMakerEventUpdated extends React.PureComponent {
|
|
7
8
|
static defaultProps = {
|
|
8
9
|
active: true
|
|
9
10
|
}
|
|
@@ -41,7 +42,7 @@ export default class ApiMakerEventUpdated extends React.Component {
|
|
|
41
42
|
connect() {
|
|
42
43
|
const {model, onConnected} = this.props
|
|
43
44
|
|
|
44
|
-
this.connectUpdated =
|
|
45
|
+
this.connectUpdated = ModelEvents.connectUpdated(model, (...args) => this.onUpdated(...args))
|
|
45
46
|
|
|
46
47
|
if (onConnected) {
|
|
47
48
|
this.connectUpdated.events.addListener("connected", this.onConnected)
|
package/src/history-listener.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const PropTypes = require("prop-types")
|
|
2
2
|
const PropTypesExact = require("prop-types-exact")
|
|
3
3
|
|
|
4
|
-
export default class ApiMakerHistoryListener extends React.
|
|
4
|
+
export default class ApiMakerHistoryListener extends React.PureComponent {
|
|
5
5
|
static propTypes = PropTypesExact({
|
|
6
6
|
onChanged: PropTypes.func.isRequired
|
|
7
7
|
})
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const CableConnectionPool = require("./cable-connection-pool.cjs")
|
|
2
|
+
|
|
3
|
+
module.exports = class ModelEvents {
|
|
4
|
+
static connect(model, eventName, callback) {
|
|
5
|
+
const modelClassName = digg(model.modelClassData(), "name")
|
|
6
|
+
const cableSubscription = CableConnectionPool.current().connectEvent(modelClassName, model.primaryKey(), eventName, callback)
|
|
7
|
+
|
|
8
|
+
return cableSubscription
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
static connectModelClass(modelClass, eventName, callback) {
|
|
12
|
+
const modelClassName = digg(modelClass.modelClassData(), "name")
|
|
13
|
+
const cableSubscription = CableConnectionPool.current().connectModelClassEvent(modelClassName, eventName, callback)
|
|
14
|
+
|
|
15
|
+
return cableSubscription
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static connectCreated(modelClass, callback) {
|
|
19
|
+
const modelClassName = digg(modelClass.modelClassData(), "name")
|
|
20
|
+
const cableSubscription = CableConnectionPool.current().connectCreated(modelClassName, callback)
|
|
21
|
+
|
|
22
|
+
return cableSubscription
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static connectDestroyed(model, callback) {
|
|
26
|
+
const modelClassName = digg(model.modelClassData(), "name")
|
|
27
|
+
const cableSubscription = CableConnectionPool.current().connectDestroyed(modelClassName, model.primaryKey(), callback)
|
|
28
|
+
|
|
29
|
+
return cableSubscription
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static connectUpdated(model, callback) {
|
|
33
|
+
const modelClassName = digg(model.modelClassData(), "name")
|
|
34
|
+
const cableSubscription = CableConnectionPool.current().connectUpdate(modelClassName, model.primaryKey(), callback)
|
|
35
|
+
|
|
36
|
+
return cableSubscription
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/model-prop-type.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {digg} = require("
|
|
1
|
+
const {digg} = require("diggerize")
|
|
2
2
|
const inflection = require("inflection")
|
|
3
3
|
const Preloaded = require("./preloaded.cjs")
|
|
4
4
|
|
|
@@ -23,7 +23,7 @@ module.exports = class ModelsResponseReader {
|
|
|
23
23
|
|
|
24
24
|
for(const modelType in this.response.data) {
|
|
25
25
|
const modelClassName = inflection.classify(modelType)
|
|
26
|
-
const modelClass = digg(require("api-maker/models"), modelClassName)
|
|
26
|
+
const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
|
|
27
27
|
const collectionName = modelClass.modelClassData().collectionName
|
|
28
28
|
|
|
29
29
|
for(const modelId of this.response.data[modelType]) {
|
package/src/preloaded.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {digg} = require("
|
|
1
|
+
const {digg} = require("diggerize")
|
|
2
2
|
const inflection = require("inflection")
|
|
3
3
|
|
|
4
4
|
module.exports = class ApiMakerPreloaded {
|
|
@@ -12,7 +12,7 @@ module.exports = class ApiMakerPreloaded {
|
|
|
12
12
|
|
|
13
13
|
for (const preloadedType in this.response.preloaded) {
|
|
14
14
|
const modelClassName = inflection.classify(preloadedType)
|
|
15
|
-
const modelClass = digg(require("api-maker/models"), modelClassName)
|
|
15
|
+
const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
|
|
16
16
|
|
|
17
17
|
for(const preloadedId in this.response.preloaded[preloadedType]) {
|
|
18
18
|
const preloadedData = this.response.preloaded[preloadedType][preloadedId]
|
package/src/resource-route.cjs
CHANGED
package/src/resource-routes.jsx
CHANGED
package/src/routes-native.cjs
CHANGED
package/src/routes.cjs
CHANGED
package/src/serializer.cjs
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const translatedCollectionsData = require("./translated-collections-data").default
|
|
2
|
+
|
|
3
|
+
export default class ApiMakerTranslatedCollections {
|
|
4
|
+
static get(modelClass, collectionName) {
|
|
5
|
+
const locale = I18n.locale
|
|
6
|
+
const modelClassName = digg(modelClass.modelClassData(), "name")
|
|
7
|
+
const collection = digg(translatedCollectionsData, modelClassName, collectionName, locale, "collection_array")
|
|
8
|
+
|
|
9
|
+
return collection
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
const {digg} = require("
|
|
1
|
+
const {digg} = require("diggerize")
|
|
2
|
+
const ModelEvents = require("./model-events.cjs")
|
|
2
3
|
const PropTypes = require("prop-types")
|
|
3
4
|
const PropTypesExact = require("prop-types-exact")
|
|
4
5
|
const React = require("react")
|
|
5
6
|
|
|
6
|
-
export default class ApiMakerUpdatedAttribute extends React.
|
|
7
|
+
export default class ApiMakerUpdatedAttribute extends React.PureComponent {
|
|
7
8
|
static propTypes = PropTypesExact({
|
|
8
9
|
attribute: PropTypes.string,
|
|
9
10
|
model: PropTypes.object.isRequired,
|
|
@@ -30,7 +31,7 @@ export default class ApiMakerUpdatedAttribute extends React.Component {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
connect() {
|
|
33
|
-
this.connectUpdated = this.props.model
|
|
34
|
+
this.connectUpdated = ModelEvents.connectUpdated(this.props.model, args => {
|
|
34
35
|
if (!this.props.attribute || args.model.isAttributeLoaded(this.props.attribute)) {
|
|
35
36
|
this.setState(
|
|
36
37
|
{model: args.model},
|
package/src/validation-error.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {digg, digs} = require("
|
|
1
|
+
const {digg, digs} = require("diggerize")
|
|
2
2
|
const inflection = require("inflection")
|
|
3
3
|
|
|
4
4
|
class ValidationError {
|
|
@@ -65,7 +65,7 @@ class ValidationError {
|
|
|
65
65
|
getModelClass() {
|
|
66
66
|
const modelName = inflection.classify(digg(this, "modelName"))
|
|
67
67
|
|
|
68
|
-
return digg(require("api-maker/models"), modelName)
|
|
68
|
+
return digg(require("@kaspernj/api-maker/src/models"), modelName)
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
setHandled() {
|