@skhemata/skhemata-form
Version:
Skhemata Form Web Component. This web component can be used as base web component when working with forms and inputs.
169 lines (118 loc) • 4.37 kB
Markdown
Skhemata Form Web Component. This web component can be used as base web component when working with forms and inputs.
```bash
npm i @skhemata/skhemata-form
```
```js
import { LitElement, html } from 'lit-element';
import { ScopedElementsMixin } from '@open-wc/scoped-elements';
import {
SkhemataForm,
SkhemataFormTextbox,
SkhemataFormTextarea,
SkhemataFormDropdown,
SkhemataFormCheckbox,
SkhemataFormButton
} from '@skhemata/skhemata-form';
export class MyForm extends ScopedElementsMixin(LitElement){
static get scopedElements() {
return {
'skhemata-form': SkhemataForm,
'skhemata-form-textbox': SkhemataFormTextbox,
'skhemata-form-textarea': SkhemataFormTextarea,
'skhemata-form-dropdown': SkhemataFormDropdown,
'skhemata-form-checkbox': SkhemataFormCheckbox,
'skhemata-form-button': SkhemataFormButton,
};
}
handleSubmit(event){
const formData = event.detail.data;
console.log(formData);
}
handleChange(event){
const formData = event.detail.data;
console.log(formData)
}
handleInputChange(event){
const inputName = event.detail.name;
const inputValue = evenent.detail.value;
console.log(inputName);
console.log(inputValue);
}
render(){
return html`
<skhemata-form @submit=${this.handleSubmit} @change=${this.handleChange}>
<!-- form components -->
<skhemata-form-textbox
label="Text Box"
name="mytextbox"
@change=${this.handleInputChange}
>
</skhemata-form-textbox>
<skhemata-form-textarea label="Text Area" name="mytextarea"></skhemata-form-textarea>
<skhemata-form-dropdown label="Dropdown" name="mydropdown" placeholder="Select One" required>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</skhemata-form-dropdown>
<skhemata-form-checkbox
label="checkbox"
name="mycheckbox"
required
>
Sample checkbox
</skhemata-form-checkbox>
<skhemata-form-autocomplete
label="Auto Complete"
name="autocomplete"
api="https://my.api.com/cities"
maplabel="name"
mapvalue="id">
</skhemata-form-autocomplete>
<skhemata-form-button type="submit" title="Submit"></skhemata-form-button>
</skhemata-form> `
)
}
}
```
Each component has the properties `required`, `error-message`, `label`, `name`, `horizontal`, `description` and `placeholder`. Each form input also fires a `change` event, that includes the data `event.detail.name` and `event.detail.value`. Additionally these form components have the following unique properties:
`minlength`
Number, minimum length of input. Default is none.
`maxlength`
Number, maximum length of input. Default is none.
`submit-on-enter`
Boolean, fire a submit event when enter is pressed. Default is `false`
`minlength`
Number, minimum length of input. Default is none.
`maxlength`
Number, maximum length of input. Default is none.
`submit-on-enter`
Boolean, fire a submit event when enter is pressed. Default is `false`
`rows`
Default number of rows of the textarea. Default is `4`
`submit-on-select`
Boolean, fire a submit event when an item is selected. Default is `false`
`api`
String, the API endpoint to retrieve data from, expects an array of objects.
`maplabel`
The value to map to the label of the option element from the API data
`mapvalue`
The value to map value of the option element from the API data
`type`
String, sets behaviour of button. `type="submit"` will trigger the form submit event on click. Default is none.
For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.
If you customize the configuration a lot, you can consider moving them to individual files.
```bash
npm start
```
To run a local development server that serves the basic demo located in `demo/index.html`
Skhemata Form is distributed under [Commercial Skhemata Licence Agreement v1](https://www.skhemata.com/license/csla-1.0) (CSLA-1.0). For license terms, see LICENSE file