@orbe-agro/client-core 5.5.80 → 5.5.81
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.
- package/dist/@ecme/auth/AuthProvider.js +2 -0
- package/dist/@ecme/auth/AuthProvider.js.map +1 -1
- package/dist/@ecme/components/template/UserProfileDropdown.js +21 -3
- package/dist/@ecme/components/template/UserProfileDropdown.js.map +1 -1
- package/dist/@types/@ecme/@types/auth.d.ts +1 -0
- package/dist/@types/@ecme/@types/auth.d.ts.map +1 -1
- package/dist/@types/@ecme/auth/AuthProvider.d.ts.map +1 -1
- package/dist/@types/@ecme/components/template/UserProfileDropdown.d.ts.map +1 -1
- package/lib/@ecme/@types/auth.ts +1 -0
- package/lib/@ecme/auth/AuthProvider.tsx +2 -0
- package/lib/@ecme/components/template/UserProfileDropdown.tsx +19 -3
- package/package.json +1 -1
|
@@ -97,6 +97,7 @@ function AuthProvider({ children }) {
|
|
|
97
97
|
const newUser = {
|
|
98
98
|
userId: resp.id.toString(),
|
|
99
99
|
userName: resp.nome,
|
|
100
|
+
email: resp.email,
|
|
100
101
|
primeiroAcesso: resp.primeiroAcesso,
|
|
101
102
|
authority: funcionalidadesUrls,
|
|
102
103
|
vinculosUsuario
|
|
@@ -129,6 +130,7 @@ function AuthProvider({ children }) {
|
|
|
129
130
|
const newUser = {
|
|
130
131
|
userId: resp.id.toString(),
|
|
131
132
|
userName: resp.nome,
|
|
133
|
+
email: resp.email,
|
|
132
134
|
primeiroAcesso: false
|
|
133
135
|
};
|
|
134
136
|
setUser(newUser);
|
|
@@ -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\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\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 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 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 { 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\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\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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"}
|
|
@@ -15,8 +15,9 @@ const _UserDropdown = () => {
|
|
|
15
15
|
const handleSignOut = () => {
|
|
16
16
|
signOut();
|
|
17
17
|
};
|
|
18
|
+
const userNameFirstLetter = userName?.charAt(0).toUpperCase() || "";
|
|
18
19
|
const avatarProps = {
|
|
19
|
-
...avatar ? { src: avatar } : {
|
|
20
|
+
...avatar ? { src: avatar } : {}
|
|
20
21
|
};
|
|
21
22
|
const { t } = useTranslation();
|
|
22
23
|
const dropdownItemList = useMemo(
|
|
@@ -44,11 +45,28 @@ const _UserDropdown = () => {
|
|
|
44
45
|
{
|
|
45
46
|
className: "flex",
|
|
46
47
|
toggleClassName: "flex items-center",
|
|
47
|
-
renderTitle: /* @__PURE__ */ jsx("div", { className: "flex cursor-pointer items-center", children: /* @__PURE__ */ jsx(
|
|
48
|
+
renderTitle: /* @__PURE__ */ jsx("div", { className: "flex cursor-pointer items-center", children: /* @__PURE__ */ jsx(
|
|
49
|
+
Avatar,
|
|
50
|
+
{
|
|
51
|
+
size: 32,
|
|
52
|
+
shape: "circle",
|
|
53
|
+
className: "bg-primary-subtle text-primary",
|
|
54
|
+
...avatarProps,
|
|
55
|
+
children: !avatar && userNameFirstLetter
|
|
56
|
+
}
|
|
57
|
+
) }),
|
|
48
58
|
placement: "bottom-end",
|
|
49
59
|
children: [
|
|
50
60
|
/* @__PURE__ */ jsx(Dropdown.Item, { variant: "header", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-3 py-2", children: [
|
|
51
|
-
/* @__PURE__ */ jsx(
|
|
61
|
+
/* @__PURE__ */ jsx(
|
|
62
|
+
Avatar,
|
|
63
|
+
{
|
|
64
|
+
shape: "circle",
|
|
65
|
+
className: "bg-primary-subtle text-primary",
|
|
66
|
+
...avatarProps,
|
|
67
|
+
children: !avatar && userNameFirstLetter
|
|
68
|
+
}
|
|
69
|
+
),
|
|
52
70
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
53
71
|
/* @__PURE__ */ jsx("div", { className: "font-bold text-gray-900 dark:text-gray-100", children: userName || "Anonymous" }),
|
|
54
72
|
/* @__PURE__ */ jsx("div", { className: "text-xs", children: email || "No email available" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserProfileDropdown.js","sources":["../../../../lib/@ecme/components/template/UserProfileDropdown.tsx"],"sourcesContent":["import Avatar from '@/components/ui/Avatar'\nimport Dropdown from '@/components/ui/Dropdown'\nimport withHeaderItem from '@/utils/hoc/withHeaderItem'\nimport { useSessionUser } from '@/store/authStore'\nimport { Link } from 'react-router-dom'\nimport {\n PiUserDuotone,\n PiGearDuotone,\n PiPulseDuotone,\n PiSignOutDuotone,\n} from 'react-icons/pi'\nimport { useAuth } from '@/auth'\nimport { useMemo, type JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\n\ntype DropdownList = {\n label: string\n path: string\n icon: JSX.Element\n}\n\nconst _UserDropdown = () => {\n const { avatar, userName, email } = useSessionUser((state) => state.user)\n\n const { signOut } = useAuth()\n\n const handleSignOut = () => {\n signOut()\n }\n\n const avatarProps = {\n ...(avatar ? { src: avatar } : {
|
|
1
|
+
{"version":3,"file":"UserProfileDropdown.js","sources":["../../../../lib/@ecme/components/template/UserProfileDropdown.tsx"],"sourcesContent":["import Avatar from '@/components/ui/Avatar'\nimport Dropdown from '@/components/ui/Dropdown'\nimport withHeaderItem from '@/utils/hoc/withHeaderItem'\nimport { useSessionUser } from '@/store/authStore'\nimport { Link } from 'react-router-dom'\nimport {\n PiUserDuotone,\n PiGearDuotone,\n PiPulseDuotone,\n PiSignOutDuotone,\n} from 'react-icons/pi'\nimport { useAuth } from '@/auth'\nimport { useMemo, type JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\n\ntype DropdownList = {\n label: string\n path: string\n icon: JSX.Element\n}\n\nconst _UserDropdown = () => {\n const { avatar, userName, email } = useSessionUser((state) => state.user)\n\n const { signOut } = useAuth()\n\n const handleSignOut = () => {\n signOut()\n }\n\n const userNameFirstLetter = userName?.charAt(0).toUpperCase() || ''\n\n const avatarProps = {\n ...(avatar ? { src: avatar } : {}),\n }\n\n const { t } = useTranslation()\n\n const dropdownItemList: DropdownList[] = useMemo(\n () => [\n {\n label: t('base.layout.profile.dropdown.options.profile'),\n path: '/concepts/account/settings',\n icon: <PiUserDuotone />,\n },\n // {\n // label: t('base.layout.profile.dropdown.options.settings'),\n // path: '/concepts/account/settings',\n // icon: <PiGearDuotone />,\n // },\n // {\n // label: t('base.layout.profile.dropdown.options.activity'),\n // path: '/concepts/account/activity-log',\n // icon: <PiPulseDuotone />,\n // },\n ],\n [t],\n )\n \n\n return (\n <Dropdown\n className=\"flex\"\n toggleClassName=\"flex items-center\"\n renderTitle={\n <div className=\"flex cursor-pointer items-center\">\n <Avatar \n size={32} \n shape=\"circle\"\n className=\"bg-primary-subtle text-primary\"\n {...avatarProps}\n >\n {!avatar && userNameFirstLetter}\n </Avatar>\n </div>\n }\n placement=\"bottom-end\"\n >\n <Dropdown.Item variant=\"header\">\n <div className=\"flex items-center gap-3 px-3 py-2\">\n <Avatar \n shape=\"circle\"\n className=\"bg-primary-subtle text-primary\"\n {...avatarProps}\n >\n {!avatar && userNameFirstLetter}\n </Avatar>\n <div>\n <div className=\"font-bold text-gray-900 dark:text-gray-100\">\n {userName || 'Anonymous'}\n </div>\n <div className=\"text-xs\">\n {email || 'No email available'}\n </div>\n </div>\n </div>\n </Dropdown.Item>\n <Dropdown.Item variant=\"divider\" />\n {dropdownItemList.map((item) => (\n <Dropdown.Item\n key={item.label}\n eventKey={item.label}\n className=\"px-0\"\n >\n <Link className=\"flex h-full w-full px-2\" to={item.path}>\n <span className=\"flex w-full items-center gap-2\">\n <span className=\"text-xl\">{item.icon}</span>\n <span>{item.label}</span>\n </span>\n </Link>\n </Dropdown.Item>\n ))}\n <Dropdown.Item variant=\"divider\" />\n <Dropdown.Item\n eventKey=\"Sign Out\"\n className=\"gap-2\"\n onClick={handleSignOut}\n >\n <span className=\"text-xl\">\n <PiSignOutDuotone />\n </span>\n <span>{t('base.layout.profile.dropdown.options.signOut')}</span>\n </Dropdown.Item>\n </Dropdown>\n )\n}\n\nconst UserDropdown = withHeaderItem(_UserDropdown)\n\nexport default UserDropdown\n"],"names":[],"mappings":";;;;;;;;;;;AAqBA,MAAM,gBAAgB,MAAM;AACxB,QAAM,EAAE,QAAQ,UAAU,MAAA,IAAU,eAAe,CAAC,UAAU,MAAM,IAAI;AAExE,QAAM,EAAE,QAAA,IAAY,QAAA;AAEpB,QAAM,gBAAgB,MAAM;AACxB,YAAA;AAAA,EACJ;AAEA,QAAM,sBAAsB,UAAU,OAAO,CAAC,EAAE,iBAAiB;AAEjE,QAAM,cAAc;AAAA,IAChB,GAAI,SAAS,EAAE,KAAK,WAAW,CAAA;AAAA,EAAC;AAGpC,QAAM,EAAE,EAAA,IAAM,eAAA;AAEd,QAAM,mBAAmC;AAAA,IACrC,MAAM;AAAA,MACF;AAAA,QACI,OAAO,EAAE,8CAA8C;AAAA,QACvD,MAAM;AAAA,QACN,0BAAO,eAAA,CAAA,CAAc;AAAA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACzB;AAAA,IAYJ,CAAC,CAAC;AAAA,EAAA;AAIN,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,iBAAgB;AAAA,MAChB,aACI,oBAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,MAAM;AAAA,UACN,OAAM;AAAA,UACN,WAAU;AAAA,UACT,GAAG;AAAA,UAEH,WAAC,UAAU;AAAA,QAAA;AAAA,MAAA,GAEpB;AAAA,MAEJ,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,oBAAC,SAAS,MAAT,EAAc,SAAQ,UACnB,UAAA,qBAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,OAAM;AAAA,cACN,WAAU;AAAA,cACT,GAAG;AAAA,cAEH,WAAC,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,+BAEf,OAAA,EACG,UAAA;AAAA,YAAA,oBAAC,OAAA,EAAI,WAAU,8CACV,UAAA,YAAY,aACjB;AAAA,YACA,oBAAC,OAAA,EAAI,WAAU,WACV,mBAAS,qBAAA,CACd;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,QACA,oBAAC,SAAS,MAAT,EAAc,SAAQ,UAAA,CAAU;AAAA,QAChC,iBAAiB,IAAI,CAAC,SACnB;AAAA,UAAC,SAAS;AAAA,UAAT;AAAA,YAEG,UAAU,KAAK;AAAA,YACf,WAAU;AAAA,YAEV,UAAA,oBAAC,MAAA,EAAK,WAAU,2BAA0B,IAAI,KAAK,MAC/C,UAAA,qBAAC,QAAA,EAAK,WAAU,kCACZ,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,WAAU,WAAW,UAAA,KAAK,MAAK;AAAA,cACrC,oBAAC,QAAA,EAAM,UAAA,KAAK,MAAA,CAAM;AAAA,YAAA,EAAA,CACtB,EAAA,CACJ;AAAA,UAAA;AAAA,UATK,KAAK;AAAA,QAAA,CAWjB;AAAA,QACD,oBAAC,SAAS,MAAT,EAAc,SAAQ,UAAA,CAAU;AAAA,QACjC;AAAA,UAAC,SAAS;AAAA,UAAT;AAAA,YACG,UAAS;AAAA,YACT,WAAU;AAAA,YACV,SAAS;AAAA,YAET,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,WAAU,WACZ,UAAA,oBAAC,oBAAiB,GACtB;AAAA,cACA,oBAAC,QAAA,EAAM,UAAA,EAAE,8CAA8C,EAAA,CAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7D;AAAA,IAAA;AAAA,EAAA;AAGZ;AAEA,MAAM,eAAe,eAAe,aAAa;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/@types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAA;AAEzD,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;CAClB,CAAC,CAAA;AAEF,MAAM,MAAM,IAAI,GAAG;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,eAAe,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC9C,QAAQ,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA"}
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/@types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAA;AAEzD,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;CAClB,CAAC,CAAA;AAEF,MAAM,MAAM,IAAI,GAAG;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,eAAe,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC9C,QAAQ,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA"}
|
|
@@ -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,
|
|
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,2CAiMpD;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserProfileDropdown.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/template/UserProfileDropdown.tsx"],"names":[],"mappings":"AA+
|
|
1
|
+
{"version":3,"file":"UserProfileDropdown.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/template/UserProfileDropdown.tsx"],"names":[],"mappings":"AA+HA,QAAA,MAAM,YAAY,8EAAgC,CAAA;AAElD,eAAe,YAAY,CAAA"}
|
package/lib/@ecme/@types/auth.ts
CHANGED
|
@@ -140,6 +140,7 @@ function AuthProvider({ children }: AuthProviderProps) {
|
|
|
140
140
|
const newUser = {
|
|
141
141
|
userId: resp.id.toString(),
|
|
142
142
|
userName: resp.nome,
|
|
143
|
+
email: resp.email,
|
|
143
144
|
primeiroAcesso: resp.primeiroAcesso,
|
|
144
145
|
authority: funcionalidadesUrls,
|
|
145
146
|
vinculosUsuario: vinculosUsuario,
|
|
@@ -175,6 +176,7 @@ function AuthProvider({ children }: AuthProviderProps) {
|
|
|
175
176
|
const newUser = {
|
|
176
177
|
userId: resp.id.toString(),
|
|
177
178
|
userName: resp.nome,
|
|
179
|
+
email: resp.email,
|
|
178
180
|
primeiroAcesso: false,
|
|
179
181
|
}
|
|
180
182
|
setUser(newUser)
|
|
@@ -28,8 +28,10 @@ const _UserDropdown = () => {
|
|
|
28
28
|
signOut()
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
const userNameFirstLetter = userName?.charAt(0).toUpperCase() || ''
|
|
32
|
+
|
|
31
33
|
const avatarProps = {
|
|
32
|
-
...(avatar ? { src: avatar } : {
|
|
34
|
+
...(avatar ? { src: avatar } : {}),
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
const { t } = useTranslation()
|
|
@@ -54,6 +56,7 @@ const _UserDropdown = () => {
|
|
|
54
56
|
],
|
|
55
57
|
[t],
|
|
56
58
|
)
|
|
59
|
+
|
|
57
60
|
|
|
58
61
|
return (
|
|
59
62
|
<Dropdown
|
|
@@ -61,14 +64,27 @@ const _UserDropdown = () => {
|
|
|
61
64
|
toggleClassName="flex items-center"
|
|
62
65
|
renderTitle={
|
|
63
66
|
<div className="flex cursor-pointer items-center">
|
|
64
|
-
<Avatar
|
|
67
|
+
<Avatar
|
|
68
|
+
size={32}
|
|
69
|
+
shape="circle"
|
|
70
|
+
className="bg-primary-subtle text-primary"
|
|
71
|
+
{...avatarProps}
|
|
72
|
+
>
|
|
73
|
+
{!avatar && userNameFirstLetter}
|
|
74
|
+
</Avatar>
|
|
65
75
|
</div>
|
|
66
76
|
}
|
|
67
77
|
placement="bottom-end"
|
|
68
78
|
>
|
|
69
79
|
<Dropdown.Item variant="header">
|
|
70
80
|
<div className="flex items-center gap-3 px-3 py-2">
|
|
71
|
-
<Avatar
|
|
81
|
+
<Avatar
|
|
82
|
+
shape="circle"
|
|
83
|
+
className="bg-primary-subtle text-primary"
|
|
84
|
+
{...avatarProps}
|
|
85
|
+
>
|
|
86
|
+
{!avatar && userNameFirstLetter}
|
|
87
|
+
</Avatar>
|
|
72
88
|
<div>
|
|
73
89
|
<div className="font-bold text-gray-900 dark:text-gray-100">
|
|
74
90
|
{userName || 'Anonymous'}
|