Редукторы редукторов state.concat в angular 6 не объединяют данные полезной нагрузки? - PullRequest
0 голосов
/ 11 ноября 2019
  • редукторы / index.ts

    
    export interface State {
      questionnotifications: QuestionNotification;
    }
    
    export const reducers = {
      questionnotifications: fromNotification.questionreducer,
    };
    
    
    export const getQuestionNotifications = (state: State) => state.questionnotifications;```
    
  • action / messages.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;
   }}
  • redurs / 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 уведомляет те же данные полезных данных уведомлений, которые мы пытаемся сохранить в избыточном состоянии, но мы сталкиваемся с проблемой при отображении сохраненных данных избыточного объема, поскольку данные полезной нагрузки не объединяются с данными состояния избыточного числа.

Добрый совет, где мы идем не так.

1 Ответ

0 голосов
/ 11 ноября 2019

Как насчет того, чтобы сделать этот код более читабельным?

     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

...