git.iko.soy/rowtype-yoga/purescript-supabase
on main help sign in
Add or
commitb4d74e9f2ba0dad872aa84d9bc9cc7df206e694e authorMark Eibes <mark.eibes@gmail.com> dateMon 15 Apr 2024, 09:07 (2 years ago) parent3d7a270
5 files changed+44−1
unifiedsplit
src/Supabase/AuthHelpers/React.js+3 src/Supabase/AuthHelpers/React.purs+22 src/Supabase/Supabase.js+2 src/Supabase/Supabase.purs+14−1 test/Main.purs+3
src/Supabase/AuthHelpers/React.jsnew file+3
@@ -0,0 +1,3 @@
1+import { useUser } from "@supabase/auth-helpers-react";
2+
3+export const useUserImpl = useUser;
src/Supabase/AuthHelpers/React.pursnew file+22
@@ -0,0 +1,22 @@
1+module Supabase.AuthHelpers.React where
2+
3+import Prelude
4+
5+import Data.Maybe (Maybe)
6+import Data.Nullable (Nullable)
7+import Data.Nullable as Nullable
8+import Effect (Effect)
9+import Foreign (Foreign)
10+import React.Basic.Hooks (Hook, unsafeHook)
11+import Record.Studio (mapRecordKind)
12+import Supabase.Supabase as Supabase
13+import Supabase.Types (Client)
14+import Yoga.JSON as YogaJSON
15+import Yoga.JSON (class WriteForeign)
16+
17+foreign import useUserImpl :: Effect { user :: Nullable Supabase.User }
18+
19+useUser :: Hook (UseUser) { user :: Maybe Supabase.User }
20+useUser = unsafeHook useUserImpl <#> mapRecordKind Nullable.toMaybe
21+
22+foreign import data UseUser :: Type -> Type
src/Supabase/Supabase.js+2
@@ -29,6 +29,8 @@ export const eqRunImpl = (builder) => (key, value) => () =>
2929
3030export const eqImpl = (builder) => (key, value) => builder.eq(key, value);
3131
32+export const orImpl = conditions => builder => builder.or(...conditions);
33+
3234export const singleImpl = (filterBuilder) => () => filterBuilder.single();
3335
3436export const maybeSingleImpl = (filterBuilder) => () =>
src/Supabase/Supabase.purs+14−1
@@ -14,6 +14,7 @@ module Supabase.Supabase
1414 , SessionData
1515 , SignInOptions
1616 , StatusR
17+ , class Or
1718 , User
1819 , class Equals
1920 , class Select
@@ -25,6 +26,7 @@ module Supabase.Supabase
2526 , invoke
2627 , maybeSingle
2728 , onAuthStateChange
29+ , or
2830 , range
2931 , select
3032 , getUser
@@ -127,6 +129,18 @@ else instance (YogaJson.ReadForeign output) => Equals FilterBuilder (Aff output)
127129 equals :: String -> String -> FilterBuilder -> Aff output
128130 equals l r builder = runFn2 (eqRunImpl builder) l r # Promise.toAffE >>= Util.fromJSON
129131
132+foreign import orImpl :: forall builderIn builderOut. Array String -> builderIn -> builderOut
133+
134+class Or builder output | output -> builder where
135+ or :: Array String -> builder -> output
136+
137+instance Or FilterBuilder FilterBuilder where
138+ or :: Array String -> FilterBuilder -> FilterBuilder
139+ or keys fb = orImpl keys fb
140+else instance Or QueryBuilder FilterBuilder where
141+ or :: Array String -> QueryBuilder -> FilterBuilder
142+ or keys fb = orImpl keys fb
143+
130144foreign import singleImpl :: FilterBuilder -> Effect (Promise Foreign)
131145
132146single :: forall t. YogaJson.ReadForeign t => FilterBuilder -> Aff (Response t)
@@ -216,4 +230,3 @@ getUser client = do
216230 Just user, _ -> pure $ Right user
217231 _, Just error -> pure $ Left error
218232 _, _ -> pure $ Left (error "Unexpected response error")
219−
test/Main.purs+3
@@ -4,6 +4,9 @@ import Prelude
44
55import Effect (Effect)
66import Effect.Class.Console (log)
7+import Supabase (Client)
8+import Supabase.Supabase as SB
9+import Unsafe.Coerce (unsafeCoerce)
710
811main :: Effect Unit
912main = do