diff --git a/doc-site/components/nve-stepper.md b/doc-site/components/nve-stepper.md
index 59a054c0..12035f38 100644
--- a/doc-site/components/nve-stepper.md
+++ b/doc-site/components/nve-stepper.md
@@ -6,7 +6,7 @@ layout: component
### Standard med og uten knapper
-Bruk `hideStepButtons` for å skjule knappene i desktop-versjon. Hvis du skjuler knappene, må du implementere dine egne knapper og du bruker metodene `nextStep` og `prevStep` for å håndtere logikken.
+Bruk `hideStepButtons` for å skjule knappene i desktop-versjon. Hvis du skjuler knappene, må du implementere dine egne knapper og du bruker metodene `nextStep` og `prevStep` for å håndtere logikken. Du kan også bruke `hideStep` på individuelle steg i `steps`-arrayet for å skjule spesifikke steg - navigasjon vil automatisk hoppe over de skjulte stegene.
I siste trinn erstattes neste knapp med en klarknapp, som standard er teksten "Sende", men du kan endre teksten gjennom egenskapen `endButtonText`. Du må bruke metoden `finishSteps` for du spesifiserer hva som skal skje på den siste knappen.
@@ -206,6 +206,25 @@ Bruk `hideMobileStepButtons` for å skjule knappene i mobil-versjon.
+### Skjule bestemte steg
+
+Bruk `hideStep`-propertyen på individuelle steg for å skjule dem fra visningen. Stepper-komponenten vil automatisk hoppe over skjulte steg ved navigasjon.
+
+
+
+```html
+
+
+```
+
+
+
## Vue eksempler
Her er eksempler på hvordan du bruker Nve-Stepper i Vue:
@@ -776,3 +795,173 @@ const handlePrevStep = () => {
```
+
+### Skjul bestemte steg i Vue
+
+Du kan kontrollere visningen av bestemte steg ved å bruke `hideStep`-propertyen. Dette eksempelet viser hvordan du kan dynamisk vise eller skjule steg i en Vue-applikasjon:
+
+```vue
+
+
+ {{ showAllSteps ? 'Skjul steg 2' : 'Vis alle steg' }}
+
+
+
+
+
+```
+
+Når du endrer `hideStep`-egenskapen på et steg, bør du kalle `reRender()`-metoden for å sikre at stepper-komponenten oppdaterer visningen. Stepper-komponenten vil automatisk håndtere navigasjon og hoppe over skjulte steg.
+
+
+
+```
+
+
+ {{ showAllSteps ? 'Skjul steg 2' : 'Vis alle steg' }}
+
+
+
+
+
+
+```
+
+
diff --git a/src/components/nve-stepper/nve-step/nve-step.component.ts b/src/components/nve-stepper/nve-step/nve-step.component.ts
index c288cbb7..b8ac2065 100644
--- a/src/components/nve-stepper/nve-step/nve-step.component.ts
+++ b/src/components/nve-stepper/nve-step/nve-step.component.ts
@@ -20,7 +20,8 @@ export interface StepProps {
readyForEntrance: boolean;
orientation?: string;
hideStateText?: boolean;
- hideDescriptions?: boolean;
+ hideDescription?: boolean;
+ hideStep?: boolean;
}
/** Komponent for et enkelt steg i en stepper */
@@ -73,7 +74,11 @@ export default class NveStep extends LitElement {
/** Angir om beskrivelser skal skjules */
@property({ type: Boolean })
- hideDescriptions: boolean = false;
+ hideDescription: boolean = false;
+
+ /** Angir omhele steget skal skjules */
+ @property({ type: Boolean })
+ hideStep?: boolean = false;
/** Brukes for å justere høyden for den vertikale skilleveggen blir så høy som nær Step har en description. */
@query('.step-description')
@@ -204,7 +209,7 @@ export default class NveStep extends LitElement {
private renderDescription(): TemplateResult | string {
if (!this.isDescriptionValid(this.description)) {
// Return an empty div with min-height to maintain spacing when no description
- return html`
`;
+ return html``;
}
return html`${this.description}
`;
}
@@ -232,7 +237,8 @@ export default class NveStep extends LitElement {
}
private renderVerticalStep(): TemplateResult {
- return html`
+ return this.hideStep === true ? html`` :
+ html`
@@ -256,7 +262,7 @@ export default class NveStep extends LitElement {
}
render(): TemplateResult {
- return this.isOrientationVertical() ? this.renderVerticalStep() : html`
+ return this.isOrientationVertical() ? this.renderVerticalStep() : this.hideStep === true ? html`` : html`
${this.hideStateText ? '' : this.getStateText(this.state)}
- ${this.hideDescriptions ? '' : this.renderDescription()}
+ ${this.hideDescription ? '' : this.renderDescription()}
`;
}
diff --git a/src/components/nve-stepper/nve-step/nve-step.styles.ts b/src/components/nve-stepper/nve-step/nve-step.styles.ts
index bb5fb241..94296e29 100644
--- a/src/components/nve-stepper/nve-step/nve-step.styles.ts
+++ b/src/components/nve-stepper/nve-step/nve-step.styles.ts
@@ -78,7 +78,7 @@ export default css`
padding-top: 0.625rem; /*10px; */
}
- .empty-description {
+ .step-description-empty {
min-height: 1rem; /* Set a minimum height for empty descriptions */
padding-top: 0.625rem; /* Match the padding of regular descriptions */
}
diff --git a/src/components/nve-stepper/nve-stepper.component.ts b/src/components/nve-stepper/nve-stepper.component.ts
index a1512259..418bd632 100644
--- a/src/components/nve-stepper/nve-stepper.component.ts
+++ b/src/components/nve-stepper/nve-stepper.component.ts
@@ -92,7 +92,6 @@ export default class NveStepper extends LitElement {
private selectedStepIndex: { value: number } = { value: 0 };
-
/**
* Ved endring av props, re-render komponenten eksternt med document.querySelector("nve-stepper")?.reRender();
* Dette er nyttig når du vil tvinge en oppdatering av komponenten uten å endre dens interne state.
@@ -116,23 +115,53 @@ export default class NveStepper extends LitElement {
stepperElement.getCurrentIndex = this.getCurrentIndex.bind(this);
stepperElement.reRender = this.reRender.bind(this);
}
-
/** Metode for å gå til neste steg */
nextStep(): void {
if (this.selectedStepIndex.value < this.steps.length - 1) {
- this.setStep(this.selectedStepIndex.value + 1);
+ // Finn neste synlige steg
+ let nextIndex = this.selectedStepIndex.value + 1;
+ while (nextIndex < this.steps.length && this.steps[nextIndex].hideStep) {
+ nextIndex++;
+ }
+
+ if (nextIndex < this.steps.length) {
+ this.setStep(nextIndex);
+ }
}
}
/** Metode for å gå til forrige steg */
prevStep(): void {
if (this.selectedStepIndex.value > 0) {
- this.setStep(this.selectedStepIndex.value - 1);
+ // Finn forrige synlige steg
+ let prevIndex = this.selectedStepIndex.value - 1;
+ while (prevIndex >= 0 && this.steps[prevIndex].hideStep) {
+ prevIndex--;
+ }
+
+ if (prevIndex >= 0) {
+ this.setStep(prevIndex);
+ }
}
}
-
/** Metode for å velge et spesifikt steg */
selectStep(index: number): void {
+ // Sjekk om det valgte steget er skjult
+ if (index < 0 || index >= this.steps.length || this.steps[index].hideStep) {
+ // Finn nærmeste synlige steg hvis mulig
+ const nextVisibleIndex = this.findNextVisibleStepIndex(index);
+ if (nextVisibleIndex !== -1) {
+ index = nextVisibleIndex;
+ } else {
+ const prevVisibleIndex = this.findPrevVisibleStepIndex(index);
+ if (prevVisibleIndex !== -1) {
+ index = prevVisibleIndex;
+ } else {
+ // Ingen synlige steg funnet, gjør ingenting
+ return;
+ }
+ }
+ }
this.setStep(index);
}
@@ -148,13 +177,28 @@ export default class NveStepper extends LitElement {
return this.selectedStepIndex.value;
}
-
private setStep(index: number): void {
+ if (this.steps[index] && this.steps[index].readyForEntrance) {
+ // Hvis gjeldende step er skjult, hopp til neste synlige steg
+ if (this.steps[index].hideStep) {
+ // Finn neste synlige steg
+ const nextVisibleIndex = this.findNextVisibleStepIndex(index);
+ if (nextVisibleIndex !== -1) {
+ this.selectedStepIndex.value = nextVisibleIndex;
+ index = nextVisibleIndex;
+ } else {
+ // Hvis ingen synlige steg er funnet framover, prøv å finne et bakover
+ const prevVisibleIndex = this.findPrevVisibleStepIndex(index);
+ if (prevVisibleIndex !== -1) {
+ this.selectedStepIndex.value = prevVisibleIndex;
+ index = prevVisibleIndex;
+ }
+ }
+ } else {
+ this.selectedStepIndex.value = index;
+ }
- if (this.steps[index].readyForEntrance) {
- this.selectedStepIndex.value = index;
-
- // Oppdater status og valg for alle trinn
+ // Oppdater status og valg for alle trinn
for (let i = 0; i < this.steps.length; i++) {
if (i < index) {
// Alle trinn under indeks er satt til Done
@@ -174,6 +218,34 @@ export default class NveStepper extends LitElement {
}
}
+ /**
+ * Finn neste synlige steg fra gitt indeks
+ * @param currentIndex Nåværende indeks
+ * @returns Indeks for neste synlige steg, eller -1 hvis ingen finnes
+ */
+ private findNextVisibleStepIndex(currentIndex: number): number {
+ for (let i = currentIndex + 1; i < this.steps.length; i++) {
+ if (!this.steps[i].hideStep) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Finn forrige synlige steg fra gitt indeks
+ * @param currentIndex Nåværende indeks
+ * @returns Indeks for forrige synlige steg, eller -1 hvis ingen finnes
+ */
+ private findPrevVisibleStepIndex(currentIndex: number): number {
+ for (let i = currentIndex - 1; i >= 0; i--) {
+ if (!this.steps[i].hideStep) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
private getExtremes(): string | undefined {
if (this.selectedStepIndex.value === 0) return 'start';
if (this.selectedStepIndex.value === this.steps.length - 1) {
@@ -280,7 +352,8 @@ export default class NveStepper extends LitElement {
.readyForEntrance=${step.readyForEntrance}
.orientation=${this.orientation}
.hideStateText=${this.hideStateText}
- .hideDescriptions=${this.hideDescriptions}
+ .hideDescription=${this.hideDescriptions}
+ .hideStep=${step.hideStep}
>
`