From 8fa376ef946317441f27a408067eecf101131684 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Fri, 27 Feb 2026 12:49:13 +0300 Subject: [PATCH] feat(handleTitleStatusChanged): create reusable handler for sections title status management --- .../handleTitleStatusChanged.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/entities/Breadcrumb/model/services/handleTitleStatusChanged/handleTitleStatusChanged.ts diff --git a/src/entities/Breadcrumb/model/services/handleTitleStatusChanged/handleTitleStatusChanged.ts b/src/entities/Breadcrumb/model/services/handleTitleStatusChanged/handleTitleStatusChanged.ts new file mode 100644 index 0000000..7e53688 --- /dev/null +++ b/src/entities/Breadcrumb/model/services/handleTitleStatusChanged/handleTitleStatusChanged.ts @@ -0,0 +1,29 @@ +import type { TitleStatusChangeHandler } from '$shared/ui'; +import type { Snippet } from 'svelte'; +import { scrollBreadcrumbsStore } from '../../store/scrollBreadcrumbsStore.svelte'; + +/** + * Updates the breadcrumb store when the title visibility status changes. + * + * @param index - Index of the section + * @param isPast - Whether the section is past the current scroll position + * @param title - Snippet for a title itself + * @param id - ID of the section + * @returns Cleanup callback + */ +export const handleTitleStatusChanged: TitleStatusChangeHandler = ( + index: number, + isPast: boolean, + title?: Snippet<[{ className?: string }]>, + id?: string, +) => { + if (isPast && title) { + scrollBreadcrumbsStore.add({ index, title, id }); + } else { + scrollBreadcrumbsStore.remove(index); + } + + return () => { + scrollBreadcrumbsStore.remove(index); + }; +};