bookmarks/src/components/BookmarksList.vue

126 lines
2.7 KiB
Vue
Raw Normal View History

2019-07-26 18:16:37 +00:00
<template>
<div
:class="{
bookmarkslist: true,
'bookmarkslist--gridview': viewMode === 'grid'
}"
>
<CreateBookmark v-if="newBookmark" />
<CreateFolder v-if="newFolder" />
<template v-if="$route.name === 'folder' || $route.name === 'home'">
<Folder
v-for="folder in folderChildren"
:key="'f' + folder.id"
:folder="folder"
/>
</template>
<template v-if="bookmarks.length">
<Bookmark
v-for="bookmark in bookmarks"
:key="'b' + bookmark.id"
:bookmark="bookmark"
/>
</template>
<div
v-else-if="!loading && !folderChildren.length"
class="bookmarkslist__empty"
>
<h2>No bookmarks here</h2>
<p>Try changing your query or add some using the button on the left.</p>
</div>
<div v-if="loading" class="bookmarkslist__loading">
<span class="icon-loading" />
</div>
</div>
2019-07-26 18:16:37 +00:00
</template>
<script>
2019-08-26 12:57:02 +00:00
import Bookmark from './Bookmark';
import Folder from './Folder';
2019-08-04 21:49:07 +00:00
import CreateBookmark from './CreateBookmark';
2019-08-15 13:38:39 +00:00
import CreateFolder from './CreateFolder';
2019-07-26 18:16:37 +00:00
export default {
2019-08-13 19:35:32 +00:00
name: 'BookmarksList',
2019-07-26 18:16:37 +00:00
components: {
2019-08-26 12:57:02 +00:00
Bookmark,
Folder,
2019-08-15 13:38:39 +00:00
CreateBookmark,
CreateFolder
2019-07-26 18:16:37 +00:00
},
props: {
bookmarks: {
type: Array,
required: true
2019-08-04 21:49:07 +00:00
},
2019-08-13 19:35:32 +00:00
loading: {
2019-08-04 21:49:07 +00:00
type: Boolean,
required: true
2019-08-13 19:35:32 +00:00
}
},
computed: {
folderChildren() {
2019-08-20 14:19:21 +00:00
if (this.$route.name !== 'home' && this.$route.name !== 'folder') {
return [];
}
2019-08-13 19:35:32 +00:00
const folderId = this.$route.params.folder || '-1';
if (!folderId) return [];
const folder = this.$store.getters.getFolder(folderId)[0];
if (!folder) return [];
return folder.children;
2019-08-04 21:49:07 +00:00
},
2019-08-13 19:35:32 +00:00
newBookmark() {
return this.$store.state.displayNewBookmark;
2019-08-04 21:49:07 +00:00
},
2019-08-15 13:38:39 +00:00
newFolder() {
return this.$store.state.displayNewFolder;
2019-08-24 17:10:20 +00:00
},
viewMode() {
return this.$store.state.viewMode;
2019-07-26 18:16:37 +00:00
}
2019-08-26 12:29:07 +00:00
}
2019-07-26 18:16:37 +00:00
};
</script>
2019-08-04 21:49:07 +00:00
<style>
.bookmarkslist {
position: relative;
overflow-x: hidden;
overflow-y: visible;
}
2019-08-26 12:57:02 +00:00
.bookmarkslist
> *:first-child:not(.bookmarkslist__loading):not(.bookmarkslist__empty) {
2019-08-04 21:49:07 +00:00
border-top: 1px solid var(--color-border);
}
2019-08-26 22:41:52 +00:00
2019-08-26 12:57:02 +00:00
.bookmarkslist__loading,
.bookmarkslist__empty {
2019-08-04 21:49:07 +00:00
width: 200px;
margin: 200px auto;
}
2019-08-26 22:41:52 +00:00
2019-08-26 12:57:02 +00:00
.bookmarkslist__loading {
2019-08-04 21:49:07 +00:00
text-align: center;
}
2019-08-24 17:10:20 +00:00
2019-08-26 12:57:02 +00:00
.bookmarkslist--gridview {
2019-08-24 17:10:20 +00:00
display: flex;
flex-flow: wrap;
}
2019-08-26 22:41:52 +00:00
2019-08-26 18:07:25 +00:00
.folder--gridview,
.bookmark--gridview,
2019-08-26 12:57:02 +00:00
.bookmarkslist--gridview > .create-folder,
.bookmarkslist--gridview > .create-bookmark {
2019-09-14 14:36:27 +00:00
min-width: 200px;
2019-08-25 15:10:06 +00:00
max-width: 300px;
2019-08-24 17:10:20 +00:00
flex: 1;
height: 200px;
align-items: flex-end;
background: rgb(255, 255, 255);
margin: 10px 0 0 10px;
border: 1px solid var(--color-border);
box-shadow: #efefef7d 0px 0 13px 0px inset;
2019-08-26 18:07:25 +00:00
border-radius: var(--border-radius);
2019-08-24 17:10:20 +00:00
}
2019-08-04 21:49:07 +00:00
</style>