|
|
@@ -4,16 +4,17 @@ import type { IUserHasId } from '@growi/core';
|
|
|
import { UserPicture } from '@growi/ui/dist/components';
|
|
|
import { Popover, PopoverBody } from 'reactstrap';
|
|
|
|
|
|
-import UserPictureList from '../Common/UserPictureList';
|
|
|
+import UserPictureList from '../../Common/UserPictureList';
|
|
|
|
|
|
-import popoverStyles from './user-list-popover.module.scss';
|
|
|
+import styles from './EditingUserList.module.scss';
|
|
|
+
|
|
|
+const userListPopoverClass = styles['user-list-popover'] ?? '';
|
|
|
|
|
|
type Props = {
|
|
|
- className: string,
|
|
|
userList: IUserHasId[]
|
|
|
}
|
|
|
|
|
|
-export const EditingUserList: FC<Props> = ({ className, userList }) => {
|
|
|
+export const EditingUserList: FC<Props> = ({ userList }) => {
|
|
|
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
|
|
|
|
const togglePopover = () => setIsPopoverOpen(!isPopoverOpen);
|
|
|
@@ -21,33 +22,36 @@ export const EditingUserList: FC<Props> = ({ className, userList }) => {
|
|
|
const firstFourUsers = userList.slice(0, 4);
|
|
|
const remainingUsers = userList.slice(4);
|
|
|
|
|
|
+ if (userList.length === 0) {
|
|
|
+ return <></>;
|
|
|
+ }
|
|
|
+
|
|
|
return (
|
|
|
- <div className={className}>
|
|
|
- {userList.length > 0 && (
|
|
|
- <div className="d-flex justify-content-end">
|
|
|
- {firstFourUsers.map(user => (
|
|
|
- <div className="ms-1">
|
|
|
- <UserPicture
|
|
|
- user={user}
|
|
|
- noLink
|
|
|
- additionalClassName="border border-info"
|
|
|
- />
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- {remainingUsers.length > 0 && (
|
|
|
- <div className="ms-1">
|
|
|
- <button type="button" id="btn-editing-user" className="btn border-0 bg-info-subtle rounded-pill p-0">
|
|
|
- <span className="fw-bold text-info p-1">+{remainingUsers.length}</span>
|
|
|
- </button>
|
|
|
- <Popover placement="bottom" isOpen={isPopoverOpen} target="btn-editing-user" toggle={togglePopover} trigger="legacy">
|
|
|
- <PopoverBody className={`user-list-popover ${popoverStyles['user-list-popover']}`}>
|
|
|
- <UserPictureList users={remainingUsers} />
|
|
|
- </PopoverBody>
|
|
|
- </Popover>
|
|
|
- </div>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- )}
|
|
|
+ <div className="d-flex flex-column justify-content-end">
|
|
|
+ <div className="d-flex justify-content-end">
|
|
|
+ {firstFourUsers.map(user => (
|
|
|
+ <div className="ms-1">
|
|
|
+ <UserPicture
|
|
|
+ user={user}
|
|
|
+ noLink
|
|
|
+ additionalClassName="border border-info"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+
|
|
|
+ {remainingUsers.length > 0 && (
|
|
|
+ <div className="ms-1">
|
|
|
+ <button type="button" id="btn-editing-user" className="btn border-0 bg-info-subtle rounded-pill p-0">
|
|
|
+ <span className="fw-bold text-info p-1">+{remainingUsers.length}</span>
|
|
|
+ </button>
|
|
|
+ <Popover placement="bottom" isOpen={isPopoverOpen} target="btn-editing-user" toggle={togglePopover} trigger="legacy">
|
|
|
+ <PopoverBody className={userListPopoverClass}>
|
|
|
+ <UserPictureList users={remainingUsers} />
|
|
|
+ </PopoverBody>
|
|
|
+ </Popover>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
);
|
|
|
};
|