From fa7791be24b7efe06587bb127eebb7cebccb424c Mon Sep 17 00:00:00 2001 From: sajjad Date: Wed, 3 Nov 2021 20:53:45 +0330 Subject: [PATCH] fix --- .../repository/bookmarksRepository.js | 18 ++- .../repository/productRepository.js | 10 ++ .../repository/userProgramsRepository.js | 12 ++ .../resources/bookmarksResource.js | 14 ++- src/abstraction/resources/productResource.js | 11 +- .../resources/userProgramsResource.js | 27 +++++ src/components/AddProduct/Main.vue | 45 +++---- src/components/Bookmarks/Main.vue | 112 ++++++------------ .../Bookmarks/Programs/Programs.vue | 6 +- .../Bookmarks/Workouts/Workouts.vue | 1 + src/components/Products/Item.vue | 4 +- src/components/TrainPrograms/Item.vue | 66 +++++++---- src/components/TrainPrograms/Main.vue | 21 +++- src/router/url.js | 5 + src/store/modules/bookmarks/actions.js | 32 +++-- src/store/modules/bookmarks/getters.js | 2 + src/store/modules/bookmarks/mutations.js | 16 +++ src/store/modules/bookmarks/state.js | 5 +- src/store/modules/products/mutations.js | 2 +- src/store/modules/programs/mutations.js | 8 +- src/store/modules/userPrograms/actions.js | 16 +++ src/store/modules/userPrograms/getters.js | 3 + src/store/modules/userPrograms/mutations.js | 10 ++ src/store/modules/userPrograms/state.js | 6 + 24 files changed, 291 insertions(+), 161 deletions(-) create mode 100644 src/abstraction/repository/userProgramsRepository.js create mode 100644 src/abstraction/resources/userProgramsResource.js create mode 100644 src/store/modules/userPrograms/actions.js create mode 100644 src/store/modules/userPrograms/getters.js create mode 100644 src/store/modules/userPrograms/mutations.js create mode 100644 src/store/modules/userPrograms/state.js diff --git a/src/abstraction/repository/bookmarksRepository.js b/src/abstraction/repository/bookmarksRepository.js index f7f7eb4..4db8b6d 100644 --- a/src/abstraction/repository/bookmarksRepository.js +++ b/src/abstraction/repository/bookmarksRepository.js @@ -1,18 +1,26 @@ import axios from "axios"; import url from '@/router/url'; -import { getArray } from "../resources/bookmarksResource"; +import { getArray, setQuery } from "../resources/bookmarksResource"; export default class BookmarsRepository { - async indexCourses() { - let response = await axios.get(url('indexCoursesBookmarks')); + async indexCourses(data) { + let params = setQuery(data) + let response = await axios.get(url('indexCoursesBookmarks'), { params }); if (response.status === 200) { return getArray(response.data); } } - async indexWorkouts() { - let response = await axios.get(url('indexWorkoutsBookmarks')); + async indexWorkouts(data) { + let params = setQuery(data) + let response = await axios.get(url('indexWorkoutsBookmarks'), { params }); if (response.status === 200) { return getArray(response.data); } } + async deleteWorkout(workoutId) { + await axios.delete(url("destroyWorkoutBookmarks", { workout: workoutId })); + } + async deleteProgram(courseId) { + await axios.delete(url("destroyProgramBookmarks", { course: courseId })); + } } \ No newline at end of file diff --git a/src/abstraction/repository/productRepository.js b/src/abstraction/repository/productRepository.js index 1b10650..b3be73b 100644 --- a/src/abstraction/repository/productRepository.js +++ b/src/abstraction/repository/productRepository.js @@ -22,4 +22,14 @@ export default class ProductRepository { return getJson(response.data); } } + async update(productId, data) { + let json = setData(data, true); + let response = await axios.post( + url("updateProduct", { product: productId }), + json + ); + if (response.status === 200) { + return response.data.data; + } + } } diff --git a/src/abstraction/repository/userProgramsRepository.js b/src/abstraction/repository/userProgramsRepository.js new file mode 100644 index 0000000..9811070 --- /dev/null +++ b/src/abstraction/repository/userProgramsRepository.js @@ -0,0 +1,12 @@ +import axios from "axios"; +import url from "@/router/url" +import { getArray, setQuery } from "../resources/userProgramsResource"; +export default class UserProgramsRepository { + async index(data) { + let params = setQuery(data); + let response = await axios.get(url('indexUserProgram'), { params }); + if (response.status === 200) { + return getArray(response.data); + } + } +} \ No newline at end of file diff --git a/src/abstraction/resources/bookmarksResource.js b/src/abstraction/resources/bookmarksResource.js index eb33e27..537de93 100644 --- a/src/abstraction/resources/bookmarksResource.js +++ b/src/abstraction/resources/bookmarksResource.js @@ -1,3 +1,4 @@ +import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject"; import { getJson as getJsonProgram } from './programResource' import { getJson as getJsonWorkout } from './workoutResource' export const getJson = (data) => ({ @@ -5,12 +6,13 @@ export const getJson = (data) => ({ bookmarkable_type: data.bookmarkable_type, bookmarkable_id: data.bookmarkable_id, user_id: data.user_id, - bookmark_data: data.courses ? getJsonProgram(data.courses) : getJsonWorkout(data.workouts), }); -export const getArray = ({ data }) => { - // const pagination = SetPagination(meta); - console.log(data); +export const getArray = ({ data, meta }) => { + const pagination = SetPagination(meta); data = data.map(bookmark => getJson(bookmark)); - return { data }; -}; \ No newline at end of file + return { data, pagination }; +}; +export const setQuery = (data) => { + return SetQueriesObject(data); +}; diff --git a/src/abstraction/resources/productResource.js b/src/abstraction/resources/productResource.js index 6fdaf55..07d0fdf 100644 --- a/src/abstraction/resources/productResource.js +++ b/src/abstraction/resources/productResource.js @@ -11,12 +11,15 @@ export const getJson = (data) => ({ name: data.name, video_link: data.video_link, purchase_link: data.purchase_link, - price: data.price, - weight: data.weight, + price_unit: data.price, + price: `${data.price.replace('$', '')}`, + weight_unit: data.weight, + weight: `${data.weight.replace('kg', '')}`, + dimensions_unit: `${data.dimensions.replace('cm', '')}`, dimensions: data.dimensions, product_category: data.product_category, - product_categories_id: data.product_category?.id, - product_category_id: data.product_category?.parent?.id + product_categories_id: data.product_category?.parent?.id, + product_category_id: data.product_category?.id }); export const setData = (data, isUpdate = false) => { let formData = { diff --git a/src/abstraction/resources/userProgramsResource.js b/src/abstraction/resources/userProgramsResource.js new file mode 100644 index 0000000..3294e66 --- /dev/null +++ b/src/abstraction/resources/userProgramsResource.js @@ -0,0 +1,27 @@ +import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject"; +import { getJsonTrainer } from './trainerProgramResource'; +export const getJson = (data) => ({ + id: data.id, + trainer: data.trainer ? getJsonTrainer(data.trainer) : {}, + sport_category_id: data.sport_category_id, + thumbnail: data.thumbnail, + verified: data.verified, + status: data.status, + title: data.title, + description: data.description, + series_count: data.series_count, + workouts_count: data.workouts_count, + type: data.type, + period: data.period, + series: data.series, + schedule: data.schedule +}); +export const getArray = ({ data, meta }) => { + const pagination = SetPagination(meta); + data = data.map((program) => getJson(program)); + return { data, pagination } +}; + +export const setQuery = (data) => { + return SetQueriesObject(data); +}; diff --git a/src/components/AddProduct/Main.vue b/src/components/AddProduct/Main.vue index b058027..0eee5cf 100644 --- a/src/components/AddProduct/Main.vue +++ b/src/components/AddProduct/Main.vue @@ -32,7 +32,6 @@ item-value="id" label="product category" :items="getProductCategories" - @change="changeProductCategories" v-model="form.product_categories_id" > @@ -103,9 +102,10 @@ > @@ -113,9 +113,10 @@ > @@ -232,7 +233,6 @@ export default { data: () => ({ form: { batch_id: RANDOM_TOKEN, - price: "", }, fileForm: { batch_id: RANDOM_TOKEN, @@ -241,7 +241,14 @@ export default { noResultsText: "No results found.", noChildrenText: "It does not have a subset", placeholder: "product subcategory", - child: [], + rules: { + price: (value) => { + return isNaN(value) ? "please enter number" : true; + }, + weight: (value) => { + return isNaN(value) ? "please enter number" : true; + }, + }, }), computed: { ...mapGetters("productCategories", ["getProductCategories"]), @@ -249,24 +256,22 @@ export default { ProductId() { return this.$route.params.id; }, + child() { + if (this.form.product_categories_id) { + let category = this.getProductCategories.find((x) => { + return x.id === this.form.product_categories_id; + }); + return category.children; + } + return []; + }, }, methods: { ...mapActions("productCategories", ["loadProductCategories"]), ...mapActions("products", ["addProduct", "updateProduct", "loadProduct"]), - symbol() {}, - changeProductCategories() { - this.child = []; - console.log(this.getProductCategories); - let index = this.getProductCategories.find((x) => { - return x.id === this.form.product_categories_id; - // x.children.map((y) => console.log("y.name", y.name)); - }); - index.children.map((x) => this.child.push(x)); - console.log(this.child); - }, async submit() { try { - if (this.fileForm.media) { + if (this.fileForm.media !== this.fileForm.media) { let repository = new FileRepository(); await repository.store(this.fileForm); } @@ -282,13 +287,9 @@ export default { async load() { await this.loadProduct(this.ProductId); this.form = this.getProduct; - console.log("this.form", this.form); + // this.changeProductCategories(); }, removeTags(item) { - // { - // course: data.filter(x => x.type === 'course'), - // workout: data.filter(x => x.type === 'workout') - // } this.form.tags.splice(this.form.tags.indexOf(item), 1); this.form.tags = [...this.form.tags]; }, diff --git a/src/components/Bookmarks/Main.vue b/src/components/Bookmarks/Main.vue index 25a5778..680ce45 100644 --- a/src/components/Bookmarks/Main.vue +++ b/src/components/Bookmarks/Main.vue @@ -31,6 +31,12 @@ +
+ +
@@ -42,6 +48,12 @@ > +
+ +
@@ -54,10 +66,7 @@ import SectionTitle from "../Global/Section/SectionTitle.vue"; import BookmarksWorkouts from "./Workouts/Workouts.vue"; import BookmarksPrograms from "./Programs/Programs"; -import FirstImage from "../../assets/28-284379_photo-wallpaper-man-workout-gym-working-gym-workout.jpg"; -import SecondImage from "../../assets/a-bodybuilder-exhibits-his-muscular-physique-1024-768-0.jpg"; -import ThirdImage from "../../assets/5595849.jpg"; -import { mapActions, mapGetters } from "vuex"; +import { mapActions, mapGetters, mapMutations } from "vuex"; export default { components: { SectionTitle, @@ -66,82 +75,13 @@ export default { }, data: () => ({ tab: null, - bookmarksWorkouts: [ - { - id: 1, - src: FirstImage, - title: "CHEST press", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum", - items: [ - { - id: 1, - text: "GYM", - }, - { - id: 2, - text: "forearm", - }, - ], - }, - { - id: 2, - src: SecondImage, - title: "CHEST press - dumbell", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum", - items: [ - { - id: 1, - text: "GYM", - }, - { - id: 2, - text: "forearm", - }, - ], - }, - { - id: 3, - src: ThirdImage, - title: "CHEST press", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum", - items: [ - { - id: 1, - text: "GYM", - }, - { - id: 2, - text: "forearm", - }, - ], - }, - ], - bookmarksPrograms: [ - { - id: 1, - src: FirstImage, - title: "Gym Program Level 1", - subTitle: "The best move for shoulder abs", - sets: 3, - workout: 12, - }, - { - id: 2, - src: SecondImage, - title: "Gym Program Level 1", - subTitle: "The best move for shoulder abs", - sets: 3, - workout: 12, - }, - ], }), computed: { ...mapGetters("bookmarks", [ "getBookmarksPrograms", "getBookmarksWorkouts", + "getPaginationWorkout", + "getPaginationProgram", ]), }, methods: { @@ -149,10 +89,26 @@ export default { "loadBookmarksPrograms", "loadBookmarksWorkouts", ]), + ...mapMutations("bookmarks", [ + "SET_WORKOUTS_PAGINATION", + "SET_PROGRAMS_PAGINATION", + ]), + changePaginationWorkouts(page) { + if (this.getPaginationWorkout.page !== page) { + this.SET_WORKOUTS_PAGINATION(page); + this.loadBookmarksWorkouts(); + } + }, + changePaginationPrograms(page) { + if (this.getPaginationProgram.page !== page) { + this.SET_PROGRAMS_PAGINATION(page); + this.loadBookmarksPrograms(); + } + }, }, - async created() { - await this.loadBookmarksPrograms(); - await this.loadBookmarksWorkouts(); + created() { + this.loadBookmarksPrograms(); + this.loadBookmarksWorkouts(); console.log("this.getBookmarksPrograms", this.getBookmarksPrograms); console.log("this.getBookmarksWorkouts", this.getBookmarksWorkouts); }, diff --git a/src/components/Bookmarks/Programs/Programs.vue b/src/components/Bookmarks/Programs/Programs.vue index db4c294..1536b96 100644 --- a/src/components/Bookmarks/Programs/Programs.vue +++ b/src/components/Bookmarks/Programs/Programs.vue @@ -12,6 +12,7 @@ class="custom-btn ml-1" height="32" icon="WMi-trash" + @click.native="deleteBookmarksProgram(program.id)" /> @@ -41,14 +42,15 @@ diff --git a/src/components/Bookmarks/Workouts/Workouts.vue b/src/components/Bookmarks/Workouts/Workouts.vue index 7b5f5be..ec3de55 100644 --- a/src/components/Bookmarks/Workouts/Workouts.vue +++ b/src/components/Bookmarks/Workouts/Workouts.vue @@ -39,6 +39,7 @@ height="26" icon="WMi-trash" class="custom-btn custom-icon ml-1" + @click.native="deleteBookmarksWorkout(workout.id)" /> diff --git a/src/components/Products/Item.vue b/src/components/Products/Item.vue index 44bd7ab..2adab20 100644 --- a/src/components/Products/Item.vue +++ b/src/components/Products/Item.vue @@ -14,7 +14,9 @@
{{ product.title }}
{{ product.subTitle }}
- + diff --git a/src/components/TrainPrograms/Item.vue b/src/components/TrainPrograms/Item.vue index 3dce562..e07f1c8 100644 --- a/src/components/TrainPrograms/Item.vue +++ b/src/components/TrainPrograms/Item.vue @@ -2,26 +2,28 @@
-
-
{{ program.name }}
-
{{ program.text }}
-
- - +
+
+
{{ program.title }}
+
{{ program.description }}
+
+ + +
@@ -29,7 +31,7 @@
started in:
@@ -37,10 +39,15 @@
- +
done
@@ -52,6 +59,9 @@ export default { props: { program: {}, }, + created() { + console.log(this.program); + }, };