From 3c1844046a4ca677891cec3a5df9db65618efb7d Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sat, 13 Jan 2024 23:01:16 +0100 Subject: [PATCH] basic browse page --- website/database.types.ts | 120 ++++++++++++++++++++++ website/src/components/SharedPatterns.tsx | 54 ++++++++++ website/src/pages/browse.astro | 14 +++ 3 files changed, 188 insertions(+) create mode 100644 website/database.types.ts create mode 100644 website/src/components/SharedPatterns.tsx create mode 100644 website/src/pages/browse.astro diff --git a/website/database.types.ts b/website/database.types.ts new file mode 100644 index 00000000..152742b4 --- /dev/null +++ b/website/database.types.ts @@ -0,0 +1,120 @@ +// generated with https://supabase.com/docs/reference/javascript/typescript-support#generating-typescript-types +export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]; + +export interface Database { + public: { + Tables: { + code: { + Row: { + code: string | null; + created_at: string | null; + featured: boolean | null; + hash: string | null; + id: number; + public: boolean | null; + }; + Insert: { + code?: string | null; + created_at?: string | null; + featured?: boolean | null; + hash?: string | null; + id?: number; + public?: boolean | null; + }; + Update: { + code?: string | null; + created_at?: string | null; + featured?: boolean | null; + hash?: string | null; + id?: number; + public?: boolean | null; + }; + Relationships: []; + }; + }; + Views: { + [_ in never]: never; + }; + Functions: { + [_ in never]: never; + }; + Enums: { + [_ in never]: never; + }; + CompositeTypes: { + [_ in never]: never; + }; + }; +} + +export type Tables< + PublicTableNameOrOptions extends + | keyof (Database['public']['Tables'] & Database['public']['Views']) + | { schema: keyof Database }, + TableName extends PublicTableNameOrOptions extends { schema: keyof Database } + ? keyof (Database[PublicTableNameOrOptions['schema']]['Tables'] & + Database[PublicTableNameOrOptions['schema']]['Views']) + : never = never, +> = PublicTableNameOrOptions extends { schema: keyof Database } + ? (Database[PublicTableNameOrOptions['schema']]['Tables'] & + Database[PublicTableNameOrOptions['schema']]['Views'])[TableName] extends { + Row: infer R; + } + ? R + : never + : PublicTableNameOrOptions extends keyof (Database['public']['Tables'] & Database['public']['Views']) + ? (Database['public']['Tables'] & Database['public']['Views'])[PublicTableNameOrOptions] extends { + Row: infer R; + } + ? R + : never + : never; + +export type TablesInsert< + PublicTableNameOrOptions extends keyof Database['public']['Tables'] | { schema: keyof Database }, + TableName extends PublicTableNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicTableNameOrOptions['schema']]['Tables'] + : never = never, +> = PublicTableNameOrOptions extends { schema: keyof Database } + ? Database[PublicTableNameOrOptions['schema']]['Tables'][TableName] extends { + Insert: infer I; + } + ? I + : never + : PublicTableNameOrOptions extends keyof Database['public']['Tables'] + ? Database['public']['Tables'][PublicTableNameOrOptions] extends { + Insert: infer I; + } + ? I + : never + : never; + +export type TablesUpdate< + PublicTableNameOrOptions extends keyof Database['public']['Tables'] | { schema: keyof Database }, + TableName extends PublicTableNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicTableNameOrOptions['schema']]['Tables'] + : never = never, +> = PublicTableNameOrOptions extends { schema: keyof Database } + ? Database[PublicTableNameOrOptions['schema']]['Tables'][TableName] extends { + Update: infer U; + } + ? U + : never + : PublicTableNameOrOptions extends keyof Database['public']['Tables'] + ? Database['public']['Tables'][PublicTableNameOrOptions] extends { + Update: infer U; + } + ? U + : never + : never; + +export type Enums< + PublicEnumNameOrOptions extends keyof Database['public']['Enums'] | { schema: keyof Database }, + EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicEnumNameOrOptions['schema']]['Enums'] + : never = never, +> = PublicEnumNameOrOptions extends { schema: keyof Database } + ? Database[PublicEnumNameOrOptions['schema']]['Enums'][EnumName] + : PublicEnumNameOrOptions extends keyof Database['public']['Enums'] + ? Database['public']['Enums'][PublicEnumNameOrOptions] + : never; diff --git a/website/src/components/SharedPatterns.tsx b/website/src/components/SharedPatterns.tsx new file mode 100644 index 00000000..4deab67e --- /dev/null +++ b/website/src/components/SharedPatterns.tsx @@ -0,0 +1,54 @@ +import { createClient } from '@supabase/supabase-js'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import type { Database, Tables } from '../../database.types'; +import { getMetadata } from '../metadata_parser'; + +function PatternLink({ pattern }: { pattern: Tables<'code'> }) { + const meta = useMemo(() => getMetadata(pattern.code), [pattern]); + // console.log('meta', meta); + return ( + + {meta.title || pattern.hash} by {meta.by.join(',') || 'Anonymous'} + + ); +} + +export function SharedPatterns() { + const [publicPatterns, setPublicPatterns] = useState[] | null>([]); + const [featuredPatterns, setFeaturedPatterns] = useState[] | null>([]); + const init = useCallback(async () => { + const supabase = createClient( + 'https://pidxdsxphlhzjnzmifth.supabase.co', + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InBpZHhkc3hwaGxoempuem1pZnRoIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NTYyMzA1NTYsImV4cCI6MTk3MTgwNjU1Nn0.bqlw7802fsWRnqU5BLYtmXk_k-D1VFmbkHMywWc15NM', + ); + const { data: _publicPatterns } = await supabase.from('code').select().eq('public', true).limit(20); + const { data: _featuredPatterns } = await supabase.from('code').select().eq('featured', true).limit(20); + setPublicPatterns(_publicPatterns); + setFeaturedPatterns(_featuredPatterns); + /* console.log('public', publicPatterns); + console.log('featured', featuredPatterns); */ + }, []); + useEffect(() => { + init(); + }, [useCallback]); + return ( +
+

Featured

+
+ {featuredPatterns?.map((pattern, i) => ( +
+ +
+ ))} +
+

Last Creations

+
+ {publicPatterns?.map((pattern, i) => ( +
+ +
+ ))} +
+
+ ); +} diff --git a/website/src/pages/browse.astro b/website/src/pages/browse.astro new file mode 100644 index 00000000..3e63bf87 --- /dev/null +++ b/website/src/pages/browse.astro @@ -0,0 +1,14 @@ +--- +import HeadCommon from '../components/HeadCommon.astro'; +import { SharedPatterns } from '../components/SharedPatterns'; +--- + + + + + +
+

Browse

+ +
+