jason-rails 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/client/lib/createJasonReducers.js +3 -4
- data/client/lib/createPayloadHandler.js +2 -2
- data/client/lib/pruneIdsMiddleware.js +1 -1
- data/client/lib/useJason.test.js +33 -1
- data/client/package.json +1 -1
- data/client/src/createJasonReducers.ts +3 -4
- data/client/src/createPayloadHandler.ts +2 -2
- data/client/src/pruneIdsMiddleware.ts +2 -1
- data/client/src/useJason.test.ts +41 -1
- data/lib/jason/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2788ecafe67bc475346d83681912063b1081610e06b685405d4f3b332a665695
|
4
|
+
data.tar.gz: 6647cc3a7815a914b98a9477330c32a642fec64c809aa4195fa5c192a4b4b003
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf1b1ed464f9ef46cd5b3aa2dd7e8ebb982a3d6d3ebe68a3f92f2ad8b5ab31ea8476817fd16666346d358e9d5a635b4af792bba16e41105eefb7a789082567f1
|
7
|
+
data.tar.gz: a06afb2c5db05447d7eda5a6f17020a14fd1d486b50f17e14c155738e7166534a52c418f5463742c0956102d744429198ee0101569cef156366586eee3e7c058
|
@@ -42,18 +42,17 @@ function generateJasonSlices(models) {
|
|
42
42
|
setSubscriptionIds(s, a) {
|
43
43
|
const { payload } = a;
|
44
44
|
const { subscriptionId, model, ids } = payload;
|
45
|
-
|
46
|
-
s[model][subscriptionId] = ids;
|
45
|
+
s[model][subscriptionId] = ids.map(id => String(id));
|
47
46
|
},
|
48
47
|
addSubscriptionId(s, a) {
|
49
48
|
const { payload } = a;
|
50
49
|
const { subscriptionId, model, id } = payload;
|
51
|
-
s[model][subscriptionId] = lodash_1.default.union(s[model][subscriptionId] || [], [id]);
|
50
|
+
s[model][subscriptionId] = lodash_1.default.union(s[model][subscriptionId] || [], [String(id)]);
|
52
51
|
},
|
53
52
|
removeSubscriptionId(s, a) {
|
54
53
|
const { payload } = a;
|
55
54
|
const { subscriptionId, model, id } = payload;
|
56
|
-
s[model][subscriptionId] = lodash_1.default.
|
55
|
+
s[model][subscriptionId] = lodash_1.default.difference(s[model][subscriptionId] || [], [String(id)]);
|
57
56
|
},
|
58
57
|
removeSubscription(s, a) {
|
59
58
|
const { payload: { subscriptionId } } = a;
|
@@ -36,7 +36,7 @@ function createPayloadHandler({ dispatch, serverActionQueue, transportAdapter, c
|
|
36
36
|
}
|
37
37
|
const { payload, destroy, id, type } = patchQueue[model][idx[model]];
|
38
38
|
if (type === 'payload') {
|
39
|
-
dispatch({ type: `${pluralize_1.default(model)}/upsertMany`, payload });
|
39
|
+
dispatch({ type: `${pluralize_1.default(model)}/upsertMany`, payload: payload.map(m => (Object.assign(Object.assign({}, m), { id: String(m.id) }))) });
|
40
40
|
const ids = payload.map(instance => instance.id);
|
41
41
|
dispatch({ type: `jasonModels/setSubscriptionIds`, payload: { model, subscriptionId, ids } });
|
42
42
|
}
|
@@ -45,7 +45,7 @@ function createPayloadHandler({ dispatch, serverActionQueue, transportAdapter, c
|
|
45
45
|
dispatch({ type: `jasonModels/removeSubscriptionId`, payload: { model, subscriptionId, id } });
|
46
46
|
}
|
47
47
|
else {
|
48
|
-
dispatch({ type: `${pluralize_1.default(model)}/upsert`, payload });
|
48
|
+
dispatch({ type: `${pluralize_1.default(model)}/upsert`, payload: Object.assign(Object.assign({}, payload), { id: String(payload.id) }) });
|
49
49
|
dispatch({ type: `jasonModels/addSubscriptionId`, payload: { model, subscriptionId, id } });
|
50
50
|
}
|
51
51
|
delete patchQueue[model][idx[model]];
|
@@ -9,7 +9,7 @@ const pruneIdsMiddleware = schema => store => next => action => {
|
|
9
9
|
const { type, payload } = action;
|
10
10
|
const result = next(action);
|
11
11
|
const state = store.getState();
|
12
|
-
if (type === 'jasonModels/setSubscriptionIds' || type === 'jasonModels/
|
12
|
+
if (type === 'jasonModels/setSubscriptionIds' || type === 'jasonModels/removeSubscriptionId') {
|
13
13
|
const { model, ids } = payload;
|
14
14
|
let idsInSubs = [];
|
15
15
|
lodash_1.default.map(state.jasonModels[model], (subscribedIds, k) => {
|
data/client/lib/useJason.test.js
CHANGED
@@ -81,5 +81,37 @@ test('pruning IDs', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
81
|
idx: 2
|
82
82
|
});
|
83
83
|
// The ID 4 should have been pruned
|
84
|
-
expect(store.getState().posts.ids).toStrictEqual([5]);
|
84
|
+
expect(store.getState().posts.ids).toStrictEqual(['5']);
|
85
|
+
}));
|
86
|
+
test('pruning IDs by destroy', () => __awaiter(void 0, void 0, void 0, function* () {
|
87
|
+
const resp = { data: {
|
88
|
+
schema: { post: {} },
|
89
|
+
transportService: 'action_cable'
|
90
|
+
} };
|
91
|
+
// @ts-ignore
|
92
|
+
restClient_1.default.get.mockResolvedValue(resp);
|
93
|
+
const { result, waitForNextUpdate } = react_hooks_1.renderHook(() => useJason_1.default({ reducers: {
|
94
|
+
test: (s, a) => s || {}
|
95
|
+
} }));
|
96
|
+
yield waitForNextUpdate();
|
97
|
+
const [store, value, connected] = result.current;
|
98
|
+
const { handlePayload, subscribe } = value;
|
99
|
+
const subscription = subscribe({ post: {} });
|
100
|
+
handlePayload({
|
101
|
+
type: 'payload',
|
102
|
+
model: 'post',
|
103
|
+
payload: [{ id: 4, name: 'test' }, { id: 5, name: 'test it out' }],
|
104
|
+
md5Hash: subscription.md5Hash,
|
105
|
+
idx: 1
|
106
|
+
});
|
107
|
+
expect(store.getState().posts.ids).toStrictEqual(['4', '5']);
|
108
|
+
handlePayload({
|
109
|
+
destroy: true,
|
110
|
+
model: 'post',
|
111
|
+
id: 5,
|
112
|
+
md5Hash: subscription.md5Hash,
|
113
|
+
idx: 2
|
114
|
+
});
|
115
|
+
// The ID 4 should have been pruned
|
116
|
+
expect(store.getState().posts.ids).toStrictEqual(['4']);
|
85
117
|
}));
|
data/client/package.json
CHANGED
@@ -42,18 +42,17 @@ function generateJasonSlices(models) {
|
|
42
42
|
setSubscriptionIds(s,a) {
|
43
43
|
const { payload } = a
|
44
44
|
const { subscriptionId, model, ids } = payload
|
45
|
-
|
46
|
-
s[model][subscriptionId] = ids
|
45
|
+
s[model][subscriptionId] = ids.map(id => String(id))
|
47
46
|
},
|
48
47
|
addSubscriptionId(s,a) {
|
49
48
|
const { payload } = a
|
50
49
|
const { subscriptionId, model, id } = payload
|
51
|
-
s[model][subscriptionId] = _.union(s[model][subscriptionId] || [], [id])
|
50
|
+
s[model][subscriptionId] = _.union(s[model][subscriptionId] || [], [String(id)])
|
52
51
|
},
|
53
52
|
removeSubscriptionId(s,a) {
|
54
53
|
const { payload } = a
|
55
54
|
const { subscriptionId, model, id } = payload
|
56
|
-
s[model][subscriptionId] = _.
|
55
|
+
s[model][subscriptionId] = _.difference(s[model][subscriptionId] || [], [String(id)])
|
57
56
|
},
|
58
57
|
removeSubscription(s, a) {
|
59
58
|
const { payload: { subscriptionId } } = a
|
@@ -42,14 +42,14 @@ export default function createPayloadHandler({ dispatch, serverActionQueue, tran
|
|
42
42
|
const { payload, destroy, id, type } = patchQueue[model][idx[model]]
|
43
43
|
|
44
44
|
if (type === 'payload') {
|
45
|
-
dispatch({ type: `${pluralize(model)}/upsertMany`, payload })
|
45
|
+
dispatch({ type: `${pluralize(model)}/upsertMany`, payload: payload.map(m => ({ ...m, id: String(m.id) })) })
|
46
46
|
const ids = payload.map(instance => instance.id)
|
47
47
|
dispatch({ type: `jasonModels/setSubscriptionIds`, payload: { model, subscriptionId, ids }})
|
48
48
|
} else if (destroy) {
|
49
49
|
// Middleware will determine if this model should be removed if it isn't in any other subscriptions
|
50
50
|
dispatch({ type: `jasonModels/removeSubscriptionId`, payload: { model, subscriptionId, id }})
|
51
51
|
} else {
|
52
|
-
dispatch({ type: `${pluralize(model)}/upsert`, payload })
|
52
|
+
dispatch({ type: `${pluralize(model)}/upsert`, payload: { ...payload, id: String(payload.id) } })
|
53
53
|
dispatch({ type: `jasonModels/addSubscriptionId`, payload: { model, subscriptionId, id }})
|
54
54
|
}
|
55
55
|
|
@@ -6,13 +6,14 @@ const pruneIdsMiddleware = schema => store => next => action => {
|
|
6
6
|
const result = next(action)
|
7
7
|
|
8
8
|
const state = store.getState()
|
9
|
-
if (type === 'jasonModels/setSubscriptionIds' || type === 'jasonModels/
|
9
|
+
if (type === 'jasonModels/setSubscriptionIds' || type === 'jasonModels/removeSubscriptionId') {
|
10
10
|
const { model, ids } = payload
|
11
11
|
|
12
12
|
let idsInSubs = []
|
13
13
|
_.map(state.jasonModels[model], (subscribedIds, k) => {
|
14
14
|
idsInSubs = _.union(idsInSubs, subscribedIds)
|
15
15
|
})
|
16
|
+
|
16
17
|
// Find IDs currently in Redux that aren't in any subscription
|
17
18
|
const idsToRemove = _.difference(state[pluralize(model)].ids, idsInSubs)
|
18
19
|
store.dispatch({ type: `${pluralize(model)}/removeMany`, payload: idsToRemove })
|
data/client/src/useJason.test.ts
CHANGED
@@ -83,5 +83,45 @@ test('pruning IDs', async () => {
|
|
83
83
|
})
|
84
84
|
|
85
85
|
// The ID 4 should have been pruned
|
86
|
-
expect(store.getState().posts.ids).toStrictEqual([5])
|
86
|
+
expect(store.getState().posts.ids).toStrictEqual(['5'])
|
87
|
+
})
|
88
|
+
|
89
|
+
test('pruning IDs by destroy', async () => {
|
90
|
+
const resp = { data: {
|
91
|
+
schema: { post: {} },
|
92
|
+
transportService: 'action_cable'
|
93
|
+
} };
|
94
|
+
|
95
|
+
// @ts-ignore
|
96
|
+
restClient.get.mockResolvedValue(resp);
|
97
|
+
|
98
|
+
const { result, waitForNextUpdate } = renderHook(() => useJason({ reducers: {
|
99
|
+
test: (s,a) => s || {}
|
100
|
+
}}));
|
101
|
+
|
102
|
+
await waitForNextUpdate()
|
103
|
+
const [store, value, connected] = result.current
|
104
|
+
const { handlePayload, subscribe } = value
|
105
|
+
|
106
|
+
const subscription = subscribe({ post: {} })
|
107
|
+
|
108
|
+
handlePayload({
|
109
|
+
type: 'payload',
|
110
|
+
model: 'post',
|
111
|
+
payload: [{ id: 4, name: 'test' }, { id: 5, name: 'test it out' }],
|
112
|
+
md5Hash: subscription.md5Hash,
|
113
|
+
idx: 1
|
114
|
+
})
|
115
|
+
expect(store.getState().posts.ids).toStrictEqual(['4', '5'])
|
116
|
+
|
117
|
+
handlePayload({
|
118
|
+
destroy: true,
|
119
|
+
model: 'post',
|
120
|
+
id: 5,
|
121
|
+
md5Hash: subscription.md5Hash,
|
122
|
+
idx: 2
|
123
|
+
})
|
124
|
+
|
125
|
+
// The ID 4 should have been pruned
|
126
|
+
expect(store.getState().posts.ids).toStrictEqual(['4'])
|
87
127
|
})
|
data/lib/jason/version.rb
CHANGED