diff --git a/packages/client/src/crud/CRUD.test.tsx b/packages/client/src/crud/CRUD.test.tsx index 0f78a10..52f9660 100644 --- a/packages/client/src/crud/CRUD.test.tsx +++ b/packages/client/src/crud/CRUD.test.tsx @@ -311,10 +311,10 @@ describe('CRUD', () => { describe('create', () => { it('resets form.create state', () => { - store.dispatch(actions.create()) + store.dispatch(actions.create({name: 'a'})) expect(store.getState().Crud.form.create).toEqual({ item: { - name: '', + name: 'a', }, errors: {}, }) diff --git a/packages/client/src/crud/CRUDActions.ts b/packages/client/src/crud/CRUDActions.ts index 4d804de..7c700dd 100644 --- a/packages/client/src/crud/CRUDActions.ts +++ b/packages/client/src/crud/CRUDActions.ts @@ -156,9 +156,9 @@ export class FindManyActionCreator< export class FormActionCreator { constructor(readonly actionType: ActionType) {} - create = (): TCRUDCreateAction => { + create = (item: Partial): TCRUDCreateAction => { return { - payload: undefined, + payload: item, type: this.actionType, method: 'create', } diff --git a/packages/client/src/crud/CRUDReducer.ts b/packages/client/src/crud/CRUDReducer.ts index a154ed5..9798e35 100644 --- a/packages/client/src/crud/CRUDReducer.ts +++ b/packages/client/src/crud/CRUDReducer.ts @@ -183,13 +183,16 @@ export class CRUDReducer< } } - handleCreate = (state: ICRUDState): ICRUDState => { + handleCreate = (state: ICRUDState, payload: Partial): ICRUDState => { return { ...state, form: { ...state.form, create: { - item: this.newItem, + item: { + ...this.newItem, + ...payload, + }, errors: {}, }, }, @@ -271,7 +274,7 @@ export class CRUDReducer< case 'edit': return this.handleEdit(state, action.payload.id) case 'create': - return this.handleCreate(state) + return this.handleCreate(state, action.payload) default: return state } diff --git a/packages/client/src/crud/TCRUDAction.ts b/packages/client/src/crud/TCRUDAction.ts index 4e96c0b..77fc68b 100644 --- a/packages/client/src/crud/TCRUDAction.ts +++ b/packages/client/src/crud/TCRUDAction.ts @@ -20,8 +20,8 @@ export type TCRUDFindManyAction = // Synchronous actions -export type TCRUDCreateAction = - IAction & {method: Extract} +export type TCRUDCreateAction = + IAction, ActionType> & {method: Extract} export type TCRUDEditAction = IAction<{id: number}, ActionType> & {method: Extract} @@ -36,6 +36,6 @@ export type TCRUDAction = | TCRUDRemoveAction | TCRUDFindOneAction | TCRUDFindManyAction - | TCRUDCreateAction + | TCRUDCreateAction | TCRUDEditAction | TCRUDChangeAction