diff --git a/app/Http/Controllers/Client/FaqController.php b/app/Http/Controllers/Client/FaqController.php new file mode 100644 index 0000000..fc6e01d --- /dev/null +++ b/app/Http/Controllers/Client/FaqController.php @@ -0,0 +1,45 @@ +map(function ($item) { + return [ + 'question' => $item->question, + 'answer' => $item->answer, + ]; + }); + return Inertia::render("dashboard/faq/index", ['faq' => $faqResponse]); + } + + public function add() + { + return Inertia::render("dashboard/faq/add"); + } + + public function addFaq(Request $request) + { + $validated = $request->validate([ + "question" => "required|string", + "answer" => "required|string" + ]); + + $faq = FAQ::create($validated); + + $faqResponse = [ + "question" => $faq->question, + "answer" => $faq->answer, + ]; + + return to_route("dashboard.faq.show", ['faq' => $faqResponse]); + } +} diff --git a/app/Http/Controllers/Client/HomeController.php b/app/Http/Controllers/Client/HomeController.php index 57947f2..2db094b 100644 --- a/app/Http/Controllers/Client/HomeController.php +++ b/app/Http/Controllers/Client/HomeController.php @@ -80,7 +80,15 @@ class HomeController extends Controller public function faq() { - return Inertia::render('faq'); + $faq = FAQ::all(); + $faqResponse = $faq->map(function ($item) { + return [ + "id" => $item->id, + "question" => $item->question, + "answer" => $item->answer, + ]; + }); + return Inertia::render('faq', ['faq' => $faqResponse]); } } diff --git a/app/Models/FAQ.php b/app/Models/FAQ.php new file mode 100644 index 0000000..a75f4c6 --- /dev/null +++ b/app/Models/FAQ.php @@ -0,0 +1,14 @@ +id(); + $table->string("question"); + $table->string('answer'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('faqs'); + } +}; diff --git a/resources/assets/img/Bespoke/Ree 6.jpg b/resources/assets/img/Bespoke/Ree 6.jpg new file mode 100644 index 0000000..2d781a7 Binary files /dev/null and b/resources/assets/img/Bespoke/Ree 6.jpg differ diff --git a/resources/assets/img/Bespoke/Shrek.jpg b/resources/assets/img/Bespoke/Shrek.jpg new file mode 100644 index 0000000..24c5348 Binary files /dev/null and b/resources/assets/img/Bespoke/Shrek.jpg differ diff --git a/resources/assets/img/Bespoke/Swarovsky embedded wall hang.jpg b/resources/assets/img/Bespoke/Swarovsky embedded wall hang.jpg new file mode 100644 index 0000000..d8db99c Binary files /dev/null and b/resources/assets/img/Bespoke/Swarovsky embedded wall hang.jpg differ diff --git a/resources/assets/img/Bespoke/bes 5.jpg b/resources/assets/img/Bespoke/bes 5.jpg new file mode 100644 index 0000000..036c661 Binary files /dev/null and b/resources/assets/img/Bespoke/bes 5.jpg differ diff --git a/resources/assets/img/products/color swatches.jpg b/resources/assets/img/products/color swatches.jpg new file mode 100644 index 0000000..5bbdbd2 Binary files /dev/null and b/resources/assets/img/products/color swatches.jpg differ diff --git a/resources/js/pages/dashboard/faq/add.tsx b/resources/js/pages/dashboard/faq/add.tsx new file mode 100644 index 0000000..4876ca9 --- /dev/null +++ b/resources/js/pages/dashboard/faq/add.tsx @@ -0,0 +1,91 @@ +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import AppLayout from '@/layouts/app-layout'; +import dashboard from '@/routes/dashboard'; +import { Head, useForm } from '@inertiajs/react'; +import FilePondPluginImageExifOrientation from 'filepond-plugin-image-exif-orientation'; +import FilePondPluginImagePreview from 'filepond-plugin-image-preview'; +import 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css'; +import 'filepond/dist/filepond.min.css'; +import { registerPlugin } from 'react-filepond'; +import { toast } from 'sonner'; + +registerPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview); + +export default function FaqAdd() { + const { data, setData, post, processing, errors, wasSuccessful } = useForm({ + question: '', + answer: '', + }); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + + post(dashboard.faq.addFaq().url, { + forceFormData: true, + }); + + if (wasSuccessful) { + toast.success('Product added successfully'); + } + }; + + return ( + + +
+

+ Add FAQ Questions +

+
+
+ + + setData('question', e.target.value) + } + className="rounded border p-2" + /> + {errors.question && ( + + {errors.question} + + )} +
+
+ + setData('answer', e.target.value)} + className="rounded border p-2" + /> + {errors.answer && ( + + {errors.answer} + + )} +
+ + +
+
+
+ ); +} diff --git a/resources/js/pages/dashboard/faq/index.tsx b/resources/js/pages/dashboard/faq/index.tsx new file mode 100644 index 0000000..a2c94a2 --- /dev/null +++ b/resources/js/pages/dashboard/faq/index.tsx @@ -0,0 +1,76 @@ +import { Button } from '@/components/ui/button'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; +import AppLayout from '@/layouts/app-layout'; +import dashboard from '@/routes/dashboard'; +import { Head, Link } from '@inertiajs/react'; +import { Pencil, Trash2 } from 'lucide-react'; + +export default function Faq({ + faq, +}: { + faq: [{ question: string; answer: string }]; +}) { + return ( + + + +
+
+

+ FAQs +

+ + + +
+ + + + S.N. + Question + Answer + Action + + + + {faq.map((item, index) => ( + + + {index + 1} + + {item.question} + {item.answer} + +
+ + + + + + +
+
+
+ ))} +
+
+
+
+ ); +} diff --git a/resources/js/pages/faq.tsx b/resources/js/pages/faq.tsx index 9d5fbf4..4afeb79 100644 --- a/resources/js/pages/faq.tsx +++ b/resources/js/pages/faq.tsx @@ -13,7 +13,11 @@ import img3 from '@asset/img/Bespoke/Shrek.jpg'; import img2 from '@asset/img/Bespoke/Swarovsky embedded wall hang.jpg'; import { Head, Link } from '@inertiajs/react'; -export default function Faq() { +export default function Faq({ + faq, +}: { + faq: [{ id: number; question: string; answer: string }]; +}) { return ( <> @@ -67,7 +71,7 @@ export default function Faq() { type="single" collapsible className="w-full" - defaultValue="item-1" + defaultValue="1" > {faq.map((item) => ( diff --git a/routes/web.php b/routes/web.php index 3167d95..9dc15b2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Http\Controllers\Auth\DashboardController; use App\Http\Controllers\Client\AboutController; +use App\Http\Controllers\Client\FaqController; use App\Http\Controllers\Client\HomeController; use App\Http\Controllers\client\ProductController; use App\Http\Controllers\Client\TestimonialController; @@ -38,6 +39,10 @@ Route::post('/testimonial', [TestimonialController::class, 'store'])->name('test Route::middleware(['auth', 'verified'])->name("dashboard.")->group(function () { Route::get('/dashboard', [DashboardController::class, 'index'])->name('index'); + Route::get('/faq/show', [FaqController::class, 'index'])->name('faq.show'); + Route::get('/faq/add', [FaqController::class, 'add'])->name('faq.add'); + Route::post('/faq/add', [FaqController::class, 'addFaq'])->name('faq.addFaq'); + Route::get('/product/dashboard', [ProductController::class, 'index'])->name('product.index'); Route::get('/product/add', [ProductController::class, 'productAdd'])->name('product.add');