sajjad_talkhabi 3 years ago
parent 8faee2a129
commit f812140ff1

185
package-lock.json generated

@ -1753,63 +1753,6 @@
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
"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.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"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.nlark.com/ssri/download/ssri-8.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@ -1818,28 +1761,6 @@
"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.7.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.7.1.tgz",
"integrity": "sha512-6dOj/8DQ3lcfLwsFT9X5N1qvaMSqi8zsYTD0hE4iNp7G/mgZ39cgzvwCP3rxDwQD2adl65UmoRxnqBTHrK4u6A==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
}
}
},
@ -3220,6 +3141,11 @@
}
}
},
"classnames": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
"integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
},
"clean-css": {
"version": "4.2.3",
"resolved": "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz",
@ -4152,6 +4078,11 @@
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
},
"debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
"integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="
},
"debug": {
"version": "4.3.2",
"resolved": "https://registry.nlark.com/debug/download/debug-4.3.2.tgz",
@ -4621,6 +4552,11 @@
"stream-shift": "^1.0.0"
}
},
"easy-bem": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/easy-bem/-/easy-bem-1.1.1.tgz",
"integrity": "sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A=="
},
"easy-stack": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.1.tgz?cache=0&sync_timestamp=1605129437999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feasy-stack%2Fdownload%2Feasy-stack-1.0.1.tgz",
@ -11337,6 +11273,16 @@
"resolved": "https://registry.nlark.com/vue/download/vue-2.6.14.tgz?cache=0&sync_timestamp=1631142059062&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue%2Fdownload%2Fvue-2.6.14.tgz",
"integrity": "sha1-5RqlJQJQ1Wmj+606ilpofWA24jU="
},
"vue-advanced-cropper": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/vue-advanced-cropper/-/vue-advanced-cropper-1.8.2.tgz",
"integrity": "sha512-dngjbph+QbqLpk4DWCoCajWcThyy08NorFhMcmrnGFJvdxTFiuJ+XjOtrXhNpDdl7U6E/csrkx6i6E8V+BwmoQ==",
"requires": {
"classnames": "^2.2.6",
"debounce": "^1.2.0",
"easy-bem": "^1.0.2"
}
},
"vue-cli-plugin-vuetify": {
"version": "2.4.2",
"resolved": "https://registry.nlark.com/vue-cli-plugin-vuetify/download/vue-cli-plugin-vuetify-2.4.2.tgz?cache=0&sync_timestamp=1628044997952&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-cli-plugin-vuetify%2Fdownload%2Fvue-cli-plugin-vuetify-2.4.2.tgz",
@ -11428,6 +11374,87 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.1.tgz",
"integrity": "sha512-V53TJbHmzjBhCG5OYI2JWy/aYDspz4oVHKxS43Iy212GjGIG1T3EsB3+GWXFm/1z5VwjdjLmdZUFYM70y77vtQ==",
"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.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"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",

@ -17,6 +17,7 @@
"module-alias": "^2.2.2",
"popper.js": "^1.16.1",
"vue": "^2.6.11",
"vue-advanced-cropper": "^1.8.2",
"vue-meta": "^2.4.0",
"vue-router": "^3.5.2",
"vuetify": "^2.4.0",

@ -0,0 +1,38 @@
// import axios from "axios";
// import url from "@/router/url";
// import { getJson, setData } from "../resources/FileResource";
// export default class FileRepository {
// async store(data) {
// console.log('data', data);
// const formData = setData(data);
// let response = await axios.post(url("storeFile"), formData);
// if (response.status === 200) {
// return getJson(response.data.data);
// }
// }
// async destroy(fileId) {
// let response = await axios.delete(url("destroyFile", {file: fileId}));
// if (response.status === 200) {
// return true;
// }
// }
// async verifyImage(fileId) {
// await axios.post(url("verifyImage",{file:fileId}) );
// }
// async unverifyImage(fileId) {
// await axios.post(url("unverifyImage", {file: fileId}));
// }
// async pdfVerify(imageId) {
// await axios.post(url("pdfVerify",{media:imageId}) );
// }
// async pdfUnVerify(imageId) {
// await axios.post(url("pdfUnVerify",{media:imageId}) );
// }
// }

@ -22,7 +22,7 @@ export default class AuthRepository {
let json = setData(data);
let response = await axios.post(url("register"), json);
if (response.status === 200) {
return response.data.data;
return response.data.user;
}
}

@ -0,0 +1,11 @@
import axios from "axios";
import url from "@/router/url";
import { getArray } from "../resources/sportCategoriesResource";
export default class SportCategoriesRepository {
async index() {
let response = await axios.get(url("indexSportCategories"));
if (response.status === 200) {
return getArray(response.data);
}
}
}

@ -0,0 +1,13 @@
import axios from "axios";
import url from "@/router/url";
import { getArray, setQuery } from "../resources/workoutCategoriesResources";
export default class WorkoutCategoriesRepository {
async index(data) {
let params = setQuery(data);
console.log(params);
let response = await axios.get(url("indexWorkoutCategories"), { params });
if (response.status === 200) {
return getArray(response.data);
}
}
}

@ -0,0 +1,10 @@
import axios from "axios";
import url from "@/router/url";
import { setData } from "../resources/workoutResource.js";
export default class WorkoutRepository {
async store(data) {
let json = setData(data);
let response = await axios.post(url("storeWorkout"), json);
console.log('response', response);
}
}

@ -0,0 +1,16 @@
// import { objectToFormData } from "@/utils/objectToFormData";
// export const getJson = (data) => ({
// id: data.id,
// thumbnail: data.thumbnail,
// image: data.image,
// mime_type: data.mime_type,
// file_name: data.file_name,
// size: data.size,
// });
// export const setData = (data) => (
// objectToFormData({
// file: data.file,
// crop: data.crop,
// }));

@ -0,0 +1,12 @@
export const getJson = (data) => ({
id: data.id,
name: data.name,
local_name: data.local_name,
language_id: data.language_id,
});
export const getArray = ({ data }) => {
data = data.map((category) => getJson(category));
return { data };
};

@ -0,0 +1,16 @@
import { SetQueriesObject } from "@/utils/setQueriesObject";
export const getJson = (data) => ({
id: data.id,
name: data.name,
local_name: data.local_name,
language_id: data.language_id,
});
export const getArray = ({ data }) => {
data = data.map((category) => getJson(category));
return { data };
};
export const setQuery = (data) => {
return SetQueriesObject(data);
};

@ -0,0 +1,19 @@
import { objectToFormData } from "@/utils/objectToFormData";
export const setData = (data, isUpdate = false) => {
let formData = {
workout_category_id: data.workout_category_id,
name: data.name,
local_name: data.local_name,
description: data.description,
video: data.video,
suggested_per_set: data.suggested_per_set,
suggested_set: data.suggested_set,
suggested_time: data.suggested_time,
thumbnail: data.thumbnail,
tags: data.tags,
};
if (isUpdate) {
formData["_method"] = "put";
}
return objectToFormData(formData);
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -15,10 +15,10 @@
<v-col cols="3">
<div class="pb-14 h-100">
<div class="add__workout dark w-100 h-100">
<div class="add__workout__picture d-flex align-center">
<i class="WMi-picture add__workout__picture--icon"></i>
<div class="add__workout__picture--text">select a workout image</div>
</div>
<ImageCropper
:url.sync="form.thumbnail"
label="manager image"
/>
</div>
</div>
</v-col>
@ -26,16 +26,22 @@
<v-row>
<v-col cols="4">
<v-autocomplete
dark
item-text="name"
item-value="id"
label="workout category"
:items="getSportCategories"
@change="changeSportCategories"
></v-autocomplete>
</v-col>
<v-col cols="4">
<v-autocomplete
dark
item-text="name"
item-value="id"
label="workout subcategory"
:items="getWorkoutCategories"
v-model="form.workout_category_id"
></v-autocomplete>
</v-col>
<v-col cols="4"></v-col>
@ -43,25 +49,31 @@
<v-row>
<v-col cols="4"
><v-text-field
dark
placeholder="workout name"
label="workout name"
class="no-error-msg pt-0 mt-0"
v-model="form.name"
></v-text-field>
</v-col>
<v-col cols="8"
><v-text-field
dark
placeholder="a short quote"
label="a short quote"
class="no-error-msg pt-0 mt-0"
v-model="form.title"
></v-text-field
></v-col>
</v-row>
<v-row>
<v-col cols="12">
<v-textarea
dark
rows="3"
label="description"
placeholder="description"
v-model="form.description"
></v-textarea>
</v-col>
</v-row>
@ -73,44 +85,53 @@
<v-row>
<v-col cols="2"
><v-text-field
dark
placeholder="suggested course time?"
label="suggested course time?"
class="no-error-msg pt-0 mt-0"
v-model="form.suggested_time"
></v-text-field
></v-col>
<v-col cols="2"
><v-text-field
dark
placeholder="suggested times each course?"
label="suggested times each course?"
class="no-error-msg pt-0 mt-0"
v-model="form.suggested_set"
></v-text-field
></v-col>
<v-col cols="2"
><v-text-field
dark
placeholder="suggested ESTIMATED TIME"
label="suggested ESTIMATED TIME"
class="no-error-msg pt-0 mt-0"
v-model="form.suggested_per_set"
></v-text-field
></v-col>
<v-col cols="6"
><v-text-field
dark
placeholder="video link"
label="video link"
class="no-error-msg pt-0 mt-0"
v-model="form.video"
></v-text-field
></v-col>
</v-row>
<v-row>
<v-col cols="12">
<v-autocomplete
dark
class="pt-0 multiple"
:items="items"
item-value="id"
item-text="name"
attach
chips
label="model types"
placeholder="model types"
v-model="form.tags"
multiple
></v-autocomplete>
</v-col>
@ -128,6 +149,7 @@
/>
<RectangleButton
text="add the workout"
@click.native="add"
class="custom-btn add-btn"
height="25"
/>
@ -139,18 +161,42 @@
</template>
<script>
import SectionTitle from "../Global/Section/SectionTitle.vue";
import ImageCropper from "../Global/Input/ImageCropper.vue";
import { mapActions, mapGetters } from "vuex";
export default {
components: {
SectionTitle,
ImageCropper,
},
data: () => ({
items: [
{
id: 1,
name: "fkskad",
form: {
get() {
return this.value;
},
],
set(value) {
this.$emit("input", value);
},
},
}),
computed: {
...mapGetters("sportCategories", ["getSportCategories"]),
...mapGetters("workoutCategories", ["getWorkoutCategories"]),
},
methods: {
...mapActions("workouts", ["addWorkout"]),
...mapActions("workoutCategories", ["loadWorkoutCategories"]),
...mapActions("sportCategories", ["loadSportCategories"]),
async add() {
this.addWorkout(this.form);
},
changeSportCategories() {
console.log("change");
this.loadWorkoutCategories();
},
},
created() {
this.loadSportCategories();
},
};
</script>
<style scoped>
@ -163,10 +209,10 @@ export default {
padding-left: 100px !important;
}
.add__workout__picture {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.add__workout__picture--text {
width: max-content;

@ -0,0 +1,104 @@
<template>
<div>
<div class="my-4">
<cropper
:class="{ 'upload-example-cropper': true }"
:stencil-props="stencilProps"
@change="onChangeCropper"
:src="thumbnail"
/>
<!-- <img :src="thumbnail" alt="new brand image"/>-->
</div>
<div class="wa__modal__form">
<div>
<v-file-input
accept="image/png, image/jpeg, image/bmp"
placeholder="Pick an Image"
prepend-icon="mdi-camera"
:label="label"
@change="changeImage"
:dark="dark"
></v-file-input>
</div>
</div>
</div>
</template>
<script>
import { Cropper } from "vue-advanced-cropper";
import DefaultImage from "../../../assets/600x600.png";
import "vue-advanced-cropper/dist/style.css";
export default {
components: {
Cropper,
},
props: {
url: {
default: DefaultImage,
},
value: {
default: () => ({}),
},
stencilProps: {
default: () => ({ aspectRatio: 1, checkImageOrigin: false }),
},
crop: {
default: () => [],
},
label: {
default: "",
},
dark: {
default: true,
},
},
computed: {
form: {
get() {
return this.value;
},
set(value) {
this.$emit("input", value);
},
},
thumbnail: {
get() {
return this.url;
},
set(value) {
this.$emit("update:url", value);
},
},
},
methods: {
async changeImage(file) {
if (file) {
this.form = { ...this.value, ...{ file } };
const reader = new FileReader();
reader.onload = (file) => {
this.thumbnail = file.target.result;
};
reader.readAsDataURL(file);
}
},
onChangeCropper({ coordinates }) {
this.form = { ...this.value, ...{ crop: coordinates } };
},
},
};
</script>
<style scoped>
/* dialog */
.wa__modal__image {
width: 250px;
margin: 0 auto;
border: 1px dashed var(--color-gray);
}
.upload-example-cropper {
border: 1px solid #afafaf;
border-radius: 5px;
background-color: white !important;
}
.upload-example-cropper.red {
border: 1px solid red;
}
</style>

@ -5,7 +5,10 @@ const urls = {
register: "auth/register",
resetPassword: "auth/forget-password",
logout: "auth/logout",
indexProgram: 'courses'
indexProgram: 'courses',
indexSportCategories: 'admin/sport-categories',
indexWorkoutCategories: 'admin/workout-categories',
storeWorkout: "admin/workouts"
};
export default urlGenerator(urls);

@ -11,7 +11,6 @@ function setTokenHeader(commit, response) {
export default {
async login({ commit }, data) {
console.log(data);
let repository = new AuthRepository();
const response = await repository.login(data);
if (response) {
@ -29,7 +28,9 @@ export default {
async register({ commit }, data) {
let repository = new AuthRepository();
const response = await repository.register(data);
console.log(response);
setTokenHeader(commit, response);
if (response) {
setTokenHeader(commit, response);
return response;
}
},
};
};

@ -0,0 +1,8 @@
import SportCategoriesRepository from "@/abstraction/repository/sportCategoriesRepository";
export default {
async loadSportCategories({ commit }) {
let repository = new SportCategoriesRepository();
const resource = await repository.index();
commit("SET_SPORT_CATEGORIES", resource.data);
}
};

@ -0,0 +1,3 @@
export default {
getSportCategories: state => state.sportCategories,
}

@ -0,0 +1,6 @@
import Vue from "vue";
export default {
SET_SPORT_CATEGORIES(state, data) {
Vue.set(state, "sportCategories", data);
},
};

@ -0,0 +1,3 @@
export default {
sportCategories: []
};

@ -0,0 +1,9 @@
import WorkoutCategoriesRepository from "@/abstraction/repository/workoutCategoriesRepository";
export default {
async loadWorkoutCategories({ commit }) {
let data = { sorts: 'fasdfas' }
let repository = new WorkoutCategoriesRepository();
const resource = await repository.index(data);
commit("SET_WORKOUT_CATEGORIES", resource.data);
}
};

@ -0,0 +1,3 @@
export default {
getWorkoutCategories: state => state.workoutCategories,
}

@ -0,0 +1,6 @@
import Vue from "vue";
export default {
SET_WORKOUT_CATEGORIES(state, data) {
Vue.set(state, "workoutCategories", data);
},
};

@ -0,0 +1,3 @@
export default {
workoutCategories: []
};

@ -0,0 +1,9 @@
import workoutRepository from "@/abstraction/repository/workoutRepository";
export default {
async addWorkout({ commit }, data) {
console.log('data', data);
let repository = new workoutRepository();
const resource = await repository.store(data);
commit("SET_WORKOUTS", resource.data);
}
};

@ -0,0 +1,7 @@
import Vue from "vue";
export default {
SET_WORKOUTS(state, data) {
Vue.set(state, "workout", data);
},
};

@ -0,0 +1,3 @@
export default {
workouts: []
};

@ -172,7 +172,7 @@ textarea {
}
.v-text-field.no-error-msg.textarae .v-input__slot {
margin-bottom: 0px !important;
margin-bottom: 0px !important;
}
.v-textarea.no-error-msg .v-input__slot {
@ -187,6 +187,9 @@ textarea {
color: var(--color-gray);
text-transform: uppercase !important;
}
.v-text-field input {
padding: 8px 0 2px !important;
}
/* ----------------------------------- selects ---------------------------------------------- */
.custom-combobox {
height: 55.99px;

@ -1,10 +1,11 @@
import axios from 'axios'
import {TokenStorage} from '../storage'
import { TokenStorage } from '../storage'
const ApiService = {
init(baseURL = null) {
if (baseURL) {
axios.defaults.headers.common["accept-language"] = 'en';
axios.defaults.baseURL = baseURL;
} else if (process.env.MIX_PUSHER_APP_API) {
axios.defaults.baseURL = process.env.MIX_PUSHER_APP_API;
@ -17,8 +18,8 @@ const ApiService = {
setAuthHeader() {
axios.defaults.headers.common["Authorization"] = `Bearer ${TokenStorage.getToken()}`;
},
},
removeAuthHeader() {
axios.defaults.headers.common["Authorization"] = null;
},

@ -0,0 +1,10 @@
const makeid = function makeid(length) {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < length; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
export { makeid };

@ -37,7 +37,6 @@ const UserStorage = {
save(user = null) {
user = qs.stringify(user);
localStorage.setItem(USER, user);
console.log('user saved');
},
remove() {

@ -42,14 +42,13 @@
<v-row class="mt-4">
<v-col cols="8" class="pr-1">
<div class="wa__link">
<router-link :to="{ name: 'login' }">
<RectangleButton
class="custom-btn w-100"
height="25"
:text-mode="true"
text="sign in"
@click.native="doLogin"
/></router-link>
<RectangleButton
class="custom-btn w-100"
height="25"
:text-mode="true"
text="sign in"
@click.native="doLogin"
/>
</div>
</v-col>
@ -105,11 +104,10 @@ export default {
methods: {
...mapActions("auth", ["login"]),
async doLogin() {
console.log(this.form);
this.login(this.form);
// if (response) {
// this.$router.push(this.$route.query.redirect || "/");
// }
let response = await this.login(this.form);
if (response) {
this.$router.push(this.$route.query.redirect || "/");
}
},
},
};

@ -70,14 +70,13 @@
<v-row class="mt-4">
<v-col cols="8" class="pr-1">
<div class="wa__link">
<router-link :to="{ name: 'register' }">
<RectangleButton
class="custom-btn w-100"
height="25"
:text-mode="true"
text="do sign up"
@click.native="register(form)"
/></router-link>
<RectangleButton
class="custom-btn w-100"
height="25"
:text-mode="true"
text="do sign up"
@click.native="register(form)"
/>
</div>
</v-col>
<v-col cols="4" class="pl-1">
@ -130,6 +129,13 @@ export default {
}),
methods: {
...mapActions("auth", ["register"]),
async doRegister() {
let response = await this.register(this.form);
if (response) {
console.log("response", response);
this.$router.push("/");
}
},
},
};
</script>
Loading…
Cancel
Save