import React, { useEffect, useState } from 'react'; import Popover from 'react-bootstrap/Popover'; import OverlayTrigger from 'react-bootstrap/OverlayTrigger'; import { ButtonSolid } from '@/_ui/AppButton/AppButton'; import SolidIcon from '@/_ui/Icon/SolidIcons'; import LeftNav from '../../Icons/LeftNav.svg'; import RightNav from '../../Icons/RightNav.svg'; import cx from 'classnames'; import './styles.scss'; export const CellEditMenu = ({ darkMode = false, children, show, close, columnDetails, saveFunction, setCellValue, cellValue, previousCellValue, setDefaultValue, defaultValue, setNullValue, nullValue, isBoolean, }) => { // below state is used only for boolean cell const [selectedValue, setSelectedValue] = useState(cellValue); const handleDefaultChange = (defaultColumnValue, defaultBooleanValue) => { if (defaultBooleanValue === true) { setCellValue(defaultColumnValue); } else { setCellValue(previousCellValue); } setDefaultValue(defaultBooleanValue); setNullValue(false); }; const handleNullChange = (nullVal) => { if (nullVal === true) { setCellValue(null); } else { if (previousCellValue === null) { setCellValue(''); } else { setCellValue(previousCellValue); } } setNullValue(nullVal); setDefaultValue(false); }; const handleSelectedState = (value) => { setSelectedValue(value); setCellValue(value); }; const closePopover = () => { setSelectedValue(previousCellValue); close(); }; const handleKeyDown = (e) => { if (e.key === 'ArrowRight' && isBoolean) { e.preventDefault(); if (selectedValue === false) handleSelectedState(true); if (selectedValue === true) handleSelectedState(null); } if (e.key === 'ArrowLeft' && isBoolean) { e.preventDefault(); if (selectedValue === null) handleSelectedState(true); if (selectedValue === true) handleSelectedState(false); } if (e.key === 'Escape') { closePopover(); } if (e.key === 'Enter' && cellValue != previousCellValue && show) { saveFunction(cellValue); } if (e.key === 'Backspace') { if (selectedValue === null) { if (isBoolean) { setSelectedValue(true); setCellValue(true); } else { setSelectedValue(''); setCellValue(''); } setNullValue(false); setDefaultValue(false); document.getElementById('edit-input-blur').focus(); } } e.stopPropagation(); }; useEffect(() => { if (show) { document.addEventListener('keydown', handleKeyDown); return () => { document.removeEventListener('keydown', handleKeyDown); }; } }, [show, isBoolean, selectedValue, cellValue]); useEffect(() => { if (selectedValue !== cellValue) setSelectedValue(cellValue); }, [cellValue]); const popover = ( {/* Boolean View */} {isBoolean && ( handleSelectedState(false)} > False handleSelectedState(true)} > True {columnDetails?.constraints_type.is_not_null === false && ( handleSelectedState(null)} > Null )} )} {!isBoolean && ( Save Changes Esc Discard Changes {columnDetails?.constraints_type.is_not_null === false && ( Set to null handleNullChange(!nullValue)} /> )} {columnDetails?.column_default !== null && ( Set to default handleDefaultChange(columnDetails?.column_default, !defaultValue)} /> )} )} {/* Footer */} {isBoolean ? ( Navigate ) : null} Cancel saveFunction(selectedValue)} disabled={cellValue == previousCellValue ? true : false} variant="primary" size="sm" className="fs-12" > Save ); return ( {children} ); };