blob: 01b15448fdbd6de0d785d1b352aa1e2f8310e0db [file] [log] [blame]
<template>
<div class="notes">
<div
v-if="isLoading"
>
<div
v-for="index in 3"
:key="index"
class="timeline-item"
>
<div class="animated-background">
<div class="background-masker nb-label-separator"></div>
</div>
</div>
</div>
<a-input-search
v-if="!isLoading"
placeholder="search notebooks"
class="search-notebook-box"
@search="onSearch"
/>
<ul>
<li
v-for="(note, index) in this.notes"
:key="index"
class="note"
>
<a
href="javascript: void(0);"
v-bind:title="note.path"
class="text-ellipsis"
:class="{'active': note.id === activeNoteId}"
@click="openNote(note)"
>
<a-icon type="file" />
<span>{{ getFileName(note.path) }}</span>
<a-dropdown
class="note-menu"
placement="bottomRight"
>
<a class="ant-dropdown-link" href="#">
<a-icon type="ellipsis" />
</a>
<a-menu slot="overlay">
<a-menu-item>
<a
href="javascript: void(0);"
@click="openNote(note)"
>
Open Notebook
</a>
</a-menu-item>
<a-menu-item>
<a
href="javascript: void(0);"
@click="showRenameDialog(note)"
>
Rename
</a>
</a-menu-item>
<a-menu-divider />
<a-menu-item>
<a
href="javascript: void(0);"
@click="showMoveToTrashConfirm(note.id)"
>
Move to Trash
</a>
</a-menu-item>
</a-menu>
</a-dropdown>
</a>
</li>
</ul>
</div>
</template>
<script>
import ws from '@/services/ws-helper'
export default {
name: 'NoteTree',
data () {
return {
}
},
mounted () {
ws.getConn().send({ op: 'LIST_NOTES' })
},
computed: {
isLoading () {
return this.$store.state.NotebookStore.isListLoading
},
activeNoteId () {
return this.$store.state.TabManagerStore.currentTab && this.$store.state.TabManagerStore.currentTab.id
},
notes () {
return this.$store.state.NotebookStore.notes.filter(n => (n.path ? n.path.split('/')[1] !== this.$root.TRASH_FOLDER_ID : false))
}
},
methods: {
openNote (note) {
this.$root.executeCommand('tabs', 'open', {
type: 'note',
note: note
})
},
getFileName (path) {
return path.substr(path.lastIndexOf('/') + 1)
},
onSelect (keys) {
console.log('Trigger Select', keys)
},
onSearch (value) {
// a
},
showMoveToTrashConfirm (noteId) {
let that = this
this.$confirm({
title: that.$i18n.t('message.note.move_to_trash_confirm'),
content: that.$i18n.t('message.note.move_to_trash_content'),
onOk () {
that.$root.executeCommand('note', 'move-to-trash', noteId)
that.$message.success(that.$i18n.t('message.note.move_to_trash_success'), 4)
},
onCancel () {}
})
},
showRenameDialog (note) {
this.$root.executeCommand('showRenameNoteDialog', {
id: note.id,
path: note.path
})
}
}
}
</script>
<style lang="scss" scoped>
.timeline-item {
padding: 0 12px;
margin: 9px auto;
height: 20px;
.nb-label-separator {
left: 20px;
top: 0;
width: 4px;
height: 24px;
}
}
.search-notebook-box {
padding: 8px 6px;
width: calc(100%);
}
.notes {
list-style: none;
margin: 0;
padding: 0;
ul {
list-style: none;
margin: 0;
padding: 0;
li.note {
position: relative;
a {
font-size: 14px;
padding: 5px 10px;
display: flex;
border-left: 4px solid transparent;
i {
line-height: 20px;
}
&> span {
position: relative;
padding-left: 5px;
}
&.active {
background: #f1eeee;
border-left-color: #2f71a9;
}
&:hover {
background: #F1F1F1;
}
}
a.note-menu {
position: absolute;
top: 5px;
right: 5px;
padding: 0;
i {
transform: rotate(90deg);
}
}
}
}
}
</style>