@spaceone/design-system
Version:
SpaceONE Design System
132 lines (128 loc) • 3.82 kB
text/typescript
/* eslint-disable camelcase */
import PJsonSchemaForm from '@/inputs/forms/json-schema-form/PJsonSchemaForm.vue';
import PButton from '@/inputs/buttons/button/PButton.vue';
import {
toRefs, reactive,
} from '@vue/composition-api';
export default {
title: 'Inputs/Forms/Json Schema Form',
component: PJsonSchemaForm,
parameters: {
design: {
type: 'figma',
url: 'https://www.figma.com/file/wq4wSowBcADBuUrMEZLz6i/SpaceONE-Console-Design?node-id=6169%3A180989',
},
},
};
const defaultSchema = {
type: 'object',
properties: {
required_string: {
title: 'string (required, minLength=4)',
type: 'string',
default: 'default string',
minLength: 4,
},
not_required_string: {
title: 'string (not-required, placeholder)',
type: 'string',
examples: ['type string'],
},
//
required_number: {
title: 'number (required, minimum=1, maximum=3)',
type: 'number',
minimum: 1,
maximum: 3,
default: 1,
},
required_integer: {
title: 'integer (required, minimum=0, maximum=5)',
type: 'integer',
minimum: 0,
maximum: 5,
default: 1,
},
// required_array: {
// title: 'array (required)',
// type: 'array',
// },
//
// boolean_field: {
// title: 'I am boolean type',
// type: 'boolean',
// },
// required_enum_string: {
// title: 'string (required, enum)',
// type: 'string',
// enum: ['choice A', 'choice B', 'choice C'],
// },
// required_enum_number: {
// title: 'string (required, enum)',
// type: 'number',
// enum: [1, 2, 3, 4, 5],
// },
// number_array: {
// title: 'I am Array(Number) Type',
// type: 'array',
// examples: ['type number'],
// items: {
// type: 'number',
// },
// },
},
required: ['required_string', 'required_number', 'required_integer'],
};
export const jsonDefaultCase = () => ({
components: { PJsonSchemaForm, PButton },
template: `
<div style="width: 50rem">
<p-json-schema-form :model.sync="model"
:schema="schema"
:is-valid.sync="isValid"
/>
<pre>{{ model }}</pre>
</div>`,
setup(props, context) {
const state = reactive({
schema: defaultSchema,
model: {},
isValid: false,
});
return {
...toRefs(state),
};
},
});
export const customSchemaForm = () => ({
components: { PJsonSchemaForm, PButton },
template: `
<div>
<p-json-schema-form :model.sync="model"
:schema="schema"
:is-valid.sync="isValid"
:show-validation-errors="showValidationErrors"
/>
<p-button style-type="primary" @click="validate()"> Validate!</p-button>
<pre>{{ model }}</pre>
<div>
<p>is valid {{ isValid }}</p>
<p>show validation errors: {{ showValidationErrors }}</p>
</div>
</div>`,
setup() {
const state = reactive({
schema: defaultSchema,
model: {},
isValid: false,
showValidationErrors: false,
});
const validate = () => {
state.showValidationErrors = true;
};
return {
...toRefs(state),
validate,
};
},
});