Редукторы state.concat в angular 6 не объединяют данные полезной нагрузки?
редукторы /index.ts
export interface State { questionnotifications: QuestionNotification; } export const reducers = { questionnotifications: fromNotification.questionreducer, }; export const getQuestionNotifications = (state: State) => state.questionnotifications;```
действия /notification.ts
import {Action} from '@ngrx/store'; export const QUESTIONADD = '[Question] add'; export const QUESTIONREMOVE = '[Question] remove'; export class QuestionNotificationAdd implements Action { type = QUESTIONADD; constructor(public payload: NewQuestionNotification[]) { } } export class QuestionNotificationRemove extends QuestionNotificationAdd { type = QUESTIONREMOVE; /* constructor(public payload: NewQuestionNotification[]) {}*/ }```
модели /notification.ts
export interface QuestionNotification {
doctor_id_c: string;
pat_image: string;
pat_name: string;
patient_id_c: string;
q_id: number;
}
export class NewQuestionNotification implements QuestionNotification {
doctor_id_c: string;
pat_image: string;
pat_name: string;
patient_id_c: string;
q_id: number;
constructor(doctor_id_c: string, pat_image: string, pat_name: string, patient_id_c: string, q_id: number) {
this.doctor_id_c = doctor_id_c;
this.pat_image = pat_image;
this.pat_name = pat_name;
this.patient_id_c = patient_id_c;
this.q_id = q_id;
}}
- редукторы /notifications.ts
export function questionreducer(state = [], action: notification.QuestionNotificationAdd) {
switch (action.type) {
case notification.QUESTIONADD:
return state.concat(action.payload).filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj['q_id']).indexOf(obj['q_id']) === pos;
});
case notification.QUESTIONREMOVE:
console.log('in remove question notification');
console.log(action.payload[0].q_id);
return state.filter(function (el) {
return el.q_id != action.payload[0].q_id;
});
default:
return state;
}
}
Мы генерируем уведомления в angular 6, браузер получает уведомления fcm, те же данные полезной нагрузки уведомлений, которые мы пытаемся сохранить в состоянии redux, но мы сталкиваемся с проблемой при отображении сохраненных данных redux, потому что данные полезной нагрузки не объединяются с данными состояния redux.
Добрый совет, где мы ошибаемся.
1 ответ
Как насчет того, чтобы начать с того, чтобы сделать этот код более читабельным?
case notification.QUESTIONADD:
const withDuplicates = state.concat(action.payload)
const ids = withDuplicates.map(n => n.q_id)
const withoutDuplicates = withDuplicates.filter((o, i) => ids.indexOf(o.q_id) === i)
return withoutDuplicates