From 48b880c2084f5e55ebc0b69f2d3874f54f715a33 Mon Sep 17 00:00:00 2001 From: Nitin Koche Date: Mon, 2 Sep 2024 00:41:38 +0530 Subject: [PATCH 1/2] add button for kanban view --- .../components/RecordIndexPageHeader.tsx | 19 ++- .../RecordIndexPageKanbanAddButton.tsx | 96 ++++++++++++++ .../RecordIndexPageKanbanAddMenuItem.tsx | 55 ++++++++ .../useRecordIndexPageKanbanAddButton.ts | 117 ++++++++++++++++++ .../useRecordIndexPageKanbanAddMenuItem.ts | 12 ++ .../pages/object-record/RecordIndexPage.tsx | 6 +- 6 files changed, 299 insertions(+), 6 deletions(-) create mode 100644 packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx create mode 100644 packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx create mode 100644 packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts create mode 100644 packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddMenuItem.ts diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx index 5039ec7a3447..b2296a6f3b0f 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx @@ -1,8 +1,8 @@ -import { useParams } from 'react-router-dom'; import { useRecoilValue } from 'recoil'; import { useIcons } from 'twenty-ui'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; +import { RecordIndexPageKanbanAddButton } from '@/object-record/record-index/components/RecordIndexPageKanbanAddButton'; import { recordIndexViewTypeState } from '@/object-record/record-index/states/recordIndexViewTypeState'; import { PageAddButton } from '@/ui/layout/page/PageAddButton'; import { PageHeader } from '@/ui/layout/page/PageHeader'; @@ -12,13 +12,15 @@ import { capitalize } from '~/utils/string/capitalize'; type RecordIndexPageHeaderProps = { createRecord: () => void; + recordIndexId: string; + objectNamePlural: string; }; export const RecordIndexPageHeader = ({ createRecord, + recordIndexId, + objectNamePlural, }: RecordIndexPageHeaderProps) => { - const objectNamePlural = useParams().objectNamePlural ?? ''; - const { findObjectMetadataItemByNamePlural } = useFilteredObjectMetadataItems(); @@ -32,7 +34,7 @@ export const RecordIndexPageHeader = ({ const recordIndexViewType = useRecoilValue(recordIndexViewTypeState); - const canAddRecord = + const isTable = recordIndexViewType === ViewType.Table && !objectMetadataItem?.isRemote; const pageHeaderTitle = @@ -41,7 +43,14 @@ export const RecordIndexPageHeader = ({ return ( - {canAddRecord && } + {isTable ? ( + + ) : ( + + )} ); }; diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx new file mode 100644 index 000000000000..cfa3f371168d --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx @@ -0,0 +1,96 @@ +import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; +import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu'; +import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; +import styled from '@emotion/styled'; +import { useState } from 'react'; + +import { SingleEntitySelect } from '@/object-record/relation-picker/components/SingleEntitySelect'; + +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { RecordIndexPageKanbanAddMenuItem } from '@/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem'; +import { useRecordIndexPageKanbanAddButton } from '@/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton'; +import { IconButton } from '@/ui/input/button/components/IconButton'; +import { IconPlus } from 'twenty-ui'; + +const StyledDropdownMenuItemsContainer = styled(DropdownMenuItemsContainer)` + width: 100%; +`; + +type RecordIndexPageKanbanAddButtonProps = { + recordIndexId: string; + objectNamePlural: string; +}; + +export const RecordIndexPageKanbanAddButton = ({ + recordIndexId, + objectNamePlural, +}: RecordIndexPageKanbanAddButtonProps) => { + const [isSelectingCompany, setIsSelectingCompany] = useState(false); + + const { + dropdownId, + columnIds, + selectFieldMetadataItem, + isOpportunity, + handleOpportunityClick, + handleNonOpportunityClick, + handleEntitySelect, + handleCancel, + } = useRecordIndexPageKanbanAddButton({ + recordIndexId, + objectNamePlural, + setIsSelectingCompany, + }); + + if (!selectFieldMetadataItem) { + return null; + } + + return ( + + } + dropdownId={dropdownId} + dropdownComponents={ + + {isOpportunity && isSelectingCompany ? ( + + ) : ( + + {columnIds.map((columnId) => ( + + ))} + + )} + + } + dropdownHotkeyScope={{ scope: dropdownId }} + /> + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx new file mode 100644 index 000000000000..a99b3abfd862 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx @@ -0,0 +1,55 @@ +import { RecordBoardColumnDefinitionType } from '@/object-record/record-board/types/RecordBoardColumnDefinition'; +import { useRecordIndexPageKanbanAddMenuItem } from '@/object-record/record-index/hooks/useRecordIndexPageKanbanAddMenuItem'; +import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem'; +import styled from '@emotion/styled'; +import { Tag } from 'twenty-ui'; + +const StyledMenuItem = styled(MenuItem)` + width: 200px; +`; + +type RecordIndexPageKanbanAddMenuItemProps = { + columnId: string; + recordIndexId: string; + onItemClick: (columnDefinition: any) => void; +}; + +export const RecordIndexPageKanbanAddMenuItem = ({ + columnId, + recordIndexId, + onItemClick, +}: RecordIndexPageKanbanAddMenuItemProps) => { + const { columnDefinition } = useRecordIndexPageKanbanAddMenuItem( + recordIndexId, + columnId, + ); + if (!columnDefinition) { + return null; + } + + return ( + + } + onClick={() => onItemClick(columnDefinition)} + /> + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts new file mode 100644 index 000000000000..49a06dca4d3b --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts @@ -0,0 +1,117 @@ +import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; +import { useRecordBoardStates } from '@/object-record/record-board/hooks/internal/useRecordBoardStates'; +import { RecordBoardColumnDefinition } from '@/object-record/record-board/types/RecordBoardColumnDefinition'; +import { recordIndexKanbanFieldMetadataIdState } from '@/object-record/record-index/states/recordIndexKanbanFieldMetadataIdState'; +import { useEntitySelectSearch } from '@/object-record/relation-picker/hooks/useEntitySelectSearch'; +import { EntityForSelect } from '@/object-record/relation-picker/types/EntityForSelect'; +import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; +import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; +import { useCallback, useState } from 'react'; +import { useRecoilValue } from 'recoil'; + +type useRecordIndexPageKanbanAddButtonProps = { + recordIndexId: string; + objectNamePlural: string; + setIsSelectingCompany: React.Dispatch>; +}; + +export const useRecordIndexPageKanbanAddButton = ({ + recordIndexId, + objectNamePlural, + setIsSelectingCompany, +}: useRecordIndexPageKanbanAddButtonProps) => { + const dropdownId = `record-index-page-add-button-dropdown`; + const { objectNameSingular } = useObjectNameSingularFromPlural({ + objectNamePlural, + }); + const [selectedColumnDefinition, setSelectedColumnDefinition] = + useState(); + const { objectMetadataItem } = useObjectMetadataItem({ objectNameSingular }); + const { columnIdsState } = useRecordBoardStates(recordIndexId); + const columnIds = useRecoilValue(columnIdsState); + const recordIndexKanbanFieldMetadataId = useRecoilValue( + recordIndexKanbanFieldMetadataIdState, + ); + const { createOneRecord } = useCreateOneRecord({ objectNameSingular }); + const { + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, + } = usePreviousHotkeyScope(); + + const selectFieldMetadataItem = objectMetadataItem.fields.find( + (field) => field.id === recordIndexKanbanFieldMetadataId, + ); + const isOpportunity = + objectMetadataItem.nameSingular === CoreObjectNameSingular.Opportunity; + + const handleOpportunityClick = useCallback( + (columnDefinition: RecordBoardColumnDefinition) => { + setIsSelectingCompany(true); + setSelectedColumnDefinition(columnDefinition); + setHotkeyScopeAndMemorizePreviousScope( + RelationPickerHotkeyScope.RelationPicker, + ); + }, + [ + setIsSelectingCompany, + setSelectedColumnDefinition, + setHotkeyScopeAndMemorizePreviousScope, + ], + ); + const handleNonOpportunityClick = useCallback( + (columnDefinition: RecordBoardColumnDefinition) => { + if (selectFieldMetadataItem !== undefined) + createOneRecord({ + [selectFieldMetadataItem.name]: columnDefinition?.value, + position: 'first', + }); + }, + [createOneRecord, selectFieldMetadataItem], + ); + const { resetSearchFilter } = useEntitySelectSearch({ + relationPickerScopeId: 'relation-picker', + }); + + const handleEntitySelect = useCallback( + (company?: EntityForSelect) => { + setIsSelectingCompany(false); + goBackToPreviousHotkeyScope(); + resetSearchFilter(); + if (company !== undefined && selectFieldMetadataItem !== undefined) { + createOneRecord({ + name: company.name, + companyId: company.id, + position: 'first', + [selectFieldMetadataItem.name]: selectedColumnDefinition?.value, + }); + } + }, + [ + createOneRecord, + goBackToPreviousHotkeyScope, + selectFieldMetadataItem, + selectedColumnDefinition, + setIsSelectingCompany, + resetSearchFilter, + ], + ); + const handleCancel = useCallback(() => { + resetSearchFilter(); + goBackToPreviousHotkeyScope(); + setIsSelectingCompany(false); + }, [goBackToPreviousHotkeyScope, resetSearchFilter, setIsSelectingCompany]); + + return { + dropdownId, + columnIds, + selectFieldMetadataItem, + isOpportunity, + handleOpportunityClick, + handleNonOpportunityClick, + handleEntitySelect, + handleCancel, + }; +}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddMenuItem.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddMenuItem.ts new file mode 100644 index 000000000000..8e5604cb0fe8 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddMenuItem.ts @@ -0,0 +1,12 @@ +import { useRecordBoardStates } from '@/object-record/record-board/hooks/internal/useRecordBoardStates'; +import { useRecoilValue } from 'recoil'; + +export const useRecordIndexPageKanbanAddMenuItem = ( + recordIndexId: string, + columnId: string, +) => { + const { columnsFamilySelector } = useRecordBoardStates(recordIndexId); + const columnDefinition = useRecoilValue(columnsFamilySelector(columnId)); + + return { columnDefinition }; +}; diff --git a/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx b/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx index 2df55058eb82..068b95ab8d1f 100644 --- a/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx +++ b/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx @@ -42,7 +42,11 @@ export const RecordIndexPage = () => { return ( - + Date: Tue, 10 Sep 2024 10:36:37 +0530 Subject: [PATCH 2/2] kept only buisness logic in hook - acc to review --- .../RecordIndexPageKanbanAddButton.tsx | 110 ++++++++++++++---- .../useRecordIndexPageKanbanAddButton.ts | 106 +++++------------ 2 files changed, 113 insertions(+), 103 deletions(-) diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx index cfa3f371168d..6299546e03b6 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddButton.tsx @@ -1,21 +1,31 @@ -import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; -import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu'; -import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; -import styled from '@emotion/styled'; -import { useState } from 'react'; - -import { SingleEntitySelect } from '@/object-record/relation-picker/components/SingleEntitySelect'; - import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { useRecordBoardStates } from '@/object-record/record-board/hooks/internal/useRecordBoardStates'; +import { RecordBoardColumnDefinition } from '@/object-record/record-board/types/RecordBoardColumnDefinition'; import { RecordIndexPageKanbanAddMenuItem } from '@/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem'; import { useRecordIndexPageKanbanAddButton } from '@/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton'; +import { SingleEntitySelect } from '@/object-record/relation-picker/components/SingleEntitySelect'; +import { useEntitySelectSearch } from '@/object-record/relation-picker/hooks/useEntitySelectSearch'; +import { EntityForSelect } from '@/object-record/relation-picker/types/EntityForSelect'; +import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; import { IconButton } from '@/ui/input/button/components/IconButton'; -import { IconPlus } from 'twenty-ui'; +import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; +import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu'; +import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; +import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; +import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; +import styled from '@emotion/styled'; +import { useCallback, useState } from 'react'; +import { useRecoilValue } from 'recoil'; +import { IconPlus, isDefined } from 'twenty-ui'; const StyledDropdownMenuItemsContainer = styled(DropdownMenuItemsContainer)` width: 100%; `; +const StyledDropDownMenu = styled(DropdownMenu)` + width: 200px; +`; + type RecordIndexPageKanbanAddButtonProps = { recordIndexId: string; objectNamePlural: string; @@ -25,23 +35,79 @@ export const RecordIndexPageKanbanAddButton = ({ recordIndexId, objectNamePlural, }: RecordIndexPageKanbanAddButtonProps) => { + const dropdownId = `record-index-page-add-button-dropdown`; const [isSelectingCompany, setIsSelectingCompany] = useState(false); + const [selectedColumnDefinition, setSelectedColumnDefinition] = + useState(); + + const { columnIdsState } = useRecordBoardStates(recordIndexId); + const columnIds = useRecoilValue(columnIdsState); + + const { + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, + } = usePreviousHotkeyScope(); + const { resetSearchFilter } = useEntitySelectSearch({ + relationPickerScopeId: 'relation-picker', + }); + + const { closeDropdown } = useDropdown(dropdownId); const { - dropdownId, - columnIds, selectFieldMetadataItem, isOpportunity, - handleOpportunityClick, - handleNonOpportunityClick, - handleEntitySelect, - handleCancel, + createOpportunity, + createRecordWithoutCompany, } = useRecordIndexPageKanbanAddButton({ - recordIndexId, objectNamePlural, - setIsSelectingCompany, }); + const handleItemClick = useCallback( + (columnDefinition: RecordBoardColumnDefinition) => { + if (isOpportunity) { + setIsSelectingCompany(true); + setSelectedColumnDefinition(columnDefinition); + setHotkeyScopeAndMemorizePreviousScope( + RelationPickerHotkeyScope.RelationPicker, + ); + } else { + createRecordWithoutCompany(columnDefinition); + closeDropdown(); + } + }, + [ + isOpportunity, + createRecordWithoutCompany, + setHotkeyScopeAndMemorizePreviousScope, + closeDropdown, + ], + ); + + const handleEntitySelect = useCallback( + (company?: EntityForSelect) => { + setIsSelectingCompany(false); + goBackToPreviousHotkeyScope(); + resetSearchFilter(); + if (isDefined(company) && isDefined(selectedColumnDefinition)) { + createOpportunity(company, selectedColumnDefinition); + } + closeDropdown(); + }, + [ + createOpportunity, + goBackToPreviousHotkeyScope, + resetSearchFilter, + selectedColumnDefinition, + closeDropdown, + ], + ); + + const handleCancel = useCallback(() => { + resetSearchFilter(); + goBackToPreviousHotkeyScope(); + setIsSelectingCompany(false); + }, [goBackToPreviousHotkeyScope, resetSearchFilter]); + if (!selectFieldMetadataItem) { return null; } @@ -62,7 +128,7 @@ export const RecordIndexPageKanbanAddButton = ({ } dropdownId={dropdownId} dropdownComponents={ - + {isOpportunity && isSelectingCompany ? ( ))} )} - + } dropdownHotkeyScope={{ scope: dropdownId }} /> diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts index 49a06dca4d3b..1d64225bf485 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordIndexPageKanbanAddButton.ts @@ -2,44 +2,28 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; -import { useRecordBoardStates } from '@/object-record/record-board/hooks/internal/useRecordBoardStates'; import { RecordBoardColumnDefinition } from '@/object-record/record-board/types/RecordBoardColumnDefinition'; import { recordIndexKanbanFieldMetadataIdState } from '@/object-record/record-index/states/recordIndexKanbanFieldMetadataIdState'; -import { useEntitySelectSearch } from '@/object-record/relation-picker/hooks/useEntitySelectSearch'; import { EntityForSelect } from '@/object-record/relation-picker/types/EntityForSelect'; -import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; -import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; -import { useCallback, useState } from 'react'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-ui'; type useRecordIndexPageKanbanAddButtonProps = { - recordIndexId: string; objectNamePlural: string; - setIsSelectingCompany: React.Dispatch>; }; export const useRecordIndexPageKanbanAddButton = ({ - recordIndexId, objectNamePlural, - setIsSelectingCompany, }: useRecordIndexPageKanbanAddButtonProps) => { - const dropdownId = `record-index-page-add-button-dropdown`; const { objectNameSingular } = useObjectNameSingularFromPlural({ objectNamePlural, }); - const [selectedColumnDefinition, setSelectedColumnDefinition] = - useState(); const { objectMetadataItem } = useObjectMetadataItem({ objectNameSingular }); - const { columnIdsState } = useRecordBoardStates(recordIndexId); - const columnIds = useRecoilValue(columnIdsState); + const recordIndexKanbanFieldMetadataId = useRecoilValue( recordIndexKanbanFieldMetadataIdState, ); const { createOneRecord } = useCreateOneRecord({ objectNameSingular }); - const { - setHotkeyScopeAndMemorizePreviousScope, - goBackToPreviousHotkeyScope, - } = usePreviousHotkeyScope(); const selectFieldMetadataItem = objectMetadataItem.fields.find( (field) => field.id === recordIndexKanbanFieldMetadataId, @@ -47,71 +31,35 @@ export const useRecordIndexPageKanbanAddButton = ({ const isOpportunity = objectMetadataItem.nameSingular === CoreObjectNameSingular.Opportunity; - const handleOpportunityClick = useCallback( - (columnDefinition: RecordBoardColumnDefinition) => { - setIsSelectingCompany(true); - setSelectedColumnDefinition(columnDefinition); - setHotkeyScopeAndMemorizePreviousScope( - RelationPickerHotkeyScope.RelationPicker, - ); - }, - [ - setIsSelectingCompany, - setSelectedColumnDefinition, - setHotkeyScopeAndMemorizePreviousScope, - ], - ); - const handleNonOpportunityClick = useCallback( - (columnDefinition: RecordBoardColumnDefinition) => { - if (selectFieldMetadataItem !== undefined) - createOneRecord({ - [selectFieldMetadataItem.name]: columnDefinition?.value, - position: 'first', - }); - }, - [createOneRecord, selectFieldMetadataItem], - ); - const { resetSearchFilter } = useEntitySelectSearch({ - relationPickerScopeId: 'relation-picker', - }); + const createOpportunity = ( + company: EntityForSelect, + columnDefinition: RecordBoardColumnDefinition, + ) => { + if (isDefined(selectFieldMetadataItem)) { + createOneRecord({ + name: company.name, + companyId: company.id, + position: 'first', + [selectFieldMetadataItem.name]: columnDefinition?.value, + }); + } + }; - const handleEntitySelect = useCallback( - (company?: EntityForSelect) => { - setIsSelectingCompany(false); - goBackToPreviousHotkeyScope(); - resetSearchFilter(); - if (company !== undefined && selectFieldMetadataItem !== undefined) { - createOneRecord({ - name: company.name, - companyId: company.id, - position: 'first', - [selectFieldMetadataItem.name]: selectedColumnDefinition?.value, - }); - } - }, - [ - createOneRecord, - goBackToPreviousHotkeyScope, - selectFieldMetadataItem, - selectedColumnDefinition, - setIsSelectingCompany, - resetSearchFilter, - ], - ); - const handleCancel = useCallback(() => { - resetSearchFilter(); - goBackToPreviousHotkeyScope(); - setIsSelectingCompany(false); - }, [goBackToPreviousHotkeyScope, resetSearchFilter, setIsSelectingCompany]); + const createRecordWithoutCompany = ( + columnDefinition: RecordBoardColumnDefinition, + ) => { + if (isDefined(selectFieldMetadataItem)) { + createOneRecord({ + [selectFieldMetadataItem.name]: columnDefinition?.value, + position: 'first', + }); + } + }; return { - dropdownId, - columnIds, selectFieldMetadataItem, isOpportunity, - handleOpportunityClick, - handleNonOpportunityClick, - handleEntitySelect, - handleCancel, + createOpportunity, + createRecordWithoutCompany, }; };