Replaced useDropdown calls by useCloseDropdown, useOpenDropdown and useToggleDropdown (#12958)
This PR replaces the many calls of useDropdown by the new standalone hooks : useCloseDropdown, useOpenDropdown and useToggleDropdown. This will allow to remove useDropdown and then the dropdown recoil component state v1. A big round of QA has been made, with some bugs caught along the way. Closes https://github.com/twentyhq/core-team-issues/issues/1155 Closes https://github.com/twentyhq/core-team-issues/issues/618 ## QA Component|Status|Comment |---|---|---| CurrentWorkspaceMemberFavorites|Ok| FavoriteFolderPickerFooter|Ok| AdvancedFilterAddFilterRuleSelect|Ok| AdvancedFilterRecordFilterGroupOptionsDropdown|Ok| AdvancedFilterRecordFilterOperandSelectContent|Ok| AdvancedFilterRecordFilterOptionsDropdown|Ok| useAdvancedFilterFieldSelectDropdown|Ok| ObjectFilterDropdownBooleanSelect|Ok| ObjectFilterDropdownOptionSelect|Ok| ObjectOptionsDropdown|Ok| ObjectOptionsDropdownLayoutContent|Ok| ObjectSortDropdownButton|Ok| useCloseSortDropdown|Ok| FormDateTimeFieldInput|Ok|Bug detected, cannot select a month or a year, see issue https://github.com/twentyhq/twenty/issues/12922 FormSingleRecordPicker|Ok| MultiItemFieldMenuItem|Ok| RecordDetailRelationRecordsListItem|Ok| RecordDetailRelationSection|Ok| RecordDetailRelationSectionDropdownToMany|Ok| RecordDetailRelationSectionDropdownToOne|Ok| RecordTableColumnAggregateFooterDropdownSubmenuContent|Ok| RecordTableColumnAggregateFooterAggregateOperationMenuItems|Ok| RecordTableColumnAggregateFooterMenuContent|Ok| RecordTableColumnAggregateFooterValueCell|Ok| RecordTableColumnHeadDropdownMenu|Ok| RecordTableHeaderPlusButtonContent|Ok| useTriggerActionMenuDropdown|Ok| MultipleSelectDropdown|Ok| RecordBoardColumnHeaderAggregateDropdownButton|Ok| SettingsDataModelFieldSelectFormOptionRow|Ok| SettingsDataModelNewFieldBreadcrumbDropDown|Ok| SettingsObjectFieldActiveActionDropdown|Ok| SettingsObjectFieldInactiveActionDropdown|Ok| SettingsObjectInactiveMenuDropDown|Ok| SettingsSecurityApprovedAccessDomainRowDropdownMenu|Couldn’t test| SettingsSecuritySSORowDropdownMenu|Couldn’t test| SettingsAccountsRowDropdownMenu|Ok| SettingsRoleAssignment|Ok| SettingsServerlessFunctionTabEnvironmentVariableTableRow|Couldn’t test| MatchColumnToFieldSelect|Ok| SubMatchingSelectDropdownButton|Ok|Removed conflicting duplicate open dropdown SubMatchingSelectRowRightDropdown|Ok| CurrencyPickerDropdownButton|Ok| IconPicker|Ok| DateTimePicker|Ok| PhoneCountryPickerDropdownButton|OK| Select|Ok| Dropdown|Ok|Not QAing all dropdowns in the app because the ones of this QA are enough to show up that Dropdown is behaving correctly on a lot of use cases DropdownMenuInnerSelect|Ok| TabList|Ok|Removed onClickOutside called in dropdown clickable component, validated with Raph who recently worked on this DateInput|Ok| MultiWorkspaceDropdownDefaultComponents|Ok| AdvancedFilterChip|Ok| EditableFilterDropdownButton|Ok| UpdateViewButtonGroup|Ok| ViewBarDetailsAddFilterButton|Ok| ViewBarFilterButton|Ok| ViewBarFilterDropdown|Ok| ViewBarFilterDropdownAdvancedFilterButton|Ok| ViewPickerDropdown|Ok| ViewPickerListContent|Ok| ViewPickerOptionDropdown|Ok| WorkflowEditTriggerDatabaseEventForm|Ok| WorkflowVariablesDropdownWorkflowStepItems|Ok| AttachmentDropdown|Ok| SupportDropdown|Ok| Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com> Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -8,7 +8,7 @@ import { MatchColumnSelectFieldSelectDropdownContent } from '@/spreadsheet-impor
|
||||
import { MatchColumnSelectSubFieldSelectDropdownContent } from '@/spreadsheet-import/components/MatchColumnSelectSubFieldSelectDropdownContent';
|
||||
import { DO_NOT_IMPORT_OPTION_KEY } from '@/spreadsheet-import/constants/DoNotImportOptionKey';
|
||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
|
||||
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
|
||||
import styled from '@emotion/styled';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { IconChevronDown } from 'twenty-ui/display';
|
||||
@ -39,7 +39,7 @@ export const MatchColumnToFieldSelect = ({
|
||||
}: MatchColumnToFieldSelectProps) => {
|
||||
const dropdownId = `match-column-select-v2-dropdown-${columnIndex}`;
|
||||
|
||||
const { closeDropdown } = useDropdown(dropdownId);
|
||||
const { closeDropdown } = useCloseDropdown();
|
||||
|
||||
const [selectedFieldMetadataItem, setSelectedFieldMetadataItem] =
|
||||
useState<FieldMetadataItem | null>(null);
|
||||
@ -81,7 +81,7 @@ export const MatchColumnToFieldSelect = ({
|
||||
setSelectedFieldMetadataItem(null);
|
||||
|
||||
onChange(correspondingOption);
|
||||
closeDropdown();
|
||||
closeDropdown(dropdownId);
|
||||
}
|
||||
};
|
||||
|
||||
@ -89,13 +89,13 @@ export const MatchColumnToFieldSelect = ({
|
||||
selectedSuggestedOption: SelectOption,
|
||||
) => {
|
||||
onChange(selectedSuggestedOption);
|
||||
closeDropdown();
|
||||
closeDropdown(dropdownId);
|
||||
};
|
||||
|
||||
const handleDoNotImportSelect = () => {
|
||||
if (isDefined(doNotImportOption)) {
|
||||
onChange(doNotImportOption);
|
||||
closeDropdown();
|
||||
closeDropdown(dropdownId);
|
||||
}
|
||||
};
|
||||
|
||||
@ -109,7 +109,7 @@ export const MatchColumnToFieldSelect = ({
|
||||
|
||||
const handleCancelSelectClick = () => {
|
||||
setSelectedFieldMetadataItem(null);
|
||||
closeDropdown();
|
||||
closeDropdown(dropdownId);
|
||||
};
|
||||
|
||||
const doNotImportOption = options.find(
|
||||
|
||||
@ -7,7 +7,6 @@ import {
|
||||
|
||||
import { SpreadsheetMatchedOptions } from '@/spreadsheet-import/types/SpreadsheetMatchedOptions';
|
||||
import { getFieldOptions } from '@/spreadsheet-import/utils/getFieldOptions';
|
||||
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import styled from '@emotion/styled';
|
||||
import { Tag, TagColor } from 'twenty-ui/components';
|
||||
@ -30,8 +29,6 @@ export const SubMatchingSelectDropdownButton = <T extends string>({
|
||||
column,
|
||||
placeholder,
|
||||
}: SubMatchingSelectDropdownButtonProps<T>) => {
|
||||
const { openDropdown } = useDropdown();
|
||||
|
||||
const { fields } = useSpreadsheetImportInternal<T>();
|
||||
const options = getFieldOptions(fields, column.value) as SelectOption[];
|
||||
const value = options.find((opt) => opt.value === option.value);
|
||||
@ -39,11 +36,7 @@ export const SubMatchingSelectDropdownButton = <T extends string>({
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<SubMatchingSelectControlContainer
|
||||
cursor="pointer"
|
||||
onClick={() => openDropdown()}
|
||||
id="control"
|
||||
>
|
||||
<SubMatchingSelectControlContainer cursor="pointer" id="control">
|
||||
<Tag
|
||||
text={value?.label ?? placeholder}
|
||||
color={value?.color as TagColor}
|
||||
|
||||
@ -10,7 +10,7 @@ import {
|
||||
} from '@/spreadsheet-import/types/SpreadsheetColumn';
|
||||
import { SpreadsheetMatchedOptions } from '@/spreadsheet-import/types/SpreadsheetMatchedOptions';
|
||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
|
||||
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
|
||||
import styled from '@emotion/styled';
|
||||
import { SelectOption } from 'twenty-ui/input';
|
||||
|
||||
@ -38,7 +38,7 @@ export const SubMatchingSelectRowRightDropdown = <T extends string>({
|
||||
}: SubMatchingSelectRowRightDropdownProps<T>) => {
|
||||
const dropdownId = `sub-matching-select-dropdown-${option.entry}`;
|
||||
|
||||
const { closeDropdown } = useDropdown(dropdownId);
|
||||
const { closeDropdown } = useCloseDropdown();
|
||||
|
||||
const { fields } = useSpreadsheetImportInternal<T>();
|
||||
const options = getFieldOptions(fields, column.value) as SelectOption[];
|
||||
@ -46,7 +46,7 @@ export const SubMatchingSelectRowRightDropdown = <T extends string>({
|
||||
|
||||
const handleSelect = (selectedOption: SelectOption) => {
|
||||
onSubChange(selectedOption.value as T, column.index, option.entry ?? '');
|
||||
closeDropdown();
|
||||
closeDropdown(dropdownId);
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user