Browse Source

update user homepage path responsibility

ryoji-s 2 years ago
parent
commit
45635d0b89

+ 1 - 5
apps/app/src/components/Admin/AuditLog/ActivityTable.tsx

@@ -50,11 +50,7 @@ export const ActivityTable : FC<Props> = (props: Props) => {
                       <UserPicture user={activity.user} />
                       <a
                         className="ml-2"
-                        href={pagePathUtils.userHomepagePath(
-                          typeof activity.user === 'string'
-                            ? ''
-                            : activity.user.username,
-                        )}
+                        href={pagePathUtils.userHomepagePath(activity.user)}
                       >
                         {activity.snapshot?.username}
                       </a>

+ 1 - 1
apps/app/src/components/Navbar/AuthorInfo.tsx

@@ -32,7 +32,7 @@ export const AuthorInfo = (props: AuthorInfoProps): JSX.Element => {
     : 'Last revision posted at';
   const userLabel = user != null
     ? (
-      <Link href={userHomepagePath(user.username)} prefetch={false}>
+      <Link href={userHomepagePath(user)} prefetch={false}>
         {user.name}
       </Link>
     )

+ 1 - 1
apps/app/src/components/Navbar/PersonalDropdown.jsx

@@ -65,7 +65,7 @@ const PersonalDropdown = () => {
 
           <div className="btn-group btn-block mt-2" role="group">
             <Link
-              href={pagePathUtils.userHomepagePath(currentUser.username)}
+              href={pagePathUtils.userHomepagePath(currentUser)}
               className="btn btn-sm btn-outline-secondary col"
               data-testid="grw-personal-dropdown-menu-user-home"
             >

+ 1 - 1
apps/app/src/components/PageCreateModal.jsx

@@ -35,7 +35,7 @@ const PageCreateModal = () => {
 
   const { data: isReachable } = useIsSearchServiceReachable();
   const pathname = path || '';
-  const userHomepagePath = pagePathUtils.userHomepagePath(currentUser.username);
+  const userHomepagePath = pagePathUtils.userHomepagePath(currentUser);
   const isCreatable = isCreatablePage(pathname) || isUsersHomePage(pathname);
   const pageNameInputInitialValue = isCreatable ? pathUtils.addTrailingSlash(pathname) : '/';
   const now = format(new Date(), 'yyyy/MM/dd');

+ 1 - 1
apps/app/src/components/User/Username.tsx

@@ -16,7 +16,7 @@ export const Username = (props: UsernameProps): JSX.Element => {
 
   const name = user.name || '(no name)';
   const username = user.username;
-  const href = pagePathUtils.userHomepagePath(user.username);
+  const href = pagePathUtils.userHomepagePath(user);
 
   return (
     <Link href={href} prefetch={false}>

+ 1 - 1
apps/app/src/server/events/user.ts

@@ -23,7 +23,7 @@ class UserEvent extends EventEmitter {
     }
 
     const Page = this.crowi.model('Page');
-    const userHomePagePath = pagePathUtils.userHomepagePath(user.username);
+    const userHomePagePath = pagePathUtils.userHomepagePath(user);
     // TODO: Delete user arg.
     // see: https://redmine.weseek.co.jp/issues/124326
     let page = await Page.findByPath(userHomePagePath, user);

+ 1 - 1
apps/app/src/server/routes/apiv3/users.js

@@ -790,7 +790,7 @@ module.exports = (crowi) => {
       const user = await User.findById(id);
       // !! DO NOT MOVE userHomePagePath FROM THIS POSITION !! -- 05.31.2023
       // catch username before delete user because username will be change to deleted_at_*
-      const userHomePagePath = pagePathUtils.userHomepagePath(user.username);
+      const userHomePagePath = pagePathUtils.userHomepagePath(user);
 
       await UserGroupRelation.remove({ relatedUser: user });
       await user.statusDelete();

+ 8 - 3
packages/core/src/utils/page-path-utils/index.ts

@@ -1,5 +1,7 @@
 import escapeStringRegexp from 'escape-string-regexp';
 
+import { IUser, IUserHasId } from '~/interfaces/user';
+
 import { isValidObjectId } from '../objectid-utils';
 import { addTrailingSlash } from '../path-utils';
 
@@ -122,10 +124,13 @@ export const isCreatablePage = (path: string): boolean => {
 
 /**
  * return user's homepage path
- * @param username
+ * @param user
  */
-export const userHomepagePath = (username: string): string => {
-  return `/user/${username}`;
+export const userHomepagePath = (user?: string | IUser | IUserHasId): string => {
+  if (typeof user === 'string' || !user || !user.username) {
+    return '';
+  }
+  return `/user/${user.username}`;
 };
 
 /**

+ 1 - 1
packages/ui/src/components/User/UserPicture.tsx

@@ -29,7 +29,7 @@ const UserPictureRootWithLink = forwardRef<HTMLSpanElement, UserPictureRootProps
   const router = useRouter();
 
   const { user } = props;
-  const href = userHomepagePath(user.username || '');
+  const href = userHomepagePath(user);
 
   const clickHandler = useCallback(() => {
     router.push(href);