NGRX-сущность: как назначить action.payload для свойства состояния в UpsertOne
У меня есть редуктор в состоянии сущности. Как мне назначить action.payload.Message
в saveMessage.msg
во время выступления upsertOne
на UPSERT_Message_SUCCESS
действие.
export interface MessageState extends EntityState<Message> {
// additional entities state properties
selectedMessageId: number | null;
loaded: boolean;
loading: boolean;
saveMessage?: {
loaded: boolean;
loading: boolean;
msg?: Message;
};
}
export const adapter: EntityAdapter<Message> = createEntityAdapter<Message>({
selectId: (msg: Message) => msg.messageId,
});
export const initialState: MessageState = adapter.getInitialState({
// additional entity state properties
selectedMessageId: null,
loaded: false,
loading: false,
saveMessage: {
loaded: false,
loading: false
},
});
export function reducer(state = initialState, action: MessageActionsUnion): MessageState {
switch (action.type) {
case MessageActionTypes.UPSERT_MessageS_SUCCESS: {
return adapter.upsertMany(action.payload.Messages, { ...state, loaded: true, loading: false });
}
case MessageActionTypes.UPSERT_Message: {
return { ...state,loading: true, loaded:false };
}
//assign action.payload.message to saveMessage.msg
case MessageActionTypes.UPSERT_Message_SUCCESS: {
return adapter.upsertOne(action.payload.saveMessageHeader, {...state,loaded:true,loading:false});
// return {
// ...state,
// saveMessage: {
// loading: false,
// loaded: true,
// msgHeader: action.payload.saveMessageHeader
// }
// };
}
case MessageActionTypes.UPSERT_Message_FAIL: {
return { ...state };
}
default: {
return state;
}
}
}
Соответствующая подпись вызова действия ниже:
export class SaveMessageSuccess implements Action {
readonly type = MessageActionTypes.SAVE_MESSAGE_SUCCESS;
constructor(public payload: {saveMessage:partial <Message> }) {
}
}
1 ответ
Решение
upsertOne
не позволяет Partial<Entity>
но ожидает сущность T
,
В вашем случае изменение создателя действия на следующее должно помочь:
export class SaveMessageSuccess implements Action {
readonly type = MessageActionTypes.SAVE_MESSAGE_SUCCESS;
constructor(public payload: {saveMessage: Message}) {
}
}