From de17341e19f4848bbdd9e6a149ae6a80aca144f3 Mon Sep 17 00:00:00 2001 From: Saleh Yusefnejad Date: Fri, 14 Mar 2025 20:53:11 +0330 Subject: [PATCH] fix after first render issues of BitCarousel #10252 --- .../Lists/Carousel/BitCarousel.razor.cs | 27 +++++++------- .../Bit.BlazorUI/Scripts/Observers.ts | 36 ++++++++++++------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs index 5f6328c118..0d0234b152 100644 --- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs +++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs @@ -210,7 +210,19 @@ protected override void OnParametersSet() protected override async Task OnAfterRenderAsync(bool firstRender) { - await base.OnAfterRenderAsync(firstRender); + if (firstRender) + { + await _js.BitObserversRegisterResize(UniqueId, RootElement, _dotnetObj); + + if (ScrollItemsCount > VisibleItemsCount) + { + _internalScrollItemsCount = VisibleItemsCount; + } + + await ResetDimensionsAsync(); + + await _pageVisibility.Init(); + } _directionStyle = Dir == BitDir.Rtl ? "direction:rtl" : string.Empty; @@ -228,18 +240,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) _autoPlayTimer = null; } - if (firstRender is false) return; - - await _pageVisibility.Init(); - - await _js.BitObserversRegisterResize(UniqueId, RootElement, _dotnetObj); - - if (ScrollItemsCount > VisibleItemsCount) - { - _internalScrollItemsCount = VisibleItemsCount; - } - - await ResetDimensionsAsync(); + await base.OnAfterRenderAsync(firstRender); } diff --git a/src/BlazorUI/Bit.BlazorUI/Scripts/Observers.ts b/src/BlazorUI/Bit.BlazorUI/Scripts/Observers.ts index 9fedf0bd9f..e7a52f8bd5 100644 --- a/src/BlazorUI/Bit.BlazorUI/Scripts/Observers.ts +++ b/src/BlazorUI/Bit.BlazorUI/Scripts/Observers.ts @@ -3,24 +3,36 @@ private static _resizeObservers: Record = {}; public static registerResize(id: string, element: HTMLElement, obj: DotNetObject) { - const observer = new ResizeObserver(entries => { - const entry = entries[0]; - if (!entry) return; + if (!element || !(element instanceof Element)) return; - obj.invokeMethodAsync("OnResize", entry.contentRect); - }); - observer.observe(element); + try { + const observer = new ResizeObserver(entries => { + const entry = entries[0]; + if (!entry) return; - Observers._resizeObservers[id] = observer; + obj.invokeMethodAsync("OnResize", entry.contentRect); + }); + observer.observe(element); + + Observers._resizeObservers[id] = observer; + } catch (err) { + console.error(err); + } } public static unregisterResize(id: string, element: HTMLElement, obj: DotNetObject) { - const observer = Observers._resizeObservers[id]; - if (!observer) return; + if (!element || !(element instanceof Element)) return; + + try { + const observer = Observers._resizeObservers[id]; + if (!observer) return; - observer.unobserve(element); - delete Observers._resizeObservers[id]; - obj.dispose(); + observer.unobserve(element); + delete Observers._resizeObservers[id]; + obj.dispose(); + } catch (err) { + console.error(err); + } } } }