UNPKG

reka-ui

Version:

Vue port for Radix UI Primitives.

46 lines (38 loc) 1.27 kB
import type { PanelData } from '../SplitterPanel.vue' import { assert } from './assert' // Layout should be pre-converted into percentages export function callPanelCallbacks( panelsArray: PanelData[], layout: number[], panelIdToLastNotifiedSizeMap: Record<string, number>, ) { layout.forEach((size, index) => { const panelData = panelsArray[index] assert(panelData) const { callbacks, constraints, id: panelId } = panelData const { collapsedSize = 0, collapsible } = constraints const lastNotifiedSize = panelIdToLastNotifiedSizeMap[panelId] if (lastNotifiedSize == null || size !== lastNotifiedSize) { panelIdToLastNotifiedSizeMap[panelId] = size const { onCollapse, onExpand, onResize } = callbacks if (onResize) onResize(size, lastNotifiedSize) if (collapsible && (onCollapse || onExpand)) { if ( onExpand && (lastNotifiedSize == null || lastNotifiedSize === collapsedSize) && size !== collapsedSize ) { onExpand() } if ( onCollapse && (lastNotifiedSize == null || lastNotifiedSize !== collapsedSize) && size === collapsedSize ) { onCollapse() } } } }) }