Skip to content

Commit

Permalink
feat: add faqs dynamic data
Browse files Browse the repository at this point in the history
  • Loading branch information
franco14lorenzo committed Oct 13, 2024
1 parent ee2c8d2 commit 494e066
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 36 deletions.
62 changes: 27 additions & 35 deletions src/app/(store)/faqs/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { QueryData } from '@supabase/supabase-js'

import type { Metadata } from 'next'

import Breadcrumbs from '@/components/blocks/breadcrumbs'
Expand All @@ -7,6 +9,7 @@ import {
AccordionItem,
AccordionTrigger
} from '@/components/ui/accordion'
import { createClient } from '@/lib/supabase/client'

export const metadata: Metadata = {
title: 'FAQs',
Expand All @@ -18,51 +21,25 @@ const breadcrumbs = [
{ name: 'FAQs', isCurrentPage: true }
]

const faqs = [
{
question: '¿Qué es Vinito?',
answer:
'Vinito es un servicio de entrega de vinos que te permite pedir vino en línea y recibirlo en tu alojamiento.'
},
{
question: '¿Por qué debería elegir Vinito?',
answer:
'Vinito ofrece una amplia selección de vinos de Mendoza, Argentina. Entregamos a tu alojamiento, para que puedas disfrutar de tu vino sin tener que salir de tu habitación.'
},
{
question: '¿Cómo hago un pedido?',
answer:
'Para hacer un pedido, simplemente navega por nuestra selección de vinos, añade los que quieras a tu carrito y procede al pago.'
},
{
question: '¿Cuánto tarda la entrega?',
answer:
'Los tiempos de entrega varían según tu ubicación. Puedes elegir tu fecha y hora de entrega preferida durante el pago. Puedes pedir con 30 minutos de anticipación o hasta con 30 días de anticipación.'
},
{
question: '¿Cuánto cuesta la entrega?',
answer:
'La entrega es gratuita para todos nuestros clientes de alojamiento. Para otros clientes, los costos de entrega varían según tu ubicación.'
},
{
question: '¿Qué métodos de pago aceptan?',
answer:
'Aceptamos todas las principales tarjetas de crédito y débito con Mercado Pago. También aceptamos pagos con criptomonedas a través de Binance Pay. También puedes pagar en efectivo al momento de la entrega.'
export default async function FaqsPage() {
const { data, error } = await getFaqs()

if (error) {
// TODO: Handle error
throw error
}
]

export default function FaqsPage() {
return (
<>
<Breadcrumbs elements={breadcrumbs} />
<h1 className="my-6 w-full text-center font-kalnia text-3xl font-bold">
Preguntas frecuentes
</h1>
<Accordion type="single" collapsible className="w-full px-4">
{faqs.map((faq, index) => (
{data.map((faq) => (
<AccordionItem
key={index}
value={`faq-${index}`}
key={faq.id}
value={`faq-${faq.id}`}
className="border-zinc-950/20"
>
<AccordionTrigger className="font-semibold">
Expand All @@ -75,3 +52,18 @@ export default function FaqsPage() {
</>
)
}

async function getFaqs() {
const supabase = createClient()
const faqsQuery = supabase
.from('faqs')
.select('id, question, answer')
.eq('status', 'active')
.order('order', { ascending: true })

type Faqs = QueryData<typeof faqsQuery>

const { data, error } = await faqsQuery

return { data: data as Faqs, error }
}
52 changes: 52 additions & 0 deletions src/types/database.generated.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,57 @@ export type Database = {
}
]
}
faqs: {
Row: {
answer: string
created_at: string
created_by: number | null
id: number
order: number
question: string
status: Database['public']['Enums']['faq_status']
updated_at: string
updated_by: number | null
}
Insert: {
answer: string
created_at?: string
created_by?: number | null
id?: number
order?: number
question: string
status?: Database['public']['Enums']['faq_status']
updated_at?: string
updated_by?: number | null
}
Update: {
answer?: string
created_at?: string
created_by?: number | null
id?: number
order?: number
question?: string
status?: Database['public']['Enums']['faq_status']
updated_at?: string
updated_by?: number | null
}
Relationships: [
{
foreignKeyName: 'faqs_created_by_fkey'
columns: ['created_by']
isOneToOne: false
referencedRelation: 'admin'
referencedColumns: ['id']
},
{
foreignKeyName: 'faqs_updated_by_fkey'
columns: ['updated_by']
isOneToOne: false
referencedRelation: 'admin'
referencedColumns: ['id']
}
]
}
order_tastings: {
Row: {
order_id: string
Expand Down Expand Up @@ -588,6 +639,7 @@ export type Database = {
Enums: {
accommodation_status: 'draft' | 'active' | 'inactive' | 'deleted'
delivery_schedule_status: 'draft' | 'active' | 'inactive' | 'deleted'
faq_status: 'draft' | 'active' | 'inactive' | 'deleted'
order_state:
| 'pending'
| 'processing'
Expand Down
17 changes: 17 additions & 0 deletions supabase/migrations/20241013160701_add_faqs_table.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
CREATE TYPE "public"."faq_status" AS ENUM ('draft', 'active', 'inactive', 'deleted');

CREATE SEQUENCE public.faq_order_seq START 1;

CREATE TABLE "public"."faqs" (
"id" BIGSERIAL PRIMARY KEY,
"question" TEXT NOT NULL,
"answer" TEXT NOT NULL,
"status" "public"."faq_status" DEFAULT 'draft' NOT NULL,
"order" INT NOT NULL DEFAULT nextval('public.faq_order_seq'),
"created_at" TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
"updated_at" TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
"created_by" BIGINT,
"updated_by" BIGINT,
FOREIGN KEY ("created_by") REFERENCES "public"."admin"("id"),
FOREIGN KEY ("updated_by") REFERENCES "public"."admin"("id")
);
11 changes: 10 additions & 1 deletion supabase/seed.sql
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,13 @@ INSERT INTO order_tastings (order_id, tasting_id, quantity) VALUES
-- Gonzalo Montiel
('550e8400-e29b-41d4-a716-446655440008', 4, 1), ('550e8400-e29b-41d4-a716-446655440008', 5, 1), ('550e8400-e29b-41d4-a716-446655440008', 6, 1),
-- Nicolas De La Cruz
('550e8400-e29b-41d4-a716-446655440009', 4, 2), ('550e8400-e29b-41d4-a716-446655440009', 5, 1), ('550e8400-e29b-41d4-a716-446655440009', 6, 1);
('550e8400-e29b-41d4-a716-446655440009', 4, 2), ('550e8400-e29b-41d4-a716-446655440009', 5, 1), ('550e8400-e29b-41d4-a716-446655440009', 6, 1);

-- Seed data for the faqs table
INSERT INTO faqs (question, answer, status, created_by) VALUES
('¿Qué es Vinito?', 'Vinito es un servicio de entrega de vinos que te permite pedir vino en línea y recibirlo en tu alojamiento.', 'active', 1),
('¿Por qué debería elegir Vinito?', 'Vinito ofrece una amplia selección de vinos de Mendoza, Argentina. Entregamos a tu alojamiento, para que puedas disfrutar de tu vino sin tener que salir de tu habitación.', 'active', 1),
('¿Cómo hago un pedido?', 'Para hacer un pedido, simplemente navega por nuestra selección de vinos, añade los que quieras a tu carrito y procede al pago.', 'active', 1),
('¿Cuánto tarda la entrega?', 'Los tiempos de entrega varían según tu ubicación. Puedes elegir tu fecha y hora de entrega preferida durante el pago. Puedes pedir con 30 minutos de anticipación o hasta con 30 días de anticipación.', 'active', 1),
('¿Cuánto cuesta la entrega?', 'La entrega es gratuita para todos nuestros clientes de alojamiento. Para otros clientes, los costos de entrega varían según tu ubicación.', 'active', 1),
('¿Qué métodos de pago aceptan?', 'Aceptamos todas las principales tarjetas de crédito y débito con Mercado Pago. También aceptamos pagos con criptomonedas a través de Binance Pay. También puedes pagar en efectivo al momento de la entrega.', 'active', 1);

0 comments on commit 494e066

Please sign in to comment.