sajjad 3 years ago
parent 87f2c240fd
commit 66c8d2139b

@ -12,7 +12,7 @@
<script>
import BgImage from "./assets/Untitled-1.jpg";
import { UserStorage } from "@/utils/storage";
import { UserStorage, TokenStorage } from "@/utils/storage";
import ProfileRepository from "./abstraction/repository/profileRepository";
import { getJson } from "./abstraction/resources/userResource";
export default {
@ -21,11 +21,12 @@ export default {
bgImage: BgImage,
}),
async created() {
let repository = new ProfileRepository();
let resource = await repository.show();
console.log("resource", resource);
let res = getJson(resource);
UserStorage.save(res);
if (TokenStorage.hasToken()) {
let repository = new ProfileRepository();
let resource = await repository.show();
let res = getJson(resource);
UserStorage.save(res);
}
},
};
</script>

@ -18,7 +18,6 @@ export default class BookmarkRepository {
}
}
async deleteBookmark(bookmarkId) {
console.log(bookmarkId);
await axios.delete(url("destroyBookmark", { bookmark: bookmarkId }));
}
}

@ -10,8 +10,8 @@
<v-col cols="12">
<div class="">
<div class="text-left description">
here is dashboard home, feel free navigate from right side menu
or choose from shortcuts we prepared for you.
here is dashboard home, feel free navigate from right side menu or choose
from shortcuts we prepared for you.
</div>
</div>
</v-col>
@ -25,13 +25,13 @@
<box text="programs" link="programs" icon="WMi-align-left" />
</div>
<div class="mr-5 section">
<box text="products" link="dashboard" icon="WMi-brush" />
<box text="products" link="products" icon="WMi-brush" />
</div>
<div class="mr-5 section">
<box text="trainers" link="users" icon=" WMi-account-off" />
<box text="trainers" icon="WMi-account-off" @click.native="trainersList" />
</div>
<div class="mr-5 section">
<box text="trainees" link="users" icon="WMi-users" />
<box text="trainees" icon="WMi-users" @click.native="traineesList" />
</div>
</div>
</div>
@ -40,8 +40,8 @@
<v-col cols="12">
<div class="d-flex justify-center pr-16">
<div class="text-left description">
and here is some state we hope it gives you a great overview of
your status
and here is some state we hope it gives you a great overview of your
status
</div>
</div>
</v-col>
@ -50,30 +50,22 @@
<v-col cols="12" sm="3"
><Notification
text="total trainees"
:quantity="
statistics.trainees_count ? statistics.trainees_count : 0
"
:quantity="statistics.trainees_count ? statistics.trainees_count : 0"
/></v-col>
<v-col cols="12" sm="3"
><Notification
text="total trainers"
:quantity="
statistics.trainers_count ? statistics.trainers_count : 0
"
:quantity="statistics.trainers_count ? statistics.trainers_count : 0"
/></v-col>
<v-col cols="12" sm="3"
><Notification
text="total programs"
:quantity="
statistics.courses_count ? statistics.courses_count : 0
"
:quantity="statistics.courses_count ? statistics.courses_count : 0"
/></v-col>
<v-col cols="12" sm="3"
><Notification
text="moves defined"
:quantity="
statistics.workouts_count ? statistics.workouts_count : 0
"
:quantity="statistics.workouts_count ? statistics.workouts_count : 0"
/></v-col>
</v-row>
</div>
@ -87,8 +79,8 @@
<v-col cols="12">
<div class="">
<div class="text-left description">
here is your dashboard home, feel free navigate from right side
menu or choose from shortcuts we prepared for you.
here is your dashboard home, feel free navigate from right side menu or
choose from shortcuts we prepared for you.
</div>
</div>
</v-col>
@ -114,8 +106,8 @@
<v-col cols="12">
<div class="d-flex justify-center pr-16">
<div class="text-left description">
and here is some stats we hope it gives you a great overview of
your status
and here is some stats we hope it gives you a great overview of your
status
</div>
</div>
</v-col>
@ -125,9 +117,7 @@
<div class="mr-16">
<Notification
text="total trainees"
:quantity="
statistics.trainees_count ? statistics.trainees_count : 0
"
:quantity="statistics.trainees_count ? statistics.trainees_count : 0"
/>
</div>
</div>
@ -135,9 +125,7 @@
<div class="ml-16">
<Notification
text="total programs"
:quantity="
statistics.courses_count ? statistics.courses_count : 0
"
:quantity="statistics.courses_count ? statistics.courses_count : 0"
/>
</div>
</div>
@ -153,8 +141,8 @@
<v-col cols="12">
<div class="">
<div class="text-left description">
here is your dashboard home, feel free navigate from right side
menu or choose from shortcuts we prepared for you.
here is your dashboard home, feel free navigate from right side menu or
choose from shortcuts we prepared for you.
</div>
</div>
</v-col>
@ -165,7 +153,7 @@
<box text="bookmarks" link="bookmarks" icon="WMi-bookmark" />
</div>
<div class="mr-5 section">
<box text="programs" link="trainPrograms" icon="WMi-align-left" />
<box text="programs" link="trainsPrograms" icon="WMi-align-left" />
</div>
<div class="mr-5 section">
<box text="profile" link="profile" icon="WMi-user" />
@ -177,8 +165,8 @@
<v-col cols="12">
<div class="d-flex justify-center pr-16">
<div class="text-left description">
and here is some stats we hope it gives you a great overview of
your status
and here is some stats we hope it gives you a great overview of your
status
</div>
</div>
</v-col>
@ -189,9 +177,7 @@
<Notification
text="programs joined"
:quantity="
statistics.joined_courses_count
? statistics.joined_courses_count
: 0
statistics.joined_courses_count ? statistics.joined_courses_count : 0
"
/>
</div>
@ -201,9 +187,7 @@
<Notification
text="moves done"
:quantity="
statistics.total_series_done
? statistics.total_series_done
: 0
statistics.total_series_done ? statistics.total_series_done : 0
"
/>
</div>
@ -213,13 +197,14 @@
<!-- /trainee role -->
</main-back>
</div>
</template>
</template>
<script>
import Box from "../Global/Section/Box.vue";
import Notification from "../Global/Section/Notification.vue";
import UserName from "../Global/Section/UserName.vue";
import { UserStorage } from "@/utils/storage";
import StatisticRepository from "@/abstraction/repository/statisticRepository.js";
import { mapMutations, mapState } from "vuex";
export default {
components: {
UserName,
@ -230,7 +215,11 @@ export default {
type: UserStorage.get() ? UserStorage.get().type : null,
statistics: {},
}),
computed: {
...mapState("users", ["filters"]),
},
methods: {
...mapMutations("users", ["SET_FILTER_USER"]),
async loadStatistic() {
let repository = new StatisticRepository();
this.statistics =
@ -242,6 +231,36 @@ export default {
? await repository.indexTrainee()
: false;
},
trainersList() {
// this.SET_FILTER_USER({});
// this.SET_FILTER_USER({
// role_name: {
// type: "in",
// val: "trainer",
// },
// });
this.$router.push({
name: "users",
query: {
role_name: "trainer",
},
});
},
traineesList() {
// this.SET_FILTER_USER({});
// this.SET_FILTER_USER({
// role_name: {
// type: "in",
// val: "trainee",
// },
// });
this.$router.push({
name: "users",
query: {
role_name: "trainee",
},
});
},
},
created() {
this.loadStatistic();
@ -263,4 +282,4 @@ export default {
margin-left: 0;
}
}
</style>
</style>

@ -1,6 +1,6 @@
<template>
<div class="wa__link pa-3">
<router-link :to="{ name: link }">
<router-link :tag="link ? 'a' : 'div'" :to="{ name: link }" :disabled="!link">
<div class="dark icon"><i :class="icon"></i></div>
<div class="mt-1 text__link">
{{ text }}
@ -32,4 +32,4 @@ export default {
text-align: center;
font-size: 21px;
}
</style>
</style>

@ -110,8 +110,8 @@ export default {
{
id: 3,
text: "my programs",
link: "trainPrograms",
active: this.$route.name === "trainPrograms",
link: "trainsPrograms",
active: this.$route.name === "trainsPrograms",
},
{
id: 4,
@ -142,8 +142,8 @@ export default {
{
id: 3,
text: "my programs",
link: "trainPrograms",
active: this.$route.name === "trainPrograms",
link: "trainsPrograms",
active: this.$route.name === "trainsPrograms",
},
{
id: 5,
@ -155,8 +155,5 @@ export default {
return menuItems;
},
},
created() {
console.log(this.$route.name);
},
};
</script>

@ -85,9 +85,6 @@ export default {
methods: {
...mapActions("programs", ["verifyProgram", "deleteProgram"]),
},
created() {
console.log(this.program);
},
};
</script>
<style scoped>

@ -19,7 +19,7 @@
height="54"
size="x-large"
:text-mode="true"
text="2"
:text="getFilterCount ? getFilterCount : '0'"
@click.native="$_openModal('filters')"
/>
<router-link :to="{ name: 'addProgram' }" class="text-decoration-none">
@ -49,7 +49,7 @@
</div>
</main-back>
<div class="text-center">
<FiltersModal @filter="load" @filterCount="filterCount($event)" />
<FiltersModal @filter="load" />
</div>
</div>
</template>
@ -58,7 +58,7 @@ import FiltersModal from "./Modals/FiltersModal.vue";
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ProgramItem from "./Item.vue";
import { mapGetters, mapActions, mapMutations } from "vuex";
import _ from "lodash";
// import _ from "lodash";
export default {
components: {
SectionTitle,
@ -66,7 +66,7 @@ export default {
FiltersModal,
},
computed: {
...mapGetters("programs", ["getPrograms", "getPaginationProgram"]),
...mapGetters("programs", ["getPrograms", "getPaginationProgram", "getFilterCount"]),
},
methods: {
...mapActions("programs", ["loadPrograms"]),
@ -80,14 +80,14 @@ export default {
async load() {
await this.loadPrograms();
},
filterCount(event) {
const atLeast9Wins = _.flow([
Object.entries,
(arr) => arr.filter(([, value]) => value.val !== null),
Object.fromEntries,
])(event);
console.log(atLeast9Wins);
},
// filterCount(event) {
// const filterLength = _.flow([
// Object.entries,
// (arr) => arr.filter(([, value]) => value.val !== null),
// Object.fromEntries,
// ])(event);
// console.log(filterLength, Object.keys(filterLength).length);
// },
},
created() {
this.load();

@ -26,7 +26,6 @@
placeholder="course name"
label="course name"
v-model="filter.title.val"
ref="filter"
></v-text-field>
</div>
</div>
@ -37,7 +36,6 @@
placeholder="mentor name"
label="mentor name"
v-model="filter.first_name.val"
ref="filter"
></v-text-field>
</div>
</div>
@ -51,7 +49,6 @@
item-text="text"
item-value="verified"
v-model="filter.verified.val"
ref="filter"
></v-autocomplete>
</div>
</div>
@ -61,7 +58,6 @@
class="no-error-msg"
label="date, after"
v-model="filter.created_at.val1"
ref="filter"
/>
</div>
</div>
@ -71,7 +67,6 @@
class="no-error-msg"
label="date, before"
v-model="filter.created_at.val2"
ref="filter"
/>
</div>
</div>
@ -146,7 +141,6 @@ export default {
...mapMutations("programs", ["SET_FILTER_PROGRAMS"]),
filterPrograms() {
this.SET_FILTER_PROGRAMS(this.filter);
console.log("this.$refs.filter.value", this.$refs.filter);
this.$emit("filter");
this.$emit("filterCount", this.filter);
this.$_closeModal();

@ -13,15 +13,20 @@
/>
</div>
</div>
<v-row class="mt-4">
<v-col
class="pr-0 pt-0 pb-1"
v-for="(trainProgram, i) in getPrograms"
:key="i"
cols="12"
><TrainProgramItem :program="trainProgram"
/></v-col>
</v-row>
<template v-if="getPrograms.length">
<v-row class="mt-4">
<v-col
class="pr-0 pt-0 pb-1"
v-for="(trainProgram, i) in getPrograms"
:key="i"
cols="12"
><TrainProgramItem :program="trainProgram"
/></v-col>
</v-row>
</template>
<template v-else>
<div class="text-center mt-10">There are no items to display</div>
</template>
</div>
</main-back>
</div>
@ -35,26 +40,6 @@ export default {
SectionTitle,
TrainProgramItem,
},
data: () => ({
trainPrograms: [
{
name: "My gym program",
text: "Forearm and chest",
sets: 3,
workout: 12,
started_in: "25-12-2021",
done: 80,
},
{
name: "basic yoga",
text: "for relaxation",
sets: 1,
workout: 3,
started_in: "25-12-2019",
done: 20,
},
],
}),
computed: {
...mapGetters("userPrograms", ["getPrograms"]),
},
@ -65,4 +50,4 @@ export default {
await this.loadPrograms();
},
};
</script>
</script>

@ -89,9 +89,6 @@ export default {
});
},
},
created() {
console.log(this.user);
},
};
</script>
<style scoped>

@ -19,33 +19,34 @@
size="x-large"
height="54"
:text-mode="true"
text="2"
:text="getFilterCount ? getFilterCount : '0'"
@click.native="$_openModal('filters')"
/>
</div>
</div>
<v-row v-for="(user, i) in getUsers" :key="i" class="mt-4">
<v-col cols="12"><UserItem :user="user" @userId="userId" /></v-col>
</v-row>
</div>
<div class="text-center mt-40 mb-5">
<pagination
:pagination="getPaginationUser"
@pagination="changePagination"
/>
<pagination :pagination="getPaginationUser" @pagination="changePagination" />
</div>
</main-back>
<div class="text-center">
<ChangeRoleModal :userId="id" /><FiltersModal @filter="load" />
<ChangeRoleModal :allRoles="getRoles" :userId="id" /><FiltersModal
@filter="load"
:allRoles="getRoles"
/>
</div>
</div>
</template>
</template>
<script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ChangeRoleModal from "./Modals/ChangeRoleModal.vue";
import FiltersModal from "./Modals/FiltersModal.vue";
import UserItem from "./Item.vue";
import { mapActions, mapGetters, mapMutations } from "vuex";
import { mapActions, mapGetters, mapMutations, mapState } from "vuex";
import { UserStorage } from "@/utils/storage";
export default {
@ -60,10 +61,16 @@ export default {
id: null,
}),
computed: {
...mapGetters("users", ["getUsers", "getPaginationUser"]),
...mapGetters("users", [
"getUsers",
"getPaginationUser",
"getRoles",
"getFilterCount",
]),
...mapState("users", ["filters"]),
},
methods: {
...mapActions("users", ["loadUsers", "loadTrainerTrainee"]),
...mapActions("users", ["loadUsers", "loadTrainerTrainee", "laodRoles"]),
...mapMutations("users", ["SET_PAGINATION"]),
changePagination(page) {
if (this.getPaginationUser.page !== page) {
@ -72,16 +79,18 @@ export default {
}
},
async load() {
this.type === "admin"
? await this.loadUsers()
: await this.loadTrainerTrainee();
this.type === "admin" ? await this.loadUsers() : await this.loadTrainerTrainee();
},
userId(id) {
this.id = id;
},
},
created() {
this.load();
async created() {
if (!this.$route.query.role_name) {
this.load();
}
await this.laodRoles();
this.getRoles.push({ id: 0, name: "trainee" });
},
};
</script>
</script>

@ -52,38 +52,36 @@
</basic-modal>
</template>
<script>
import { mapActions, mapGetters } from "vuex";
import { mapActions } from "vuex";
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import toast from "@/utils/toast";
export default {
name: "modal_changeRole",
components: { SectionTitle },
props: {
allRoles: {
type: Array,
},
userId: {},
},
data: () => ({
allRoles: [],
role_id: null,
currectRoleId: null,
}),
computed: {
...mapGetters("users", ["getRoles"]),
form() {
return { userId: this.userId };
},
},
methods: {
...mapActions("users", ["laodRoles", "updateRole"]),
...mapActions("users", ["updateRole"]),
openModal({ role }) {
this.currectRoleId = role ? role : 0;
this.role_id = role ? role : 0;
console.log("this.form", this.form);
},
change() {
this.form.roles_id = [];
this.form.roles_id.push(this.role_id);
console.log(this.form.roles_id);
console.log(this.role_id);
},
async changeRole() {
if (this.form.roles_id) {
@ -103,11 +101,6 @@ export default {
}
},
},
async created() {
await this.laodRoles();
this.allRoles = this.getRoles;
this.allRoles.push({ id: 0, name: "trainee" });
},
};
</script>
<style scoped>

@ -29,7 +29,7 @@
></v-text-field>
</div>
</div>
<div class="my-6">
<div class="my-6" v-if="type === 'admin'">
<div>
<v-autocomplete
class="no-error-msg pt-0"
@ -88,8 +88,9 @@
</template>
<script>
import SectionTitle from "../../Global/Section/SectionTitle.vue";
import { mapActions, mapGetters, mapMutations } from "vuex";
import { mapMutations } from "vuex";
import { cloneDeep } from "lodash";
import { UserStorage } from "@/utils/storage";
const defaultFilter = {
first_name: {
type: "like",
@ -110,14 +111,14 @@ export default {
components: { SectionTitle },
data: () => ({
filter: cloneDeep(defaultFilter),
allRoles: null,
type: UserStorage.get() ? UserStorage.get().type : null,
}),
computed: {
...mapGetters("users", ["getRoles"]),
props: {
allRoles: {},
},
methods: {
...mapMutations("users", ["SET_FILTER_USER"]),
...mapActions("users", ["laodRoles"]),
// ...mapActions("users", ["laodRoles"]),
filterUser() {
this.SET_FILTER_USER(this.filter);
this.$emit("filter");
@ -130,10 +131,11 @@ export default {
this.$_closeModal();
},
},
async created() {
await this.laodRoles();
this.allRoles = this.getRoles;
this.allRoles.push({ id: 0, name: "trainee" });
created() {
if (this.$route.query.role_name) {
this.filter.role_name.val = this.$route.query.role_name;
this.filterUser();
}
},
};
</script>

@ -18,12 +18,10 @@
icon-right="WMi-filter"
class="custom-btn filter-btn mr-2"
height="54"
text="2"
:text="getFilterCount ? getFilterCount : '0'"
@click.native="$_openModal('filters')"
/>
<router-link
class="text-decoration-none"
:to="{ name: 'addWorkout' }"
<router-link class="text-decoration-none" :to="{ name: 'addWorkout' }"
><RectangleButton
size="xx-large"
icon="WMi-plus"
@ -32,23 +30,25 @@
/></router-link>
</div>
</div>
<v-row class="mt-10">
<v-col
cols="12"
md="6"
class="mb-3"
v-for="workout in getWorkouts"
:key="workout.id"
><WorkoutItem :workout="workout"
/></v-col>
</v-row>
<template v-if="getWorkouts.length">
<v-row class="mt-10">
<v-col
cols="12"
md="6"
class="mb-3"
v-for="workout in getWorkouts"
:key="workout.id"
><WorkoutItem :workout="workout"
/></v-col>
</v-row>
</template>
</div>
<div class="text-center mt-40 mb-5">
<pagination
:pagination="getPaginationWorkout"
@pagination="changePagination"
/>
<div class="text-center mt-40 mb-5" v-if="getWorkouts.length">
<pagination :pagination="getPaginationWorkout" @pagination="changePagination" />
</div>
<template v-if="!getWorkouts.length">
<div class="text-center">There are no items to display</div>
</template>
</main-back>
<div class="text-center"><FiltersModal @filter="load" /></div>
</div>
@ -65,7 +65,7 @@ export default {
FiltersModal,
},
computed: {
...mapGetters("workouts", ["getWorkouts", "getPaginationWorkout"]),
...mapGetters("workouts", ["getWorkouts", "getPaginationWorkout", "getFilterCount"]),
},
methods: {
...mapActions("workouts", ["loadWorkouts"]),
@ -84,4 +84,4 @@ export default {
this.load();
},
};
</script>
</script>

@ -93,9 +93,6 @@ export default {
});
},
},
created() {
console.log(this.seriesWorkout);
}
};
</script>
<style scoped>

@ -63,15 +63,17 @@ function beforeLoad() {
setTitle(to);
const auth = to.meta && to.meta.auth ? to.meta.auth : false;
const roles = to.meta && to.meta.roles ? to.meta.roles : false;
const onlyWhenLoggedOut = to.matched.some((record) => record.meta.onlyWhenLoggedOut);
const loggedIn = TokenStorage.hasToken();
console.log(auth, loggedIn);
if (auth && !loggedIn) {
router.push({ name: 'login', query: { redirect: to.fullPath } });
}
if (loggedIn && onlyWhenLoggedOut) {
return next('/');
}
if (loggedIn && roles && Array.isArray(roles)) {
const ownType = UserStorage.get() ? UserStorage.get().role : '';
const ownType = UserStorage.get() ? UserStorage.get().type : '';
if (!roles.includes(ownType)) {
router.push({ name: 'dashboard' });
}

@ -3,16 +3,25 @@ export default [
path: '/register',
view: 'Register',
name: 'register',
meta: {
onlyWhenLoggedOut: true
}
},
{
path: '/login',
view: 'Login',
name: 'login',
meta: {
onlyWhenLoggedOut: true
}
},
{
path: '/reset-password',
view: 'PasswordReset',
name: 'passwordReset'
name: 'passwordReset',
meta: {
onlyWhenLoggedOut: true
}
},
{
path: '/',
@ -23,76 +32,91 @@ export default [
{
path: '/users',
view: 'Users',
name: 'users'
name: 'users',
meta: { auth: true, roles: ["admin", "trainer"] }
},
{
path: '/profile',
view: 'Profile',
name: 'profile'
name: 'profile',
meta: { auth: true }
},
{
path: '/workouts',
view: 'Workouts',
name: 'workouts'
name: 'workouts',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/add-program',
view: 'AddProgram',
name: 'addProgram'
name: 'addProgram',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/edit-program/:id?',
view: 'AddProgram',
name: 'editProgram'
name: 'editProgram',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/add-workout',
view: 'AddWorkout',
name: 'addWorkout'
name: 'addWorkout',
meta: { auth: true }
},
{
path: '/edit-workout/:id?',
view: 'AddWorkout',
name: 'editWorkout'
name: 'editWorkout',
meta: { auth: true }
},
{
path: '/programs',
view: 'Programs',
name: 'programs'
name: 'programs',
meta: { auth: true }
},
{
path: '/programs/:id/series',
view: 'ProgramSeries',
name: 'programSeries'
name: 'programSeries',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/programs/:programId/series/:seriesId/workouts',
view: 'WorkoutsSeries',
name: 'workoutsSeries'
name: 'workoutsSeries',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/trains-programs',
view: 'TrainsPrograms',
name: 'trainPrograms'
name: 'trainsPrograms',
},
{
path: '/products',
view: 'Products',
name: 'products'
name: 'products',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/add-product',
view: 'AddProduct',
name: 'addProduct'
name: 'addProduct',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/edit-product/:id?',
view: 'AddProduct',
name: 'editProduct'
name: 'editProduct',
meta: { auth: true, roles: ["admin"] }
},
{
path: '/bookmarks',
view: 'Bookmarks',
name: 'bookmarks'
name: 'bookmarks',
meta: { auth: true }
},
]

@ -1,10 +1,13 @@
import ProgramRepository from "@/abstraction/repository/programRepository";
import { setQuery } from "@/abstraction/resources/programResource";
export default {
async loadPrograms({ state, commit }) {
try {
let data = { pagination: state.pagination, filters: state.filters };
let repository = new ProgramRepository();
const resource = await repository.index(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);
}

@ -1,5 +1,6 @@
export default {
getPrograms: state => state.programs,
getProgram: state => state.program,
getPaginationProgram: state => state.pagination
getPaginationProgram: state => state.pagination,
getFilterCount: state => state.filterCount
};

@ -1,5 +1,6 @@
import Vue from "vue";
export default {
// SETS
SET_PROGRAMS(state, payload) {
Vue.set(state, "programs", payload);
},
@ -9,25 +10,32 @@ export default {
SET_PAGINATION(state, pagination) {
pagination = { ...state.pagination, ...pagination };
Vue.set(state, "pagination", pagination);
console.log('state.pagination', state.pagination);
},
SET_FILTER_PROGRAMS(state, payload) {
Vue.set(state, "filters", payload);
state.pagination.page = 1
},
SET_FILTER_COUNT(state, payload) {
console.log(payload);
Vue.set(state, "filterCount", payload);
},
// ADD
ADD_PROGRAM(state, payload) {
state.programs.push(payload);
},
// UPDATE
UPDATE_PROGRAM(state, payload) {
const index = state.programs.findIndex((x) => x.id === payload.id);
Vue.set(state.programs, index, payload);
},
// DELETE
DELETE_PROGRAM(state, payload) {
const index = state.programs.findIndex((x) => x.id === payload);
Vue.delete(state.programs, index);
Vue.set(state.pagination, 'itemsLength', state.pagination.itemsLength - 1);
Vue.set(state.pagination, 'pageStop', state.pagination.pageStop - 1);
},
// OTHER
VERIFY_PROGRAM(state, payload) {
const index = state.programs.find(x => x.id === payload);
index.verified = !index.verified;

@ -4,5 +4,6 @@ export default {
pagination: {
itemsPerPage: 12
},
filters: {}
filters: {},
filterCount: null
};

@ -1,10 +1,13 @@
import UserRepository from "@/abstraction/repository/userRepository";
import RoleRepository from "@/abstraction/repository/roleRepository";
import { setQuery } from "@/abstraction/resources/userResource";
export default {
async loadUsers({ state, commit }) {
let data = { pagination: state.pagination, filters: state.filters }
let repository = new UserRepository();
const resource = await repository.indexUsers(data);
let filterCount = setQuery({ filters: state.filters })
commit("SET_FILTER_COUNT", Object.keys(filterCount).length);
commit("SET_USERS", resource.data);
commit("SET_PAGINATION", resource.pagination);
},
@ -23,7 +26,6 @@ export default {
async updateRole({ commit }, data) {
let repository = new RoleRepository();
const resource = await repository.update(data);
console.log(resource);
commit("UPDATE_USER", resource);
},
async deleteUser({ commit }, userId) {

@ -1,5 +1,6 @@
export default {
getUsers: state => state.users,
getRoles: state => state.roles,
getPaginationUser: state => state.pagination
getPaginationUser: state => state.pagination,
getFilterCount: state => state.filterCount
};

@ -1,5 +1,6 @@
import Vue from "vue";
export default {
// SET
SET_USERS(state, payload) {
Vue.set(state, "users", payload);
},
@ -14,11 +15,15 @@ export default {
SET_ROLES(state, payload) {
Vue.set(state, "roles", payload);
},
SET_FILTER_COUNT(state, payload) {
Vue.set(state, "filterCount", payload);
},
// UPDATE
UPDATE_USER(state, payload) {
console.log(payload);
const index = state.users.findIndex((x) => x.id === payload.id);
Vue.set(state.users, index, payload);
},
// DELETE
DELETE_USER(state, userId) {
const index = state.users.findIndex((x) => x.id === userId);
Vue.delete(state.users, index);

@ -4,5 +4,6 @@ export default {
pagination: {
itemsPerPage: 12
},
filters: {}
filters: {},
filterCount: null
};

@ -1,10 +1,13 @@
import WorkoutRepository from "@/abstraction/repository/workoutRepository";
import { setQuery } from "@/abstraction/resources/workoutResource";
export default {
async loadWorkouts({ state, commit }) {
try {
let data = { pagination: state.pagination, filters: state.filters };
let repository = new WorkoutRepository();
const resource = await repository.index(data);
let filterCount = setQuery({ filters: state.filters })
commit("SET_FILTER_COUNT", Object.keys(filterCount).length);
commit("SET_WORKOUTS", resource.data);
commit("SET_PAGINATION", resource.pagination);
} catch (e) {

@ -1,5 +1,6 @@
export default {
getWorkouts: state => state.workouts,
getWorkout: state => state.workout,
getPaginationWorkout: state => state.pagination
getPaginationWorkout: state => state.pagination,
getFilterCount: state => state.filterCount
}

@ -1,5 +1,6 @@
import Vue from "vue";
export default {
// SET
SET_WORKOUTS(state, payload) {
Vue.set(state, "workouts", payload);
},
@ -14,13 +15,19 @@ export default {
Vue.set(state, "filters", payload);
state.pagination.page = 1
},
SET_FILTER_COUNT(state, payload) {
Vue.set(state, "filterCount", payload);
},
// ADD
ADD_WORKOUT(state, payload) {
state.workouts.push(payload);
},
// UPDATE
UPDATE_WORKOUT(state, payload) {
const index = state.workouts.findIndex((x) => x.id === payload.id);
Vue.set(state.workouts, index, payload);
},
// DELETE
DELETE_WORKOUT(state, workoutId) {
const index = state.workouts.findIndex((x) => x.id === workoutId);
Vue.delete(state.workouts, index);

@ -4,5 +4,6 @@ export default {
pagination: {
itemsPerPage: 12
},
filters: {}
filters: {},
filterCount: null
};

@ -13,7 +13,7 @@
<div class="auth__subtitle text-uppercase mb-2">
please provide us your login details
</div>
<form>
<v-form @submit.prevent="doLogin">
<v-row>
<v-col cols="12">
<v-text-field
@ -47,7 +47,7 @@
height="25"
:text-mode="true"
text="sign in"
@click.native="doLogin"
type="submit"
/>
</div>
</v-col>
@ -78,7 +78,7 @@
</div>
</v-col>
</v-row>
</form>
</v-form>
</v-col>
</template>
</auth-basic>
@ -111,4 +111,4 @@ export default {
},
},
};
</script>
</script>

@ -13,7 +13,7 @@
<div class="auth__subtitle text-uppercase mb-2">
please provide us this information
</div>
<form>
<v-form @submit.prevent="doRegister">
<v-row>
<v-col cols="12">
<v-text-field
@ -51,6 +51,9 @@
placeholder="password"
label="password"
class="no-error-msg"
:type="showPassword ? 'text' : 'password'"
@click:append="showPassword = !showPassword"
:append-icon="showPassword ? 'WMi-eye-off' : 'WMi-eye'"
dark
v-model="form.password"
></v-text-field>
@ -62,6 +65,9 @@
placeholder="your password again"
label="your password again"
class="no-error-msg"
:type="showPassword ? 'text' : 'password'"
@click:append="showPassword = !showPassword"
:append-icon="showPassword ? 'WMi-eye-off' : 'WMi-eye'"
dark
v-model="form.password_confirmation"
></v-text-field>
@ -75,7 +81,7 @@
height="25"
:text-mode="true"
text="do sign up"
@click.native="doRegister(form)"
type="submit"
/>
</div>
</v-col>
@ -105,7 +111,7 @@
</div>
</v-col>
</v-row>
</form>
</v-form>
</v-col>
</template>
</auth-basic>
@ -125,6 +131,7 @@ export default {
AuthBasic,
},
data: () => ({
showPassword: false,
form: {},
}),
methods: {
@ -137,4 +144,4 @@ export default {
},
},
};
</script>
</script>

@ -22,10 +22,17 @@
</v-container>
</template>
<script>
import { mapState } from 'vuex';
import UsersHome from "../components/Users/Main";
export default {
components: {
UsersHome,
},
computed: {
...mapState('users', ['filters']),
},
created() {
console.log(this.filters);
}
};
</script>
Loading…
Cancel
Save