fenextjs-hook
Advanced tools
Comparing version
import { UserProps } from "fenextjs-interface/cjs/User"; | ||
import { RequestResultTypeProps, RequestProps } from "fenextjs-interface/cjs/Request"; | ||
/** | ||
* Properties to configure the useUser hook. | ||
*/ | ||
export interface useUserProps<Q = UserProps, R = any, E = any, T = RequestResultTypeProps> { | ||
export interface useUserProps<U = UserProps> { | ||
/** | ||
* Function to validate the user's token. By default, it will check that the user | ||
* object has a "token" property and decode it using JSON web tokens. | ||
* You can replace it with your own custom validation function. | ||
*/ | ||
validateTokenUser?: RequestProps<Q, R, E, T>; | ||
/** | ||
* Name Var of save user in localStorage. | ||
*/ | ||
varName?: string; | ||
onValidateUser?: (user: Q | null | undefined) => boolean; | ||
onValidateUser?: (user: U | null | undefined) => boolean; | ||
urlRedirectInLogut?: string; | ||
@@ -28,9 +21,9 @@ onLogOut?: () => void; | ||
*/ | ||
export declare const useUser: <U = UserProps>({ validateTokenUser: validateTokenUserProps, varName, onValidateUser, urlRedirectInLogut, onLogOut: onLogOutProps, }: useUserProps<U>) => { | ||
export declare const useUser: <U = UserProps>({ varName, onValidateUser, urlRedirectInLogut, onLogOut: onLogOutProps, }: useUserProps<U>) => { | ||
load: boolean; | ||
user: U | null | undefined; | ||
setUser: (newValue: any) => void; | ||
onLogin: (data: U) => Promise<unknown>; | ||
onLogin: (data: U) => unknown; | ||
onLogOut: () => void; | ||
isValidUser: boolean; | ||
}; |
@@ -5,5 +5,2 @@ "use strict"; | ||
const useLocalStorage_1 = require("../useLocalStorage"); | ||
const jwt_decode_1 = require("jwt-decode"); | ||
const Error_1 = require("fenextjs-interface/cjs/Error"); | ||
const Request_1 = require("fenextjs-interface/cjs/Request"); | ||
const react_1 = require("react"); | ||
@@ -17,45 +14,3 @@ /** | ||
*/ | ||
const useUser = ({ validateTokenUser: validateTokenUserProps, varName = "fenextjs-user", onValidateUser, urlRedirectInLogut, onLogOut: onLogOutProps, }) => { | ||
const validateTokenUserDefault = async (user) => { | ||
const { token } = user; | ||
if (!token) { | ||
throw { | ||
type: Request_1.RequestResultTypeProps.ERROR, | ||
message: "User not Token", | ||
error: { | ||
code: Error_1.ErrorCode.USER_TOKEN_NOT_FOUND, | ||
message: "User not Token", | ||
}, | ||
}; | ||
} | ||
try { | ||
const user_token = (0, jwt_decode_1.jwtDecode)(token); | ||
const { id } = user_token; | ||
if (id) { | ||
return { | ||
type: Request_1.RequestResultTypeProps.OK, | ||
message: "User Validate Ok", | ||
}; | ||
} | ||
throw { | ||
type: Request_1.RequestResultTypeProps.ERROR, | ||
message: "Token Invalid", | ||
error: { | ||
code: Error_1.ErrorCode.USER_TOKEN_INVALID, | ||
message: "Token Invalid", | ||
}, | ||
}; | ||
} | ||
catch (error) { | ||
throw { | ||
type: Request_1.RequestResultTypeProps.ERROR, | ||
message: "Token Invalid", | ||
error: { | ||
code: Error_1.ErrorCode.USER_TOKEN_INVALID, | ||
message: "Token Invalid", | ||
}, | ||
}; | ||
} | ||
}; | ||
const validateTokenUser = (0, react_1.useCallback)(validateTokenUserProps ?? validateTokenUserDefault, [validateTokenUserProps, validateTokenUserDefault]); | ||
const useUser = ({ varName = "fenextjs-user", onValidateUser, urlRedirectInLogut, onLogOut: onLogOutProps, }) => { | ||
const { value: user, load, setLocalStorage: setUser, } = (0, useLocalStorage_1.useLocalStorage)({ | ||
@@ -83,9 +38,11 @@ name: varName, | ||
*/ | ||
const onLogin = async (data) => { | ||
const onLogin = (data) => { | ||
try { | ||
const result = await validateTokenUser(data); | ||
if (result.type == Request_1.RequestResultTypeProps.OK) { | ||
setUser(data); | ||
if (onValidateUser) { | ||
if (!onValidateUser(data)) { | ||
throw new Error("Invalid User"); | ||
} | ||
} | ||
return result; | ||
setUser(data); | ||
return true; | ||
} | ||
@@ -92,0 +49,0 @@ catch (error) { |
{ | ||
"name": "fenextjs-hook", | ||
"version": "13.9.2", | ||
"version": "14.0.0", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "./cjs/index.js", |
Sorry, the diff of this file is not supported yet
144397
-2.2%2512
-1.95%