@orbe-agro/client-core 5.6.294 → 5.6.296

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/@ecme/auth/AuthContext.js.map +1 -1
  2. package/dist/@ecme/auth/AuthProvider.js +23 -4
  3. package/dist/@ecme/auth/AuthProvider.js.map +1 -1
  4. package/dist/@ecme/components/template/Footer.js +1 -1
  5. package/dist/@ecme/constants/auth.constant.js +21 -0
  6. package/dist/@ecme/constants/auth.constant.js.map +1 -0
  7. package/dist/@ecme/constants/index.js +4 -0
  8. package/dist/@ecme/constants/index.js.map +1 -1
  9. package/dist/@ecme/index.js +4 -0
  10. package/dist/@ecme/index.js.map +1 -1
  11. package/dist/@ecme/views/auth/SignIn/SignIn.js +0 -6
  12. package/dist/@ecme/views/auth/SignIn/SignIn.js.map +1 -1
  13. package/dist/@ecme/views/auth/SignIn/components/SignInForm.js +8 -2
  14. package/dist/@ecme/views/auth/SignIn/components/SignInForm.js.map +1 -1
  15. package/dist/@ecme/views/guide/Documentations/components/Authentication.js +28 -2
  16. package/dist/@ecme/views/guide/Documentations/components/Authentication.js.map +1 -1
  17. package/dist/@types/@ecme/auth/AuthContext.d.ts +1 -1
  18. package/dist/@types/@ecme/auth/AuthContext.d.ts.map +1 -1
  19. package/dist/@types/@ecme/auth/AuthProvider.d.ts.map +1 -1
  20. package/dist/@types/@ecme/auth/useAuth.d.ts +1 -1
  21. package/dist/@types/@ecme/auth/useAuth.d.ts.map +1 -1
  22. package/dist/@types/@ecme/constants/auth.constant.d.ts +4 -0
  23. package/dist/@types/@ecme/constants/auth.constant.d.ts.map +1 -0
  24. package/dist/@types/@ecme/constants/index.d.ts +1 -0
  25. package/dist/@types/@ecme/constants/index.d.ts.map +1 -1
  26. package/dist/@types/@ecme/views/auth/SignIn/SignIn.d.ts.map +1 -1
  27. package/dist/@types/@ecme/views/auth/SignIn/components/SignInForm.d.ts +0 -1
  28. package/dist/@types/@ecme/views/auth/SignIn/components/SignInForm.d.ts.map +1 -1
  29. package/dist/@types/@ecme/views/guide/Documentations/components/Authentication.d.ts.map +1 -1
  30. package/dist/@types/base/@types/models/compras/RequisicaoCompra.d.ts +6 -0
  31. package/dist/@types/base/@types/models/compras/RequisicaoCompra.d.ts.map +1 -1
  32. package/dist/@types/base/hooks/useIdleTimeout.d.ts +1 -1
  33. package/dist/@types/base/hooks/useIdleTimeout.d.ts.map +1 -1
  34. package/dist/base/hooks/useIdleTimeout.js +2 -1
  35. package/dist/base/hooks/useIdleTimeout.js.map +1 -1
  36. package/lib/@ecme/auth/AuthContext.ts +1 -1
  37. package/lib/@ecme/auth/AuthProvider.tsx +37 -4
  38. package/lib/@ecme/constants/auth.constant.ts +19 -0
  39. package/lib/@ecme/constants/index.ts +1 -0
  40. package/lib/@ecme/views/auth/SignIn/SignIn.tsx +0 -10
  41. package/lib/@ecme/views/auth/SignIn/components/SignInForm.tsx +8 -3
  42. package/lib/@ecme/views/guide/Documentations/components/Authentication.tsx +25 -2
  43. package/lib/base/@types/models/compras/RequisicaoCompra.ts +7 -0
  44. package/lib/base/hooks/useIdleTimeout.ts +6 -2
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.js","sources":["../../../lib/@ecme/auth/AuthContext.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport type {\n SignInCredential,\n SignUpCredential,\n AuthResult,\n User,\n OauthSignInCallbackPayload,\n} from \"@/@types/auth\";\n\ntype Auth = {\n authenticated: boolean;\n user: User;\n signIn: (values: SignInCredential) => AuthResult;\n signUp: (values: SignUpCredential) => AuthResult;\n signOut: () => void;\n oAuthSignIn: (\n callback: (payload: OauthSignInCallbackPayload) => void\n ) => void;\n updateUserSession: (newUserData: Partial<User>) => void;\n};\n\nconst defaultFunctionPlaceHolder = async (): AuthResult => {\n await new Promise((resolve) => setTimeout(resolve, 0));\n return {\n status: \"\",\n message: \"\",\n };\n};\n\nconst defaultOAuthSignInPlaceHolder = (\n callback: (payload: OauthSignInCallbackPayload) => void\n): void => {\n callback({\n onSignIn: () => {},\n redirect: () => {},\n });\n};\n\nconst defaultUpdateUserSessionPlaceHolder = (\n newUserData: Partial<User>\n): void => {\n newUserData;\n};\n\nconst AuthContext = createContext<Auth>({\n authenticated: false,\n user: {},\n signIn: async () => defaultFunctionPlaceHolder(),\n signUp: async () => defaultFunctionPlaceHolder(),\n signOut: () => {},\n oAuthSignIn: defaultOAuthSignInPlaceHolder,\n updateUserSession: defaultUpdateUserSessionPlaceHolder,\n});\n\nexport default AuthContext;\n"],"names":[],"mappings":";AAqBA,MAAM,6BAA6B,YAAwB;AACzD,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AACrD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAEb;AAEA,MAAM,gCAAgC,CACpC,aACS;AACT,WAAS;AAAA,IACP,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,UAAU,MAAM;AAAA,IAAC;AAAA,EAAA,CAClB;AACH;AAEA,MAAM,sCAAsC,CAC1C,gBACS;AACT;AACF;AAEA,MAAM,cAAc,cAAoB;AAAA,EACtC,eAAe;AAAA,EACf,MAAM,CAAA;AAAA,EACN,QAAQ,YAAY,2BAAA;AAAA,EACpB,QAAQ,YAAY,2BAAA;AAAA,EACpB,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,aAAa;AAAA,EACb,mBAAmB;AACrB,CAAC;"}
1
+ {"version":3,"file":"AuthContext.js","sources":["../../../lib/@ecme/auth/AuthContext.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport type {\n SignInCredential,\n SignUpCredential,\n AuthResult,\n User,\n OauthSignInCallbackPayload,\n} from \"@/@types/auth\";\n\ntype Auth = {\n authenticated: boolean;\n user: User;\n signIn: (values: SignInCredential) => AuthResult;\n signUp: (values: SignUpCredential) => AuthResult;\n signOut: (redirectUrl?: string) => void;\n oAuthSignIn: (\n callback: (payload: OauthSignInCallbackPayload) => void\n ) => void;\n updateUserSession: (newUserData: Partial<User>) => void;\n};\n\nconst defaultFunctionPlaceHolder = async (): AuthResult => {\n await new Promise((resolve) => setTimeout(resolve, 0));\n return {\n status: \"\",\n message: \"\",\n };\n};\n\nconst defaultOAuthSignInPlaceHolder = (\n callback: (payload: OauthSignInCallbackPayload) => void\n): void => {\n callback({\n onSignIn: () => {},\n redirect: () => {},\n });\n};\n\nconst defaultUpdateUserSessionPlaceHolder = (\n newUserData: Partial<User>\n): void => {\n newUserData;\n};\n\nconst AuthContext = createContext<Auth>({\n authenticated: false,\n user: {},\n signIn: async () => defaultFunctionPlaceHolder(),\n signUp: async () => defaultFunctionPlaceHolder(),\n signOut: () => {},\n oAuthSignIn: defaultOAuthSignInPlaceHolder,\n updateUserSession: defaultUpdateUserSessionPlaceHolder,\n});\n\nexport default AuthContext;\n"],"names":[],"mappings":";AAqBA,MAAM,6BAA6B,YAAwB;AACzD,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AACrD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAEb;AAEA,MAAM,gCAAgC,CACpC,aACS;AACT,WAAS;AAAA,IACP,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,UAAU,MAAM;AAAA,IAAC;AAAA,EAAA,CAClB;AACH;AAEA,MAAM,sCAAsC,CAC1C,gBACS;AACT;AACF;AAEA,MAAM,cAAc,cAAoB;AAAA,EACtC,eAAe;AAAA,EACf,MAAM,CAAA;AAAA,EACN,QAAQ,YAAY,2BAAA;AAAA,EACpB,QAAQ,YAAY,2BAAA;AAAA,EACpB,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,aAAa;AAAA,EACb,mBAAmB;AACrB,CAAC;"}
@@ -1,6 +1,7 @@
1
1
  import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
2
  import appConfig from "../configs/app.config.js";
3
3
  import { REDIRECT_URL_KEY } from "../constants/app.constant.js";
4
+ import { SIGN_IN_NETWORK_ERROR_MESSAGE, SIGN_IN_DEFAULT_ERROR_MESSAGE, SIGN_IN_ERROR_MESSAGES_BY_STATUS } from "../constants/auth.constant.js";
4
5
  import { apiSignIn, apiSignUp, apiSignOut } from "../services/AuthService.js";
5
6
  import { useSessionUser, useToken } from "../store/authStore.js";
6
7
  import "../../base/services/index.js";
@@ -20,6 +21,13 @@ const IsolatedNavigator = ({ ref }) => {
20
21
  }, [navigate]);
21
22
  return /* @__PURE__ */ jsx(Fragment, {});
22
23
  };
24
+ const getSignInErrorMessage = (error) => {
25
+ const response = error?.response;
26
+ if (!response) {
27
+ return error?.request ? SIGN_IN_NETWORK_ERROR_MESSAGE : SIGN_IN_DEFAULT_ERROR_MESSAGE;
28
+ }
29
+ return SIGN_IN_ERROR_MESSAGES_BY_STATUS[response.status] || response.data?.message || SIGN_IN_DEFAULT_ERROR_MESSAGE;
30
+ };
23
31
  function AuthProvider({ children }) {
24
32
  const signedIn = useSessionUser((state) => state.session.signedIn);
25
33
  const user = useSessionUser((state) => state.user);
@@ -122,13 +130,13 @@ function AuthProvider({ children }) {
122
130
  }
123
131
  return {
124
132
  status: "failed",
125
- message: "Unable to sign in"
133
+ message: SIGN_IN_DEFAULT_ERROR_MESSAGE
126
134
  };
127
135
  } catch (errors) {
128
136
  console.error("ERRO NA CHAMADA DA API:", errors);
129
137
  return {
130
138
  status: "failed",
131
- message: errors?.response?.data?.message || errors.toString()
139
+ message: getSignInErrorMessage(errors)
132
140
  };
133
141
  }
134
142
  };
@@ -161,12 +169,23 @@ function AuthProvider({ children }) {
161
169
  };
162
170
  }
163
171
  };
164
- const signOut = async () => {
172
+ const signOut = async (redirectUrl) => {
165
173
  try {
166
174
  await apiSignOut();
167
175
  } finally {
168
176
  handleSignOut();
169
- navigatorRef.current?.navigate(appConfig.unAuthenticatedEntryPath);
177
+ if (redirectUrl) {
178
+ const params = new URLSearchParams({
179
+ [REDIRECT_URL_KEY]: redirectUrl
180
+ });
181
+ navigatorRef.current?.navigate(
182
+ `${appConfig.unAuthenticatedEntryPath}?${params.toString()}`
183
+ );
184
+ } else {
185
+ navigatorRef.current?.navigate(
186
+ appConfig.unAuthenticatedEntryPath
187
+ );
188
+ }
170
189
  }
171
190
  };
172
191
  const oAuthSignIn = (callback) => {
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.js","sources":["../../../lib/@ecme/auth/AuthProvider.tsx"],"sourcesContent":["import type {\n AuthResult,\n OauthSignInCallbackPayload,\n SignInCredential,\n SignInResponse,\n SignUpCredential,\n Token,\n} from '@/@types/auth'\nimport appConfig from '@/configs/app.config'\nimport { REDIRECT_URL_KEY } from '@/constants/app.constant'\nimport { apiSignIn, apiSignOut, apiSignUp } from '@/services/AuthService'\nimport { useSessionUser, useToken } from '@/store/authStore'\nimport {\n apiFetchUserFuncionalidadesDetail,\n apiFetchUserVinculosUsuario,\n apiFindUserById,\n} from '@base/services'\nimport {\n TFuncionalidadeMap,\n useSessionUserDataStore,\n} from '@base/store/auth/sessionUserData'\nimport { mapFuncionalidadesByPath } from '@base/utils/modules/dm/funcionalidades'\nimport { ReactNode, Ref, useImperativeHandle, useRef } from 'react'\nimport { NavigateFunction, useNavigate } from 'react-router-dom'\nimport AuthContext from './AuthContext'\n\ntype AuthProviderProps = { children: ReactNode }\n\nexport type IsolatedNavigatorRef = {\n navigate: NavigateFunction\n}\n\nconst IsolatedNavigator = ({ ref }: { ref: Ref<IsolatedNavigatorRef> }) => {\n const navigate = useNavigate()\n\n useImperativeHandle(ref, () => {\n return {\n navigate,\n }\n }, [navigate])\n\n return <></>\n}\n\nfunction AuthProvider({ children }: AuthProviderProps) {\n const signedIn = useSessionUser((state) => state.session.signedIn)\n const user = useSessionUser((state) => state.user)\n const setUser = useSessionUser((state) => state.setUser)\n const setSessionSignedIn = useSessionUser(\n (state) => state.setSessionSignedIn,\n )\n\n const setRolesSet = useSessionUserDataStore((state) => state.setRolesSet)\n const setFuncionalidadesSet = useSessionUserDataStore(\n (state) => state.setFuncionalidadesSet,\n )\n const setFuncionalidadesNameSet = useSessionUserDataStore(\n (state) => state.setFuncionalidadesNameSet,\n )\n const setFuncionalidadesMap = useSessionUserDataStore(\n (state) => state.setFuncionalidesMap,\n )\n const setPermissoesSet = useSessionUserDataStore(\n (state) => state.setPermissoesSet,\n )\n\n const { token, setToken } = useToken()\n\n const authenticated = Boolean(token && signedIn)\n\n const navigatorRef = useRef<IsolatedNavigatorRef>(null)\n\n const redirect = (userData: { primeiroAcesso?: boolean }) => {\n if (userData.primeiroAcesso) {\n navigatorRef.current?.navigate(appConfig.firstAccessPath)\n return\n }\n const search = window.location.search\n const params = new URLSearchParams(search)\n const redirectUrl = params.get(REDIRECT_URL_KEY)\n\n navigatorRef.current?.navigate(\n redirectUrl ? redirectUrl : appConfig.authenticatedEntryPath,\n )\n }\n\n const handleSignIn = (tokens: Token) => {\n setToken(tokens.accessToken)\n setSessionSignedIn(true)\n }\n\n const handleSignOut = () => {\n setToken('')\n setUser({})\n setSessionSignedIn(false)\n }\n\n async function handlePostAuth(resp: SignInResponse) {\n const findUserByIdResp = await apiFindUserById(resp.id)\n\n const { roles } = findUserByIdResp\n \n // Extrair os nomes das roles e salvar no rolesSet\n const rolesNames = roles.map((role) => role.nome)\n const rolesSet = new Set<string>(rolesNames)\n setRolesSet(rolesSet)\n \n const funcionalidades = roles.flatMap((role) =>\n role.funcionalidades.map((func) => func.url),\n )\n\n const funcionalidadesSet = new Set<string>(funcionalidades || [])\n setFuncionalidadesSet(funcionalidadesSet)\n\n const funcionalidadesMap = funcionalidades.reduce(\n mapFuncionalidadesByPath,\n {} as TFuncionalidadeMap,\n )\n\n setFuncionalidadesMap(funcionalidadesMap)\n\n // Extrair permissoes ativas de todas as funcionalidades e salvar no permissoesSet\n const permissoes = roles.flatMap((role) =>\n role.funcionalidades.flatMap((func) =>\n (func.permissoes || [])\n .filter((p: any) => p.ativo)\n .map((p: any) => `${p.endpoint},${p.httpMethod}`),\n ),\n )\n\n const permissoesSet = new Set<string>(permissoes || [])\n setPermissoesSet(permissoesSet)\n \n }\n\n const signIn = async (values: SignInCredential): AuthResult => {\n try {\n const resp = await apiSignIn(values)\n\n if (resp) {\n handleSignIn({ accessToken: resp.jwtToken })\n const funcionalidades = await apiFetchUserFuncionalidadesDetail(\n resp.id,\n )\n const vinculosUsuario = await apiFetchUserVinculosUsuario(\n resp.id,\n )\n\n const funcionalidadesUrls = funcionalidades.map((f) => f.url)\n const funcionalidadesNames = new Set<string>(\n funcionalidades.map((f) => f.nome),\n )\n\n setFuncionalidadesNameSet(funcionalidadesNames)\n\n const newUser = {\n userId: resp.id.toString(),\n userName: resp.nome,\n email: resp.email,\n primeiroAcesso: resp.primeiroAcesso,\n authority: funcionalidadesUrls,\n vinculosUsuario: vinculosUsuario,\n }\n handlePostAuth(resp)\n setUser(newUser)\n redirect(newUser)\n return {\n status: 'success',\n message: '',\n }\n }\n return {\n status: 'failed',\n message: 'Unable to sign in',\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (errors: any) {\n console.error('ERRO NA CHAMADA DA API:', errors)\n return {\n status: 'failed',\n message: errors?.response?.data?.message || errors.toString(),\n }\n }\n }\n\n const signUp = async (values: SignUpCredential): AuthResult => {\n try {\n const resp = await apiSignUp(values)\n if (resp) {\n handleSignIn({ accessToken: resp.jwtToken })\n // Armazenar ID e nome do usuário no estado\n const newUser = {\n userId: resp.id.toString(),\n userName: resp.nome,\n email: resp.email,\n primeiroAcesso: false,\n }\n setUser(newUser)\n redirect(newUser)\n return {\n status: 'success',\n message: '',\n }\n }\n return {\n status: 'failed',\n message: 'Unable to sign up',\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (errors: any) {\n return {\n status: 'failed',\n message: errors?.response?.data?.message || errors.toString(),\n }\n }\n }\n\n const signOut = async () => {\n try {\n await apiSignOut()\n } finally {\n handleSignOut()\n navigatorRef.current?.navigate(appConfig.unAuthenticatedEntryPath)\n }\n }\n const oAuthSignIn = (\n callback: (payload: OauthSignInCallbackPayload) => void,\n ) => {\n callback({\n onSignIn: handleSignIn,\n redirect: () => redirect(user),\n })\n }\n\n const updateUserSession = (newUserData: Partial<typeof user>) => {\n setUser({ ...user, ...newUserData })\n }\n return (\n <AuthContext.Provider\n value={{\n authenticated,\n user,\n signIn,\n signUp,\n signOut,\n oAuthSignIn,\n updateUserSession,\n }}\n >\n {children}\n <IsolatedNavigator ref={navigatorRef} />\n </AuthContext.Provider>\n )\n}\n\nexport default AuthProvider\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthProvider.js","sources":["../../../lib/@ecme/auth/AuthProvider.tsx"],"sourcesContent":["import type {\n AuthResult,\n OauthSignInCallbackPayload,\n SignInCredential,\n SignInResponse,\n SignUpCredential,\n Token,\n} from '@/@types/auth'\nimport appConfig from '@/configs/app.config'\nimport { REDIRECT_URL_KEY } from '@/constants/app.constant'\nimport {\n SIGN_IN_DEFAULT_ERROR_MESSAGE,\n SIGN_IN_ERROR_MESSAGES_BY_STATUS,\n SIGN_IN_NETWORK_ERROR_MESSAGE,\n} from '@/constants/auth.constant'\nimport { apiSignIn, apiSignOut, apiSignUp } from '@/services/AuthService'\nimport { useSessionUser, useToken } from '@/store/authStore'\nimport {\n apiFetchUserFuncionalidadesDetail,\n apiFetchUserVinculosUsuario,\n apiFindUserById,\n} from '@base/services'\nimport {\n TFuncionalidadeMap,\n useSessionUserDataStore,\n} from '@base/store/auth/sessionUserData'\nimport { mapFuncionalidadesByPath } from '@base/utils/modules/dm/funcionalidades'\nimport { ReactNode, Ref, useImperativeHandle, useRef } from 'react'\nimport { NavigateFunction, useNavigate } from 'react-router-dom'\nimport AuthContext from './AuthContext'\n\ntype AuthProviderProps = { children: ReactNode }\n\nexport type IsolatedNavigatorRef = {\n navigate: NavigateFunction\n}\n\nconst IsolatedNavigator = ({ ref }: { ref: Ref<IsolatedNavigatorRef> }) => {\n const navigate = useNavigate()\n\n useImperativeHandle(ref, () => {\n return {\n navigate,\n }\n }, [navigate])\n\n return <></>\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getSignInErrorMessage = (error: any): string => {\n const response = error?.response\n\n if (!response) {\n return error?.request\n ? SIGN_IN_NETWORK_ERROR_MESSAGE\n : SIGN_IN_DEFAULT_ERROR_MESSAGE\n }\n\n return (\n SIGN_IN_ERROR_MESSAGES_BY_STATUS[response.status] ||\n response.data?.message ||\n SIGN_IN_DEFAULT_ERROR_MESSAGE\n )\n}\n\nfunction AuthProvider({ children }: AuthProviderProps) {\n const signedIn = useSessionUser((state) => state.session.signedIn)\n const user = useSessionUser((state) => state.user)\n const setUser = useSessionUser((state) => state.setUser)\n const setSessionSignedIn = useSessionUser(\n (state) => state.setSessionSignedIn,\n )\n\n const setRolesSet = useSessionUserDataStore((state) => state.setRolesSet)\n const setFuncionalidadesSet = useSessionUserDataStore(\n (state) => state.setFuncionalidadesSet,\n )\n const setFuncionalidadesNameSet = useSessionUserDataStore(\n (state) => state.setFuncionalidadesNameSet,\n )\n const setFuncionalidadesMap = useSessionUserDataStore(\n (state) => state.setFuncionalidesMap,\n )\n const setPermissoesSet = useSessionUserDataStore(\n (state) => state.setPermissoesSet,\n )\n\n const { token, setToken } = useToken()\n\n const authenticated = Boolean(token && signedIn)\n\n const navigatorRef = useRef<IsolatedNavigatorRef>(null)\n\n const redirect = (userData: { primeiroAcesso?: boolean }) => {\n if (userData.primeiroAcesso) {\n navigatorRef.current?.navigate(appConfig.firstAccessPath)\n return\n }\n const search = window.location.search\n const params = new URLSearchParams(search)\n const redirectUrl = params.get(REDIRECT_URL_KEY)\n\n navigatorRef.current?.navigate(\n redirectUrl ? redirectUrl : appConfig.authenticatedEntryPath,\n )\n }\n\n const handleSignIn = (tokens: Token) => {\n setToken(tokens.accessToken)\n setSessionSignedIn(true)\n }\n\n const handleSignOut = () => {\n setToken('')\n setUser({})\n setSessionSignedIn(false)\n }\n\n async function handlePostAuth(resp: SignInResponse) {\n const findUserByIdResp = await apiFindUserById(resp.id)\n\n const { roles } = findUserByIdResp\n \n // Extrair os nomes das roles e salvar no rolesSet\n const rolesNames = roles.map((role) => role.nome)\n const rolesSet = new Set<string>(rolesNames)\n setRolesSet(rolesSet)\n \n const funcionalidades = roles.flatMap((role) =>\n role.funcionalidades.map((func) => func.url),\n )\n\n const funcionalidadesSet = new Set<string>(funcionalidades || [])\n setFuncionalidadesSet(funcionalidadesSet)\n\n const funcionalidadesMap = funcionalidades.reduce(\n mapFuncionalidadesByPath,\n {} as TFuncionalidadeMap,\n )\n\n setFuncionalidadesMap(funcionalidadesMap)\n\n // Extrair permissoes ativas de todas as funcionalidades e salvar no permissoesSet\n const permissoes = roles.flatMap((role) =>\n role.funcionalidades.flatMap((func) =>\n (func.permissoes || [])\n .filter((p: any) => p.ativo)\n .map((p: any) => `${p.endpoint},${p.httpMethod}`),\n ),\n )\n\n const permissoesSet = new Set<string>(permissoes || [])\n setPermissoesSet(permissoesSet)\n \n }\n\n const signIn = async (values: SignInCredential): AuthResult => {\n try {\n const resp = await apiSignIn(values)\n\n if (resp) {\n handleSignIn({ accessToken: resp.jwtToken })\n const funcionalidades = await apiFetchUserFuncionalidadesDetail(\n resp.id,\n )\n const vinculosUsuario = await apiFetchUserVinculosUsuario(\n resp.id,\n )\n\n const funcionalidadesUrls = funcionalidades.map((f) => f.url)\n const funcionalidadesNames = new Set<string>(\n funcionalidades.map((f) => f.nome),\n )\n\n setFuncionalidadesNameSet(funcionalidadesNames)\n\n const newUser = {\n userId: resp.id.toString(),\n userName: resp.nome,\n email: resp.email,\n primeiroAcesso: resp.primeiroAcesso,\n authority: funcionalidadesUrls,\n vinculosUsuario: vinculosUsuario,\n }\n handlePostAuth(resp)\n setUser(newUser)\n redirect(newUser)\n return {\n status: 'success',\n message: '',\n }\n }\n return {\n status: 'failed',\n message: SIGN_IN_DEFAULT_ERROR_MESSAGE,\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (errors: any) {\n console.error('ERRO NA CHAMADA DA API:', errors)\n return {\n status: 'failed',\n message: getSignInErrorMessage(errors),\n }\n }\n }\n\n const signUp = async (values: SignUpCredential): AuthResult => {\n try {\n const resp = await apiSignUp(values)\n if (resp) {\n handleSignIn({ accessToken: resp.jwtToken })\n // Armazenar ID e nome do usuário no estado\n const newUser = {\n userId: resp.id.toString(),\n userName: resp.nome,\n email: resp.email,\n primeiroAcesso: false,\n }\n setUser(newUser)\n redirect(newUser)\n return {\n status: 'success',\n message: '',\n }\n }\n return {\n status: 'failed',\n message: 'Unable to sign up',\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (errors: any) {\n return {\n status: 'failed',\n message: errors?.response?.data?.message || errors.toString(),\n }\n }\n }\n\n const signOut = async (redirectUrl?: string) => {\n try {\n await apiSignOut()\n } finally {\n handleSignOut()\n if (redirectUrl) {\n const params = new URLSearchParams({\n [REDIRECT_URL_KEY]: redirectUrl,\n })\n navigatorRef.current?.navigate(\n `${appConfig.unAuthenticatedEntryPath}?${params.toString()}`,\n )\n } else {\n navigatorRef.current?.navigate(\n appConfig.unAuthenticatedEntryPath,\n )\n }\n }\n }\n const oAuthSignIn = (\n callback: (payload: OauthSignInCallbackPayload) => void,\n ) => {\n callback({\n onSignIn: handleSignIn,\n redirect: () => redirect(user),\n })\n }\n\n const updateUserSession = (newUserData: Partial<typeof user>) => {\n setUser({ ...user, ...newUserData })\n }\n return (\n <AuthContext.Provider\n value={{\n authenticated,\n user,\n signIn,\n signUp,\n signOut,\n oAuthSignIn,\n updateUserSession,\n }}\n >\n {children}\n <IsolatedNavigator ref={navigatorRef} />\n </AuthContext.Provider>\n )\n}\n\nexport default AuthProvider\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import Container from "../shared/Container.js";
3
3
  import classNames from "../../utils/classNames.js";
4
4
  import { APP_NAME } from "../../constants/app.constant.js";
5
5
  import { PAGE_CONTAINER_GUTTER_X } from "../../constants/theme.constant.js";
6
- const version = true ? "5.6.294" : "0.0.0";
6
+ const version = true ? "5.6.296" : "0.0.0";
7
7
  const FooterContent = () => {
8
8
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-auto items-center justify-between", children: [
9
9
  /* @__PURE__ */ jsxs("span", { children: [
@@ -0,0 +1,21 @@
1
+ const SIGN_IN_DEFAULT_ERROR_MESSAGE = "Não foi possível realizar o login. Tente novamente mais tarde.";
2
+ const SIGN_IN_NETWORK_ERROR_MESSAGE = "Não foi possível conectar ao servidor. Verifique sua conexão e tente novamente.";
3
+ const SIGN_IN_ERROR_MESSAGES_BY_STATUS = {
4
+ 400: "Dados de login inválidos. Verifique as informações e tente novamente.",
5
+ 401: "Login ou senha incorretos.",
6
+ 403: "Acesso negado. Seu usuário não tem permissão para acessar o sistema.",
7
+ 404: "Usuário não encontrado.",
8
+ 408: "O servidor demorou para responder. Tente novamente.",
9
+ 423: "Usuário bloqueado. Entre em contato com o administrador.",
10
+ 429: "Muitas tentativas de login. Aguarde alguns instantes e tente novamente.",
11
+ 500: "Erro interno no servidor. Tente novamente mais tarde.",
12
+ 502: "Serviço indisponível no momento. Tente novamente mais tarde.",
13
+ 503: "Serviço indisponível no momento. Tente novamente mais tarde.",
14
+ 504: "O servidor demorou para responder. Tente novamente mais tarde."
15
+ };
16
+ export {
17
+ SIGN_IN_DEFAULT_ERROR_MESSAGE,
18
+ SIGN_IN_ERROR_MESSAGES_BY_STATUS,
19
+ SIGN_IN_NETWORK_ERROR_MESSAGE
20
+ };
21
+ //# sourceMappingURL=auth.constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.constant.js","sources":["../../../lib/@ecme/constants/auth.constant.ts"],"sourcesContent":["export const SIGN_IN_DEFAULT_ERROR_MESSAGE =\n 'Não foi possível realizar o login. Tente novamente mais tarde.'\n\nexport const SIGN_IN_NETWORK_ERROR_MESSAGE =\n 'Não foi possível conectar ao servidor. Verifique sua conexão e tente novamente.'\n\nexport const SIGN_IN_ERROR_MESSAGES_BY_STATUS: Record<number, string> = {\n 400: 'Dados de login inválidos. Verifique as informações e tente novamente.',\n 401: 'Login ou senha incorretos.',\n 403: 'Acesso negado. Seu usuário não tem permissão para acessar o sistema.',\n 404: 'Usuário não encontrado.',\n 408: 'O servidor demorou para responder. Tente novamente.',\n 423: 'Usuário bloqueado. Entre em contato com o administrador.',\n 429: 'Muitas tentativas de login. Aguarde alguns instantes e tente novamente.',\n 500: 'Erro interno no servidor. Tente novamente mais tarde.',\n 502: 'Serviço indisponível no momento. Tente novamente mais tarde.',\n 503: 'Serviço indisponível no momento. Tente novamente mais tarde.',\n 504: 'O servidor demorou para responder. Tente novamente mais tarde.',\n}\n"],"names":[],"mappings":"AAAO,MAAM,gCACT;AAEG,MAAM,gCACT;AAEG,MAAM,mCAA2D;AAAA,EACpE,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACT;"}
@@ -1,5 +1,6 @@
1
1
  import { REQUEST_HEADER_AUTH_KEY, TOKEN_NAME_IN_STORAGE, TOKEN_TYPE } from "./api.constant.js";
2
2
  import { APP_NAME, REDIRECT_URL_KEY } from "./app.constant.js";
3
+ import { SIGN_IN_DEFAULT_ERROR_MESSAGE, SIGN_IN_ERROR_MESSAGES_BY_STATUS, SIGN_IN_NETWORK_ERROR_MESSAGE } from "./auth.constant.js";
3
4
  import { COLORS, COLOR_1, COLOR_10, COLOR_2, COLOR_3, COLOR_4, COLOR_5, COLOR_6, COLOR_7, COLOR_8, COLOR_9 } from "./chart.constant.js";
4
5
  import { countryList } from "./countries.constant.js";
5
6
  import { NAV_ITEM_TYPE_COLLAPSE, NAV_ITEM_TYPE_ITEM, NAV_ITEM_TYPE_TITLE } from "./navigation.constant.js";
@@ -48,6 +49,9 @@ export {
48
49
  SIDE_NAV_COLLAPSED_WIDTH,
49
50
  SIDE_NAV_CONTENT_GUTTER,
50
51
  SIDE_NAV_WIDTH,
52
+ SIGN_IN_DEFAULT_ERROR_MESSAGE,
53
+ SIGN_IN_ERROR_MESSAGES_BY_STATUS,
54
+ SIGN_IN_NETWORK_ERROR_MESSAGE,
51
55
  SPLITTED_SIDE_NAV_MINI_WIDTH,
52
56
  STACKED_SIDE_NAV_SECONDARY_WIDTH,
53
57
  THEME_ENUM,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -106,6 +106,7 @@ import { REQUEST_HEADER_AUTH_KEY, TOKEN_NAME_IN_STORAGE, TOKEN_TYPE } from "./co
106
106
  import { Radio } from "./components/ui/Radio/index.js";
107
107
  import { default as default78 } from "./components/ui/DatePicker/RangeCalendar.js";
108
108
  import { default as default79 } from "./components/shared/RichTextEditor/RichTextEditor.js";
109
+ import { SIGN_IN_DEFAULT_ERROR_MESSAGE, SIGN_IN_ERROR_MESSAGES_BY_STATUS, SIGN_IN_NETWORK_ERROR_MESSAGE } from "./constants/auth.constant.js";
109
110
  import { default as default80 } from "./components/ui/ScrollBar/ScrollBar.js";
110
111
  import { Segment } from "./components/ui/Segment/index.js";
111
112
  import { default as default81 } from "./components/ui/Select/Select.js";
@@ -336,6 +337,9 @@ export {
336
337
  SIDE_NAV_COLLAPSED_WIDTH,
337
338
  SIDE_NAV_CONTENT_GUTTER,
338
339
  SIDE_NAV_WIDTH,
340
+ SIGN_IN_DEFAULT_ERROR_MESSAGE,
341
+ SIGN_IN_ERROR_MESSAGES_BY_STATUS,
342
+ SIGN_IN_NETWORK_ERROR_MESSAGE,
339
343
  SPLITTED_SIDE_NAV_MINI_WIDTH,
340
344
  STACKED_SIDE_NAV_SECONDARY_WIDTH,
341
345
  default80 as ScrollBar,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,18 +1,14 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import ActionLink from "../../../components/shared/ActionLink.js";
3
- import "../../../components/ui/Alert/index.js";
4
- import useTimeOutMessage from "../../../utils/hooks/useTimeOutMessage.js";
5
3
  import SignInForm from "./components/SignInForm.js";
6
4
  import Logo from "../../../components/template/Logo.js";
7
5
  import { getLogoFilename } from "../../../../base/utils/logo.js";
8
6
  import { useThemeStore } from "../../../store/themeStore.js";
9
- import Alert from "../../../components/ui/Alert/Alert.js";
10
7
  const SignInBase = ({
11
8
  signUpUrl = "/sign-up",
12
9
  forgetPasswordUrl = "/forgot-password",
13
10
  disableSubmit
14
11
  }) => {
15
- const [message, setMessage] = useTimeOutMessage();
16
12
  const { mode } = useThemeStore();
17
13
  return /* @__PURE__ */ jsxs("div", { children: [
18
14
  /* @__PURE__ */ jsxs("div", { className: "mb-12 flex flex-col items-center", children: [
@@ -26,12 +22,10 @@ const SignInBase = ({
26
22
  /* @__PURE__ */ jsx("h2", { className: "mb-2 text-center", children: "Bem vindo!" }),
27
23
  /* @__PURE__ */ jsx("p", { className: "heading-text text-center font-semibold", children: "Digite seus dados para entrar." })
28
24
  ] }),
29
- message && /* @__PURE__ */ jsx(Alert, { showIcon: true, className: "mb-4", type: "danger", children: /* @__PURE__ */ jsx("span", { className: "break-all", children: message }) }),
30
25
  /* @__PURE__ */ jsx(
31
26
  SignInForm,
32
27
  {
33
28
  disableSubmit,
34
- setMessage,
35
29
  passwordHint: /* @__PURE__ */ jsx("div", { className: "mb-6 mt-2", children: /* @__PURE__ */ jsx(
36
30
  ActionLink,
37
31
  {
@@ -1 +1 @@
1
- {"version":3,"file":"SignIn.js","sources":["../../../../../lib/@ecme/views/auth/SignIn/SignIn.tsx"],"sourcesContent":["import ActionLink from '@/components/shared/ActionLink'\nimport Alert from '@/components/ui/Alert'\nimport useTimeOutMessage from '@/utils/hooks/useTimeOutMessage'\nimport SignInForm from './components/SignInForm'\nimport Logo from '@/components/template/Logo'\nimport { getLogoFilename } from '@base/utils/logo'\nimport { useThemeStore } from '@/store/themeStore'\n\ntype SignInProps = {\n signUpUrl?: string\n forgetPasswordUrl?: string\n disableSubmit?: boolean\n}\n\nexport const SignInBase = ({\n signUpUrl = '/sign-up',\n forgetPasswordUrl = '/forgot-password',\n disableSubmit,\n}: SignInProps) => {\n const [message, setMessage] = useTimeOutMessage()\n\n const { mode } = useThemeStore()\n\n return (\n <div>\n <div className=\"mb-12 flex flex-col items-center\">\n <Logo\n imgClass=\"mb-6 max-h-20\"\n name={getLogoFilename(true, mode)}\n />\n <h2 className=\"mb-2 text-center\">Bem vindo!</h2>\n <p className=\"heading-text text-center font-semibold\">\n Digite seus dados para entrar.\n </p>\n </div>\n {message && (\n <Alert showIcon className=\"mb-4\" type=\"danger\">\n <span className=\"break-all\">{message}</span>\n </Alert>\n )}\n <SignInForm\n disableSubmit={disableSubmit}\n setMessage={setMessage}\n passwordHint={\n <div className=\"mb-6 mt-2\">\n <ActionLink\n to={forgetPasswordUrl}\n className=\"heading-text mt-2 font-semibold text-primary\"\n themeColor={false}\n >\n Esqueceu sua senha?\n </ActionLink>\n </div>\n }\n />\n </div>\n )\n}\n\nconst SignIn = () => {\n return <SignInBase />\n}\n\nexport default SignIn\n"],"names":[],"mappings":";;;;;;;;;AAcO,MAAM,aAAa,CAAC;AAAA,EACvB,YAAY;AAAA,EACZ,oBAAoB;AAAA,EACpB;AACJ,MAAmB;AACf,QAAM,CAAC,SAAS,UAAU,IAAI,kBAAA;AAE9B,QAAM,EAAE,KAAA,IAAS,cAAA;AAEjB,8BACK,OAAA,EACG,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,UAAS;AAAA,UACT,MAAM,gBAAgB,MAAM,IAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MAEpC,oBAAC,MAAA,EAAG,WAAU,oBAAmB,UAAA,cAAU;AAAA,MAC3C,oBAAC,KAAA,EAAE,WAAU,0CAAyC,UAAA,iCAAA,CAEtD;AAAA,IAAA,GACJ;AAAA,IACC,WACG,oBAAC,OAAA,EAAM,UAAQ,MAAC,WAAU,QAAO,MAAK,UAClC,UAAA,oBAAC,QAAA,EAAK,WAAU,aAAa,mBAAQ,GACzC;AAAA,IAEJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA,cACI,oBAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,IAAI;AAAA,YACJ,WAAU;AAAA,YACV,YAAY;AAAA,YACf,UAAA;AAAA,UAAA;AAAA,QAAA,EAED,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAER,GACJ;AAER;AAEA,MAAM,SAAS,MAAM;AACjB,6BAAQ,YAAA,EAAW;AACvB;"}
1
+ {"version":3,"file":"SignIn.js","sources":["../../../../../lib/@ecme/views/auth/SignIn/SignIn.tsx"],"sourcesContent":["import ActionLink from '@/components/shared/ActionLink'\nimport SignInForm from './components/SignInForm'\nimport Logo from '@/components/template/Logo'\nimport { getLogoFilename } from '@base/utils/logo'\nimport { useThemeStore } from '@/store/themeStore'\n\ntype SignInProps = {\n signUpUrl?: string\n forgetPasswordUrl?: string\n disableSubmit?: boolean\n}\n\nexport const SignInBase = ({\n signUpUrl = '/sign-up',\n forgetPasswordUrl = '/forgot-password',\n disableSubmit,\n}: SignInProps) => {\n const { mode } = useThemeStore()\n\n return (\n <div>\n <div className=\"mb-12 flex flex-col items-center\">\n <Logo\n imgClass=\"mb-6 max-h-20\"\n name={getLogoFilename(true, mode)}\n />\n <h2 className=\"mb-2 text-center\">Bem vindo!</h2>\n <p className=\"heading-text text-center font-semibold\">\n Digite seus dados para entrar.\n </p>\n </div>\n <SignInForm\n disableSubmit={disableSubmit}\n passwordHint={\n <div className=\"mb-6 mt-2\">\n <ActionLink\n to={forgetPasswordUrl}\n className=\"heading-text mt-2 font-semibold text-primary\"\n themeColor={false}\n >\n Esqueceu sua senha?\n </ActionLink>\n </div>\n }\n />\n </div>\n )\n}\n\nconst SignIn = () => {\n return <SignInBase />\n}\n\nexport default SignIn\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,aAAa,CAAC;AAAA,EACvB,YAAY;AAAA,EACZ,oBAAoB;AAAA,EACpB;AACJ,MAAmB;AACf,QAAM,EAAE,KAAA,IAAS,cAAA;AAEjB,8BACK,OAAA,EACG,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,UAAS;AAAA,UACT,MAAM,gBAAgB,MAAM,IAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MAEpC,oBAAC,MAAA,EAAG,WAAU,oBAAmB,UAAA,cAAU;AAAA,MAC3C,oBAAC,KAAA,EAAE,WAAU,0CAAyC,UAAA,iCAAA,CAEtD;AAAA,IAAA,GACJ;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA,cACI,oBAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,IAAI;AAAA,YACJ,WAAU;AAAA,YACV,YAAY;AAAA,YACf,UAAA;AAAA,UAAA;AAAA,QAAA,EAED,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAER,GACJ;AAER;AAEA,MAAM,SAAS,MAAM;AACjB,6BAAQ,YAAA,EAAW;AACvB;"}
@@ -2,6 +2,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import "../../../../components/ui/Input/index.js";
4
4
  import "../../../../components/ui/Button/index.js";
5
+ import "../../../../components/ui/Notification/index.js";
6
+ import "../../../../components/ui/toast/index.js";
5
7
  import "../../../../components/ui/Form/index.js";
6
8
  import PasswordInput from "../../../../components/shared/PasswordInput.js";
7
9
  import classNames from "../../../../utils/classNames.js";
@@ -10,6 +12,8 @@ import { useForm, Controller } from "react-hook-form";
10
12
  import { zodResolver } from "@hookform/resolvers/zod";
11
13
  import { z } from "zod";
12
14
  import useAuth from "../../../../auth/useAuth.js";
15
+ import toast from "../../../../components/ui/toast/toast.js";
16
+ import Notification from "../../../../components/ui/Notification/Notification.js";
13
17
  import { Form } from "../../../../components/ui/Form/Form.js";
14
18
  import FormItem from "../../../../components/ui/Form/FormItem.js";
15
19
  import Input from "../../../../components/ui/Input/Input.js";
@@ -20,7 +24,7 @@ const validationSchema = z.object({
20
24
  });
21
25
  const SignInForm = (props) => {
22
26
  const [isSubmitting, setSubmitting] = useState(false);
23
- const { disableSubmit = false, className, setMessage, passwordHint } = props;
27
+ const { disableSubmit = false, className, passwordHint } = props;
24
28
  const {
25
29
  handleSubmit,
26
30
  formState: { errors },
@@ -39,7 +43,9 @@ const SignInForm = (props) => {
39
43
  setSubmitting(true);
40
44
  const result = await signIn({ username, password });
41
45
  if (result?.status === "failed") {
42
- setMessage?.(result.message);
46
+ toast.push(
47
+ /* @__PURE__ */ jsx(Notification, { title: "Erro ao entrar", type: "danger", children: result.message })
48
+ );
43
49
  }
44
50
  }
45
51
  setSubmitting(false);
@@ -1 +1 @@
1
- {"version":3,"file":"SignInForm.js","sources":["../../../../../../lib/@ecme/views/auth/SignIn/components/SignInForm.tsx"],"sourcesContent":["import { ReactNode, useState } from \"react\";\nimport Input from \"@/components/ui/Input\";\nimport Button from \"@/components/ui/Button\";\nimport { FormItem, Form } from \"@/components/ui/Form\";\nimport PasswordInput from \"@/components/shared/PasswordInput\";\nimport classNames from \"@/utils/classNames\";\nimport { useAuth } from \"@/auth\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { z, ZodType } from \"zod\";\nimport type { CommonProps } from \"@/@types/common\";\n\ninterface SignInFormProps extends CommonProps {\n disableSubmit?: boolean;\n passwordHint?: string | ReactNode;\n setMessage?: (message: string) => void;\n}\n\ntype SignInFormSchema = {\n username: string;\n password: string;\n};\n\nconst validationSchema: ZodType<SignInFormSchema> = z.object({\n username: z\n .string({ required_error: \"Por favor digite um login.\" })\n .min(1, { message: \"Por favor digite um login válido.\" }),\n password: z\n .string({ required_error: \"Por favor digite uma senha.\" })\n .min(1, { message: \"Por favor digite uma senha válida.\" }),\n});\n\nconst SignInForm = (props: SignInFormProps) => {\n const [isSubmitting, setSubmitting] = useState<boolean>(false);\n\n const { disableSubmit = false, className, setMessage, passwordHint } = props;\n\n const {\n handleSubmit,\n formState: { errors },\n control,\n } = useForm<SignInFormSchema>({\n defaultValues: {\n username: \"\",\n password: \"\",\n },\n resolver: zodResolver(validationSchema),\n });\n\n const { signIn } = useAuth();\n\n const onSignIn = async (values: SignInFormSchema) => {\n const { username, password } = values;\n\n if (!disableSubmit) {\n setSubmitting(true);\n\n const result = await signIn({ username, password });\n\n if (result?.status === \"failed\") {\n setMessage?.(result.message);\n }\n }\n\n setSubmitting(false);\n };\n\n return (\n <div className={className}>\n <Form onSubmit={handleSubmit(onSignIn)}>\n <FormItem\n label=\"Login\"\n invalid={Boolean(errors.username)}\n errorMessage={errors.username?.message}\n >\n <Controller\n name=\"username\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n placeholder=\"Login\"\n autoComplete=\"off\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Senha\"\n invalid={Boolean(errors.password)}\n errorMessage={errors.password?.message}\n className={classNames(\n passwordHint ? \"mb-0\" : \"\",\n errors.password?.message ? \"mb-8\" : \"\"\n )}\n >\n <Controller\n name=\"password\"\n control={control}\n rules={{ required: true }}\n render={({ field }) => (\n <PasswordInput\n type=\"text\"\n placeholder=\"Senha\"\n autoComplete=\"off\"\n {...field}\n />\n )}\n />\n </FormItem>\n {passwordHint}\n <Button\n block\n loading={isSubmitting}\n variant=\"solid\"\n type=\"submit\"\n className=\"mt-6\"\n >\n {isSubmitting ? \"Entrando...\" : \"Entrar\"}\n </Button>\n </Form>\n </div>\n );\n};\n\nexport default SignInForm;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAuBA,MAAM,mBAA8C,EAAE,OAAO;AAAA,EAC3D,UAAU,EACP,OAAO,EAAE,gBAAgB,6BAAA,CAA8B,EACvD,IAAI,GAAG,EAAE,SAAS,qCAAqC;AAAA,EAC1D,UAAU,EACP,OAAO,EAAE,gBAAgB,+BAA+B,EACxD,IAAI,GAAG,EAAE,SAAS,sCAAsC;AAC7D,CAAC;AAED,MAAM,aAAa,CAAC,UAA2B;AAC7C,QAAM,CAAC,cAAc,aAAa,IAAI,SAAkB,KAAK;AAE7D,QAAM,EAAE,gBAAgB,OAAO,WAAW,YAAY,iBAAiB;AAEvE,QAAM;AAAA,IACJ;AAAA,IACA,WAAW,EAAE,OAAA;AAAA,IACb;AAAA,EAAA,IACE,QAA0B;AAAA,IAC5B,eAAe;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,IAAA;AAAA,IAEZ,UAAU,YAAY,gBAAgB;AAAA,EAAA,CACvC;AAED,QAAM,EAAE,OAAA,IAAW,QAAA;AAEnB,QAAM,WAAW,OAAO,WAA6B;AACnD,UAAM,EAAE,UAAU,SAAA,IAAa;AAE/B,QAAI,CAAC,eAAe;AAClB,oBAAc,IAAI;AAElB,YAAM,SAAS,MAAM,OAAO,EAAE,UAAU,UAAU;AAElD,UAAI,QAAQ,WAAW,UAAU;AAC/B,qBAAa,OAAO,OAAO;AAAA,MAC7B;AAAA,IACF;AAEA,kBAAc,KAAK;AAAA,EACrB;AAEA,SACE,oBAAC,SAAI,WACH,UAAA,qBAAC,QAAK,UAAU,aAAa,QAAQ,GACnC,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,QAAQ,OAAO,QAAQ;AAAA,QAChC,cAAc,OAAO,UAAU;AAAA,QAE/B,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA,QAAQ,CAAC,EAAE,MAAA,MACT;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,cAAa;AAAA,gBACZ,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,IAEF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,QAAQ,OAAO,QAAQ;AAAA,QAChC,cAAc,OAAO,UAAU;AAAA,QAC/B,WAAW;AAAA,UACT,eAAe,SAAS;AAAA,UACxB,OAAO,UAAU,UAAU,SAAS;AAAA,QAAA;AAAA,QAGtC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA,OAAO,EAAE,UAAU,KAAA;AAAA,YACnB,QAAQ,CAAC,EAAE,MAAA,MACT;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,cAAa;AAAA,gBACZ,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,IAED;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAK;AAAA,QACL,SAAS;AAAA,QACT,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAU;AAAA,QAET,yBAAe,gBAAgB;AAAA,MAAA;AAAA,IAAA;AAAA,EAClC,EAAA,CACF,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"SignInForm.js","sources":["../../../../../../lib/@ecme/views/auth/SignIn/components/SignInForm.tsx"],"sourcesContent":["import { ReactNode, useState } from \"react\";\nimport Input from \"@/components/ui/Input\";\nimport Button from \"@/components/ui/Button\";\nimport Notification from \"@/components/ui/Notification\";\nimport toast from \"@/components/ui/toast\";\nimport { FormItem, Form } from \"@/components/ui/Form\";\nimport PasswordInput from \"@/components/shared/PasswordInput\";\nimport classNames from \"@/utils/classNames\";\nimport { useAuth } from \"@/auth\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { z, ZodType } from \"zod\";\nimport type { CommonProps } from \"@/@types/common\";\n\ninterface SignInFormProps extends CommonProps {\n disableSubmit?: boolean;\n passwordHint?: string | ReactNode;\n}\n\ntype SignInFormSchema = {\n username: string;\n password: string;\n};\n\nconst validationSchema: ZodType<SignInFormSchema> = z.object({\n username: z\n .string({ required_error: \"Por favor digite um login.\" })\n .min(1, { message: \"Por favor digite um login válido.\" }),\n password: z\n .string({ required_error: \"Por favor digite uma senha.\" })\n .min(1, { message: \"Por favor digite uma senha válida.\" }),\n});\n\nconst SignInForm = (props: SignInFormProps) => {\n const [isSubmitting, setSubmitting] = useState<boolean>(false);\n\n const { disableSubmit = false, className, passwordHint } = props;\n\n const {\n handleSubmit,\n formState: { errors },\n control,\n } = useForm<SignInFormSchema>({\n defaultValues: {\n username: \"\",\n password: \"\",\n },\n resolver: zodResolver(validationSchema),\n });\n\n const { signIn } = useAuth();\n\n const onSignIn = async (values: SignInFormSchema) => {\n const { username, password } = values;\n\n if (!disableSubmit) {\n setSubmitting(true);\n\n const result = await signIn({ username, password });\n\n if (result?.status === \"failed\") {\n toast.push(\n <Notification title=\"Erro ao entrar\" type=\"danger\">\n {result.message}\n </Notification>\n );\n }\n }\n\n setSubmitting(false);\n };\n\n return (\n <div className={className}>\n <Form onSubmit={handleSubmit(onSignIn)}>\n <FormItem\n label=\"Login\"\n invalid={Boolean(errors.username)}\n errorMessage={errors.username?.message}\n >\n <Controller\n name=\"username\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n placeholder=\"Login\"\n autoComplete=\"off\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Senha\"\n invalid={Boolean(errors.password)}\n errorMessage={errors.password?.message}\n className={classNames(\n passwordHint ? \"mb-0\" : \"\",\n errors.password?.message ? \"mb-8\" : \"\"\n )}\n >\n <Controller\n name=\"password\"\n control={control}\n rules={{ required: true }}\n render={({ field }) => (\n <PasswordInput\n type=\"text\"\n placeholder=\"Senha\"\n autoComplete=\"off\"\n {...field}\n />\n )}\n />\n </FormItem>\n {passwordHint}\n <Button\n block\n loading={isSubmitting}\n variant=\"solid\"\n type=\"submit\"\n className=\"mt-6\"\n >\n {isSubmitting ? \"Entrando...\" : \"Entrar\"}\n </Button>\n </Form>\n </div>\n );\n};\n\nexport default SignInForm;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,mBAA8C,EAAE,OAAO;AAAA,EAC3D,UAAU,EACP,OAAO,EAAE,gBAAgB,6BAAA,CAA8B,EACvD,IAAI,GAAG,EAAE,SAAS,qCAAqC;AAAA,EAC1D,UAAU,EACP,OAAO,EAAE,gBAAgB,+BAA+B,EACxD,IAAI,GAAG,EAAE,SAAS,sCAAsC;AAC7D,CAAC;AAED,MAAM,aAAa,CAAC,UAA2B;AAC7C,QAAM,CAAC,cAAc,aAAa,IAAI,SAAkB,KAAK;AAE7D,QAAM,EAAE,gBAAgB,OAAO,WAAW,iBAAiB;AAE3D,QAAM;AAAA,IACJ;AAAA,IACA,WAAW,EAAE,OAAA;AAAA,IACb;AAAA,EAAA,IACE,QAA0B;AAAA,IAC5B,eAAe;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,IAAA;AAAA,IAEZ,UAAU,YAAY,gBAAgB;AAAA,EAAA,CACvC;AAED,QAAM,EAAE,OAAA,IAAW,QAAA;AAEnB,QAAM,WAAW,OAAO,WAA6B;AACnD,UAAM,EAAE,UAAU,SAAA,IAAa;AAE/B,QAAI,CAAC,eAAe;AAClB,oBAAc,IAAI;AAElB,YAAM,SAAS,MAAM,OAAO,EAAE,UAAU,UAAU;AAElD,UAAI,QAAQ,WAAW,UAAU;AAC/B,cAAM;AAAA,8BACH,cAAA,EAAa,OAAM,kBAAiB,MAAK,UACvC,iBAAO,QAAA,CACV;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,kBAAc,KAAK;AAAA,EACrB;AAEA,SACE,oBAAC,SAAI,WACH,UAAA,qBAAC,QAAK,UAAU,aAAa,QAAQ,GACnC,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,QAAQ,OAAO,QAAQ;AAAA,QAChC,cAAc,OAAO,UAAU;AAAA,QAE/B,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA,QAAQ,CAAC,EAAE,MAAA,MACT;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,cAAa;AAAA,gBACZ,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,IAEF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,QAAQ,OAAO,QAAQ;AAAA,QAChC,cAAc,OAAO,UAAU;AAAA,QAC/B,WAAW;AAAA,UACT,eAAe,SAAS;AAAA,UACxB,OAAO,UAAU,UAAU,SAAS;AAAA,QAAA;AAAA,QAGtC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA,OAAO,EAAE,UAAU,KAAA;AAAA,YACnB,QAAQ,CAAC,EAAE,MAAA,MACT;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,cAAa;AAAA,gBACZ,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,IAED;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAK;AAAA,QACL,SAAS;AAAA,QACT,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAU;AAAA,QAET,yBAAe,gBAAgB;AAAA,MAAA;AAAA,IAAA;AAAA,EAClC,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -55,9 +55,9 @@ const Authentication = () => {
55
55
  },
56
56
  {
57
57
  propName: "signOut",
58
- type: `<code>() => void</code>`,
58
+ type: `<code>(redirectUrl?: string) => void</code>`,
59
59
  default: `-`,
60
- desc: `A method to sign out the current user`
60
+ desc: `A method to sign out the current user. Pass a redirect URL to return there after signing in again.`
61
61
  },
62
62
  {
63
63
  propName: "oAuthSignIn",
@@ -102,6 +102,32 @@ const YourComponent = () => {
102
102
  </div>
103
103
  );
104
104
  };
105
+ ` }),
106
+ /* @__PURE__ */ jsxs("p", { className: "mt-4", children: [
107
+ "To return to the current screen after an idle timeout, pass",
108
+ " ",
109
+ /* @__PURE__ */ jsx("code", { children: "signOut" }),
110
+ " directly to ",
111
+ /* @__PURE__ */ jsx("code", { children: "useIdleTimeout" }),
112
+ ". The timeout hook supplies the current path, query string, and hash to the callback. Calling ",
113
+ /* @__PURE__ */ jsx("code", { children: "signOut()" }),
114
+ " ",
115
+ "without a destination, such as for a manual logout, keeps the existing behavior."
116
+ ] }),
117
+ /* @__PURE__ */ jsx(SyntaxHighlighter, { language: "tsx", children: `import { useAuth } from '@/auth'
118
+ import { useIdleTimeout } from '@/base/hooks'
119
+
120
+ const SessionTimeout = () => {
121
+ const { signOut, authenticated } = useAuth();
122
+
123
+ useIdleTimeout({
124
+ timeout: 900,
125
+ onTimeout: signOut,
126
+ enabled: authenticated,
127
+ });
128
+
129
+ return null;
130
+ };
105
131
  ` })
106
132
  ] }),
107
133
  /* @__PURE__ */ jsxs("div", { className: "mt-10", id: "OAuth", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"Authentication.js","sources":["../../../../../../lib/@ecme/views/guide/Documentations/components/Authentication.tsx"],"sourcesContent":["/* eslint-disable react/no-unescaped-entities */\nimport SyntaxHighlighter from '@/components/shared/SyntaxHighlighter'\nimport DemoComponentApi from '@/components/docs/DemoComponentApi'\n\nconst Authentication = () => {\n return (\n <>\n <p>\n This guide provides an overview of the authentication system\n implemented in the template\n </p>\n <div className=\"mt-10\" id=\"useAuth\">\n <h5>useAuth</h5>\n <p className=\"mt-1\">\n The authentication system is managed through the{' '}\n <code>AuthProvider</code> component, which should wrap your\n application or relevant parts of it. It manages auth states\n and provides the following methods via the{' '}\n <code>useAuth</code> hook:\n </p>\n <DemoComponentApi\n hideApiTitle\n keyText=\"properties\"\n api={[\n {\n api: [\n {\n propName: 'authenticated',\n type: `<code>boolean</code>`,\n default: `-`,\n desc: 'A boolean indicating whether the user is currently authenticated.',\n },\n {\n propName: 'user',\n type: `<code>{\n userId: string\n userName: string\n authority: string[]\n avatar: string\n email: string\n }</code>`,\n default: `-`,\n desc: `An object containing the user's details, such as <code>userName</code>, <code>email</code>, and <code>authority</code>`,\n },\n {\n propName: 'signIn',\n type: `<code>(values: {email: string, password: string}) => Promise<{status: 'success' | 'failed', message: string}></code>`,\n default: `-`,\n desc: `A method to sign in a user with their credentials </p>`,\n },\n {\n propName: 'signUp',\n type: `<code>(values: {userName: string, email: string, password: string}) => Promise<{status: 'success' | 'failed', message: string}></code>`,\n default: `-`,\n desc: `A method to register a new user`,\n },\n {\n propName: 'signOut',\n type: `<code>() => void</code>`,\n default: `-`,\n desc: `A method to sign out the current user`,\n },\n {\n propName: 'oAuthSignIn',\n type: `<code>callback: (payload: {\n onSignIn: (tokens: Token, user?: User) => void\n redirect: () => void\n}) => void</code>`,\n default: `-`,\n desc: `A method to handle OAuth sign-in callbacks for third-party authentication providers.</p>`,\n },\n ],\n },\n ]}\n />\n <p>Here's how you can use the useAuth hook in components:</p>\n <SyntaxHighlighter language=\"tsx\">{`import { useAuth } from '@/auth'\n\nconst YourComponent = () => {\n const { signIn, signOut, user, authenticated } = useAuth();\n\n const handleLogin = async () => {\n const credentials = { email: 'user@example.com', password: 'password' };\n const result = await signIn(credentials);\n if (result?.status === 'success') {\n console.log('Logged in successfully');\n }\n if (result?.status === 'failed') {\n console.error('Failed to login')\n }\n };\n\n const handleLogout = () => {\n signOut();\n };\n\n return (\n <div>\n {authenticated ? <p>Welcome, {user.userName}</p> : <p>Please log in</p>}\n <button onClick={handleLogin}>Login</button>\n <button onClick={handleLogout}>Logout</button>\n </div>\n );\n};\n`}</SyntaxHighlighter>\n </div>\n <div className=\"mt-10\" id=\"OAuth\">\n <h5>OAuth Sign-In</h5>\n <p className=\"mt-1\">\n If you're implementing OAuth with third-party providers, the{' '}\n <code>oAuthSignIn</code> method will be essential. You can\n use it within your OAuth callback to complete the sign-in\n process and manage tokens.\n </p>\n <SyntaxHighlighter language=\"tsx\">{`import { useAuth } from '@/auth'\nimport SomeOauthSdkSignInMethod from 'SomeOauthSdk'\n\nconst YourComponent = () => {\n const { oAuthSignIn } = useAuth();\n\n const handleOAuthSignIn = () => {\n\n oAuthSignIn(async ({redirect, onSignIn}) => {\n try {\n const resp = await SomeOauthSdkSignInMethod()\n if (resp) {\n /** extract token & user information for the response */ \n const { token, user } = resp\n onSignIn({accessToken: token}, user)\n redirect()\n }\n } catch (error) {\n console.error('Failed to login')\n }\n })\n }\n\n const handleLogout = () => {\n signOut();\n };\n\n return (\n <button onClick={handleOAuthSignIn}>Login with OAuth</button>\n );\n};\n`}</SyntaxHighlighter>\n </div>\n <div className=\"mt-10\" id=\"customizing-data-model\">\n <h5>Customizing the Data Models</h5>\n <p className=\"mt-1\">\n Since not all applications having the same data model, you\n can customize the data structures in{' '}\n <code>@/types/auth.ts</code> and{' '}\n <code>@/auth/AuthProvider.ts</code> to suit your needs.\n Adjust the types and interfaces defined for{' '}\n <code>User</code>, <code>Token</code>, and other\n authentication-related entities according to your\n application's requirements.\n </p>\n <SyntaxHighlighter language=\"ts\">{`// Example: Modifying the User type\nexport type User = {\n userId?: string | null\n avatar?: string | null\n userName?: string | null\n email?: string | null\n authority?: string[]\n // Add your custom fields here\n role?: string | null\n};\n`}</SyntaxHighlighter>\n <div className=\"mt-10\" id=\"useAuth\">\n <h5>Diving into AuthProvider</h5>\n <p className=\"mt-1\">\n If the default authentication implementation doesn't\n meet your needs, feel free to dive into the{' '}\n <code>AuthProvider</code> to make any necessary\n modifications. This component handles the core logic for\n authentication, including token management, session\n handling, and more. Customizing this logic can help you\n better align the authentication system with your\n application's specific requirements.\n </p>\n <SyntaxHighlighter language=\"tsx\">{`...\nimport { apiSignIn, apiSignOut, apiSignUp } from '@/services/AuthService'\n\nfunction AuthProvider({ children }: AuthProviderProps) {\n \n ...\n\n const handleSignIn = (...) => {\n ... /** Your implementation here */\n }\n\n const handleSignOut = () => {\n ... /** Your implementation here */\n }\n\n const signIn = async (values: SignInCredential): AuthResult => {\n try {\n const resp = await apiSignIn(values)\n if (resp) {\n handleSignIn(...)\n }\n } catch (errors: any) {\n return {\n status: 'failed',\n message: errors?.response?.data?.message || errors.toString(),\n }\n }\n }\n\n const signOut = async () => {\n try {\n await apiSignOut()\n } finally {\n handleSignOut()\n navigate(appConfig.unAuthenticatedEntryPath)\n }\n }\n ... \n \n return (\n <AuthContext.Provider value={{\n signIn,\n signOut,\n ...\n }}>\n {children}\n </AuthContext.Provider>\n )\n}\n`}</SyntaxHighlighter>\n </div>\n </div>\n </>\n )\n}\n\nexport default Authentication\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Authentication.js","sources":["../../../../../../lib/@ecme/views/guide/Documentations/components/Authentication.tsx"],"sourcesContent":["/* eslint-disable react/no-unescaped-entities */\nimport SyntaxHighlighter from '@/components/shared/SyntaxHighlighter'\nimport DemoComponentApi from '@/components/docs/DemoComponentApi'\n\nconst Authentication = () => {\n return (\n <>\n <p>\n This guide provides an overview of the authentication system\n implemented in the template\n </p>\n <div className=\"mt-10\" id=\"useAuth\">\n <h5>useAuth</h5>\n <p className=\"mt-1\">\n The authentication system is managed through the{' '}\n <code>AuthProvider</code> component, which should wrap your\n application or relevant parts of it. It manages auth states\n and provides the following methods via the{' '}\n <code>useAuth</code> hook:\n </p>\n <DemoComponentApi\n hideApiTitle\n keyText=\"properties\"\n api={[\n {\n api: [\n {\n propName: 'authenticated',\n type: `<code>boolean</code>`,\n default: `-`,\n desc: 'A boolean indicating whether the user is currently authenticated.',\n },\n {\n propName: 'user',\n type: `<code>{\n userId: string\n userName: string\n authority: string[]\n avatar: string\n email: string\n }</code>`,\n default: `-`,\n desc: `An object containing the user's details, such as <code>userName</code>, <code>email</code>, and <code>authority</code>`,\n },\n {\n propName: 'signIn',\n type: `<code>(values: {email: string, password: string}) => Promise<{status: 'success' | 'failed', message: string}></code>`,\n default: `-`,\n desc: `A method to sign in a user with their credentials </p>`,\n },\n {\n propName: 'signUp',\n type: `<code>(values: {userName: string, email: string, password: string}) => Promise<{status: 'success' | 'failed', message: string}></code>`,\n default: `-`,\n desc: `A method to register a new user`,\n },\n {\n propName: 'signOut',\n type: `<code>(redirectUrl?: string) => void</code>`,\n default: `-`,\n desc: `A method to sign out the current user. Pass a redirect URL to return there after signing in again.`,\n },\n {\n propName: 'oAuthSignIn',\n type: `<code>callback: (payload: {\n onSignIn: (tokens: Token, user?: User) => void\n redirect: () => void\n}) => void</code>`,\n default: `-`,\n desc: `A method to handle OAuth sign-in callbacks for third-party authentication providers.</p>`,\n },\n ],\n },\n ]}\n />\n <p>Here's how you can use the useAuth hook in components:</p>\n <SyntaxHighlighter language=\"tsx\">{`import { useAuth } from '@/auth'\n\nconst YourComponent = () => {\n const { signIn, signOut, user, authenticated } = useAuth();\n\n const handleLogin = async () => {\n const credentials = { email: 'user@example.com', password: 'password' };\n const result = await signIn(credentials);\n if (result?.status === 'success') {\n console.log('Logged in successfully');\n }\n if (result?.status === 'failed') {\n console.error('Failed to login')\n }\n };\n\n const handleLogout = () => {\n signOut();\n };\n\n return (\n <div>\n {authenticated ? <p>Welcome, {user.userName}</p> : <p>Please log in</p>}\n <button onClick={handleLogin}>Login</button>\n <button onClick={handleLogout}>Logout</button>\n </div>\n );\n};\n`}</SyntaxHighlighter>\n <p className=\"mt-4\">\n To return to the current screen after an idle timeout, pass{' '}\n <code>signOut</code> directly to <code>useIdleTimeout</code>.\n The timeout hook supplies the current path, query string,\n and hash to the callback. Calling <code>signOut()</code>{' '}\n without a destination, such as for a manual logout, keeps\n the existing behavior.\n </p>\n <SyntaxHighlighter language=\"tsx\">{`import { useAuth } from '@/auth'\nimport { useIdleTimeout } from '@/base/hooks'\n\nconst SessionTimeout = () => {\n const { signOut, authenticated } = useAuth();\n\n useIdleTimeout({\n timeout: 900,\n onTimeout: signOut,\n enabled: authenticated,\n });\n\n return null;\n};\n`}</SyntaxHighlighter>\n </div>\n <div className=\"mt-10\" id=\"OAuth\">\n <h5>OAuth Sign-In</h5>\n <p className=\"mt-1\">\n If you're implementing OAuth with third-party providers, the{' '}\n <code>oAuthSignIn</code> method will be essential. You can\n use it within your OAuth callback to complete the sign-in\n process and manage tokens.\n </p>\n <SyntaxHighlighter language=\"tsx\">{`import { useAuth } from '@/auth'\nimport SomeOauthSdkSignInMethod from 'SomeOauthSdk'\n\nconst YourComponent = () => {\n const { oAuthSignIn } = useAuth();\n\n const handleOAuthSignIn = () => {\n\n oAuthSignIn(async ({redirect, onSignIn}) => {\n try {\n const resp = await SomeOauthSdkSignInMethod()\n if (resp) {\n /** extract token & user information for the response */ \n const { token, user } = resp\n onSignIn({accessToken: token}, user)\n redirect()\n }\n } catch (error) {\n console.error('Failed to login')\n }\n })\n }\n\n const handleLogout = () => {\n signOut();\n };\n\n return (\n <button onClick={handleOAuthSignIn}>Login with OAuth</button>\n );\n};\n`}</SyntaxHighlighter>\n </div>\n <div className=\"mt-10\" id=\"customizing-data-model\">\n <h5>Customizing the Data Models</h5>\n <p className=\"mt-1\">\n Since not all applications having the same data model, you\n can customize the data structures in{' '}\n <code>@/types/auth.ts</code> and{' '}\n <code>@/auth/AuthProvider.ts</code> to suit your needs.\n Adjust the types and interfaces defined for{' '}\n <code>User</code>, <code>Token</code>, and other\n authentication-related entities according to your\n application's requirements.\n </p>\n <SyntaxHighlighter language=\"ts\">{`// Example: Modifying the User type\nexport type User = {\n userId?: string | null\n avatar?: string | null\n userName?: string | null\n email?: string | null\n authority?: string[]\n // Add your custom fields here\n role?: string | null\n};\n`}</SyntaxHighlighter>\n <div className=\"mt-10\" id=\"useAuth\">\n <h5>Diving into AuthProvider</h5>\n <p className=\"mt-1\">\n If the default authentication implementation doesn't\n meet your needs, feel free to dive into the{' '}\n <code>AuthProvider</code> to make any necessary\n modifications. This component handles the core logic for\n authentication, including token management, session\n handling, and more. Customizing this logic can help you\n better align the authentication system with your\n application's specific requirements.\n </p>\n <SyntaxHighlighter language=\"tsx\">{`...\nimport { apiSignIn, apiSignOut, apiSignUp } from '@/services/AuthService'\n\nfunction AuthProvider({ children }: AuthProviderProps) {\n \n ...\n\n const handleSignIn = (...) => {\n ... /** Your implementation here */\n }\n\n const handleSignOut = () => {\n ... /** Your implementation here */\n }\n\n const signIn = async (values: SignInCredential): AuthResult => {\n try {\n const resp = await apiSignIn(values)\n if (resp) {\n handleSignIn(...)\n }\n } catch (errors: any) {\n return {\n status: 'failed',\n message: errors?.response?.data?.message || errors.toString(),\n }\n }\n }\n\n const signOut = async () => {\n try {\n await apiSignOut()\n } finally {\n handleSignOut()\n navigate(appConfig.unAuthenticatedEntryPath)\n }\n }\n ... \n \n return (\n <AuthContext.Provider value={{\n signIn,\n signOut,\n ...\n }}>\n {children}\n </AuthContext.Provider>\n )\n}\n`}</SyntaxHighlighter>\n </div>\n </div>\n </>\n )\n}\n\nexport default Authentication\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ type Auth = {
4
4
  user: User;
5
5
  signIn: (values: SignInCredential) => AuthResult;
6
6
  signUp: (values: SignUpCredential) => AuthResult;
7
- signOut: () => void;
7
+ signOut: (redirectUrl?: string) => void;
8
8
  oAuthSignIn: (callback: (payload: OauthSignInCallbackPayload) => void) => void;
9
9
  updateUserSession: (newUserData: Partial<User>) => void;
10
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/auth/AuthContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAEvB,KAAK,IAAI,GAAG;IACV,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,UAAU,CAAC;IACjD,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,UAAU,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,CACX,QAAQ,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,KACpD,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CACzD,CAAC;AAyBF,QAAA,MAAM,WAAW,+BAQf,CAAC;AAEH,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/auth/AuthContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAEvB,KAAK,IAAI,GAAG;IACV,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,UAAU,CAAC;IACjD,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,UAAU,CAAC;IACjD,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,CACX,QAAQ,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,KACpD,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CACzD,CAAC;AAyBF,QAAA,MAAM,WAAW,+BAQf,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/auth/AuthProvider.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAoC,MAAM,OAAO,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAe,MAAM,kBAAkB,CAAA;AAGhE,KAAK,iBAAiB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAA;AAEhD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,EAAE,gBAAgB,CAAA;CAC7B,CAAA;AAcD,iBAAS,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAiNpD;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/auth/AuthProvider.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAAE,SAAS,EAAoC,MAAM,OAAO,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAe,MAAM,kBAAkB,CAAA;AAGhE,KAAK,iBAAiB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAA;AAEhD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,EAAE,gBAAgB,CAAA;CAC7B,CAAA;AA+BD,iBAAS,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA4NpD;AAED,eAAe,YAAY,CAAA"}
@@ -3,7 +3,7 @@ declare const useAuth: () => {
3
3
  user: import("..").User;
4
4
  signIn: (values: import("..").SignInCredential) => import("..").AuthResult;
5
5
  signUp: (values: import("..").SignUpCredential) => import("..").AuthResult;
6
- signOut: () => void;
6
+ signOut: (redirectUrl?: string) => void;
7
7
  oAuthSignIn: (callback: (payload: import("..").OauthSignInCallbackPayload) => void) => void;
8
8
  updateUserSession: (newUserData: Partial<import("..").User>) => void;
9
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/auth/useAuth.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,OAAO;;;;;;;;CAQZ,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/auth/useAuth.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,OAAO;;;;;yBAWuC,CAAC;;;CAHpD,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const SIGN_IN_DEFAULT_ERROR_MESSAGE = "N\u00E3o foi poss\u00EDvel realizar o login. Tente novamente mais tarde.";
2
+ export declare const SIGN_IN_NETWORK_ERROR_MESSAGE = "N\u00E3o foi poss\u00EDvel conectar ao servidor. Verifique sua conex\u00E3o e tente novamente.";
3
+ export declare const SIGN_IN_ERROR_MESSAGES_BY_STATUS: Record<number, string>;
4
+ //# sourceMappingURL=auth.constant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.constant.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/constants/auth.constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,6EAC0B,CAAA;AAEpE,eAAO,MAAM,6BAA6B,mGAC2C,CAAA;AAErF,eAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYnE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  export * from './api.constant';
2
2
  export * from './app.constant';
3
+ export * from './auth.constant';
3
4
  export * from './chart.constant';
4
5
  export * from './countries.constant';
5
6
  export * from './navigation.constant';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/constants/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/constants/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/views/auth/SignIn/SignIn.tsx"],"names":[],"mappings":"AAQA,KAAK,WAAW,GAAG;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,kDAIxB,WAAW,4CAuCb,CAAA;AAED,QAAA,MAAM,MAAM,+CAEX,CAAA;AAED,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/views/auth/SignIn/SignIn.tsx"],"names":[],"mappings":"AAMA,KAAK,WAAW,GAAG;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,kDAIxB,WAAW,4CA+Bb,CAAA;AAED,QAAA,MAAM,MAAM,+CAEX,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -3,7 +3,6 @@ import type { CommonProps } from "@/@types/common";
3
3
  interface SignInFormProps extends CommonProps {
4
4
  disableSubmit?: boolean;
5
5
  passwordHint?: string | ReactNode;
6
- setMessage?: (message: string) => void;
7
6
  }
8
7
  declare const SignInForm: (props: SignInFormProps) => import("react/jsx-runtime").JSX.Element;
9
8
  export default SignInForm;
@@ -1 +1 @@
1
- {"version":3,"file":"SignInForm.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/views/auth/SignIn/components/SignInForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAU5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU,eAAgB,SAAQ,WAAW;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAgBD,QAAA,MAAM,UAAU,GAAI,OAAO,eAAe,4CA4FzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"SignInForm.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/views/auth/SignIn/components/SignInForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAY5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU,eAAgB,SAAQ,WAAW;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAgBD,QAAA,MAAM,UAAU,GAAI,OAAO,eAAe,4CAgGzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Authentication.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/views/guide/Documentations/components/Authentication.tsx"],"names":[],"mappings":"AAIA,QAAA,MAAM,cAAc,+CAwOnB,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"Authentication.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/views/guide/Documentations/components/Authentication.tsx"],"names":[],"mappings":"AAIA,QAAA,MAAM,cAAc,+CA+PnB,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -5,6 +5,12 @@ export type TRequisicaoCompra = {
5
5
  possuiHistoricoMovimentacaoItens: boolean;
6
6
  valorTotal?: number;
7
7
  idsCentrosCusto?: number[];
8
+ ordensComprasConsumoParcial?: TOrdemCompraProdutoConsumoParcial[];
9
+ };
10
+ export type TOrdemCompraProdutoConsumoParcial = {
11
+ idOrdemCompra: number;
12
+ idProduto: number;
13
+ produto: string;
8
14
  };
9
15
  export type THistoricoMovimentacao = {
10
16
  dataAcao: string;
@@ -1 +1 @@
1
- {"version":3,"file":"RequisicaoCompra.d.ts","sourceRoot":"","sources":["../../../../../../lib/base/@types/models/compras/RequisicaoCompra.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,gCAAgC,EAAE,OAAO,CAAA;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,sBAAsB,EAAE,sBAAsB,EAAE,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,2BAA2B,EAAE,CAAA;IACvC,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,2BAA2B,EAAE,CAAA;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,qBAAqB,EAAE,CAAA;IAC9B,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAA;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA"}
1
+ {"version":3,"file":"RequisicaoCompra.d.ts","sourceRoot":"","sources":["../../../../../../lib/base/@types/models/compras/RequisicaoCompra.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  interface UseIdleTimeoutOptions {
2
2
  timeout?: number;
3
- onTimeout: () => void;
3
+ onTimeout: (redirectUrl: string) => void;
4
4
  enabled?: boolean;
5
5
  }
6
6
  export declare function useIdleTimeout({ timeout, onTimeout, enabled, }: UseIdleTimeoutOptions): void;
@@ -1 +1 @@
1
- {"version":3,"file":"useIdleTimeout.d.ts","sourceRoot":"","sources":["../../../../lib/base/hooks/useIdleTimeout.ts"],"names":[],"mappings":"AAGA,UAAU,qBAAqB;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC3B,OAAY,EACZ,SAAS,EACT,OAAc,GACjB,EAAE,qBAAqB,QAevB;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"useIdleTimeout.d.ts","sourceRoot":"","sources":["../../../../lib/base/hooks/useIdleTimeout.ts"],"names":[],"mappings":"AAGA,UAAU,qBAAqB;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC3B,OAAY,EACZ,SAAS,EACT,OAAc,GACjB,EAAE,qBAAqB,QAmBvB;AAED,eAAe,cAAc,CAAA"}
@@ -7,7 +7,8 @@ function useIdleTimeout({
7
7
  }) {
8
8
  const handleIdle = useCallback(() => {
9
9
  if (enabled) {
10
- onTimeout();
10
+ const redirectUrl = window.location.pathname + window.location.search + window.location.hash;
11
+ onTimeout(redirectUrl);
11
12
  }
12
13
  }, [enabled, onTimeout]);
13
14
  useIdleTimer({
@@ -1 +1 @@
1
- {"version":3,"file":"useIdleTimeout.js","sources":["../../../lib/base/hooks/useIdleTimeout.ts"],"sourcesContent":["import { useIdleTimer } from 'react-idle-timer'\nimport { useCallback } from 'react'\n\ninterface UseIdleTimeoutOptions {\n timeout?: number\n onTimeout: () => void\n enabled?: boolean\n}\n\nexport function useIdleTimeout({\n timeout = 60,\n onTimeout,\n enabled = true,\n}: UseIdleTimeoutOptions) {\n const handleIdle = useCallback(() => {\n if (enabled) {\n onTimeout()\n }\n }, [enabled, onTimeout])\n\n useIdleTimer({\n timeout: timeout * 1000,\n onIdle: handleIdle,\n disabled: !enabled,\n debounce: 500,\n crossTab: true,\n syncTimers: 200,\n })\n}\n\nexport default useIdleTimeout\n"],"names":[],"mappings":";;AASO,SAAS,eAAe;AAAA,EAC3B,UAAU;AAAA,EACV;AAAA,EACA,UAAU;AACd,GAA0B;AACtB,QAAM,aAAa,YAAY,MAAM;AACjC,QAAI,SAAS;AACT,gBAAA;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,SAAS,SAAS,CAAC;AAEvB,eAAa;AAAA,IACT,SAAS,UAAU;AAAA,IACnB,QAAQ;AAAA,IACR,UAAU,CAAC;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EAAA,CACf;AACL;"}
1
+ {"version":3,"file":"useIdleTimeout.js","sources":["../../../lib/base/hooks/useIdleTimeout.ts"],"sourcesContent":["import { useIdleTimer } from 'react-idle-timer'\nimport { useCallback } from 'react'\n\ninterface UseIdleTimeoutOptions {\n timeout?: number\n onTimeout: (redirectUrl: string) => void\n enabled?: boolean\n}\n\nexport function useIdleTimeout({\n timeout = 60,\n onTimeout,\n enabled = true,\n}: UseIdleTimeoutOptions) {\n const handleIdle = useCallback(() => {\n if (enabled) {\n const redirectUrl =\n window.location.pathname +\n window.location.search +\n window.location.hash\n onTimeout(redirectUrl)\n }\n }, [enabled, onTimeout])\n\n useIdleTimer({\n timeout: timeout * 1000,\n onIdle: handleIdle,\n disabled: !enabled,\n debounce: 500,\n crossTab: true,\n syncTimers: 200,\n })\n}\n\nexport default useIdleTimeout\n"],"names":[],"mappings":";;AASO,SAAS,eAAe;AAAA,EAC3B,UAAU;AAAA,EACV;AAAA,EACA,UAAU;AACd,GAA0B;AACtB,QAAM,aAAa,YAAY,MAAM;AACjC,QAAI,SAAS;AACT,YAAM,cACF,OAAO,SAAS,WAChB,OAAO,SAAS,SAChB,OAAO,SAAS;AACpB,gBAAU,WAAW;AAAA,IACzB;AAAA,EACJ,GAAG,CAAC,SAAS,SAAS,CAAC;AAEvB,eAAa;AAAA,IACT,SAAS,UAAU;AAAA,IACnB,QAAQ;AAAA,IACR,UAAU,CAAC;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EAAA,CACf;AACL;"}
@@ -12,7 +12,7 @@ type Auth = {
12
12
  user: User;
13
13
  signIn: (values: SignInCredential) => AuthResult;
14
14
  signUp: (values: SignUpCredential) => AuthResult;
15
- signOut: () => void;
15
+ signOut: (redirectUrl?: string) => void;
16
16
  oAuthSignIn: (
17
17
  callback: (payload: OauthSignInCallbackPayload) => void
18
18
  ) => void;
@@ -8,6 +8,11 @@ import type {
8
8
  } from '@/@types/auth'
9
9
  import appConfig from '@/configs/app.config'
10
10
  import { REDIRECT_URL_KEY } from '@/constants/app.constant'
11
+ import {
12
+ SIGN_IN_DEFAULT_ERROR_MESSAGE,
13
+ SIGN_IN_ERROR_MESSAGES_BY_STATUS,
14
+ SIGN_IN_NETWORK_ERROR_MESSAGE,
15
+ } from '@/constants/auth.constant'
11
16
  import { apiSignIn, apiSignOut, apiSignUp } from '@/services/AuthService'
12
17
  import { useSessionUser, useToken } from '@/store/authStore'
13
18
  import {
@@ -42,6 +47,23 @@ const IsolatedNavigator = ({ ref }: { ref: Ref<IsolatedNavigatorRef> }) => {
42
47
  return <></>
43
48
  }
44
49
 
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ const getSignInErrorMessage = (error: any): string => {
52
+ const response = error?.response
53
+
54
+ if (!response) {
55
+ return error?.request
56
+ ? SIGN_IN_NETWORK_ERROR_MESSAGE
57
+ : SIGN_IN_DEFAULT_ERROR_MESSAGE
58
+ }
59
+
60
+ return (
61
+ SIGN_IN_ERROR_MESSAGES_BY_STATUS[response.status] ||
62
+ response.data?.message ||
63
+ SIGN_IN_DEFAULT_ERROR_MESSAGE
64
+ )
65
+ }
66
+
45
67
  function AuthProvider({ children }: AuthProviderProps) {
46
68
  const signedIn = useSessionUser((state) => state.session.signedIn)
47
69
  const user = useSessionUser((state) => state.user)
@@ -171,14 +193,14 @@ function AuthProvider({ children }: AuthProviderProps) {
171
193
  }
172
194
  return {
173
195
  status: 'failed',
174
- message: 'Unable to sign in',
196
+ message: SIGN_IN_DEFAULT_ERROR_MESSAGE,
175
197
  }
176
198
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
199
  } catch (errors: any) {
178
200
  console.error('ERRO NA CHAMADA DA API:', errors)
179
201
  return {
180
202
  status: 'failed',
181
- message: errors?.response?.data?.message || errors.toString(),
203
+ message: getSignInErrorMessage(errors),
182
204
  }
183
205
  }
184
206
  }
@@ -215,12 +237,23 @@ function AuthProvider({ children }: AuthProviderProps) {
215
237
  }
216
238
  }
217
239
 
218
- const signOut = async () => {
240
+ const signOut = async (redirectUrl?: string) => {
219
241
  try {
220
242
  await apiSignOut()
221
243
  } finally {
222
244
  handleSignOut()
223
- navigatorRef.current?.navigate(appConfig.unAuthenticatedEntryPath)
245
+ if (redirectUrl) {
246
+ const params = new URLSearchParams({
247
+ [REDIRECT_URL_KEY]: redirectUrl,
248
+ })
249
+ navigatorRef.current?.navigate(
250
+ `${appConfig.unAuthenticatedEntryPath}?${params.toString()}`,
251
+ )
252
+ } else {
253
+ navigatorRef.current?.navigate(
254
+ appConfig.unAuthenticatedEntryPath,
255
+ )
256
+ }
224
257
  }
225
258
  }
226
259
  const oAuthSignIn = (
@@ -0,0 +1,19 @@
1
+ export const SIGN_IN_DEFAULT_ERROR_MESSAGE =
2
+ 'Não foi possível realizar o login. Tente novamente mais tarde.'
3
+
4
+ export const SIGN_IN_NETWORK_ERROR_MESSAGE =
5
+ 'Não foi possível conectar ao servidor. Verifique sua conexão e tente novamente.'
6
+
7
+ export const SIGN_IN_ERROR_MESSAGES_BY_STATUS: Record<number, string> = {
8
+ 400: 'Dados de login inválidos. Verifique as informações e tente novamente.',
9
+ 401: 'Login ou senha incorretos.',
10
+ 403: 'Acesso negado. Seu usuário não tem permissão para acessar o sistema.',
11
+ 404: 'Usuário não encontrado.',
12
+ 408: 'O servidor demorou para responder. Tente novamente.',
13
+ 423: 'Usuário bloqueado. Entre em contato com o administrador.',
14
+ 429: 'Muitas tentativas de login. Aguarde alguns instantes e tente novamente.',
15
+ 500: 'Erro interno no servidor. Tente novamente mais tarde.',
16
+ 502: 'Serviço indisponível no momento. Tente novamente mais tarde.',
17
+ 503: 'Serviço indisponível no momento. Tente novamente mais tarde.',
18
+ 504: 'O servidor demorou para responder. Tente novamente mais tarde.',
19
+ }
@@ -1,6 +1,7 @@
1
1
  // Constants exports
2
2
  export * from './api.constant';
3
3
  export * from './app.constant';
4
+ export * from './auth.constant';
4
5
  export * from './chart.constant';
5
6
  export * from './countries.constant';
6
7
  export * from './navigation.constant';
@@ -1,6 +1,4 @@
1
1
  import ActionLink from '@/components/shared/ActionLink'
2
- import Alert from '@/components/ui/Alert'
3
- import useTimeOutMessage from '@/utils/hooks/useTimeOutMessage'
4
2
  import SignInForm from './components/SignInForm'
5
3
  import Logo from '@/components/template/Logo'
6
4
  import { getLogoFilename } from '@base/utils/logo'
@@ -17,8 +15,6 @@ export const SignInBase = ({
17
15
  forgetPasswordUrl = '/forgot-password',
18
16
  disableSubmit,
19
17
  }: SignInProps) => {
20
- const [message, setMessage] = useTimeOutMessage()
21
-
22
18
  const { mode } = useThemeStore()
23
19
 
24
20
  return (
@@ -33,14 +29,8 @@ export const SignInBase = ({
33
29
  Digite seus dados para entrar.
34
30
  </p>
35
31
  </div>
36
- {message && (
37
- <Alert showIcon className="mb-4" type="danger">
38
- <span className="break-all">{message}</span>
39
- </Alert>
40
- )}
41
32
  <SignInForm
42
33
  disableSubmit={disableSubmit}
43
- setMessage={setMessage}
44
34
  passwordHint={
45
35
  <div className="mb-6 mt-2">
46
36
  <ActionLink
@@ -1,6 +1,8 @@
1
1
  import { ReactNode, useState } from "react";
2
2
  import Input from "@/components/ui/Input";
3
3
  import Button from "@/components/ui/Button";
4
+ import Notification from "@/components/ui/Notification";
5
+ import toast from "@/components/ui/toast";
4
6
  import { FormItem, Form } from "@/components/ui/Form";
5
7
  import PasswordInput from "@/components/shared/PasswordInput";
6
8
  import classNames from "@/utils/classNames";
@@ -13,7 +15,6 @@ import type { CommonProps } from "@/@types/common";
13
15
  interface SignInFormProps extends CommonProps {
14
16
  disableSubmit?: boolean;
15
17
  passwordHint?: string | ReactNode;
16
- setMessage?: (message: string) => void;
17
18
  }
18
19
 
19
20
  type SignInFormSchema = {
@@ -33,7 +34,7 @@ const validationSchema: ZodType<SignInFormSchema> = z.object({
33
34
  const SignInForm = (props: SignInFormProps) => {
34
35
  const [isSubmitting, setSubmitting] = useState<boolean>(false);
35
36
 
36
- const { disableSubmit = false, className, setMessage, passwordHint } = props;
37
+ const { disableSubmit = false, className, passwordHint } = props;
37
38
 
38
39
  const {
39
40
  handleSubmit,
@@ -58,7 +59,11 @@ const SignInForm = (props: SignInFormProps) => {
58
59
  const result = await signIn({ username, password });
59
60
 
60
61
  if (result?.status === "failed") {
61
- setMessage?.(result.message);
62
+ toast.push(
63
+ <Notification title="Erro ao entrar" type="danger">
64
+ {result.message}
65
+ </Notification>
66
+ );
62
67
  }
63
68
  }
64
69
 
@@ -56,9 +56,9 @@ const Authentication = () => {
56
56
  },
57
57
  {
58
58
  propName: 'signOut',
59
- type: `<code>() => void</code>`,
59
+ type: `<code>(redirectUrl?: string) => void</code>`,
60
60
  default: `-`,
61
- desc: `A method to sign out the current user`,
61
+ desc: `A method to sign out the current user. Pass a redirect URL to return there after signing in again.`,
62
62
  },
63
63
  {
64
64
  propName: 'oAuthSignIn',
@@ -102,6 +102,29 @@ const YourComponent = () => {
102
102
  </div>
103
103
  );
104
104
  };
105
+ `}</SyntaxHighlighter>
106
+ <p className="mt-4">
107
+ To return to the current screen after an idle timeout, pass{' '}
108
+ <code>signOut</code> directly to <code>useIdleTimeout</code>.
109
+ The timeout hook supplies the current path, query string,
110
+ and hash to the callback. Calling <code>signOut()</code>{' '}
111
+ without a destination, such as for a manual logout, keeps
112
+ the existing behavior.
113
+ </p>
114
+ <SyntaxHighlighter language="tsx">{`import { useAuth } from '@/auth'
115
+ import { useIdleTimeout } from '@/base/hooks'
116
+
117
+ const SessionTimeout = () => {
118
+ const { signOut, authenticated } = useAuth();
119
+
120
+ useIdleTimeout({
121
+ timeout: 900,
122
+ onTimeout: signOut,
123
+ enabled: authenticated,
124
+ });
125
+
126
+ return null;
127
+ };
105
128
  `}</SyntaxHighlighter>
106
129
  </div>
107
130
  <div className="mt-10" id="OAuth">
@@ -5,6 +5,13 @@ export type TRequisicaoCompra = {
5
5
  possuiHistoricoMovimentacaoItens: boolean
6
6
  valorTotal?: number
7
7
  idsCentrosCusto?: number[]
8
+ ordensComprasConsumoParcial?: TOrdemCompraProdutoConsumoParcial[]
9
+ }
10
+
11
+ export type TOrdemCompraProdutoConsumoParcial = {
12
+ idOrdemCompra: number
13
+ idProduto: number
14
+ produto: string
8
15
  }
9
16
 
10
17
  export type THistoricoMovimentacao = {
@@ -3,7 +3,7 @@ import { useCallback } from 'react'
3
3
 
4
4
  interface UseIdleTimeoutOptions {
5
5
  timeout?: number
6
- onTimeout: () => void
6
+ onTimeout: (redirectUrl: string) => void
7
7
  enabled?: boolean
8
8
  }
9
9
 
@@ -14,7 +14,11 @@ export function useIdleTimeout({
14
14
  }: UseIdleTimeoutOptions) {
15
15
  const handleIdle = useCallback(() => {
16
16
  if (enabled) {
17
- onTimeout()
17
+ const redirectUrl =
18
+ window.location.pathname +
19
+ window.location.search +
20
+ window.location.hash
21
+ onTimeout(redirectUrl)
18
22
  }
19
23
  }, [enabled, onTimeout])
20
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbe-agro/client-core",
3
- "version": "5.6.294",
3
+ "version": "5.6.296",
4
4
  "description": "Biblioteca principal de componentes e utilidades para os microfrontends do Orbe Agro.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",