Skip to content

Commit 45e3c82

Browse files
author
Guillaume Chau
committed
feat(ui): Preset tab
1 parent ac50b82 commit 45e3c82

File tree

15 files changed

+318
-28
lines changed

15 files changed

+318
-28
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<template>
2+
<div
3+
class="project-preset-item"
4+
:class="{
5+
selected
6+
}"
7+
>
8+
<div class="content">
9+
<div
10+
class="radio-icon"
11+
>
12+
<VueIcon
13+
:icon="selected ? 'radio_button_checked' : 'radio_button_unchecked'"
14+
class="medium"
15+
/>
16+
</div>
17+
<div class="name">{{ preset.name }}</div>
18+
<div class="description">{{ preset.description }}</div>
19+
</div>
20+
</div>
21+
</template>
22+
23+
<script>
24+
export default {
25+
props: {
26+
preset: {
27+
type: Object,
28+
required: true
29+
},
30+
31+
selected: {
32+
type: Boolean,
33+
required: true
34+
}
35+
}
36+
}
37+
</script>
38+
39+
<style lang="stylus" scoped>
40+
@import "~@/style/imports"
41+
42+
.project-preset-item
43+
padding 12px
44+
padding-left 0
45+
user-select none
46+
cursor pointer
47+
48+
.content
49+
display grid
50+
grid-template-columns 64px auto
51+
grid-template-rows 24px 24px
52+
grid-template-areas "icon name" "icon description"
53+
54+
.radio-icon
55+
h-box()
56+
box-center()
57+
grid-area icon
58+
59+
.name
60+
grid-area name
61+
62+
.description
63+
grid-area description
64+
color lighten($vue-color-dark, 40%)
65+
66+
&.selected
67+
background rgba($vue-color-primary, .05)
68+
.radio-icon
69+
>>> svg
70+
fill $vue-color-primary
71+
.name
72+
color $vue-color-primary
73+
74+
&:hover
75+
background rgba($vue-color-primary, .1)
76+
77+
</style>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
@click="$emit('console')"
3636
>
3737
<VueIcon icon="subtitles"/>
38-
<span>{{ consoleLog }}</span>
38+
<span v-if="consoleLog">{{ consoleLog }}</span>
3939
</div>
4040
</div>
4141
</template>

packages/@vue/cli-ui/src/graphql-api/connectors/projects.js

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1+
const Creator = require('@vue/cli/lib/Creator')
2+
const { getPromptModules } = require('@vue/cli/lib/util/createTools')
3+
const { getFeatures } = require('@vue/cli/lib/util/features')
4+
const { toShortPluginId } = require('@vue/cli-shared-utils')
5+
const cwd = require('./cwd')
6+
17
let currentProject = null
8+
let creator = null
29

310
function list (context) {
411
return context.db.get('projects').value()
@@ -8,7 +15,55 @@ function getCurrent (context) {
815
return currentProject
916
}
1017

18+
function generatePresetDescription (preset) {
19+
let description = `Features: ${preset.features.join(', ')}`
20+
21+
if (preset.raw.useConfigFiles) {
22+
description += ` (Use config files)`
23+
}
24+
25+
return description
26+
}
27+
28+
function generateProjectCreation (creator) {
29+
const presets = creator.getPresets()
30+
return {
31+
presets: [
32+
...Object.keys(presets).map(
33+
key => {
34+
const preset = presets[key]
35+
const features = getFeatures(preset).map(
36+
f => toShortPluginId(f)
37+
)
38+
const info = {
39+
id: key,
40+
name: key === 'default' ? 'Default preset' : key,
41+
features,
42+
raw: preset
43+
}
44+
info.description = generatePresetDescription(info)
45+
return info
46+
}
47+
),
48+
{
49+
id: 'manual',
50+
name: 'No preset',
51+
description: 'No included features',
52+
features: []
53+
}
54+
]
55+
}
56+
}
57+
58+
function getCreation (context) {
59+
if (!creator) {
60+
creator = new Creator('', cwd.get(), getPromptModules())
61+
}
62+
return generateProjectCreation(creator)
63+
}
64+
1165
module.exports = {
1266
list,
13-
getCurrent
67+
getCurrent,
68+
getCreation
1469
}

packages/@vue/cli-ui/src/graphql-api/resolvers.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ module.exports = {
1515
folderCurrent: (root, args, context) => folders.getCurrent(args, context),
1616
foldersFavorite: (root, args, context) => folders.listFavorite(context),
1717
projects: (root, args, context) => projects.list(context),
18-
projectCurrent: (root, args, context) => projects.getCurrent(context)
18+
projectCurrent: (root, args, context) => projects.getCurrent(context),
19+
projectCreation: (root, args, context) => projects.getCreation(context)
1920
},
2021

2122
Mutation: {

packages/@vue/cli-ui/src/graphql-api/type-defs.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,24 @@ input PromptInput {
119119
value: String!
120120
}
121121
122+
type Preset {
123+
id: ID!
124+
name: String
125+
description: String
126+
features: [String]
127+
}
128+
129+
type ProjectCreation {
130+
presets: [Preset]
131+
}
132+
122133
type Query {
123134
cwd: String!
124135
folderCurrent: Folder
125136
foldersFavorite: [Folder]
126137
projects: [Project]
127138
projectCurrent: Project
139+
projectCreation: ProjectCreation
128140
pluginSearch (input: PluginSearchInput!): [Plugin]
129141
}
130142
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
fragment preset on Preset {
2+
id
3+
name
4+
description
5+
features
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#import "./projectCreationFragment.gql"
2+
3+
query projectCreation {
4+
projectCreation {
5+
...projectCreation
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#import "./presetFragment.gql"
2+
3+
fragment projectCreation on ProjectCreation {
4+
presets {
5+
...preset
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#import "./projectCreationFragment.gql"
2+
3+
mutation projectInitCreate {
4+
projectInitCreate {
5+
...projecCreation
6+
}
7+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,8 @@ body,
2020

2121
> *
2222
space-between-x(12px)
23+
24+
.cta-text
25+
margin 12px
26+
color lighten($vue-color-dark, 40%)
27+
font-size 18px

0 commit comments

Comments
 (0)