MCPcopy Index your code
hub / github.com/14nrv/vue-form-json

github.com/14nrv/vue-form-json @v3.6.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.6.0 ↗ · + Follow
27 symbols 118 edges 22 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

NPM Version Build Status Test Coverage Maintainability semantic-release

vue-form-json

Edit vue-form-json-demo

Generate a vue form with validation from an array

All fields are required and input text by default. Once submitted, an event 'formSubmitted' is emitted on $root with the formName and all values.

Features

  • Generate a form from an array (formFields prop)
  • Bulma classes by default (that can be overwritten)
  • Responsive
  • Fields on multiples columns js const formFields = [ [{ label: 'label one' }, { label: 'label two' }] ]
  • Pre filled values js const formFields = [{ label: 'the label', value: 'the value' }]
  • Simple rules validation js const formFields = [{ label: 'the label', rules: { is_not: 'label' } }]
  • Cross field validation (see password confirmation example in the CodeSandbox link)
  • Custom attr (class, data-*, ...) on .field & real fields (input, textarea...) js const formFields = [{ attr: { class: 'classOnInput' }, alternativeLabel: 'an alternative label text that will be displayed', field: { attr: { class: 'classOnFieldClassName' } }, label: 'the label' }]
  • Help text (putted right after the label, see the age field on the CodeSandbox link) js const formFields = [{ label: 'label one', help: 'help text content' }]
  • Scoped slot support everywhere inside the form js const formFields = [{ slot: 'nameOfTheSlot', props: { foo: 'bar' } }]
  • Custom fields support
  • for a simple field (with is attribute + components prop) js const formFields = [{ is: 'CustomFieldName' }]

  • inside a scoped slot for more flexibility html <template #nameOfTheSlot="{ foo, updateFormValues, isFormReseted }">

  • Html support ```js const formFields = [{ html: '

Your html content

' }] ```

Install

yarn add vue-form-json
# Optional: bulma @fortawesome/fontawesome-free (fontawesome is not needed if hasIcon prop is false)

Usage

// main.js
import { extend, ValidationProvider } from 'vee-validate'
import * as rules from 'vee-validate/dist/rules'
import { messages } from 'vee-validate/dist/locale/en.json'
// ...
Vue.component('ValidationProvider', ValidationProvider)

Object.keys(rules).forEach(rule => {
  extend(rule, {
    ...rules[rule],
    message: messages[rule]
  })
})
// ...
<template lang="pug">
  #app.section
    form-json(:btnReset="{value: 'Reset'}",
              :btnSubmit="{value: 'Submit'}",
              :formFields="jsonFields",
              formName="userProfil")
      template(#slotNameAddedInJsonFields="{ prop }")
        p Your slot content and {{ prop }}
</template>

<script>
  // import 'bulma/css/bulma.min.css'
  // import '@fortawesome/fontawesome-free/css/all.min.css'
  // import 'vue-form-json/dist/vue-form-json.css'

  import formJson from 'vue-form-json'
  import jsonFields from './../assets/fields'

  export default {
    name: 'app',
    components: {
      formJson
    },
    mounted () {
      this.$root.$on('formSubmitted', values => console.log(values))
    },
    computed: {
      jsonFields: () => jsonFields
    }
  }
</script>

Props available on formJson component

props: {
  formFields: {
    type: Array,
    required: true
  },
  formName: {
    type: String,
    required: true
  },
  hasAsteriskJustAfterLabel: {
    type: Boolean,
    default: false
  },
  mandatoryAsteriskLegend: {
    type: String,
    default: '* field required'
  },
  btnSubmit: {
    type: Object,
    default: () => ({})
  },
  btnReset: {
    type: Object,
    default: () => ({})
  },
  resetFormAfterSubmit: {
    type: Boolean,
    default: false
  },
  defaultMin: {
    type: [Boolean, Number],
    default: false
  },
  defaultMax: {
    type: [Boolean, Number],
    default: false
  },
  defaultMinValue: {
    type: [Boolean, Number],
    default: 0
  },
  defaultMaxValue: {
    type: [Boolean, Number],
    default: false
  },
  hasIcon: {
    type: Boolean,
    default: true
  },
  camelizePayloadKeys: {
    type: Boolean,
    default: false
  },
  components: {
    type: Object,
    default: () => ({})
  },
}

Core symbols most depended-on inside this repo

flush
called by 23
src/helpers/test.js
slug
called by 12
src/helpers/index.js
extendRules
called by 6
src/helpers/test.js
camelizeKeys
called by 1
src/helpers/index.js
updateValue
called by 0
src/mixins/fields.js
created
called by 0
src/mixins/fields.js

Shape

Function 27

Languages

TypeScript100%

Modules by API surface

src/components/Form/Form.spec.js9 symbols
src/components/Form/FormComponent.spec.js5 symbols
src/mixins/fields.js2 symbols
src/helpers/test.js2 symbols
src/helpers/index.js2 symbols
src/components/Form/FormSlot.spec.js2 symbols
src/components/Form/FormError.spec.js2 symbols
src/components/Form/FormRules.spec.js1 symbols
src/components/Fields/Select.spec.js1 symbols
src/components/Fields/Label.spec.js1 symbols

For agents

$ claude mcp add vue-form-json \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page