From b001b7a7d9d3c89aebc7c1ff2a775b647ee6363e Mon Sep 17 00:00:00 2001 From: sajjad_talkhabi Date: Sun, 17 Oct 2021 20:23:30 +0330 Subject: [PATCH] fix --- .../repository/sportCategoriesRepository.js | 2 +- .../repository/workoutRepository.js | 16 ++++- src/abstraction/resources/workoutResource.js | 23 +++++- src/components/AddWorkout/Main.vue | 40 +++++++---- src/components/Global/Input/ImageCropper.vue | 23 ++++++ src/components/Workouts/Item.vue | 28 ++++++-- src/components/Workouts/Main.vue | 70 +++---------------- src/router/url.js | 10 +-- .../modules/workoutCategories.js/actions.js | 5 +- src/store/modules/workouts/actions.js | 14 +++- src/store/modules/workouts/getters.js | 3 + src/store/modules/workouts/mutations.js | 12 +++- 12 files changed, 152 insertions(+), 94 deletions(-) diff --git a/src/abstraction/repository/sportCategoriesRepository.js b/src/abstraction/repository/sportCategoriesRepository.js index cb7013e..efe63d6 100644 --- a/src/abstraction/repository/sportCategoriesRepository.js +++ b/src/abstraction/repository/sportCategoriesRepository.js @@ -8,4 +8,4 @@ export default class SportCategoriesRepository { return getArray(response.data); } } -} +} \ No newline at end of file diff --git a/src/abstraction/repository/workoutRepository.js b/src/abstraction/repository/workoutRepository.js index 7e08b88..c26b3bb 100644 --- a/src/abstraction/repository/workoutRepository.js +++ b/src/abstraction/repository/workoutRepository.js @@ -1,10 +1,22 @@ import axios from "axios"; import url from "@/router/url"; -import { setData } from "../resources/workoutResource.js"; +import { setData, getJson, getArray } from "../resources/workoutResource.js"; export default class WorkoutRepository { + async index() { + let response = await axios.get(url("indexWorkout")); + if (response.status === 200) { + return getArray(response.data); + } + } async store(data) { let json = setData(data); let response = await axios.post(url("storeWorkout"), json); - console.log('response', response); + console.log('kldsbhakjbg', response.data); + if (response.status === 201) { + return getJson(response.data); + } + } + async delete(workoutId) { + await axios.delete(url("destroyWorkout", { workout: workoutId })); } } diff --git a/src/abstraction/resources/workoutResource.js b/src/abstraction/resources/workoutResource.js index cc87dfb..0396846 100644 --- a/src/abstraction/resources/workoutResource.js +++ b/src/abstraction/resources/workoutResource.js @@ -1,9 +1,25 @@ import { objectToFormData } from "@/utils/objectToFormData"; +export const getJson = (data) => ({ + id: data.id, + local_name: data.local_name, + name: data.name, + description: data.description, + suggestion_default: { + suggested_per_ste: data.suggestion_default.suggested_per_set, + suggested_set: data.suggestion_default.suggested_set, + suggested_time: data.suggestion_default.suggested_time, + }, + tags: data.tags, + thumbnail: data.thumbnail, + title: data.title, + video: data.video, +}); export const setData = (data, isUpdate = false) => { let formData = { workout_category_id: data.workout_category_id, name: data.name, local_name: data.local_name, + title: data.title, description: data.description, video: data.video, suggested_per_set: data.suggested_per_set, @@ -16,4 +32,9 @@ export const setData = (data, isUpdate = false) => { formData["_method"] = "put"; } return objectToFormData(formData); -}; \ No newline at end of file +}; +export const getArray = ({ data }) => { + + data = data.map((workout) => getJson(workout)); + return { data }; +}; diff --git a/src/components/AddWorkout/Main.vue b/src/components/AddWorkout/Main.vue index 8c2cf91..dff3cc0 100644 --- a/src/components/AddWorkout/Main.vue +++ b/src/components/AddWorkout/Main.vue @@ -31,6 +31,7 @@ item-value="id" label="workout category" :items="getSportCategories" + v-model="form.sport_category_id" @change="changeSportCategories" > @@ -122,18 +123,22 @@ - + persistent-hint + small-chips + dark + > + + @@ -169,6 +174,7 @@ export default { ImageCropper, }, data: () => ({ + search: null, form: { get() { return this.value; @@ -182,16 +188,21 @@ export default { ...mapGetters("sportCategories", ["getSportCategories"]), ...mapGetters("workoutCategories", ["getWorkoutCategories"]), }, + watch: { + "form.name"(val) { + this.form.local_name = val; + }, + }, methods: { ...mapActions("workouts", ["addWorkout"]), ...mapActions("workoutCategories", ["loadWorkoutCategories"]), ...mapActions("sportCategories", ["loadSportCategories"]), async add() { + console.log(this.form); this.addWorkout(this.form); }, changeSportCategories() { - console.log("change"); - this.loadWorkoutCategories(); + this.loadWorkoutCategories(this.form.sport_category_id); }, }, created() { @@ -220,4 +231,9 @@ export default { .add__workout__picture--icon { font-size: 40px; } + + \ No newline at end of file diff --git a/src/components/Global/Input/ImageCropper.vue b/src/components/Global/Input/ImageCropper.vue index 20d62cd..8de6db6 100644 --- a/src/components/Global/Input/ImageCropper.vue +++ b/src/components/Global/Input/ImageCropper.vue @@ -11,12 +11,32 @@
+
@@ -50,6 +70,9 @@ export default { dark: { default: true, }, + hiddenInput: { + default: true, + }, }, computed: { form: { diff --git a/src/components/Workouts/Item.vue b/src/components/Workouts/Item.vue index b214cb1..e20bb97 100644 --- a/src/components/Workouts/Item.vue +++ b/src/components/Workouts/Item.vue @@ -4,14 +4,14 @@
{{ workout.description }}
@@ -24,15 +24,26 @@ text-color="black" class="mr-1 text-uppercase" x-small - v-for="(item, i) in workout.items" + v-for="(item, i) in workout.tags" :key="i" > - {{ item.text }} + {{ item.name }}
- - + +
@@ -42,12 +53,16 @@ \ No newline at end of file diff --git a/src/components/Workouts/Main.vue b/src/components/Workouts/Main.vue index 2f960a6..f1d14a6 100644 --- a/src/components/Workouts/Main.vue +++ b/src/components/Workouts/Main.vue @@ -37,7 +37,7 @@ cols="12" md="6" class="mb-3" - v-for="workout in workouts" + v-for="workout in getWorkouts" :key="workout.id" > @@ -49,71 +49,23 @@ \ No newline at end of file diff --git a/src/router/url.js b/src/router/url.js index 760cb91..baaa020 100644 --- a/src/router/url.js +++ b/src/router/url.js @@ -5,10 +5,12 @@ const urls = { register: "auth/register", resetPassword: "auth/forget-password", logout: "auth/logout", - indexProgram: 'courses', - indexSportCategories: 'admin/sport-categories', - indexWorkoutCategories: 'admin/workout-categories', - storeWorkout: "admin/workouts" + indexProgram: "courses", + indexSportCategories: "admin/sport-categories", + indexWorkoutCategories: "admin/workout-categories", + storeWorkout: "admin/workouts", + indexWorkout: "admin/workouts", + destroyWorkout: "admin/workouts/:workout", }; export default urlGenerator(urls); diff --git a/src/store/modules/workoutCategories.js/actions.js b/src/store/modules/workoutCategories.js/actions.js index ad774cb..a263d0c 100644 --- a/src/store/modules/workoutCategories.js/actions.js +++ b/src/store/modules/workoutCategories.js/actions.js @@ -1,9 +1,8 @@ import WorkoutCategoriesRepository from "@/abstraction/repository/workoutCategoriesRepository"; export default { - async loadWorkoutCategories({ commit }) { - let data = { sorts: 'fasdfas' } + async loadWorkoutCategories({ commit }, id) { let repository = new WorkoutCategoriesRepository(); - const resource = await repository.index(data); + const resource = await repository.index({filters:{sport_category_id: id}}); commit("SET_WORKOUT_CATEGORIES", resource.data); } }; diff --git a/src/store/modules/workouts/actions.js b/src/store/modules/workouts/actions.js index 8edc0db..0ef8bc2 100644 --- a/src/store/modules/workouts/actions.js +++ b/src/store/modules/workouts/actions.js @@ -1,9 +1,19 @@ import workoutRepository from "@/abstraction/repository/workoutRepository"; export default { + async loadWorkouts({ commit }) { + let repository = new workoutRepository(); + const resource = await repository.index(); + commit("SET_WORKOUT", resource.data); + // commit("SET_PAGINATION", resource.pagination); + }, async addWorkout({ commit }, data) { - console.log('data', data); let repository = new workoutRepository(); const resource = await repository.store(data); - commit("SET_WORKOUTS", resource.data); + commit("ADD_WORKOUT", resource.data); + }, + async deleteWorkout({ commit }, workoutId) { + let repository = new workoutRepository(); + await repository.delete(workoutId); + commit('DELETE_WORKOUT', workoutId); } }; diff --git a/src/store/modules/workouts/getters.js b/src/store/modules/workouts/getters.js index e69de29..d399ec4 100644 --- a/src/store/modules/workouts/getters.js +++ b/src/store/modules/workouts/getters.js @@ -0,0 +1,3 @@ +export default { + getWorkouts: state => state.workouts +} \ No newline at end of file diff --git a/src/store/modules/workouts/mutations.js b/src/store/modules/workouts/mutations.js index fc05ec3..5b9aa6a 100644 --- a/src/store/modules/workouts/mutations.js +++ b/src/store/modules/workouts/mutations.js @@ -1,7 +1,13 @@ import Vue from "vue"; export default { - SET_WORKOUTS(state, data) { - Vue.set(state, "workout", data); + SET_WORKOUT(state, data) { + Vue.set(state, "workouts", data); + }, + ADD_WORKOUT(state, data) { + state.workouts.push(data); + }, + DELETE_WORKOUT(state, workoutId) { + const index = state.workouts.findIndex((x) => x.id === workoutId); + state.workouts.splice(index, 1); }, }; - \ No newline at end of file