File

src/app/core/ngxs/audit.state.ts

Description

State for managing the audits and facCrits of the application.

Has: Action handlers to read, write, update and delete an audit. Static and dynamic selectors to select audits and facCrits.

Index

Methods

Constructor

constructor(auditService: AuditService, facCritService: FacCritService)
Parameters :
Name Type Optional
auditService AuditService No
facCritService FacCritService No

Methods

addAudit
addAudit(undefined: StateContext, undefined: AddAudit)
Decorators :
@Action(AddAudit)
Parameters :
Name Type Optional
StateContext<AuditStateModel> No
AddAudit No
Returns : void
Static audit
audit(id: number)
Parameters :
Name Type Optional
id number No
Returns : any
Static auditByStatus
auditByStatus(statuses: AuditStatus[])
Parameters :
Name Type Optional
statuses AuditStatus[] No
Returns : any
Static audits
audits(state: AuditStateModel)
Decorators :
@Selector()
Parameters :
Name Type Optional
state AuditStateModel No
Returns : {}
Static criteriaByFactorId
criteriaByFactorId(id: number)
Parameters :
Name Type Optional
id number No
Returns : any
deleteAudit
deleteAudit(undefined: StateContext, undefined: DeleteAudit)
Decorators :
@Action(DeleteAudit)
Parameters :
Name Type Optional
StateContext<AuditStateModel> No
DeleteAudit No
Returns : void
Static facCrit
facCrit(id: number)
Parameters :
Name Type Optional
id number No
Returns : any
Static facCrits
facCrits(state: AuditStateModel)
Decorators :
@Selector()
Parameters :
Name Type Optional
state AuditStateModel No
Returns : {}
loadFacCritsByInterviewId
loadFacCritsByInterviewId(ctx: StateContext, undefined: LoadFacCritsByInterviewId)
Decorators :
@Action(LoadFacCritsByInterviewId)
Parameters :
Name Type Optional
ctx StateContext<AuditStateModel> No
LoadFacCritsByInterviewId No
Returns : any
ngxsOnInit
ngxsOnInit(undefined: StateContext)
Parameters :
Name Type Optional
StateContext<AuditStateModel> No
Returns : void
updateAudit
updateAudit(ctx: StateContext, undefined: UpdateAudit)
Decorators :
@Action(UpdateAudit)
Parameters :
Name Type Optional
ctx StateContext<AuditStateModel> No
UpdateAudit No
Returns : void
import { Audit, AuditStatus } from '../data/models/audit.model';
import { State, Selector, Action, StateContext, createSelector, NgxsOnInit } from '@ngxs/store';
import { patch, updateItem, removeItem, append } from '@ngxs/store/operators';
import { Injectable } from '@angular/core';
import {
  AddAudit,
  DeleteAudit,
  UpdateAudit,
  LoadFacCritsByInterviewId,
} from './actions/audit.actions';
import { FacCrit } from '../data/models/faccrit.model';
import { AuditService } from '../http/audit.service';
import { FacCritService } from '../http/facCrit.service';

export interface AuditStateModel {
  audits: Audit[];
  facCrits: FacCrit[];
}

/**
 * State for managing the audits and facCrits of the application.
 *
 * Has: Action handlers to read, write, update and delete an audit.
 * Static and dynamic selectors to select audits and facCrits.
 */
@State<AuditStateModel>({
  name: 'audit',
})
@Injectable()
export class AuditState implements NgxsOnInit {
  constructor(private auditService: AuditService, private facCritService: FacCritService) {}

  ngxsOnInit({ patchState }: StateContext<AuditStateModel>) {
    this.facCritService.getFacCrits().subscribe(facCrits => {
      patchState({ facCrits });
    });

    this.auditService.getAudits().subscribe(audits => {
      patchState({ audits });
    });
  }

  @Selector()
  static audits(state: AuditStateModel) {
    return state.audits;
  }

  @Selector()
  static facCrits(state: AuditStateModel) {
    return state.facCrits;
  }

  static audit(id: number) {
    return createSelector([AuditState], (state: AuditStateModel) => {
      return state.audits.find(x => x.id === id);
    });
  }

  static auditByStatus(...statuses: AuditStatus[]) {
    return createSelector([AuditState], (state: AuditStateModel) => {
      return state.audits.filter(x => statuses.includes(x.status));
    });
  }

  static facCrit(id: number) {
    return createSelector([AuditState], (state: AuditStateModel) => {
      return state.facCrits.find(x => x.id === id);
    });
  }

  static criteriaByFactorId(id: number) {
    return createSelector([AuditState], (state: AuditStateModel) => {
      return state.facCrits.filter(x => x.referenceId === id);
    });
  }

  @Action(AddAudit)
  addAudit({ setState }: StateContext<AuditStateModel>, { audit }: AddAudit) {
    this.auditService.postAudit(audit).subscribe(audit => {
      setState(
        patch({
          audits: append<Audit>([audit]),
        }),
      );
    });
  }

  @Action(UpdateAudit)
  updateAudit(ctx: StateContext<AuditStateModel>, { id, audit }: UpdateAudit) {
    const oldAudit = ctx.getState().audits.find(audit => audit.id === id);

    this.auditService.putAudit(oldAudit, { ...audit, id }).subscribe(() => {
      const a = ctx.getState().audits.find(x => x.id === id);

      ctx.setState(
        patch({
          audits: updateItem<Audit>(x => x.id === id, { ...a, ...audit }),
        }),
      );
    });
  }

  @Action(DeleteAudit)
  deleteAudit({ setState }: StateContext<AuditStateModel>, { id }: DeleteAudit) {
    setState(
      patch({
        audits: removeItem<Audit>(x => x.id === id),
      }),
    );
  }

  @Action(LoadFacCritsByInterviewId)
  loadFacCritsByInterviewId(ctx: StateContext<AuditStateModel>, { id }: LoadFacCritsByInterviewId) {
    return this.facCritService.getFacCritsByInterviewId(id);
  }
}

result-matching ""

    No results matching ""