Skip to content

Commit b3c4623

Browse files
committed
fix: move response to extra (for now keep previous one for compatibility) AdminForth/1202
1 parent 1a0ea14 commit b3c4623

File tree

3 files changed

+245
-24
lines changed

3 files changed

+245
-24
lines changed

adminforth/index.ts

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ import {
1717
AdminForthResource,
1818
IAdminForthDataSourceConnectorBase,
1919
IWebSocketBroker,
20-
HttpExtra,
21-
BeforeCreateSaveFunction,
2220
AdminForthInputConfig,
23-
IAdminForthHttpResponse,
21+
CreateResourceRecordParams,
22+
UpdateResourceRecordParams,
23+
DeleteResourceRecordParams,
24+
CreateResourceRecordResult,
25+
UpdateResourceRecordResult,
26+
DeleteResourceRecordResult,
2427
} from './types/Back.js';
25-
2628
import {
2729
AdminForthFilterOperators,
2830
AdminForthDataTypes,
@@ -538,10 +540,15 @@ class AdminForth implements IAdminForth {
538540
return users.data[0] || null;
539541
}
540542

543+
/**
544+
* Create record and execute hooks
545+
* @param params - Parameters for record creation. See CreateResourceRecordParams.
546+
* @returns Result of record creation. See CreateResourceRecordResult.
547+
*/
541548
async createResourceRecord(
542-
{ resource, record, adminUser, extra, response }:
543-
{ resource: AdminForthResource, record: any, adminUser: AdminUser, extra?: HttpExtra, response: IAdminForthHttpResponse }
544-
): Promise<{ error?: string, createdRecord?: any, newRecordId?: any }> {
549+
params: CreateResourceRecordParams,
550+
): Promise<CreateResourceRecordResult> {
551+
const { resource, record, adminUser, extra, response } = params;
545552

546553
const err = this.validateRecordValues(resource, record, 'create');
547554
if (err) {
@@ -622,12 +629,15 @@ class AdminForth implements IAdminForth {
622629

623630
/**
624631
* record is partial record with only changed fields
632+
*
633+
* Update record by id and execute hooks
634+
* @param params - Parameters for record update. See UpdateResourceRecordParams.
635+
* @returns Result of record update. See UpdateResourceRecordResult.
625636
*/
626637
async updateResourceRecord(
627-
{ resource, recordId, record, oldRecord, adminUser, response, extra, updates }:
628-
| { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, response: IAdminForthHttpResponse, extra?: HttpExtra, updates?: never }
629-
| { resource: AdminForthResource, recordId: any, record?: never, oldRecord: any, adminUser: AdminUser, response: IAdminForthHttpResponse, extra?: HttpExtra, updates: any }
630-
): Promise<{ error?: string }> {
638+
params: UpdateResourceRecordParams,
639+
): Promise<UpdateResourceRecordResult> {
640+
const { resource, recordId, record, oldRecord, adminUser, response, extra, updates } = params;
631641
const dataToUse = updates || record;
632642
const err = this.validateRecordValues(resource, dataToUse, 'edit');
633643
if (err) {
@@ -713,10 +723,15 @@ class AdminForth implements IAdminForth {
713723
return { error: null };
714724
}
715725

726+
/**
727+
* Delete record by id and execute hooks
728+
* @param params - Parameters for record deletion. See DeleteResourceRecordParams.
729+
* @returns Result of record deletion. See DeleteResourceRecordResult.
730+
*/
716731
async deleteResourceRecord(
717-
{ resource, recordId, adminUser, record, response, extra }:
718-
{ resource: AdminForthResource, recordId: any, adminUser: AdminUser, record: any, response: IAdminForthHttpResponse, extra?: HttpExtra }
719-
): Promise<{ error?: string }> {
732+
params: DeleteResourceRecordParams,
733+
): Promise<DeleteResourceRecordResult> {
734+
const { resource, recordId, adminUser, record, response, extra } = params;
720735
// execute hook if needed
721736
for (const hook of listify(resource.hooks?.delete?.beforeSave)) {
722737
const resp = await hook({

adminforth/modules/restApi.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,10 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
12751275
}
12761276
}
12771277

1278-
const createRecordResponse = await this.adminforth.createResourceRecord({ resource, record, adminUser, response, extra: { body, query, headers, cookies, requestUrl } });
1278+
const createRecordResponse = await this.adminforth.createResourceRecord({
1279+
resource, record, adminUser, response,
1280+
extra: { body, query, headers, cookies, requestUrl, response }
1281+
});
12791282
if (createRecordResponse.error) {
12801283
return { error: createRecordResponse.error, ok: false, newRecordId: createRecordResponse.newRecordId };
12811284
}
@@ -1395,7 +1398,10 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
13951398
}
13961399
}
13971400

1398-
const { error } = await this.adminforth.updateResourceRecord({ resource, record, adminUser, oldRecord, recordId, response, extra: { body, query, headers, cookies, requestUrl} });
1401+
const { error } = await this.adminforth.updateResourceRecord({
1402+
resource, record, adminUser, oldRecord, recordId, response,
1403+
extra: { body, query, headers, cookies, requestUrl, response }
1404+
});
13991405
if (error) {
14001406
return { error };
14011407
}
@@ -1434,7 +1440,10 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
14341440
return { error };
14351441
}
14361442

1437-
const { error: deleteError } = await this.adminforth.deleteResourceRecord({ resource, record, adminUser, recordId: body['primaryKey'], response, extra: { body, query, headers, cookies, requestUrl } });
1443+
const { error: deleteError } = await this.adminforth.deleteResourceRecord({
1444+
resource, record, adminUser, recordId: body['primaryKey'], response,
1445+
extra: { body, query, headers, cookies, requestUrl, response }
1446+
});
14381447
if (deleteError) {
14391448
return { error: deleteError };
14401449
}

adminforth/types/Back.ts

Lines changed: 204 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -359,17 +359,16 @@ export interface IAdminForth {
359359
tr(msg: string, category: string, lang: string, params: any, pluralizationNumber?: number): Promise<string>;
360360

361361
createResourceRecord(
362-
params: { resource: AdminForthResource, record: any, response: IAdminForthHttpResponse, adminUser: AdminUser, extra?: HttpExtra }
363-
): Promise<{ error?: string, createdRecord?: any, newRecordId?: any }>;
362+
params: CreateResourceRecordParams,
363+
): Promise<CreateResourceRecordResult>;
364364

365365
updateResourceRecord(
366-
params: { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, response: IAdminForthHttpResponse, extra?: HttpExtra, updates?: never }
367-
| { resource: AdminForthResource, recordId: any, record?: never, oldRecord: any, adminUser: AdminUser, response: IAdminForthHttpResponse, extra?: HttpExtra, updates: any }
368-
): Promise<{ error?: string }>;
366+
params: UpdateResourceRecordParams,
367+
): Promise<UpdateResourceRecordResult>;
369368

370369
deleteResourceRecord(
371-
params: { resource: AdminForthResource, recordId: string, adminUser: AdminUser, record: any, response: IAdminForthHttpResponse, extra?: HttpExtra }
372-
): Promise<{ error?: string }>;
370+
params: DeleteResourceRecordParams,
371+
): Promise<DeleteResourceRecordResult>;
373372

374373
auth: IAdminForthAuth;
375374

@@ -534,7 +533,205 @@ export interface HttpExtra {
534533
cookies: Record<string, string>,
535534
requestUrl: string,
536535
meta?: any,
536+
response: IAdminForthHttpResponse
537537
}
538+
539+
/**
540+
* Result of {@link IAdminForth.createResourceRecord}.
541+
*/
542+
export type CreateResourceRecordResult = {
543+
/** Optional error message if creation failed. */
544+
error?: string;
545+
546+
/** Created record as returned from the connector. */
547+
createdRecord?: any;
548+
549+
/**
550+
* Optional id of an existing record to redirect to
551+
* (used when a beforeSave hook aborts creation and supplies newRecordId).
552+
*/
553+
newRecordId?: any;
554+
};
555+
556+
/**
557+
* Parameters for {@link IAdminForth.createResourceRecord}.
558+
*/
559+
export type CreateResourceRecordParams = {
560+
/**
561+
* Resource configuration used to create a record.
562+
*/
563+
resource: AdminForthResource;
564+
565+
/**
566+
* Record data to create.
567+
*/
568+
record: any;
569+
570+
/**
571+
* Admin user performing the action.
572+
*/
573+
adminUser: AdminUser;
574+
575+
/**
576+
* HTTP response object.
577+
*
578+
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use extra.response instead.
579+
*/
580+
response: IAdminForthHttpResponse;
581+
582+
/**
583+
* Extra HTTP information. Prefer using extra.response over the top-level response field.
584+
*/
585+
extra?: HttpExtra;
586+
};
587+
588+
/**
589+
* Parameters for {@link IAdminForth.updateResourceRecord}.
590+
*/
591+
export type UpdateResourceRecordParams =
592+
| {
593+
/**
594+
* Resource configuration used to update a record.
595+
*/
596+
resource: AdminForthResource;
597+
598+
/**
599+
* Primary key value of the record to update.
600+
*/
601+
recordId: any;
602+
603+
/**
604+
* Full record data with applied changes.
605+
*
606+
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use updates instead.
607+
*/
608+
record: any;
609+
610+
/**
611+
* Record data before update.
612+
*/
613+
oldRecord: any;
614+
615+
/**
616+
* Admin user performing the action.
617+
*/
618+
adminUser: AdminUser;
619+
620+
/**
621+
* HTTP response object.
622+
*
623+
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use extra.response instead.
624+
*/
625+
response: IAdminForthHttpResponse;
626+
627+
/**
628+
* Extra HTTP information. Prefer using extra.response over the top-level response field.
629+
*/
630+
extra?: HttpExtra;
631+
632+
/**
633+
* Partial record data with only changed fields. Mutually exclusive with record.
634+
*/
635+
updates?: never;
636+
}
637+
| {
638+
/**
639+
* Resource configuration used to update a record.
640+
*/
641+
resource: AdminForthResource;
642+
643+
/**
644+
* Primary key value of the record to update.
645+
*/
646+
recordId: any;
647+
648+
/**
649+
* Full record data with applied changes.
650+
*
651+
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use updates instead.
652+
*/
653+
record?: never;
654+
655+
/**
656+
* Record data before update.
657+
*/
658+
oldRecord: any;
659+
660+
/**
661+
* Admin user performing the action.
662+
*/
663+
adminUser: AdminUser;
664+
665+
/**
666+
* HTTP response object.
667+
*
668+
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use extra.response instead.
669+
*/
670+
response: IAdminForthHttpResponse;
671+
672+
/**
673+
* Extra HTTP information. Prefer using extra.response over the top-level response field.
674+
*/
675+
extra?: HttpExtra;
676+
677+
/**
678+
* Partial record data with only changed fields. Mutually exclusive with record.
679+
*/
680+
updates: any;
681+
};
682+
683+
/**
684+
* Parameters for {@link IAdminForth.deleteResourceRecord}.
685+
*/
686+
export type DeleteResourceRecordParams = {
687+
/**
688+
* Resource configuration used to delete a record.
689+
*/
690+
resource: AdminForthResource;
691+
692+
/**
693+
* Primary key value of the record to delete.
694+
*/
695+
recordId: string;
696+
697+
/**
698+
* Admin user performing the action.
699+
*/
700+
adminUser: AdminUser;
701+
702+
/**
703+
* Record data before deletion.
704+
*/
705+
record: any;
706+
707+
/**
708+
* HTTP response object.
709+
*
710+
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use extra.response instead.
711+
*/
712+
response: IAdminForthHttpResponse;
713+
714+
/**
715+
* Extra HTTP information. Prefer using extra.response over the top-level response field.
716+
*/
717+
extra?: HttpExtra;
718+
};
719+
720+
/**
721+
* Result of {@link IAdminForth.updateResourceRecord}.
722+
*/
723+
export type UpdateResourceRecordResult = {
724+
/** Optional error message if update failed. */
725+
error?: string;
726+
};
727+
728+
/**
729+
* Result of {@link IAdminForth.deleteResourceRecord}.
730+
*/
731+
export type DeleteResourceRecordResult = {
732+
/** Optional error message if delete failed. */
733+
error?: string;
734+
};
538735
/**
539736
* Modify record to change how data is saved to database.
540737
* Return ok: false and error: string to stop execution and show error message to user. Return ok: true to continue execution.

0 commit comments

Comments
 (0)