|
| 1 | +const { GeneralError } = require('@feathersjs/errors'); |
1 | 2 | const checkContext = require('./check-context');
|
2 | 3 |
|
3 |
| -module.exports = function (field) { |
4 |
| - const deleteField = field || 'deleted'; |
| 4 | +const defaultQuery = { deleted: { $ne: true } }; |
| 5 | +const defaultData = { deleted: true }; |
| 6 | +const getValue = (value, ...args) => { |
| 7 | + if (typeof value === 'function') { |
| 8 | + return Promise.resolve(value(...args)); |
| 9 | + } |
| 10 | + return Promise.resolve(value); |
| 11 | +}; |
5 | 12 |
|
6 |
| - return function (context) { |
7 |
| - const { service, method, params: { query = {} } } = context; |
| 13 | +module.exports = ({ |
| 14 | + deletedQuery = defaultQuery, |
| 15 | + removeData = defaultData |
| 16 | +} = {}) => { |
| 17 | + return async context => { |
| 18 | + const { service, method, params, app } = context; |
| 19 | + const { disableSoftDelete, query = {} } = params; |
8 | 20 |
|
9 |
| - context.params.query = query; |
| 21 | + if (app.version < '4.0.0') { |
| 22 | + throw new GeneralError('The softDelete hook requires Feathers 4.0.0 or later'); |
| 23 | + } |
10 | 24 |
|
11 | 25 | checkContext(context, 'before', null, 'softDelete');
|
12 | 26 |
|
13 |
| - if (context.params.query.$disableSoftDelete) { |
14 |
| - delete context.params.query.$disableSoftDelete; |
| 27 | + if (disableSoftDelete) { |
15 | 28 | return context;
|
16 | 29 | }
|
17 | 30 |
|
18 |
| - context.params.query = Object.assign({}, { |
19 |
| - [deleteField]: { $ne: true } |
20 |
| - }, context.params.query); |
| 31 | + const deleteQuery = await getValue(deletedQuery, context); |
| 32 | + |
| 33 | + context.params.query = Object.assign({}, query, deleteQuery); |
21 | 34 |
|
22 | 35 | if (method === 'remove') {
|
23 |
| - context.data[deleteField] = true; |
| 36 | + const data = await getValue(removeData, context); |
| 37 | + const result = await service.patch(context.id, data, params); |
24 | 38 |
|
25 |
| - return service.patch(context.id, { [deleteField]: true }, context.params) |
26 |
| - .then(result => { |
27 |
| - context.result = result; |
28 |
| - return context; |
29 |
| - }); |
| 39 | + context.result = result; |
30 | 40 | }
|
31 | 41 |
|
32 | 42 | return context;
|
|
0 commit comments