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"
|
estree-walker "^2.0.2"
|
||||||
picomatch "^4.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":
|
"@rollup/rollup-win32-x64-msvc@4.41.1":
|
||||||
version "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"
|
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"
|
resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz"
|
||||||
integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==
|
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:
|
function-bind@^1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
||||||
|
|||||||
Reference in New Issue
Block a user