sajjad_talkhabi 2 years ago
commit b94c31fd9b

@ -21,6 +21,16 @@ export default class ProgramSeriesRepository {
return getJson(response.data.data); return getJson(response.data.data);
} }
} }
async update(data, seriesId) {
let json = setData(data);
let response = await axios.put(
url("updateSeries", { series: seriesId }),
json
);
if (response.status === 200) {
return response.data.data;
}
}
async delete(data) { async delete(data) {
await axios.delete(url("destroySeries", { series: data })); await axios.delete(url("destroySeries", { series: data }));
} }

@ -2,8 +2,14 @@ import axios from "axios";
import url from "@/router/url"; import url from "@/router/url";
import { getArray, getJson } from "../resources/sportCategoryResource"; import { getArray, getJson } from "../resources/sportCategoryResource";
export default class SportCategoryRepository { export default class SportCategoryRepository {
async index() { async index(data) {
let response = await axios.get(url("indexClientSportCategories")); let response = await axios.get(url("indexSportCategories"), { params: data });
if (response.status === 200) {
return getArray(response.data);
}
}
async trainerIndex(data) {
let response = await axios.get(url("indexClientSportCategories"), { params: data });
if (response.status === 200) { if (response.status === 200) {
return getArray(response.data); return getArray(response.data);
} }

@ -3,10 +3,12 @@ import { getJsonTrainer } from './trainerProgramResource';
import { getJsonSportCategory } from './sportCategoryPorgramResource'; import { getJsonSportCategory } from './sportCategoryPorgramResource';
export const getJson = (data) => ({ export const getJson = (data) => ({
id: data.id, id: data.id,
active_trainee_count: data.active_trainee_count,
trainer: data.trainer ? getJsonTrainer(data.trainer) : {}, trainer: data.trainer ? getJsonTrainer(data.trainer) : {},
trainer_id: data.trainer_id, trainer_id: data.trainer_id,
sport_category: data.trainer ? getJsonSportCategory(data.trainer) : {}, sport_category: data.trainer ? getJsonSportCategory(data.trainer) : {},
sport_category_id: data.sport_category_id, sport_category_id: data.sport_category_id,
program_category_id: data.sport_category?.parent?.id,
thumbnail: data.thumbnail, thumbnail: data.thumbnail,
verified: data.verified, verified: data.verified,
status: data.status, status: data.status,

@ -1,5 +1,4 @@
import { getJsonTrainer } from './trainerProgramResource'; import { getJsonTrainer } from './trainerProgramResource';
import { objectToFormData } from "@/utils/objectToFormData";
export const getJson = (data) => ({ export const getJson = (data) => ({
id: data.id, id: data.id,
trainer: data.trainer ? getJsonTrainer(data.trainer) : {}, trainer: data.trainer ? getJsonTrainer(data.trainer) : {},
@ -28,5 +27,5 @@ export const setData = (data) => {
estimate_time: data.estimate_time, estimate_time: data.estimate_time,
repeat: data.repeat repeat: data.repeat
}; };
return objectToFormData(formData); return formData;
}; };

@ -9,4 +9,3 @@ export const getArray = ({ data }) => {
data = data.map((category) => getJson(category)); data = data.map((category) => getJson(category));
return { data }; return { data };
}; };

@ -1,4 +1,3 @@
import { objectToFormData } from "@/utils/objectToFormData";
import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject"; import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject";
export const getJson = (data) => ({ export const getJson = (data) => ({
id: data.id, id: data.id,

@ -74,13 +74,11 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import BookmarksWorkouts from "./Workouts/Workouts.vue"; import BookmarksWorkouts from "./Workouts/Workouts.vue";
import BookmarksPrograms from "./Programs/Programs"; import BookmarksPrograms from "./Programs/Programs";
import { mapActions, mapGetters, mapMutations } from "vuex"; import { mapActions, mapGetters, mapMutations } from "vuex";
export default { export default {
components: { components: {
SectionTitle,
BookmarksWorkouts, BookmarksWorkouts,
BookmarksPrograms, BookmarksPrograms,
}, },

@ -1,10 +1,15 @@
<template> <template>
<div> <div>
<div class="wa__program__images"> <div class="wa__program__images">
<div <img
class="wa__program__image" class="wa__program__image w-100"
:style="{ backgroundImage: `url(${program.bookmark_data.thumbnail})` }" :src="
></div> program.bookmark_data.thumbnail
? program.bookmark_data.thumbnail
: 'https://via.placeholder.com/1280x720'
"
alt="product image"
/>
<div class="wa__program__image__button"> <div class="wa__program__image__button">
<div class="wa__program__image__button--icon"> <div class="wa__program__image__button--icon">
<RectangleButton <RectangleButton
@ -80,9 +85,6 @@ export default {
display: block; display: block;
transition: 0.5s ease; transition: 0.5s ease;
backface-visibility: hidden; backface-visibility: hidden;
height: 300px;
background-size: cover;
background-position: center;
} }
.wa__program__image__button { .wa__program__image__button {
transition: 0.5s ease; transition: 0.5s ease;

@ -2,13 +2,16 @@
<div class="border-bottom"> <div class="border-bottom">
<v-row> <v-row>
<v-col cols="4" class="pr-0"> <v-col cols="4" class="pr-0">
<div <img
class="workout__img" class="rounded w-100"
:style="{ :src="
backgroundImage: `url(${workout.bookmark_data.thumbnail})`, workout.bookmark_data.thumbnail
}" ? workout.bookmark_data.thumbnail
></div : 'https://via.placeholder.com/1280x720'
></v-col> "
alt="workout image"
/>
</v-col>
<v-col cols="8"> <v-col cols="8">
<div class="details__card"> <div class="details__card">
<div> <div>
@ -26,17 +29,17 @@
label label
color="gray" color="gray"
text-color="black" text-color="black"
class="mr-1 text-uppercase" class="mr-1 text-uppercase tag__chip"
xs xs
v-for="(item, i) in workout.bookmark_data.tags" v-for="(item, i) in workout.bookmark_data.tags"
:key="i" :key="i"
:text="item.name" :text="item"
/> />
</div> </div>
<div> <div>
<RectangleButton <RectangleButton
size="large" size="large"
height="26" height="31"
icon="WMi-trash" icon="WMi-trash"
class="custom-btn ml-1" class="custom-btn ml-1"
@click="deleteBookmarkWorkout(workout.id)" @click="deleteBookmarkWorkout(workout.id)"
@ -87,4 +90,8 @@ export default {
height: 100%; height: 100%;
justify-content: space-between; justify-content: space-between;
} }
.tag__chip {
font-size: 12px !important;
font-family: "Montserrat-light";
}
</style> </style>

@ -219,7 +219,6 @@
</template> </template>
<script> <script>
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from "vuex";
import SectionTitle from "../Global/Section/SectionTitle.vue";
import FileRepository from "../../abstraction/repository/fileRepository"; import FileRepository from "../../abstraction/repository/fileRepository";
import ImageCropper from "../Global/Input/ImageCropper.vue"; import ImageCropper from "../Global/Input/ImageCropper.vue";
import Dropzone from "../Global/Input/Dropzone.vue"; import Dropzone from "../Global/Input/Dropzone.vue";
@ -230,7 +229,6 @@ const RANDOM_TOKEN = makeid(50);
// //
export default { export default {
components: { components: {
SectionTitle,
ImageCropper, ImageCropper,
Dropzone, Dropzone,
}, },

@ -48,12 +48,10 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ProductItem from "./Item.vue"; import ProductItem from "./Item.vue";
import { mapActions, mapGetters, mapMutations } from "vuex"; import { mapActions, mapGetters, mapMutations } from "vuex";
export default { export default {
components: { components: {
SectionTitle,
ProductItem, ProductItem,
}, },
data: () => ({}), data: () => ({}),

@ -170,14 +170,12 @@
</template> </template>
<script> <script>
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from "vuex";
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ImageCropper from "../Global/Input/ImageCropper.vue"; import ImageCropper from "../Global/Input/ImageCropper.vue";
import FileRepository from "../../abstraction/repository/fileRepository"; import FileRepository from "../../abstraction/repository/fileRepository";
import { makeid } from "@/utils/math"; import { makeid } from "@/utils/math";
const RANDOM_TOKEN = makeid(50); const RANDOM_TOKEN = makeid(50);
export default { export default {
components: { components: {
SectionTitle,
ImageCropper, ImageCropper,
}, },
data: () => ({ data: () => ({

@ -154,10 +154,8 @@
</template> </template>
<script> <script>
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from "vuex";
import SectionTitle from "../Global/Section/SectionTitle.vue";
export default { export default {
components: { components: {
SectionTitle,
}, },
data: () => ({ data: () => ({
form: {}, form: {},

@ -49,6 +49,7 @@
width="48" width="48"
class="ml-1 custom-btn" class="ml-1 custom-btn"
icon="WMi-pencil" icon="WMi-pencil"
@click.native.prevent="$_openModal('add_series', { data: series })"
/> />
<RectangleButton <RectangleButton
v-if="role === 'admin'" v-if="role === 'admin'"
@ -119,4 +120,4 @@ export default {
word-wrap: break-word; word-wrap: break-word;
overflow: hidden; overflow: hidden;
} }
</style> </style>

@ -49,14 +49,12 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import SeriesItem from "./Item.vue"; import SeriesItem from "./Item.vue";
import { mapGetters, mapActions } from "vuex"; import { mapGetters, mapActions } from "vuex";
import AddSeriesModal from "./Modals/AddSeriesModal.vue"; import AddSeriesModal from "./Modals/AddSeriesModal.vue";
export default { export default {
components: { components: {
SectionTitle,
SeriesItem, SeriesItem,
AddSeriesModal, AddSeriesModal,
}, },

@ -5,10 +5,11 @@
tag="vee-form" tag="vee-form"
@submit="addSeries" @submit="addSeries"
ref="modal" ref="modal"
@open="openModal"
> >
<template #header> <template #header>
<div class="close__modal"> <div class="close__modal">
<v-icon class="WMi-cancel-1" large @click="$_closeModal()"></v-icon> <v-icon class="WMi-cancel-linear" @click="$_closeModal()"></v-icon>
</div> </div>
</template> </template>
<template #default> <template #default>
@ -73,7 +74,7 @@
<RectangleButton <RectangleButton
height="29" height="29"
class="btn__modal--confirm custom-btn wa__f__m__eb" class="btn__modal--confirm custom-btn wa__f__m__eb"
text="add" :text="`${form.id ? 'edit' : 'add'}`"
type="submit" type="submit"
/> />
</div> </div>
@ -82,10 +83,8 @@
</template> </template>
<script> <script>
import { mapActions } from "vuex"; import { mapActions } from "vuex";
import SectionTitle from "../../Global/Section/SectionTitle.vue";
export default { export default {
name: "modal_add_series", name: "modal_add_series",
components: { SectionTitle },
props: { props: {
programId: {}, programId: {},
}, },
@ -98,14 +97,27 @@ export default {
}, },
}), }),
methods: { methods: {
...mapActions("programSeries", ["addSeriesToProgram"]), ...mapActions("programSeries", ["addSeriesToProgram", "updateSeriesToProgram"]),
openModal({ data }) {
this.form = { ...data };
},
async addSeries() { async addSeries() {
let response = await this.addSeriesToProgram({ if (this.form.id) {
data: this.form, let response = await this.updateSeriesToProgram({
courseId: Number(this.programId), data: this.form,
}); seriesId: +this.form.id,
if (response) { });
this.$_closeModal(); if (response) {
this.$_closeModal();
}
} else {
let response = await this.addSeriesToProgram({
data: this.form,
courseId: Number(this.programId),
});
if (response) {
this.$_closeModal();
}
} }
}, },
}, },

@ -35,6 +35,18 @@
item-value="id" item-value="id"
label="program category" label="program category"
:items="getSportCategories" :items="getSportCategories"
v-model="form.program_category_id"
@change="changeSportCategories"
></v-autocomplete>
</v-col>
<v-col cols="4">
<v-autocomplete
dark
class="mt-0 pt-0"
item-text="name"
item-value="id"
label="workout subcategory"
:items="getSubSportCategories"
v-model="form.sport_category_id" v-model="form.sport_category_id"
></v-autocomplete> ></v-autocomplete>
</v-col> </v-col>
@ -130,7 +142,6 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ImageCropper from "../Global/Input/ImageCropper.vue"; import ImageCropper from "../Global/Input/ImageCropper.vue";
import FileRepository from "../../abstraction/repository/fileRepository"; import FileRepository from "../../abstraction/repository/fileRepository";
import { mapGetters, mapActions } from "vuex"; import { mapGetters, mapActions } from "vuex";
@ -140,7 +151,6 @@ const RANDOM_TOKEN = makeid(50);
export default { export default {
components: { components: {
SectionTitle,
ImageCropper, ImageCropper,
}, },
data: () => ({ data: () => ({
@ -160,7 +170,7 @@ export default {
}, },
}, },
computed: { computed: {
...mapGetters("sportCategories", ["getSportCategories"]), ...mapGetters("sportCategories", ["getSportCategories", "getSubSportCategories"]),
...mapGetters("programs", ["getProgram"]), ...mapGetters("programs", ["getProgram"]),
programId() { programId() {
return this.$route.params.id; return this.$route.params.id;
@ -203,6 +213,10 @@ export default {
this.form = this.getProgram; this.form = this.getProgram;
this.form["batch_id"] = RANDOM_TOKEN; this.form["batch_id"] = RANDOM_TOKEN;
// this.perviousCropData = this.fileForm.crop_data; // this.perviousCropData = this.fileForm.crop_data;
await this.loadSportCategories(this.form.program_category_id);
},
async changeSportCategories() {
await this.loadSportCategories(this.form.program_category_id);
}, },
removeTags(item) { removeTags(item) {
this.form.tags.splice(this.form.tags.indexOf(item), 1); this.form.tags.splice(this.form.tags.indexOf(item), 1);

@ -32,6 +32,7 @@
/> />
</router-link> </router-link>
<router-link <router-link
v-if="program.active_trainee_count === 0"
:to="{ :to="{
name: 'editProgram', name: 'editProgram',
params: { id: program.id }, params: { id: program.id },
@ -130,9 +131,19 @@ export default {
"loadProgram", "loadProgram",
]), ]),
removeProgram(id) { removeProgram(id) {
toast.question("Are sure delete program?", "Delete program", () => { console.log("this.program.active_trainee_count", this.program.active_trainee_count);
this.deleteProgram(id); if (this.program.active_trainee_count === 0) {
}); console.log("is not started");
toast.question("Are sure delete program?", "Delete program", async () => {
await this.deleteProgram({ courseId: id, isStarted: false });
});
} else {
console.log("is started");
toast.question("Are sure delete program?", "Delete program", async () => {
await this.deleteProgram({ courseId: id, isStarted: true });
this.program.verified = false;
});
}
}, },
async openDetailModal() { async openDetailModal() {
await this.loadProgram(this.program.id); await this.loadProgram(this.program.id);

@ -64,7 +64,6 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "@/components/Global/Section/SectionTitle.vue";
import ProgramItem from "./Item.vue"; import ProgramItem from "./Item.vue";
import FiltersModal from "./Modals/FiltersModal.vue"; import FiltersModal from "./Modals/FiltersModal.vue";
import ProgramDetailModal from "./Modals/Detail.vue"; import ProgramDetailModal from "./Modals/Detail.vue";
@ -74,7 +73,6 @@ import { mapGetters, mapActions, mapMutations } from "vuex";
import { UserStorage } from "@/utils/storage"; import { UserStorage } from "@/utils/storage";
export default { export default {
components: { components: {
SectionTitle,
ProgramItem, ProgramItem,
FiltersModal, FiltersModal,
ProgramDetailModal, ProgramDetailModal,

@ -7,7 +7,7 @@
> >
<template #header> <template #header>
<div class="close__modal"> <div class="close__modal">
<v-icon class="WMi-cancel-1" large @click="$_closeModal()"></v-icon> <v-icon class="WMi-cancel-linear" @click="$_closeModal()"></v-icon>
</div> </div>
</template> </template>
<template #default> <template #default>
@ -70,7 +70,7 @@
</div> </div>
</template> </template>
<template #footer> <template #footer>
<div class="d-flex justify-space-between align-items-center w-100 px-4"> <div class="d-flex justify-space-between align-items-center w-100 px-4">
<RectangleButton <RectangleButton
class="btn__modal--cancel pl-0" class="btn__modal--cancel pl-0"
text="cancel" text="cancel"
@ -91,7 +91,6 @@
</basic-modal> </basic-modal>
</template> </template>
<script> <script>
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import { cloneDeep } from "lodash"; import { cloneDeep } from "lodash";
import { mapMutations, mapGetters } from "vuex"; import { mapMutations, mapGetters } from "vuex";
let defaultFilter = { let defaultFilter = {
@ -115,7 +114,6 @@ let defaultFilter = {
}; };
export default { export default {
name: "modal_filters", name: "modal_filters",
components: { SectionTitle },
data: () => ({ data: () => ({
filter: cloneDeep(defaultFilter), filter: cloneDeep(defaultFilter),
programStatus: [ programStatus: [

@ -38,11 +38,9 @@
</template> </template>
<script> <script>
import { mapActions, mapGetters, mapMutations } from "vuex"; import { mapActions, mapGetters, mapMutations } from "vuex";
import SectionTitle from "../Global/Section/SectionTitle.vue";
import TraineeProgramItem from "./Item.vue"; import TraineeProgramItem from "./Item.vue";
export default { export default {
components: { components: {
SectionTitle,
TraineeProgramItem, TraineeProgramItem,
}, },
computed: { computed: {

@ -1,7 +1,7 @@
<template> <template>
<div class="user__card"> <div class="user__card">
<v-row> <v-row>
<v-col cols="3" @click="openUserDetailModal"> <v-col class="cursor-pointer" cols="3" @click="openUserDetailModal">
<div class="d-flex align-center h-100" style="overflow: hidden"> <div class="d-flex align-center h-100" style="overflow: hidden">
<div style="line-height: 14px"> <div style="line-height: 14px">
<div class="user__name wa__f__m__eb"> <div class="user__name wa__f__m__eb">

@ -63,7 +63,6 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ChangeRoleModal from "./Modals/ChangeRoleModal.vue"; import ChangeRoleModal from "./Modals/ChangeRoleModal.vue";
import FiltersModal from "./Modals/FiltersModal.vue"; import FiltersModal from "./Modals/FiltersModal.vue";
import UserDetailModal from "./Modals/Detail.vue"; import UserDetailModal from "./Modals/Detail.vue";
@ -73,7 +72,6 @@ import { UserStorage } from "@/utils/storage";
export default { export default {
components: { components: {
SectionTitle,
UserItem, UserItem,
ChangeRoleModal, ChangeRoleModal,
FiltersModal, FiltersModal,

@ -2,7 +2,7 @@
<basic-modal @open="openModal" width="458" transition="slide-x-transition"> <basic-modal @open="openModal" width="458" transition="slide-x-transition">
<template #header> <template #header>
<div class="close__modal"> <div class="close__modal">
<v-icon class="WMi-cancel-1" large @click="$_closeModal()"></v-icon> <v-icon class="WMi-cancel-linear" @click="$_closeModal()"></v-icon>
</div> </div>
</template> </template>
<template #default> <template #default>
@ -51,11 +51,9 @@
</template> </template>
<script> <script>
import { mapActions } from "vuex"; import { mapActions } from "vuex";
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import toast from "@/utils/toast"; import toast from "@/utils/toast";
export default { export default {
name: "modal_changeRole", name: "modal_changeRole",
components: { SectionTitle },
props: { props: {
userId: {}, userId: {},
}, },

@ -8,7 +8,7 @@
> >
<template #header> <template #header>
<div class="close__modal"> <div class="close__modal">
<v-icon class="WMi-cancel-1" large @click="$_closeModal()"></v-icon> <v-icon class="WMi-cancel-linear" @click="$_closeModal()"></v-icon>
</div> </div>
</template> </template>
<template #default> <template #default>
@ -83,7 +83,6 @@
</basic-modal> </basic-modal>
</template> </template>
<script> <script>
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import { mapMutations, mapGetters } from "vuex"; import { mapMutations, mapGetters } from "vuex";
import { cloneDeep } from "lodash"; import { cloneDeep } from "lodash";
import { UserStorage } from "@/utils/storage"; import { UserStorage } from "@/utils/storage";
@ -104,7 +103,6 @@ let defaultFilter = {
}; };
export default { export default {
name: "modal_filters", name: "modal_filters",
components: { SectionTitle },
data: () => ({ data: () => ({
filter: cloneDeep(defaultFilter), filter: cloneDeep(defaultFilter),
role: UserStorage.getRole() ? UserStorage.getRole() : null, role: UserStorage.getRole() ? UserStorage.getRole() : null,

@ -178,7 +178,6 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ImageCropper from "../Global/Input/ImageCropper.vue"; import ImageCropper from "../Global/Input/ImageCropper.vue";
import FileRepository from "../../abstraction/repository/fileRepository"; import FileRepository from "../../abstraction/repository/fileRepository";
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from "vuex";
@ -188,7 +187,6 @@ const RANDOM_TOKEN = makeid(50);
export default { export default {
components: { components: {
SectionTitle,
ImageCropper, ImageCropper,
}, },
data: () => ({ data: () => ({

@ -13,7 +13,7 @@
? workout.thumbnail ? workout.thumbnail
: 'https://via.placeholder.com/1280x720' : 'https://via.placeholder.com/1280x720'
" "
alt="product image" alt="workout image"
/> />
</v-col> </v-col>
<v-col cols="8"> <v-col cols="8">

@ -59,7 +59,6 @@
</template> </template>
<script> <script>
import WorkoutItem from "./Item"; import WorkoutItem from "./Item";
import SectionTitle from "@/components/Global/Section/SectionTitle.vue";
import FiltersModal from "./Modals/FiltersModal.vue"; import FiltersModal from "./Modals/FiltersModal.vue";
import DetailModal from "./Modals/Detail.vue"; import DetailModal from "./Modals/Detail.vue";
import AppSectionModal from "@/components/Global/Modal/AppSection.vue"; import AppSectionModal from "@/components/Global/Modal/AppSection.vue";
@ -67,7 +66,6 @@ import { mapGetters, mapActions, mapMutations } from "vuex";
export default { export default {
components: { components: {
WorkoutItem, WorkoutItem,
SectionTitle,
FiltersModal, FiltersModal,
DetailModal, DetailModal,
AppSectionModal, AppSectionModal,

@ -7,7 +7,7 @@
> >
<template #header> <template #header>
<div class="close__modal"> <div class="close__modal">
<v-icon class="WMi-cancel-1" large @click="$_closeModal()"></v-icon> <v-icon class="WMi-cancel-linear" @click="$_closeModal()"></v-icon>
</div> </div>
</template> </template>
<template #default> <template #default>
@ -70,7 +70,6 @@
</basic-modal> </basic-modal>
</template> </template>
<script> <script>
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import { cloneDeep } from "lodash"; import { cloneDeep } from "lodash";
import { mapMutations, mapGetters } from "vuex"; import { mapMutations, mapGetters } from "vuex";
@ -88,7 +87,6 @@ const defaultFilter = {
export default { export default {
name: "modal_filters", name: "modal_filters",
components: { SectionTitle },
data: () => ({ data: () => ({
filter: cloneDeep(defaultFilter), filter: cloneDeep(defaultFilter),
}), }),

@ -49,14 +49,12 @@
</div> </div>
</template> </template>
<script> <script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import WorkoutsSeriesItem from "./Item.vue"; import WorkoutsSeriesItem from "./Item.vue";
import AttachWorkoutModal from "./Modals/AttachWorkoutModal.vue"; import AttachWorkoutModal from "./Modals/AttachWorkoutModal.vue";
import { mapGetters, mapActions, mapMutations } from "vuex"; import { mapGetters, mapActions, mapMutations } from "vuex";
export default { export default {
components: { components: {
SectionTitle,
WorkoutsSeriesItem, WorkoutsSeriesItem,
AttachWorkoutModal, AttachWorkoutModal,
}, },

@ -9,7 +9,7 @@
> >
<template #header> <template #header>
<div class="close__modal"> <div class="close__modal">
<v-icon class="WMi-cancel-1" large @click="$_closeModal()"></v-icon> <v-icon class="WMi-cancel-linear" @click="$_closeModal()"></v-icon>
</div> </div>
</template> </template>
<template #default> <template #default>
@ -123,7 +123,6 @@
</basic-modal> </basic-modal>
</template> </template>
<script> <script>
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import AddWorkoutsItem from "../Item.vue"; import AddWorkoutsItem from "../Item.vue";
import { mapActions, mapGetters, mapMutations } from "vuex"; import { mapActions, mapGetters, mapMutations } from "vuex";
import { cloneDeep } from "lodash"; import { cloneDeep } from "lodash";
@ -139,7 +138,7 @@ const defaultFilter = {
}; };
export default { export default {
name: "modal_add_workout", name: "modal_add_workout",
components: { SectionTitle, AddWorkoutsItem }, components: { AddWorkoutsItem },
data: () => ({ data: () => ({
filter: cloneDeep(defaultFilter), filter: cloneDeep(defaultFilter),
search: null, search: null,

@ -37,9 +37,10 @@ const urls = {
// join workout to series // join workout to series
joinWorkoutToSeries: "trainer/series/:series/workout/:workout", joinWorkoutToSeries: "trainer/series/:series/workout/:workout",
destroyWorkoutFromSeries: "trainer/series/:series/workout/:workout", destroyWorkoutFromSeries: "trainer/series/:series/workout/:workout",
// series // programs -> series
indexSeries: "trainer/courses/:course/series", indexSeries: "trainer/courses/:course/series",
storeSeries: "trainer/course/:course/series", storeSeries: "trainer/course/:course/series",
updateSeries: "trainer/series/:series",
destroySeries: "trainer/series/:series", destroySeries: "trainer/series/:series",
// programs -> series -> workouts // programs -> series -> workouts
indexSeriesWorkouts: "trainer/courses/:course/series/:series/workouts", indexSeriesWorkouts: "trainer/courses/:course/series/:series/workouts",

@ -26,6 +26,11 @@ export default {
return resource return resource
} }
}, },
async updateSeriesToProgram({ commit }, { data, seriesId }) {
let repository = new ProgramSeriesRepository();
const resource = await repository.update(data, seriesId);
commit("UPDATE_SERIES_TO_PROGRAM", resource);
},
async deleteSeriesFromProgram({ commit }, seriesId) { async deleteSeriesFromProgram({ commit }, seriesId) {
let repository = new ProgramSeriesRepository(); let repository = new ProgramSeriesRepository();
await repository.delete(seriesId); await repository.delete(seriesId);

@ -55,14 +55,15 @@ export default {
const resource = await repository.update(data.id, data); const resource = await repository.update(data.id, data);
commit("UPDATE_PROGRAM", resource); commit("UPDATE_PROGRAM", resource);
}, },
async deleteProgram({ commit }, courseId) { async deleteProgram({ commit }, { courseId, isStarted }) {
let repository = new ProgramRepository(); let repository = new ProgramRepository();
if (role === 'admin') { if (role === 'admin') {
await repository.delete(courseId); await repository.delete(courseId);
} else { } else {
await repository.deleteTrainer(courseId); await repository.deleteTrainer(courseId);
} }
commit('DELETE_PROGRAM', courseId); console.log('is started', isStarted);
!isStarted && commit('DELETE_PROGRAM', courseId);
}, },
async verifyProgram({ commit }, courseId) { async verifyProgram({ commit }, courseId) {
let repository = new ProgramRepository(); let repository = new ProgramRepository();

@ -1,9 +1,11 @@
import SportCategoryRepository from "@/abstraction/repository/sportCategoryRepository"; import SportCategoryRepository from "@/abstraction/repository/sportCategoryRepository";
import { UserStorage } from "@/utils/storage";
let role = UserStorage.getRole() ? UserStorage.getRole() : null;
export default { export default {
async loadSportCategories({ commit }) { async loadSportCategories({ commit }, parentId) {
let repository = new SportCategoryRepository(); let repository = new SportCategoryRepository();
const resource = await repository.index(); const resource = role === 'admin' ? await repository.index({ parent_id: parentId }) : await repository.trainerIndex({ parent_id: parentId });
commit("SET_SPORT_CATEGORIES", resource.data); parentId ? commit("SET_SUB_SPORT_CATEGORIES", resource.data) : commit("SET_SPORT_CATEGORIES", resource.data);
}, },
async loadSportCategory({ commit }, sportCategoryId) { async loadSportCategory({ commit }, sportCategoryId) {
let repository = new SportCategoryRepository(); let repository = new SportCategoryRepository();

@ -1,4 +1,5 @@
export default { export default {
getSportCategories: state => state.sportCategories, getSportCategories: state => state.sportCategories,
getSubSportCategories: state => state.subSportCategories,
getSportCategory: state => state.sportCategory, getSportCategory: state => state.sportCategory,
} }

@ -3,6 +3,9 @@ export default {
SET_SPORT_CATEGORIES(state, payload) { SET_SPORT_CATEGORIES(state, payload) {
Vue.set(state, "sportCategories", payload); Vue.set(state, "sportCategories", payload);
}, },
SET_SUB_SPORT_CATEGORIES(state, payload) {
Vue.set(state, "subSportCategories", payload);
},
SET_SPORT_CATEGORY(state, payload) { SET_SPORT_CATEGORY(state, payload) {
Vue.set(state, "sportCategory", payload); Vue.set(state, "sportCategory", payload);
}, },

@ -1,4 +1,5 @@
export default { export default {
sportCategories: [], sportCategories: [],
sportCategory: [] subSportCategories: [],
sportCategory: [],
}; };

@ -24,7 +24,9 @@ ul {
a { a {
text-decoration: none !important; text-decoration: none !important;
} }
.cursor-pointer {
cursor: pointer !important;
}
.wa__link a { .wa__link a {
text-decoration: none; text-decoration: none;
display: block; display: block;

Loading…
Cancel
Save