MCPcopy Create free account
hub / github.com/astercloud/aster / useStreamingState

Function useStreamingState

ui/src/composables/useStreamingState.ts:94–268  ·  view source on GitHub ↗
(options: UseStreamingStateOptions)

Source from the content-addressed store, hash-verified

92 * ```
93 */
94export function useStreamingState(options: UseStreamingStateOptions) {
95 const {
96 surfaceId,
97 containerRef,
98 preserveScroll = true,
99 preserveFocus = true,
100 } = options;
101
102 const isRestoring = ref(false);
103
104 /**
105 * Save current scroll positions within the container
106 */
107 function saveScrollPositions(): void {
108 if (!preserveScroll || !containerRef.value) return;
109
110 const state = getPreservedState(surfaceId);
111 state.scrollPositions.clear();
112
113 // Save container scroll position
114 state.scrollPositions.set('__container__', {
115 top: containerRef.value.scrollTop,
116 left: containerRef.value.scrollLeft,
117 });
118
119 // Save scroll positions of scrollable children
120 const scrollableElements = containerRef.value.querySelectorAll('[data-scroll-preserve]');
121 scrollableElements.forEach((el) => {
122 const id = el.getAttribute('data-scroll-preserve') || el.id;
123 if (id) {
124 state.scrollPositions.set(id, {
125 top: (el as HTMLElement).scrollTop,
126 left: (el as HTMLElement).scrollLeft,
127 });
128 }
129 });
130 }
131
132 /**
133 * Restore saved scroll positions
134 */
135 function restoreScrollPositions(): void {
136 if (!preserveScroll || !containerRef.value) return;
137
138 const state = getPreservedState(surfaceId);
139
140 // Restore container scroll position
141 const containerScroll = state.scrollPositions.get('__container__');
142 if (containerScroll) {
143 containerRef.value.scrollTop = containerScroll.top;
144 containerRef.value.scrollLeft = containerScroll.left;
145 }
146
147 // Restore scroll positions of scrollable children
148 state.scrollPositions.forEach((pos, id) => {
149 if (id === '__container__') return;
150
151 const el = containerRef.value?.querySelector(`[data-scroll-preserve="${id}"]`)

Callers

nothing calls this directly

Calls 1

clearStateFunction · 0.85

Tested by

no test coverage detected