Skip to content

Commit 963693c

Browse files
committed
feat(validation): oppgradere validering
update update
1 parent f179f6e commit 963693c

33 files changed

Lines changed: 1485 additions & 293 deletions

doc-site/.vitepress/config.mts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,12 @@ export default defineConfig({
9696
},
9797
},
9898
},
99+
vite: {
100+
resolve: {
101+
alias: {
102+
'@interfaces': path.resolve(__dirname, '../../src/interfaces'),
103+
'@styles': path.resolve(__dirname, '../../src/styles'),
104+
},
105+
},
106+
},
99107
});

doc-site/.vitepress/theme/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import TypographyTable from './components/TypographyTable.vue';
2020
import { cssTokenState } from './cssTokenState';
2121
import { useCurrentTheme, Theme } from './composables/useCurrentTheme';
2222
import NveTableDemo from './components/NveTableDemo.vue';
23-
23+
import { validateForm, rules } from '../../../src/validation/validateForm';
24+
export { validateForm, rules };
2425
export default {
2526
extends: DefaultTheme,
2627
Layout: () => {
@@ -65,8 +66,13 @@ export default {
6566
}
6667
return h(DefaultTheme.Layout, null, {});
6768
},
69+
6870
async enhanceApp({ app }) {
6971
if (!import.meta.env.SSR) {
72+
if (typeof window !== 'undefined') {
73+
(window as typeof window & { validateForm: typeof validateForm }).validateForm = validateForm;
74+
(window as typeof window & { rules: typeof rules }).rules = rules;
75+
}
7076
// siden VitePress bygges via SSR, vi må sikre at våre web komponenter lastes ned i nettleseren bare
7177
// derfor importerer vi alle komponenter når miljø ikke er SSR
7278
const components = import.meta.glob('../../../src/components/*/*.component.ts');

doc-site/.vitepress/theme/style.css

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,6 @@
138138
--docsearch-primary-color: var(--vp-c-brand-1) !important;
139139
}
140140

141-
.vp-doc a {
142-
text-decoration: unset;
143-
}
144-
145141
nve-message-card p,
146142
nve-message-card ul {
147143
margin: 0 !important;
@@ -235,6 +231,10 @@ a:has(nve-link-card) {
235231
text-decoration: unset;
236232
}
237233

234+
a.no-visited:visited {
235+
color: var(--vp-c-brand-1);
236+
}
237+
238238
/* Brukes for å overskrive standard lenke visited styling fra eksterne rammeverker. */
239239
a:visited {
240240
color: var(--color-interactive-foreground-link-visited);
@@ -249,3 +249,10 @@ a:visited {
249249
padding: 3px 6px;
250250
background-color: var(--vp-code-bg);
251251
}
252+
253+
.form {
254+
display: flex;
255+
flex-direction: column;
256+
gap: var(--spacing-x-small);
257+
justify-content: flex-start;
258+
}

doc-site/components/nve-checkbox-group.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,89 @@ Bruk <span class="highlight">selectedValues</span>-array for å vise forhåndsva
213213

214214
</CodeExamplePreview>
215215

216+
## Validering
217+
218+
For mer informasjon om hvordan <span class="highlight">nve-checkbox-group</span> og andre skjemakomponenter valideres, se <a href="../introduction/forDevelopers/validation">siden om validering</a>.
219+
220+
### Intern validering
221+
222+
Intern validering gjør det mulig å validere verdien i <span class="highlight">nve-checkbox-group</span> ved hjelp av valideringsregler.
223+
224+
Verdien er et array med de valgte avkrysningsboksene.
225+
226+
Valideringsreglene kjøres når du kaller <span class="highlight">validateForm()</span> i skjemaets <span class="highlight">submit</span>-handler.
227+
228+
Du kan importere metoden slik:
229+
230+
```ts
231+
import { validateForm } from 'nve-designsystem/validation/validateForm.js';
232+
```
233+
234+
<CodeExamplePreview>
235+
236+
```html
237+
<form id="test-form" class="form">
238+
<nve-checkbox-group id="chgr" label="Hvilke varsler vil du se på?">
239+
<nve-checkbox value="flood">Flomvarsel</nve-checkbox>
240+
<nve-checkbox value="landslide">Jordskredvarsel</nve-checkbox>
241+
<nve-checkbox value="rain">Regnvarsel</nve-checkbox>
242+
</nve-checkbox-group>
243+
244+
<nve-button type="submit">Send inn</nve-button>
245+
</form>
246+
247+
<script type="module">
248+
const form = document.querySelector('#test-form');
249+
const chgr = document.querySelector('#chgr');
250+
251+
chgr.validationRules = [
252+
(value) => rules.required(value) || 'Du må velge minst én',
253+
(value) => value.length >= 2 || 'Minimum 2 valg',
254+
];
255+
256+
form?.addEventListener('submit', (event) => {
257+
event.preventDefault();
258+
validateForm(event);
259+
});
260+
</script>
261+
```
262+
263+
</CodeExamplePreview>
264+
265+
### Ekstern validering
266+
267+
Bruker du et eksternt valideringssystem, kan du sette komponenten i feiltilstand ved hjelp av <span class="highlight">errorMessage</span>.
268+
269+
<CodeExamplePreview>
270+
271+
```html
272+
<form id="test-form" class="form">
273+
<nve-checkbox-group label="Hvilke varsler vil du se på?" errorMessage="Du må velge minst én.">
274+
<nve-checkbox value="flood">Flomvarsel</nve-checkbox>
275+
<nve-checkbox value="landslide">Jordskredvarsel</nve-checkbox>
276+
<nve-checkbox value="rain">Regnvarsel</nve-checkbox>
277+
</nve-checkbox-group>
278+
</form>
279+
```
280+
281+
</CodeExamplePreview>
282+
283+
Du kan fjerne feiltilstanden ved å sette <span class="highlight">errorMessage</span> til en tom streng.
284+
285+
<CodeExamplePreview>
286+
287+
```html
288+
<form id="test-form" class="form">
289+
<nve-checkbox-group label="Hvilke varsler vil du se på?" errorMessage="">
290+
<nve-checkbox value="flood">Flomvarsel</nve-checkbox>
291+
<nve-checkbox value="landslide">Jordskredvarsel</nve-checkbox>
292+
<nve-checkbox value="rain">Regnvarsel</nve-checkbox>
293+
</nve-checkbox-group>
294+
</form>
295+
```
296+
297+
</CodeExamplePreview>
298+
216299
## Tilgjengelighet
217300
218301
<span class="highlight">nve-checkbox-group</span> bruker en tilknyttet <a href="#ledetekst-og-tooltip">ledetekst</a>. Når feltet får fokus vil skjermlesere lese opp ledeteksten, slik at brukeren forstår hva som skal fylles inn.

doc-site/components/nve-combobox.md

Lines changed: 96 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ Med flervalg kan du også begrense hvor mange verdier som kan velges ved å bruk
538538

539539
```html
540540
<nve-combobox
541-
id="nve-avdeling-14"
541+
id="nve-avdeling-15"
542542
label="Velg en avdeling"
543543
multiple
544544
max="2"
@@ -571,7 +571,7 @@ Bruk et <span class="highlight">selectedIds</span> string array for å vise forh
571571

572572
```html
573573
<nve-combobox
574-
id="nve-avdeling-14"
574+
id="nve-avdeling-16"
575575
label="Velg en avdeling"
576576
multiple
577577
selectedIds='["rme", "tb"]'
@@ -588,7 +588,7 @@ Bruk et <span class="highlight">selectedIds</span> string array for å vise forh
588588
</nve-combobox>
589589

590590
<nve-combobox
591-
id="nve-avdeling-14"
591+
id="nve-avdeling-17"
592592
label="Velg en avdeling"
593593
selectedIds='["rme"]'
594594
options='[
@@ -606,6 +606,99 @@ Bruk et <span class="highlight">selectedIds</span> string array for å vise forh
606606

607607
</CodeExamplePreview>
608608

609+
## Validering
610+
611+
For mer informasjon om hvordan <span class="highlight">nve-combobox</span> og andre skjemakomponenter valideres, se <a href="../introduction/forDevelopers/validation">siden om validering</a>.
612+
613+
### Intern validering
614+
615+
Intern validering gjør det mulig å validere verdien i <span class="highlight">nve-combobox</span> ved hjelp av valideringsregler.
616+
617+
Verdien er en tabell med de valgte verdiene.
618+
619+
Valideringsreglene kjøres når du kaller <span class="highlight">validateForm()</span> i skjemaets <span class="highlight">submit</span>-handler.
620+
621+
Du kan importere metoden slik:
622+
623+
```ts
624+
import { validateForm } from 'nve-designsystem/validation/validateForm.js';
625+
```
626+
627+
<CodeExamplePreview>
628+
629+
```html
630+
<form id="test-form" class="form">
631+
<nve-combobox
632+
id="cb"
633+
label="Velg en avdeling"
634+
selectedIds='["rme"]'
635+
options='[
636+
{ "value":"rme","label": "RME" },
637+
{ "value":"ek","label": "EK" }
638+
]'
639+
>
640+
</nve-combobox>
641+
642+
<nve-button type="submit">Send inn</nve-button>
643+
</form>
644+
645+
<script type="module">
646+
const form = document.querySelector('#test-form');
647+
const cb = document.querySelector('#cb');
648+
649+
cb.validationRules = [(value) => value.length > 0 || 'Feltet er påkrevd'];
650+
651+
form?.addEventListener('submit', (event) => {
652+
event.preventDefault();
653+
validateForm(event);
654+
});
655+
</script>
656+
```
657+
658+
</CodeExamplePreview>
659+
660+
### Ekstern validering
661+
662+
Bruker du et eksternt valideringssystem, kan du sette komponenten i feiltilstand ved hjelp av <span class="highlight">errorMessage</span>.
663+
664+
<CodeExamplePreview>
665+
666+
```html
667+
<form>
668+
<nve-combobox
669+
id="cb"
670+
label="Velg en avdeling"
671+
options='[
672+
{ "value":"rme","label": "RME" },
673+
{ "value":"ek","label": "EK" }
674+
]'
675+
errorMessage="Feltet er påkrevd"
676+
></nve-combobox>
677+
</form>
678+
```
679+
680+
</CodeExamplePreview>
681+
682+
Du kan fjerne feiltilstanden ved å sette <span class="highlight">errorMessage</span> til en tom streng.
683+
684+
<CodeExamplePreview>
685+
686+
```html
687+
<form>
688+
<nve-combobox
689+
id="cb"
690+
label="Velg en avdeling"
691+
options='[
692+
{ "value":"rme","label": "RME" },
693+
{ "value":"ek","label": "EK" }
694+
]'
695+
errorMessage=""
696+
></nve-combobox>
697+
</form>
698+
```
699+
700+
</CodeExamplePreview>
701+
609702
## Tilgjengelighet
610703
611704
Denne combobox-komponenten følger WAI-ARIA-mønstrene for [combobox](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/) og [listbox](https://www.w3.org/WAI/ARIA/apg/patterns/listbox/), slik de er definert av W3C.

doc-site/components/nve-input.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,80 @@ Bruk <span class="highlight">start</span>-sporet for å legge til et ikon.
316316

317317
</CodeExamplePreview>
318318

319+
## Validering
320+
321+
For mer informasjon om hvordan <span class="highlight">nve-input</span> og andre skjemakomponenter valideres, se <a href="../introduction/forDevelopers/validation">siden om validering</a>.
322+
323+
### Intern validering
324+
325+
Intern validering gjør det mulig å validere verdien i <span class="highlight">nve-input</span> ved hjelp av valideringsregler.
326+
327+
Valideringsreglene kjøres når du kaller <span class="highlight">validateForm()</span> i skjemaets <span class="highlight">submit</span>-handler.
328+
329+
Du kan importere metoden slik:
330+
331+
```ts
332+
import { validateForm } from 'nve-designsystem/validation/validateForm.js';
333+
```
334+
335+
<CodeExamplePreview>
336+
337+
```html
338+
<form id="test-form">
339+
<nve-input id="name-input" label="Saksbehandlers navn"></nve-input>
340+
<nve-input id="saksnummer" label="Saksnummer"></nve-input>
341+
342+
<nve-button type="submit">Send inn</nve-button>
343+
</form>
344+
345+
<script type="module">
346+
const form = document.querySelector('#test-form');
347+
const nameInput = document.querySelector('#name-input');
348+
const saksNummerInput = document.querySelector('#saksnummer');
349+
350+
nameInput.validationRules = [
351+
() => !!saksNummerInput.value || 'Saksnummer er påkrevd',
352+
(value) => rules.required(value) || 'Feltet er påkrevd',
353+
(value) => value.length >= 3 || 'Minimum 3 bokstaver',
354+
(value) => value.length <= 20 || 'Maksimum 20 bokstaver',
355+
(value) => value.startsWith('s') || 'Må starte med s',
356+
];
357+
358+
form?.addEventListener('submit', (event) => {
359+
event.preventDefault();
360+
validateForm(event);
361+
});
362+
</script>
363+
```
364+
365+
</CodeExamplePreview>
366+
367+
### External validation
368+
369+
Bruker du eksternal validering system, kan du fortsatt sette feil status på input ved bruk av <span class="highlight">errorMessage</span>.
370+
371+
<CodeExamplePreview>
372+
373+
```html
374+
<form>
375+
<nve-input label="Beskriv saken" errorMessage="Feltet er påkrevd"></nve-input>
376+
</form>
377+
```
378+
379+
</CodeExamplePreview>
380+
381+
Du kan fjerne feil status ved å sette <span class="highlight">errorMessage</span> tilbake til en tom string.
382+
383+
<CodeExamplePreview>
384+
385+
```html
386+
<form>
387+
<nve-input label="Beskriv saken" errorMessage=""></nve-input>
388+
</form>
389+
```
390+
391+
</CodeExamplePreview>
392+
319393
## Tilgjengelighet
320394
321395
<span class="highlight">nve-input</span> er bygget på et native <span class="highlight">&lt;input&gt;</span> og bruker en tilknyttet <a href="#ledetekst-og-tooltip">ledetekst</a>. Når feltet får fokus vil skjermlesere lese opp ledeteksten, slik at brukeren forstår hva som skal fylles inn.

0 commit comments

Comments
 (0)