Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit eac8372

Browse files
committed
Add tab functionality in CreateNodeModal
1 parent 8daedc5 commit eac8372

File tree

4 files changed

+59
-36
lines changed

4 files changed

+59
-36
lines changed

src/renderer/components/modals/create-note-modal/CreateNoteModal.html

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,39 @@
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 v-if="files.length" :dataArr="files" v-slot:name="{ item }">
8+
<Tab
9+
ref="tab"
10+
v-if="files.length"
11+
:dataArr="files"
12+
v-slot:name="{ item }"
13+
@onFileSelected="selectedFile = $event"
14+
>
915
{{ item.name }}
1016
</Tab>
1117

18+
<!-- Selected file -->
1219
<div v-if="selectedFile !== null" :class="{ 'c-selected-file': true }">
1320
<b-field horizontal label="Name" grouped>
14-
<b-input style="width: 186px" type="text" v-model="selectedFile.name" placeholder="Your file name">
15-
</b-input>
16-
<p class="control is-pulled-right" v-if="selectedFile.length > 1">
17-
<button class="button is-danger" @click="deleteFile(selectedFile)">
18-
<b-icon icon="trash"></b-icon>
19-
</button>
20-
</p>
21-
</b-field>
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>
2229

23-
<b-field horizontal label="Language">
24-
<b-select placeholder="Select a language" v-model="selectedFile.language">
25-
<option v-for="language in languages" :value="language.name">
26-
{{ language.name | capitalize }}
27-
</option>
28-
</b-select>
29-
</b-field>
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>
3037

31-
<b-field horizontal label="Content">
32-
<editor v-model="selectedFile.content" :lang="selectedFile.language" theme="monokai" width="100%" height="260"></editor>
33-
</b-field>
38+
<b-field horizontal label="Content">
39+
<editor v-model="selectedFile.content" :lang="selectedFile.language" theme="monokai" width="100%" height="260"></editor>
40+
</b-field>
3441
</div>
3542

3643
<section class="modal-card-body">
@@ -75,7 +82,7 @@ <h2 class="text-red" v-if="displayDupError">Oh sorry, you can't have duplicated
7582
</b-field>
7683

7784
<div class="text-center">
78-
<button class="button" type="button" @click="addFile()" v-if="files.length < 5">
85+
<button class="button" type="button" @click="addFile()">
7986
<b-icon id="plus" icon="plus"></b-icon>
8087
Add a file
8188
</button>

src/renderer/components/modals/create-note-modal/CreateNoteModal.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ export default {
8686
;
8787
},
8888
deleteFile(file) {
89-
this.files = this.files.filter(f => f !== file);
89+
this.files = this.files.filter(f => f.id !== file.id);
90+
this.$refs.tab.recomputeSlidesLen();
91+
this.selectedFile = null;
9092
},
9193
containsDupFiles() {
9294
const map = new Map();

src/renderer/components/tab/Tab.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div class="c-tabs__wrapper" ref="tabWrapper">
44
<div class="c-tabs__inner" ref="tabInner">
55
<div
6-
:class="{ 'c-tabs__item': true }"
6+
:class="{ 'c-tabs__item': true, 'is-selected': selectedFile && selectedFile.id === item.id }"
77
v-for="item in dataArr"
88
:key="item.id"
99
v-if="item.name"
@@ -19,7 +19,7 @@
1919
class="c-tabs__button c-tabs__button--left">
2020
&lt;
2121
</button>
22-
<button v-if="tabSlideIndex !== tabSlidesLen" @click="changeSlide('right')" type="button"
22+
<button v-if="tabSlideIndex < tabSlidesLen" @click="changeSlide('right')" type="button"
2323
class="c-tabs__button c-tabs__button--right">
2424
&gt;
2525
</button>

src/renderer/components/tab/Tab.vue

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ export default {
66
tabWrapperWidth: null,
77
tabInnerWith: null,
88
tabSlidesLen: null,
9-
tabSlideIndex: 0
9+
tabSlideIndex: 0,
10+
selectedFile: null,
1011
}),
1112
1213
props: {
@@ -21,10 +22,15 @@ export default {
2122
deep: true,
2223
2324
// Adjust the witdh every time a file is added/deleted
24-
handler () {
25-
this.tabInnerWith = this.$refs.tabInner.offsetWidth;
25+
handler (newVal, oldVal) {
26+
this.recomputeSlidesLen();
27+
}
28+
},
2629
27-
this.tabSlidesLen = Math.ceil(this.tabInnerWith / this.tabWrapperWidth) - 1;
30+
tabSlidesLen (len) {
31+
if (len <= this.tabSlideIndex) {
32+
this.tabSlideIndex = len === 0 ? 0 : len - 1;
33+
this.$refs.tabInner.style.transform = 'translateX(0)';
2834
}
2935
}
3036
},
@@ -45,20 +51,28 @@ export default {
4551
},
4652
4753
selectFile (item, ev) {
48-
/* Logic to select a file... */
54+
// Toggle
55+
if (this.selectedFile && this.selectedFile.id === item.id) {
56+
this.selectedFile = null;
57+
} else {
58+
this.selectedFile = item;
59+
}
60+
61+
this.$emit('onFileSelected', this.selectedFile);
62+
},
63+
64+
recomputeSlidesLen () {
65+
this.$nextTick(() => {
66+
this.tabWrapperWidth = this.$refs.tabWrapper.offsetWidth;
67+
this.tabInnerWith = this.$refs.tabInner.offsetWidth;
68+
this.tabSlidesLen = Math.ceil(this.tabInnerWith / this.tabWrapperWidth) - 1;
69+
})
4970
}
5071
},
5172
5273
mounted () {
5374
54-
this.tabWrapperWidth = this.$refs.tabWrapper.offsetWidth;
55-
this.tabInnerWith = this.$refs.tabInner.offsetWidth;
56-
57-
this.tabSlidesLen = Math.ceil(this.tabInnerWith / this.tabWrapperWidth) - 1;
58-
59-
console.log(this.tabWrapperWidth)
60-
console.log(this.tabInnerWith)
61-
console.log(this.tabSlidesLen)
75+
this.recomputeSlidesLen();
6276
}
6377
}
6478
</script>

0 commit comments

Comments
 (0)