Updated types for auth hooks

This commit is contained in:
Luis Alvarez 2021-05-25 09:31:52 -05:00
parent f083b7ea22
commit 58d782b780
11 changed files with 43 additions and 29 deletions

View File

@ -2,12 +2,12 @@ import { useCallback } from 'react'
import type { MutationHook } from '@commerce/utils/types' import type { MutationHook } from '@commerce/utils/types'
import { CommerceError } from '@commerce/utils/errors' import { CommerceError } from '@commerce/utils/errors'
import useLogin, { UseLogin } from '@commerce/auth/use-login' import useLogin, { UseLogin } from '@commerce/auth/use-login'
import type { LoginBody } from '../api/customers/login' import type { LoginHook } from '../types/login'
import useCustomer from '../customer/use-customer' import useCustomer from '../customer/use-customer'
export default useLogin as UseLogin<typeof handler> export default useLogin as UseLogin<typeof handler>
export const handler: MutationHook<null, {}, LoginBody> = { export const handler: MutationHook<LoginHook> = {
fetchOptions: { fetchOptions: {
url: '/api/bigcommerce/customers/login', url: '/api/bigcommerce/customers/login',
method: 'POST', method: 'POST',

View File

@ -1,11 +1,12 @@
import { useCallback } from 'react' import { useCallback } from 'react'
import type { MutationHook } from '@commerce/utils/types' import type { MutationHook } from '@commerce/utils/types'
import useLogout, { UseLogout } from '@commerce/auth/use-logout' import useLogout, { UseLogout } from '@commerce/auth/use-logout'
import type { LogoutHook } from '../types/logout'
import useCustomer from '../customer/use-customer' import useCustomer from '../customer/use-customer'
export default useLogout as UseLogout<typeof handler> export default useLogout as UseLogout<typeof handler>
export const handler: MutationHook<null> = { export const handler: MutationHook<LogoutHook> = {
fetchOptions: { fetchOptions: {
url: '/api/bigcommerce/customers/logout', url: '/api/bigcommerce/customers/logout',
method: 'GET', method: 'GET',

View File

@ -2,12 +2,12 @@ import { useCallback } from 'react'
import type { MutationHook } from '@commerce/utils/types' import type { MutationHook } from '@commerce/utils/types'
import { CommerceError } from '@commerce/utils/errors' import { CommerceError } from '@commerce/utils/errors'
import useSignup, { UseSignup } from '@commerce/auth/use-signup' import useSignup, { UseSignup } from '@commerce/auth/use-signup'
import type { SignupBody } from '../api/customers/signup' import type { SignupHook } from '../types/signup'
import useCustomer from '../customer/use-customer' import useCustomer from '../customer/use-customer'
export default useSignup as UseSignup<typeof handler> export default useSignup as UseSignup<typeof handler>
export const handler: MutationHook<null, {}, SignupBody, SignupBody> = { export const handler: MutationHook<SignupHook> = {
fetchOptions: { fetchOptions: {
url: '/api/bigcommerce/customers/signup', url: '/api/bigcommerce/customers/signup',
method: 'POST', method: 'POST',

View File

@ -1,13 +1,14 @@
import { useHook, useMutationHook } from '../utils/use-hook' import { useHook, useMutationHook } from '../utils/use-hook'
import { mutationFetcher } from '../utils/default-fetcher' import { mutationFetcher } from '../utils/default-fetcher'
import type { MutationHook, HookFetcherFn } from '../utils/types' import type { MutationHook, HookFetcherFn } from '../utils/types'
import type { LoginHook } from '../types/login'
import type { Provider } from '..' import type { Provider } from '..'
export type UseLogin< export type UseLogin<
H extends MutationHook<any, any, any> = MutationHook<null, {}, {}> H extends MutationHook<LoginHook<any>> = MutationHook<LoginHook>
> = ReturnType<H['useHook']> > = ReturnType<H['useHook']>
export const fetcher: HookFetcherFn<null, {}> = mutationFetcher export const fetcher: HookFetcherFn<LoginHook> = mutationFetcher
const fn = (provider: Provider) => provider.auth?.useLogin! const fn = (provider: Provider) => provider.auth?.useLogin!

View File

@ -1,13 +1,14 @@
import { useHook, useMutationHook } from '../utils/use-hook' import { useHook, useMutationHook } from '../utils/use-hook'
import { mutationFetcher } from '../utils/default-fetcher' import { mutationFetcher } from '../utils/default-fetcher'
import type { HookFetcherFn, MutationHook } from '../utils/types' import type { HookFetcherFn, MutationHook } from '../utils/types'
import type { LogoutHook } from '../types/logout'
import type { Provider } from '..' import type { Provider } from '..'
export type UseLogout< export type UseLogout<
H extends MutationHook<any, any, any> = MutationHook<null> H extends MutationHook<LogoutHook<any>> = MutationHook<LogoutHook>
> = ReturnType<H['useHook']> > = ReturnType<H['useHook']>
export const fetcher: HookFetcherFn<null> = mutationFetcher export const fetcher: HookFetcherFn<LogoutHook> = mutationFetcher
const fn = (provider: Provider) => provider.auth?.useLogout! const fn = (provider: Provider) => provider.auth?.useLogout!

View File

@ -1,13 +1,14 @@
import { useHook, useMutationHook } from '../utils/use-hook' import { useHook, useMutationHook } from '../utils/use-hook'
import { mutationFetcher } from '../utils/default-fetcher' import { mutationFetcher } from '../utils/default-fetcher'
import type { HookFetcherFn, MutationHook } from '../utils/types' import type { HookFetcherFn, MutationHook } from '../utils/types'
import type { SignupHook } from '../types/signup'
import type { Provider } from '..' import type { Provider } from '..'
export type UseSignup< export type UseSignup<
H extends MutationHook<any, any, any> = MutationHook<null> H extends MutationHook<SignupHook<any>> = MutationHook<SignupHook>
> = ReturnType<H['useHook']> > = ReturnType<H['useHook']>
export const fetcher: HookFetcherFn<null> = mutationFetcher export const fetcher: HookFetcherFn<SignupHook> = mutationFetcher
const fn = (provider: Provider) => provider.auth?.useSignup! const fn = (provider: Provider) => provider.auth?.useSignup!

View File

@ -8,10 +8,6 @@ export type UseAddItem<
H extends MutationHook<AddItemHook<any>> = MutationHook<AddItemHook> H extends MutationHook<AddItemHook<any>> = MutationHook<AddItemHook>
> = ReturnType<H['useHook']> > = ReturnType<H['useHook']>
export type UseAddItem2<
H extends MutationHook<any> = MutationHook<AddItemHook>
> = ReturnType<H['useHook']>
export const fetcher: HookFetcherFn<AddItemHook> = mutationFetcher export const fetcher: HookFetcherFn<AddItemHook> = mutationFetcher
const fn = (provider: Provider) => provider.cart?.useAddItem! const fn = (provider: Provider) => provider.cart?.useAddItem!

View File

@ -7,14 +7,18 @@ export type LoginTypes = {
body: LoginBody body: LoginBody
} }
export type LoginHook<T extends LoginTypes = LoginTypes> = {
data: null
actionInput: LoginBody
fetchInput: LoginBody
body: T['body']
}
export type LoginSchema<T extends LoginTypes = LoginTypes> = { export type LoginSchema<T extends LoginTypes = LoginTypes> = {
endpoint: { endpoint: {
options: {} options: {}
handlers: { handlers: {
login: { login: LoginHook<T>
data: null
body: T['body']
}
} }
} }
} }

View File

@ -1,11 +1,17 @@
export type LogoutSchema = { export type LogoutTypes = {
body: { redirectTo?: string }
}
export type LogoutHook<T extends LogoutTypes = LogoutTypes> = {
data: null
body: T['body']
}
export type LogoutSchema<T extends LogoutTypes = LogoutTypes> = {
endpoint: { endpoint: {
options: {} options: {}
handlers: { handlers: {
logout: { logout: LogoutHook<T>
data: null
body: { redirectTo?: string }
}
} }
} }
} }

View File

@ -9,14 +9,18 @@ export type SignupTypes = {
body: SignupBody body: SignupBody
} }
export type SignupHook<T extends SignupTypes = SignupTypes> = {
data: null
body: T['body']
actionInput: T['body']
fetchInput: T['body']
}
export type SignupSchema<T extends SignupTypes = SignupTypes> = { export type SignupSchema<T extends SignupTypes = SignupTypes> = {
endpoint: { endpoint: {
options: {} options: {}
handlers: { handlers: {
signup: { signup: SignupHook<T>
data: null
body: T['body']
}
} }
} }
} }

View File

@ -70,7 +70,7 @@ export type HookSchemaBase = {
// Data obj returned by the hook and fetch operation // Data obj returned by the hook and fetch operation
data: any data: any
// Input expected by the hook // Input expected by the hook
input: {} input?: {}
// Input expected before doing a fetch operation (aka fetch handler) // Input expected before doing a fetch operation (aka fetch handler)
fetchInput?: {} fetchInput?: {}
// Data expected by the fetch operation // Data expected by the fetch operation