All files / app categoryAdder.tsx

94.73% Statements 18/19
91.66% Branches 11/12
85.71% Functions 6/7
94.44% Lines 17/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74              1304x 1304x 1304x 1304x 1304x 1304x 1304x 10x 10x 10x 10x 10x     1304x                                                                     35x 10x     25x                 5x        
import {Add, Close} from '@mui/icons-material'
import {Button, Dialog, DialogContent, DialogTitle, IconButton, Stack, TextField, Tooltip} from '@mui/material'
import {type KeyboardEvent, useContext, useState} from 'react'
import {AllCategories, CategoryEditContext} from './building'
import {CategoryEditor} from './categoryEditor'
 
export function CategoryAdder() {
  const [menuOpen, setMenuOpen] = useState(false)
  const toggleMenu = () => setMenuOpen(!menuOpen)
  const categories = useContext(AllCategories)
  const editCategories = useContext(CategoryEditContext)
  const [name, setName] = useState('')
  const [editingCategory, setEditingCategory] = useState('')
  const add = () => {
    Eif (name && -1 === categories.indexOf(name)) {
      editCategories({type: 'add', cat: name})
      setEditingCategory(name)
      setName('')
      setMenuOpen(false)
    }
  }
  return (
    <>
      <Tooltip title="add category">
        <IconButton
          size="small"
          aria-label="add category"
          sx={{position: 'absolute', right: '-42px', top: '-4px', zIndex: 1}}
          onClick={toggleMenu}
        >
          <Add />
        </IconButton>
      </Tooltip>
      {menuOpen && (
        <Dialog open={menuOpen} onClose={() => setMenuOpen(false)}>
          <DialogTitle>Add Category</DialogTitle>
          <IconButton
            aria-label="close category adder"
            onClick={toggleMenu}
            sx={{
              position: 'absolute',
              right: 8,
              top: 12,
            }}
            className="close-button"
          >
            <Close />
          </IconButton>
          <DialogContent>
            <Stack direction="row">
              <TextField
                label="New Category Name"
                size="small"
                id="category_adder_input"
                value={name}
                onKeyDown={(e: KeyboardEvent) => {
                  if (e.code === 'Enter' || e.code === 'NumpadEnter') {
                    add()
                  }
                }}
                onChange={e => setName(e.target.value)}
              ></TextField>
              <Button variant="contained" onClick={add}>
                Add
              </Button>
            </Stack>
          </DialogContent>
        </Dialog>
      )}
      {editingCategory && <CategoryEditor category={editingCategory} onClose={() => setEditingCategory('')} />}
    </>
  )
}