UNPKG

portal-www

Version:

Nova Portal Website. Based on Next starter by Ueno

73 lines (55 loc) 1.86 kB
import { formatPrice } from 'beta/utils/helpers'; import { extendObservable, makeObservable, observable } from 'mobx'; import { Contract } from '../../typings/graphql'; export default class Hradleid { constructor({ hradleid = {} }) { makeObservable(this, { contracts: observable, trigger: observable, }); extendObservable(this, hradleid); } contracts: Contract[] | null = null; trigger = 0; incrementTrigger() { this.trigger++; } setContracts(contracts: Array<Contract>) { this.contracts = contracts; } getContractsAlreadyWithVariant(variantId: string) { const contractsThatDontFit = this.contracts ?.filter((contract) => contract?.variant?.id === variantId) .map((contract) => contract.id); return contractsThatDontFit; } getVariantOrMixed() { if (!this.contracts || this.contracts.length === 0) { return 'Blandað'; } const firstVariantName = this.contracts?.[0]?.variant?.name; const allSameVariant = this.contracts.every( (contract) => contract?.variant?.name === firstVariantName, ); return allSameVariant ? firstVariantName : 'Blandað'; } getCeilingOrMixed() { if (!this.contracts || this.contracts.length === 0) { return 'Blandað'; } const extraPayer = this.contracts?.[0]?.extraPayers?.find( (item) => item?.amount && item?.amount > 0 && item?.status === 'Active', ); const firstCeiling = extraPayer?.amount; const allSameCeiling = this.contracts.every( (contract) => contract?.extraPayers?.find( (item) => item?.amount && item?.amount > 0 && item?.status === 'Active', )?.amount === firstCeiling, ); if (allSameCeiling && !firstCeiling) { return '0 kr.'; } return allSameCeiling ? formatPrice(firstCeiling ?? 0) : 'Blandað'; } }