Skip to content
Snippets Groups Projects
animations.tsx 3.11 KiB
Newer Older
brunoravera's avatar
brunoravera committed
import React from 'react'
brunoravera's avatar
brunoravera committed

brunoravera's avatar
brunoravera committed
import {
  Table,
  TableCaption,
  TableContainer,
  Tbody,
  Td,
  Th,
  Text,
  Thead,
  Tooltip,
  Tr,
  HStack,
  IconButton,
  Icon,
brunoravera's avatar
brunoravera committed
  VStack,
  useDisclosure,
  Button,
brunoravera's avatar
brunoravera committed
} from '@chakra-ui/react'
import { FaPlay, FaTrash } from 'react-icons/fa'

brunoravera's avatar
brunoravera committed
import { Animation, Pattern } from 'src/models'
brunoravera's avatar
brunoravera committed
import { GetPatternQuery } from '../patterns/query-builder'
brunoravera's avatar
brunoravera committed
import { AddAnimationModal } from './add-animation'
brunoravera's avatar
brunoravera committed

brunoravera's avatar
brunoravera committed
const tableHeaders = ['Titulo', 'Descripcion', 'Fecha de creacion', '']

export type AnimationsProps = {
  patternId: Pattern['id']
}
export const Animations: React.FC<AnimationsProps> = ({ patternId }) => {
brunoravera's avatar
brunoravera committed
  const patternQuery = GetPatternQuery.useQuery({ id: patternId })
brunoravera's avatar
brunoravera committed
  const addAnimationDisclosure = useDisclosure()
brunoravera's avatar
brunoravera committed
  const animations = []
brunoravera's avatar
brunoravera committed
  const tableCaption =
    animations.length === 0
brunoravera's avatar
brunoravera committed
      ? `No hay animaciones disponibles de ${patternQuery.data?.name}`
      : `Animaciones disponibles de ${patternQuery.data?.name}`
brunoravera's avatar
brunoravera committed

  return (
brunoravera's avatar
brunoravera committed
    <VStack spacing="2">
      <TableContainer>
        <Table variant="simple" size="lg" minW="80vw">
          <TableCaption>{tableCaption}</TableCaption>
          <Thead>
            <Tr>
              {tableHeaders.map((header, index) => (
                <Th key={`th-${index}`}>{header}</Th>
              ))}
brunoravera's avatar
brunoravera committed
            </Tr>
brunoravera's avatar
brunoravera committed
          </Thead>
          <Tbody>
            {animations.map((animation, index) => (
              <Tr key={`animation-${animation.title}-${index}`}>
                <Td>{animation.title}</Td>
                <Td>
                  <Tooltip label={animation.description} hasArrow>
                    <Text isTruncated maxW="sm">
                      {animation.description}
                    </Text>
                  </Tooltip>
                </Td>
                <Td>{new Date(animation.creationDate).toUTCString()}</Td>
                <Td>
                  <ActionsRow _animation={animation} />
                </Td>
              </Tr>
            ))}
          </Tbody>
        </Table>
      </TableContainer>
      <HStack w="full" justifyContent="flex-end">
        {patternQuery.data && (
          <>
            <Button
              variant="solid"
              colorScheme="blue"
              onClick={addAnimationDisclosure.onOpen}
            >
              Crear Animacion
            </Button>
            {addAnimationDisclosure.isOpen && (
              <AddAnimationModal
                pattern={patternQuery.data}
                disclosure={addAnimationDisclosure}
              />
            )}
          </>
        )}
      </HStack>
    </VStack>
brunoravera's avatar
brunoravera committed
  )
}

type ActionsRowProps = {
  _animation: Animation
}
const ActionsRow: React.FC<ActionsRowProps> = ({ _animation }) => {
  return (
    <HStack>
brunoravera's avatar
brunoravera committed
      <Tooltip label={<Text>Ver</Text>}>
        <IconButton
          aria-label="view animation"
          variant="unstyled"
          icon={<Icon as={FaPlay} />}
        />
      </Tooltip>
      <Tooltip label={<Text>Eliminar animacion</Text>}>
        <IconButton
          aria-label="delete animation"
          variant="unstyled"
          icon={<Icon as={FaTrash} />}
        />
      </Tooltip>
brunoravera's avatar
brunoravera committed
    </HStack>
  )
}