import { dequal } from 'dequal'; import upperFirst from 'lodash/upperFirst'; import camelCase from 'lodash/camelCase'; import React, { useCallback, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { Button, Image } from 'semantic-ui-react'; import { FilePicker } from '../../lib/custom-ui'; import ProjectBackgroundGradients from '../../constants/ProjectBackgroundGradients'; import { ProjectBackgroundTypes } from '../../constants/Enums'; import styles from './BackgroundPane.module.scss'; import globalStyles from '../../styles.module.scss'; const BackgroundPane = React.memo( ({ item, imageCoverUrl, isImageUpdating, onUpdate, onImageUpdate, onImageDelete }) => { const [t] = useTranslation(); const field = useRef(null); const handleGradientClick = useCallback( (_, { value }) => { const background = { type: ProjectBackgroundTypes.GRADIENT, name: value, }; if (!dequal(background, item)) { onUpdate(background); } }, [item, onUpdate], ); const handleImageClick = useCallback(() => { const background = { type: ProjectBackgroundTypes.IMAGE, }; if (!dequal(background, item)) { onUpdate(background); } }, [item, onUpdate]); const handleFileSelect = useCallback( (file) => { onImageUpdate({ file, }); }, [onImageUpdate], ); const handleDeleteImageClick = useCallback(() => { onImageDelete(); }, [onImageDelete]); const handleRemoveClick = useCallback(() => { onUpdate(null); }, [onUpdate]); useEffect(() => { field.current.focus(); }, []); return ( <>