From 6de0e23fd028ff5aeb2c9ad207e624e12fc7cc14 Mon Sep 17 00:00:00 2001 From: sajjad Date: Tue, 7 Dec 2021 20:13:13 +0330 Subject: [PATCH] fix --- package-lock.json | 160 ++++++------ .../repository/programRepository.js | 11 +- .../repository/sportCategoryRepository.js | 2 +- src/abstraction/resources/profileResource.js | 2 + src/abstraction/resources/userResource.js | 2 - src/components/AddProduct/Main.vue | 3 +- src/components/AddProgram/Main.vue | 11 +- src/components/AddWorkout/Main.vue | 9 +- src/components/Global/Input/ImageCropper.vue | 3 +- src/components/Global/Section/SideBar.vue | 8 +- src/components/Global/Section/UserName.vue | 9 +- src/components/Products/Item.vue | 16 +- src/components/Profile/Trainer.vue | 232 ++++++++++++++++++ src/components/Programs/Item.vue | 10 + src/components/Programs/Main.vue | 9 +- .../Programs/Modals/FiltersModal.vue | 4 +- src/router/path.js | 10 +- src/router/url.js | 3 + src/store/modules/programs/actions.js | 14 ++ src/views/TrainerProfile.vue | 31 +++ 20 files changed, 443 insertions(+), 106 deletions(-) create mode 100644 src/components/Profile/Trainer.vue create mode 100644 src/views/TrainerProfile.vue diff --git a/package-lock.json b/package-lock.json index 45b1d9a..a853a3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2844,6 +2844,63 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", @@ -2852,6 +2909,28 @@ "requires": { "minipass": "^3.1.1" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } } } }, @@ -12411,87 +12490,6 @@ } } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", - "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "vue-meta": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-2.4.0.tgz", diff --git a/src/abstraction/repository/programRepository.js b/src/abstraction/repository/programRepository.js index 559be95..70894bc 100644 --- a/src/abstraction/repository/programRepository.js +++ b/src/abstraction/repository/programRepository.js @@ -16,7 +16,16 @@ export default class ProgramRepository { // } let params = setQuery(data); let response = await axios.get(url("indexProgram"), { - headers: { 'accept-language': 'en' }, + params + }); + if (response.status === 200) { + return getArray(response.data); + } + } + async indexMyPrograms(data) { + console.log('repository'); + let params = setQuery(data); + let response = await axios.get(url("indexMyProgram"), { params }); if (response.status === 200) { diff --git a/src/abstraction/repository/sportCategoryRepository.js b/src/abstraction/repository/sportCategoryRepository.js index 2c45a1b..893e3c2 100644 --- a/src/abstraction/repository/sportCategoryRepository.js +++ b/src/abstraction/repository/sportCategoryRepository.js @@ -3,7 +3,7 @@ import url from "@/router/url"; import { getArray, getJson } from "../resources/sportCategoryResource"; export default class SportCategoryRepository { async index() { - let response = await axios.get(url("indexSportCategories")); + let response = await axios.get(url("indexClientSportCategories")); if (response.status === 200) { return getArray(response.data); } diff --git a/src/abstraction/resources/profileResource.js b/src/abstraction/resources/profileResource.js index 1eafba1..a4e7efe 100644 --- a/src/abstraction/resources/profileResource.js +++ b/src/abstraction/resources/profileResource.js @@ -22,6 +22,7 @@ export const getJson = (data) => ({ roles: data.roles }); export const setData = (data, isUpdate = false) => { + console.log(data); let formData = { first_name: data.first_name, last_name: data.last_name, @@ -33,6 +34,7 @@ export const setData = (data, isUpdate = false) => { details: data.details, address: data.address, email: data.email, + batch_id: data.batch_id, cell_number: data.cell_number, country_id: data.country_id, }; diff --git a/src/abstraction/resources/userResource.js b/src/abstraction/resources/userResource.js index f389301..38eb42a 100644 --- a/src/abstraction/resources/userResource.js +++ b/src/abstraction/resources/userResource.js @@ -20,8 +20,6 @@ export const getJson = (data) => { address: data.address, email: data.email, cell_number: data.cell_number, - is_admin: data.is_admin, - is_trainer: data.is_trainer, type: type, role: data.roles, role_id: role_id, diff --git a/src/components/AddProduct/Main.vue b/src/components/AddProduct/Main.vue index b864219..903f0b8 100644 --- a/src/components/AddProduct/Main.vue +++ b/src/components/AddProduct/Main.vue @@ -20,6 +20,7 @@ label="manager image" :url.sync="form.thumbnail" v-model="fileForm" + :stencilProps="{ aspectRatio: 1, checkImageOrigin: false }" /> @@ -239,7 +240,7 @@ export default { }, fileForm: { batch_id: RANDOM_TOKEN, - collection: "thumbnail", + collection: "main_image", crop_data: {}, }, noResultsText: "No results found.", diff --git a/src/components/AddProgram/Main.vue b/src/components/AddProgram/Main.vue index a894954..f0418e6 100644 --- a/src/components/AddProgram/Main.vue +++ b/src/components/AddProgram/Main.vue @@ -134,6 +134,7 @@ import SectionTitle from "../Global/Section/SectionTitle.vue"; import ImageCropper from "../Global/Input/ImageCropper.vue"; import FileRepository from "../../abstraction/repository/fileRepository"; import { mapGetters, mapActions } from "vuex"; +// import _ from "lodash"; import { makeid } from "@/utils/math"; const RANDOM_TOKEN = makeid(50); @@ -143,12 +144,13 @@ export default { ImageCropper, }, data: () => ({ + // perviousCropData: {}, form: { batch_id: RANDOM_TOKEN, }, fileForm: { batch_id: RANDOM_TOKEN, - collection: "thumbnail", + collection: "main_image", crop_data: {}, }, }), @@ -171,7 +173,11 @@ export default { try { let repository = new FileRepository(); if (this.programId) { - if (this.fileForm.file) { + if ( + this.fileForm.file + // || + // !_.isEqual(this.fileForm.crop_data, this.perviousCropData) + ) { await repository.store(this.fileForm); } await this.updateProgram(this.form); @@ -189,6 +195,7 @@ export default { await this.loadProgram(this.programId); this.form = this.getProgram; this.form["batch_id"] = RANDOM_TOKEN; + // this.perviousCropData = this.fileForm.crop_data; }, removeTags(item) { this.form.tags.splice(this.form.tags.indexOf(item), 1); diff --git a/src/components/AddWorkout/Main.vue b/src/components/AddWorkout/Main.vue index 2550c38..7a51ebf 100644 --- a/src/components/AddWorkout/Main.vue +++ b/src/components/AddWorkout/Main.vue @@ -181,6 +181,7 @@ import SectionTitle from "../Global/Section/SectionTitle.vue"; import ImageCropper from "../Global/Input/ImageCropper.vue"; import FileRepository from "../../abstraction/repository/fileRepository"; import { mapActions, mapGetters } from "vuex"; +// import _ from 'lodash'; import { makeid } from "@/utils/math"; const RANDOM_TOKEN = makeid(50); @@ -190,12 +191,13 @@ export default { ImageCropper, }, data: () => ({ + // perviousCropData: {}, form: { batch_id: RANDOM_TOKEN, }, fileForm: { batch_id: RANDOM_TOKEN, - collection: "thumbnail", + collection: "main_image", crop_data: {} }, }), @@ -223,7 +225,9 @@ export default { try { let repository = new FileRepository(); if (this.workoutId) { - if (this.fileForm.file) { + if (this.fileForm.file + // || !_.isEqual(this.fileForm.crop_data, this.perviousCropData) + ) { await repository.store(this.fileForm); } await this.updateWorkout(this.form); @@ -242,6 +246,7 @@ export default { this.form = this.getWorkout; this.form["batch_id"] = RANDOM_TOKEN; this.loadWorkoutCategories(this.form.sport_category_id); + // this.perviousCropData = this.fileForm.crop_data; }, changeSportCategories() { this.loadWorkoutCategories(this.form.sport_category_id); diff --git a/src/components/Global/Input/ImageCropper.vue b/src/components/Global/Input/ImageCropper.vue index a2316fc..09e818c 100644 --- a/src/components/Global/Input/ImageCropper.vue +++ b/src/components/Global/Input/ImageCropper.vue @@ -7,7 +7,7 @@ @change="onChangeCropper" :src="thumbnail" /> - +
@@ -105,6 +105,7 @@ export default { }, onChangeCropper({ coordinates }) { this.form = { ...this.value, ...{ crop_data: coordinates } }; + this.$emit("update:crop_data", coordinates); }, }, }; diff --git a/src/components/Global/Section/SideBar.vue b/src/components/Global/Section/SideBar.vue index 2c2281e..838f534 100644 --- a/src/components/Global/Section/SideBar.vue +++ b/src/components/Global/Section/SideBar.vue @@ -111,14 +111,14 @@ export default { { id: 2, text: "my profile", - link: "profile", - active: this.$route.name === "profile", + link: "trainerProfile", + active: this.$route.name === "trainerProfile", }, { id: 3, text: "my programs", - link: "trainsPrograms", - active: this.$route.name === "trainsPrograms", + link: "programs", + active: this.$route.name === "programs", }, { id: 4, diff --git a/src/components/Global/Section/UserName.vue b/src/components/Global/Section/UserName.vue index b97cbe8..86d776d 100644 --- a/src/components/Global/Section/UserName.vue +++ b/src/components/Global/Section/UserName.vue @@ -1,17 +1,22 @@ \ No newline at end of file + diff --git a/src/components/Products/Item.vue b/src/components/Products/Item.vue index e04d2b6..65fc748 100644 --- a/src/components/Products/Item.vue +++ b/src/components/Products/Item.vue @@ -5,10 +5,22 @@ >
-
+ >
--> + product image +
{{ product.title }}
diff --git a/src/components/Profile/Trainer.vue b/src/components/Profile/Trainer.vue new file mode 100644 index 0000000..6730da9 --- /dev/null +++ b/src/components/Profile/Trainer.vue @@ -0,0 +1,232 @@ + + + diff --git a/src/components/Programs/Item.vue b/src/components/Programs/Item.vue index 5f5460d..2c3fb6c 100644 --- a/src/components/Programs/Item.vue +++ b/src/components/Programs/Item.vue @@ -9,6 +9,11 @@ }')`, }" >
+ @@ -105,7 +105,7 @@ const defaultFilter = { type: "like", val: null, }, - first_name: { + name: { type: "like", val: null, }, diff --git a/src/router/path.js b/src/router/path.js index 88378b4..ab4fa8a 100644 --- a/src/router/path.js +++ b/src/router/path.js @@ -39,7 +39,13 @@ export default [ path: '/profile', view: 'Profile', name: 'profile', - meta: { auth: true } + meta: { auth: true, roles: ["trainee", "admin"] } + }, + { + path: '/trainer-profile', + view: 'TrainerProfile', + name: 'trainerProfile', + meta: { auth: true, roles: ["trainer"] } }, { path: '/workouts', @@ -51,7 +57,7 @@ export default [ path: '/add-program', view: 'AddProgram', name: 'addProgram', - meta: { auth: true, roles: ["admin"] } + meta: { auth: true, roles: ["admin", "trainer"] } }, { path: '/edit-program/:id?', diff --git a/src/router/url.js b/src/router/url.js index 46903c9..808790a 100644 --- a/src/router/url.js +++ b/src/router/url.js @@ -13,10 +13,13 @@ const urls = { verifyProgram: "admin/courses/verify-course/:course", destroyProgram: "admin/courses/:course", updateProgram: "trainer/courses/:course", + // trainer programs + indexMyProgram: "trainer/courses", // user programs indexUserProgram: "my-courses", // sport categories indexSportCategories: "admin/sport-categories", + indexClientSportCategories: "sport-categories", showSportCategory: "admin/sport-categories/:sportCategory", // workout categories indexWorkoutCategories: "admin/workout-categories", diff --git a/src/store/modules/programs/actions.js b/src/store/modules/programs/actions.js index d793a89..228cd3b 100644 --- a/src/store/modules/programs/actions.js +++ b/src/store/modules/programs/actions.js @@ -15,6 +15,20 @@ export default { return e; } }, + async loadMyPrograms({ state, commit }) { + try { + let data = { pagination: state.pagination, filters: state.filters }; + let repository = new ProgramRepository(); + const resource = await repository.indexMyPrograms(data); + let filterCount = setQuery({ filters: state.filters }) + commit("SET_FILTER_COUNT", Object.keys(filterCount).length); + commit("SET_PROGRAMS", resource.data); + commit("SET_PAGINATION", resource.pagination); + } + catch (e) { + return e; + } + }, async loadProgram({ commit }, courseId) { let repository = new ProgramRepository(); const resource = await repository.show(courseId); diff --git a/src/views/TrainerProfile.vue b/src/views/TrainerProfile.vue new file mode 100644 index 0000000..7ef3ccb --- /dev/null +++ b/src/views/TrainerProfile.vue @@ -0,0 +1,31 @@ + + \ No newline at end of file