@afeefa/vue-app 0.0.115 → 0.0.117
Sign up to get free protection for your applications and to get access to all the features.
- package/.afeefa/package/release/version.txt +1 -1
- package/package.json +1 -1
- package/src/api-resources/ListAction.js +12 -0
- package/src/components/ARadioGroup.vue +9 -0
- package/src/components/ASelect.vue +1 -1
- package/src/components/form/fields/FormFieldRadioGroup.vue +1 -3
- package/src/components/form/fields/FormFieldTime.vue +51 -0
- package/src/components/index.js +2 -0
- package/src-admin/components/App.vue +2 -2
- package/src-admin/components/routes/DataRouteMixin.js +6 -3
- package/src-admin/plugins/AuthPlugin.js +3 -1
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.117
|
package/package.json
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
import { NextRouteFilterSource } from '@a-vue/components/list/NextRouteFilterSource'
|
2
|
+
import { AlertEvent } from '@a-vue/events'
|
3
|
+
import { eventBus } from '@a-vue/plugins/event-bus/EventBus'
|
2
4
|
import { ListViewModel } from '@afeefa/api-resources-client'
|
3
5
|
|
4
6
|
import { ApiAction } from './ApiAction'
|
@@ -24,4 +26,14 @@ export class ListAction extends ApiAction {
|
|
24
26
|
|
25
27
|
return ListAction.fromRequest(request)
|
26
28
|
}
|
29
|
+
|
30
|
+
processError (result) {
|
31
|
+
if (this._showError) {
|
32
|
+
eventBus.dispatch(new AlertEvent(AlertEvent.ERROR, {
|
33
|
+
headline: 'Die Daten konntent nicht geladen werden.',
|
34
|
+
message: result.message,
|
35
|
+
detail: result.detail
|
36
|
+
}))
|
37
|
+
}
|
38
|
+
}
|
27
39
|
}
|
@@ -3,6 +3,7 @@
|
|
3
3
|
ref="radios"
|
4
4
|
:rules="validationRules"
|
5
5
|
:class="{hasLabel: $has.label}"
|
6
|
+
:valueComparator="compareValues"
|
6
7
|
v-bind="$attrs"
|
7
8
|
@change="$emit('input', $event)"
|
8
9
|
>
|
@@ -22,6 +23,7 @@
|
|
22
23
|
|
23
24
|
<script>
|
24
25
|
import { Component, Vue, Watch } from '@a-vue'
|
26
|
+
import { Model } from '@afeefa/api-resources-client'
|
25
27
|
|
26
28
|
@Component({
|
27
29
|
props: ['options', 'validator']
|
@@ -56,6 +58,13 @@ export default class ARadioGroup extends Vue {
|
|
56
58
|
}
|
57
59
|
}
|
58
60
|
|
61
|
+
compareValues (a, b) {
|
62
|
+
if (a instanceof Model && b instanceof Model) {
|
63
|
+
return a.equals(b)
|
64
|
+
}
|
65
|
+
return JSON.stringify(a) === JSON.stringify(b)
|
66
|
+
}
|
67
|
+
|
59
68
|
get validationRules () {
|
60
69
|
const label = this.$attrs.label
|
61
70
|
return (this.validator && this.validator.getRules(label)) || []
|
@@ -18,9 +18,7 @@ export default class FormFieldRadioGroup extends Mixins(FormFieldMixin) {
|
|
18
18
|
options = null
|
19
19
|
|
20
20
|
created () {
|
21
|
-
if (this.fieldHasOptionsRequest()) {
|
22
|
-
this.options = this.getSelectOptions()
|
23
|
-
} else if (this.fieldHasOptions()) {
|
21
|
+
if (this.fieldHasOptionsRequest() || this.fieldHasOptions()) {
|
24
22
|
this.options = this.getSelectOptions()
|
25
23
|
}
|
26
24
|
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<template>
|
2
|
+
<v-menu
|
3
|
+
ref="menu"
|
4
|
+
v-model="menu"
|
5
|
+
:close-on-content-click="false"
|
6
|
+
:nudge-right="40"
|
7
|
+
:return-value.sync="model[name]"
|
8
|
+
transition="scale-transition"
|
9
|
+
offset-y
|
10
|
+
max-width="290px"
|
11
|
+
min-width="290px"
|
12
|
+
>
|
13
|
+
<template #activator="{ on, attrs }">
|
14
|
+
<v-text-field
|
15
|
+
v-model="model[name]"
|
16
|
+
:label="label || name"
|
17
|
+
prepend-icon="mdi-clock-time-four-outline"
|
18
|
+
readonly
|
19
|
+
dense
|
20
|
+
outlined
|
21
|
+
v-bind="attrs"
|
22
|
+
v-on="on"
|
23
|
+
/>
|
24
|
+
</template>
|
25
|
+
<v-time-picker
|
26
|
+
v-if="menu"
|
27
|
+
ref="timePicker"
|
28
|
+
v-model="model[name]"
|
29
|
+
:validator="validator"
|
30
|
+
v-bind="$attrs"
|
31
|
+
full-width
|
32
|
+
scrollable
|
33
|
+
format="24hr"
|
34
|
+
v-on="$listeners"
|
35
|
+
@click:minute="$refs.menu.save(model[name])"
|
36
|
+
/>
|
37
|
+
</v-menu>
|
38
|
+
</template>
|
39
|
+
|
40
|
+
<script>
|
41
|
+
import { Component, Mixins } from '@a-vue'
|
42
|
+
import { FormFieldMixin } from '../FormFieldMixin'
|
43
|
+
|
44
|
+
@Component
|
45
|
+
export default class FormFieldTime extends Mixins(FormFieldMixin) {
|
46
|
+
menu = false
|
47
|
+
validate () {
|
48
|
+
this.$refs.timePicker.validate()
|
49
|
+
}
|
50
|
+
}
|
51
|
+
</script>
|
package/src/components/index.js
CHANGED
@@ -4,6 +4,7 @@ import EditForm from './form/EditForm'
|
|
4
4
|
import EditModal from './form/EditModal'
|
5
5
|
import FormFieldCheckbox from './form/fields/FormFieldCheckbox'
|
6
6
|
import FormFieldDate from './form/fields/FormFieldDate'
|
7
|
+
import FormFieldTime from './form/fields/FormFieldTime'
|
7
8
|
import FormFieldRadioGroup from './form/fields/FormFieldRadioGroup'
|
8
9
|
import FormFieldRichTextArea from './form/fields/FormFieldRichTextArea'
|
9
10
|
import FormFieldSearchSelect from './form/fields/FormFieldSearchSelect'
|
@@ -25,6 +26,7 @@ Vue.component('FormFieldRichTextArea', FormFieldRichTextArea)
|
|
25
26
|
Vue.component('FormFieldRadioGroup', FormFieldRadioGroup)
|
26
27
|
Vue.component('FormFieldCheckbox', FormFieldCheckbox)
|
27
28
|
Vue.component('FormFieldDate', FormFieldDate)
|
29
|
+
Vue.component('FormFieldTime', FormFieldTime)
|
28
30
|
Vue.component('FormFieldSearchSelect', FormFieldSearchSelect)
|
29
31
|
Vue.component('FormFieldSelect', FormFieldSelect)
|
30
32
|
Vue.component('FormFieldSelect2', FormFieldSelect2)
|
@@ -47,7 +47,6 @@ export class DataRouteMixin extends Vue {
|
|
47
47
|
})
|
48
48
|
}
|
49
49
|
|
50
|
-
|
51
50
|
// watches (if defined) route idKey and reloads data if changed
|
52
51
|
@Watch('drm_id')
|
53
52
|
async drm_routeParamsChanged () {
|
@@ -68,14 +67,18 @@ export class DataRouteMixin extends Vue {
|
|
68
67
|
}
|
69
68
|
|
70
69
|
drm_onLoad (result) {
|
71
|
-
|
70
|
+
const wrapped = this.$children.find(c => c.constructor.drm_getActions)
|
71
|
+
onLoadCallback(wrapped || this, result)
|
72
72
|
lastResult = result
|
73
73
|
}
|
74
74
|
|
75
75
|
created () {
|
76
76
|
// hmr reload creates vm but not triggers route enter
|
77
77
|
if (!routerHookCalled) {
|
78
|
-
|
78
|
+
this.$nextTick(() => { // next tick bc c.constructor else not available
|
79
|
+
const wrapped = this.$children.find(c => c.constructor.drm_getActions)
|
80
|
+
onLoadCallback(wrapped || this, lastResult)
|
81
|
+
})
|
79
82
|
}
|
80
83
|
}
|
81
84
|
}
|
@@ -10,7 +10,9 @@ class AuthPlugin {
|
|
10
10
|
|
11
11
|
hasRole: name => authService.currentAccountHasRole(name),
|
12
12
|
|
13
|
-
roles
|
13
|
+
get roles () {
|
14
|
+
return authService.getCurrentAccountRoles()
|
15
|
+
},
|
14
16
|
|
15
17
|
logout: () => authService.forwardToLogoutEndpoint()
|
16
18
|
}
|