Skip to content

Spørsmålstyper

Lumi støtter fire spørsmålstyper: rating, text, singleChoice og multiChoice. Hver type har egne properties som styrer oppførselen.

Rating

Rating lar brukeren gi en vurdering på en visuell skala. Du velger variant — skalaen følger automatisk.

VariantSkalaVisuelt
emoji (standard)1–5😡 🙁 😐 😀 😍
thumbs1–2👎 👍
stars1–5⭐⭐⭐⭐⭐
nps0–10Nummerte knapper med lav/høy-label

Emoji (standard)

tsx
{
  id: "rating",
  type: "rating",
  variant: "emoji", // kan utelates — emoji er standard
  prompt: "Hvordan var opplevelsen din?",
  description: "Tenk på oppgaven du nettopp gjorde.",
  required: true,
}

Thumbs

Passer for enkle spørsmål som «Var dette nyttig?».

tsx
{
  id: "helpful",
  type: "rating",
  variant: "thumbs",
  prompt: "Var dette til hjelp?",
  required: true,
}

Stars

Klassisk femstjerners vurdering.

tsx
{
  id: "stars",
  type: "rating",
  variant: "stars",
  prompt: "Hvordan opplevde du å bruke tjenesten?",
  required: true,
}

NPS (Net Promoter Score)

NPS bruker en skala fra 0 til 10 med valgfrie tekster i hver ende.

tsx
{
  id: "nps",
  type: "rating",
  variant: "nps",
  prompt: "Hvor sannsynlig er det at du vil anbefale oss?",
  lowLabel: "Lite sannsynlig",
  highLabel: "Svært sannsynlig",
  required: true,
}

Felt for rating

PropertyTypePåkrevdBeskrivelse
idstringUnik ID for spørsmålet
type"rating"Spørsmålstype
variant"emoji" | "thumbs" | "stars" | "nps"Visuell variant (standard: "emoji")
promptstringSpørsmålsteksten
descriptionstringHjelpetekst under prompt
requiredbooleanOm svaret er påkrevd
lowLabelstringLabel for lav verdi (kun nps)
highLabelstringLabel for høy verdi (kun nps)
labelsArray<{ value, label }>Egne labels per verdi

Text

Fritekstfelt med valgfri maks-lengde. Bra for oppfølgingsspørsmål. Standardgrensen er 1000 tegn, og API-kontrakten tillater maksimalt 2000 tegn. maxLength må være et positivt heltall. Høyere verdier begrenses til 2000 i widgeten.

tsx
{
  id: "comment",
  type: "text",
  prompt: "Hva kan vi forbedre?",
  maxLength: 1000,
  placeholder: "Skriv her...",
}

Felt for text

PropertyTypePåkrevdBeskrivelse
idstringUnik ID for spørsmålet
type"text"Spørsmålstype
promptstringSpørsmålsteksten
descriptionstringHjelpetekst under prompt
requiredbooleanOm svaret er påkrevd
maxLengthnumberPositivt heltall (standard 1000, øvre grense 2000)
minRowsnumberMinimum antall rader i tekstfeltet
placeholderstringPlassholdertekst
autoCompletestringHTML autocomplete-attributt

Single choice

Brukeren velger ett alternativ fra en liste.

tsx
{
  id: "reason",
  type: "singleChoice",
  prompt: "Hva var du her for å gjøre?",
  options: [
    { value: "apply", label: "Søke om noe" },
    { value: "status", label: "Sjekke status" },
    { value: "other", label: "Annet" },
  ],
  required: true,
}

Multi choice

Brukeren velger ett eller flere alternativer. Støtter to varianter:

  • "checkbox" (standard) — tradisjonell avkrysningsliste, best for få valg
  • "combobox" — søkbar dropdown med chips, anbefalt for 10+ alternativer
tsx
{
  id: "topics",
  type: "multiChoice",
  prompt: "Hvilke temaer er du interessert i?",
  variant: "checkbox",
  options: [
    { value: "health", label: "Helse" },
    { value: "work", label: "Arbeid" },
    { value: "family", label: "Familie" },
  ],
}

Combobox-variant med maxSelections

For mange alternativer (f.eks. Task Priority-surveyer) er combobox-varianten bedre:

tsx
{
  id: "priority",
  type: "multiChoice",
  variant: "combobox",
  prompt: "Hvilke oppgaver er viktigst for deg?",
  maxSelections: 2,
  randomize: true,
  options: [
    { value: "apply", label: "Søke om sykepenger" },
    { value: "status", label: "Sjekke status" },
  ],
}

maxSelections må være minst 1 og kan ikke være høyere enn antallet alternativer.

Felt for valgspørsmål

PropertyTypePåkrevdBeskrivelse
idstringUnik ID for spørsmålet
type"singleChoice" | "multiChoice"Spørsmålstype
promptstringSpørsmålsteksten
descriptionstringHjelpetekst under prompt
optionsArray<{ value, label, description? }>Valgalternativer
requiredbooleanOm svaret er påkrevd
randomizebooleanRandomiser rekkefølgen på alternativer
variant"checkbox" | "combobox"Visuell variant (kun multiChoice, standard: "checkbox")
maxSelectionsnumberMaks antall valg (kun multiChoice)

Felles felt

Alle spørsmålstyper deler disse:

PropertyTypeBeskrivelse
idstringUnik identifikator — brukes i svar-payloaden
promptstringSpørsmålsteksten som vises til brukeren
descriptionstringValgfri hjelpetekst under spørsmålet
requiredbooleanKrever svar for å sende inn
visibleIfVisibleIfConditionSe Vis bare relevante spørsmål

Komplett eksempel

Her er en survey med flere spørsmålstyper og relevante oppfølgingsspørsmål:

tsx
import "@navikt/ds-css";
import "@navikt/lumi-survey/styles.css";

import { LumiSurveyDock } from "@navikt/lumi-survey";
import type {
  SurveyDocumentV1,
  LumiSurveyTransport,
} from "@navikt/lumi-survey";

const transport: LumiSurveyTransport = {
  submit: async (submission) => {
    const response = await fetch("/api/lumi/feedback", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(submission.transportPayload),
    });
    if (!response.ok) {
      throw new Error(`Innsending feilet med status ${response.status}`);
    }
  },
};

const survey = {
  authoringSchemaVersion: 1,
  type: "custom",
  pages: [
    {
      id: "vurdering",
      questions: [
        {
          id: "rating",
          type: "rating",
          variant: "emoji",
          prompt: "Hvordan var opplevelsen din?",
          required: true,
        },
      ],
    },
    {
      id: "oppgave",
      questions: [
        {
          id: "reason",
          type: "singleChoice",
          prompt: "Hva var du her for å gjøre?",
          options: [
            { value: "apply", label: "Søke om noe" },
            { value: "status", label: "Sjekke status" },
            { value: "other", label: "Annet" },
          ],
          visibleIf: {
            questionId: "rating",
            operator: "EXISTS",
          },
        },
      ],
    },
    {
      id: "kommentar",
      questions: [
        {
          id: "comment",
          type: "text",
          prompt: "Har du andre tilbakemeldinger?",
          maxLength: 1000,
          visibleIf: {
            questionId: "reason",
            operator: "EXISTS",
          },
        },
      ],
    },
  ],
} satisfies SurveyDocumentV1;

export function MyPage() {
  return (
    <LumiSurveyDock
      surveyId="min-flate"
      survey={survey}
      transport={transport}
    />
  );
}

Velg sider først

Legg hvert spørsmål på sin egen side når brukeren skal svare på én ting om gangen. Samle flere spørsmål på samme side bare når de hører tett sammen. Se Sider og flyt.

Laget med ❤️ av Team eSyfo i Nav