* refactor: apply relation optimistic effects on record update Related to #3509 * refactor: remove need to pass relation id field to create and update mutations * fix: fix tests * fix: fix SingleEntitySelect glitch * fix: fix usePersistField tests * fix: fix wrong import after rebase * fix: fix several tests * fix: fix test types
70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
import { useCallback, useContext, useState } from 'react';
|
|
|
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
|
import { NewButton } from '@/object-record/record-board-deprecated/components/NewButton';
|
|
import { BoardColumnContext } from '@/object-record/record-board-deprecated/contexts/BoardColumnContext';
|
|
import { useCreateOpportunity } from '@/object-record/record-board-deprecated/hooks/internal/useCreateOpportunity';
|
|
import { SingleEntitySelect } from '@/object-record/relation-picker/components/SingleEntitySelect';
|
|
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
|
|
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
|
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
|
|
|
export const NewOpportunityButton = () => {
|
|
const [isCreatingCard, setIsCreatingCard] = useState(false);
|
|
const column = useContext(BoardColumnContext);
|
|
|
|
const pipelineStepId = column?.columnDefinition.id || '';
|
|
|
|
const { enqueueSnackBar } = useSnackBar();
|
|
const createOpportunity = useCreateOpportunity();
|
|
|
|
const {
|
|
goBackToPreviousHotkeyScope,
|
|
setHotkeyScopeAndMemorizePreviousScope,
|
|
} = usePreviousHotkeyScope();
|
|
|
|
const handleEntitySelect = (company: any) => {
|
|
setIsCreatingCard(false);
|
|
goBackToPreviousHotkeyScope();
|
|
|
|
if (!pipelineStepId) {
|
|
enqueueSnackBar('Pipeline stage id is not defined', {
|
|
variant: 'error',
|
|
});
|
|
|
|
throw new Error('Pipeline stage id is not defined');
|
|
}
|
|
|
|
createOpportunity(company.id, pipelineStepId);
|
|
};
|
|
|
|
const handleNewClick = useCallback(() => {
|
|
setIsCreatingCard(true);
|
|
setHotkeyScopeAndMemorizePreviousScope(
|
|
RelationPickerHotkeyScope.RelationPicker,
|
|
);
|
|
}, [setIsCreatingCard, setHotkeyScopeAndMemorizePreviousScope]);
|
|
|
|
const handleCancel = () => {
|
|
goBackToPreviousHotkeyScope();
|
|
setIsCreatingCard(false);
|
|
};
|
|
|
|
return (
|
|
<>
|
|
{isCreatingCard ? (
|
|
<SingleEntitySelect
|
|
disableBackgroundBlur
|
|
onCancel={handleCancel}
|
|
onEntitySelected={handleEntitySelect}
|
|
relationObjectNameSingular={CoreObjectNameSingular.Company}
|
|
relationPickerScopeId="relation-picker"
|
|
selectedRelationRecordIds={[]}
|
|
/>
|
|
) : (
|
|
<NewButton onClick={handleNewClick} />
|
|
)}
|
|
</>
|
|
);
|
|
};
|