import { Meta, Story, Props, Canvas } from '@storybook/addon-docs/blocks'
import { config, withDesign } from 'storybook-addon-designs'
import { action } from '@storybook/addon-actions'

import Alert from '@baserow/modules/core/components/Alert'
import Button from '@baserow/modules/core/components/Button'

<Meta
    title="Baserow/Toasts & Alerts/Alerts"
    component={(Alert, Button)}
    decorators={[withDesign]}
    argTypes={{
        default: {
            defaultValue:
                '<p>Lorem ipsum dolor <span>sit amet</span> consectetur adipisicing elit. <a href="#">Aliquid pariatur</a>, ipsum similique veniam.</p>',
        },
        type: {
            control: {
                type: 'select',
                options: [
                    'info-neutral',
                    'info-primary',
                    'warning',
                    'error',
                    'success',
                    'blank',
                ],
            },
            defaultValue: 'success',
        },
        position: {
            control: {
                type: 'radio',
                options: [null, 'top', 'bottom'],
            },
            defaultValue: null,
        },
        loading: {
            control: {
                type: 'boolean',
                options: [true, false],
            },
            defaultValue: false,
        },
        closeButton: {
            control: {
                type: 'boolean',
                options: [true, false],
            },
            defaultValue: true,
        },
        width: {
            control: {
                type: 'number',
            },
            defaultValue: null,
        },
    }}
/>

# Alert

An alert is a component that is used to display a message to the user.
The type defines the color scheme of the alert and the icon that is displayed.
The `blank` type can be used to display an alert without an icon.
It can be displayed at the bottom or top right of the page.

export const Template = (args, { argTypes }) => ({
    components: { Alert },
    props: Object.keys(argTypes),
    template: `
    <Alert @close="close()" v-bind="$props">
     <template v-if="${'image' in args}" v-slot:image>${args.image}</template>
        <template v-if="${'title' in args}" v-slot:title>${
        args.title
    }</template>
        <template v-slot>${args.default}</template>
        <template v-if="${'actions' in args}" v-slot:actions>${
        args.actions
    }</template>
    </Alert>
    `,
    methods: { close: action('closed') },
})

export const designConfig = {
    type: 'figma',
    url: 'https://www.figma.com/file/W7R2rQW7ohsZMeHRfEcPFW/Design-Library?node-id=53%3A21&mode=dev',
}

<Canvas>
    <Story
        name="Info primary"
        args={{
            type: 'info-primary',
            title: 'We’ve just released a new feature',
            actions: `<Button type="primary" size="small">View</Button> <button class="alert__actions-button-text alert__actions-button-text--normal">Dismiss</button>`,
        }}
        parameters={{
            design: config(designConfig),
        }}
    >
        {Template.bind({})}
    </Story>
    <Story
        name="Info neutral"
        args={{
            type: 'info-neutral',
            title: 'We’ve just released a new feature',
            actions:
                '<Button type="secondary" size="small">View</Button><button class="alert__actions-button-text alert__actions-button-text--normal">Dismiss</button>',
        }}
        parameters={{
            design: config(designConfig),
        }}
    >
        {Template.bind({})}
    </Story>
    <Story
        name="Warning"
        args={{
            type: 'warning',
            title: 'This action might cause problems',
            actions:
                '<Button type="warning" size="small">View</Button><button class="alert__actions-button-text">Dismiss</button>',
        }}
        parameters={{
            design: config(designConfig),
        }}
    >
        {Template.bind({})}
    </Story>
    <Story
        name="Error"
        args={{
            type: 'error',
            title: 'There was a problem with this action',
            actions:
                '<Button type="error" size="small">View</Button><button class="alert__actions-button-text">Dismiss</button>',
        }}
        parameters={{
            design: config(designConfig),
        }}
    >
        {Template.bind({})}
    </Story>
    <Story
        name="Success"
        args={{
            type: 'success',
            title: 'Successfully updated profile',
            actions:
                '<Button type="success" size="small">View</Button><button class="alert__actions-button-text alert__actions-button-text--loading">View changes</button>',
        }}
        parameters={{
            design: config(designConfig),
        }}
    >
        {Template.bind({})}
    </Story>
    <Story
        name="Blank with image"
        args={{
            type: 'blank',
            image: '<img src="https://picsum.photos/394/119" srcset="https://picsum.photos/792/238 2x" />',
            title: 'Successfully updated profile',
            actions:
                '<ButtonIcon icon="baserow-icon-twitter"></ButtonIcon><ButtonIcon icon="baserow-icon-reddit"></ButtonIcon><ButtonIcon icon="baserow-icon-facebook"></ButtonIcon><ButtonIcon icon="baserow-icon-linkedin"></ButtonIcon>',
            width: 396,
        }}
        parameters={{
            design: config(designConfig),
        }}
    >
        {Template.bind({})}
    </Story>
</Canvas>

## Example

```javascript
<Alert type="success" close-button loading>
    <template #title>Updates have been made to your profile</template>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid pariatur, ipsum similique veniam</p>
    <template #actions><button class="alert__actions-button-text alert__actions-button-text--normal" @click="close()">Dismiss</button><button class="alert__actions-button-text" @click="anyMethod()">View changes</button></template>
</Alert>
```

## Props

<Props of={Alert} />