index.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. title='convert unit'
  38. ></Button>
  39. <Dialog
  40. onClose={(action) => {
  41. if (action === 'confirm') {
  42. onConvert(result)
  43. }
  44. setOpen(false)
  45. }}
  46. open={isOpen}
  47. >
  48. <DialogContent className='cbk-convert__dialog'>
  49. <p>Converting <b>{measure.quantity + ' ' + measure.unit}</b> to:</p>
  50. <div className='cbk-convert__dialog__content'>
  51. <select value={result.unit} onChange={(e) => {
  52. convert(measure.quantity, measure.unit, e.target.value);
  53. }}>
  54. {
  55. values.map(option => (
  56. <option key={option} value={option}>{option}</option>
  57. ))
  58. }
  59. </select>
  60. {`${result.quantity} ${result.unit}`}
  61. </div>
  62. </DialogContent>
  63. <DialogFooter>
  64. <DialogButton action='dismiss' type='button'>cancel</DialogButton>
  65. <DialogButton action='confirm' type='button'>ok</DialogButton>
  66. </DialogFooter>
  67. </Dialog>
  68. </>
  69. )
  70. }
  71. export default CBKDialog;