delete folder

This commit is contained in:
Nazar Kanaev 2020-07-02 18:43:41 +01:00
parent 07310cbc8f
commit 8499810bc8
4 changed files with 72 additions and 33 deletions

View File

@ -77,6 +77,15 @@ func FolderListHandler(rw http.ResponseWriter, req *http.Request) {
}
func FolderHandler(rw http.ResponseWriter, req *http.Request) {
if req.Method == "DELETE" {
id, err := strconv.ParseInt(Vars(req)["id"], 10, 64)
if err != nil {
rw.WriteHeader(http.StatusBadRequest)
return
}
db(req).DeleteFolder(id)
rw.WriteHeader(http.StatusNoContent)
}
}
type NewFeed struct {

View File

@ -117,37 +117,50 @@
</div>
<div v-else-if="settings=='manage'">
<div v-for="folder in foldersWithFeeds" class="mb-4">
<div><strong>{{ folder.title || "Uncategorized" }}</strong></div>
<div class="d-flex align-items-center">
<div class="w-100"><b>{{ folder.title || "Uncategorized" }}</b></div>
<div class="flex-shrink-0" v-if="folder.id">
<b-dropdown right no-caret lazy="true" variant="link" class="settings-dropdown" toggle-class="text-decoration-none">
<template v-slot:button-content>
<img src="./static/images/more-vertical.svg">
</template>
<b-dropdown-item @click.prevent="renameFolder(folder)">Rename</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-item class="dropdown-danger"
@click.prevent="deleteFolder(folder)">
Delete
</b-dropdown-item>
</b-dropdown>
</div>
</div>
<div v-for="feed in folder.feeds" class="d-flex align-items-center">
<div class="w-100">
{{ feed.title }}
</div>
<div class="flex-shrink-0">
<div class="dropdown d-inline-block">
<b-dropdown right no-caret lazy="true" variant="link" class="settings-dropdown" toggle-class="text-decoration-none">
<template v-slot:button-content>
<img src="./static/images/more-vertical.svg">
</template>
<b-dropdown-item @click.prevent="renameFeed(feed)">Rename</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-header>Move to...</b-dropdown-header>
<b-dropdown-item
v-if="folder.id != feed.folder_id"
v-for="folder in folders"
@click.prevent="moveFeed(feed, folder)">
{{ folder.title }}
</b-dropdown-item>
<b-dropdown-item
@click.prevent="moveFeed(feed, null)" v-if="feed.folder_id">
Uncategorized
</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-item class="dropdown-danger"
@click.prevent="deleteFeed(feed)">
Delete
</b-dropdown-item>
</b-dropdown>
</div>
<b-dropdown right no-caret lazy="true" variant="link" class="settings-dropdown" toggle-class="text-decoration-none">
<template v-slot:button-content>
<img src="./static/images/more-vertical.svg">
</template>
<b-dropdown-item @click.prevent="renameFeed(feed)">Rename</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-header>Move to...</b-dropdown-header>
<b-dropdown-item
v-if="folder.id != feed.folder_id"
v-for="folder in folders"
@click.prevent="moveFeed(feed, folder)">
{{ folder.title }}
</b-dropdown-item>
<b-dropdown-item
@click.prevent="moveFeed(feed, null)" v-if="feed.folder_id">
Uncategorized
</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-item class="dropdown-danger"
@click.prevent="deleteFeed(feed)">
Delete
</b-dropdown-item>
</b-dropdown>
</div>
</div>
</div>

View File

@ -32,6 +32,9 @@
create: function(data) {
return api('post', '/api/folders', data).then(json)
},
delete: function(id) {
return api('delete', '/api/folders/' + id)
},
}
}
})()

View File

@ -9,13 +9,7 @@ var FILTERS = [
var vm = new Vue({
el: '#app',
created: function() {
var vm = this
Promise
.all([api.folders.list(), api.feeds.list()])
.then(function(values) {
vm.folders = values[0]
vm.feeds = values[1]
})
this.refresh()
},
data: function() {
return {
@ -65,6 +59,15 @@ var vm = new Vue({
},
},
methods: {
refresh: function() {
var vm = this
Promise
.all([api.folders.list(), api.feeds.list()])
.then(function(values) {
vm.folders = values[0]
vm.feeds = values[1]
})
},
toggleFolderExpanded: function(folder) {
folder.is_expanded = !folder.is_expanded
},
@ -83,6 +86,17 @@ var vm = new Vue({
vm.folders.push(result)
})
},
renameFolder: function(folder) {
},
deleteFolder: function(folder) {
var vm = this
if (confirm('Are you sure you want to delete ' + folder.title + '?')) {
api.folders.delete(folder.id).then(function() {
vm.refresh()
})
}
},
renameFeed: function(feed) {
var newTitle = prompt('Enter new title', feed.title)
feed.title = newTitle