Delete Opportunities column + Improving design of BoardColumnEditTitleMenu (#1737)
* Delete Opportunities column + Improving design of BoardColumnEditTitleMenu Co-authored-by: v1b3m <vibenjamin6@gmail.com> * Remove unwanted changes Co-authored-by: v1b3m <vibenjamin6@gmail.com> --------- Co-authored-by: v1b3m <vibenjamin6@gmail.com>
This commit is contained in:
@ -1,13 +1,18 @@
|
|||||||
import { ChangeEvent, useState } from 'react';
|
import { ChangeEvent, useCallback, useState } from 'react';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
|
import { useRecoilState } from 'recoil';
|
||||||
|
|
||||||
import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer';
|
import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer';
|
||||||
import { StyledDropdownMenuSeparator } from '@/ui/dropdown/components/StyledDropdownMenuSeparator';
|
import { StyledDropdownMenuSeparator } from '@/ui/dropdown/components/StyledDropdownMenuSeparator';
|
||||||
|
import { IconTrash } from '@/ui/icon';
|
||||||
|
import { MenuItem } from '@/ui/menu-item/components/MenuItem';
|
||||||
import { MenuItemSelectColor } from '@/ui/menu-item/components/MenuItemSelectColor';
|
import { MenuItemSelectColor } from '@/ui/menu-item/components/MenuItemSelectColor';
|
||||||
import { ThemeColor } from '@/ui/theme/constants/colors';
|
import { ThemeColor } from '@/ui/theme/constants/colors';
|
||||||
import { textInputStyle } from '@/ui/theme/constants/effects';
|
import { textInputStyle } from '@/ui/theme/constants/effects';
|
||||||
import { debounce } from '~/utils/debounce';
|
import { debounce } from '~/utils/debounce';
|
||||||
|
|
||||||
|
import { boardColumnsState } from '../states/boardColumnsState';
|
||||||
|
|
||||||
const StyledEditTitleContainer = styled.div`
|
const StyledEditTitleContainer = styled.div`
|
||||||
--vertical-padding: ${({ theme }) => theme.spacing(1)};
|
--vertical-padding: ${({ theme }) => theme.spacing(1)};
|
||||||
|
|
||||||
@ -22,18 +27,26 @@ const StyledEditTitleContainer = styled.div`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const StyledEditModeInput = styled.input`
|
const StyledEditModeInput = styled.input`
|
||||||
font-size: ${({ theme }) => theme.font.size.sm};
|
|
||||||
|
|
||||||
${textInputStyle}
|
${textInputStyle}
|
||||||
|
|
||||||
|
background: ${({ theme }) => theme.background.transparent.lighter};
|
||||||
|
border-color: ${({ theme }) => theme.color.blue};
|
||||||
|
border-radius: ${({ theme }) => theme.border.radius.sm};
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
box-shadow: 0px 0px 0px 3px rgba(25, 97, 237, 0.1);
|
||||||
|
font-size: ${({ theme }) => theme.font.size.sm};
|
||||||
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export type BoardColumnEditTitleMenuProps = {
|
export type BoardColumnEditTitleMenuProps = {
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
|
onDelete?: (id: string) => void;
|
||||||
title: string;
|
title: string;
|
||||||
onTitleEdit: (title: string, color: string) => void;
|
onTitleEdit: (title: string, color: string) => void;
|
||||||
color: ThemeColor;
|
color: ThemeColor;
|
||||||
|
stageId: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
type ColumnColorOption = {
|
type ColumnColorOption = {
|
||||||
@ -56,6 +69,8 @@ export const COLUMN_COLOR_OPTIONS: ColumnColorOption[] = [
|
|||||||
|
|
||||||
export const BoardColumnEditTitleMenu = ({
|
export const BoardColumnEditTitleMenu = ({
|
||||||
onClose,
|
onClose,
|
||||||
|
onDelete,
|
||||||
|
stageId,
|
||||||
onTitleEdit,
|
onTitleEdit,
|
||||||
title,
|
title,
|
||||||
color,
|
color,
|
||||||
@ -69,6 +84,16 @@ export const BoardColumnEditTitleMenu = ({
|
|||||||
setInternalValue(event.target.value);
|
setInternalValue(event.target.value);
|
||||||
debouncedOnUpdateTitle(event.target.value);
|
debouncedOnUpdateTitle(event.target.value);
|
||||||
};
|
};
|
||||||
|
const [, setBoardColumns] = useRecoilState(boardColumnsState);
|
||||||
|
|
||||||
|
const handleDelete = useCallback(() => {
|
||||||
|
setBoardColumns((previousBoardColumns) =>
|
||||||
|
previousBoardColumns.filter((column) => column.id !== stageId),
|
||||||
|
);
|
||||||
|
onDelete?.(stageId);
|
||||||
|
onClose();
|
||||||
|
}, [onClose, onDelete, setBoardColumns, stageId]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledDropdownMenuItemsContainer>
|
<StyledDropdownMenuItemsContainer>
|
||||||
<StyledEditTitleContainer>
|
<StyledEditTitleContainer>
|
||||||
@ -92,6 +117,13 @@ export const BoardColumnEditTitleMenu = ({
|
|||||||
text={colorOption.name}
|
text={colorOption.name}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
<StyledDropdownMenuSeparator />
|
||||||
|
<MenuItem
|
||||||
|
onClick={handleDelete}
|
||||||
|
LeftIcon={IconTrash}
|
||||||
|
text="Delete"
|
||||||
|
accent="danger"
|
||||||
|
/>
|
||||||
</StyledDropdownMenuItemsContainer>
|
</StyledDropdownMenuItemsContainer>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,19 +1,12 @@
|
|||||||
import { useCallback, useContext, useRef, useState } from 'react';
|
import { useCallback, useContext, useRef, useState } from 'react';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
import { useRecoilState } from 'recoil';
|
|
||||||
import { Key } from 'ts-key-enum';
|
import { Key } from 'ts-key-enum';
|
||||||
|
|
||||||
import { useCreateCompanyProgress } from '@/companies/hooks/useCreateCompanyProgress';
|
import { useCreateCompanyProgress } from '@/companies/hooks/useCreateCompanyProgress';
|
||||||
import { useFilteredSearchCompanyQuery } from '@/companies/hooks/useFilteredSearchCompanyQuery';
|
import { useFilteredSearchCompanyQuery } from '@/companies/hooks/useFilteredSearchCompanyQuery';
|
||||||
import { StyledDropdownMenu } from '@/ui/dropdown/components/StyledDropdownMenu';
|
import { StyledDropdownMenu } from '@/ui/dropdown/components/StyledDropdownMenu';
|
||||||
import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer';
|
import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer';
|
||||||
import {
|
import { IconArrowLeft, IconArrowRight, IconPencil, IconPlus } from '@/ui/icon';
|
||||||
IconArrowLeft,
|
|
||||||
IconArrowRight,
|
|
||||||
IconPencil,
|
|
||||||
IconPlus,
|
|
||||||
IconTrash,
|
|
||||||
} from '@/ui/icon';
|
|
||||||
import { SingleEntitySelect } from '@/ui/input/relation-picker/components/SingleEntitySelect';
|
import { SingleEntitySelect } from '@/ui/input/relation-picker/components/SingleEntitySelect';
|
||||||
import { relationPickerSearchFilterScopedState } from '@/ui/input/relation-picker/states/relationPickerSearchFilterScopedState';
|
import { relationPickerSearchFilterScopedState } from '@/ui/input/relation-picker/states/relationPickerSearchFilterScopedState';
|
||||||
import { EntityForSelect } from '@/ui/input/relation-picker/types/EntityForSelect';
|
import { EntityForSelect } from '@/ui/input/relation-picker/types/EntityForSelect';
|
||||||
@ -27,12 +20,13 @@ import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoi
|
|||||||
|
|
||||||
import { BoardColumnContext } from '../contexts/BoardColumnContext';
|
import { BoardColumnContext } from '../contexts/BoardColumnContext';
|
||||||
import { useBoardColumns } from '../hooks/useBoardColumns';
|
import { useBoardColumns } from '../hooks/useBoardColumns';
|
||||||
import { boardColumnsState } from '../states/boardColumnsState';
|
|
||||||
import { BoardColumnHotkeyScope } from '../types/BoardColumnHotkeyScope';
|
import { BoardColumnHotkeyScope } from '../types/BoardColumnHotkeyScope';
|
||||||
|
|
||||||
import { BoardColumnEditTitleMenu } from './BoardColumnEditTitleMenu';
|
import { BoardColumnEditTitleMenu } from './BoardColumnEditTitleMenu';
|
||||||
const StyledMenuContainer = styled.div`
|
const StyledMenuContainer = styled.div`
|
||||||
|
left: 26.5px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
top: ${({ theme }) => theme.spacing(10)};
|
||||||
width: 200px;
|
width: 200px;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
`;
|
`;
|
||||||
@ -55,8 +49,6 @@ export const BoardColumnMenu = ({
|
|||||||
const [currentMenu, setCurrentMenu] = useState('actions');
|
const [currentMenu, setCurrentMenu] = useState('actions');
|
||||||
const column = useContext(BoardColumnContext);
|
const column = useContext(BoardColumnContext);
|
||||||
|
|
||||||
const [, setBoardColumns] = useRecoilState(boardColumnsState);
|
|
||||||
|
|
||||||
const boardColumnMenuRef = useRef(null);
|
const boardColumnMenuRef = useRef(null);
|
||||||
|
|
||||||
const { enqueueSnackBar } = useSnackBar();
|
const { enqueueSnackBar } = useSnackBar();
|
||||||
@ -94,14 +86,6 @@ export const BoardColumnMenu = ({
|
|||||||
onClose();
|
onClose();
|
||||||
}, [goBackToPreviousHotkeyScope, onClose]);
|
}, [goBackToPreviousHotkeyScope, onClose]);
|
||||||
|
|
||||||
const handleDelete = useCallback(() => {
|
|
||||||
setBoardColumns((previousBoardColumns) =>
|
|
||||||
previousBoardColumns.filter((column) => column.id !== stageId),
|
|
||||||
);
|
|
||||||
onDelete?.(stageId);
|
|
||||||
closeMenu();
|
|
||||||
}, [closeMenu, onDelete, setBoardColumns, stageId]);
|
|
||||||
|
|
||||||
const setMenu = (menu: Menu) => {
|
const setMenu = (menu: Menu) => {
|
||||||
if (menu === 'add') {
|
if (menu === 'add') {
|
||||||
setHotkeyScopeAndMemorizePreviousScope(
|
setHotkeyScopeAndMemorizePreviousScope(
|
||||||
@ -157,7 +141,7 @@ export const BoardColumnMenu = ({
|
|||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={() => setMenu('title')}
|
onClick={() => setMenu('title')}
|
||||||
LeftIcon={IconPencil}
|
LeftIcon={IconPencil}
|
||||||
text="Rename"
|
text="Edit"
|
||||||
/>
|
/>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
LeftIcon={IconArrowLeft}
|
LeftIcon={IconArrowLeft}
|
||||||
@ -169,11 +153,6 @@ export const BoardColumnMenu = ({
|
|||||||
onClick={handleColumnMoveRight}
|
onClick={handleColumnMoveRight}
|
||||||
text="Move right"
|
text="Move right"
|
||||||
/>
|
/>
|
||||||
<MenuItem
|
|
||||||
onClick={handleDelete}
|
|
||||||
LeftIcon={IconTrash}
|
|
||||||
text="Delete"
|
|
||||||
/>
|
|
||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={() => setMenu('add')}
|
onClick={() => setMenu('add')}
|
||||||
LeftIcon={IconPlus}
|
LeftIcon={IconPlus}
|
||||||
@ -187,6 +166,8 @@ export const BoardColumnMenu = ({
|
|||||||
onClose={closeMenu}
|
onClose={closeMenu}
|
||||||
onTitleEdit={onTitleEdit}
|
onTitleEdit={onTitleEdit}
|
||||||
title={columnDefinition.title}
|
title={columnDefinition.title}
|
||||||
|
onDelete={onDelete}
|
||||||
|
stageId={stageId}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{currentMenu === 'add' && (
|
{currentMenu === 'add' && (
|
||||||
|
|||||||
Reference in New Issue
Block a user