Skip to content

Commit

Permalink
OK-471: Näytetään koulutuksen osaamismerkkivalikossa deprekoidun osaa…
Browse files Browse the repository at this point in the history
…mismerkin nimi
  • Loading branch information
heidilm committed Oct 4, 2024
1 parent 0317b52 commit e8ef70f
Show file tree
Hide file tree
Showing 2 changed files with 211 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
import { updateOptionsWithMaybeDeprecatedOsaamismerkki } from './OsaamismerkkiField';

describe('updateOptionsWithMaybeDeprecatedOsaamismerkki', () => {
test('should return new options array with deprecated osaamismerkki value and label', () => {
const options = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
];

const osaamismerkki = {
id: 9202930,
koodiUri: 'osaamismerkit_1011',
nimi: {
_id: '9204039',
_tunniste: '19734f54-f4b4-43a6-ba0b-27d150463736',
fi: 'Mittayksiköt',
sv: 'Måttenheter',
},
voimassaoloAlkaa: 1704060000000,
voimassaoloLoppuu: 1727643600000,
};

const result = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
{
value: 'osaamismerkit_1011#1',
label: 'Mittayksiköt',
},
];

expect(
updateOptionsWithMaybeDeprecatedOsaamismerkki(
options,
'osaamismerkit_1011#1',
osaamismerkki,
'fi'
)
).toEqual(result);
});

test('should not update options if osaamismerkkiId is not defined', () => {
const options = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
];

const osaamismerkki = undefined;

const result = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
];

expect(
updateOptionsWithMaybeDeprecatedOsaamismerkki(
options,
undefined,
osaamismerkki,
'fi'
)
).toEqual(result);
});

test('should not update options if osaamismerkin nimi is not defined', () => {
const options = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
];

const result = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
];

expect(
updateOptionsWithMaybeDeprecatedOsaamismerkki(
options,
'osaamismerkit_1011#1',
undefined,
'fi'
)
).toEqual(result);
});

test('should not update options if osaamismerkki already exists in options', () => {
const options = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
{
value: 'osaamismerkit_1011#1',
label: 'Mittayksiköt',
},
];

const osaamismerkki = {
id: 9202930,
koodiUri: 'osaamismerkit_1011',
nimi: {
_id: '9204039',
_tunniste: '19734f54-f4b4-43a6-ba0b-27d150463736',
fi: 'Mittayksiköt',
sv: 'Måttenheter',
},
voimassaoloAlkaa: 1704060000000,
voimassaoloLoppuu: 1727643600000,
};

const result = [
{
value: 'osaamismerkit_1009#1',
label: 'Arjen rahankäyttö',
},
{
value: 'osaamismerkit_1028#1',
label: 'Digiosaamisen kehittäminen',
},
{
value: 'osaamismerkit_1011#1',
label: 'Mittayksiköt',
},
];

expect(
updateOptionsWithMaybeDeprecatedOsaamismerkki(
options,
'osaamismerkit_1011#1',
osaamismerkki,
'fi'
)
).toEqual(result);
});
});
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useEffect } from 'react';

import { TFunction } from 'i18next';
import { isEmpty, lowerCase } from 'lodash';
import { isEmpty, lowerCase, some } from 'lodash';
import { useTranslation } from 'react-i18next';
import { useUnmount } from 'react-use';
import { Field } from 'redux-form';
Expand Down Expand Up @@ -31,6 +31,7 @@ import {
getTestIdProps,
} from '#/src/utils';
import { getOsaamismerkkiStatusCss } from '#/src/utils/ePeruste/osaamismerkkiStatus';
import { koodiUriWithoutVersion } from '#/src/utils/koodi/koodiUriWithoutVersion';
import { getFirstLanguageValue } from '#/src/utils/languageUtils';

type OsaamismerkkiKuvausEntity = {
Expand Down Expand Up @@ -176,6 +177,28 @@ const OsaamismerkkitiedotReadOnly = ({
);
};

export const updateOptionsWithMaybeDeprecatedOsaamismerkki = (
options: Array<SelectOptions>,
osaamismerkkiId: string,
osaamismerkkidata: Osaamismerkki,
language: LanguageCode
) => {
const alreadyExists = some(options, ({ value }) => {
return (
koodiUriWithoutVersion(value) === koodiUriWithoutVersion(osaamismerkkiId)
);
});

return osaamismerkkiId && osaamismerkkidata?.nimi && !alreadyExists
? options.concat([
{
value: osaamismerkkiId,
label: getFirstLanguageValue(osaamismerkkidata.nimi, language),
},
])
: options;
};

export const OsaamismerkkiField = (props: SelectFieldProps) => {
const { t } = useTranslation();
const {
Expand All @@ -192,6 +215,17 @@ export const OsaamismerkkiField = (props: SelectFieldProps) => {

const osaamismerkkiId = useFieldValue(name)?.value;

const { data: osaamismerkkiData, isLoading: osaamismerkkiIsLoading } =
useOsaamismerkki(osaamismerkkiId);

const optionsWithMaybeDeprecatedOsaamismerkki =
updateOptionsWithMaybeDeprecatedOsaamismerkki(
options,
osaamismerkkiId,
osaamismerkkiData,
language
);

const { change } = useBoundFormActions();
const isDirty = useIsDirty();

Expand All @@ -207,9 +241,6 @@ export const OsaamismerkkiField = (props: SelectFieldProps) => {
change(name, null);
});

const { data: osaamismerkkiData, isLoading: osaamismerkkiIsLoading } =
useOsaamismerkki(osaamismerkkiId);

return osaamismerkkiIsLoading ? (
<Spin />
) : (
Expand All @@ -218,7 +249,7 @@ export const OsaamismerkkiField = (props: SelectFieldProps) => {
<Field
isLoading={isLoading}
component={FormFieldSelect}
options={options}
options={optionsWithMaybeDeprecatedOsaamismerkki}
label={t('koulutuslomake.valitseOsaamismerkki')}
showAllOptions={true}
isMulti={isMultiSelect}
Expand Down

0 comments on commit e8ef70f

Please sign in to comment.