Skip to content

Commit 65bd658

Browse files
committed
docs: diff-add fix
1 parent 188b2f1 commit 65bd658

1 file changed

Lines changed: 121 additions & 61 deletions

File tree

adminforth/documentation/docs/tutorial/09-Plugins/28-CRUD-approve.md

Lines changed: 121 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -190,21 +190,28 @@ The plugin replaces the default rendering of the `data` column with a diff viewe
190190
Import the approval resource in `index.ts` and add it to the AdminForth resource list and menu:
191191

192192
```ts title="./index.ts"
193-
//diff-add import crudManualApproveResource from './resources/crud_manual_approve.js';
193+
//diff-add
194+
import crudManualApproveResource from './resources/crud_manual_approve.js';
194195

195196
export const admin = new AdminForth({
196197
// ...
197198
resources: [
198199
// ...
199-
//diff-add crudManualApproveResource,
200+
//diff-add
201+
crudManualApproveResource,
200202
],
201203
menu: [
202204
// ...
203-
//diff-add {
204-
//diff-add label: 'Approvals',
205-
//diff-add icon: 'flowbite:clipboard-check-solid',
206-
//diff-add resourceId: 'crud_manual_approve',
207-
//diff-add },
205+
//diff-add
206+
{
207+
//diff-add
208+
label: 'Approvals',
209+
//diff-add
210+
icon: 'flowbite:clipboard-check-solid',
211+
//diff-add
212+
resourceId: 'crud_manual_approve',
213+
//diff-add
214+
},
208215
],
209216
});
210217
```
@@ -217,47 +224,83 @@ Open `resources/apartments.ts` and add the helper and hooks below:
217224

218225
```ts title="./resources/apartments.ts"
219226
import { AdminForthDataTypes, type AdminForthResourceInput } from 'adminforth';
220-
//diff-add import { crudApprovePlugin } from './crud_manual_approve.js';
221-
222-
//diff-add async function sendChangeToApproval({
223-
//diff-add resource,
224-
//diff-add action,
225-
//diff-add record,
226-
//diff-add updates,
227-
//diff-add oldRecord,
228-
//diff-add recordId,
229-
//diff-add adminUser,
230-
//diff-add extra,
231-
//diff-add }: any) {
232-
//diff-add // When the CRUD Approve plugin applies an already approved change,
233-
//diff-add // it marks the request with this flag. In that case we must not create
234-
//diff-add // another approval request, otherwise the operation would loop forever.
235-
//diff-add if (extra?.adminforth_plugin_crud_approve?.callingFromApprovalPlugin) {
236-
//diff-add return { ok: true };
237-
//diff-add }
227+
//diff-add
228+
import { crudApprovePlugin } from './crud_manual_approve.js';
229+
230+
//diff-add
231+
async function sendChangeToApproval({
232+
//diff-add
233+
resource,
234+
//diff-add
235+
action,
236+
//diff-add
237+
record,
238+
//diff-add
239+
updates,
240+
//diff-add
241+
oldRecord,
242+
//diff-add
243+
recordId,
244+
//diff-add
245+
adminUser,
246+
//diff-add
247+
extra,
248+
//diff-add
249+
}: any) {
250+
//diff-add
251+
// When the CRUD Approve plugin applies an already approved change,
252+
//diff-add
253+
// it marks the request with this flag. In that case we must not create
254+
//diff-add
255+
// another approval request, otherwise the operation would loop forever.
256+
//diff-add
257+
if (extra?.adminforth_plugin_crud_approve?.callingFromApprovalPlugin) {
258+
//diff-add
259+
return { ok: true };
260+
//diff-add
261+
// }
238262
//diff-add
239-
//diff-add const pkColumnName = resource.columns.find((column: any) => column.primaryKey)?.name || 'id';
240-
//diff-add const data = recordId ? { [pkColumnName]: recordId } : record;
263+
//diff-add
264+
const pkColumnName = resource.columns.find((column: any) => column.primaryKey)?.name || 'id';
265+
//diff-add
266+
const data = recordId ? { [pkColumnName]: recordId } : record;
267+
//diff-add
268+
//diff-add
269+
const result = await crudApprovePlugin.createApprovalRequest({
270+
//diff-add
271+
resource,
272+
//diff-add
273+
action,
274+
//diff-add
275+
data,
276+
//diff-add
277+
user: adminUser,
278+
//diff-add
279+
record,
280+
//diff-add
281+
oldRecord,
282+
//diff-add
283+
updates,
284+
//diff-add
285+
extra,
286+
//diff-add
287+
});
241288
//diff-add
242-
//diff-add const result = await crudApprovePlugin.createApprovalRequest({
243-
//diff-add resource,
244-
//diff-add action,
245-
//diff-add data,
246-
//diff-add user: adminUser,
247-
//diff-add record,
248-
//diff-add oldRecord,
249-
//diff-add updates,
250-
//diff-add extra,
251-
//diff-add });
289+
//diff-add
290+
if (result.error) {
291+
//diff-add
292+
return { ok: false, error: result.error };
293+
//diff-add
294+
}
252295
//diff-add
253-
//diff-add if (result.error) {
254-
//diff-add return { ok: false, error: result.error };
255-
//diff-add }
296+
//diff-add
297+
// Stop the original mutation. The real create/edit/delete will be executed
298+
//diff-add
299+
// later only if a reviewer approves the request.
300+
//diff-add
301+
return { ok: true, error: "Action sent for manual approval" };
256302
//diff-add
257-
//diff-add // Stop the original mutation. The real create/edit/delete will be executed
258-
//diff-add // later only if a reviewer approves the request.
259-
//diff-add return { ok: true, error: "Action sent for manual approval" };
260-
//diff-add }
303+
}
261304

262305
export default {
263306
dataSource: 'maindb',
@@ -268,23 +311,40 @@ export default {
268311
columns: [
269312
// ...
270313
],
271-
//diff-add hooks: {
272-
//diff-add create: {
273-
//diff-add beforeSave: async (args: any) => {
274-
//diff-add return sendChangeToApproval({ ...args, action: 'create' });
275-
//diff-add },
276-
//diff-add },
277-
//diff-add edit: {
278-
//diff-add beforeSave: async (args: any) => {
279-
//diff-add return sendChangeToApproval({ ...args, action: 'edit' });
280-
//diff-add },
281-
//diff-add },
282-
//diff-add delete: {
283-
//diff-add beforeSave: async (args: any) => {
284-
//diff-add return sendChangeToApproval({ ...args, action: 'delete' });
285-
//diff-add },
286-
//diff-add },
287-
//diff-add },
314+
//diff-add
315+
hooks: {
316+
//diff-add
317+
create: {
318+
//diff-add
319+
beforeSave: async (args: any) => {
320+
//diff-add
321+
return sendChangeToApproval({ ...args, action: 'create' });
322+
//diff-add
323+
},
324+
//diff-add
325+
},
326+
//diff-add
327+
edit: {
328+
//diff-add
329+
beforeSave: async (args: any) => {
330+
//diff-add
331+
return sendChangeToApproval({ ...args, action: 'edit' });
332+
//diff-add
333+
},
334+
//diff-add
335+
},
336+
//diff-add
337+
delete: {
338+
//diff-add
339+
beforeSave: async (args: any) => {
340+
//diff-add
341+
return sendChangeToApproval({ ...args, action: 'delete' });
342+
//diff-add
343+
},
344+
//diff-add
345+
},
346+
//diff-add
347+
},
288348
options: {
289349
listPageSize: 10,
290350
allowedActions: {

0 commit comments

Comments
 (0)