@cmk/fe_utils
Version:
frontend utility library
49 lines (46 loc) • 1.82 kB
text/typescript
import { EditorStateType, Element } from '../../editorRendererController'
import { getAdaptiveReferenceViewports } from './getAdaptiveReferfenceViewports'
export const doesElementChildrenBelongToViewport = (
element: Element,
currentViewport: string,
isCurrentViewportAutarkic: boolean | undefined,
allElements: Element[],
viewport_references: EditorStateType['viewport_references']
) => {
return (
((!currentViewport || currentViewport === 'xs') &&
(!element.viewport || element.viewport === 'xs')) ||
(isCurrentViewportAutarkic && element.viewport === currentViewport) ||
(() => {
if (
!currentViewport ||
currentViewport === 'xs' ||
isCurrentViewportAutarkic
)
return false
const adaptiveReferenceViewports = getAdaptiveReferenceViewports(
currentViewport,
viewport_references
)
const elementsAcrossViewports = allElements.filter(
(el) => el.parent_id === (element as Element)?.parent_id
)
const higherPrioViewports = adaptiveReferenceViewports.slice(
0,
adaptiveReferenceViewports.findIndex((vp) => vp === element.viewport)
)
const doesElementWithHigherPrioExist = higherPrioViewports.find((vp) =>
elementsAcrossViewports.find((el) => el.viewport === vp)
)
// if viewport specific children then only show them otherwise adaptive with default
const hasSpecificViewportChildren = elementsAcrossViewports?.find((el) =>
adaptiveReferenceViewports.includes(el?.viewport ?? 'xs')
)
return doesElementWithHigherPrioExist
? false
: hasSpecificViewportChildren
? adaptiveReferenceViewports.includes(element.viewport ?? 'xs')
: !element.viewport || element.viewport === 'xs'
})()
)
}