diff --git a/zero.Web/App/Components/Forms/form.vue b/zero.Web/App/Components/Forms/form.vue index e1caf228..ee3dabdc 100644 --- a/zero.Web/App/Components/Forms/form.vue +++ b/zero.Web/App/Components/Forms/form.vue @@ -1,6 +1,8 @@ - + + + @@ -13,14 +15,6 @@ name: 'uiForm', props: { - submit: { - type: Function, - default: () => { } - }, - mapState: { - type: Boolean, - default: true - }, errorComponents: { type: Array, default: () => [ 'uiError' ] @@ -29,6 +23,8 @@ data: () => ({ dirty: false, + loadingState: 'default', + loadingError: null, state: 'default', errors: [], slotProps: { @@ -46,6 +42,7 @@ created() { this.slotProps.state = this.state; + this.$emit('load', this); }, methods: { @@ -72,7 +69,36 @@ } }, - // handles a promise + // loads data on creation of the form + load(promise) + { + this.loadingState = 'loading'; + + return new Promise((resolve, reject) => + { + promise + .then( + response => + { + this.loadingState = 'default'; + resolve(response); + }, + (error) => + { + this.loadingState = 'error'; + this.loadingError = error; + reject(error); + } + ) + .catch(exception => + { + this.loadingState = 'error'; + this.loadingError = error; + }); + }); + }, + + // handles a promise as result of the form submission handle(promise) { this.setState('loading'); @@ -109,7 +135,7 @@ // submits the form onSubmit(e) { - this.submit(this, e); + this.$emit('submit', this, e); }, @@ -221,4 +247,11 @@ } } } - \ No newline at end of file + + + \ No newline at end of file diff --git a/zero.Web/App/Pages/settings/user.vue b/zero.Web/App/Pages/settings/user.vue index 90a93dbc..f52ea6ac 100644 --- a/zero.Web/App/Pages/settings/user.vue +++ b/zero.Web/App/Pages/settings/user.vue @@ -1,5 +1,5 @@ - + @@ -49,6 +49,7 @@ name: 'app-settings-user', data: () => ({ + loading: true, page: true, actions: [], model: { @@ -59,12 +60,6 @@ created() { - UsersApi.getById(this.id).then(response => - { - console.info(response); - this.model = response; - }); - this.actions.push({ name: 'Disable', icon: 'fth-minus-circle' @@ -93,6 +88,15 @@ this.$router.go(-1); }, + onLoad(form) + { + form.load(UsersApi.getById(this.id)).then(response => + { + console.info(response); + this.model = response; + }); + }, + onSubmit(form) { form.handle(new Promise(resolve => diff --git a/zero.Web/App/components/forms/error-view.vue b/zero.Web/App/components/forms/error-view.vue new file mode 100644 index 00000000..17613250 --- /dev/null +++ b/zero.Web/App/components/forms/error-view.vue @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + # + Name + Path + + {{index + 1}}. + {{route.name}} + {{route.path}} + + + + + + + + + + \ No newline at end of file diff --git a/zero.Web/App/pages/login/login.vue b/zero.Web/App/pages/login/login.vue index d3c4e923..5f8b4950 100644 --- a/zero.Web/App/pages/login/login.vue +++ b/zero.Web/App/pages/login/login.vue @@ -1,7 +1,7 @@ - + zero - + diff --git a/zero.Web/App/pages/notfound.vue b/zero.Web/App/pages/notfound.vue index 9a7a16d3..63cb6213 100644 --- a/zero.Web/App/pages/notfound.vue +++ b/zero.Web/App/pages/notfound.vue @@ -1,16 +1,16 @@ - - - - Not found + + + + Not found The requested resource could not be found ({{path}}) - + - + # Name Path @@ -86,7 +86,7 @@
+ + +
- Not found +
+ Not found The requested resource could not be found ({{path}})