portal-www
Version:
Nova Portal Website. Based on Next starter by Ueno
73 lines (55 loc) • 1.86 kB
text/typescript
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ð';
}
}