diff options
-rw-r--r-- | appinfo/routes.php | 4 | ||||
-rw-r--r-- | lib/Controller/OptionController.php | 33 | ||||
-rw-r--r-- | src/js/mixins/optionMixins.js | 2 | ||||
-rw-r--r-- | src/js/store/modules/subModules/options.js | 50 |
4 files changed, 60 insertions, 29 deletions
diff --git a/appinfo/routes.php b/appinfo/routes.php index 24078de3..d5659af7 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -44,8 +44,8 @@ return [ ['name' => 'option#update', 'url' => '/option/{optionId}', 'verb' => 'PUT'], ['name' => 'option#delete', 'url' => '/option/{optionId}', 'verb' => 'DELETE'], ['name' => 'option#confirm', 'url' => '/option/{optionId}/confirm', 'verb' => 'PUT'], - ['name' => 'option#reorder', 'url' => '/option/reorder', 'verb' => 'POST'], - // ['name' => 'option#list', 'url' => '/options/get/{pollId}', 'verb' => 'GET'], + ['name' => 'option#reorder', 'url' => '/options/reorder', 'verb' => 'POST'], + ['name' => 'option#list', 'url' => '/polls/{pollId}/options', 'verb' => 'GET'], // ['name' => 'option#listByToken', 'url' => '/options/get/s/{token}', 'verb' => 'GET'], ['name' => 'vote#set', 'url' => '/vote/set', 'verb' => 'POST'], diff --git a/lib/Controller/OptionController.php b/lib/Controller/OptionController.php index ea58c79c..9fc74889 100644 --- a/lib/Controller/OptionController.php +++ b/lib/Controller/OptionController.php @@ -53,16 +53,16 @@ class OptionController extends Controller { $this->optionService = $optionService; } - // /** - // * Get all options of given poll - // * @NoAdminRequired - // * @param int $pollId - // * @return DataResponse - // */ - // public function list($pollId) { - // return new DataResponse($this->optionService->list($pollId), Http::STATUS_OK); - // } - // + /** + * Get all options of given poll + * @NoAdminRequired + * @param int $pollId + * @return DataResponse + */ + public function list($pollId) { + return new DataResponse(['options' => $this->optionService->list($pollId)], Http::STATUS_OK); + } + // // /** // * Get all options specified by token @@ -76,6 +76,9 @@ class OptionController extends Controller { // return new DataResponse($this->optionService->list(0, $token), Http::STATUS_OK); // } + + + /** * Add a new option * @NoAdminRequired @@ -83,7 +86,7 @@ class OptionController extends Controller { * @return DataResponse */ public function add($pollId, $timestamp = 0, $pollOptionText = '') { - return new DataResponse($this->optionService->add($pollId, $timestamp, $pollOptionText), Http::STATUS_OK); + return new DataResponse(['option' => $this->optionService->add($pollId, $timestamp, $pollOptionText)], Http::STATUS_OK); } /** @@ -93,7 +96,7 @@ class OptionController extends Controller { * @return DataResponse */ public function update($optionId, $timestamp, $pollOptionText) { - return new DataResponse($this->optionService->update($optionId, $timestamp, $pollOptionText), Http::STATUS_OK); + return new DataResponse(['option' => $this->optionService->update($optionId, $timestamp, $pollOptionText)], Http::STATUS_OK); } /** @@ -103,7 +106,7 @@ class OptionController extends Controller { * @return DataResponse */ public function delete($optionId) { - return new DataResponse($this->optionService->delete($optionId), Http::STATUS_OK); + return new DataResponse(['option' => $this->optionService->delete($optionId)], Http::STATUS_OK); } /** @@ -113,7 +116,7 @@ class OptionController extends Controller { * @return DataResponse */ public function confirm($optionId) { - return new DataResponse($this->optionService->confirm($optionId), Http::STATUS_OK); + return new DataResponse(['option' => $this->optionService->confirm($optionId)], Http::STATUS_OK); } /** @@ -124,6 +127,6 @@ class OptionController extends Controller { * @return DataResponse */ public function reorder($pollId, $options) { - return new DataResponse($this->optionService->reorder($pollId, $options), Http::STATUS_OK); + return new DataResponse(['options' => $this->optionService->reorder($pollId, $options)], Http::STATUS_OK); } } diff --git a/src/js/mixins/optionMixins.js b/src/js/mixins/optionMixins.js index 7a0b1a8e..58fc6eb6 100644 --- a/src/js/mixins/optionMixins.js +++ b/src/js/mixins/optionMixins.js @@ -1,7 +1,7 @@ export const confirmOption = { methods: { confirmOption(option) { - this.$store.dispatch('poll/options/update', { option: { ...option, confirmed: !option.confirmed } }) + this.$store.dispatch('poll/options/confirm', { option: option }) }, }, } diff --git a/src/js/store/modules/subModules/options.js b/src/js/store/modules/subModules/options.js index 9d01d930..e2536710 100644 --- a/src/js/store/modules/subModules/options.js +++ b/src/js/store/modules/subModules/options.js @@ -49,6 +49,14 @@ const mutations = { }) }, + confirm(state, payload) { + const index = state.list.findIndex((option) => { + return option.id === payload.option.id + }) + + state.list[index].confirmed = !state.list[index].confirmed + }, + setItem(state, payload) { const index = state.list.findIndex((option) => { return option.id === payload.option.id @@ -99,6 +107,20 @@ const getters = { } const actions = { + + reload(context) { + const endPoint = 'apps/polls/polls' + console.error('Reloading options') + return axios.get(generateUrl(endPoint.concat('/', context.rootState.poll.id, '/options'))) + .then((response) => { + context.commit('set', { options: response.data.options }) + }) + .catch((error) => { + console.error('Error loding options', { error: error.response }, { pollId: context.rootState.poll.id }) + throw error + }) + }, + add(context, payload) { const endPoint = 'apps/polls/option' return axios.post(generateUrl(endPoint), { @@ -107,10 +129,11 @@ const actions = { pollOptionText: payload.pollOptionText, }) .then((response) => { - context.commit('setItem', { option: response.data }) + context.commit('setItem', { option: response.data.option }) }) .catch((error) => { console.error('Error adding option', { error: error.response }, { payload: payload }) + context.dispatch('reload') throw error }) }, @@ -122,10 +145,11 @@ const actions = { pollOptionText: payload.option.timeStamp, }) .then((response) => { - context.commit('setItem', { option: response.data }) + context.commit('setItem', { option: response.data.option }) }) .catch((error) => { console.error('Error updating option', { error: error.response }, { payload: payload }) + context.dispatch('reload') throw error }) }, @@ -134,39 +158,43 @@ const actions = { const endPoint = 'apps/polls/option' return axios.delete(generateUrl(endPoint.concat('/', payload.option.id))) - .then(() => { - context.commit('delete', { option: payload.option }) + .then((response) => { + context.commit('delete', { option: response.data.option }) }) .catch((error) => { - console.error('Error removing option', { error: error.response }, { payload: payload }) + console.error('Error deleting option', { error: error.response }, { payload: payload }) + context.dispatch('reload') throw error }) }, confirm(context, payload) { - const endPoint = 'apps/polls/option' + context.commit('confirm', { option: payload.option }) + const endPoint = 'apps/polls/option' return axios.put(generateUrl(endPoint.concat('/', payload.option.id, '/confirm'))) - .then(() => { - context.commit('delete', { option: payload.option }) + .then((response) => { + context.commit('setItem', { option: response.data.option }) }) .catch((error) => { - console.error('Error removing option', { error: error.response }, { payload: payload }) + console.error('Error confirming option', { error: error.response }, { payload: payload }) + context.dispatch('reload') throw error }) }, reorder(context, payload) { - const endPoint = 'apps/polls/option/reorder' + const endPoint = 'apps/polls/options/reorder' return axios.post(generateUrl(endPoint), { pollId: context.rootState.poll.id, options: payload, }) .then((response) => { - context.commit('set', { options: response.data }) + context.commit('set', { options: response.data.options }) }) .catch((error) => { console.error('Error reordering option', { error: error.response }, { payload: payload }) + context.dispatch('reload') throw error }) }, |