Skip to content

Commit e4ba183

Browse files
committed
feat: allow user to pass functions to the fillOnCreate
1 parent 9448c2a commit e4ba183

File tree

5 files changed

+13
-5
lines changed

5 files changed

+13
-5
lines changed

adminforth/modules/configValidator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ export default class ConfigValidator implements IConfigValidator {
575575
}
576576

577577
// check suggestOnCreate types
578-
if (inCol.suggestOnCreate !== undefined) {
578+
if (inCol.suggestOnCreate !== undefined && typeof inCol.suggestOnCreate !== 'function') {
579579
if (!col.showIn.create) {
580580
errors.push(`Resource "${res.resourceId}" column "${col.name}" suggestOnCreate is present, while column is hidden on create page`);
581581
}

adminforth/modules/restApi.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,9 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
635635
if (col.foreignResource?.unsetLabel) {
636636
col.foreignResource.unsetLabel = await tr(col.foreignResource.unsetLabel, `resource.${resource.resourceId}.foreignResource.unsetLabel`);
637637
}
638+
if (inCol.suggestOnCreate && typeof inCol.suggestOnCreate === 'function') {
639+
col.suggestOnCreate = await inCol.suggestOnCreate(adminUser);
640+
}
638641

639642
return {
640643
...col,

adminforth/spa/src/stores/core.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ export const useCoreStore = defineStore('core', () => {
169169

170170
}
171171

172-
async function fetchResourceFull({ resourceId }: { resourceId: string }) {
173-
if (resourceColumnsId.value === resourceId && resource.value) {
172+
async function fetchResourceFull({ resourceId, forceFetch }: { resourceId: string, forceFetch?: boolean }) {
173+
if (resourceColumnsId.value === resourceId && resource.value && !forceFetch) {
174174
// already fetched
175175
return;
176176
}

adminforth/spa/src/views/CreateView.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ async function onUpdateRecord(newRecord: any) {
145145
onMounted(async () => {
146146
loading.value = true;
147147
await coreStore.fetchResourceFull({
148-
resourceId: route.params.resourceId as string
148+
resourceId: route.params.resourceId as string,
149+
forceFetch: true
149150
});
150151
initialValues.value = (coreStore.resource?.columns || []).reduce<Record<string, unknown>>((acc, column) => {
151152
if (column.suggestOnCreate !== undefined) {

adminforth/types/Common.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,10 @@ export type FillOnCreateFunction = (params: {
633633
adminUser: AdminUser,
634634
}) => any;
635635

636+
export type suggestOnCreateFunction = (params: {
637+
adminUser: AdminUser,
638+
}) => string | number | boolean | object;
639+
636640
/**
637641
* Column describes one field in the table or collection in database.
638642
*/
@@ -768,7 +772,7 @@ export interface AdminForthResourceColumnInputCommon {
768772
/**
769773
* Single value that will be substituted in create form. User can change it before saving the record.
770774
*/
771-
suggestOnCreate?: string | number | boolean | object,
775+
suggestOnCreate?: string | number | boolean | object | suggestOnCreateFunction,
772776

773777
/**
774778
* Whether AdminForth will request user to enter unique value during creating or editing record.

0 commit comments

Comments
 (0)