git.iko.soy/rowtype-yoga/purescript-supabase
on main help sign in
Add or
b4d74e9Mark Eibes
src/Supabase/AuthHelpers/React.jsnew file+3
unifiedsplit
@@ -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) => () =>
29
29
30export const eqImpl = (builder) => (key, value) => builder.eq(key, value);
30export const eqImpl = (builder) => (key, value) => builder.eq(key, value);
31
31
32+export const orImpl = conditions => builder => builder.or(...conditions);
33+
32export const singleImpl = (filterBuilder) => () => filterBuilder.single();
34export const singleImpl = (filterBuilder) => () => filterBuilder.single();
33
35
34export const maybeSingleImpl = (filterBuilder) => () =>
36export const maybeSingleImpl = (filterBuilder) => () =>
src/Supabase/Supabase.purs+14−1
@@ -14,6 +14,7 @@ module Supabase.Supabase
14 , SessionData
14 , SessionData
15 , SignInOptions
15 , SignInOptions
16 , StatusR
16 , StatusR
17+ , class Or
17 , User
18 , User
18 , class Equals
19 , class Equals
19 , class Select
20 , class Select
@@ -25,6 +26,7 @@ module Supabase.Supabase
25 , invoke
26 , invoke
26 , maybeSingle
27 , maybeSingle
27 , onAuthStateChange
28 , onAuthStateChange
29+ , or
28 , range
30 , range
29 , select
31 , select
30 , getUser
32 , getUser
@@ -127,6 +129,18 @@ else instance (YogaJson.ReadForeign output) => Equals FilterBuilder (Aff output)
127 equals :: String -> String -> FilterBuilder -> Aff output
129 equals :: String -> String -> FilterBuilder -> Aff output
128 equals l r builder = runFn2 (eqRunImpl builder) l r # Promise.toAffE >>= Util.fromJSON
130 equals l r builder = runFn2 (eqRunImpl builder) l r # Promise.toAffE >>= Util.fromJSON
129
131
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+
130foreign import singleImpl :: FilterBuilder -> Effect (Promise Foreign)
144foreign import singleImpl :: FilterBuilder -> Effect (Promise Foreign)
131
145
132single :: forall t. YogaJson.ReadForeign t => FilterBuilder -> Aff (Response t)
146single :: forall t. YogaJson.ReadForeign t => FilterBuilder -> Aff (Response t)
@@ -216,4 +230,3 @@ getUser client = do
216 Just user, _ -> pure $ Right user
230 Just user, _ -> pure $ Right user
217 _, Just error -> pure $ Left error
231 _, Just error -> pure $ Left error
218 _, _ -> pure $ Left (error "Unexpected response error")
232 _, _ -> pure $ Left (error "Unexpected response error")
219−
test/Main.purs+3
@@ -4,6 +4,9 @@ import Prelude
4
4
5import Effect (Effect)
5import Effect (Effect)
6import Effect.Class.Console (log)
6import Effect.Class.Console (log)
7+import Supabase (Client)
8+import Supabase.Supabase as SB
9+import Unsafe.Coerce (unsafeCoerce)
7
10
8main :: Effect Unit
11main :: Effect Unit
9main = do
12main = do