Skip to content
Merged
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
7 changes: 6 additions & 1 deletion src/features/saveToGroup/useValidateGroupIsEmpty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ export function useValidateGroupIsEmpty<T extends 'Checkboxes' | 'MultipleSelect
hasErrors = groupRows.length === 0;
}
} else {
for (const key of Object.keys(dataModelBindings)) {
// Checkboxes and MultipleSelect store the selection in simpleBinding. Their label and metadata bindings are
// derived from it (label is an array), so only simpleBinding is checked. List has no simpleBinding, only one
// binding per column, so every binding is checked there.
const keys =
type === 'Checkboxes' || type === 'MultipleSelect' ? ['simpleBinding'] : Object.keys(dataModelBindings);
for (const key of keys) {
const reference = dataModelBindings[key];
if (reference) {
const data = formData?.[key] ?? invalidDataSelector(reference);
Expand Down
21 changes: 21 additions & 0 deletions src/layout/Checkboxes/CheckboxesContainerComponent.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,27 @@ describe('CheckboxesContainerComponent', () => {
expect(screen.getByRole('listitem')).toHaveTextContent('Du må fylle ut land');
});

it('required validation should not show when values are selected and labels are stored in an array', async () => {
await render({
component: {
showValidations: ['Required'],
required: true,
dataModelBindings: {
simpleBinding: { dataType: defaultDataTypeMock, field: 'value' },
label: { dataType: defaultDataTypeMock, field: 'label' },
},
},
options: twoOptions,
queries: {
fetchFormData: () => Promise.resolve({ value: 'norway,sweden', label: ['Norway', 'Sweden'] }),
},
});

expect(getCheckbox({ name: 'Norway', isChecked: true })).toBeInTheDocument();
expect(getCheckbox({ name: 'Sweden', isChecked: true })).toBeInTheDocument();
expect(screen.queryByText('Du må fylle ut land')).not.toBeInTheDocument();
});

it('required validation should show for group', async () => {
await render({
component: {
Expand Down