AppActions.tsx 2.4 KB

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