From 8cf3b714064bfaf217e3662d2d6fa33ca32d9709 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Mon, 18 Jun 2018 00:11:36 +0900 Subject: [PATCH 1/3] refs #396 Create list edit page which can manage list memberships --- .../TimelineSpace/Contents/Cards/User.vue | 24 +++++- .../TimelineSpace/Contents/Lists/Edit.vue | 73 +++++++++++++++++++ .../TimelineSpace/Contents/Lists/Index.vue | 16 +++- .../components/TimelineSpace/HeaderMenu.vue | 3 + src/renderer/router/index.js | 6 ++ .../store/TimelineSpace/Contents/Lists.js | 4 +- .../TimelineSpace/Contents/Lists/Edit.js | 36 +++++++++ 7 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 src/renderer/components/TimelineSpace/Contents/Lists/Edit.vue create mode 100644 src/renderer/store/TimelineSpace/Contents/Lists/Edit.js 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/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] + }) + } + } +} From 9723c608559fa61842e6529579dc01a90769d3e3 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 19 Jun 2018 00:39:42 +0900 Subject: [PATCH 2/3] refs #396 Show modal to add accounts to the list --- .../TimelineSpace/Contents/Lists/Edit.vue | 25 ++- .../components/TimelineSpace/Modals.vue | 5 +- .../TimelineSpace/Modals/AddListMember.vue | 174 ++++++++++++++++++ src/renderer/store/TimelineSpace/Modals.js | 4 +- .../TimelineSpace/Modals/AddListMember.js | 49 +++++ 5 files changed, 251 insertions(+), 6 deletions(-) create mode 100644 src/renderer/components/TimelineSpace/Modals/AddListMember.vue create mode 100644 src/renderer/store/TimelineSpace/Modals/AddListMember.js diff --git a/src/renderer/components/TimelineSpace/Contents/Lists/Edit.vue b/src/renderer/components/TimelineSpace/Contents/Lists/Edit.vue index 47ad9778..509a2b12 100644 --- a/src/renderer/components/TimelineSpace/Contents/Lists/Edit.vue +++ b/src/renderer/components/TimelineSpace/Contents/Lists/Edit.vue @@ -1,9 +1,14 @@ diff --git a/src/renderer/components/TimelineSpace/Modals/AddListMember.vue b/src/renderer/components/TimelineSpace/Modals/AddListMember.vue new file mode 100644 index 00000000..b74973ea --- /dev/null +++ b/src/renderer/components/TimelineSpace/Modals/AddListMember.vue @@ -0,0 +1,174 @@ + + + + + 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] + }) + } + } +} From b24a38bbb6bd761a366ac843ac08770ca61bc2c9 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 19 Jun 2018 08:47:35 +0900 Subject: [PATCH 3/3] refs #396 Refresh list members after add member --- .../components/TimelineSpace/Modals/AddListMember.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/TimelineSpace/Modals/AddListMember.vue b/src/renderer/components/TimelineSpace/Modals/AddListMember.vue index b74973ea..76296d13 100644 --- a/src/renderer/components/TimelineSpace/Modals/AddListMember.vue +++ b/src/renderer/components/TimelineSpace/Modals/AddListMember.vue @@ -50,7 +50,8 @@ export default { computed: { ...mapState({ loadingBackground: state => state.App.theme.wrapper_mask_color, - accounts: state => state.TimelineSpace.Modals.AddListMember.accounts + accounts: state => state.TimelineSpace.Modals.AddListMember.accounts, + listId: state => state.TimelineSpace.Modals.AddListMember.targetListId }), addListMemberModal: { get () { @@ -76,6 +77,7 @@ export default { this.$store.dispatch('TimelineSpace/Modals/AddListMember/add', user) .then(() => { this.addListMemberModal = false + this.$store.dispatch('TimelineSpace/Contents/Lists/Edit/fetchMembers', this.listId) }) .catch(() => { this.$message({