varminer-app-header 2.1.8 → 2.2.0

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/index.js CHANGED
@@ -376,32 +376,17 @@ const getAllDataFromStorage = () => {
376
376
  }
377
377
  };
378
378
  /**
379
- * Get profile picture URL from object store API using tenant_id and user_id from JWT token
379
+ * Get profile picture URL from object store API using user_id.
380
380
  * @param baseUrl - Base URL for the object store API (default: http://objectstore.impact0mics.local:9012)
381
- * @returns Profile picture URL or null if tenant_id or user_id is not available
381
+ * @returns Profile picture URL or null if user_id is not available
382
382
  */
383
383
  const getProfilePictureUrl = (baseUrl = "http://objectstore.impact0mics.local:9012") => {
384
384
  try {
385
385
  const allData = getAllDataFromStorage();
386
- // Get tenant_id and user_id from decoded token
387
- let tenantId = null;
388
- let userId = null;
389
- if (allData.decodedToken) {
390
- tenantId = allData.decodedToken.tenant_id || allData.decodedToken.tenant || null;
391
- userId = allData.decodedToken.user_id || null;
392
- }
393
- // If not found in decoded token, try auth data
394
- if ((!tenantId || !userId) && allData.auth) {
395
- tenantId = tenantId || allData.auth.tenant_id || allData.auth.tenant || null;
396
- userId = userId || allData.auth.user_id || null;
397
- }
398
- // Construct URL if we have both tenant_id and user_id
399
- if (tenantId && userId) {
400
- // Remove trailing slash from baseUrl if present
401
- const cleanBaseUrl = baseUrl.replace(/\/$/, '');
402
- return `${cleanBaseUrl}/v1/objectStore/profilePicture/path/${tenantId}/${userId}`;
403
- }
404
- return null;
386
+ const userId = allData.decodedToken?.user_id ?? allData.auth?.user_id ?? getStoredUserDetails()?.userId ?? null;
387
+ if (userId == null)
388
+ return null;
389
+ return `${baseUrl.replace(/\/$/, "")}/v1/objectStore/profilePicture/path/${userId}`;
405
390
  }
406
391
  catch (err) {
407
392
  console.error("Error getting profile picture URL:", err);
@@ -723,51 +708,68 @@ const AppHeader = ({ language: languageProp }) => {
723
708
  const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null);
724
709
  const [user, setUser] = React.useState(() => {
725
710
  const allData = getAllDataFromStorage();
726
- // Try to get user data from various sources
727
711
  let userName = "";
728
712
  let userEmail = "";
729
713
  let userRole = "";
730
- // Priority 1: From decoded token
731
- if (allData.decodedToken) {
732
- userName = allData.decodedToken.sub || allData.decodedToken.email || "";
733
- userEmail = allData.decodedToken.sub || allData.decodedToken.email || "";
734
- userRole = allData.decodedToken.role || "";
735
- }
736
- // Priority 2: From auth data
737
- if (allData.auth) {
738
- userName = userName || allData.auth.name || allData.auth.email || "";
739
- userEmail = userEmail || allData.auth.email || allData.auth.sub || "";
740
- userRole = userRole || allData.auth.role || allData.auth.activeRole || "";
741
- }
742
- // Priority 3: From userDetails/user/profile
714
+ const buildNameFromFirstLast = (obj) => {
715
+ if (!obj || typeof obj !== "object")
716
+ return "";
717
+ const first = (obj.firstName ?? obj.given_name ?? obj.first_name);
718
+ const last = (obj.lastName ?? obj.family_name ?? obj.last_name);
719
+ return [first, last].filter(Boolean).join(" ").trim();
720
+ };
721
+ // Prefer getUserDataFromStorage first (IAM firstName+lastName or persist:userdb name)
743
722
  const storedUser = getUserDataFromStorage();
744
723
  if (storedUser) {
745
- userName = userName || storedUser.name || "";
724
+ userName = storedUser.name || "";
746
725
  userEmail = userEmail || storedUser.email || "";
747
726
  userRole = userRole || storedUser.role || "";
748
727
  }
749
- // Priority 4: From other parsed data
728
+ // Then enrich from decoded token (email from sub; name only if token has name/given_name/family_name, never use sub as name)
729
+ if (allData.decodedToken) {
730
+ const token = allData.decodedToken;
731
+ userEmail = userEmail || token.sub || token.email || "";
732
+ const tokenName = token.name || buildNameFromFirstLast(token);
733
+ userName = userName || (tokenName || "");
734
+ userRole = userRole || token.role || "";
735
+ }
736
+ if (allData.auth) {
737
+ const auth = allData.auth;
738
+ userEmail = userEmail || auth.email || auth.sub || "";
739
+ userName = userName || auth.name || buildNameFromFirstLast(auth) || "";
740
+ userRole = userRole || auth.role || auth.activeRole || "";
741
+ }
750
742
  if (allData.userDetails) {
751
- const userDetails = allData.userDetails.user || allData.userDetails.data || allData.userDetails;
752
- if (userDetails) {
753
- userName = userName || userDetails.name || userDetails.fullName || "";
754
- userEmail = userEmail || userDetails.email || userDetails.emailAddress || "";
755
- userRole = userRole || userDetails.role || userDetails.userRole || "";
743
+ const userDetails = allData.userDetails.user
744
+ || allData.userDetails.data
745
+ || allData.userDetails;
746
+ const details = userDetails;
747
+ if (details) {
748
+ userEmail = userEmail || details.email || details.emailAddress || "";
749
+ userName = userName || details.name || details.fullName || buildNameFromFirstLast(details) || "";
750
+ userRole = userRole || details.role || details.userRole || "";
756
751
  }
757
752
  }
758
753
  if (allData.user) {
759
- const userData = allData.user.user || allData.user.data || allData.user.currentUser || allData.user;
754
+ const u = allData.user.user
755
+ || allData.user.data
756
+ || allData.user.currentUser
757
+ || allData.user;
758
+ const userData = u;
760
759
  if (userData) {
761
- userName = userName || userData.name || userData.fullName || "";
762
760
  userEmail = userEmail || userData.email || userData.emailAddress || "";
761
+ userName = userName || userData.name || userData.fullName || buildNameFromFirstLast(userData) || "";
763
762
  userRole = userRole || userData.role || userData.userRole || "";
764
763
  }
765
764
  }
766
765
  if (allData.profile) {
767
- const profileData = allData.profile.user || allData.profile.data || allData.profile;
766
+ const p = allData.profile.user
767
+ || allData.profile.data
768
+ || allData.profile;
769
+ const profileData = p;
768
770
  if (profileData) {
769
- userName = userName || profileData.name || profileData.fullName || "";
770
771
  userEmail = userEmail || profileData.email || profileData.emailAddress || "";
772
+ userName = userName || profileData.name || profileData.fullName || buildNameFromFirstLast(profileData) || "";
771
773
  userRole = userRole || profileData.role || profileData.userRole || "";
772
774
  }
773
775
  }
@@ -816,67 +818,81 @@ const AppHeader = ({ language: languageProp }) => {
816
818
  }, []); // Only run once on mount - fetch when component loads
817
819
  React.useEffect(() => {
818
820
  const allData = getAllDataFromStorage();
819
- // Try to get user data from various sources
820
821
  let userName = "";
821
822
  let userEmail = "";
822
823
  let userRole = "";
823
- let userAvatar = undefined;
824
- let userInitials = undefined;
825
- // Priority 1: From decoded token
826
- if (allData.decodedToken) {
827
- userName = allData.decodedToken.sub || allData.decodedToken.email || "";
828
- userEmail = allData.decodedToken.sub || allData.decodedToken.email || "";
829
- userRole = allData.decodedToken.role || "";
830
- }
831
- // Priority 2: From auth data
832
- if (allData.auth) {
833
- userName = userName || allData.auth.name || allData.auth.email || "";
834
- userEmail = userEmail || allData.auth.email || allData.auth.sub || "";
835
- userRole = userRole || allData.auth.role || allData.auth.activeRole || "";
836
- userAvatar = userAvatar || allData.auth.avatar || undefined;
837
- userInitials = userInitials || allData.auth.initials || undefined;
838
- }
839
- // Priority 3: From userDetails/user/profile
824
+ let userAvatar;
825
+ let userInitials;
826
+ const buildNameFromFirstLast = (obj) => {
827
+ if (!obj || typeof obj !== "object")
828
+ return "";
829
+ const first = (obj.firstName ?? obj.given_name ?? obj.first_name);
830
+ const last = (obj.lastName ?? obj.family_name ?? obj.last_name);
831
+ return [first, last].filter(Boolean).join(" ").trim();
832
+ };
840
833
  const storedUser = getUserDataFromStorage();
841
834
  if (storedUser) {
842
- userName = userName || storedUser.name || "";
835
+ userName = storedUser.name || "";
843
836
  userEmail = userEmail || storedUser.email || "";
844
837
  userRole = userRole || storedUser.role || "";
845
- userAvatar = userAvatar || storedUser.avatar || undefined;
846
- userInitials = userInitials || storedUser.initials || undefined;
838
+ userAvatar = storedUser.avatar;
839
+ userInitials = storedUser.initials;
840
+ }
841
+ if (allData.decodedToken) {
842
+ const token = allData.decodedToken;
843
+ userEmail = userEmail || token.sub || token.email || "";
844
+ const tokenName = token.name || buildNameFromFirstLast(token);
845
+ userName = userName || (tokenName || "");
846
+ userRole = userRole || token.role || "";
847
+ }
848
+ if (allData.auth) {
849
+ const auth = allData.auth;
850
+ userEmail = userEmail || auth.email || auth.sub || "";
851
+ userName = userName || auth.name || buildNameFromFirstLast(auth) || "";
852
+ userRole = userRole || auth.role || auth.activeRole || "";
853
+ userAvatar = userAvatar || auth.avatar || undefined;
854
+ userInitials = userInitials || auth.initials || undefined;
847
855
  }
848
- // Priority 4: From other parsed data
849
856
  if (allData.userDetails) {
850
- const userDetails = allData.userDetails.user || allData.userDetails.data || allData.userDetails;
851
- if (userDetails) {
852
- userName = userName || userDetails.name || userDetails.fullName || "";
853
- userEmail = userEmail || userDetails.email || userDetails.emailAddress || "";
854
- userRole = userRole || userDetails.role || userDetails.userRole || "";
855
- userAvatar = userAvatar || userDetails.avatar || userDetails.profilePicture || undefined;
856
- userInitials = userInitials || userDetails.initials || undefined;
857
+ const userDetails = allData.userDetails.user
858
+ || allData.userDetails.data
859
+ || allData.userDetails;
860
+ const details = userDetails;
861
+ if (details) {
862
+ userEmail = userEmail || details.email || details.emailAddress || "";
863
+ userName = userName || details.name || details.fullName || buildNameFromFirstLast(details) || "";
864
+ userRole = userRole || details.role || details.userRole || "";
865
+ userAvatar = userAvatar || details.avatar || details.profilePicture || undefined;
866
+ userInitials = userInitials || details.initials || undefined;
857
867
  }
858
868
  }
859
869
  if (allData.user) {
860
- const userData = allData.user.user || allData.user.data || allData.user.currentUser || allData.user;
870
+ const u = allData.user.user
871
+ || allData.user.data
872
+ || allData.user.currentUser
873
+ || allData.user;
874
+ const userData = u;
861
875
  if (userData) {
862
- userName = userName || userData.name || userData.fullName || "";
863
876
  userEmail = userEmail || userData.email || userData.emailAddress || "";
877
+ userName = userName || userData.name || userData.fullName || buildNameFromFirstLast(userData) || "";
864
878
  userRole = userRole || userData.role || userData.userRole || "";
865
879
  userAvatar = userAvatar || userData.avatar || userData.profilePicture || undefined;
866
880
  userInitials = userInitials || userData.initials || undefined;
867
881
  }
868
882
  }
869
883
  if (allData.profile) {
870
- const profileData = allData.profile.user || allData.profile.data || allData.profile;
884
+ const p = allData.profile.user
885
+ || allData.profile.data
886
+ || allData.profile;
887
+ const profileData = p;
871
888
  if (profileData) {
872
- userName = userName || profileData.name || profileData.fullName || "";
873
889
  userEmail = userEmail || profileData.email || profileData.emailAddress || "";
890
+ userName = userName || profileData.name || profileData.fullName || buildNameFromFirstLast(profileData) || "";
874
891
  userRole = userRole || profileData.role || profileData.userRole || "";
875
892
  userAvatar = userAvatar || profileData.avatar || profileData.profilePicture || undefined;
876
893
  userInitials = userInitials || profileData.initials || undefined;
877
894
  }
878
895
  }
879
- // Use fetched blob URL if available, otherwise fall back to other sources
880
896
  setUser({
881
897
  name: userName || "",
882
898
  email: userEmail || "",