Popup er byttet ut mot AkselModal

This commit is contained in:
Markus Johansen 2023-07-31 14:05:09 +02:00
parent 545d64da8c
commit 413a6277f4
3 changed files with 74 additions and 95 deletions

View file

@ -10,19 +10,19 @@ interface ICardsContainer {
* @returns grid med feilmeldinger
*/
const CardsContainer = (props: ICardsContainer) => {
return (
<div>
<div className="grid grid-cols-2 gap-6">
{props.feilmeldinger.map((feilMelding) => (
<FeilKort
key={props.feilmeldinger.indexOf(feilMelding)}
tittel={feilMelding.tittel}
beskrivelse={feilMelding.beskrivelse}
dato={new Date()}
/>
))}
<FeilKort
key={props.feilmeldinger.indexOf(feilMelding)}
tittel={feilMelding.tittel}
beskrivelse={feilMelding.beskrivelse}
dato={new Date()}
/>
))
}
</div>
</div>
);
};

View file

@ -1,24 +1,8 @@
import "@navikt/ds-css";
import { Button, Heading, Tag } from "@navikt/ds-react";
import { Heading, Tag } from "@navikt/ds-react";
import { IFeilmelding } from "../interface";
import { createContext, useContext, useState } from "react";
import { XMarkIcon } from "@navikt/aksel-icons";
/**
* Kontekst som brukes for å vise og skjule FullvisningsKort-komponentet.
*
* @param visHeleKortet en boolean som bestemmer om FullvisningsKort-komponentet skal vises eller ikke.
* True viser komponentet, false skjuler komponentet.
*
* @param setVisHeleKortet en state-funksjon som endrer visHeleKortet.
* Gjør det mulig å endre visningsmodus fra andre komponenter en bare provider (Feilcard).
*/
const visningsContext = createContext({
visHeleKortet: false,
setVisHeleKortet: (value: boolean) => {}
})
import FeilModal from "./FeilModal";
import { useState } from "react";
/**
* En konteiner som inneholder all informasjon og funksjonalitet for å vise og interagere med en feilmelding.
@ -27,69 +11,60 @@ const visningsContext = createContext({
* @param dato
* @returns JSX komponent som beskriver innholdet i feilmeldinger.
*/
export const FeilKort = (props: IFeilmelding) => {
const [visHeleKortet, setVisHeleKortet] = useState(false)
const visningsModus = {visHeleKortet, setVisHeleKortet}
interface IFeilKort extends IFeilmelding {
key: number
}
export const FeilKort = (props: IFeilKort) => {
const [visModal, setVisModal] = useState<boolean>(false)
return(
<visningsContext.Provider value={visningsModus}>
<div className="
<>
<div
key={props.key}
className="
bg-bg-default border border-border-default p-7 rounded-lg
hover:bg-bg-subtle hover:border-border-strong hover:shadow-md duration-100
active:bg-surface-active
"
onClick={() => {
setVisHeleKortet(true)
}}>
<FeilkortHeader tittel={props.tittel} beskrivelse={props.beskrivelse} haster={false} dato={props.dato}/>
<FullvisningsKort tittel={props.tittel} beskrivelse={props.beskrivelse} dato={props.dato}/>
active:bg-surface-active"
onClick={() => setVisModal(true)}
>
<FeilkortHeader tittel={props.tittel} beskrivelse={props.beskrivelse} dato={props.dato}/>
</div>
</visningsContext.Provider>
{ visModal ?
<FeilModal open={visModal} setOpen={setVisModal} >
<FeilkortHeader tittel={props.tittel} beskrivelse={props.beskrivelse} dato={new Date()} />
<div className="h-2 bg-gray-200 my-4 rounded-lg"></div>
{/* TODO: HER KOMMER CONTENT */}
</FeilModal> : null
}
</>
)
}
/**
* Fullvisningskortet er en komponent som viser all informasjon om en feilmelding.
* Alle brukere skal ikke ha tilgang til denne informasjonen, visningen av komponentet er derfor avhengig av en kontekst.
* dersom visHeleKortet er true vises komponentet, ellers vises ikke komponentet og det returneres react fragmenter.
* FeilkortHeader er komponent som beskriver ikke-sensitiv informasjon om feilmeldingen og vises for alle forsiden.
* FeilkortHeaderen er en del av FeilKort-komponenten og FullvisningsKort-komponenten.
* Midlertidig implementerer komponentet @requires IFeilmelding for props, men dette endres når IFeilmelding utvides i fremtiden for støtte av flere typer feilmeldinger.
* @param tittel
* @param beskrivelse
* @param haster
* @param dato
* @returns JSX komponent som beskriver innholdet i feilmeldinger.
* @returns JSX komponent som skal vise nødvendig informasjon for å forstå en feil.
*/
const FullvisningsKort = (props: IFeilmelding) => {
const {visHeleKortet, setVisHeleKortet} = useContext(visningsContext)
export const FeilkortHeader = (props: IFeilmelding) => {
return(
visHeleKortet ?
<div className="h-screen w-screen absolute top-0 right-0 bg-grayalpha-800">
<div className="w-full h-full flex justify-center items-center">
<div className="bg-bg-default border border-border-default p-7 rounded-lg w-1/2">
<div className="flex justify-between gap-4">
<FeilkortHeader tittel={props.tittel} beskrivelse={props.beskrivelse} dato={props.dato}/>
<Button
icon={<XMarkIcon/>}
className="max-h-14 min-w-fit"
variant="secondary"
onClick={(e) => {
e.stopPropagation()
setVisHeleKortet(false)
}}
>
Lukk
</Button>
</div>
<div className="h-1 bg-bg-subtle w-full my-4"></div>
</div>
</div>
</div>
: <></>
<div className="flex justify-between flex-col">
<div>
<Heading size="medium">{props.tittel}</Heading>
<p className="text-text-subtle mb-4">{props.dato.toDateString()}</p>
<p>{props.beskrivelse}</p>
</div>
<TagBar haster={false}/>
</div>
)
}
interface TagBarInterface {
haster: boolean
}
@ -109,25 +84,3 @@ const TagBar = (props: TagBarInterface) => {
/**
* FeilkortHeader er komponent som beskriver ikke-sensitiv informasjon om feilmeldingen og vises for alle forsiden.
* FeilkortHeaderen er en del av FeilKort-komponenten og FullvisningsKort-komponenten.
* Midlertidig implementerer komponentet @requires IFeilmelding for props, men dette endres når IFeilmelding utvides i fremtiden for støtte av flere typer feilmeldinger.
* @param tittel
* @param beskrivelse
* @param haster
* @param dato
* @returns JSX komponent som skal vise nødvendig informasjon for å forstå en feil.
*/
const FeilkortHeader = (props: IFeilmelding) => {
return(
<div className="flex justify-between flex-col">
<div>
<Heading size="medium">{props.tittel}</Heading>
<p className="text-text-subtle mb-4">{props.dato.toDateString()}</p>
<p>{props.beskrivelse}</p>
</div>
<TagBar haster={false}/>
</div>
)
}

View file

@ -0,0 +1,26 @@
import { Modal } from "@navikt/ds-react"
import { Dispatch, SetStateAction } from "react"
interface modalInterface {
open: boolean
setOpen: Dispatch<SetStateAction<boolean>>
children: React.ReactNode
}
const FeilModal = (props: modalInterface) => {
return(
<Modal
className="w-3/5"
open={props.open}
aria-label={" modal"}
onClose={() => props.setOpen(false)}
aria-labelledby="modal-heading"
>
<Modal.Content>
{props.children}
</Modal.Content>
</Modal>
)
}
export default FeilModal;