From ef5a7f1c6c016a43e4a94ff282ce3066682f9f8d Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Fri, 12 Jul 2024 16:11:13 +0530 Subject: [PATCH] fix: isInsideTable check --- .../Input/BaseInput/BaseInputTagSlot.web.tsx | 12 ++--- .../Input/BaseInput/baseInputStyles.ts | 2 +- .../BaseDropdownInputTrigger.tsx | 8 ++-- .../Table/TableEditableCell.web.tsx | 47 ++++++++++--------- .../Table/TableEditableCellContext.tsx | 12 +++++ 5 files changed, 48 insertions(+), 33 deletions(-) create mode 100644 packages/blade/src/components/Table/TableEditableCellContext.tsx diff --git a/packages/blade/src/components/Input/BaseInput/BaseInputTagSlot.web.tsx b/packages/blade/src/components/Input/BaseInput/BaseInputTagSlot.web.tsx index 73d118dd0c2..bb205455fb9 100644 --- a/packages/blade/src/components/Input/BaseInput/BaseInputTagSlot.web.tsx +++ b/packages/blade/src/components/Input/BaseInput/BaseInputTagSlot.web.tsx @@ -9,7 +9,7 @@ import { useIsomorphicLayoutEffect } from '~utils/useIsomorphicLayoutEffect'; import { useIsMobile } from '~utils/useIsMobile'; import { MetaConstants } from '~utils/metaAttribute'; import { size as sizeToken } from '~tokens/global'; -import { useTableContext } from '~components/Table/TableContext'; +import { useTableEditableCell } from '~components/Table/TableEditableCellContext'; const MINUMUM_INPUT_SPACE = 60; const PLUS_X_MORE_TEXT_WIDTH = 60; @@ -32,11 +32,10 @@ const useVisibleTagsCount = ({ }): number => { const [visibleTagsCount, setVisibleTagsCount] = React.useState(0); const visibleTagsCountStateRef = React.useRef(0); - const { rowDensity } = useTableContext(); - const isInsideTable = Boolean(rowDensity); + const { isInsideTableEditableCell } = useTableEditableCell(); useIsomorphicLayoutEffect(() => { - if (!tags || labelPrefix || isInsideTable) { + if (!tags || labelPrefix || isInsideTableEditableCell) { setVisibleTagsCount(0); return; } @@ -154,8 +153,7 @@ const BaseInputTagSlot = ({ }: BaseInputTagSlotProps): React.ReactElement => { const hasTags = tags && tags.length > 0; const slotRef = React.useRef(null); - const { rowDensity } = useTableContext(); - const isInsideTable = Boolean(rowDensity); + const { isInsideTableEditableCell } = useTableEditableCell(); const visibleTagsCount = useVisibleTagsCount({ slotRef, tags, @@ -243,7 +241,7 @@ const BaseInputTagSlot = ({ setShouldIgnoreBlurAnimation?.(false); }} > - {isInsideTable && tags && tags.length > 0 ? ( + {isInsideTableEditableCell && tags && tags.length > 0 ? ( {getSelectedTextWithoutTags({ items: tags.length, labelPrefix })} diff --git a/packages/blade/src/components/Input/BaseInput/baseInputStyles.ts b/packages/blade/src/components/Input/BaseInput/baseInputStyles.ts index cfa429c919e..aded5feb845 100644 --- a/packages/blade/src/components/Input/BaseInput/baseInputStyles.ts +++ b/packages/blade/src/components/Input/BaseInput/baseInputStyles.ts @@ -204,7 +204,7 @@ export const getBaseInputStyles = ({ const isDropdownWithTags = isDropdownTrigger && hasTags; const isReactNative = getPlatformType() === 'react-native'; - const shouldHaveFlexibleHeight = (isTextArea || isDropdownWithTags) && !isTableInputCell; + const shouldHaveFlexibleHeight = isTextArea || isDropdownWithTags; return { ...(valueComponentType === 'heading' diff --git a/packages/blade/src/components/Input/DropdownInputTriggers/BaseDropdownInputTrigger.tsx b/packages/blade/src/components/Input/DropdownInputTriggers/BaseDropdownInputTrigger.tsx index 19d2eb98a09..a1f863f7556 100644 --- a/packages/blade/src/components/Input/DropdownInputTriggers/BaseDropdownInputTrigger.tsx +++ b/packages/blade/src/components/Input/DropdownInputTriggers/BaseDropdownInputTrigger.tsx @@ -17,6 +17,7 @@ import { tableEditableCellRowDensityToInputSizeMap, validationStateToInputTrailingIconMap, } from '~components/Table/tokens'; +import { useTableEditableCell } from '~components/Table/TableEditableCellContext'; const useControlledDropdownInput = ( props: Pick< @@ -149,7 +150,7 @@ const _BaseDropdownInputTrigger = ( changeCallbackTriggerer, } = useDropdown(); const { rowDensity } = useTableContext(); - const isInsideTable = Boolean(rowDensity); + const { isInsideTableEditableCell } = useTableEditableCell(); const dropdownTriggerPlaceholder = props.placeholder ?? 'Select Option'; const isAutoCompleteInHeader = !props.isSelectInput && hasAutoCompleteInBottomSheetHeader; @@ -312,7 +313,8 @@ const _BaseDropdownInputTrigger = ( onKeyDown={props.onTriggerKeydown} size={props.size} trailingInteractionElement={ - isAutoCompleteInHeader || (isInsideTable && props.validationState !== 'none') ? null : ( + isAutoCompleteInHeader || + (isInsideTableEditableCell && props.validationState !== 'none') ? null : ( { if (!props.isDisabled) { @@ -328,7 +330,7 @@ const _BaseDropdownInputTrigger = ( /> ) } - {...(isInsideTable ? tableInputProps : undefined)} + {...(isInsideTableEditableCell ? tableInputProps : undefined)} /> ); }; diff --git a/packages/blade/src/components/Table/TableEditableCell.web.tsx b/packages/blade/src/components/Table/TableEditableCell.web.tsx index ab97c478b2d..f6d69514995 100644 --- a/packages/blade/src/components/Table/TableEditableCell.web.tsx +++ b/packages/blade/src/components/Table/TableEditableCell.web.tsx @@ -17,6 +17,7 @@ import { BaseInput } from '~components/Input/BaseInput'; import { castWebType } from '~utils'; import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects'; import { Dropdown } from '~components/Dropdown'; +import { TableEditableCellContext } from './TableEditableCellContext'; export const StyledEditableCell = styled(StyledCell)<{ rowDensity: NonNullable['rowDensity']>; @@ -134,32 +135,34 @@ const TableEditableDropdownCell = ( const { rowDensity, showStripedRows, backgroundColor } = useTableContext(); return ( - - + - - - - - + + + + + + ); }; diff --git a/packages/blade/src/components/Table/TableEditableCellContext.tsx b/packages/blade/src/components/Table/TableEditableCellContext.tsx new file mode 100644 index 00000000000..dbb2f01dc38 --- /dev/null +++ b/packages/blade/src/components/Table/TableEditableCellContext.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +const TableEditableCellContext = React.createContext<{ isInsideTableEditableCell: boolean }>({ + isInsideTableEditableCell: false, +}); + +const useTableEditableCell = () => { + const contextValue = React.useContext(TableEditableCellContext); + return contextValue; +}; + +export { TableEditableCellContext, useTableEditableCell };