AppActions.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { Button } from '@chakra-ui/react';
  2. import React from 'react';
  3. import { FiExternalLink, FiPause, FiPlay, FiSettings, FiTrash2 } from 'react-icons/fi';
  4. import { TiCancel } from 'react-icons/ti';
  5. import { AppInfo, AppStatusEnum } from '../../../generated/graphql';
  6. interface IProps {
  7. app: AppInfo;
  8. status?: AppStatusEnum;
  9. onInstall: () => void;
  10. onUninstall: () => void;
  11. onStart: () => void;
  12. onStop: () => void;
  13. onOpen: () => void;
  14. onUpdate: () => void;
  15. onCancel: () => void;
  16. }
  17. const AppActions: React.FC<IProps> = ({ app, status, onInstall, onUninstall, onStart, onStop, onOpen, onUpdate, onCancel }) => {
  18. const hasSettings = Object.keys(app.form_fields).length > 0;
  19. if (status === AppStatusEnum.Stopped) {
  20. return (
  21. <div className="flex flex-wrap justify-center">
  22. <Button onClick={onStart} width={150} colorScheme="green" className="mt-3 mr-2">
  23. Start
  24. <FiPlay className="ml-1" />
  25. </Button>
  26. <Button onClick={onUninstall} width={150} colorScheme="gray" className="mt-3 mr-2">
  27. Remove
  28. <FiTrash2 className="ml-1" />
  29. </Button>
  30. {hasSettings && (
  31. <Button onClick={onUpdate} width={150} colorScheme="gray" className="mt-3 mr-2">
  32. Settings
  33. <FiSettings className="ml-1" />
  34. </Button>
  35. )}
  36. </div>
  37. );
  38. } else if (status === AppStatusEnum.Running) {
  39. return (
  40. <div>
  41. <Button onClick={onOpen} width={150} colorScheme="gray" className="mt-3 mr-2">
  42. Open
  43. <FiExternalLink className="ml-1" />
  44. </Button>
  45. <Button onClick={onStop} width={150} colorScheme="red" className="mt-3">
  46. Stop
  47. <FiPause className="ml-2" />
  48. </Button>
  49. </div>
  50. );
  51. } else if (status === AppStatusEnum.Installing || status === AppStatusEnum.Uninstalling || status === AppStatusEnum.Starting || status === AppStatusEnum.Stopping) {
  52. return (
  53. <div className="flex items-center sm:items-start flex-col md:flex-row">
  54. <Button isLoading onClick={() => null} width={160} colorScheme="green" className="mt-3">
  55. Install
  56. <FiPlay className="ml-1" />
  57. </Button>
  58. <Button onClick={onCancel} colorScheme="gray" className="mt-3 mr-2 ml-2">
  59. <TiCancel />
  60. </Button>
  61. <span className="text-gray-500 text-sm ml-2 mt-3 self-center text-center sm:text-left">{`App is ${status.toLowerCase()} please wait and don't refresh page...`}</span>
  62. </div>
  63. );
  64. } else if (status === AppStatusEnum.Missing) {
  65. return (
  66. <Button onClick={onInstall} width={160} colorScheme="green" className="mt-3">
  67. Install
  68. </Button>
  69. );
  70. }
  71. return null;
  72. };
  73. export default AppActions;