RocketChat/Rocket.Chat

View on GitHub
packages/uikit-playground/src/Components/ScreenThumbnail/EditableLabel/EditableLabel.tsx

Summary

Maintainability
A
1 hr
Test Coverage
import './Editablelabel.scss';
import { Box, Icon, Input } from '@rocket.chat/fuselage';
import { MouseEventHandler } from 'react';
import { ComponentProps, useRef, useState } from 'react';

const EditableLabel = (props: ComponentProps<typeof Input>) => {
  const [hover, setHover] = useState<boolean>(false);
  const inputRef = useRef<HTMLInputElement>(null);

  const iconClickHandler: MouseEventHandler<HTMLElement> = (e) => {
    e.stopPropagation();
    inputRef.current?.focus();
    inputRef.current?.select();
  };

  return (
    <Box
      position="relative"
      className="rc-editableLabel"
      w="100%"
      h="max-content"
      display="flex"
      alignItems="center"
      onMouseEnter={() => setHover(true)}
      onMouseLeave={() => setHover(false)}
    >
      <Input ref={inputRef} {...props} />
      <Icon
        invisible={!hover}
        className={'editableLabel-icon'}
        name="pencil"
        onClick={iconClickHandler}
      />
    </Box>
  );
};

export default EditableLabel;