Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions adminforth/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -568,17 +568,21 @@ class AdminForth implements IAdminForth {
response,
extra,
});
if (!resp || (typeof resp.ok !== 'boolean' && (!resp.error && !resp.newRecordId))) {
if (resp.newRecordId) {
afLogger.warn(`Deprecation warning: beforeSave hook returned 'newRecordId'. Since AdminForth v1.2.9 use 'redirectToRecordId' instead. 'newRecordId' will be removed in v2.0.0`);
}
if (!resp || (typeof resp.ok !== 'boolean' && (!resp.error && !resp.newRecordId && !resp.redirectToRecordId))) {
throw new Error(
`Invalid return value from beforeSave hook. Expected: { ok: boolean, error?: string | null, newRecordId?: any }.\n` +
`Note: Return { ok: false, error: null, newRecordId } to stop creation and redirect to an existing record.`
`Invalid return value from beforeSave hook. Expected: { ok: boolean, error?: string | null, newRecordId?: any, redirectToRecordId?: any }.\n` +
`Note: Return { ok: false, error: null, redirectToRecordId } (preferred) or { ok: false, error: null, newRecordId } (deprecated) to stop creation and redirect to an existing record.`
);
}
if (resp.ok === false && !resp.error) {
const { error, ok, newRecordId } = resp;
const { error, ok, newRecordId, redirectToRecordId } = resp;
return {
error: error ?? 'Operation aborted by hook',
newRecordId: newRecordId
newRecordId: redirectToRecordId ? redirectToRecordId : newRecordId,
redirectToRecordId: redirectToRecordId
};
}
if (resp.error) {
Expand Down
6 changes: 5 additions & 1 deletion adminforth/modules/restApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1280,7 +1280,11 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
extra: { body, query, headers, cookies, requestUrl, response }
});
if (createRecordResponse.error) {
return { error: createRecordResponse.error, ok: false, newRecordId: createRecordResponse.newRecordId };
return {
error: createRecordResponse.error,
ok: false,
newRecordId: createRecordResponse.redirectToRecordId ? createRecordResponse.redirectToRecordId :createRecordResponse.newRecordId,
redirectToRecordId: createRecordResponse.redirectToRecordId };
}
const connector = this.adminforth.connectors[resource.dataSource];

Expand Down
27 changes: 25 additions & 2 deletions adminforth/types/Back.ts
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,15 @@ export type BeforeDataSourceRequestFunction = (params: {
requestUrl: string,
},
adminforth: IAdminForth,
}) => Promise<{ok: boolean, error?: string, newRecordId?: string}>;
}) => Promise<{
ok: boolean,
error?: string | null,
/**
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use redirectToRecordId instead.
*/
newRecordId?: string,
redirectToRecordId?: string
}>;

/**
* Modify response to change how data is returned after fetching from database.
Expand Down Expand Up @@ -549,8 +557,15 @@ export type CreateResourceRecordResult = {
/**
* Optional id of an existing record to redirect to
* (used when a beforeSave hook aborts creation and supplies newRecordId, allows to implement programmatic creation via API).
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use redirectToRecordId instead.
*/
newRecordId?: any;

/**
* Optional id of an existing record to redirect to
* (used when a beforeSave hook aborts creation and supplies redirectToRecordId, allows to implement programmatic creation via API).
*/
redirectToRecordId?: any;
};

/**
Expand Down Expand Up @@ -838,7 +853,15 @@ export type BeforeCreateSaveFunction = (params: {
response: IAdminForthHttpResponse,

extra?: HttpExtra,
}) => Promise<{ok: boolean, error?: string | null, newRecordId?: string}>;
}) => Promise<{
ok: boolean,
error?: string | null,
/**
* @deprecated Since 1.2.9. Will be removed in 2.0.0. Use redirectToRecordId instead.
*/
newRecordId?: string,
redirectToRecordId?: string
}>;

export type AfterCreateSaveFunction = (params: {
/**
Expand Down