diff --git a/app/Http/Controllers/InteractionController.php b/app/Http/Controllers/InteractionController.php index a9eae6d..e646959 100644 --- a/app/Http/Controllers/InteractionController.php +++ b/app/Http/Controllers/InteractionController.php @@ -33,7 +33,7 @@ public function togglesState(Deal $deal, InteractionType $type) $message = ''; if ($existingInteraction) { $existingInteraction->delete(); - $message = "{$type->value} removed from deal"; + $message = ucfirst($type->value).' removed from deal'; } else { $data = [ 'type' => $type, @@ -44,7 +44,7 @@ public function togglesState(Deal $deal, InteractionType $type) $deal->interactions()->create($data); Interaction::reguard(); - $message = "{$type->value} added to deal"; + $message = ucfirst($type->value).' added to deal'; } return response()->json(['message' => $message]); diff --git a/resources/css/app.css b/resources/css/app.css index 4f63131..106f4bf 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -14,7 +14,7 @@ @theme { --color-accent-600: oklch(0.45 0.01 232); } -@layer components{ +@layer components { @import "./button.css"; .wrapper { @@ -24,7 +24,7 @@ @layer components{ } -@layer base{ +@layer base { h2 { @apply text-5xl font-black text-center } @@ -33,3 +33,27 @@ @layer base{ .preload * { transition: none !important; } +@keyframes appear { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes disappear { + from { + display: block; + opacity: 1; + } + to { + display: none; + opacity: 0; + } +} +dialog{ + animation: disappear 300ms ease-in-out; +} +dialog[open]{ + animation: appear 300ms ease-in-out; +} diff --git a/resources/js/interaction.js b/resources/js/interaction.js index 30d6793..fc61c61 100644 --- a/resources/js/interaction.js +++ b/resources/js/interaction.js @@ -1,3 +1,5 @@ +import {showToast} from "./toast.js"; + async function like(button, id) { // Instant feedback for user let likeBtns = button.querySelectorAll('.like'); @@ -12,10 +14,16 @@ async function like(button, id) { let response = await axios.post('/like/' + id); if (response.status !== 200) { + showToast(response.data.message) // Revert the ui toggleHidden(likeBtns); } + else{ + showToast(response.data.message) + } + } catch (e) { + showToast(e.response.data.message) toggleHidden(likeBtns); console.error(e); } @@ -30,10 +38,14 @@ async function favorite(e, id) { let response = await axios.post('/favorite/' + id); if (response.status !== 200) { + showToast(response.data.message) // Revert the ui toggleHidden(favoriteBtns); + }else{ + showToast(response.data.message); } } catch (e) { + showToast(e.response.data.message) toggleHidden(favoriteBtns); console.error(e); } diff --git a/resources/js/toast.js b/resources/js/toast.js index 32b1c89..0a4312d 100644 --- a/resources/js/toast.js +++ b/resources/js/toast.js @@ -2,14 +2,16 @@ const toast = document.querySelector('.toast'); const toastBtn = document.querySelector('#toast-btn'); let toastMessage = toast.querySelector('#toast-message'); export function showToast(message) { - toast.classList.toggle('hidden') + toast.classList.remove('translate-x-[100vw]'); + toast.classList.add('translate-x-0'); toastMessage.textContent = message; setTimeout(() => { - toast.classList.toggle('hidden'); - }, 3000) + hideToast(); + }, 5000) } function hideToast() { - toast.classList.toggle('hidden') + toast.classList.remove('translate-x-0'); + toast.classList.add('translate-x-[100vw]'); } document.hideToast = hideToast; document.showToast = showToast; diff --git a/resources/views/components/dashboard/broker/layout.blade.php b/resources/views/components/dashboard/broker/layout.blade.php index 532c1c1..587f57f 100644 --- a/resources/views/components/dashboard/broker/layout.blade.php +++ b/resources/views/components/dashboard/broker/layout.blade.php @@ -4,7 +4,7 @@