@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.
@@ -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 } : { icon: /* @__PURE__ */ jsx(PiUserDuotone, {}) }
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(Avatar, { size: 32, ...avatarProps }) }),
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(Avatar, { ...avatarProps }),
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 } : { icon: <PiUserDuotone /> }),\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 return (\n <Dropdown\n className=\"flex\"\n toggleClassName=\"flex items-center\"\n renderTitle={\n <div className=\"flex cursor-pointer items-center\">\n <Avatar size={32} {...avatarProps} />\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 {...avatarProps} />\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,cAAc;AAAA,IAChB,GAAI,SAAS,EAAE,KAAK,OAAA,IAAW,EAAE,MAAM,oBAAC,eAAA,EAAc,EAAA;AAAA,EAAG;AAG7D,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;AAGN,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,iBAAgB;AAAA,MAChB,aACI,oBAAC,OAAA,EAAI,WAAU,oCACX,UAAA,oBAAC,QAAA,EAAO,MAAM,IAAK,GAAG,YAAA,CAAa,EAAA,CACvC;AAAA,MAEJ,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,oBAAC,SAAS,MAAT,EAAc,SAAQ,UACnB,UAAA,qBAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAQ,GAAG,aAAa;AAAA,+BACxB,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
+ {"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;"}
@@ -8,6 +8,7 @@ export type SignInResponse = {
8
8
  jwtToken: string;
9
9
  id: number;
10
10
  nome: string;
11
+ email: string;
11
12
  primeiroAcesso?: boolean;
12
13
  funcionalidades?: string[];
13
14
  };
@@ -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,2CA+LpD;AAED,eAAe,YAAY,CAAA"}
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+GA,QAAA,MAAM,YAAY,8EAAgC,CAAA;AAElD,eAAe,YAAY,CAAA"}
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"}
@@ -10,6 +10,7 @@ export type SignInResponse = {
10
10
  jwtToken: string
11
11
  id: number
12
12
  nome: string
13
+ email: string
13
14
  primeiroAcesso?: boolean
14
15
  funcionalidades?: string[]
15
16
  }
@@ -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 } : { icon: <PiUserDuotone /> }),
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 size={32} {...avatarProps} />
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 {...avatarProps} />
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'}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbe-agro/client-core",
3
- "version": "5.5.80",
3
+ "version": "5.5.81",
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",