Toast disappear functionnalities
This commit is contained in:
37
package-lock.json
generated
37
package-lock.json
generated
@@ -1377,6 +1377,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/uuid": {
|
||||||
|
"version": "8.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
|
||||||
|
"integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/webpack": {
|
"@types/webpack": {
|
||||||
"version": "4.41.26",
|
"version": "4.41.26",
|
||||||
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.26.tgz",
|
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.26.tgz",
|
||||||
@@ -9959,6 +9965,14 @@
|
|||||||
"tough-cookie": "~2.5.0",
|
"tough-cookie": "~2.5.0",
|
||||||
"tunnel-agent": "^0.6.0",
|
"tunnel-agent": "^0.6.0",
|
||||||
"uuid": "^3.3.2"
|
"uuid": "^3.3.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"require-directory": {
|
"require-directory": {
|
||||||
@@ -10604,6 +10618,14 @@
|
|||||||
"faye-websocket": "^0.11.3",
|
"faye-websocket": "^0.11.3",
|
||||||
"uuid": "^3.4.0",
|
"uuid": "^3.4.0",
|
||||||
"websocket-driver": "^0.7.4"
|
"websocket-driver": "^0.7.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sockjs-client": {
|
"sockjs-client": {
|
||||||
@@ -11838,10 +11860,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
"version": "3.4.0",
|
"version": "8.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"v8-compile-cache": {
|
"v8-compile-cache": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
@@ -12666,6 +12687,14 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"ansi-colors": "^3.0.0",
|
"ansi-colors": "^3.0.0",
|
||||||
"uuid": "^3.3.2"
|
"uuid": "^3.3.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"webpack-merge": {
|
"webpack-merge": {
|
||||||
|
|||||||
@@ -10,11 +10,13 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
|
"uuid": "^8.3.2",
|
||||||
"vue": "^3.0.0",
|
"vue": "^3.0.0",
|
||||||
"vue-router": "^4.0.0-0",
|
"vue-router": "^4.0.0-0",
|
||||||
"vuex": "^4.0.0-0"
|
"vuex": "^4.0.0-0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/uuid": "^8.3.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.33.0",
|
"@typescript-eslint/eslint-plugin": "^2.33.0",
|
||||||
"@typescript-eslint/parser": "^2.33.0",
|
"@typescript-eslint/parser": "^2.33.0",
|
||||||
"@vue/cli-plugin-babel": "~4.5.0",
|
"@vue/cli-plugin-babel": "~4.5.0",
|
||||||
|
|||||||
@@ -27,6 +27,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@keyframes fadeOut {
|
||||||
|
from {
|
||||||
|
opacity: 100%;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes fromBottom {
|
@keyframes fromBottom {
|
||||||
from {
|
from {
|
||||||
transform: translateY(20px);
|
transform: translateY(20px);
|
||||||
@@ -45,6 +54,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@keyframes slideFromLeft {
|
||||||
|
from {
|
||||||
|
transform: translateX(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translateX(100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes paneBgAround {
|
@keyframes paneBgAround {
|
||||||
0% {
|
0% {
|
||||||
background-position: -10vw 0%;
|
background-position: -10vw 0%;
|
||||||
|
|||||||
@@ -98,6 +98,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from "vue";
|
import { defineComponent } from "vue";
|
||||||
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
|
|
||||||
@@ -124,7 +125,7 @@ export default defineComponent({
|
|||||||
store.dispatch("toggleFav", celestial.id);
|
store.dispatch("toggleFav", celestial.id);
|
||||||
if (store.getters.isFav(celestial.id)) {
|
if (store.getters.isFav(celestial.id)) {
|
||||||
store.dispatch("toasts/pushToast", {
|
store.dispatch("toasts/pushToast", {
|
||||||
id: 200,
|
id: uuidv4(),
|
||||||
title: "Favori ajouté",
|
title: "Favori ajouté",
|
||||||
message: `${celestial.name} a été ajouté à la liste des favoris.`,
|
message: `${celestial.name} a été ajouté à la liste des favoris.`,
|
||||||
category: "valid",
|
category: "valid",
|
||||||
@@ -132,7 +133,7 @@ export default defineComponent({
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
store.dispatch("toasts/pushToast", {
|
store.dispatch("toasts/pushToast", {
|
||||||
id: 200,
|
id: uuidv4(),
|
||||||
title: "Favori retiré",
|
title: "Favori retiré",
|
||||||
message: `${celestial.name} a été retiré de la liste des favoris.`,
|
message: `${celestial.name} a été retiré de la liste des favoris.`,
|
||||||
category: "valid",
|
category: "valid",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="toast-card" :class="toast.category">
|
<div class="toast-card" :class="[toast.category, closing ? 'closing' : '']">
|
||||||
<div class="toast-title">
|
<div class="toast-title">
|
||||||
<slot name="title" />
|
<slot name="title" />
|
||||||
</div>
|
</div>
|
||||||
@@ -12,8 +12,15 @@
|
|||||||
<script>
|
<script>
|
||||||
import { defineComponent } from "vue";
|
import { defineComponent } from "vue";
|
||||||
|
|
||||||
|
import store from "@/store";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "ToastCard",
|
name: "ToastCard",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
closing: false
|
||||||
|
};
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
toast: Object
|
toast: Object
|
||||||
},
|
},
|
||||||
@@ -25,10 +32,17 @@ export default defineComponent({
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
timeToLive = timeToLive - 1;
|
timeToLive = timeToLive - 1;
|
||||||
this.countdown(timeToLive);
|
this.countdown(timeToLive);
|
||||||
}, 800);
|
}, 900);
|
||||||
} else {
|
} else {
|
||||||
// When timer ends
|
// When timer ends
|
||||||
|
this.closing = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.close();
|
||||||
|
}, 1200);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
store.dispatch("toasts/purgeToast", this.toast.id);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -76,5 +90,9 @@ export default defineComponent({
|
|||||||
&.danger {
|
&.danger {
|
||||||
background-color: $danger;
|
background-color: $danger;
|
||||||
}
|
}
|
||||||
|
&.closing {
|
||||||
|
animation: fadeOut 1.2s cubic-bezier(0.175, 1, 0.32, 1),
|
||||||
|
slideFromLeft 1.2s cubic-bezier(0.175, 1, 0.32, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -25,11 +25,6 @@ export default defineComponent({
|
|||||||
queue() {
|
queue() {
|
||||||
return this.$store.state.toasts.queue;
|
return this.$store.state.toasts.queue;
|
||||||
}
|
}
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
queue(next, old) {
|
|
||||||
console.log(old, next);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
2
src/shims-vue.d.ts
vendored
2
src/shims-vue.d.ts
vendored
@@ -4,3 +4,5 @@ declare module '*.vue' {
|
|||||||
const component: DefineComponent<{}, {}, any>
|
const component: DefineComponent<{}, {}, any>
|
||||||
export default component
|
export default component
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module 'uuid';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
export default {
|
export default {
|
||||||
state: {
|
state: {
|
||||||
queue: Array<{
|
queue: Array<{
|
||||||
id: number;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
message: string;
|
message: string;
|
||||||
category: string;
|
category: string;
|
||||||
@@ -11,11 +11,17 @@ export default {
|
|||||||
mutations: {
|
mutations: {
|
||||||
pushToast: (state: any, toast: any) => {
|
pushToast: (state: any, toast: any) => {
|
||||||
state.queue.push(toast);
|
state.queue.push(toast);
|
||||||
|
},
|
||||||
|
purgeToast: (state: any, toastId: string) => {
|
||||||
|
state.queue = state.queue.filter((toast: any) => toast.id != toastId);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
pushToast: ({ commit }: any, toast: any) => {
|
pushToast: ({ commit }: any, toast: any) => {
|
||||||
commit("pushToast", toast);
|
commit("pushToast", toast);
|
||||||
|
},
|
||||||
|
purgeToast: ({ commit }: any, toastId: string) => {
|
||||||
|
commit("purgeToast", toastId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user