Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yokra9/ui-schema-generator

helper library to generate uiSchema for vue-form-json-schema
https://github.com/yokra9/ui-schema-generator

vue-form-json-schema vuejs

Last synced: 2 months ago
JSON representation

helper library to generate uiSchema for vue-form-json-schema

Awesome Lists containing this project

README

        

# ui-schema-generator

> [!CAUTION]
> [Vue Form JSON Schema は Vue 3 でサポートされていません](https://github.com/jarvelov/vue-form-json-schema/issues/81)。 Vue 2 は 2023/12/31 に End of Life (EOL) に達しました。

[![Unit tests](https://github.com/yokra9/ui-schema-generator/actions/workflows/Jest.yml/badge.svg)](https://github.com/yokra9/ui-schema-generator/actions/workflows/Jest.yml)
[![End-to-end tests](https://github.com/yokra9/ui-schema-generator/actions/workflows/E2E.yml/badge.svg)](https://github.com/yokra9/ui-schema-generator/actions/workflows/E2E.yml)
[![npm version](https://badge.fury.io/js/ui-schema-generator.svg)](https://badge.fury.io/js/ui-schema-generator)
[![npm](https://img.shields.io/npm/dt/ui-schema-generator)](https://badge.fury.io/js/ui-schema-generator)

[Vue Form JSON Schema](https://github.com/jarvelov/vue-form-json-schema) を利用する際、uiSchema 定義を手助けするライブラリです。モデル名を配列で指定することで、uiSchema をまとめて生成することができます。

## デモ

## インターフェース

GitHub Pages を参照

## 利用例

```vue





import VueFormJsonSchema from "vue-form-json-schema";
import generator from "ui-schema-generator";

import jsonSchema from "./schema.json";
const Schema = jsonSchema.definitions.Schema;

import "vuetify/dist/vuetify.min.css";
import Vue from "vue"
import vuetify from "vuetify"
Vue.use(vuetify)

export default {
components: {
VueFormJsonSchema,
},
data() {
return {
model: {},
options: {
showValidationErrors: true,
},
schema: Schema,
uiSchema: new generator(Schema)
// データオブジェクトのデフォルト値をセット
.setDefaultFieldOptions({
attrs: {
outlined: true,
// 値として function(model) を取ることもできる。
label: (model) => model || "",
hint: (model) =>
model ? Schema.properties[model].description : "",
},
class: "mt-5",
})
// エラーオプションのデフォルト値をセット
.setDefaultErrorOptions({
attrs: {
error: true,
},
})
// uiSchema を生成
.generate(
"div", // HTML タグ名
null, // 要素と紐付けるモデル。未定義の場合は紐付けない
// データオブジェクト
{
style: { backgroundColor: "#043c78", color: "white" },
class: "pl-1",
},
// 子要素。UiSchemaGenerator のネストも可能
new generator(Schema)
.generate("h1", [], { domProps: { innerHTML: "Header" } })
.toArray()
)
// 同じような uiSchema はまとめて生成することも可能
.generate(
"v-text-field",
["firstName", "familyName", "address", "country"],
{
on: "input",
attrs: {
clearable: true,
},
}
)
// 選択肢には Enum を指定すると便利
.generate("v-select", ["country"], {
on: "change",
attrs: {
items: Schema.properties.country.enum,
},
})
// グループ化されているコンポーネントの場合
.generate(
"v-radio-group",
["country"],
{
on: "change",
},
// 子要素でも準備が必要
new generator(Schema)
.setDefaultFieldOptions({
attrs: {
// indexにはuiSchemaの先頭から何要素であるかが格納される
label: (_model, index) =>
Schema.properties["country"].enum[index],
value: (_model, index) =>
Schema.properties["country"].enum[index],
},
})
.generate("v-radio", [])
.generate("v-radio", [])
.toArray()
)
.toArray(),
};
},
};
```

`/demo/` 内のコードも参考にしてください。