Skip to content

Commit 744d0da

Browse files
committed
Adds ability to trigger custom actions
1 parent e21cfd5 commit 744d0da

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

client/src/hocs/withResource.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
createResource,
1111
updateResource,
1212
deleteResource,
13+
resourceAction,
1314
getOne,
1415
getError,
1516
} from '../store/api';
@@ -48,6 +49,8 @@ const withResource = (resourceType, resourceMeta = {}) => (WrappedComponent) =>
4849
dispatch(updateResource(resourceType, payload, { ...resourceMeta, ...meta })),
4950
deleteResource: (payload, meta) =>
5051
dispatch(deleteResource(resourceType, payload, { ...resourceMeta, ...meta })),
52+
resourceAction: (payload, meta) =>
53+
dispatch(resourceAction(resourceType, payload, { ...resourceMeta, ...meta })),
5154
});
5255

5356
return connect(mapStateToProps, mapDispatchToProps)(enhance(WrappedComponent));

client/src/hocs/withResourceList.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
createResource,
1111
updateResource,
1212
deleteResource,
13+
resourceAction,
1314
getList,
1415
} from '../store/api';
1516

@@ -63,6 +64,8 @@ const withResourceList = (resourceType, resourceMeta = {}) => (WrappedComponent)
6364
dispatch(updateResource(resourceType, payload, { ...resourceMeta, ...meta })),
6465
deleteResource: (payload, meta) =>
6566
dispatch(deleteResource(resourceType, payload, { ...resourceMeta, ...meta })),
67+
resourceAction: (payload, meta) =>
68+
dispatch(resourceAction(resourceType, payload, { ...resourceMeta, ...meta }))
6669
});
6770

6871
return connect(mapStateToProps, mapDispatchToProps)(enhance(WrappedComponent));

client/src/store/api/actions.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const GET_MANY = createAsyncActionType('GET_MANY');
1919
export const CREATE = createAsyncActionType('CREATE');
2020
export const UPDATE = createAsyncActionType('UPDATE');
2121
export const DELETE = createAsyncActionType('DELETE');
22+
export const ACTION = createAsyncActionType('ACTION');
2223

2324
export const fetchOne = createAsyncAction(GET_ONE, (payload, meta) => client({
2425
url: `${meta.url}/${payload.id}`,
@@ -55,3 +56,10 @@ export const deleteResource = createAsyncAction(DELETE, (payload, meta) => clien
5556
url: `${meta.url}/${payload.id}`,
5657
method: 'DELETE',
5758
}).then(() => ({ data: payload })));
59+
60+
export const resourceAction = createAsyncAction(ACTION, (payload, meta = {}) => client({
61+
url: meta.url,
62+
params: { include: meta.include },
63+
method: meta.method || 'PUT',
64+
data: JSON.stringify(payload),
65+
}).then(normalizeResponse).catch(normalizeErrors));

0 commit comments

Comments
 (0)