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 (default)1–5😡 🙁 😐 😀 😍
thumbs1–2👎 👍
stars1–5⭐⭐⭐⭐⭐
nps0–10Nummerte knapper med lav/høy-label

Emoji (default)

tsx
{
  id: "rating",
  type: "rating",
  variant: "emoji", // kan utelates — emoji er default
  prompt: "Hvordan var opplevelsen din?",
  description: "Svarene er anonyme og brukes til videreutvikling",
  required: true,
}

Thumbs

Perfekt for enkle «Var dette nyttig?»-spørsmål.

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)

0–10-skala med valgfrie labels i endene. Standardmetodikk for å måle lojalitet.

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,
}

Rating-properties

PropertyTypePåkrevdBeskrivelse
idstringUnik ID for spørsmålet
type"rating"Spørsmålstype
variant"emoji" | "thumbs" | "stars" | "nps"Visuell variant (default: "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.

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

Text-properties

PropertyTypePåkrevdBeskrivelse
idstringUnik ID for spørsmålet
type"text"Spørsmålstype
promptstringSpørsmålsteksten
descriptionstringHjelpetekst under prompt
requiredbooleanOm svaret er påkrevd
maxLengthnumberMaks antall tegn
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" (default) — 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: "priorities",
  type: "multiChoice",
  variant: "combobox",
  prompt: "Velg de 5 viktigste oppgavene for deg",
  maxSelections: 5,
  randomize: true,
  options: [
    { value: "apply", label: "Søke om sykepenger" },
    { value: "status", label: "Sjekke status" },
    // ... flere alternativer
  ],
}

Choice-properties (gjelder både single og multi)

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, default: "checkbox")
maxSelectionsnumberMaks antall valg (kun multiChoice)

Felles properties

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
analyticsIdstringValgfri ID for analytics (bruker id om ikke satt)
visibleIfLogicConditionBetinget visning — se Betinget synlighet
logicLogicRule[]Branching-regler — se Avansert

Komplett eksempel

Her er en survey med flere spørsmålstyper og progressiv disclosure:

tsx
import "lumi-survey/styles.css";

import { LumiSurveyDock } from "lumi-survey";
import type { LumiSurveyConfig, LumiSurveyTransport } from "lumi-survey";

const transport: LumiSurveyTransport = {
  submit: async (submission) => {
    await fetch("/api/lumi/feedback", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(submission.transportPayload),
    });
  },
};

const survey = {
  type: "custom",
  questions: [
    {
      id: "rating",
      type: "rating",
      variant: "emoji",
      prompt: "Hvordan var opplevelsen din?",
      required: true,
    },
    {
      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: { field: "ANSWER", questionId: "rating", operator: "EXISTS" },
    },
    {
      id: "comment",
      type: "text",
      prompt: "Har du andre tilbakemeldinger?",
      maxLength: 1000,
      visibleIf: { field: "ANSWER", questionId: "rating", operator: "EXISTS" },
    },
  ],
} satisfies LumiSurveyConfig;

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

Bruk presets for vanlige mønstre

For de fleste tilfeller trenger du ikke bygge surveyen fra scratch. Se Presets og builders for ferdige konfigurasjoner.

Lumi Analytics — bygget på navikt/lumi (MIT-lisens)