diff --git a/src/renderer/components/TimelineSpace/Contents/Cards/User.vue b/src/renderer/components/TimelineSpace/Contents/Cards/User.vue index 4420bbd5..51a5112e 100644 --- a/src/renderer/components/TimelineSpace/Contents/Cards/User.vue +++ b/src/renderer/components/TimelineSpace/Contents/Cards/User.vue @@ -11,13 +11,28 @@ @{{ user.acct }} +
+ + + +
+ + + diff --git a/src/renderer/components/TimelineSpace/Contents/Lists/Index.vue b/src/renderer/components/TimelineSpace/Contents/Lists/Index.vue index 73c9ac5e..2ab2f69f 100644 --- a/src/renderer/components/TimelineSpace/Contents/Lists/Index.vue +++ b/src/renderer/components/TimelineSpace/Contents/Lists/Index.vue @@ -9,9 +9,14 @@
- + {{ list.title }} +
+ + Edit + +
@@ -71,6 +76,9 @@ export default { } finally { this.creating = false } + }, + edit (list) { + return this.$router.push(`/${this.id()}/lists/${list.id}/edit`) } } } @@ -105,7 +113,11 @@ export default { } .list { - padding: 12px 24px; + padding: 4px 24px; + display: flex; + flex-dirrection: row; + align-items: baseline; + justify-content: space-between; border-bottom: 1px solid var(--theme-border-color); .title { diff --git a/src/renderer/components/TimelineSpace/HeaderMenu.vue b/src/renderer/components/TimelineSpace/HeaderMenu.vue index ecc5dc46..bee0498a 100644 --- a/src/renderer/components/TimelineSpace/HeaderMenu.vue +++ b/src/renderer/components/TimelineSpace/HeaderMenu.vue @@ -57,6 +57,9 @@ export default { case 'lists': this.$store.commit('TimelineSpace/HeaderMenu/updateTitle', 'Lists') break + case 'edit-list': + this.$store.commit('TimelineSpace/HeaderMenu/updateTitle', 'Members') + break case 'list': this.$store.dispatch('TimelineSpace/HeaderMenu/fetchList', this.$route.params.list_id) break diff --git a/src/renderer/components/TimelineSpace/Modals.vue b/src/renderer/components/TimelineSpace/Modals.vue index b8910fa5..718b92a7 100644 --- a/src/renderer/components/TimelineSpace/Modals.vue +++ b/src/renderer/components/TimelineSpace/Modals.vue @@ -4,6 +4,7 @@ + @@ -12,6 +13,7 @@ import NewToot from './Modals/NewToot' import Jump from './Modals/Jump' import ImageViewer from './Modals/ImageViewer' import ListMembership from './Modals/ListMembership' +import AddListMember from './Modals/AddListMember' export default { name: 'modals', @@ -19,7 +21,8 @@ export default { NewToot, Jump, ImageViewer, - ListMembership + ListMembership, + AddListMember } } diff --git a/src/renderer/components/TimelineSpace/Modals/AddListMember.vue b/src/renderer/components/TimelineSpace/Modals/AddListMember.vue new file mode 100644 index 00000000..76296d13 --- /dev/null +++ b/src/renderer/components/TimelineSpace/Modals/AddListMember.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/renderer/router/index.js b/src/renderer/router/index.js index c7e6f89b..670b42d0 100644 --- a/src/renderer/router/index.js +++ b/src/renderer/router/index.js @@ -94,6 +94,12 @@ export default new Router({ name: 'lists', component: require('@/components/TimelineSpace/Contents/Lists/Index').default }, + { + path: 'lists/:list_id/edit', + name: 'edit-list', + component: require('@/components/TimelineSpace/Contents/Lists/Edit').default, + props: true + }, { path: 'lists/:list_id', name: 'list', diff --git a/src/renderer/store/TimelineSpace/Contents/Lists.js b/src/renderer/store/TimelineSpace/Contents/Lists.js index 81ff87b1..7e049ac6 100644 --- a/src/renderer/store/TimelineSpace/Contents/Lists.js +++ b/src/renderer/store/TimelineSpace/Contents/Lists.js @@ -1,10 +1,12 @@ import Index from './Lists/Index' import Show from './Lists/Show' +import Edit from './Lists/Edit' export default { namespaced: true, modules: { Index, - Show + Show, + Edit } } diff --git a/src/renderer/store/TimelineSpace/Contents/Lists/Edit.js b/src/renderer/store/TimelineSpace/Contents/Lists/Edit.js new file mode 100644 index 00000000..e29b6ef7 --- /dev/null +++ b/src/renderer/store/TimelineSpace/Contents/Lists/Edit.js @@ -0,0 +1,36 @@ +import Mastodon from 'megalodon' + +export default { + namespaced: true, + state: { + members: [] + }, + mutations: { + changeMembers (state, members) { + state.members = members + } + }, + actions: { + fetchMembers ({ commit, rootState }, listId) { + const client = new Mastodon( + rootState.TimelineSpace.account.accessToken, + rootState.TimelineSpace.account.baseURL + '/api/v1' + ) + return client.get(`/lists/${listId}/accounts`, { + limit: 0 + }) + .then((data) => { + commit('changeMembers', data) + }) + }, + removeAccount ({ rootState }, obj) { + const client = new Mastodon( + rootState.TimelineSpace.account.accessToken, + rootState.TimelineSpace.account.baseURL + '/api/v1' + ) + return client.del(`/lists/${obj.listId}/accounts`, { + account_ids: [obj.account.id] + }) + } + } +} diff --git a/src/renderer/store/TimelineSpace/Modals.js b/src/renderer/store/TimelineSpace/Modals.js index dcc03b34..a18c98bc 100644 --- a/src/renderer/store/TimelineSpace/Modals.js +++ b/src/renderer/store/TimelineSpace/Modals.js @@ -2,6 +2,7 @@ import NewToot from './Modals/NewToot' import ImageViewer from './Modals/ImageViewer' import Jump from './Modals/Jump' import ListMembership from './Modals/ListMembership' +import AddListMember from './Modals/AddListMember' const Modals = { namespaced: true, @@ -9,7 +10,8 @@ const Modals = { ImageViewer, NewToot, Jump, - ListMembership + ListMembership, + AddListMember } } diff --git a/src/renderer/store/TimelineSpace/Modals/AddListMember.js b/src/renderer/store/TimelineSpace/Modals/AddListMember.js new file mode 100644 index 00000000..e27eb81a --- /dev/null +++ b/src/renderer/store/TimelineSpace/Modals/AddListMember.js @@ -0,0 +1,49 @@ +import Mastodon from 'megalodon' + +export default { + namespaced: true, + state: { + modalOpen: false, + accounts: [], + targetListId: null + }, + mutations: { + changeModal (state, value) { + state.modalOpen = value + }, + updateAccounts (state, accounts) { + state.accounts = accounts + }, + setListId (state, id) { + state.targetListId = id + } + }, + actions: { + changeModal ({ commit }, value) { + commit('changeModal', value) + }, + search ({ commit, rootState }, name) { + const client = new Mastodon( + rootState.TimelineSpace.account.accessToken, + rootState.TimelineSpace.account.baseURL + '/api/v1' + ) + return client.get('/accounts/search', { + q: name, + following: true + }) + .then(data => { + commit('updateAccounts', data) + return data + }) + }, + add ({ state, rootState }, account) { + const client = new Mastodon( + rootState.TimelineSpace.account.accessToken, + rootState.TimelineSpace.account.baseURL + '/api/v1' + ) + return client.post(`/lists/${state.targetListId}/accounts`, { + account_ids: [account.id] + }) + } + } +}