index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React, { useState, useEffect } from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. Table,
  5. TableHead,
  6. TableBody,
  7. TableCell,
  8. TableRow,
  9. IconButton
  10. } from '@material-ui/core';
  11. import {
  12. Edit as EditIcon,
  13. DeleteOutline as DeleteOutlineIcon
  14. } from "@material-ui/icons";
  15. import TableRowSkeleton from "../../components/TableRowSkeleton";
  16. function QuickMessagesTable(props) {
  17. const { messages, showLoading, editMessage, deleteMessage, readOnly } = props
  18. const [loading, setLoading] = useState(true)
  19. const [rows, setRows] = useState([])
  20. useEffect(() => {
  21. if (Array.isArray(messages)) {
  22. setRows(messages)
  23. }
  24. if (showLoading !== undefined) {
  25. setLoading(showLoading)
  26. }
  27. }, [messages, showLoading])
  28. const handleEdit = (message) => {
  29. editMessage(message)
  30. }
  31. const handleDelete = (message) => {
  32. deleteMessage(message)
  33. }
  34. const renderRows = () => {
  35. return rows.map((message) => {
  36. return (
  37. <TableRow key={message.id}>
  38. <TableCell align="center">{message.shortcode}</TableCell>
  39. <TableCell align="left">{message.message}</TableCell>
  40. { !readOnly ? (
  41. <TableCell align="center">
  42. <IconButton
  43. size="small"
  44. onClick={() => handleEdit(message)}
  45. >
  46. <EditIcon />
  47. </IconButton>
  48. <IconButton
  49. size="small"
  50. onClick={() => handleDelete(message)}
  51. >
  52. <DeleteOutlineIcon />
  53. </IconButton>
  54. </TableCell>
  55. ) : null}
  56. </TableRow>
  57. )
  58. })
  59. }
  60. return (
  61. <Table size="small">
  62. <TableHead>
  63. <TableRow>
  64. <TableCell align="center">Atalho</TableCell>
  65. <TableCell align="left">Mensagem</TableCell>
  66. { !readOnly ? (
  67. <TableCell align="center">Ações</TableCell>
  68. ) : null}
  69. </TableRow>
  70. </TableHead>
  71. <TableBody>
  72. {loading ? <TableRowSkeleton columns={readOnly ? 2 : 3} /> : renderRows()}
  73. </TableBody>
  74. </Table>
  75. )
  76. }
  77. QuickMessagesTable.propTypes = {
  78. messages: PropTypes.array.isRequired,
  79. showLoading: PropTypes.bool,
  80. editMessage: PropTypes.func.isRequired,
  81. deleteMessage: PropTypes.func.isRequired
  82. }
  83. export default QuickMessagesTable;