From dd2f2030da1557dc12a9cd5a87b61bef18b02b7a Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Mon, 20 Aug 2018 22:19:05 +0800 Subject: [PATCH] Optimize deleting element from array --- .../assets/src/components/admin/Players.vue | 6 +++--- .../assets/src/components/admin/Plugins.vue | 4 ++-- resources/assets/src/components/admin/Users.vue | 6 +++--- resources/assets/src/components/user/Closet.vue | 16 ++++++++-------- .../assets/src/components/user/ClosetItem.vue | 2 +- resources/assets/src/components/user/Players.vue | 8 ++++---- .../tests/components/admin/Players.test.js | 2 +- .../tests/components/admin/Plugins.test.js | 3 ++- .../assets/tests/components/admin/Users.test.js | 2 +- .../assets/tests/components/user/Closet.test.js | 12 ++++++------ .../tests/components/user/ClosetItem.test.js | 2 +- .../assets/tests/components/user/Players.test.js | 3 +-- 12 files changed, 33 insertions(+), 33 deletions(-) diff --git a/resources/assets/src/components/admin/Players.vue b/resources/assets/src/components/admin/Players.vue index cf1bd1e5..7e81c87d 100644 --- a/resources/assets/src/components/admin/Players.vue +++ b/resources/assets/src/components/admin/Players.vue @@ -239,7 +239,7 @@ export default { toastr.warning(msg); } }, - async deletePlayer(player) { + async deletePlayer({ pid, originalIndex }) { const { dismiss } = await swal({ text: this.$t('admin.deletePlayerNotice'), type: 'warning', @@ -251,10 +251,10 @@ export default { const { errno, msg } = await this.$http.post( '/admin/players?action=delete', - { pid: player.pid } + { pid } ); if (errno === 0) { - this.players = this.players.filter(({ pid }) => pid !== player.pid); + this.$delete(this.players, originalIndex); toastr.success(msg); } else { toastr.warning(msg); diff --git a/resources/assets/src/components/admin/Plugins.vue b/resources/assets/src/components/admin/Plugins.vue index 73cb7cae..3eb80148 100644 --- a/resources/assets/src/components/admin/Plugins.vue +++ b/resources/assets/src/components/admin/Plugins.vue @@ -182,7 +182,7 @@ export default { swal({ type: 'warning', text: msg }); } }, - async deletePlugin({ name }) { + async deletePlugin({ name, originalIndex }) { const { dismiss } = await swal({ text: this.$t('admin.confirmDeletion'), type: 'warning', @@ -197,8 +197,8 @@ export default { { action: 'delete', name } ); if (errno === 0) { + this.$delete(this.plugins, originalIndex); toastr.success(msg); - this.plugins = this.plugins.filter(plugin => plugin.name !== name); } else { swal({ type: 'warning', text: msg }); } diff --git a/resources/assets/src/components/admin/Users.vue b/resources/assets/src/components/admin/Users.vue index 5113c7e9..fbd46db4 100644 --- a/resources/assets/src/components/admin/Users.vue +++ b/resources/assets/src/components/admin/Users.vue @@ -288,7 +288,7 @@ export default { toastr.warning(msg); } }, - async deleteUser(user) { + async deleteUser({ uid, originalIndex }) { const { dismiss } = await swal({ text: this.$t('admin.deleteUserNotice'), type: 'warning', @@ -300,10 +300,10 @@ export default { const { errno, msg } = await this.$http.post( '/admin/users?action=delete', - { uid: user.uid } + { uid } ); if (errno === 0) { - this.users = this.users.filter(({ uid }) => uid !== user.uid); + this.$delete(this.users, originalIndex); toastr.success(msg); } else { toastr.warning(msg); diff --git a/resources/assets/src/components/user/Closet.vue b/resources/assets/src/components/user/Closet.vue index bbd70bdb..08ccb97d 100644 --- a/resources/assets/src/components/user/Closet.vue +++ b/resources/assets/src/components/user/Closet.vue @@ -55,14 +55,14 @@
@@ -78,14 +78,14 @@
@@ -251,11 +251,11 @@ export default { this[`${category}TotalPages`] = total_pages; this[`${category}Items`] = items; }, - removeSkinItem(tid) { - this.skinItems = this.skinItems.filter(item => item.tid !== tid); + removeSkinItem(index) { + this.$delete(this.skinItems, index); }, - removeCapeItem(tid) { - this.capeItems = this.capeItems.filter(item => item.tid !== tid); + removeCapeItem(index) { + this.$delete(this.capeItems, index); }, switchCategory() { this.category = this.category === 'skin' ? 'cape' : 'skin'; diff --git a/resources/assets/src/components/user/ClosetItem.vue b/resources/assets/src/components/user/ClosetItem.vue index 80262bc4..51f23d0f 100644 --- a/resources/assets/src/components/user/ClosetItem.vue +++ b/resources/assets/src/components/user/ClosetItem.vue @@ -107,7 +107,7 @@ export default { ); if (errno === 0) { - this.$emit('item-removed', this.tid); + this.$emit('item-removed'); swal({ type: 'success', text: msg }); } else { toastr.warning(msg); diff --git a/resources/assets/src/components/user/Players.vue b/resources/assets/src/components/user/Players.vue index 59d18074..4ca26244 100644 --- a/resources/assets/src/components/user/Players.vue +++ b/resources/assets/src/components/user/Players.vue @@ -25,7 +25,7 @@ @@ -389,7 +389,7 @@ export default { swal({ type: 'warning', text: msg }); } }, - async deletePlayer(player) { + async deletePlayer(player, index) { const { dismiss } = await swal({ title: this.$t('user.deletePlayer'), text: this.$t('user.deletePlayerNotice'), @@ -407,8 +407,8 @@ export default { { pid: player.pid } ); if (errno === 0) { + this.$delete(this.players, index); swal({ type: 'success', text: msg }); - this.players = this.players.filter(({ pid }) => pid !== player.pid); } else { swal({ type: 'warning', text: msg }); } diff --git a/resources/assets/tests/components/admin/Players.test.js b/resources/assets/tests/components/admin/Players.test.js index b0e28444..a261667d 100644 --- a/resources/assets/tests/components/admin/Players.test.js +++ b/resources/assets/tests/components/admin/Players.test.js @@ -191,5 +191,5 @@ test('delete player', async () => { button.trigger('click'); await flushPromises(); - expect(wrapper.vm.players).toHaveLength(0); + expect(wrapper.text()).toContain('No data'); }); diff --git a/resources/assets/tests/components/admin/Plugins.test.js b/resources/assets/tests/components/admin/Plugins.test.js index 5100ecfe..0a72f754 100644 --- a/resources/assets/tests/components/admin/Plugins.test.js +++ b/resources/assets/tests/components/admin/Plugins.test.js @@ -99,6 +99,7 @@ test('disable plugin', async () => { button.trigger('click'); await flushPromises(); expect(toastr.success).toBeCalledWith('0'); + expect(wrapper.text()).toContain('admin.enablePlugin'); }); test('delete plugin', async () => { @@ -134,5 +135,5 @@ test('delete plugin', async () => { button.trigger('click'); await flushPromises(); - expect(toastr.success).toBeCalledWith('0'); + expect(wrapper.text()).toContain('No data'); }); diff --git a/resources/assets/tests/components/admin/Users.test.js b/resources/assets/tests/components/admin/Users.test.js index bbd95b6b..96892db7 100644 --- a/resources/assets/tests/components/admin/Users.test.js +++ b/resources/assets/tests/components/admin/Users.test.js @@ -529,5 +529,5 @@ test('delete user', async () => { button.trigger('click'); await flushPromises(); - expect(wrapper.vm.users).toHaveLength(0); + expect(wrapper.text()).toContain('No data'); }); diff --git a/resources/assets/tests/components/user/Closet.test.js b/resources/assets/tests/components/user/Closet.test.js index 34e7189d..761cf7f2 100644 --- a/resources/assets/tests/components/user/Closet.test.js +++ b/resources/assets/tests/components/user/Closet.test.js @@ -135,17 +135,17 @@ test('reload closet when page changed', () => { test('remove skin item', () => { Vue.prototype.$http.get.mockResolvedValue({}); const wrapper = mount(Closet); - wrapper.setData({ skinItems: [{ tid: 1 }, { tid: 2 }] }); - wrapper.vm.removeSkinItem(1); - expect(wrapper.findAll(ClosetItem)).toHaveLength(1); + wrapper.setData({ skinItems: [{ tid: 1 }] }); + wrapper.vm.removeSkinItem(0); + expect(wrapper.find('#skin-category').text()).toContain('user.emptyClosetMsg'); }); test('remove cape item', () => { Vue.prototype.$http.get.mockResolvedValue({}); const wrapper = mount(Closet); - wrapper.setData({ capeItems: [{ tid: 1 }, { tid: 2 }], category: 'cape' }); - wrapper.vm.removeCapeItem(1); - expect(wrapper.findAll(ClosetItem)).toHaveLength(1); + wrapper.setData({ capeItems: [{ tid: 1 }], category: 'cape' }); + wrapper.vm.removeCapeItem(0); + expect(wrapper.find('#cape-category').text()).toContain('user.emptyClosetMsg'); }); test('compute avatar URL', () => { diff --git a/resources/assets/tests/components/user/ClosetItem.test.js b/resources/assets/tests/components/user/ClosetItem.test.js index 98300d43..d8aa7dc9 100644 --- a/resources/assets/tests/components/user/ClosetItem.test.js +++ b/resources/assets/tests/components/user/ClosetItem.test.js @@ -86,7 +86,7 @@ test('remove texture', async () => { button.trigger('click'); await flushPromises(); - expect(wrapper.emitted()['item-removed'][0][0]).toBe(1); + expect(wrapper.emitted()['item-removed']).toBeTruthy(); expect(Vue.prototype.$http.post).toBeCalledWith('/user/closet/remove', { tid: 1 }); }); diff --git a/resources/assets/tests/components/user/Players.test.js b/resources/assets/tests/components/user/Players.test.js index 45785f75..807e3c6c 100644 --- a/resources/assets/tests/components/user/Players.test.js +++ b/resources/assets/tests/components/user/Players.test.js @@ -159,8 +159,7 @@ test('delete player', async () => { expect(wrapper.text()).toContain('to-be-deleted'); button.trigger('click'); - await flushPromises(); // Finish HTTP request - await wrapper.vm.$nextTick(); // Update DOM + await flushPromises(); expect(wrapper.text()).not.toContain('to-be-deleted'); });