opf/openproject

View on GitHub
frontend/src/app/features/in-app-notifications/center/menu/state/ian-menu.store.ts

Summary

Maintainability
A
40 mins
Test Coverage
import { Store, StoreConfig } from '@datorama/akita';
import { ApiV3ListParameters } from 'core-app/core/apiv3/paths/apiv3-list-resource.interface';

export interface IanMenuGroupingData {
  value:string;
  count:number;
  projectHasParent?:boolean;
  _links:{
    valueLink:{
      href:string;
    }[];
  };
}

export interface BaseMenuItemData {
  value:string;
  count:number;
}

export interface IanMenuState {
  notificationsByProject:IanMenuGroupingData[],
  notificationsByReason:IanMenuGroupingData[],
  projectsFilter:ApiV3ListParameters,
}

export const IAN_MENU_PROJECT_FILTERS:ApiV3ListParameters = {
  pageSize: 100,
  groupBy: 'project',
  filters: [['read_ian', '=', false]],
};

export const IAN_MENU_REASON_FILTERS:ApiV3ListParameters = {
  pageSize: 100,
  groupBy: 'reason',
  filters: [['read_ian', '=', false]],
};

export function createInitialState():IanMenuState {
  return {
    notificationsByProject: [],
    notificationsByReason: [],
    projectsFilter: {},
  };
}

@StoreConfig({ name: 'ian-menu' })
export class IanMenuStore extends Store<IanMenuState> {
  constructor() {
    super(createInitialState());
  }
}