@afeefa/vue-app 0.0.174 → 0.0.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.afeefa/package/release/version.txt +1 -1
- package/package.json +1 -1
- package/src/components/AInfo.vue +4 -0
- package/src-admin/components/DetailOrInfo.vue +33 -0
- package/src-admin/components/FlyingContextContainer.vue +21 -1
- package/src-admin/components/InformationBar.vue +2 -2
- package/src-admin/components/StickyHeader.vue +1 -0
- package/src-admin/components/detail/DetailProperty.vue +1 -1
- package/src-admin/components/index.js +9 -7
- package/src-admin/components/list/ListView.vue +1 -1
- package/src-admin/components/sidebar/InformationBarItem.vue +55 -24
- package/src-admin/components/sidebar/SidebarService.js +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.175
|
package/package.json
CHANGED
package/src/components/AInfo.vue
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<information-bar-item
|
|
3
|
+
v-if="sidebar"
|
|
4
|
+
v-bind="$attrs"
|
|
5
|
+
>
|
|
6
|
+
<template #actionButton>
|
|
7
|
+
<slot name="actionButton" />
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<slot />
|
|
11
|
+
</information-bar-item>
|
|
12
|
+
|
|
13
|
+
<detail-property
|
|
14
|
+
v-else
|
|
15
|
+
v-bind="$attrs"
|
|
16
|
+
>
|
|
17
|
+
<template #actionButton>
|
|
18
|
+
<slot name="actionButton" />
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<slot />
|
|
22
|
+
</detail-property>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<script>
|
|
26
|
+
import { Component, Vue } from '@a-vue'
|
|
27
|
+
|
|
28
|
+
@Component({
|
|
29
|
+
props: [{sidebar: false}]
|
|
30
|
+
})
|
|
31
|
+
export default class DetailOrInfo extends Vue {
|
|
32
|
+
}
|
|
33
|
+
</script>
|
|
@@ -46,6 +46,25 @@ export default class FlyingContextContainer extends Vue {
|
|
|
46
46
|
sizeWatcher.observe(this.getChildrenContainer())
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* park sidebar children and attach - only for use with HMR which would remove all children on destroy 234567890
|
|
51
|
+
*/
|
|
52
|
+
destroyed () {
|
|
53
|
+
function moveChildren (from, to) {
|
|
54
|
+
for (const child of from.children) {
|
|
55
|
+
to.appendChild(child)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const elTmp = document.createElement('div')
|
|
60
|
+
document.body.appendChild(elTmp)
|
|
61
|
+
moveChildren(this.getChildrenContainer(), elTmp)
|
|
62
|
+
|
|
63
|
+
this.$nextTick(() => {
|
|
64
|
+
moveChildren(elTmp, document.querySelector('#flyingContextContainer__children'))
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
49
68
|
getScrollbarWidth () {
|
|
50
69
|
const el = document.documentElement
|
|
51
70
|
const overflowY = getComputedStyle(el)['overflow-y']
|
|
@@ -157,7 +176,8 @@ export default class FlyingContextContainer extends Vue {
|
|
|
157
176
|
transition: left .2s;
|
|
158
177
|
padding: 2rem;
|
|
159
178
|
overflow-y: auto;
|
|
160
|
-
box-shadow: 0 0
|
|
179
|
+
box-shadow: 0 0 17px #00000033;
|
|
180
|
+
border-left: 1px solid #DDDDDD;
|
|
161
181
|
|
|
162
182
|
&:not(.visible) {
|
|
163
183
|
left: 101vw;
|
|
@@ -53,13 +53,12 @@ export default class InformationBar extends Vue {
|
|
|
53
53
|
this.mutationWatcher = new MutationObserver(this.domChanged)
|
|
54
54
|
this.mutationWatcher.observe(this.$el.querySelector('#information-bar__children > .top'), { childList: true })
|
|
55
55
|
this.mutationWatcher.observe(this.$el.querySelector('#information-bar__children > .bottom'), { childList: true })
|
|
56
|
+
|
|
56
57
|
this.domChanged()
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
/**
|
|
60
61
|
* park sidebar children and attach - only for use with HMR which would remove all children on destroy 234567890
|
|
61
|
-
*
|
|
62
|
-
* s
|
|
63
62
|
*/
|
|
64
63
|
destroyed () {
|
|
65
64
|
function moveChildren (from, to) {
|
|
@@ -130,6 +129,7 @@ export default class InformationBar extends Vue {
|
|
|
130
129
|
flex: 0 0 300px;
|
|
131
130
|
width: 300px;
|
|
132
131
|
height: 100vh;
|
|
132
|
+
overflow-x: hidden;
|
|
133
133
|
overflow-y: auto;
|
|
134
134
|
|
|
135
135
|
border-left: 1px solid rgba(0, 0, 0, .12);
|
|
@@ -63,7 +63,6 @@ export default class DetailProperty extends Vue {
|
|
|
63
63
|
flex-wrap: nowrap;
|
|
64
64
|
align-items: center;
|
|
65
65
|
height: 40px;
|
|
66
|
-
margin-bottom: .5rem;
|
|
67
66
|
|
|
68
67
|
> .v-icon {
|
|
69
68
|
flex: 0 0 3rem;
|
|
@@ -84,6 +83,7 @@ export default class DetailProperty extends Vue {
|
|
|
84
83
|
}
|
|
85
84
|
|
|
86
85
|
.content {
|
|
86
|
+
margin-top: .5rem;
|
|
87
87
|
padding-left: 4.5rem;
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -2,17 +2,18 @@ import Vue from 'vue'
|
|
|
2
2
|
|
|
3
3
|
import AppBarButton from './app/AppBarButton'
|
|
4
4
|
import AppBarTitle from './app/AppBarTitle'
|
|
5
|
-
import CollapsibleSection from './CollapsibleSection
|
|
5
|
+
import CollapsibleSection from './CollapsibleSection'
|
|
6
6
|
import DetailColumn from './detail/DetailColumn'
|
|
7
7
|
import DetailContent from './detail/DetailContent'
|
|
8
8
|
import DetailMeta from './detail/DetailMeta'
|
|
9
9
|
import DetailProperty from './detail/DetailProperty'
|
|
10
10
|
import DetailTitle from './detail/DetailTitle'
|
|
11
|
-
import
|
|
11
|
+
import DetailOrInfo from './DetailOrInfo'
|
|
12
|
+
import FlyingContext from './FlyingContext'
|
|
12
13
|
import EditFormButtons from './form/EditFormButtons'
|
|
13
14
|
import RemoveButton from './form/RemoveButton'
|
|
14
15
|
import RemoveDialog from './form/RemoveDialog'
|
|
15
|
-
import HSeparator from './HSeparator
|
|
16
|
+
import HSeparator from './HSeparator'
|
|
16
17
|
import ListCard from './list/ListCard'
|
|
17
18
|
import ListColumnHeader from './list/ListColumnHeader'
|
|
18
19
|
import ListContent from './list/ListContent'
|
|
@@ -22,10 +23,10 @@ import ListView from './list/ListView'
|
|
|
22
23
|
import ModelCount from './model/ModelCount'
|
|
23
24
|
import ModelIcon from './model/ModelIcon'
|
|
24
25
|
import EditPage from './pages/EditPage'
|
|
25
|
-
import InformationBarItem from './sidebar/InformationBarItem
|
|
26
|
-
import Start from './Start
|
|
27
|
-
import StickyFooter from './StickyFooter
|
|
28
|
-
import CollapseTransition from './transitions/CollapseTransition
|
|
26
|
+
import InformationBarItem from './sidebar/InformationBarItem'
|
|
27
|
+
import Start from './Start'
|
|
28
|
+
import StickyFooter from './StickyFooter'
|
|
29
|
+
import CollapseTransition from './transitions/CollapseTransition'
|
|
29
30
|
|
|
30
31
|
Vue.component('ListCard', ListCard)
|
|
31
32
|
Vue.component('ListColumnHeader', ListColumnHeader)
|
|
@@ -59,3 +60,4 @@ Vue.component('Start', Start)
|
|
|
59
60
|
Vue.component('FlyingContext', FlyingContext)
|
|
60
61
|
Vue.component('StickyFooter', StickyFooter)
|
|
61
62
|
Vue.component('InformationBarItem', InformationBarItem)
|
|
63
|
+
Vue.component('DetailOrInfo', DetailOrInfo)
|
|
@@ -4,25 +4,37 @@
|
|
|
4
4
|
:class="['item', infoItemId, {expanded, rail}]"
|
|
5
5
|
:style="{width}"
|
|
6
6
|
>
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<v-icon
|
|
12
|
-
:color="icon.color"
|
|
13
|
-
size="2rem"
|
|
7
|
+
<a-row justify-space-between>
|
|
8
|
+
<div
|
|
9
|
+
class="header"
|
|
10
|
+
@click="derail"
|
|
14
11
|
>
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
<v-icon
|
|
13
|
+
v-if="_icon"
|
|
14
|
+
:color="_icon.color"
|
|
15
|
+
size="2rem"
|
|
16
|
+
>
|
|
17
|
+
{{ _icon.icon }}
|
|
18
|
+
</v-icon>
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
<div
|
|
21
|
+
v-else
|
|
22
|
+
class="iconPlaceholder"
|
|
23
|
+
/>
|
|
20
24
|
|
|
21
|
-
<v-
|
|
22
|
-
{{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
<template v-if="!rail">
|
|
26
|
+
<label class="label">{{ label }}</label>
|
|
27
|
+
|
|
28
|
+
<v-icon class="contextButton mt-n1">
|
|
29
|
+
{{ expanded ? '$caretDownIcon' : '$caretRightIcon' }}
|
|
30
|
+
</v-icon>
|
|
31
|
+
</template>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div v-if="expanded">
|
|
35
|
+
<slot name="actionButton" />
|
|
36
|
+
</div>
|
|
37
|
+
</a-row>
|
|
26
38
|
|
|
27
39
|
<collapse-transition>
|
|
28
40
|
<div
|
|
@@ -50,6 +62,7 @@ import { SidebarEvent } from '@a-admin/events'
|
|
|
50
62
|
@Component({
|
|
51
63
|
props: [
|
|
52
64
|
'icon',
|
|
65
|
+
'iconModelType',
|
|
53
66
|
'label',
|
|
54
67
|
{
|
|
55
68
|
top: true,
|
|
@@ -63,9 +76,10 @@ export default class InformationBarItem extends Vue {
|
|
|
63
76
|
infoItemId = randomCssClass(10)
|
|
64
77
|
rail = sidebarService.informationRailed
|
|
65
78
|
expanded = !this.rail && this.open
|
|
79
|
+
isCreated = false
|
|
66
80
|
|
|
67
81
|
created () {
|
|
68
|
-
this.$events.on(SidebarEvent.STATUS,
|
|
82
|
+
this.$events.on(SidebarEvent.STATUS, this.railChanged)
|
|
69
83
|
}
|
|
70
84
|
|
|
71
85
|
mounted () {
|
|
@@ -79,18 +93,35 @@ export default class InformationBarItem extends Vue {
|
|
|
79
93
|
if (container.contains(el)) {
|
|
80
94
|
container.removeChild(el)
|
|
81
95
|
}
|
|
96
|
+
|
|
97
|
+
this.$events.off(SidebarEvent.STATUS, this.railChanged)
|
|
82
98
|
}
|
|
83
99
|
|
|
84
|
-
|
|
85
|
-
if (this.
|
|
100
|
+
get _icon () {
|
|
101
|
+
if (this.icon) {
|
|
102
|
+
return this.icon
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (this.iconModelType) {
|
|
106
|
+
const ModelClass = this.$apiResources.getModelClass(this.iconModelType)
|
|
107
|
+
return ModelClass.icon
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
railChanged ({payload: {informationRailed}}) {
|
|
112
|
+
if (this.rail === informationRailed) {
|
|
86
113
|
return
|
|
87
114
|
}
|
|
88
115
|
|
|
89
|
-
this.rail =
|
|
116
|
+
this.rail = informationRailed
|
|
90
117
|
|
|
91
|
-
if (!this.rail) {
|
|
92
|
-
this.
|
|
118
|
+
if (!this.rail) { // derailed
|
|
119
|
+
if (!this.isCreated) { // open only the first time not after subsequent derailing
|
|
120
|
+
this.expanded = this.open
|
|
121
|
+
}
|
|
93
122
|
}
|
|
123
|
+
|
|
124
|
+
this.isCreated = true
|
|
94
125
|
}
|
|
95
126
|
|
|
96
127
|
derail () {
|
|
@@ -172,7 +203,7 @@ export default class InformationBarItem extends Vue {
|
|
|
172
203
|
border-top: 2px solid #EEEEEE;
|
|
173
204
|
font-size: .9rem;
|
|
174
205
|
|
|
175
|
-
margin: .
|
|
176
|
-
padding:
|
|
206
|
+
margin: .25rem -1.5rem;
|
|
207
|
+
padding: 1rem 1.5rem;
|
|
177
208
|
}
|
|
178
209
|
</style>
|
|
@@ -65,8 +65,8 @@ class SidebarService {
|
|
|
65
65
|
|
|
66
66
|
this.information = information
|
|
67
67
|
|
|
68
|
-
if (information
|
|
69
|
-
this.informationRailed =
|
|
68
|
+
if (information) { // rail if mobile, derail if desktop
|
|
69
|
+
this.informationRailed = this.mobile
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
eventBus.dispatch(new SidebarEvent(SidebarEvent.STATUS, new SidebarState(this)))
|