From 22b18ba42852effb6735fe774047a2b01b9cce11 Mon Sep 17 00:00:00 2001 From: Linzo99 Date: Thu, 7 Mar 2024 19:47:40 +0000 Subject: [PATCH] fix author drawer bug --- = | 264 ++++++++++++++++++ actions/api/client.ts | 2 +- .../audios/_components/AudioForm.tsx | 3 + app/author/[id]/page.tsx | 11 +- app/author/components/Biography.tsx | 8 +- components/AudioList/index.tsx | 2 +- components/ReciterList/AudioListSheet.tsx | 4 +- public/sw.js | 2 +- 8 files changed, 282 insertions(+), 14 deletions(-) create mode 100644 = diff --git a/= b/= new file mode 100644 index 0000000..573f9bc --- /dev/null +++ b/= @@ -0,0 +1,264 @@ +"use server" + +import { cookies } from "next/headers" +import { createServerActionClient } from "@supabase/auth-helpers-nextjs" + +import { + Audio, + Author, + Database, + Reciter, + TablesInsert, + TablesUpdate, + Verse, + Xassida, +} from "@/types/supabase" + +//const supabase = createClientComponentClient({}) +// +const cookieStore = cookies() +const supabase = createServerActionClient({ + cookies: () => cookieStore, +}) + +const signInWithEmail = async (values: { email: string; password: string }) => { + const { error } = await supabase.auth.signInWithPassword(values) + if (error) throw Error + + return true +} + +const signOut = async () => await supabase.auth.signOut() + +const searchXassida = async (search: string): Promise => { + const { data, error } = await supabase + .from("xassida") + .select("*, author(name, tariha)") + .like("name", `%${search}%`) + .limit(10) + if (error) throw error + + return data as any +} + +const searchReciter = async (search: string): Promise => { + const { data, error } = await supabase + .from("reciter") + .select("*") + .like("name", `%${search}%`) + .limit(10) + if (error) throw error + + return data as any +} + +const getXassidas = async ( + filters = {}, + offset = 0, + page_size = 15 +): Promise => { + const from = offset * page_size + const to = from + page_size - 1 + let query = supabase + .from("xassida") + .select("*, author!inner(*)") + .order("name") + // apply filters + Object.entries(filters).forEach(([k, v]) => { + if (v) query = query.filter(k, "eq", v) + }) + const { data, error } = await query.range(from, to) + if (error) throw error + + return data as any +} + +const getXassidaById = async (id: number): Promise => { + const { data, error } = await supabase + .from("xassida") + .select("*, chapter(id, number), author(*), reciter(id, name)") + .eq("id", id) + .single() + if (error) throw error + + return data as any +} + +const getVersesByChapterId = async ( + id: number, + offset = 1, + page_size = 20 +): Promise => { + const from = offset * page_size + const to = from + page_size - 1 + const { data, error } = await supabase + .from("verse") + .select("*, translations:verse_translation(*)") + .eq("chapter_id", id) + .order("number") + .range(from, to) + if (error) throw error + + return data as any +} + +const getAuthors = async ( + filters = {}, + offset = 0, + page_size = 15 +): Promise => { + const from = offset * page_size + const to = from + page_size - 1 + let query = supabase.from("author").select().order("name") + // apply filters + Object.entries(filters).forEach(([k, v]) => { + if (v) query = query.filter(k, "eq", v) + }) + const { data, error } = await query.range(from, to) + if (error) throw error + + return data +} + +const getAuthorById = async (id: number): Promise => { + const { data, error } = await supabase + .from("author") + .select() + .eq("id", id) + .single() + if (error) throw error + + return data +} + +const getReciters = async ( + filters = {}, + offset = 0, + page_size = 15 +): Promise => { + const from = offset * page_size + const to = from + page_size - 1 + let query = supabase.from("reciter").select().order("name") + // apply filters + Object.entries(filters).forEach(([k, v]) => { + if (v) query = query.filter(k, "eq", v) + }) + const { data, error } = await query.range(from, to) + if (error) throw error + + return data +} + +const getReciterById = async (id: number): Promise => { + const { data, error } = await supabase + .from("author") + .select() + .eq("id", id) + .single() + if (error) throw error + + return data +} + +const createReciter = async ( + values: TablesInsert<"reciter"> +): Promise => { + const { data, error } = await supabase.from("reciter").insert(values).select() + + if (error) throw error + + return data as any +} + +const updateReciter = async (id: number, values: TablesUpdate<"reciter">) => { + const { data, error } = await supabase + .from("reciter") + .update(values) + .eq("id", id) + .select() + + if (error) throw error + + return data as any +} + +const getAudios = async ( + filters = {}, + offset = 0, + page_size = 15 +): Promise => { + const from = offset * page_size + const to = from + page_size - 1 + let query = supabase + .from("audio") + .select("*, reciter(*), xassida(id, name, reciter(id, name))") + .order("id") + // apply filters + Object.entries(filters).forEach(([k, v]) => { + if (v) query = query.filter(k, "eq", v) + }) + const { data, error } = await query.range(from, to) + if (error) throw error + + return data as any +} + +const getAudioById = async (id: number): Promise