@skhemata/skhemata-form
Version:
Skhemata Form Web Component. This web component can be used as base web component when working with forms and inputs.
174 lines (169 loc) • 4.35 kB
text/typescript
import { html } from '@skhemata/skhemata-base';
import '../skhemata-form';
import { argTypes, ArgTypes, Story } from './argTypes';
export default {
title: 'General/SkhemataForm/SkhemataFormRepeat',
component: 'skhemata-blog',
argTypes: {
...argTypes,
repeatedFields: {
control: 'Object',
description: 'Array of inputs to be repeated `type` is the type of input to be used. `attributes` is the attributes that are tied to the input to function. `content` is what will be fed into the `<slot></slot>` element of the component. This is the list of allowed `types` that correspond to components: `[textbox, textarea, dropdown, dropzone, button, quill, checkbox, toggle]`',
table: {
category: 'HTML Attributes',
type: {
summary: 'object',
detail: JSON.stringify(
[
{
type: 'string',
attributes: 'object',
content: 'string',
}
],
null,
2
),
},
},
},
rowName: {
control: 'text',
description: 'Base title of a new row. Whenever a new row is added, the title will be "rowName" #number',
table: {
category: 'HTML Attributes',
type: 'text',
},
},
addRowButtonText: {
control: 'text',
description: 'Text display for the add row button',
table: {
category: 'HTML Attributes',
type: 'string',
},
},
removeRowButtonText: {
control: 'text',
description: 'Text display for remove row button',
table: {
category: 'HTML Attributes',
type: 'string',
},
},
rowLimit: {
control: 'number',
description: 'Number determining max amount of rows',
table: {
category: 'HTML Attributes',
type: 'number',
},
},
},
};
const defaultArgs = {
repeatedFields: [
{
type: 'toggle',
attributes: {
name: "toggle",
description: "sample toggle",
onText: "ON",
offText:"OFF",
label: 'Toggle',
required: true
}
},
{
type: 'checkbox',
attributes: {
name: "check",
description: "sample checkbox",
onText: "ON",
offText:"OFF",
label: 'Checkbox',
required: true
}
},
{
type: 'dropdown',
attributes: {
name: "dropdown",
description: "sample text",
label: 'dropdown',
required: true,
},
content: '<option value="hello">Hello</option><option value="goodbye">Goodbye</option>'
}
]
};
const Template: Story<ArgTypes> = ({ label = 'My Repeater', repeatedFields = defaultArgs.repeatedFields}: ArgTypes) => html`
<skhemata-form>
<skhemata-form-repeat
.label=${label}
rowName="Title Example"
addRowButtonText="Add Example"
removeRowButtonText="Remove example"
rowLimit="3"
.repeatedFields=${repeatedFields}
>
</skhemata-form-repeat>
</skhemata-form>
`;
export const Example = Template.bind({});
Example.args = {
label: 'My Repeater',
repeatedFields: [
{
type: 'toggle',
attributes: {
name: "toggle",
description: "sample toggle",
onText: "ON",
offText:"OFF",
label: 'Toggle',
required: true
}
},
{
type: 'checkbox',
attributes: {
name: "check",
description: "sample checkbox",
onText: "ON",
offText:"OFF",
label: 'Checkbox',
required: true
}
},
{
type: 'dropdown',
attributes: {
name: "dropdown",
description: "sample text",
label: 'dropdown',
required: true,
},
content: '<option value="hello">Hello</option><option value="goodbye">Goodbye</option>'
}
]
};
Example.parameters = {
docs: {
source: {
code: `
<skhemata-form>
<skhemata-form-repeat
label="${Example.args.label}"
rowName="Title Example"
addRowButtonText="Add Example"
removeRowButtonText="Remove example"
rowLimit="3"
.repeatedFields=${Example.args.repeatedFields}
>
</skhemata-form-repeat>
</skhemata-form>
`,
},
},
};