import { Meta } from '@storybook/react'
import LmFormBuilder from '../components/form-builder/FormBuilder'
import {
FormBuilderStoryblok,
FormSelectOptionStoryblok
} from '../typings/generated/components-schema'
import { getComponentArgTypes } from '../storybook/configControls'
import StorybookPresetsContainer from '../storybook/components/StorybookPresetsContainer'
import { action } from '@storybook/addon-actions'
const COMPONENT_NAME = 'form_builder'
export default {
title: 'Design/Inputs/FormBuilder',
component: LmFormBuilder,
argTypes: {
...getComponentArgTypes(COMPONENT_NAME)
}
} as Meta
export const Presets = () => (
)
const endpoint = 'http://localhost:3000/api/form-endpoint'
const formFields = [
{
component: 'form_textfield',
_uid: 'name',
name: 'name',
label: 'Text Field',
required: true
},
{
component: 'form_textfield',
_uid: 'email',
name: 'email',
label: 'Email',
type: 'email',
required: true
},
{
component: 'form_textfield',
_uid: 'phone',
name: 'phone',
label: 'Phone'
},
{
component: 'form_select',
_uid: 'select',
name: 'select',
label: 'Select option',
options: [
{
_uid: '1',
component: 'form_select_option',
value: '1',
label: 'Mrs.'
},
{
_uid: '2',
component: 'form_select_option',
value: '2',
label: 'Mr.'
}
]
},
{
component: 'form_textfield',
_uid: 'comment',
name: 'comment',
label: 'Comment',
textarea: true
},
{
component: 'form_checkbox',
_uid: 'checkbox',
name: 'agb',
label: 'Accept AGB',
required: true
}
] as FormBuilderStoryblok['fields']
const submit = [
{
component: 'button',
_uid: 'button_submit',
label: 'Submit'
}
] as FormBuilderStoryblok['submit']
export const Basic = () => {
return (
)
}
export const Spacing = () => {
return (
action('submit', data)}
content={{
_uid: 'spacing',
component: 'form_builder',
spacing: 2,
variant: 'outlined',
submit: submit,
fields: formFields?.slice(0)
}}
/>
)
}
export const InlineForm = () => (
action('submit', data)}
content={{
_uid: 'inline',
component: 'form_builder',
form_inline: true,
endpoint,
submit: submit,
fields: formFields?.slice(0, 2).map((i) => {
i.placeholder = i.label
i._uid = i._uid + 'inline'
delete i.label
return i
})
}}
/>
)
export const SelectVariants = () => {
let options: FormSelectOptionStoryblok[] = [
{
_uid: '1',
component: 'form_select_option',
value: '1',
label: 'Option 1'
},
{
_uid: '2',
component: 'form_select_option',
value: '2',
label: 'Option 2'
},
{
_uid: '3',
component: 'form_select_option',
value: '3',
label: 'Option 3'
}
]
return (
action('submit', data)}
content={{
_uid: 'inline',
component: 'form_builder',
endpoint,
spacing: 2,
submit: submit,
fields: [
{
_uid: '1',
label: 'Single Select',
name: 'single_select',
component: 'form_select',
options
},
{
_uid: '2',
label: 'Multi Select',
name: 'multi_select',
type: 'multi-select',
component: 'form_select',
options
},
{
_uid: '3',
label: 'Checkbox',
name: 'multi_select',
type: 'checkbox',
component: 'form_select',
options
},
{
_uid: '4',
label: 'Radio',
name: 'multi_select',
type: 'radio',
component: 'form_select',
options
}
]
}}
/>
)
}