Implement sub-field filtering on CURRENCY field type (#11726)
This PR implements sub-field filtering on CURRENCY field type and improves many related zones. - Created a ObjectFilterDropdownCurrencySelect dropdown component for filtering on multiple currencies - Added currencyCode sub-field to CurrencyFilter type - Created getDefaultSubFieldNameForCompositeFilterableFieldType to avoid situation where we don't have any sub field name in sub field filtering situations. - Implemented filtering for currencyCode in computeFilterRecordGqlOperationFilter - Implemented CURRENCY type in getRecordFilterOperands - Implemented isMatchingCurrencyFilter for using in isRecordMatchingFilter for proper optimistic rendering - Created turnCurrencyIntoSelectableItem to help ObjectFilterDropdownCurrencySelect Testing : - Added test for currency sub fields in getOperandsForFilterType - Completely reworked isMatchingCurrencyFilter test Improvements : - Created a unique CURRENCIES constant to avoid re-creating it at various places - Derive the type FilterableFieldType from a constant array FILTERABLE_FIELD_TYPES, so it's easier to work with - Added areCompositeTypeSubFieldsFilterable - Fixed a bug with empty value '[]' that was preventing the auto-removal of a filter chip Miscellaneous : - Created isExpectedSubFieldName util to do a type-safe check of a subFieldName - Better naming : renamed isCompositeField to isCompositeFieldType - Created isCompositeTypeFilterableWithAny to specify which field types are filterable by any sub field - Better naming : renamed ObjectFilterDropdownFilterSelectCompositeFieldSubMenu to ObjectFilterDropdownSubFieldSelect - Better naming : renamed ObjectFilterDropdownFilterSelect to ObjectFilterDropdownFieldSelect - Created isEmptinessOperand util instead of duplicating the same hard-coded check in multiple places - Better naming : used subFieldName instead of compositeFieldName for consistency - UseEffect removal : removed unnecessary useEffect in MultipleSelectDropdown Fixes a bug where Empty and Not weren't appearing in filter chip in particular cases Fixes https://github.com/twentyhq/core-team-issues/issues/498 Fixes https://github.com/twentyhq/twenty/issues/7558
This commit is contained in:
@ -1,10 +1,11 @@
|
||||
import { useTheme } from '@emotion/react';
|
||||
import styled from '@emotion/styled';
|
||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
|
||||
import { useRegisterInputEvents } from '@/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents';
|
||||
import { SETTINGS_FIELD_CURRENCY_CODES } from '@/settings/data-model/constants/SettingsFieldCurrencyCodes';
|
||||
import { CURRENCIES } from '@/settings/data-model/constants/Currencies';
|
||||
import { CurrencyPickerDropdownButton } from '@/ui/input/components/internal/currency/components/CurrencyPickerDropdownButton';
|
||||
import { Currency } from '@/ui/input/components/internal/types/Currency';
|
||||
import { IMaskInput } from 'react-imask';
|
||||
import { IconComponent } from 'twenty-ui/display';
|
||||
import { TEXT_INPUT_STYLE } from 'twenty-ui/theme';
|
||||
@ -50,12 +51,6 @@ export type CurrencyInputProps = {
|
||||
hotkeyScope: string;
|
||||
};
|
||||
|
||||
type Currency = {
|
||||
label: string;
|
||||
value: string;
|
||||
Icon: any;
|
||||
};
|
||||
|
||||
export const CurrencyInput = ({
|
||||
autoFocus,
|
||||
value,
|
||||
@ -96,19 +91,7 @@ export const CurrencyInput = ({
|
||||
hotkeyScope,
|
||||
});
|
||||
|
||||
const currencies = useMemo<Currency[]>(
|
||||
() =>
|
||||
Object.entries(SETTINGS_FIELD_CURRENCY_CODES).map(
|
||||
([key, { Icon, label }]) => ({
|
||||
value: key,
|
||||
Icon,
|
||||
label,
|
||||
}),
|
||||
),
|
||||
[],
|
||||
);
|
||||
|
||||
const currency = currencies.find(({ value }) => value === currencyCode);
|
||||
const currency = CURRENCIES.find(({ value }) => value === currencyCode);
|
||||
|
||||
useEffect(() => {
|
||||
setInternalText(value);
|
||||
@ -119,9 +102,8 @@ export const CurrencyInput = ({
|
||||
return (
|
||||
<StyledContainer ref={wrapperRef}>
|
||||
<CurrencyPickerDropdownButton
|
||||
valueCode={currency?.value ?? ''}
|
||||
selectedCurrencyCode={currency?.value ?? ''}
|
||||
onChange={handleCurrencyChange}
|
||||
currencies={currencies}
|
||||
/>
|
||||
<StyledIcon>
|
||||
{Icon && (
|
||||
|
||||
Reference in New Issue
Block a user