UserList.jsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React from "react";
  2. import { useUsers } from "react-sync-board";
  3. import styled from "styled-components";
  4. import { useTranslation } from "react-i18next";
  5. import Touch from "../ui/Touch";
  6. import DropDown from "../ui/DropDown";
  7. import UserConfig from "./UserConfig";
  8. const InlineUserList = styled.ul.attrs(() => ({ className: "uk-card" }))`
  9. list-style: none;
  10. margin: 0;
  11. padding: 0;
  12. display: flex;
  13. `;
  14. const InlineUserListItem = styled.li`
  15. display: flex;
  16. align-items: center;
  17. position: relative;
  18. margin-right: 3px;
  19. `;
  20. const UserList = styled.ul.attrs(() => {})`
  21. list-style: none;
  22. margin: 0;
  23. padding: 1em;
  24. `;
  25. const UserListItem = styled.li`
  26. display: flex;
  27. max-width: 300px;
  28. align-items: center;
  29. padding: 0.4em 0;
  30. & .name {
  31. flex: 1;
  32. margin-left: 1em;
  33. }
  34. `;
  35. export const Users = () => {
  36. const { t } = useTranslation();
  37. const { currentUser, setCurrentUser, localUsers: users } = useUsers();
  38. const [openUserlist, setOpenUserList] = React.useState(false);
  39. const firstUsers = users.slice(0, 3);
  40. return (
  41. <InlineUserList>
  42. {firstUsers.map((u, index) => (
  43. <InlineUserListItem key={u.id}>
  44. <UserConfig
  45. index={index + 1}
  46. user={u}
  47. setUser={setCurrentUser}
  48. editable={currentUser.id === u.id}
  49. />
  50. </InlineUserListItem>
  51. ))}
  52. {users.length > 3 && (
  53. <InlineUserListItem key="last">
  54. <div style={{ display: "inline" }}>
  55. <Touch
  56. onClick={() => {
  57. setOpenUserList((prev) => !prev);
  58. }}
  59. icon="dots-three-horizontal"
  60. title={t("All players")}
  61. />
  62. <DropDown open={openUserlist}>
  63. <UserList>
  64. {users.map((u, index) => (
  65. <UserListItem key={u.id}>
  66. <UserConfig
  67. index={index + 1}
  68. user={u}
  69. setUser={setCurrentUser}
  70. editable={currentUser.id === u.id}
  71. />
  72. <div className="name">{u.name}</div>
  73. </UserListItem>
  74. ))}
  75. </UserList>
  76. </DropDown>
  77. </div>
  78. </InlineUserListItem>
  79. )}
  80. </InlineUserList>
  81. );
  82. };
  83. export default Users;