Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat. korrige komma i desimaltall flere steder #1274

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/AvtaleSide/steg/BeregningTilskudd/Arbeidsgiveravgift.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useContext } from 'react';
import { Column, Row } from '@/komponenter/NavGrid/Grid';
import SelectInput from '@/komponenter/form/SelectInput';
import { parseFloatIfFloatable } from '@/utils';
import { formaterNorskeTall, parseFloatIfFloatable } from '@/utils';
import { BEMWrapper } from '@/utils/bem';
import { AvtaleContext } from '@/AvtaleProvider';

Expand All @@ -17,7 +17,7 @@ const Arbeidsgiveravgift: React.FC<Props> = ({ cls }: Props) => {
const satserVerdier = [{ label: 'Velg', value: '' }];
satser.forEach((sats: number) =>
satserVerdier.push({
label: (sats * 100).toFixed(1) + ' %',
label: formaterNorskeTall(sats * 100) + ' %',
value: sats.toString(),
}),
);
Expand Down
4 changes: 2 additions & 2 deletions src/AvtaleSide/steg/BeregningTilskudd/Feriepenger.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Column, Row } from '@/komponenter/NavGrid/Grid';
import { BEMWrapper } from '@/utils/bem';
import { AvtaleContext } from '@/AvtaleProvider';
import SelectInput from '@/komponenter/form/SelectInput';
import { parseFloatIfFloatable } from '@/utils';
import { formaterNorskeTall, parseFloatIfFloatable } from '@/utils';

interface Props {
cls: BEMWrapper;
Expand All @@ -13,7 +13,7 @@ const Feriepenger: React.FC<Props> = ({ cls }: Props) => {

const feriepengeAlternativer = [{ label: 'Velg', value: '' }].concat(
[0, 0.102, 0.12, 0.125, 0.143].map((sats: number) => ({
label: (sats * 100).toFixed(1) + ' %',
label: formaterNorskeTall(sats * 100) + ' %',
value: sats.toString(),
})),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Column, Row } from '@/komponenter/NavGrid/Grid';
import ProsentInput from '@/komponenter/form/ProsentInput';
import { BEMWrapper } from '@/utils/bem';
import { AvtaleContext } from '@/AvtaleProvider';
import { formaterNorskeTall } from '@/utils';

interface Props {
cls: BEMWrapper;
Expand All @@ -22,7 +23,7 @@ const ObligatoriskTjenestepensjon: React.FC<Props> = ({ cls }: Props) => {
autoComplete={'off'}
value={
avtale.gjeldendeInnhold.otpSats !== undefined && avtale.gjeldendeInnhold.otpSats !== null
? (avtale.gjeldendeInnhold.otpSats * 100).toFixed(2)
? formaterNorskeTall(avtale.gjeldendeInnhold.otpSats * 100)
: ''
}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
Expand Down
2 changes: 1 addition & 1 deletion src/AvtaleSide/steg/BeregningTilskudd/UtregningPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const UtregningPanel: FunctionComponent<Beregningsgrunnlag> = (props) => {
labelIkon={<StillingsprosentIkon />}
labelTekst="Stillingsprosent"
verdiOperator={<ProsentTegn />}
verdi={props.stillingprosent ? formaterNorskeTall(props.stillingprosent) : 0}
verdi={formaterNorskeTall(props.stillingprosent) || 0}
ikkePenger
/>
<Utregningsrad
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import EtikettStatus from '@/BeslutterSide/EtikettStatus';
import { TilskuddsPeriode } from '@/types/avtale';
import BEMHelper from '@/utils/bem';
import { formatterPeriode } from '@/utils/datoUtils';
import { formatterProsent } from '@/utils/formatterProsent';
import { formaterProsent } from '@/utils/formaterProsent';
import { formaterPenger } from '@/utils/PengeUtils';
import { FunctionComponent } from 'react';
import './tilskuddsPerioder.less';
Expand Down Expand Up @@ -36,7 +36,7 @@ const TilskuddsPerioderVeileder: FunctionComponent<Props> = (props) => {
<td aria-label={`Startdato ${periode.startDato} og sluttdato ${periode.sluttDato}`}>
{formatterPeriode(periode.startDato, periode.sluttDato)}
</td>
<td>{formatterProsent(periode.lonnstilskuddProsent)}</td>
<td>{formaterProsent(periode.lonnstilskuddProsent)}</td>
<td>{formaterPenger(periode.beløp)}</td>
<td>
<EtikettStatus tilskuddsperiodestatus={periode.status} size="small" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import StillingsTittelVelger, { StillingOptions } from '@/AvtaleSide/steg/Stilli
import useStilling from '@/AvtaleSide/steg/StillingSteg/useStilling';
import StillingsprosentInput from '@/AvtaleSide/steg/VarighetSteg/StillingsprosentInput/StillingsprosentInput';
import BekreftelseModal from '@/komponenter/modal/BekreftelseModal';
import PakrevdInput from '@/komponenter/PakrevdInput/PakrevdInput';
import PakrevdTextarea from '@/komponenter/PakrevdTextarea/PakrevdTextarea';
import { EndreStilling, oppdatereStillingbeskrivelse } from '@/services/rest-service';
import BEMHelper from '@/utils/bem';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { Task } from '@navikt/ds-icons/cjs';
import { BodyShort, Link } from '@navikt/ds-react';
import React, { FunctionComponent, useContext, useState } from 'react';
import './EndreTilskuddsberegning.less';
import { formaterNorskeTall } from '@/utils';

export type EndreBeregning = Pick<
Beregningsgrunnlag & Varighet,
Expand Down Expand Up @@ -123,7 +124,7 @@ const EndreTilskuddsberegning: FunctionComponent = () => {
autoComplete={'off'}
value={
nyBeregning.otpSats !== undefined && nyBeregning.otpSats !== null
? (nyBeregning.otpSats * 100).toFixed(0)
? formaterNorskeTall(nyBeregning.otpSats * 100)
: ''
}
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const schema = z.object({
invalid_type_error: 'Antall dager være et tall',
required_error: 'Antall dager er påkrevd',
})
.multipleOf(0.01, 'Antall dager kan maks ha 2 desimaler')
.min(0.1, 'Antall dager må være større enn 0')
.max(7, 'Antall dager må være mindre enn eller lik 7'),
),
Expand All @@ -39,7 +40,7 @@ function AntallDagerInput(props: Props) {
const { field } = useController({
control,
name: 'antallDagerPerUke',
defaultValue: formaterNorskeTallFraInput(verdi?.toString() ?? ''),
defaultValue: formaterNorskeTallFraInput(verdi),
});

const onChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const schema = z.object({
invalid_type_error: 'Stillingsprosent være et tall',
required_error: 'Stillingsprosent er påkrevd',
})
.multipleOf(0.01, 'Stillingsprosent kan maks ha 2 desimaler')
.min(0.1, 'Stillingsprosent må være større enn 0')
.max(100, 'Stillingsprosent må være mindre enn eller lik 100'),
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { AvtaleContext, Context } from '@/AvtaleProvider';
import { formatterDato, formatterPeriode, NORSK_DATO_FORMAT } from '@/utils/datoUtils';
import { formatterProsent } from '@/utils/formatterProsent';
import { formaterProsent } from '@/utils/formaterProsent';
import { formaterPenger } from '@/utils/PengeUtils';
import React, { FunctionComponent, useContext, useRef, useState, useEffect } from 'react';
import EtikettStatus from '../EtikettStatus';
Expand Down Expand Up @@ -100,7 +100,7 @@ const BeslutterTilskuddsPerioder: FunctionComponent<Props> = (props) => {
{formatterPeriode(periode.startDato, periode.sluttDato, 'DD.MM.YY')}
</td>
<td>{formaterPenger(periode.beløp)}</td>
<td>{formatterProsent(periode.lonnstilskuddProsent)}</td>
<td>{formaterProsent(periode.lonnstilskuddProsent)}</td>
<td>{formatterDato(periode.kanBesluttesFom, NORSK_DATO_FORMAT)}</td>
<td>{periode.status === 'GODKJENT' ? periode.enhet : enhet}</td>
<td>
Expand Down
8 changes: 4 additions & 4 deletions src/komponenter/form/ProsentInput.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import FormattedNumberInput from '@/komponenter/form/FormattedNumberInput';
import { formatterProsent } from '@/utils/formatterProsent';
import { formaterProsent } from '@/utils/formaterProsent';
import React, { PropsWithChildren } from 'react';
import { TextFieldProps } from '@navikt/ds-react';

Expand All @@ -25,12 +25,12 @@ const ProsentInput: React.FunctionComponent<InputProps> = (props: PropsWithChild
},
(v: any) => {
if (v && min && v < min) {
return 'Må være over ' + formatterProsent(min);
return 'Må være over ' + formaterProsent(min);
}
},
(v: any) => {
if (v && max && v > max) {
return 'Må være under ' + formatterProsent(max);
return 'Må være under ' + formaterProsent(max);
}
},
];
Expand All @@ -41,7 +41,7 @@ const ProsentInput: React.FunctionComponent<InputProps> = (props: PropsWithChild
step={step}
validatorer={validatorer}
maxLength={3}
toFormatted={formatterProsent}
toFormatted={formaterProsent}
max={max}
min={min}
{...other}
Expand Down
9 changes: 9 additions & 0 deletions src/utils/formaterProsent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { formaterNorskeTall, parseNorskeTallFraInput } from '@/utils/tallUtils';

export const formaterProsent = <T>(value: T): string => {
const valueSomTall = parseNorskeTallFraInput(value);
if (!valueSomTall && valueSomTall !== 0) {
return '';
}
return `${formaterNorskeTall(valueSomTall)} %`;
};
6 changes: 0 additions & 6 deletions src/utils/formatterProsent.ts

This file was deleted.

12 changes: 8 additions & 4 deletions src/utils/tallUtils.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
const numberFormat = new Intl.NumberFormat('nb-NO', { style: 'decimal', maximumFractionDigits: 2 });

export const formaterNorskeTall = <T>(value: T): string | T =>
typeof value === 'number' && !Number.isNaN(value) ? numberFormat.format(Number(value)) : value;
export const formaterNorskeTall = (value: string | number | undefined): string | undefined => {
if (value === undefined) {
return undefined;
}
return !Number.isNaN(Number(value)) ? numberFormat.format(Number(value)) : String(value);
}

export const formaterNorskeTallFraInput = <T>(value: T): string | T =>
typeof value === 'string' ? String(value).replace('.', ',') : value;
export const formaterNorskeTallFraInput = (value: string | number | undefined): string =>
typeof value === 'string' ? String(value).replace('.', ',') : String(value ?? '');

export const parseNorskeTallFraInput = <T>(value: T): number | undefined =>
typeof value === 'string' && value !== ''
Expand Down
Loading