AppTable.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { connect } from 'react-redux';
  2. import { App, GlobalState } from '../../../interfaces';
  3. import { pinApp, deleteApp } from '../../../store/actions';
  4. import classes from './AppTable.module.css';
  5. import Icon from '../../UI/Icon/Icon';
  6. interface ComponentProps {
  7. apps: App[];
  8. pinApp: (id: number, isPinned: boolean) => void;
  9. deleteApp: (id: number) => void;
  10. }
  11. const AppTable = (props: ComponentProps): JSX.Element => {
  12. const deleteAppHandler = (app: App): void => {
  13. const proceed = window.confirm(`Are you sure you want to delete ${app.name} at ${app.url} ?`);
  14. if (proceed) {
  15. props.deleteApp(app.id);
  16. }
  17. }
  18. return (
  19. <div className={classes.TableContainer}>
  20. <table className={classes.Table}>
  21. <thead className={classes.TableHead}>
  22. <tr>
  23. <th>Name</th>
  24. <th>Url</th>
  25. <th>Icon</th>
  26. <th>Actions</th>
  27. </tr>
  28. </thead>
  29. <tbody className={classes.TableBody}>
  30. {props.apps.map((app: App): JSX.Element => {
  31. return (
  32. <tr key={app.id}>
  33. <td>{app.name}</td>
  34. <td>{app.url}</td>
  35. <td>{app.icon}</td>
  36. <td className={classes.TableActions}>
  37. <div
  38. className={classes.TableAction}
  39. onClick={() => deleteAppHandler(app)}>
  40. <Icon icon='mdiDelete' />
  41. </div>
  42. <div className={classes.TableAction}><Icon icon='mdiPencil' /></div>
  43. <div className={classes.TableAction} onClick={() => props.pinApp(app.id, app.isPinned)}>
  44. {app.isPinned? <Icon icon='mdiPinOff' color='var(--color-accent)' /> : <Icon icon='mdiPin' />}
  45. </div>
  46. </td>
  47. </tr>
  48. )
  49. })}
  50. </tbody>
  51. </table>
  52. </div>
  53. )
  54. }
  55. const mapStateToProps = (state: GlobalState) => {
  56. return {
  57. apps: state.app.apps
  58. }
  59. }
  60. export default connect(mapStateToProps, { pinApp, deleteApp })(AppTable);