Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2899 | Rev 3432 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3416 stevensc 1
import React, { useMemo, useState } from "react";
2
import { Tab, Tabs, styled } from "@mui/material";
2899 stevensc 3
 
3416 stevensc 4
import { useFetch } from "@hooks";
5
import { REACTIONS } from "@constants/feed";
2899 stevensc 6
 
3416 stevensc 7
import Modal from "@components/UI/modal/Modal";
8
import Spinner from "@components/UI/Spinner";
9
import UsersList from "@components/UI/UsersList";
2899 stevensc 10
 
11
const ReactionTab = styled(Tab)(() => ({
3416 stevensc 12
  minWidth: "auto",
13
  minHeight: "auto",
14
  padding: "0.5rem 1rem",
15
}));
2899 stevensc 16
 
17
export default function ReactionsModal({
3416 stevensc 18
  reactionsUsersUrl = "",
2899 stevensc 19
  reactions = [],
20
  show = false,
3416 stevensc 21
  onClose,
2899 stevensc 22
}) {
3416 stevensc 23
  const { data: users, loading } = useFetch(show ? reactionsUsersUrl : "", []);
24
  const [reaction, setReaction] = useState("");
2899 stevensc 25
 
26
  const availableReactions = useMemo(
27
    () =>
28
      REACTIONS.filter(({ type }) =>
29
        reactions.some(({ reaction }) => type === reaction)
30
      ),
31
    [reactions]
3416 stevensc 32
  );
2899 stevensc 33
 
34
  const filteredUsers = useMemo(
35
    () => (reaction ? users.filter((u) => u.reaction === reaction) : users),
36
    [reaction, users]
3416 stevensc 37
  );
2899 stevensc 38
 
39
  return (
40
    <Modal
41
      show={show}
3416 stevensc 42
      title="Personas que reaccionaron"
2899 stevensc 43
      onClose={onClose}
44
      showFooter={false}
45
    >
46
      <Tabs
47
        value={reaction}
48
        onChange={(e, newValue) => setReaction(newValue)}
49
        sx={{
3416 stevensc 50
          width: "100%",
51
          minHeight: "auto",
52
          "& .MuiTabs-indicator": {
53
            backgroundColor: "var(--font-color)",
54
          },
2899 stevensc 55
        }}
56
      >
3416 stevensc 57
        <ReactionTab value="" label="Todas" disableRipple />
2899 stevensc 58
 
59
        {availableReactions.map(({ name, icon: Icon, type, color }) => (
60
          <ReactionTab
61
            key={type}
62
            value={type}
63
            label={name}
64
            icon={<Icon style={{ color }} />}
65
            disableRipple
66
          />
67
        ))}
68
      </Tabs>
69
 
3416 stevensc 70
      {loading ? <Spinner /> : <UsersList users={filteredUsers} />}
2899 stevensc 71
    </Modal>
3416 stevensc 72
  );
2899 stevensc 73
}