add Feedback form
This commit is contained in:
59
src/routes/backoffice/feedback/+page.svelte
Normal file
59
src/routes/backoffice/feedback/+page.svelte
Normal file
@@ -0,0 +1,59 @@
|
||||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
import { supabase } from '$lib/supabaseClient';
|
||||
|
||||
let feedbackList = [];
|
||||
let loading = true;
|
||||
let error = '';
|
||||
|
||||
onMount(async () => {
|
||||
const { data, error: fetchError } = await supabase
|
||||
.from('vb_feedback')
|
||||
.select('*')
|
||||
.order('checkin_date', { ascending: false });
|
||||
|
||||
if (fetchError) {
|
||||
error = 'Failed to fetch feedback.';
|
||||
console.error(fetchError);
|
||||
} else {
|
||||
feedbackList = data;
|
||||
}
|
||||
loading = false;
|
||||
});
|
||||
</script>
|
||||
|
||||
<h1 class="text-3xl font-bold text-center my-6">Submitted Feedback</h1>
|
||||
|
||||
{#if loading}
|
||||
<p class="text-center text-gray-500">Loading feedback...</p>
|
||||
{:else if error}
|
||||
<p class="text-center text-red-600 font-semibold">{error}</p>
|
||||
{:else if feedbackList.length === 0}
|
||||
<p class="text-center text-gray-500">No feedback submitted yet.</p>
|
||||
{:else}
|
||||
<div class="overflow-x-auto px-4">
|
||||
<table class="min-w-full bg-white border border-gray-200 rounded-lg shadow-sm">
|
||||
<thead class="bg-gray-100 text-left">
|
||||
<tr>
|
||||
<th class="py-2 px-4 border-b">Villa</th>
|
||||
<th class="py-2 px-4 border-b">Customer</th>
|
||||
<th class="py-2 px-4 border-b">Check-in</th>
|
||||
<th class="py-2 px-4 border-b">Check-out</th>
|
||||
<th class="py-2 px-4 border-b">Feedback</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each feedbackList as item}
|
||||
<tr class="hover:bg-gray-50">
|
||||
<td class="py-2 px-4 border-b">{item.villa_name}</td>
|
||||
<td class="py-2 px-4 border-b">{item.customer_name}</td>
|
||||
<td class="py-2 px-4 border-b">{item.checkin_date}</td>
|
||||
<td class="py-2 px-4 border-b">{item.checkout_date}</td>
|
||||
<td class="py-2 px-4 border-b">{item.feedback}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
63
src/routes/feedback/+page.svelte
Normal file
63
src/routes/feedback/+page.svelte
Normal file
@@ -0,0 +1,63 @@
|
||||
<script>
|
||||
import { supabase } from '$lib/supabaseClient';
|
||||
|
||||
let villa_name = '';
|
||||
let customer_name = '';
|
||||
let checkin_date = '';
|
||||
let checkout_date = '';
|
||||
let feedback = '';
|
||||
let errorMessage = '';
|
||||
|
||||
async function handleSubmit() {
|
||||
errorMessage = '';
|
||||
|
||||
if (!villa_name.trim() || !customer_name.trim() || !feedback.trim()) {
|
||||
errorMessage = 'Villa name, customer name, and feedback are required.';
|
||||
return;
|
||||
}
|
||||
|
||||
if (new Date(checkout_date) <= new Date(checkin_date)) {
|
||||
errorMessage = 'Check-out date must be after check-in date.';
|
||||
return;
|
||||
}
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('vb_feedback')
|
||||
.insert([{
|
||||
villa_name,
|
||||
customer_name,
|
||||
checkin_date,
|
||||
checkout_date,
|
||||
feedback
|
||||
}]);
|
||||
|
||||
if (error) {
|
||||
console.error('Error submitting feedback:', error.message);
|
||||
errorMessage = 'Failed to submit feedback. Please try again.';
|
||||
} else {
|
||||
console.log('Feedback submitted:', data);
|
||||
villa_name = '';
|
||||
customer_name = '';
|
||||
checkin_date = '';
|
||||
checkout_date = '';
|
||||
feedback = '';
|
||||
alert("Feedback submitted successfully!");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<h1 class="text-3xl font-bold text-center my-6">Feedback Form</h1>
|
||||
|
||||
<form on:submit|preventDefault={handleSubmit} class="flex flex-col gap-4 max-w-md mx-auto p-6 bg-white rounded-xl shadow-md">
|
||||
{#if errorMessage}
|
||||
<div class="text-red-600 font-semibold">{errorMessage}</div>
|
||||
{/if}
|
||||
|
||||
<input type="text" bind:value={villa_name} placeholder="Villa Name" class="p-2 border rounded-md" required />
|
||||
<input type="text" bind:value={customer_name} placeholder="Customer Name" class="p-2 border rounded-md" required />
|
||||
<input type="date" bind:value={checkin_date} class="p-2 border rounded-md" required />
|
||||
<input type="date" bind:value={checkout_date} class="p-2 border rounded-md" required />
|
||||
<textarea bind:value={feedback} placeholder="Write your feedback here..." class="p-2 border rounded-md min-h-[120px]" required></textarea>
|
||||
<button type="submit" class="bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 transition">Submit Feedback</button>
|
||||
</form>
|
||||
|
||||
105
yarn.lock
105
yarn.lock
@@ -127,106 +127,6 @@
|
||||
estree-walker "^2.0.2"
|
||||
picomatch "^4.0.2"
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz"
|
||||
integrity sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz"
|
||||
integrity sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz"
|
||||
integrity sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz"
|
||||
integrity sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==
|
||||
|
||||
"@rollup/rollup-freebsd-arm64@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz"
|
||||
integrity sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==
|
||||
|
||||
"@rollup/rollup-freebsd-x64@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz"
|
||||
integrity sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz"
|
||||
integrity sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz"
|
||||
integrity sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz"
|
||||
integrity sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz"
|
||||
integrity sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==
|
||||
|
||||
"@rollup/rollup-linux-loongarch64-gnu@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz"
|
||||
integrity sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==
|
||||
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz"
|
||||
integrity sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz"
|
||||
integrity sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-musl@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz"
|
||||
integrity sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz"
|
||||
integrity sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz"
|
||||
integrity sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.9.5":
|
||||
version "4.9.5"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz"
|
||||
integrity sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz"
|
||||
integrity sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz"
|
||||
integrity sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz"
|
||||
integrity sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.41.1":
|
||||
version "4.41.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz"
|
||||
@@ -563,11 +463,6 @@ fdir@^6.2.0, fdir@^6.4.4:
|
||||
resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz"
|
||||
integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==
|
||||
|
||||
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
|
||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||
|
||||
function-bind@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
||||
|
||||
Reference in New Issue
Block a user