import React, { useState } from 'react'
import { FormContainer, TextFieldElement } from 'react-hook-form-mui'
import { Button } from '@mui/material'
import { LmComponentRender } from '@LmComponentRender'
import { useAuth0 } from '@auth0/auth0-react'
import { FieldError } from 'react-hook-form'
import { Auth0FormProps } from './authTypes'
import { auth0Endpoint } from '../../utils/auth0/auth0Helpers'
import { useUserData } from './useAuth'
import { useRouter } from 'next/router'
export default function LmAuthForm({ content }: Auth0FormProps) {
// const appCtx = useAppContext()
const router = useRouter()
const user = useUserData()
const locale = router.locale
const auth0Hook = useAuth0()
const [updating, setUpdating] = useState(false)
const defaults = {
email: user?.email || '',
given_name: user?.firstName || '',
family_name: user?.lastName || ''
}
const translations = {
de: {
email: 'Email',
given_name: 'Vorname',
family_name: 'Nachname',
submit: 'Aktualisieren',
error_required: 'Bitte das Pflichtfeld ausfüllen',
error_email: 'Das ist keine gültige Email-Adresse',
email_helper: 'Die Email Adresse kann nicht verändert werden.'
},
en: {
email: 'Email',
given_name: 'First Name',
family_name: 'Surname',
submit: 'Update',
error_required: 'This field is required',
error_email: 'This is not a valid email address',
email_helper: 'The email can not be changed.'
}
}
const currentLocale = locale || 'de'
const parseError = (fieldError: FieldError) => {
switch (fieldError.type) {
case 'required':
return translations[currentLocale].error_required
case 'pattern': {
return translations[currentLocale].error_email
}
default:
return fieldError.message
}
}
const onSuccess = async (data: any) => {
setUpdating(true)
const params = new URLSearchParams()
params.append('sub', user?.sub as string)
Object.keys(data).forEach((key) => {
params.append(key, data[key])
})
if (!auth0Hook) {
return // in case we are in backened of Storyblok
}
const accessToken = await auth0Hook.getAccessTokenSilently()
try {
await fetch(`${auth0Endpoint.api}/api/update-user?${params.toString()}`, {
headers: {
Authorization: `Bearer ${accessToken}`
}
})
} catch (e) {
console.error(e)
}
setUpdating(false)
}
return (
<>
{content.account_update_button?.length ? (
content.account_update_button.map((blok) => (
))
) : (
)}
{content.account_delete_body?.map((blok) => (
))}
{content.account_delete_button?.map((blok) => (
{
setUpdating(true)
if (!auth0Hook) {
return // inside of Storyblok
}
const accessToken = await auth0Hook.getAccessTokenSilently()
try {
await fetch(
`${auth0Endpoint.api}/api/delete-user?sub=${user?.sub || ''}`,
{
headers: {
Authorization: `Bearer ${accessToken}`
}
}
)
} catch (e) {
console.error(e)
}
setUpdating(false)
window.location.reload()
}}
/>
))}
>
)
}