You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
5.7 KiB

3 years ago
<app-task-form>
3 years ago
<app-sidebar form-id="app-task-form" open={ state.isOpen } close={ () => { handleClose() } } loading={ state.isLoading }>
3 years ago
3 years ago
<!-- slot:title -->
3 years ago
<span slot="title">
<virtual if={ state.current.name }>
Edit Task { state.current.name }
</virtual>
<virtual if={ !state.current.name }>
New Task
</virtual>
</span>
3 years ago
<!-- slot:header -->
3 years ago
<form id="app-task-form" class="form" slot="form" onsubmit={ (event) => { state.isLoading = true; update(); state.validator.submit(event) } }>
3 years ago
<div class="field-group">
<label class="field-label">
name
3 years ago
<input class="field-text" name="name" type="text" value="{ state.current.name }" />
3 years ago
<field-error name="name"></field-error>
</label>
</div>
<div class="field-group">
<label class="field-label">
url
3 years ago
<input class="field-text" name="url" type="text" value="{ state.current.url }" />
3 years ago
<field-error name="url"></field-error>
</label>
</div>
<div class="field-group">
<label class="field-label">
requestHandler
3 years ago
<select class="field-choice" name="requestHandler">
3 years ago
<option></option>
3 years ago
<option value="{ handler }" each={ handler in state.requestHandlers } selected={ action === state.current.requestHandler }></option>
3 years ago
</select>
3 years ago
<field-error name="requestHandler"></field-error>
</label>
</div>
<div class="field-group">
<label class="field-label">
action
<select class="field-choice" name="action">
<option></option>
3 years ago
<option value="{ action }" each={ action in state.actions } selected={ action === state.current.action }></option>
3 years ago
</select>
<field-error name="action"></field-error>
3 years ago
</label>
</div>
3 years ago
<div class="field-group">
<label class="field-label">
options
<input type="text" name="options" class="field-text" value="{ JSON.stringify(state.current.options) }" />
<field-error name="options"></field-error>
</label>
</div>
<div class="field-group">
<label class="field-label">
timer
<input type="text" name="timer" class="field-text" value="{ state.current.timer }" />
<field-error name="timer"></field-error>
</label>
</div>
3 years ago
</form>
</app-sidebar>
<script>
3 years ago
import * as riot from 'riot'
3 years ago
import FormValidator from '@tiny-components/validator/src/formValidator.js'
3 years ago
// stores
3 years ago
import taskFormStore from './../stores/taskForm.js'
3 years ago
import notificationStore from './../stores/notification'
// mixins
3 years ago
import sidebar from './../mixins/sidebar.js'
3 years ago
3 years ago
import FieldError from '@tiny-components/validator/src/fieldError.riot'
3 years ago
riot.register('field-error', FieldError)
/**
*
*
*/
3 years ago
export default () => {
return {
3 years ago
...sidebar, // adding basic funtion for sidebar
3 years ago
state: {
requestHandlers: [],
validator: undefined,
current: {
3 years ago
name: '',
url: '',
requestHandler: '',
action: '',
options: {
3 years ago
3 years ago
},
timer: ''
3 years ago
}
},
/**
*
*
*/
onMounted()
{
// creating formValidator
this.state.validator = new FormValidator(this.$('.form'), {
'name': {
'presence': true
},
'url': {
'presence': true
},
'requestHandler': {
'presence': true
3 years ago
},
'action': {
'presence': true
},
'timer': {
'presence': true
3 years ago
}
})
// adding on success
this.state.validator.onSuccess((event, data) => {
this.handleSuccess(event, data)
})
3 years ago
// adding on success
this.state.validator.onError((event, data) => {
this.state.isLoading = false
notificationStore.danger('Error! Check your input!')
this.update()
})
3 years ago
taskFormStore.on('open', (data) => {
this.state.isOpen = true
this.update()
})
},
/**
*
*
*
*/
handleSuccess(event, data)
{
}
}
3 years ago
}
</script>
</app-task-form>