Skip to content

Commit f252c2c

Browse files
committed
Add Tab functionality in UpdateNoteModal
1 parent 985539e commit f252c2c

File tree

3 files changed

+80
-41
lines changed

3 files changed

+80
-41
lines changed

src/renderer/components/modals/update-note-modal/UpdateNoteModal.html

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,42 @@
55
<h2 class="text-red" v-if="displayDupError">Oh sorry, you can't have duplicated name in your note files...</h2>
66
</header>
77

8+
<Tab
9+
ref="tab"
10+
v-if="files.length"
11+
:dataArr="files"
12+
v-slot:name="{ item }"
13+
@onFileSelected="selectedFile = $event"
14+
>
15+
{{ item.name }}
16+
</Tab>
17+
18+
<!-- Selected file -->
19+
<div v-if="selectedFile !== null" :class="{ 'c-selected-file': true }">
20+
<b-field horizontal label="Name" grouped>
21+
<b-input style="width: 186px" type="text" v-model="selectedFile.name" placeholder="Your file name">
22+
</b-input>
23+
<p class="control is-pulled-right">
24+
<button class="button is-danger" @click="deleteFile(selectedFile)">
25+
<b-icon icon="trash"></b-icon>
26+
</button>
27+
</p>
28+
</b-field>
29+
30+
<b-field horizontal label="Language">
31+
<b-select placeholder="Select a language" v-model="selectedFile.language">
32+
<option v-for="language in languages" :value="language.name">
33+
{{ language.name | capitalize }}
34+
</option>
35+
</b-select>
36+
</b-field>
37+
38+
<b-field horizontal label="Content">
39+
<editor v-model="selectedFile.content" :lang="selectedFile.language" theme="monokai" width="100%" height="260">
40+
</editor>
41+
</b-field>
42+
</div>
43+
844
<section class="modal-card-body">
945
<b-field v-if="!gistsSelected" horizontal label="Name">
1046
<b-input
@@ -32,48 +68,30 @@ <h2 class="text-red" v-if="displayDupError">Oh sorry, you can't have duplicated
3268
</b-taginput>
3369
</b-field>
3470

35-
<div class="note-file" v-for="file in files">
36-
<b-field horizontal label="Name" grouped>
37-
<b-input
38-
style="width: 186px"
39-
type="text"
40-
v-model="file.name"
41-
placeholder="Your file name">
42-
</b-input>
43-
<p class="control is-pulled-right" v-if="files.length > 1">
44-
<button class="button is-danger" @click="deleteFile(file)">
45-
<b-icon icon="trash"></b-icon>
46-
</button>
47-
</p>
48-
</b-field>
4971

50-
<b-field horizontal label="Language">
51-
<b-select placeholder="Select a language" v-model="file.language">
52-
<option
53-
v-for="language in languages"
54-
:value="language.name">
55-
{{ language.name | capitalize }}
56-
</option>
57-
</b-select>
58-
</b-field>
72+
<b-field horizontal label="Name" grouped>
73+
<b-input style="width: 186px" type="text" v-model="baseFile.name" placeholder="Your file name">
74+
</b-input>
75+
</b-field>
5976

60-
<b-field horizontal label="Content">
61-
<editor v-model="file.content"
62-
:lang="file.language"
63-
theme="monokai"
64-
width="100%"
65-
height="260"
66-
></editor>
67-
</b-field>
68-
</div>
77+
<b-field horizontal label="Language">
78+
<b-select placeholder="Select a language" v-model="baseFile.language">
79+
<option v-for="language in languages" :value="language.name">
80+
{{ language.name | capitalize }}
81+
</option>
82+
</b-select>
83+
</b-field>
84+
85+
<b-field horizontal label="Content">
86+
<editor v-model="baseFile.content" :lang="baseFile.language" theme="monokai" width="100%" height="260"></editor>
87+
</b-field>
6988

7089
<div class="text-center">
71-
<button class="button" type="button" @click="addFile()" v-if="files.length < 5">
90+
<button class="button" type="button" @click="addFile()">
7291
<b-icon id="plus" icon="plus"></b-icon>
7392
Add a file
7493
</button>
7594
</div>
76-
7795
</section>
7896

7997
<footer class="modal-card-foot">

src/renderer/components/modals/update-note-modal/UpdateNoteModal.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,10 @@
1515
padding: 12px;
1616
margin-bottom: 10px;
1717
}
18+
19+
.c-selected-file {
20+
background-color: $light;
21+
border-top: 1px solid #ccc;
22+
padding: 1rem;
23+
max-height: 20rem;
24+
}

src/renderer/components/modals/update-note-modal/UpdateNoteModal.vue

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ import { mapGetters, mapActions } from 'vuex';
55
import editor from '@/components/editor/Editor';
66
import languages from '@/assets/data/languages.json';
77
import converter from '@/converter';
8+
import Tab from '../../tab/Tab';
9+
10+
import { createId } from '../../../utils';
811
912
export default {
1013
name: 'cn-update-note-modal',
11-
components: { editor },
14+
components: { editor, Tab },
1215
props: {
1316
note: Object,
1417
},
@@ -26,6 +29,12 @@ export default {
2629
gistFiles: [],
2730
languages,
2831
displayDupError: false,
32+
selectedFile: null,
33+
baseFile: {
34+
name: '',
35+
language: 'text',
36+
content: '',
37+
},
2938
};
3039
},
3140
mounted() {
@@ -39,10 +48,10 @@ export default {
3948
this.noteUpdated = { ...this.note };
4049
this.noteUpdated.files = {};
4150
Object.keys(this.note.files).forEach((key, index) => {
42-
this.files.push({ ...this.note.files[key], id: index });
51+
this.files.push({ ...this.note.files[key], id: createId() });
4352
this.gistFiles.push({
4453
...this.note.files[key],
45-
id: index,
54+
id: createId(),
4655
deleted: false,
4756
});
4857
});
@@ -95,12 +104,15 @@ export default {
95104
},
96105
addFile() {
97106
this.files.push({
98-
name: '',
99-
language: 'text',
100-
content: '',
107+
id: createId(),
108+
...this.baseFile,
101109
deleted: false,
102110
added: true,
103111
});
112+
113+
Object.keys(this.baseFile).forEach(
114+
k => this.baseFile[k] = k !== 'language' ? '': this.languages[0].name
115+
);
104116
},
105117
deleteFile(file) {
106118
if (this.gistsSelected) {
@@ -112,6 +124,8 @@ export default {
112124
}
113125
114126
this.files = this.files.filter(f => f !== file);
127+
this.$refs.tab.recomputeSlidesLen();
128+
this.selectedFile = null;
115129
},
116130
containsDupFiles() {
117131
const map = new Map();
@@ -135,7 +149,7 @@ export default {
135149
computed: {
136150
...mapGetters(['gistsSelected']),
137151
isDisabled() {
138-
return this.files.some(file => !/\S/.test(file.content));
152+
return !this.files.length || this.files.some(file => !/\S/.test(file.content));
139153
},
140154
},
141155
};

0 commit comments

Comments
 (0)