From b1244cbd5afe7a47d410255a75fce75202425007 Mon Sep 17 00:00:00 2001 From: duckietm Date: Wed, 27 May 2026 13:42:11 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=86=99=20Fix=20BOTS=20in=20catalog=20and?= =?UTF-8?q?=20inventory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/layout/LayoutAvatarImageView.tsx | 50 +++++++++++++++---- .../page/common/CatalogGridOfferView.tsx | 2 +- .../page/layout/CatalogLayoutDefaultView.tsx | 4 +- .../views/bot/InventoryBotItemView.tsx | 4 +- .../inventory/views/bot/InventoryBotView.tsx | 2 +- 5 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/common/layout/LayoutAvatarImageView.tsx b/src/common/layout/LayoutAvatarImageView.tsx index 75233a8..bd640e2 100644 --- a/src/common/layout/LayoutAvatarImageView.tsx +++ b/src/common/layout/LayoutAvatarImageView.tsx @@ -12,35 +12,51 @@ export interface LayoutAvatarImageViewProps extends BaseProps headOnly?: boolean; direction?: number; scale?: number; + fit?: boolean; } export const LayoutAvatarImageView: FC = props => { - const { figure = '', gender = '', headOnly = false, direction = 0, scale = 1, classNames = [], style = {}, ...rest } = props; + const { figure = '', gender = '', headOnly = false, direction = 0, scale = 1, fit = false, classNames = [], style = {}, ...rest } = props; const [ avatarUrl, setAvatarUrl ] = useState(null); const [ isReady, setIsReady ] = useState(false); const isDisposed = useRef(false); - // Request id bumped on every prop change. The SDK can call - // resetFigure asynchronously when server-side figure data lands; - // if props change in quick succession the older callback could - // otherwise overwrite the newer image. The closure captures the - // id and bails when stale. const requestIdRef = useRef(0); const getClassNames = useMemo(() => { - const newClassNames: string[] = [ 'avatar-image relative w-[90px] h-[130px] bg-no-repeat left-[-2px] pointer-events-none' ]; + let newClassNames: string[]; + + if(fit) + { + newClassNames = [ 'avatar-image absolute inset-0 pointer-events-none' ]; + } + else if(headOnly) + { + newClassNames = [ 'avatar-image absolute inset-0 bg-no-repeat pointer-events-none' ]; + } + else + { + newClassNames = [ 'avatar-image relative w-[90px] h-[130px] bg-no-repeat left-[-2px] pointer-events-none' ]; + } if(classNames.length) newClassNames.push(...classNames); return newClassNames; - }, [ classNames ]); + }, [ classNames, headOnly, fit ]); const getStyle = useMemo(() => { let newStyle: CSSProperties = {}; - if(avatarUrl && avatarUrl.length) newStyle.backgroundImage = `url('${ avatarUrl }')`; + if(!fit && avatarUrl && avatarUrl.length) newStyle.backgroundImage = `url('${ avatarUrl }')`; + + if(headOnly && !fit) + { + newStyle.backgroundSize = '130px auto'; + newStyle.backgroundPosition = '51% 40%'; + newStyle.imageRendering = 'pixelated'; + } if(scale !== 1) { @@ -52,7 +68,7 @@ export const LayoutAvatarImageView: FC = props => if(Object.keys(style).length) newStyle = { ...newStyle, ...style }; return newStyle; - }, [ avatarUrl, scale, style ]); + }, [ avatarUrl, scale, style, headOnly, fit ]); useEffect(() => { @@ -116,5 +132,17 @@ export const LayoutAvatarImageView: FC = props => }; }, []); - return ; + return ( + + { fit && avatarUrl && avatarUrl.length > 0 && ( + + ) } + + ); }; diff --git a/src/components/catalog/views/page/common/CatalogGridOfferView.tsx b/src/components/catalog/views/page/common/CatalogGridOfferView.tsx index 936b8dc..6fa45ba 100644 --- a/src/components/catalog/views/page/common/CatalogGridOfferView.tsx +++ b/src/components/catalog/views/page/common/CatalogGridOfferView.tsx @@ -76,7 +76,7 @@ export const CatalogGridOfferView: FC = props => { iconUrl && !(offer.product.productType === ProductTypeEnum.ROBOT) &&
} { (offer.product.productType === ProductTypeEnum.ROBOT) && - } + }
diff --git a/src/components/catalog/views/page/layout/CatalogLayoutDefaultView.tsx b/src/components/catalog/views/page/layout/CatalogLayoutDefaultView.tsx index dd55268..3490e60 100644 --- a/src/components/catalog/views/page/layout/CatalogLayoutDefaultView.tsx +++ b/src/components/catalog/views/page/layout/CatalogLayoutDefaultView.tsx @@ -88,7 +88,6 @@ export const CatalogLayoutDefaultView: FC = props =>
} - { /* Welcome/description card */ } { !currentOffer &&
{ !!page.localization.getImage(1) && @@ -96,11 +95,10 @@ export const CatalogLayoutDefaultView: FC = props =>
} - { /* Item grid */ }
{ GetConfigurationValue('catalog.headers') && } - +
); diff --git a/src/components/inventory/views/bot/InventoryBotItemView.tsx b/src/components/inventory/views/bot/InventoryBotItemView.tsx index 9a084cf..4a48485 100644 --- a/src/components/inventory/views/bot/InventoryBotItemView.tsx +++ b/src/components/inventory/views/bot/InventoryBotItemView.tsx @@ -38,8 +38,8 @@ export const InventoryBotItemView: FC - + + { children } ); diff --git a/src/components/inventory/views/bot/InventoryBotView.tsx b/src/components/inventory/views/bot/InventoryBotView.tsx index 87b8adf..2882ea0 100644 --- a/src/components/inventory/views/bot/InventoryBotView.tsx +++ b/src/components/inventory/views/bot/InventoryBotView.tsx @@ -68,7 +68,7 @@ export const InventoryBotView: FC<{
- columnCount={ 6 } + columnCount={ 4 } itemRender={ item => } items={ botItems } />