Skip to content

Commit e1dc6e7

Browse files
author
Guillaume Chau
committed
feat(ui): StatusBar/LoggerView improvements
1 parent 6c2e99a commit e1dc6e7

File tree

4 files changed

+112
-17
lines changed

4 files changed

+112
-17
lines changed

packages/@vue/cli-ui/src/App.vue

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
<router-view/>
55
</div>
66

7-
<StatusBar
8-
@project="$router.push({ name: 'project-select' })"
9-
/>
7+
<StatusBar/>
108
</div>
119
</template>
1210

packages/@vue/cli-ui/src/components/LoggerView.vue

+73-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
11
<template>
22
<div class="logger-view">
3+
<div class="toolbar">
4+
<VueIcon
5+
icon="dvr"
6+
/>
7+
<div class="title">
8+
Logs
9+
</div>
10+
<VueButton
11+
class="icon-button"
12+
icon-left="delete_forever"
13+
v-tooltip="'Clear logs'"
14+
@click="clearLogs()"
15+
/>
16+
<VueIcon
17+
icon="lens"
18+
class="separator"
19+
/>
20+
<VueButton
21+
class="icon-button"
22+
icon-left="arrow_downward"
23+
v-tooltip="'Scroll to bottom'"
24+
@click="scrollToBottom()"
25+
/>
26+
<VueButton
27+
class="icon-button"
28+
icon-left="close"
29+
v-tooltip="'Close'"
30+
@click="close()"
31+
/>
32+
</div>
333
<ApolloQuery
434
ref="logs"
535
:query="require('../graphql/consoleLogs.gql')"
@@ -20,6 +50,14 @@
2050
:message="log"
2151
pre
2252
/>
53+
54+
<div
55+
v-if="!data.consoleLogs.length"
56+
class="vue-empty"
57+
>
58+
<VueIcon icon="wifi" class="large"/>
59+
<div>No logs yet</div>
60+
</div>
2361
</template>
2462
</template>
2563
</ApolloQuery>
@@ -29,6 +67,10 @@
2967
<script>
3068
import LoggerMessage from './LoggerMessage'
3169
70+
import CONSOLE_LOGS from '../graphql/consoleLogs.gql'
71+
import CONSOLE_LOG_LAST from '../graphql/consoleLogLast.gql'
72+
import CONSOLE_LOGS_CLEAR from '../graphql/consoleLogsClear.gql'
73+
3274
export default {
3375
components: {
3476
LoggerMessage
@@ -51,8 +93,19 @@ export default {
5193
list.scrollTop = list.scrollHeight
5294
},
5395
54-
clearLogs () {
55-
// TODO
96+
async clearLogs () {
97+
await this.$apollo.mutate({
98+
mutation: CONSOLE_LOGS_CLEAR,
99+
update: store => {
100+
store.writeQuery({ query: CONSOLE_LOGS, data: { consoleLogs: [] }})
101+
store.writeQuery({ query: CONSOLE_LOG_LAST, data: { consoleLogLast: null }})
102+
}
103+
})
104+
this.close()
105+
},
106+
107+
close () {
108+
this.$emit('close')
56109
}
57110
}
58111
}
@@ -63,21 +116,34 @@ export default {
63116
64117
.logger-view
65118
background $vue-color-light-neutral
66-
padding $padding-item 0
67-
height 160px
119+
height 174px
68120
display grid
69121
grid-template-columns 1fr
70-
grid-template-rows 1fr
71-
grid-template-areas "logs"
122+
grid-template-rows auto 1fr
123+
grid-template-areas "toolbar" "logs"
124+
125+
.toolbar
126+
grid-area toolbar
127+
h-box()
128+
align-items center
129+
padding 6px 6px 6px $padding-item
130+
> :not(.separator)
131+
space-between-x(6px)
132+
> * + .separator
133+
margin-left 6px
134+
.title
135+
flex 100% 1 1
136+
width 0
137+
ellipsis()
72138
73139
.logs
74140
grid-area logs
75141
padding 0 $padding-item
76142
overflow-x hidden
77143
overflow-y auto
78-
font-size 12px
79144
80145
.logger-message
146+
font-size 12px
81147
&:hover
82148
background lighten(@background, 40%)
83149
</style>

packages/@vue/cli-ui/src/components/StatusBar.vue

+29-7
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
<div class="status-bar">
33
<LoggerView
44
v-if="showLogs"
5+
@close="showLogs = false"
56
/>
67

78
<div class="content">
89
<div
9-
class="section current-project"
10-
v-tooltip="'Current project'"
11-
@click="$emit('project')"
10+
class="section action current-project"
11+
v-tooltip="'Current project<br><i>Click to toggle Project Manager</i>'"
12+
@click="onProjectClick()"
1213
>
1314
<VueIcon icon="work"/>
1415
<span v-if="projectCurrent">{{ projectCurrent.name }}</span>
@@ -19,7 +20,7 @@
1920
:query="require('@/graphql/cwd.gql')"
2021
class="section current-path"
2122
v-tooltip="'Current Working Directory'"
22-
@click.native="$emit('cwd')"
23+
@click.native="onCwdClick()"
2324
>
2425
<ApolloSubscribeToMore
2526
:document="require('@/graphql/cwdChanged.gql')"
@@ -35,11 +36,11 @@
3536
</ApolloQuery>
3637

3738
<div
38-
class="section console-log"
39-
v-tooltip="'Logs'"
39+
class="section action console-log"
40+
v-tooltip="'Logs<br><i>Click to toggle vue-cli logs</i>'"
4041
@click="onConsoleClick()"
4142
>
42-
<VueIcon icon="subtitles"/>
43+
<VueIcon icon="dvr"/>
4344
<LoggerMessage class="last-message"
4445
v-if="consoleLogLast"
4546
:message="consoleLogLast"
@@ -67,6 +68,8 @@ import PROJECT_CURRENT from '../graphql/projectCurrent.gql'
6768
import CONSOLE_LOG_LAST from '../graphql/consoleLogLast.gql'
6869
import CONSOLE_LOG_ADDED from '../graphql/consoleLogAdded.gql'
6970
71+
let lastRoute
72+
7073
export default {
7174
components: {
7275
LoggerMessage,
@@ -103,6 +106,21 @@ export default {
103106
},
104107
105108
methods: {
109+
onProjectClick () {
110+
this.$emit('project')
111+
if (this.$route.name === 'project-select') {
112+
this.$router.push(lastRoute || { name: 'home' })
113+
} else {
114+
const { name, params, query } = this.$route
115+
lastRoute = { name, params, query }
116+
this.$router.push({ name: 'project-select' })
117+
}
118+
},
119+
120+
onCwdClick () {
121+
this.$emit('cwd')
122+
},
123+
106124
onConsoleClick () {
107125
this.$emit('console')
108126
this.showLogs = !this.showLogs
@@ -143,6 +161,10 @@ export default {
143161
.label
144162
color lighten($vue-color-dark, 20%)
145163
164+
&.action
165+
user-select none
166+
cursor pointer
167+
146168
.console-log
147169
&,
148170
.last-message

packages/@vue/cli-ui/src/style/main.styl

+9
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,12 @@ ansi-colors('blue', $md-blue)
4646
ansi-colors('magenta', $vue-color-accent)
4747
ansi-colors('cyan', $vue-color-info)
4848
ansi-colors('white', $vue-color-light)
49+
50+
.vue-icon.separator
51+
width 6px
52+
height @width
53+
h-box()
54+
box-center()
55+
margin $padding-item
56+
svg
57+
fill rgba($vue-color-dark, .2)

0 commit comments

Comments
 (0)