index.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React, { useState } from 'react';
  2. import Dialog, {
  3. DialogContent,
  4. DialogFooter,
  5. DialogButton
  6. } from '@material/react-dialog';
  7. import { GetMeasure, Convert, Measure } from 'services/measurements';
  8. import Button from 'components/Button';
  9. import '@material/react-dialog/dist/dialog.min.css';
  10. import './styles.scss';
  11. type Data = {
  12. unit: string,
  13. quantity: number
  14. }
  15. interface DialogProps {
  16. measure: Data,
  17. onConvert: (result: Data) => void
  18. }
  19. const CBKDialog = ({measure, onConvert}: DialogProps) => {
  20. const { name, values } = GetMeasure(measure.unit);
  21. const [ isOpen, setOpen ] = useState(false);
  22. const [ result, setResult ] = useState({
  23. unit: measure.unit,
  24. quantity: measure.quantity
  25. })
  26. const convert = (qty: number, from: string, to: string) => {
  27. setResult({unit: to, quantity: Convert(qty, from, to, name as Measure)})
  28. }
  29. return (
  30. <>
  31. <Button
  32. icon='compare_arrows'
  33. type='button'
  34. onClick={() => setOpen(true)}
  35. disabled={measure.unit === ''}
  36. className='cbk-convert__button'
  37. ></Button>
  38. <Dialog
  39. onClose={(action) => {
  40. if (action === 'confirm') {
  41. onConvert(result)
  42. }
  43. setOpen(false)
  44. }}
  45. open={isOpen}
  46. >
  47. <DialogContent className='cbk-convert__dialog'>
  48. <p>Converting <b>{measure.quantity + ' ' + measure.unit}</b> to:</p>
  49. <div className='cbk-convert__dialog__content'>
  50. <select value={result.unit} onChange={(e) => {
  51. convert(measure.quantity, measure.unit, e.target.value);
  52. }}>
  53. {
  54. values.map(option => (
  55. <option key={option} value={option}>{option}</option>
  56. ))
  57. }
  58. </select>
  59. {`${result.quantity} ${result.unit}`}
  60. </div>
  61. </DialogContent>
  62. <DialogFooter>
  63. <DialogButton action='dismiss' type='button'>cancel</DialogButton>
  64. <DialogButton action='confirm' type='button'>ok</DialogButton>
  65. </DialogFooter>
  66. </Dialog>
  67. </>
  68. )
  69. }
  70. export default CBKDialog;