Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | 32x 2x 2x 2x 5x 5x 5x 5x 5x 27x 27x 27x 27x 27x 5x 4x 27x 5x 27x 5x 27x 27x 2x 25x 27x 2x 25x 27x 2x 25x 27x | import { useMutation } from 'react-query';
import noop from 'lodash/noop';
import { useOkapiKy } from '@folio/stripes/core';
// DEFAULT ASSUMES PUT/POST goes to ENDPOINT/id and that POST goes to ENDPOINT
// A utility function to provide this all-in-one functionality used in various places
const useMutateGeneric = ({
afterQueryCalls: {
delete: afterQueryDelete = noop,
post: afterQueryPost = noop,
put: afterQueryPut = noop,
} = {},
catchQueryCalls: {
delete: catchQueryDelete = noop,
post: catchQueryPost = noop,
put: catchQueryPut = noop,
} = {},
endpoint,
endpointMutators: {
delete: endpointMutatorDelete = (id) => `${endpoint}/${id}`,
post: endpointMutatorPost = () => endpoint,
put: endpointMutatorPut = (data) => `${endpoint}/${data.id}`,
} = {},
payloadMutators: {
post: payloadMutatorPost = (data) => ({ json: data }),
put: payloadMutatorPut = (data) => ({ json: data })
} = {},
promiseReturns: {
delete: promiseReturnDelete = (id, ky) => ky.delete(endpointMutatorDelete(id)).json(),
post: promiseReturnPost = (data, ky) => ky.post(endpointMutatorPost(data), payloadMutatorPost(data)).json(),
put: promiseReturnPut = (data, ky) => ky.put(endpointMutatorPut(data), payloadMutatorPut(data)).json()
} = {},
queryKey = [], // Must be type: array
queryKeyMutators: {
delete: queryKeyMutatorDelete = () => [...queryKey, 'delete'],
post: queryKeyMutatorPost = () => [...queryKey, 'create'],
put: queryKeyMutatorPut = () => [...queryKey, 'edit'],
} = {},
queryParams: {
delete: queryParamsDelete = {},
post: queryParamsPost = {},
put: queryParamsPut = {},
} = {},
returnQueryObject: {
delete: returnQueryObjectDelete = false,
post: returnQueryObjectPost = false,
put: returnQueryObjectPut = false,
} = {}
} = {}) => {
const ky = useOkapiKy();
// DELETE Object
const deleteQueryObject = useMutation(
queryKeyMutatorDelete(),
async (id) => promiseReturnDelete(id, ky)
.then(res => afterQueryDelete(res))
.catch(catchQueryDelete),
queryParamsDelete
);
// Edit Object
const putQueryObject = useMutation(
queryKeyMutatorPut(),
async (data) => promiseReturnPut(data, ky)
.then(afterQueryPut)
.catch(catchQueryPut),
queryParamsPut
);
// Create Object
const postQueryObject = useMutation(
queryKeyMutatorPost(),
async (data) => promiseReturnPost(data, ky)
.then(afterQueryPost)
.catch(catchQueryPost),
queryParamsPost
);
const returnObj = {};
if (returnQueryObjectDelete) {
returnObj.delete = deleteQueryObject;
} else {
returnObj.delete = deleteQueryObject.mutateAsync;
}
if (returnQueryObjectPut) {
returnObj.put = putQueryObject;
} else {
returnObj.put = putQueryObject.mutateAsync;
}
if (returnQueryObjectPost) {
returnObj.post = postQueryObject;
} else {
returnObj.post = postQueryObject.mutateAsync;
}
return returnObj;
};
export default useMutateGeneric;
|