Skip to content
Snippets Groups Projects
Commit d32ab340 authored by Johanna Szepanski's avatar Johanna Szepanski
Browse files

migrated dialog stories

parent 8bc4eee7
No related branches found
No related tags found
1 merge request!217CE-3633: Migrate dialogs
import { useState } from "react"; import { useState, ReactNode } from "react";
import { Alert, Button, Stack, Typography } from "@mui/material"; import { Alert, Button, Stack, Typography } from "@mui/material";
import { Box } from "@mui/system"; import { Box } from "@mui/system";
import AddBoxIcon from "@mui/icons-material/AddBox"; import AddBoxIcon from "@mui/icons-material/AddBox";
...@@ -20,7 +20,11 @@ const CLOSED = "CLOSED"; ...@@ -20,7 +20,11 @@ const CLOSED = "CLOSED";
const loremString = const loremString =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dignissim aliquam libero, sit amet porttitor felis iaculis a. Nunc consequat urna vitae tellus consequat, a egestas enim dictum. Morbi sodales pharetra sagittis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed velit ex, venenatis id vulputate egestas, molestie id libero. Curabitur eu tincidunt metus. Mauris ultricies tristique quam, ut cursus tortor. Nullam feugiat elementum nulla, nec faucibus lorem sodales quis. Suspendisse sollicitudin sollicitudin sapien, a bibendum dolor rhoncus consectetur. Nunc interdum et turpis vitae vehicula. Donec egestas vitae mauris id scelerisque. Cras suscipit magna nec purus vehicula ultrices. Fusce quam nibh, iaculis in maximus a, ultrices eget tortor. Etiam ex massa, vulputate condimentum fermentum eu, convallis non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dignissim aliquam libero, sit amet porttitor felis iaculis a. Nunc consequat urna vitae tellus consequat, a egestas enim dictum. Morbi sodales pharetra sagittis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed velit ex, venenatis id vulputate egestas, molestie id libero. Curabitur eu tincidunt metus. Mauris ultricies tristique quam, ut cursus tortor. Nullam feugiat elementum nulla, nec faucibus lorem sodales quis. Suspendisse sollicitudin sollicitudin sapien, a bibendum dolor rhoncus consectetur. Nunc interdum et turpis vitae vehicula. Donec egestas vitae mauris id scelerisque. Cras suscipit magna nec purus vehicula ultrices. Fusce quam nibh, iaculis in maximus a, ultrices eget tortor. Etiam ex massa, vulputate condimentum fermentum eu, convallis non metus."; "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dignissim aliquam libero, sit amet porttitor felis iaculis a. Nunc consequat urna vitae tellus consequat, a egestas enim dictum. Morbi sodales pharetra sagittis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed velit ex, venenatis id vulputate egestas, molestie id libero. Curabitur eu tincidunt metus. Mauris ultricies tristique quam, ut cursus tortor. Nullam feugiat elementum nulla, nec faucibus lorem sodales quis. Suspendisse sollicitudin sollicitudin sapien, a bibendum dolor rhoncus consectetur. Nunc interdum et turpis vitae vehicula. Donec egestas vitae mauris id scelerisque. Cras suscipit magna nec purus vehicula ultrices. Fusce quam nibh, iaculis in maximus a, ultrices eget tortor. Etiam ex massa, vulputate condimentum fermentum eu, convallis non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dignissim aliquam libero, sit amet porttitor felis iaculis a. Nunc consequat urna vitae tellus consequat, a egestas enim dictum. Morbi sodales pharetra sagittis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed velit ex, venenatis id vulputate egestas, molestie id libero. Curabitur eu tincidunt metus. Mauris ultricies tristique quam, ut cursus tortor. Nullam feugiat elementum nulla, nec faucibus lorem sodales quis. Suspendisse sollicitudin sollicitudin sapien, a bibendum dolor rhoncus consectetur. Nunc interdum et turpis vitae vehicula. Donec egestas vitae mauris id scelerisque. Cras suscipit magna nec purus vehicula ultrices. Fusce quam nibh, iaculis in maximus a, ultrices eget tortor. Etiam ex massa, vulputate condimentum fermentum eu, convallis non metus.";
const CustomTitle = ({ title }) => { interface CustomTitleProps {
title: string | ReactNode;
}
const CustomTitle = ({ title }: CustomTitleProps) => {
return ( return (
<Stack <Stack
flexDirection="row" flexDirection="row"
...@@ -30,7 +34,7 @@ const CustomTitle = ({ title }) => { ...@@ -30,7 +34,7 @@ const CustomTitle = ({ title }) => {
<AddBoxIcon fontSize="large" /> <AddBoxIcon fontSize="large" />
<Typography <Typography
variant="button" variant="button"
verticalalign="center" sx={{ verticalalign: "center" }}
> >
{title} {title}
</Typography> </Typography>
...@@ -38,17 +42,28 @@ const CustomTitle = ({ title }) => { ...@@ -38,17 +42,28 @@ const CustomTitle = ({ title }) => {
); );
}; };
const CustomContent = ({ content }) => { interface CustomContentProps {
content: string | ReactNode;
}
const CustomContent = ({ content }: CustomContentProps) => {
return <Typography fontFamily="monospace">{content}</Typography>; return <Typography fontFamily="monospace">{content}</Typography>;
}; };
interface DialogProps {
title: string | ReactNode;
titleIsCustomComponent: boolean;
content: string | ReactNode;
contentIsCustomComponent: boolean;
}
export const BasicDialog = ({ export const BasicDialog = ({
title, title,
titleIsCustomComponent, titleIsCustomComponent,
content, content,
contentIsCustomComponent, contentIsCustomComponent,
...props ...props
}) => { }: DialogProps) => {
const [state, setState] = useState(OPEN); const [state, setState] = useState(OPEN);
return ( return (
...@@ -89,7 +104,7 @@ const ConfirmationTemplate = ({ ...@@ -89,7 +104,7 @@ const ConfirmationTemplate = ({
content, content,
contentIsCustomComponent, contentIsCustomComponent,
...props ...props
}) => { }: DialogProps) => {
const [state, setState] = useState(OPEN); const [state, setState] = useState(OPEN);
const onConfirm = () => setState(CONFIRMED); const onConfirm = () => setState(CONFIRMED);
const onClose = () => setState(CLOSED); const onClose = () => setState(CLOSED);
...@@ -128,7 +143,15 @@ const ConfirmationTemplate = ({ ...@@ -128,7 +143,15 @@ const ConfirmationTemplate = ({
); );
}; };
export const Confirmation = (args) => <ConfirmationTemplate {...args} />; interface ConfirmationDialogProps extends DialogProps {
confirmText: string;
cancelText: string;
isConfirmDisabled: boolean;
}
export const Confirmation = (args: ConfirmationDialogProps) => (
<ConfirmationTemplate {...args} />
);
Confirmation.args = { Confirmation.args = {
...BasicDialog.args, ...BasicDialog.args,
confirmText: "Confirm", confirmText: "Confirm",
...@@ -136,7 +159,17 @@ Confirmation.args = { ...@@ -136,7 +159,17 @@ Confirmation.args = {
isConfirmDisabled: false isConfirmDisabled: false
}; };
export const DangerActionComponent = ({ ...props }) => { interface DangerActionDialogProps extends ConfirmationDialogProps {
valueToCheck: string;
}
const DangerActionComponent = ({
title,
content,
confirmText,
valueToCheck,
...props
}: DangerActionDialogProps) => {
const [state, setState] = useState(IDLE); const [state, setState] = useState(IDLE);
return ( return (
...@@ -154,6 +187,10 @@ export const DangerActionComponent = ({ ...props }) => { ...@@ -154,6 +187,10 @@ export const DangerActionComponent = ({ ...props }) => {
) : null} ) : null}
</Box> </Box>
<ConfirmDangerActionDialog <ConfirmDangerActionDialog
title={title}
content={content}
confirmText={confirmText}
valueToCheck={valueToCheck}
open={state === OPEN} open={state === OPEN}
onConfirm={() => setState(CONFIRMED)} onConfirm={() => setState(CONFIRMED)}
onClose={() => setState(CLOSED)} onClose={() => setState(CLOSED)}
...@@ -163,10 +200,25 @@ export const DangerActionComponent = ({ ...props }) => { ...@@ -163,10 +200,25 @@ export const DangerActionComponent = ({ ...props }) => {
); );
}; };
export const DangerActionDialog = (args) => <DangerActionComponent {...args} />; export const DangerActionDialog = ({
title,
content,
confirmText,
valueToCheck,
...args
}: DangerActionDialogProps) => (
<DangerActionComponent
title={title}
content={content}
confirmText={confirmText}
valueToCheck={valueToCheck}
{...args}
/>
);
DangerActionDialog.args = { DangerActionDialog.args = {
title: "Delete IOC type", title: "Delete IOC type",
text: " Type in the complete IOC type name to confirm that you really want to delete the IOC type.", content:
" Type in the complete IOC type name to confirm that you really want to delete the IOC type.",
confirmText: "Delete", confirmText: "Delete",
valueToCheck: "ec234-67hdj" valueToCheck: "ec234-67hdj"
}; };
...@@ -188,11 +240,23 @@ const getCustomComponent = () => ( ...@@ -188,11 +240,23 @@ const getCustomComponent = () => (
</> </>
); );
export const DangerActionDialogWithCustomContent = (args) => ( export const DangerActionDialogWithCustomContent = ({
<DangerActionComponent {...args} /> title,
content,
confirmText,
valueToCheck,
...args
}: DangerActionDialogProps) => (
<DangerActionComponent
title={title}
content={content}
confirmText={confirmText}
valueToCheck={valueToCheck}
{...args}
/>
); );
DangerActionDialogWithCustomContent.args = { DangerActionDialogWithCustomContent.args = {
...DangerActionDialog.args, ...DangerActionDialog.args,
text: getCustomComponent() content: getCustomComponent()
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment