Hi @dthyresson Thanks! I think I’m v close.
- I had to add the following to graphql.js in order for the context to work, as described here
// api/src/functions/graphql.js
import { getAuthenticationContext } from '@redwoodjs/api/dist/auth'
export const handler = createGraphQLHandler({
context: async ({ event, context }) => {
const authContext = await getAuthenticationContext({ event, context })
return authContext
},
...
- I can make status 200 posts, however, I cannot get the data to save down. I end-up with
{"data":{"updateUserMetadata":null}}
This is what I’ve got
// userMetadata.sdl.js
export const schema = gql`
type UserMetadata {
firstName: String
currentLocationId: Int
}
type Query {
userMetadata: UserMetadata
}
input UpdateUserMetadataInput {
firstName: String
currentLocationId: Int
}
type Mutation {
updateUserMetadata(input: UpdateUserMetadataInput!): UserMetadata
}
`
and
//userMetadata.js
import { requireAuth } from 'src/lib/auth'
import { createClient } from '@supabase/supabase-js'
export const updateUserMetadata = async ({ input }) => {
requireAuth()
const supabase = createClient(process.env.SUPABASE_URL, context[1].token)
const { user, error } = await supabase.auth.update({
data: {
firstName: input.firstName,
currentLocationId: input.currentLocationId,
},
// data: { ...input },
})
return user
}
export const userMetadata = () => {
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_KEY
)
const user = supabase.auth.user()
return user
}
Note: return user.user_metadata
here gives “Cannot read property ‘user_metadata’ of null”
and then I’m calling the service and passing data on an onClick
event (just for testing purposes)
//HomePage.js
...
const UPDATE_USER_METADATA = gql`
mutation UpdateUserMetadata($input: UpdateUserMetadataInput!) {
updateUserMetadata(input: $input) {
firstName
currentLocationId
}
}
`
const HomePage = () => {
const [update] = useMutation(UPDATE_USER_METADATA, {
onCompleted: async (data) => {
toast.success('User metadata updated!')
},
})
const onClick = async () => {
update({
variables: {
input: { firstName: 'Metadata', currentLocationId: 130 },
},
})
}
...
Appreciate that’s a lot to take in.