@vkontakte/vkui 8.1.2 → 8.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/NavTransitionContext/NavTransitionContext.d.ts +2 -1
- package/dist/components/NavTransitionContext/NavTransitionContext.d.ts.map +1 -1
- package/dist/components/NavTransitionContext/NavTransitionContext.js +8 -4
- package/dist/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js +2 -4
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
- package/dist/components/Popper/Popper.d.ts.map +1 -1
- package/dist/components/Popper/Popper.js +6 -3
- package/dist/components/Popper/Popper.js.map +1 -1
- package/dist/components/Root/Root.d.ts.map +1 -1
- package/dist/components/Root/Root.js +29 -32
- package/dist/components/Root/Root.js.map +1 -1
- package/dist/components/View/View.d.ts.map +1 -1
- package/dist/components/View/View.js +50 -53
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.d.ts.map +1 -1
- package/dist/components/View/ViewInfinite.js +34 -37
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js +8 -4
- package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +2 -4
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
- package/dist/cssm/components/Popper/Popper.js +6 -3
- package/dist/cssm/components/Popper/Popper.js.map +1 -1
- package/dist/cssm/components/Root/Root.js +29 -32
- package/dist/cssm/components/Root/Root.js.map +1 -1
- package/dist/cssm/components/View/View.js +50 -53
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/ViewInfinite.js +34 -37
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +4 -4
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +4 -4
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/package.json +1 -1
- package/src/components/NavTransitionContext/NavTransitionContext.tsx +5 -1
- package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +2 -5
- package/src/components/Popper/Popper.tsx +7 -4
- package/src/components/Root/Root.tsx +50 -52
- package/src/components/View/View.tsx +83 -89
- package/src/components/View/ViewInfinite.tsx +65 -69
- package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +4 -5
- package/dist/cssm/lib/floating/LockFloatingPosition/LockFloatingPosition.js +0 -6
- package/dist/cssm/lib/floating/LockFloatingPosition/LockFloatingPosition.js.map +0 -1
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.d.ts +0 -6
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.d.ts.map +0 -1
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.js +0 -6
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.js.map +0 -1
- package/src/lib/floating/LockFloatingPosition/LockFloatingPosition.tsx +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/View/View.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { blurActiveElement, useDOM } from '../../lib/dom';\nimport { LockFloatingPositionContext } from '../../lib/floating/LockFloatingPosition/LockFloatingPosition';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { useScroll } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { NavViewIdContext } from '../NavIdContext/NavIdContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { useSplitCol } from '../SplitCol/SplitColContext';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport { useLayoutEffectCall } from './useLayoutEffectCall';\nimport {\n getSwipeBackPredicates,\n hasHorizontalScrollableElementWithScrolledToLeft,\n swipeBackExcluded,\n} from './utils';\nimport styles from './View.module.css';\n\nexport const scrollsCache = new Map<string, Map<string, number | undefined>>();\n\nexport interface ViewProps extends HTMLAttributesWithRootRef<HTMLElement>, NavIdProps {\n /**\n * `id` активной панели.\n */\n activePanel: string;\n /**\n * Обработчик, который вызывается при завершении анимации смены активной панели.\n */\n onTransition?: (params: { isBack: boolean; from: string; to: string }) => void;\n /**\n * Обработчик свайпа назад.\n */\n onSwipeBack?: (() => void) | undefined;\n /**\n * Обработчик начала анимации свайпа назад.\n *\n * Чтобы остановить свайп назад, возвращайте `\"prevent\"`.\n */\n onSwipeBackStart?: ((activePanel: string | null) => void | 'prevent') | undefined;\n /**\n * Обработчик завершения анимации отмененного пользователем свайпа.\n */\n onSwipeBackCancel?: (() => void) | undefined;\n /**\n * Массив из id панелей в порядке открытия.\n */\n history?: string[] | undefined;\n /**\n * Коллекция Panel. У каждой Panel должен быть уникальный `id`.\n */\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\nconst warn = warnOnce('View');\n\n/**\n * @see https://vkui.io/components/view\n */\nexport const View = ({\n activePanel: activePanelProp,\n history,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel: onSwipeBackCancelProp,\n children,\n className,\n ...restProps\n}: ViewProps): React.ReactNode => {\n const id = getNavId({ nav, id: restProps.id });\n const [scrolls] = React.useState(\n () => scrollsCache.get(id as string) || new Map<string, number | undefined>(),\n );\n const layoutEffectCall = useLayoutEffectCall();\n\n React.useEffect(() => () => {\n if (id) {\n scrollsCache.set(id, scrolls);\n }\n });\n\n const panelNodes = React.useRef<{ [id: string]: HTMLDivElement | null }>({});\n\n const { window, document } = useDOM();\n const scroll = useScroll();\n const configProvider = useConfigProvider();\n const splitCol = useSplitCol();\n const platform = usePlatform();\n\n const [animated, setAnimated] = React.useState(false);\n\n const [visiblePanels, setVisiblePanels] = React.useState([activePanelProp]);\n const [activePanel, setActivePanel] = React.useState<string | null>(activePanelProp);\n const [isBack, setIsBack] = React.useState<boolean | undefined>(undefined);\n const [prevPanel, setPrevPanel] = React.useState<string | null>(null);\n const [nextPanel, setNextPanel] = React.useState<string | null>(null);\n\n const swipeBackPrevented = React.useRef<boolean>(false);\n const [swipingBack, setSwipingBack] = React.useState<boolean | undefined>(undefined);\n const [swipeBackStartX, setSwipeBackStartX] = React.useState<number>(0);\n const [swipeBackShift, setSwipeBackShift] = React.useState<number>(0);\n const [swipeBackNextPanel, setSwipeBackNextPanel] = React.useState<string | null>(null);\n const [swipeBackPrevPanel, setSwipeBackPrevPanel] = React.useState<string | null>(null);\n const [swipeBackResult, setSwipeBackResult] = React.useState<'success' | 'fail' | null>(null);\n\n const [browserSwipe, setBrowserSwipe] = React.useState(false);\n\n const prevActivePanel = React.useRef<string>(undefined);\n const prevSwipingBack = React.useRef<boolean>(undefined);\n const prevBrowserSwipe = React.useRef<boolean>(undefined);\n const prevSwipeBackResult = React.useRef<'success' | 'fail' | null>(undefined);\n const prevSwipeBackShift = React.useRef<number>(undefined);\n const prevSwipeBackPrevPanel = React.useRef<string | null>(undefined);\n const prevOnTransition = React.useRef<typeof onTransition>(undefined);\n\n const panels = (React.Children.toArray(children) as Array<React.ReactElement<NavIdProps>>).filter(\n (panel) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n },\n );\n\n const disableAnimation =\n !configProvider.transitionMotionEnabled || !splitCol.animate || platform === 'vkcom';\n const iOSSwipeBackSimulationEnabled =\n !disableAnimation && platform === 'ios' && configProvider.isWebView && Boolean(onSwipeBack);\n\n const flushTransition = React.useCallback(\n (prevPanel: string, isBackTransition: boolean) => {\n if (isBackTransition) {\n scrolls.set(prevPanel, 0);\n }\n setPrevPanel(null);\n setNextPanel(null);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n setAnimated(false);\n setIsBack(isBackTransition);\n\n layoutEffectCall(() => {\n scroll?.scrollTo(0, isBackTransition ? scrolls.get(activePanelProp) : 0);\n onTransition &&\n onTransition({\n isBack: isBackTransition,\n from: prevPanel,\n to: activePanelProp,\n });\n });\n },\n [activePanelProp, layoutEffectCall, onTransition, scroll, scrolls],\n );\n\n const handleAnimatedTargetAnimationEnd: React.AnimationEventHandler<HTMLDivElement> = (e) => {\n if (e.target !== e.currentTarget) {\n return;\n }\n\n if (prevPanel !== null) {\n flushTransition(prevPanel, Boolean(isBack));\n }\n };\n\n const onSwipeBackSuccess = React.useCallback(() => {\n onSwipeBack && onSwipeBack();\n }, [onSwipeBack]);\n\n const onSwipeBackCancel = React.useCallback(() => {\n onSwipeBackCancelProp && onSwipeBackCancelProp();\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n }, [onSwipeBackCancelProp]);\n\n const swipingBackTransitionEndHandler = React.useCallback(() => {\n switch (swipeBackResult) {\n case 'fail':\n onSwipeBackCancel();\n break;\n case 'success':\n onSwipeBackSuccess();\n }\n }, [onSwipeBackCancel, onSwipeBackSuccess, swipeBackResult]);\n\n const handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext = (event: CustomTouchEvent) => {\n if (browserSwipe) {\n return;\n }\n const { swipeBackTriggered, viewportStartEdgeTouched, viewportEndEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, window!.innerWidth);\n\n if ((viewportStartEdgeTouched || viewportEndEdgeTouched) && swipeBackTriggered) {\n setBrowserSwipe(true);\n }\n };\n\n const handleTouchMoveXForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n if (swipeBackPrevented.current || swipeBackExcluded(event)) {\n return;\n }\n\n const { swipedToOpposite, swipeBackTriggered, viewportStartEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, window!.innerWidth);\n\n if (animated && swipeBackTriggered) {\n return;\n }\n\n if (!swipingBack && history && history.length > 1) {\n if (swipedToOpposite) {\n swipeBackPrevented.current = true;\n return;\n }\n\n if (!swipeBackTriggered) {\n return;\n }\n\n if (\n !viewportStartEdgeTouched &&\n hasHorizontalScrollableElementWithScrolledToLeft(event.originalEvent.target as HTMLElement)\n ) {\n swipeBackPrevented.current = true;\n return;\n }\n // Начался свайп назад\n if (onSwipeBackStart) {\n const payload = onSwipeBackStart(activePanel);\n if (payload === 'prevent') {\n swipeBackPrevented.current = true;\n return;\n }\n }\n\n if (activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n blurActiveElement(document);\n scrolls.set(activePanel, scroll?.getScroll().y);\n }\n\n setSwipingBack(true);\n setSwipeBackStartX(event.startX);\n setSwipeBackPrevPanel(activePanel);\n setSwipeBackNextPanel(history.slice(-2)[0]);\n }\n\n if (swipingBack) {\n if (event.shiftX < 0) {\n setSwipeBackShift(0);\n } else if (event.shiftX > window!.innerWidth - swipeBackStartX) {\n setSwipeBackShift(window!.innerWidth);\n } else {\n setSwipeBackShift(event.shiftX);\n }\n }\n };\n\n const handleTouchEndForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n swipeBackPrevented.current = false;\n if (swipingBack) {\n const speed = (swipeBackShift / event.duration) * millisecondsInSecond;\n if (swipeBackShift === 0) {\n onSwipeBackCancel();\n } else if (swipeBackShift >= (window!.innerWidth ?? 0)) {\n onSwipeBackSuccess();\n } else if (speed > 250 || swipeBackShift >= window!.innerWidth / 2) {\n setSwipeBackResult('success');\n } else {\n setSwipeBackResult('fail');\n }\n }\n };\n\n const calcPanelSwipeStyles = (isPrev: boolean, isNext: boolean): React.CSSProperties => {\n if ((!isPrev && !isNext) || swipeBackResult) {\n return {};\n }\n\n if (isNext) {\n return window\n ? {\n transform: `translate3d(${-50 + (swipeBackShift * 100) / window.innerWidth / 2}%, 0, 0)`,\n }\n : {};\n }\n\n if (isPrev) {\n return { transform: `translate3d(${swipeBackShift}px, 0, 0)` };\n }\n\n return {};\n };\n\n const calcPanelSwipeBackOverlayStyles = (isNext: boolean): React.CSSProperties => {\n if (!window || !isNext) {\n return {};\n }\n const opacityOnSwipeEnd =\n swipeBackResult === 'success' ? 0 : swipeBackResult === 'fail' ? 1 : null;\n\n return {\n display: 'block',\n opacity:\n opacityOnSwipeEnd === null ? 1 - swipeBackShift / window.innerWidth : opacityOnSwipeEnd,\n };\n };\n\n const handleSwipeBackTargetTransitionEnd = (event: React.TransitionEvent<HTMLDivElement>) => {\n if (event.propertyName.includes('transform')) {\n swipingBackTransitionEndHandler();\n }\n };\n\n React.useEffect(() => {\n // Нужен переход\n if (\n prevActivePanel.current &&\n prevActivePanel.current !== activePanelProp &&\n !prevSwipingBack.current &&\n !prevBrowserSwipe.current\n ) {\n const firstLayerId = (\n React.Children.toArray(children) as Array<React.ReactElement<NavIdProps>>\n )\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevActivePanel.current || id === activePanelProp);\n\n const isBackTransition = firstLayerId === activePanelProp;\n scrolls.set(\n prevActivePanel.current,\n scroll?.getScroll({ compensateKeyboardHeight: false }).y,\n );\n\n if (disableAnimation) {\n flushTransition(prevActivePanel.current, isBackTransition);\n } else {\n blurActiveElement(document);\n\n setVisiblePanels([prevActivePanel.current, activePanelProp]);\n setPrevPanel(prevActivePanel.current);\n setNextPanel(activePanelProp);\n setActivePanel(null);\n setAnimated(true);\n setIsBack(isBackTransition);\n }\n }\n\n // Закончилась анимация свайпа назад\n if (\n prevActivePanel.current &&\n prevActivePanel.current !== activePanelProp &&\n prevSwipingBack.current\n ) {\n const nextPanel = activePanelProp;\n const prevPanel = prevActivePanel.current;\n if (prevSwipeBackPrevPanel.current) {\n scrolls.set(prevSwipeBackPrevPanel.current, 0);\n }\n\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n setActivePanel(nextPanel);\n setVisiblePanels([nextPanel]);\n setIsBack(true);\n\n layoutEffectCall(() => {\n if (nextPanel !== null) {\n scroll?.scrollTo(0, scrolls.get(nextPanel));\n }\n prevOnTransition.current &&\n prevOnTransition.current({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n });\n }\n\n // Началась анимация завершения свайпа назад.\n // см. `onTransitionEnd()`\n\n // Закончился Safari свайп\n if (prevActivePanel.current !== activePanelProp && browserSwipe) {\n setBrowserSwipe(false);\n setNextPanel(null);\n setPrevPanel(null);\n setAnimated(false);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n }\n }, [\n activePanelProp,\n activePanel,\n browserSwipe,\n children,\n disableAnimation,\n document,\n flushTransition,\n scroll,\n swipeBackNextPanel,\n swipeBackResult,\n layoutEffectCall,\n scrolls,\n ]);\n\n React.useEffect(\n function restoreScrollPositionWhenSwipeBackIsCancelled() {\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n const swipeBackCancelledInTheMiddleOfAction =\n prevSwipeBackResult.current === 'fail' && !swipeBackResult;\n const swipeBackCancelledByMovingPanelBackToInitialPoint =\n prevSwipingBack.current && !swipingBack && prevSwipeBackShift.current === 0;\n\n if (\n (swipeBackCancelledInTheMiddleOfAction ||\n swipeBackCancelledByMovingPanelBackToInitialPoint) &&\n activePanel !== null\n ) {\n scroll?.scrollTo(0, scrolls.get(activePanel));\n }\n },\n [swipeBackResult, swipingBack, activePanel, scroll, scrolls],\n );\n\n /**\n * @see https://github.com/VKCOM/VKUI/pull/9274\n */\n React.useEffect(function updateAfterAll() {\n prevActivePanel.current = activePanelProp;\n prevSwipingBack.current = swipingBack;\n prevBrowserSwipe.current = browserSwipe;\n prevSwipeBackResult.current = swipeBackResult;\n prevSwipeBackShift.current = swipeBackShift;\n prevSwipeBackPrevPanel.current = swipeBackPrevPanel;\n prevOnTransition.current = onTransition;\n });\n\n return (\n <NavViewIdContext.Provider value={id}>\n <LockFloatingPositionContext.Provider value={swipingBack || animated}>\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles.host,\n platform === 'ios' && classNames(styles.ios, 'vkuiInternalView--ios'),\n !disableAnimation && animated && styles.animated,\n !disableAnimation && swipingBack && styles.swipingBack,\n disableAnimation && styles.noMotion,\n className,\n )}\n onMoveX={\n iOSSwipeBackSimulationEnabled\n ? handleTouchMoveXForIOSSwipeBackSimulation\n : platform === 'ios'\n ? handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext\n : undefined\n }\n onEnd={\n iOSSwipeBackSimulationEnabled ? handleTouchEndForIOSSwipeBackSimulation : undefined\n }\n >\n <div className={styles.panels}>\n {panels.map((panel) => {\n const panelId = getNavId(panel.props, warn);\n\n const isPanelActive = panelId === activePanel;\n const isPanelPrev = panelId === prevPanel;\n const isPanelNext = panelId === nextPanel;\n const isAnimatedTarget = animated && (isBack ? isPanelPrev : isPanelNext);\n\n const isSwipeBackPrev = panelId === swipeBackPrevPanel;\n const isSwipeBackNext = panelId === swipeBackNextPanel;\n const isSwipeBackTarget = swipeBackResult && isSwipeBackPrev;\n\n let scrollCompensateStyle: React.CSSProperties | undefined = undefined;\n\n if (isPanelPrev || (isPanelNext && isBack) || isSwipeBackPrev || isSwipeBackNext) {\n const marginTop = scrolls.get(panelId);\n if (marginTop !== undefined) {\n scrollCompensateStyle = { marginTop: -1 * marginTop };\n }\n }\n\n return (\n <div\n className={classNames(\n styles.panel,\n\n isPanelActive && styles.panelActive,\n isPanelPrev && styles.panelPrev,\n isPanelNext && styles.panelNext,\n\n isSwipeBackPrev && styles.panelSwipeBackPrev,\n isSwipeBackNext && styles.panelSwipeBackNext,\n swipeBackResult === 'success' && styles.panelSwipeBackSuccess,\n swipeBackResult === 'fail' && styles.panelSwipeBackFailed,\n )}\n onTransitionEnd={\n isSwipeBackTarget ? handleSwipeBackTargetTransitionEnd : undefined\n }\n onAnimationEnd={isAnimatedTarget ? handleAnimatedTargetAnimationEnd : undefined}\n ref={(el) => {\n panelId !== undefined && (panelNodes.current[panelId] = el);\n }}\n style={calcPanelSwipeStyles(isSwipeBackPrev, isSwipeBackNext)}\n key={panelId}\n >\n {platform === 'ios' && (\n <div\n className={styles.panelOverlay}\n style={calcPanelSwipeBackOverlayStyles(isSwipeBackNext)}\n />\n )}\n <div className={styles.panelIn} style={scrollCompensateStyle}>\n <NavTransitionDirectionProvider isBack={swipingBack || isBack}>\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n >\n {panel}\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n </LockFloatingPositionContext.Provider>\n </NavViewIdContext.Provider>\n );\n};\n"],"names":["React","classNames","usePlatform","millisecondsInSecond","blurActiveElement","useDOM","LockFloatingPositionContext","getNavId","warnOnce","useScroll","useConfigProvider","NavViewIdContext","NavTransitionProvider","NavTransitionDirectionProvider","useSplitCol","Touch","useLayoutEffectCall","getSwipeBackPredicates","hasHorizontalScrollableElementWithScrolledToLeft","swipeBackExcluded","scrollsCache","Map","warn","View","activePanel","activePanelProp","history","nav","onTransition","onSwipeBack","onSwipeBackStart","onSwipeBackCancel","onSwipeBackCancelProp","children","className","restProps","id","scrolls","useState","get","layoutEffectCall","useEffect","set","panelNodes","useRef","window","document","scroll","configProvider","splitCol","platform","animated","setAnimated","visiblePanels","setVisiblePanels","setActivePanel","isBack","setIsBack","undefined","prevPanel","setPrevPanel","nextPanel","setNextPanel","swipeBackPrevented","swipingBack","setSwipingBack","swipeBackStartX","setSwipeBackStartX","swipeBackShift","setSwipeBackShift","swipeBackNextPanel","setSwipeBackNextPanel","swipeBackPrevPanel","setSwipeBackPrevPanel","swipeBackResult","setSwipeBackResult","browserSwipe","setBrowserSwipe","prevActivePanel","prevSwipingBack","prevBrowserSwipe","prevSwipeBackResult","prevSwipeBackShift","prevSwipeBackPrevPanel","prevOnTransition","panels","Children","toArray","filter","panel","panelId","props","includes","disableAnimation","transitionMotionEnabled","animate","iOSSwipeBackSimulationEnabled","isWebView","Boolean","flushTransition","useCallback","isBackTransition","scrollTo","from","to","handleAnimatedTargetAnimationEnd","e","target","currentTarget","onSwipeBackSuccess","swipingBackTransitionEndHandler","handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext","event","swipeBackTriggered","viewportStartEdgeTouched","viewportEndEdgeTouched","startX","shiftX","innerWidth","handleTouchMoveXForIOSSwipeBackSimulation","current","swipedToOpposite","length","originalEvent","payload","getScroll","y","slice","handleTouchEndForIOSSwipeBackSimulation","speed","duration","calcPanelSwipeStyles","isPrev","isNext","transform","calcPanelSwipeBackOverlayStyles","opacityOnSwipeEnd","display","opacity","handleSwipeBackTargetTransitionEnd","propertyName","firstLayerId","map","find","compensateKeyboardHeight","restoreScrollPositionWhenSwipeBackIsCancelled","swipeBackCancelledInTheMiddleOfAction","swipeBackCancelledByMovingPanelBackToInitialPoint","updateAfterAll","Provider","value","Component","onMoveX","onEnd","div","isPanelActive","isPanelPrev","isPanelNext","isAnimatedTarget","isSwipeBackPrev","isSwipeBackNext","isSwipeBackTarget","scrollCompensateStyle","marginTop","onTransitionEnd","onAnimationEnd","ref","el","style","entering"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/View/View.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { blurActiveElement, useDOM } from '../../lib/dom';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { useScroll } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { NavViewIdContext } from '../NavIdContext/NavIdContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { useSplitCol } from '../SplitCol/SplitColContext';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport { useLayoutEffectCall } from './useLayoutEffectCall';\nimport {\n getSwipeBackPredicates,\n hasHorizontalScrollableElementWithScrolledToLeft,\n swipeBackExcluded,\n} from './utils';\nimport styles from './View.module.css';\n\nexport const scrollsCache = new Map<string, Map<string, number | undefined>>();\n\nexport interface ViewProps extends HTMLAttributesWithRootRef<HTMLElement>, NavIdProps {\n /**\n * `id` активной панели.\n */\n activePanel: string;\n /**\n * Обработчик, который вызывается при завершении анимации смены активной панели.\n */\n onTransition?: (params: { isBack: boolean; from: string; to: string }) => void;\n /**\n * Обработчик свайпа назад.\n */\n onSwipeBack?: (() => void) | undefined;\n /**\n * Обработчик начала анимации свайпа назад.\n *\n * Чтобы остановить свайп назад, возвращайте `\"prevent\"`.\n */\n onSwipeBackStart?: ((activePanel: string | null) => void | 'prevent') | undefined;\n /**\n * Обработчик завершения анимации отмененного пользователем свайпа.\n */\n onSwipeBackCancel?: (() => void) | undefined;\n /**\n * Массив из id панелей в порядке открытия.\n */\n history?: string[] | undefined;\n /**\n * Коллекция Panel. У каждой Panel должен быть уникальный `id`.\n */\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\nconst warn = warnOnce('View');\n\n/**\n * @see https://vkui.io/components/view\n */\nexport const View = ({\n activePanel: activePanelProp,\n history,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel: onSwipeBackCancelProp,\n children,\n className,\n ...restProps\n}: ViewProps): React.ReactNode => {\n const id = getNavId({ nav, id: restProps.id });\n const [scrolls] = React.useState(\n () => scrollsCache.get(id as string) || new Map<string, number | undefined>(),\n );\n const layoutEffectCall = useLayoutEffectCall();\n\n React.useEffect(() => () => {\n if (id) {\n scrollsCache.set(id, scrolls);\n }\n });\n\n const panelNodes = React.useRef<{ [id: string]: HTMLDivElement | null }>({});\n\n const { window, document } = useDOM();\n const scroll = useScroll();\n const configProvider = useConfigProvider();\n const splitCol = useSplitCol();\n const platform = usePlatform();\n\n const [animated, setAnimated] = React.useState(false);\n\n const [visiblePanels, setVisiblePanels] = React.useState([activePanelProp]);\n const [activePanel, setActivePanel] = React.useState<string | null>(activePanelProp);\n const [isBack, setIsBack] = React.useState<boolean | undefined>(undefined);\n const [prevPanel, setPrevPanel] = React.useState<string | null>(null);\n const [nextPanel, setNextPanel] = React.useState<string | null>(null);\n\n const swipeBackPrevented = React.useRef<boolean>(false);\n const [swipingBack, setSwipingBack] = React.useState<boolean | undefined>(undefined);\n const [swipeBackStartX, setSwipeBackStartX] = React.useState<number>(0);\n const [swipeBackShift, setSwipeBackShift] = React.useState<number>(0);\n const [swipeBackNextPanel, setSwipeBackNextPanel] = React.useState<string | null>(null);\n const [swipeBackPrevPanel, setSwipeBackPrevPanel] = React.useState<string | null>(null);\n const [swipeBackResult, setSwipeBackResult] = React.useState<'success' | 'fail' | null>(null);\n\n const [browserSwipe, setBrowserSwipe] = React.useState(false);\n\n const prevActivePanel = React.useRef<string>(undefined);\n const prevSwipingBack = React.useRef<boolean>(undefined);\n const prevBrowserSwipe = React.useRef<boolean>(undefined);\n const prevSwipeBackResult = React.useRef<'success' | 'fail' | null>(undefined);\n const prevSwipeBackShift = React.useRef<number>(undefined);\n const prevSwipeBackPrevPanel = React.useRef<string | null>(undefined);\n const prevOnTransition = React.useRef<typeof onTransition>(undefined);\n\n const panels = (React.Children.toArray(children) as Array<React.ReactElement<NavIdProps>>).filter(\n (panel) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n },\n );\n\n const disableAnimation =\n !configProvider.transitionMotionEnabled || !splitCol.animate || platform === 'vkcom';\n const iOSSwipeBackSimulationEnabled =\n !disableAnimation && platform === 'ios' && configProvider.isWebView && Boolean(onSwipeBack);\n\n const flushTransition = React.useCallback(\n (prevPanel: string, isBackTransition: boolean) => {\n if (isBackTransition) {\n scrolls.set(prevPanel, 0);\n }\n setPrevPanel(null);\n setNextPanel(null);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n setAnimated(false);\n setIsBack(isBackTransition);\n\n layoutEffectCall(() => {\n scroll?.scrollTo(0, isBackTransition ? scrolls.get(activePanelProp) : 0);\n onTransition &&\n onTransition({\n isBack: isBackTransition,\n from: prevPanel,\n to: activePanelProp,\n });\n });\n },\n [activePanelProp, layoutEffectCall, onTransition, scroll, scrolls],\n );\n\n const handleAnimatedTargetAnimationEnd: React.AnimationEventHandler<HTMLDivElement> = (e) => {\n if (e.target !== e.currentTarget) {\n return;\n }\n\n if (prevPanel !== null) {\n flushTransition(prevPanel, Boolean(isBack));\n }\n };\n\n const onSwipeBackSuccess = React.useCallback(() => {\n onSwipeBack && onSwipeBack();\n }, [onSwipeBack]);\n\n const onSwipeBackCancel = React.useCallback(() => {\n onSwipeBackCancelProp && onSwipeBackCancelProp();\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n }, [onSwipeBackCancelProp]);\n\n const swipingBackTransitionEndHandler = React.useCallback(() => {\n switch (swipeBackResult) {\n case 'fail':\n onSwipeBackCancel();\n break;\n case 'success':\n onSwipeBackSuccess();\n }\n }, [onSwipeBackCancel, onSwipeBackSuccess, swipeBackResult]);\n\n const handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext = (event: CustomTouchEvent) => {\n if (browserSwipe) {\n return;\n }\n const { swipeBackTriggered, viewportStartEdgeTouched, viewportEndEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, window!.innerWidth);\n\n if ((viewportStartEdgeTouched || viewportEndEdgeTouched) && swipeBackTriggered) {\n setBrowserSwipe(true);\n }\n };\n\n const handleTouchMoveXForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n if (swipeBackPrevented.current || swipeBackExcluded(event)) {\n return;\n }\n\n const { swipedToOpposite, swipeBackTriggered, viewportStartEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, window!.innerWidth);\n\n if (animated && swipeBackTriggered) {\n return;\n }\n\n if (!swipingBack && history && history.length > 1) {\n if (swipedToOpposite) {\n swipeBackPrevented.current = true;\n return;\n }\n\n if (!swipeBackTriggered) {\n return;\n }\n\n if (\n !viewportStartEdgeTouched &&\n hasHorizontalScrollableElementWithScrolledToLeft(event.originalEvent.target as HTMLElement)\n ) {\n swipeBackPrevented.current = true;\n return;\n }\n // Начался свайп назад\n if (onSwipeBackStart) {\n const payload = onSwipeBackStart(activePanel);\n if (payload === 'prevent') {\n swipeBackPrevented.current = true;\n return;\n }\n }\n\n if (activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n blurActiveElement(document);\n scrolls.set(activePanel, scroll?.getScroll().y);\n }\n\n setSwipingBack(true);\n setSwipeBackStartX(event.startX);\n setSwipeBackPrevPanel(activePanel);\n setSwipeBackNextPanel(history.slice(-2)[0]);\n }\n\n if (swipingBack) {\n if (event.shiftX < 0) {\n setSwipeBackShift(0);\n } else if (event.shiftX > window!.innerWidth - swipeBackStartX) {\n setSwipeBackShift(window!.innerWidth);\n } else {\n setSwipeBackShift(event.shiftX);\n }\n }\n };\n\n const handleTouchEndForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n swipeBackPrevented.current = false;\n if (swipingBack) {\n const speed = (swipeBackShift / event.duration) * millisecondsInSecond;\n if (swipeBackShift === 0) {\n onSwipeBackCancel();\n } else if (swipeBackShift >= (window!.innerWidth ?? 0)) {\n onSwipeBackSuccess();\n } else if (speed > 250 || swipeBackShift >= window!.innerWidth / 2) {\n setSwipeBackResult('success');\n } else {\n setSwipeBackResult('fail');\n }\n }\n };\n\n const calcPanelSwipeStyles = (isPrev: boolean, isNext: boolean): React.CSSProperties => {\n if ((!isPrev && !isNext) || swipeBackResult) {\n return {};\n }\n\n if (isNext) {\n return window\n ? {\n transform: `translate3d(${-50 + (swipeBackShift * 100) / window.innerWidth / 2}%, 0, 0)`,\n }\n : {};\n }\n\n if (isPrev) {\n return { transform: `translate3d(${swipeBackShift}px, 0, 0)` };\n }\n\n return {};\n };\n\n const calcPanelSwipeBackOverlayStyles = (isNext: boolean): React.CSSProperties => {\n if (!window || !isNext) {\n return {};\n }\n const opacityOnSwipeEnd =\n swipeBackResult === 'success' ? 0 : swipeBackResult === 'fail' ? 1 : null;\n\n return {\n display: 'block',\n opacity:\n opacityOnSwipeEnd === null ? 1 - swipeBackShift / window.innerWidth : opacityOnSwipeEnd,\n };\n };\n\n const handleSwipeBackTargetTransitionEnd = (event: React.TransitionEvent<HTMLDivElement>) => {\n if (event.propertyName.includes('transform')) {\n swipingBackTransitionEndHandler();\n }\n };\n\n React.useEffect(() => {\n // Нужен переход\n if (\n prevActivePanel.current &&\n prevActivePanel.current !== activePanelProp &&\n !prevSwipingBack.current &&\n !prevBrowserSwipe.current\n ) {\n const firstLayerId = (\n React.Children.toArray(children) as Array<React.ReactElement<NavIdProps>>\n )\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevActivePanel.current || id === activePanelProp);\n\n const isBackTransition = firstLayerId === activePanelProp;\n scrolls.set(\n prevActivePanel.current,\n scroll?.getScroll({ compensateKeyboardHeight: false }).y,\n );\n\n if (disableAnimation) {\n flushTransition(prevActivePanel.current, isBackTransition);\n } else {\n blurActiveElement(document);\n\n setVisiblePanels([prevActivePanel.current, activePanelProp]);\n setPrevPanel(prevActivePanel.current);\n setNextPanel(activePanelProp);\n setActivePanel(null);\n setAnimated(true);\n setIsBack(isBackTransition);\n }\n }\n\n // Закончилась анимация свайпа назад\n if (\n prevActivePanel.current &&\n prevActivePanel.current !== activePanelProp &&\n prevSwipingBack.current\n ) {\n const nextPanel = activePanelProp;\n const prevPanel = prevActivePanel.current;\n if (prevSwipeBackPrevPanel.current) {\n scrolls.set(prevSwipeBackPrevPanel.current, 0);\n }\n\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n setActivePanel(nextPanel);\n setVisiblePanels([nextPanel]);\n setIsBack(true);\n\n layoutEffectCall(() => {\n if (nextPanel !== null) {\n scroll?.scrollTo(0, scrolls.get(nextPanel));\n }\n prevOnTransition.current &&\n prevOnTransition.current({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n });\n }\n\n // Началась анимация завершения свайпа назад.\n // см. `onTransitionEnd()`\n\n // Закончился Safari свайп\n if (prevActivePanel.current !== activePanelProp && browserSwipe) {\n setBrowserSwipe(false);\n setNextPanel(null);\n setPrevPanel(null);\n setAnimated(false);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n }\n }, [\n activePanelProp,\n activePanel,\n browserSwipe,\n children,\n disableAnimation,\n document,\n flushTransition,\n scroll,\n swipeBackNextPanel,\n swipeBackResult,\n layoutEffectCall,\n scrolls,\n ]);\n\n React.useEffect(\n function restoreScrollPositionWhenSwipeBackIsCancelled() {\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n const swipeBackCancelledInTheMiddleOfAction =\n prevSwipeBackResult.current === 'fail' && !swipeBackResult;\n const swipeBackCancelledByMovingPanelBackToInitialPoint =\n prevSwipingBack.current && !swipingBack && prevSwipeBackShift.current === 0;\n\n if (\n (swipeBackCancelledInTheMiddleOfAction ||\n swipeBackCancelledByMovingPanelBackToInitialPoint) &&\n activePanel !== null\n ) {\n scroll?.scrollTo(0, scrolls.get(activePanel));\n }\n },\n [swipeBackResult, swipingBack, activePanel, scroll, scrolls],\n );\n\n /**\n * @see https://github.com/VKCOM/VKUI/pull/9274\n */\n React.useEffect(function updateAfterAll() {\n prevActivePanel.current = activePanelProp;\n prevSwipingBack.current = swipingBack;\n prevBrowserSwipe.current = browserSwipe;\n prevSwipeBackResult.current = swipeBackResult;\n prevSwipeBackShift.current = swipeBackShift;\n prevSwipeBackPrevPanel.current = swipeBackPrevPanel;\n prevOnTransition.current = onTransition;\n });\n\n return (\n <NavViewIdContext.Provider value={id}>\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles.host,\n platform === 'ios' && classNames(styles.ios, 'vkuiInternalView--ios'),\n !disableAnimation && animated && styles.animated,\n !disableAnimation && swipingBack && styles.swipingBack,\n disableAnimation && styles.noMotion,\n className,\n )}\n onMoveX={\n iOSSwipeBackSimulationEnabled\n ? handleTouchMoveXForIOSSwipeBackSimulation\n : platform === 'ios'\n ? handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext\n : undefined\n }\n onEnd={iOSSwipeBackSimulationEnabled ? handleTouchEndForIOSSwipeBackSimulation : undefined}\n >\n <div className={styles.panels}>\n {panels.map((panel) => {\n const panelId = getNavId(panel.props, warn);\n\n const isPanelActive = panelId === activePanel;\n const isPanelPrev = panelId === prevPanel;\n const isPanelNext = panelId === nextPanel;\n const isAnimatedTarget = animated && (isBack ? isPanelPrev : isPanelNext);\n\n const isSwipeBackPrev = panelId === swipeBackPrevPanel;\n const isSwipeBackNext = panelId === swipeBackNextPanel;\n const isSwipeBackTarget = swipeBackResult && isSwipeBackPrev;\n\n let scrollCompensateStyle: React.CSSProperties | undefined = undefined;\n\n if (isPanelPrev || (isPanelNext && isBack) || isSwipeBackPrev || isSwipeBackNext) {\n const marginTop = scrolls.get(panelId);\n if (marginTop !== undefined) {\n scrollCompensateStyle = { marginTop: -1 * marginTop };\n }\n }\n\n return (\n <div\n className={classNames(\n styles.panel,\n\n isPanelActive && styles.panelActive,\n isPanelPrev && styles.panelPrev,\n isPanelNext && styles.panelNext,\n\n isSwipeBackPrev && styles.panelSwipeBackPrev,\n isSwipeBackNext && styles.panelSwipeBackNext,\n swipeBackResult === 'success' && styles.panelSwipeBackSuccess,\n swipeBackResult === 'fail' && styles.panelSwipeBackFailed,\n )}\n onTransitionEnd={isSwipeBackTarget ? handleSwipeBackTargetTransitionEnd : undefined}\n onAnimationEnd={isAnimatedTarget ? handleAnimatedTargetAnimationEnd : undefined}\n ref={(el) => {\n panelId !== undefined && (panelNodes.current[panelId] = el);\n }}\n style={calcPanelSwipeStyles(isSwipeBackPrev, isSwipeBackNext)}\n key={panelId}\n >\n {platform === 'ios' && (\n <div\n className={styles.panelOverlay}\n style={calcPanelSwipeBackOverlayStyles(isSwipeBackNext)}\n />\n )}\n <div className={styles.panelIn} style={scrollCompensateStyle}>\n <NavTransitionDirectionProvider isBack={swipingBack || isBack}>\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n animating={swipingBack || animated}\n >\n {panel}\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n </NavViewIdContext.Provider>\n );\n};\n"],"names":["React","classNames","usePlatform","millisecondsInSecond","blurActiveElement","useDOM","getNavId","warnOnce","useScroll","useConfigProvider","NavViewIdContext","NavTransitionProvider","NavTransitionDirectionProvider","useSplitCol","Touch","useLayoutEffectCall","getSwipeBackPredicates","hasHorizontalScrollableElementWithScrolledToLeft","swipeBackExcluded","scrollsCache","Map","warn","View","activePanel","activePanelProp","history","nav","onTransition","onSwipeBack","onSwipeBackStart","onSwipeBackCancel","onSwipeBackCancelProp","children","className","restProps","id","scrolls","useState","get","layoutEffectCall","useEffect","set","panelNodes","useRef","window","document","scroll","configProvider","splitCol","platform","animated","setAnimated","visiblePanels","setVisiblePanels","setActivePanel","isBack","setIsBack","undefined","prevPanel","setPrevPanel","nextPanel","setNextPanel","swipeBackPrevented","swipingBack","setSwipingBack","swipeBackStartX","setSwipeBackStartX","swipeBackShift","setSwipeBackShift","swipeBackNextPanel","setSwipeBackNextPanel","swipeBackPrevPanel","setSwipeBackPrevPanel","swipeBackResult","setSwipeBackResult","browserSwipe","setBrowserSwipe","prevActivePanel","prevSwipingBack","prevBrowserSwipe","prevSwipeBackResult","prevSwipeBackShift","prevSwipeBackPrevPanel","prevOnTransition","panels","Children","toArray","filter","panel","panelId","props","includes","disableAnimation","transitionMotionEnabled","animate","iOSSwipeBackSimulationEnabled","isWebView","Boolean","flushTransition","useCallback","isBackTransition","scrollTo","from","to","handleAnimatedTargetAnimationEnd","e","target","currentTarget","onSwipeBackSuccess","swipingBackTransitionEndHandler","handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext","event","swipeBackTriggered","viewportStartEdgeTouched","viewportEndEdgeTouched","startX","shiftX","innerWidth","handleTouchMoveXForIOSSwipeBackSimulation","current","swipedToOpposite","length","originalEvent","payload","getScroll","y","slice","handleTouchEndForIOSSwipeBackSimulation","speed","duration","calcPanelSwipeStyles","isPrev","isNext","transform","calcPanelSwipeBackOverlayStyles","opacityOnSwipeEnd","display","opacity","handleSwipeBackTargetTransitionEnd","propertyName","firstLayerId","map","find","compensateKeyboardHeight","restoreScrollPositionWhenSwipeBackIsCancelled","swipeBackCancelledInTheMiddleOfAction","swipeBackCancelledByMovingPanelBackToInitialPoint","updateAfterAll","Provider","value","Component","onMoveX","onEnd","div","isPanelActive","isPanelPrev","isPanelNext","isAnimatedTarget","isSwipeBackPrev","isSwipeBackNext","isSwipeBackTarget","scrollCompensateStyle","marginTop","onTransitionEnd","onAnimationEnd","ref","el","style","entering","animating"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewInfinite.d.ts","sourceRoot":"","sources":["../../../src/components/View/ViewInfinite.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewInfinite.d.ts","sourceRoot":"","sources":["../../../src/components/View/ViewInfinite.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAiB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,yCAAyC,CAAC;AAIjD,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAazF,eAAO,IAAI,YAAY,kDAA4D,CAAC;AAGpF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,iBACf,SAAQ,yBAAyB,CAAC,WAAW,CAAC,EAC5C,WAAW,EACX,UAAU;IACZ;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtF;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAClF;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAClE;;OAEG;IACH,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C;;OAEG;IACH,cAAc,CAAC,EAAE,8BAA8B,GAAG,SAAS,CAAC;IAC5D;;OAEG;IACH,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC7C;AAGD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAElB,aAAa,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IAE3C,YAAY,EAAE,OAAO,CAAC;CACvB;AA+jBD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAYpD,CAAC"}
|
|
@@ -7,7 +7,6 @@ import { withContext } from "../../hoc/withContext.js";
|
|
|
7
7
|
import { withPlatform } from "../../hoc/withPlatform.js";
|
|
8
8
|
import { millisecondsInSecond } from "../../lib/date.js";
|
|
9
9
|
import { canUseDOM, withDOM } from "../../lib/dom.js";
|
|
10
|
-
import { LockFloatingPositionContext } from "../../lib/floating/LockFloatingPosition/LockFloatingPosition.js";
|
|
11
10
|
import { getNavId } from "../../lib/getNavId.js";
|
|
12
11
|
import { warnOnce } from "../../lib/warnOnce.js";
|
|
13
12
|
import { ScrollContext } from "../AppRoot/ScrollContext.js";
|
|
@@ -274,45 +273,43 @@ var _React_Component;
|
|
|
274
273
|
const iOSSwipeBackSimulationEnabled = !disableAnimation && platform === 'ios' && configProvider?.isWebView && Boolean(onSwipeBack);
|
|
275
274
|
return /*#__PURE__*/ _jsx(NavViewIdContext.Provider, {
|
|
276
275
|
value: id || nav,
|
|
277
|
-
children: /*#__PURE__*/ _jsx(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
children:
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
276
|
+
children: /*#__PURE__*/ _jsx(Touch, {
|
|
277
|
+
Component: "section",
|
|
278
|
+
...restProps,
|
|
279
|
+
className: classNames("vkuiView__host", platform === 'ios' && classNames("vkuiView__ios", 'vkuiInternalView--ios'), !disableAnimation && this.state.animated && "vkuiView__animated", !disableAnimation && this.state.swipingBack && "vkuiView__swipingBack", disableAnimation && "vkuiView__noMotion", className),
|
|
280
|
+
onMoveX: iOSSwipeBackSimulationEnabled ? this.handleTouchMoveXForIOSSwipeBackSimulation : platform === 'ios' ? this.handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext : undefined,
|
|
281
|
+
onEnd: iOSSwipeBackSimulationEnabled ? this.handleTouchEndForIOSSwipeBackSimulation : undefined,
|
|
282
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
283
|
+
className: "vkuiView__panels",
|
|
284
|
+
children: panels.map((panel)=>{
|
|
285
|
+
const panelId = getNavId(panel.props, warn);
|
|
286
|
+
const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;
|
|
287
|
+
const compensateScroll = isPrev || panelId === swipeBackNextPanel || panelId === nextPanel && isBack;
|
|
288
|
+
const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);
|
|
289
|
+
const scrollList = panelId && this.scrolls.get(panelId) || [];
|
|
290
|
+
const scroll = scrollList[scrollList.length - 1] || 0;
|
|
291
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
292
|
+
className: classNames("vkuiView__panel", panelId === activePanel && "vkuiView__panelActive", panelId === prevPanel && "vkuiView__panelPrev", panelId === nextPanel && "vkuiView__panelNext", panelId === swipeBackPrevPanel && "vkuiView__panelSwipeBackPrev", panelId === swipeBackNextPanel && "vkuiView__panelSwipeBackNext", swipeBackResult === 'success' && "vkuiView__panelSwipeBackSuccess", swipeBackResult === 'fail' && "vkuiView__panelSwipeBackFailed"),
|
|
293
|
+
onAnimationEnd: isTransitionTarget ? this.transitionEndHandler : undefined,
|
|
294
|
+
ref: (el)=>{
|
|
295
|
+
panelId !== undefined && (this.panelNodes[panelId] = el);
|
|
296
|
+
},
|
|
297
|
+
style: this.calcPanelSwipeStyles(panelId),
|
|
298
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
299
|
+
className: "vkuiView__panelIn",
|
|
300
|
+
style: {
|
|
301
|
+
marginTop: compensateScroll ? -scroll : undefined
|
|
299
302
|
},
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
children: /*#__PURE__*/ _jsx(NavTransitionDirectionProvider, {
|
|
307
|
-
isBack: swipingBack || isBack,
|
|
308
|
-
children: /*#__PURE__*/ _jsx(NavTransitionProvider, {
|
|
309
|
-
entering: panelId === nextPanel || panelId === swipeBackNextPanel,
|
|
310
|
-
children: panel
|
|
311
|
-
})
|
|
303
|
+
children: /*#__PURE__*/ _jsx(NavTransitionDirectionProvider, {
|
|
304
|
+
isBack: swipingBack || isBack,
|
|
305
|
+
children: /*#__PURE__*/ _jsx(NavTransitionProvider, {
|
|
306
|
+
entering: panelId === nextPanel || panelId === swipeBackNextPanel,
|
|
307
|
+
animating: swipingBack || animated,
|
|
308
|
+
children: panel
|
|
312
309
|
})
|
|
313
310
|
})
|
|
314
|
-
}
|
|
315
|
-
})
|
|
311
|
+
})
|
|
312
|
+
}, panelId);
|
|
316
313
|
})
|
|
317
314
|
})
|
|
318
315
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/View/ViewInfinite.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { canUseDOM, type DOMProps, withDOM } from '../../lib/dom';\nimport { LockFloatingPositionContext } from '../../lib/floating/LockFloatingPosition/LockFloatingPosition';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasPlatform, HTMLAttributesWithRootRef } from '../../types';\nimport { ScrollContext, type ScrollContextInterface } from '../AppRoot/ScrollContext';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n} from '../ConfigProvider/ConfigProviderContext';\nimport { NavViewIdContext } from '../NavIdContext/NavIdContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { SplitColContext, type SplitColContextProps } from '../SplitCol/SplitColContext';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport {\n getSwipeBackPredicates,\n hasHorizontalScrollableElementWithScrolledToLeft,\n swipeBackExcluded,\n} from './utils';\nimport styles from './View.module.css';\n\nconst warn = warnOnce('ViewInfinite');\n\ntype TransitionEventHandler = (e?: TransitionEvent) => void;\n\nexport let scrollsCache = new Map<string, Map<string, Array<number | undefined>>>();\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type TransitionParams = { from: string | null; to: string | null };\n\nexport interface ViewInfiniteProps\n extends HTMLAttributesWithRootRef<HTMLElement>,\n HasPlatform,\n NavIdProps {\n /**\n * `id` активной панели.\n */\n activePanel: string;\n /**\n * Обработчик, который вызывается при завершении анимации смены активной панели.\n */\n onTransition?: ((params: TransitionParams & { isBack: boolean }) => void) | undefined;\n /**\n * Обработчик свайпа назад.\n */\n onSwipeBack?: (() => void) | undefined;\n /**\n * Обработчик начала анимации свайпа назад.\n */\n onSwipeBackStart?: ((activePanel: string | null) => void | 'prevent') | undefined;\n /**\n * Обработчик завершения анимации отмененного пользователем свайпа.\n */\n onSwipeBackCancel?: (() => void) | undefined;\n /**\n * Массив из id панелей в порядке открытия.\n */\n history?: string[] | undefined;\n /**\n * Функция проверки перехода назад.\n */\n isBackCheck?: ((params: TransitionParams) => boolean) | undefined;\n /**\n * @ignore\n */\n splitCol?: SplitColContextProps | undefined;\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface | undefined;\n /**\n * @ignore\n */\n scroll?: ScrollContextInterface | undefined;\n}\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface ViewInfiniteState {\n animated: boolean;\n\n visiblePanels: Array<string | null>;\n activePanel: string | null;\n isBack?: boolean | undefined;\n prevPanel: string | null;\n nextPanel: string | null;\n\n swipingBack?: boolean | undefined;\n swipeBackStartX: number;\n swipeBackShift: number;\n swipeBackNextPanel: string | null;\n swipeBackPrevPanel: string | null;\n swipeBackResult: 'success' | 'fail' | null;\n\n browserSwipe: boolean;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nclass ViewInfiniteComponent extends React.Component<\n ViewInfiniteProps & DOMProps,\n ViewInfiniteState\n> {\n constructor(props: ViewInfiniteProps) {\n super(props);\n\n this.state = {\n animated: false,\n\n visiblePanels: [props.activePanel],\n activePanel: props.activePanel,\n isBack: undefined,\n prevPanel: null,\n nextPanel: null,\n\n swipingBack: undefined,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n swipeBackNextPanel: null,\n swipeBackPrevPanel: null,\n swipeBackResult: null,\n\n browserSwipe: false,\n };\n }\n\n static defaultProps: Partial<ViewInfiniteProps> = {\n history: [],\n };\n\n private swipeBackPrevented = false;\n private readonly scrolls: Map<string, Array<number | undefined>> =\n scrollsCache.get(getNavId(this.props, warn) as string) || new Map();\n private transitionFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n private readonly animationFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n get document() {\n return this.props.document;\n }\n\n get window() {\n return this.props.window;\n }\n\n get panels() {\n return React.Children.toArray(this.props.children) as Array<React.ReactElement<NavIdProps>>;\n }\n\n panelNodes: { [id: string]: HTMLDivElement | null } = {};\n\n componentWillUnmount() {\n const id = getNavId(this.props);\n if (id) {\n scrollsCache.set(id, this.scrolls);\n }\n if (this.animationFinishTimeout) {\n clearTimeout(this.animationFinishTimeout);\n }\n }\n\n componentDidUpdate(prevProps: ViewInfiniteProps, prevState: ViewInfiniteState) {\n // Нужен переход\n if (\n prevProps.activePanel !== this.props.activePanel &&\n !prevState.swipingBack &&\n !prevState.browserSwipe\n ) {\n let isBack = false;\n\n if (this.props.isBackCheck) {\n isBack = this.props.isBackCheck({\n from: prevProps.activePanel,\n to: this.props.activePanel,\n });\n } else {\n const firstLayerId = this.panels\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevProps.activePanel || id === this.props.activePanel);\n isBack = firstLayerId === this.props.activePanel;\n }\n\n this.blurActiveElement();\n\n const prevScrolls = this.scrolls.get(prevProps.activePanel) || [];\n this.scrolls.set(prevProps.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll({ compensateKeyboardHeight: false }).y,\n ]);\n\n if (this.shouldDisableTransitionMotion()) {\n this.flushTransition(prevProps.activePanel, isBack);\n } else {\n this.setState({\n visiblePanels: [prevProps.activePanel, this.props.activePanel],\n prevPanel: prevProps.activePanel,\n nextPanel: this.props.activePanel,\n activePanel: null,\n animated: true,\n isBack,\n });\n }\n }\n\n // Закончилась анимация свайпа назад\n if (prevProps.activePanel !== this.props.activePanel && prevState.swipingBack) {\n const nextPanel = this.state.swipeBackNextPanel;\n const prevPanel = this.state.swipeBackPrevPanel;\n let scrollPosition: undefined | number = undefined;\n\n if (prevPanel !== null) {\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n this.scrolls.set(prevPanel, prevPanelScrolls);\n }\n if (nextPanel !== null) {\n const newPanelScrolls = [...(this.scrolls.get(nextPanel) || [])];\n scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(nextPanel, newPanelScrolls);\n }\n\n this.setState(\n {\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n activePanel: nextPanel,\n visiblePanels: [nextPanel],\n },\n () => {\n this.props.scroll?.scrollTo(0, scrollPosition);\n prevProps.onTransition &&\n prevProps.onTransition({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n },\n );\n }\n\n // Началась анимация завершения свайпа назад.\n if (!prevState.swipeBackResult && this.state.swipeBackResult) {\n this.waitTransitionFinish(\n this.pickPanel(this.state.swipeBackNextPanel),\n this.swipingBackTransitionEndHandler,\n );\n }\n\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n if (\n prevState.swipeBackResult === 'fail' &&\n !this.state.swipeBackResult &&\n this.state.activePanel !== null\n ) {\n const newPanelScrolls = [...(this.scrolls.get(this.state.activePanel) || [])];\n const scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(this.state.activePanel, newPanelScrolls);\n\n this.props.scroll?.scrollTo(0, scrollPosition);\n }\n\n // Закончился Safari свайп\n if (prevProps.activePanel !== this.props.activePanel && this.state.browserSwipe) {\n this.setState({\n browserSwipe: false,\n nextPanel: null,\n prevPanel: null,\n animated: false,\n visiblePanels: [this.props.activePanel],\n activePanel: this.props.activePanel,\n });\n }\n }\n\n shouldDisableTransitionMotion(): boolean {\n return (\n this.props.configProvider?.transitionMotionEnabled === false ||\n !this.props.splitCol?.animate ||\n this.props.platform === 'vkcom'\n );\n }\n\n private transitionDisposer = noop;\n\n private disposeTransition() {\n this.transitionDisposer();\n this.transitionDisposer = noop;\n }\n\n waitTransitionFinish(\n elem: HTMLElement | null | undefined,\n eventHandler: TransitionEventHandler,\n ): void {\n if (this.shouldDisableTransitionMotion()) {\n this.disposeTransition();\n this.transitionFinishTimeout = setTimeout(eventHandler);\n } else if (elem) {\n this.disposeTransition();\n elem.addEventListener('transitionend', eventHandler);\n this.transitionDisposer = () => {\n elem.removeEventListener('transitionend', eventHandler);\n };\n } else {\n if (this.transitionFinishTimeout) {\n clearTimeout(this.transitionFinishTimeout);\n }\n this.transitionFinishTimeout = setTimeout(\n eventHandler,\n this.props.platform === 'android' || this.props.platform === 'vkcom' ? 300 : 600,\n );\n }\n }\n\n blurActiveElement(): void {\n if (typeof this.window !== 'undefined' && this.document?.activeElement) {\n (this.document.activeElement as HTMLElement).blur();\n }\n }\n\n pickPanel(id: string | null) {\n if (id === null) {\n return undefined;\n }\n return this.panelNodes[id];\n }\n\n flushTransition(prevPanel: string, isBack: boolean) {\n const activePanel = this.props.activePanel;\n\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n const newPanelScrolls = [...(this.scrolls.get(activePanel) || [])];\n const scrollPosition = isBack ? newPanelScrolls.pop() : 0;\n if (isBack) {\n this.scrolls.set(prevPanel, prevPanelScrolls);\n this.scrolls.set(activePanel, newPanelScrolls);\n }\n\n this.setState(\n {\n prevPanel: null,\n nextPanel: null,\n visiblePanels: [activePanel],\n activePanel: activePanel,\n animated: false,\n isBack,\n },\n () => {\n this.props.scroll?.scrollTo(0, isBack ? scrollPosition : 0);\n this.props.onTransition &&\n this.props.onTransition({ isBack, from: prevPanel, to: activePanel });\n },\n );\n }\n\n transitionEndHandler: React.AnimationEventHandler<HTMLDivElement> = (e): void => {\n if (e.target !== e.currentTarget) {\n return;\n }\n\n if (this.state.prevPanel !== null) {\n this.flushTransition(this.state.prevPanel, Boolean(this.state.isBack));\n }\n };\n\n swipingBackTransitionEndHandler = (e?: TransitionEvent): void => {\n // indexOf because of vendor prefixes in old browsers\n if (\n !e ||\n (e.propertyName.includes('transform') &&\n e.target === this.pickPanel(this.state.swipeBackNextPanel))\n ) {\n switch (this.state.swipeBackResult) {\n case 'fail':\n this.onSwipeBackCancel();\n break;\n case 'success':\n this.onSwipeBackSuccess();\n }\n }\n };\n\n onSwipeBackSuccess(): void {\n this.props.onSwipeBack && this.props.onSwipeBack();\n }\n\n onSwipeBackCancel(): void {\n this.props.onSwipeBackCancel && this.props.onSwipeBackCancel();\n this.setState({\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n });\n }\n\n handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext = (event: CustomTouchEvent) => {\n if (this.state.browserSwipe) {\n return;\n }\n const { swipeBackTriggered, viewportStartEdgeTouched, viewportEndEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if ((viewportStartEdgeTouched || viewportEndEdgeTouched) && swipeBackTriggered) {\n this.setState({ browserSwipe: true });\n }\n };\n\n handleTouchMoveXForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n if (this.swipeBackPrevented || swipeBackExcluded(event)) {\n return;\n }\n\n const { swipedToOpposite, swipeBackTriggered, viewportStartEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if (this.state.animated && swipeBackTriggered) {\n return;\n }\n\n if (!this.state.swipingBack && this.props.history && this.props.history.length > 1) {\n if (swipedToOpposite) {\n this.swipeBackPrevented = true;\n return;\n }\n\n if (!swipeBackTriggered) {\n return;\n }\n\n if (\n !viewportStartEdgeTouched &&\n hasHorizontalScrollableElementWithScrolledToLeft(event.originalEvent.target as HTMLElement)\n ) {\n this.swipeBackPrevented = true;\n return;\n }\n // Начался свайп назад\n if (this.props.onSwipeBackStart) {\n const payload = this.props.onSwipeBackStart(this.state.activePanel);\n if (payload === 'prevent') {\n this.swipeBackPrevented = true;\n return;\n }\n }\n\n if (this.state.activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n this.blurActiveElement();\n const prevScrolls = this.scrolls.get(this.state.activePanel) || [];\n this.scrolls.set(this.state.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll().y,\n ]);\n }\n\n this.setState({\n swipingBack: true,\n swipeBackStartX: event.startX,\n swipeBackPrevPanel: this.state.activePanel,\n swipeBackNextPanel: this.props.history.slice(-2)[0],\n });\n }\n\n if (this.state.swipingBack) {\n if (event.shiftX < 0) {\n this.setState({ swipeBackShift: 0 });\n } else if (event.shiftX > this.window!.innerWidth - this.state.swipeBackStartX) {\n this.setState({ swipeBackShift: this.window!.innerWidth });\n } else {\n this.setState({ swipeBackShift: event.shiftX });\n }\n }\n };\n\n handleTouchEndForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n this.swipeBackPrevented = false;\n\n if (this.state.swipingBack && this.window) {\n const speed = (this.state.swipeBackShift / event.duration) * millisecondsInSecond;\n if (this.state.swipeBackShift === 0) {\n this.onSwipeBackCancel();\n } else if (this.state.swipeBackShift >= this.window.innerWidth) {\n this.onSwipeBackSuccess();\n } else if (speed > 250 || this.state.swipeBackShift >= this.window.innerWidth / 2) {\n this.setState({ swipeBackResult: 'success' });\n } else {\n this.setState({ swipeBackResult: 'fail' });\n }\n }\n };\n\n calcPanelSwipeStyles(panelId: string | undefined): React.CSSProperties {\n if (!canUseDOM || !this.window) {\n return {};\n }\n\n const isPrev = panelId === this.state.swipeBackPrevPanel;\n const isNext = panelId === this.state.swipeBackNextPanel;\n\n if ((!isPrev && !isNext) || this.state.swipeBackResult) {\n return {};\n }\n\n let prevPanelTranslate = `${this.state.swipeBackShift}px`;\n let nextPanelTranslate = `${\n -50 + (this.state.swipeBackShift * 100) / this.window.innerWidth / 2\n }%`;\n let prevPanelShadow =\n (0.3 * (this.window.innerWidth - this.state.swipeBackShift)) / this.window.innerWidth;\n\n if (this.state.swipeBackResult) {\n return isPrev ? { boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})` } : {};\n }\n\n if (isNext) {\n return {\n transform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n };\n }\n if (isPrev) {\n return {\n transform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})`,\n };\n }\n\n return {};\n }\n\n render() {\n const {\n platform,\n activePanel: _1,\n splitCol,\n configProvider,\n history,\n id,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel,\n window,\n document,\n scroll,\n isBackCheck,\n className,\n ...restProps\n } = this.props;\n const {\n prevPanel,\n nextPanel,\n activePanel,\n isBack,\n animated,\n swipeBackPrevPanel,\n swipeBackNextPanel,\n swipeBackResult,\n swipingBack,\n } = this.state;\n\n const panels = this.panels\n .filter((panel) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && this.state.visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n })\n .sort((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrevPanel = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const isNextPanel = panelId === nextPanel || panelId === swipeBackNextPanel;\n\n if (isNextPanel) {\n return swipingBack || this.state.isBack ? -1 : 1;\n }\n\n if (isPrevPanel) {\n return swipingBack || this.state.isBack ? 1 : -1;\n }\n\n return 0;\n });\n\n const disableAnimation = this.shouldDisableTransitionMotion();\n const iOSSwipeBackSimulationEnabled =\n !disableAnimation && platform === 'ios' && configProvider?.isWebView && Boolean(onSwipeBack);\n\n return (\n <NavViewIdContext.Provider value={id || nav}>\n <LockFloatingPositionContext.Provider value={swipingBack || animated}>\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles.host,\n platform === 'ios' && classNames(styles.ios, 'vkuiInternalView--ios'),\n !disableAnimation && this.state.animated && styles.animated,\n !disableAnimation && this.state.swipingBack && styles.swipingBack,\n disableAnimation && styles.noMotion,\n className,\n )}\n onMoveX={\n iOSSwipeBackSimulationEnabled\n ? this.handleTouchMoveXForIOSSwipeBackSimulation\n : platform === 'ios'\n ? this.handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext\n : undefined\n }\n onEnd={\n iOSSwipeBackSimulationEnabled\n ? this.handleTouchEndForIOSSwipeBackSimulation\n : undefined\n }\n >\n <div className={styles.panels}>\n {panels.map((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const compensateScroll =\n isPrev || panelId === swipeBackNextPanel || (panelId === nextPanel && isBack);\n const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);\n const scrollList = (panelId && this.scrolls.get(panelId)) || [];\n const scroll = scrollList[scrollList.length - 1] || 0;\n\n return (\n <div\n className={classNames(\n styles.panel,\n panelId === activePanel && styles.panelActive,\n panelId === prevPanel && styles.panelPrev,\n panelId === nextPanel && styles.panelNext,\n panelId === swipeBackPrevPanel && styles.panelSwipeBackPrev,\n panelId === swipeBackNextPanel && styles.panelSwipeBackNext,\n swipeBackResult === 'success' && styles.panelSwipeBackSuccess,\n swipeBackResult === 'fail' && styles.panelSwipeBackFailed,\n )}\n onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : undefined}\n ref={(el) => {\n panelId !== undefined && (this.panelNodes[panelId] = el);\n }}\n style={this.calcPanelSwipeStyles(panelId)}\n key={panelId}\n >\n <div\n className={styles.panelIn}\n style={{ marginTop: compensateScroll ? -scroll : undefined }}\n >\n <NavTransitionDirectionProvider isBack={swipingBack || isBack}>\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n >\n {panel}\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n </LockFloatingPositionContext.Provider>\n </NavViewIdContext.Provider>\n );\n }\n}\n\nexport const ViewInfinite: React.FC<ViewInfiniteProps> = withContext(\n withContext(\n withContext(\n withPlatform(withDOM<ViewInfiniteProps>(ViewInfiniteComponent)),\n SplitColContext,\n 'splitCol',\n ),\n ConfigProviderContext,\n 'configProvider',\n ),\n ScrollContext,\n 'scroll',\n);\n"],"names":["React","classNames","noop","withContext","withPlatform","millisecondsInSecond","canUseDOM","withDOM","LockFloatingPositionContext","getNavId","warnOnce","ScrollContext","ConfigProviderContext","NavViewIdContext","NavTransitionProvider","NavTransitionDirectionProvider","SplitColContext","Touch","getSwipeBackPredicates","hasHorizontalScrollableElementWithScrolledToLeft","swipeBackExcluded","warn","scrollsCache","Map","ViewInfiniteComponent","Component","document","props","window","panels","Children","toArray","children","componentWillUnmount","id","set","scrolls","animationFinishTimeout","clearTimeout","componentDidUpdate","prevProps","prevState","activePanel","swipingBack","browserSwipe","isBack","isBackCheck","from","to","firstLayerId","map","panel","find","blurActiveElement","prevScrolls","get","scroll","getScroll","compensateKeyboardHeight","y","shouldDisableTransitionMotion","flushTransition","setState","visiblePanels","prevPanel","nextPanel","animated","state","swipeBackNextPanel","swipeBackPrevPanel","scrollPosition","undefined","prevPanelScrolls","slice","newPanelScrolls","pop","swipeBackResult","swipeBackStartX","swipeBackShift","scrollTo","onTransition","waitTransitionFinish","pickPanel","swipingBackTransitionEndHandler","configProvider","transitionMotionEnabled","splitCol","animate","platform","disposeTransition","transitionDisposer","elem","eventHandler","transitionFinishTimeout","setTimeout","addEventListener","removeEventListener","activeElement","blur","panelNodes","onSwipeBackSuccess","onSwipeBack","onSwipeBackCancel","calcPanelSwipeStyles","panelId","isPrev","isNext","prevPanelTranslate","nextPanelTranslate","innerWidth","prevPanelShadow","boxShadow","transform","render","_1","history","nav","onSwipeBackStart","className","restProps","filter","includes","sort","isPrevPanel","isNextPanel","disableAnimation","iOSSwipeBackSimulationEnabled","isWebView","Boolean","Provider","value","onMoveX","handleTouchMoveXForIOSSwipeBackSimulation","handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext","onEnd","handleTouchEndForIOSSwipeBackSimulation","div","compensateScroll","isTransitionTarget","scrollList","length","onAnimationEnd","transitionEndHandler","ref","el","style","marginTop","entering","swipeBackPrevented","e","target","currentTarget","propertyName","event","swipeBackTriggered","viewportStartEdgeTouched","viewportEndEdgeTouched","startX","shiftX","swipedToOpposite","originalEvent","payload","speed","duration","defaultProps","ViewInfinite"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/View/ViewInfinite.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { canUseDOM, type DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasPlatform, HTMLAttributesWithRootRef } from '../../types';\nimport { ScrollContext, type ScrollContextInterface } from '../AppRoot/ScrollContext';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n} from '../ConfigProvider/ConfigProviderContext';\nimport { NavViewIdContext } from '../NavIdContext/NavIdContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { SplitColContext, type SplitColContextProps } from '../SplitCol/SplitColContext';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport {\n getSwipeBackPredicates,\n hasHorizontalScrollableElementWithScrolledToLeft,\n swipeBackExcluded,\n} from './utils';\nimport styles from './View.module.css';\n\nconst warn = warnOnce('ViewInfinite');\n\ntype TransitionEventHandler = (e?: TransitionEvent) => void;\n\nexport let scrollsCache = new Map<string, Map<string, Array<number | undefined>>>();\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type TransitionParams = { from: string | null; to: string | null };\n\nexport interface ViewInfiniteProps\n extends HTMLAttributesWithRootRef<HTMLElement>,\n HasPlatform,\n NavIdProps {\n /**\n * `id` активной панели.\n */\n activePanel: string;\n /**\n * Обработчик, который вызывается при завершении анимации смены активной панели.\n */\n onTransition?: ((params: TransitionParams & { isBack: boolean }) => void) | undefined;\n /**\n * Обработчик свайпа назад.\n */\n onSwipeBack?: (() => void) | undefined;\n /**\n * Обработчик начала анимации свайпа назад.\n */\n onSwipeBackStart?: ((activePanel: string | null) => void | 'prevent') | undefined;\n /**\n * Обработчик завершения анимации отмененного пользователем свайпа.\n */\n onSwipeBackCancel?: (() => void) | undefined;\n /**\n * Массив из id панелей в порядке открытия.\n */\n history?: string[] | undefined;\n /**\n * Функция проверки перехода назад.\n */\n isBackCheck?: ((params: TransitionParams) => boolean) | undefined;\n /**\n * @ignore\n */\n splitCol?: SplitColContextProps | undefined;\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface | undefined;\n /**\n * @ignore\n */\n scroll?: ScrollContextInterface | undefined;\n}\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface ViewInfiniteState {\n animated: boolean;\n\n visiblePanels: Array<string | null>;\n activePanel: string | null;\n isBack?: boolean | undefined;\n prevPanel: string | null;\n nextPanel: string | null;\n\n swipingBack?: boolean | undefined;\n swipeBackStartX: number;\n swipeBackShift: number;\n swipeBackNextPanel: string | null;\n swipeBackPrevPanel: string | null;\n swipeBackResult: 'success' | 'fail' | null;\n\n browserSwipe: boolean;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nclass ViewInfiniteComponent extends React.Component<\n ViewInfiniteProps & DOMProps,\n ViewInfiniteState\n> {\n constructor(props: ViewInfiniteProps) {\n super(props);\n\n this.state = {\n animated: false,\n\n visiblePanels: [props.activePanel],\n activePanel: props.activePanel,\n isBack: undefined,\n prevPanel: null,\n nextPanel: null,\n\n swipingBack: undefined,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n swipeBackNextPanel: null,\n swipeBackPrevPanel: null,\n swipeBackResult: null,\n\n browserSwipe: false,\n };\n }\n\n static defaultProps: Partial<ViewInfiniteProps> = {\n history: [],\n };\n\n private swipeBackPrevented = false;\n private readonly scrolls: Map<string, Array<number | undefined>> =\n scrollsCache.get(getNavId(this.props, warn) as string) || new Map();\n private transitionFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n private readonly animationFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n get document() {\n return this.props.document;\n }\n\n get window() {\n return this.props.window;\n }\n\n get panels() {\n return React.Children.toArray(this.props.children) as Array<React.ReactElement<NavIdProps>>;\n }\n\n panelNodes: { [id: string]: HTMLDivElement | null } = {};\n\n componentWillUnmount() {\n const id = getNavId(this.props);\n if (id) {\n scrollsCache.set(id, this.scrolls);\n }\n if (this.animationFinishTimeout) {\n clearTimeout(this.animationFinishTimeout);\n }\n }\n\n componentDidUpdate(prevProps: ViewInfiniteProps, prevState: ViewInfiniteState) {\n // Нужен переход\n if (\n prevProps.activePanel !== this.props.activePanel &&\n !prevState.swipingBack &&\n !prevState.browserSwipe\n ) {\n let isBack = false;\n\n if (this.props.isBackCheck) {\n isBack = this.props.isBackCheck({\n from: prevProps.activePanel,\n to: this.props.activePanel,\n });\n } else {\n const firstLayerId = this.panels\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevProps.activePanel || id === this.props.activePanel);\n isBack = firstLayerId === this.props.activePanel;\n }\n\n this.blurActiveElement();\n\n const prevScrolls = this.scrolls.get(prevProps.activePanel) || [];\n this.scrolls.set(prevProps.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll({ compensateKeyboardHeight: false }).y,\n ]);\n\n if (this.shouldDisableTransitionMotion()) {\n this.flushTransition(prevProps.activePanel, isBack);\n } else {\n this.setState({\n visiblePanels: [prevProps.activePanel, this.props.activePanel],\n prevPanel: prevProps.activePanel,\n nextPanel: this.props.activePanel,\n activePanel: null,\n animated: true,\n isBack,\n });\n }\n }\n\n // Закончилась анимация свайпа назад\n if (prevProps.activePanel !== this.props.activePanel && prevState.swipingBack) {\n const nextPanel = this.state.swipeBackNextPanel;\n const prevPanel = this.state.swipeBackPrevPanel;\n let scrollPosition: undefined | number = undefined;\n\n if (prevPanel !== null) {\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n this.scrolls.set(prevPanel, prevPanelScrolls);\n }\n if (nextPanel !== null) {\n const newPanelScrolls = [...(this.scrolls.get(nextPanel) || [])];\n scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(nextPanel, newPanelScrolls);\n }\n\n this.setState(\n {\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n activePanel: nextPanel,\n visiblePanels: [nextPanel],\n },\n () => {\n this.props.scroll?.scrollTo(0, scrollPosition);\n prevProps.onTransition &&\n prevProps.onTransition({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n },\n );\n }\n\n // Началась анимация завершения свайпа назад.\n if (!prevState.swipeBackResult && this.state.swipeBackResult) {\n this.waitTransitionFinish(\n this.pickPanel(this.state.swipeBackNextPanel),\n this.swipingBackTransitionEndHandler,\n );\n }\n\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n if (\n prevState.swipeBackResult === 'fail' &&\n !this.state.swipeBackResult &&\n this.state.activePanel !== null\n ) {\n const newPanelScrolls = [...(this.scrolls.get(this.state.activePanel) || [])];\n const scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(this.state.activePanel, newPanelScrolls);\n\n this.props.scroll?.scrollTo(0, scrollPosition);\n }\n\n // Закончился Safari свайп\n if (prevProps.activePanel !== this.props.activePanel && this.state.browserSwipe) {\n this.setState({\n browserSwipe: false,\n nextPanel: null,\n prevPanel: null,\n animated: false,\n visiblePanels: [this.props.activePanel],\n activePanel: this.props.activePanel,\n });\n }\n }\n\n shouldDisableTransitionMotion(): boolean {\n return (\n this.props.configProvider?.transitionMotionEnabled === false ||\n !this.props.splitCol?.animate ||\n this.props.platform === 'vkcom'\n );\n }\n\n private transitionDisposer = noop;\n\n private disposeTransition() {\n this.transitionDisposer();\n this.transitionDisposer = noop;\n }\n\n waitTransitionFinish(\n elem: HTMLElement | null | undefined,\n eventHandler: TransitionEventHandler,\n ): void {\n if (this.shouldDisableTransitionMotion()) {\n this.disposeTransition();\n this.transitionFinishTimeout = setTimeout(eventHandler);\n } else if (elem) {\n this.disposeTransition();\n elem.addEventListener('transitionend', eventHandler);\n this.transitionDisposer = () => {\n elem.removeEventListener('transitionend', eventHandler);\n };\n } else {\n if (this.transitionFinishTimeout) {\n clearTimeout(this.transitionFinishTimeout);\n }\n this.transitionFinishTimeout = setTimeout(\n eventHandler,\n this.props.platform === 'android' || this.props.platform === 'vkcom' ? 300 : 600,\n );\n }\n }\n\n blurActiveElement(): void {\n if (typeof this.window !== 'undefined' && this.document?.activeElement) {\n (this.document.activeElement as HTMLElement).blur();\n }\n }\n\n pickPanel(id: string | null) {\n if (id === null) {\n return undefined;\n }\n return this.panelNodes[id];\n }\n\n flushTransition(prevPanel: string, isBack: boolean) {\n const activePanel = this.props.activePanel;\n\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n const newPanelScrolls = [...(this.scrolls.get(activePanel) || [])];\n const scrollPosition = isBack ? newPanelScrolls.pop() : 0;\n if (isBack) {\n this.scrolls.set(prevPanel, prevPanelScrolls);\n this.scrolls.set(activePanel, newPanelScrolls);\n }\n\n this.setState(\n {\n prevPanel: null,\n nextPanel: null,\n visiblePanels: [activePanel],\n activePanel: activePanel,\n animated: false,\n isBack,\n },\n () => {\n this.props.scroll?.scrollTo(0, isBack ? scrollPosition : 0);\n this.props.onTransition &&\n this.props.onTransition({ isBack, from: prevPanel, to: activePanel });\n },\n );\n }\n\n transitionEndHandler: React.AnimationEventHandler<HTMLDivElement> = (e): void => {\n if (e.target !== e.currentTarget) {\n return;\n }\n\n if (this.state.prevPanel !== null) {\n this.flushTransition(this.state.prevPanel, Boolean(this.state.isBack));\n }\n };\n\n swipingBackTransitionEndHandler = (e?: TransitionEvent): void => {\n // indexOf because of vendor prefixes in old browsers\n if (\n !e ||\n (e.propertyName.includes('transform') &&\n e.target === this.pickPanel(this.state.swipeBackNextPanel))\n ) {\n switch (this.state.swipeBackResult) {\n case 'fail':\n this.onSwipeBackCancel();\n break;\n case 'success':\n this.onSwipeBackSuccess();\n }\n }\n };\n\n onSwipeBackSuccess(): void {\n this.props.onSwipeBack && this.props.onSwipeBack();\n }\n\n onSwipeBackCancel(): void {\n this.props.onSwipeBackCancel && this.props.onSwipeBackCancel();\n this.setState({\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n });\n }\n\n handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext = (event: CustomTouchEvent) => {\n if (this.state.browserSwipe) {\n return;\n }\n const { swipeBackTriggered, viewportStartEdgeTouched, viewportEndEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if ((viewportStartEdgeTouched || viewportEndEdgeTouched) && swipeBackTriggered) {\n this.setState({ browserSwipe: true });\n }\n };\n\n handleTouchMoveXForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n if (this.swipeBackPrevented || swipeBackExcluded(event)) {\n return;\n }\n\n const { swipedToOpposite, swipeBackTriggered, viewportStartEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if (this.state.animated && swipeBackTriggered) {\n return;\n }\n\n if (!this.state.swipingBack && this.props.history && this.props.history.length > 1) {\n if (swipedToOpposite) {\n this.swipeBackPrevented = true;\n return;\n }\n\n if (!swipeBackTriggered) {\n return;\n }\n\n if (\n !viewportStartEdgeTouched &&\n hasHorizontalScrollableElementWithScrolledToLeft(event.originalEvent.target as HTMLElement)\n ) {\n this.swipeBackPrevented = true;\n return;\n }\n // Начался свайп назад\n if (this.props.onSwipeBackStart) {\n const payload = this.props.onSwipeBackStart(this.state.activePanel);\n if (payload === 'prevent') {\n this.swipeBackPrevented = true;\n return;\n }\n }\n\n if (this.state.activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n this.blurActiveElement();\n const prevScrolls = this.scrolls.get(this.state.activePanel) || [];\n this.scrolls.set(this.state.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll().y,\n ]);\n }\n\n this.setState({\n swipingBack: true,\n swipeBackStartX: event.startX,\n swipeBackPrevPanel: this.state.activePanel,\n swipeBackNextPanel: this.props.history.slice(-2)[0],\n });\n }\n\n if (this.state.swipingBack) {\n if (event.shiftX < 0) {\n this.setState({ swipeBackShift: 0 });\n } else if (event.shiftX > this.window!.innerWidth - this.state.swipeBackStartX) {\n this.setState({ swipeBackShift: this.window!.innerWidth });\n } else {\n this.setState({ swipeBackShift: event.shiftX });\n }\n }\n };\n\n handleTouchEndForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n this.swipeBackPrevented = false;\n\n if (this.state.swipingBack && this.window) {\n const speed = (this.state.swipeBackShift / event.duration) * millisecondsInSecond;\n if (this.state.swipeBackShift === 0) {\n this.onSwipeBackCancel();\n } else if (this.state.swipeBackShift >= this.window.innerWidth) {\n this.onSwipeBackSuccess();\n } else if (speed > 250 || this.state.swipeBackShift >= this.window.innerWidth / 2) {\n this.setState({ swipeBackResult: 'success' });\n } else {\n this.setState({ swipeBackResult: 'fail' });\n }\n }\n };\n\n calcPanelSwipeStyles(panelId: string | undefined): React.CSSProperties {\n if (!canUseDOM || !this.window) {\n return {};\n }\n\n const isPrev = panelId === this.state.swipeBackPrevPanel;\n const isNext = panelId === this.state.swipeBackNextPanel;\n\n if ((!isPrev && !isNext) || this.state.swipeBackResult) {\n return {};\n }\n\n let prevPanelTranslate = `${this.state.swipeBackShift}px`;\n let nextPanelTranslate = `${\n -50 + (this.state.swipeBackShift * 100) / this.window.innerWidth / 2\n }%`;\n let prevPanelShadow =\n (0.3 * (this.window.innerWidth - this.state.swipeBackShift)) / this.window.innerWidth;\n\n if (this.state.swipeBackResult) {\n return isPrev ? { boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})` } : {};\n }\n\n if (isNext) {\n return {\n transform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n };\n }\n if (isPrev) {\n return {\n transform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})`,\n };\n }\n\n return {};\n }\n\n render() {\n const {\n platform,\n activePanel: _1,\n splitCol,\n configProvider,\n history,\n id,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel,\n window,\n document,\n scroll,\n isBackCheck,\n className,\n ...restProps\n } = this.props;\n const {\n prevPanel,\n nextPanel,\n activePanel,\n isBack,\n animated,\n swipeBackPrevPanel,\n swipeBackNextPanel,\n swipeBackResult,\n swipingBack,\n } = this.state;\n\n const panels = this.panels\n .filter((panel) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && this.state.visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n })\n .sort((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrevPanel = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const isNextPanel = panelId === nextPanel || panelId === swipeBackNextPanel;\n\n if (isNextPanel) {\n return swipingBack || this.state.isBack ? -1 : 1;\n }\n\n if (isPrevPanel) {\n return swipingBack || this.state.isBack ? 1 : -1;\n }\n\n return 0;\n });\n\n const disableAnimation = this.shouldDisableTransitionMotion();\n const iOSSwipeBackSimulationEnabled =\n !disableAnimation && platform === 'ios' && configProvider?.isWebView && Boolean(onSwipeBack);\n\n return (\n <NavViewIdContext.Provider value={id || nav}>\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles.host,\n platform === 'ios' && classNames(styles.ios, 'vkuiInternalView--ios'),\n !disableAnimation && this.state.animated && styles.animated,\n !disableAnimation && this.state.swipingBack && styles.swipingBack,\n disableAnimation && styles.noMotion,\n className,\n )}\n onMoveX={\n iOSSwipeBackSimulationEnabled\n ? this.handleTouchMoveXForIOSSwipeBackSimulation\n : platform === 'ios'\n ? this.handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext\n : undefined\n }\n onEnd={\n iOSSwipeBackSimulationEnabled ? this.handleTouchEndForIOSSwipeBackSimulation : undefined\n }\n >\n <div className={styles.panels}>\n {panels.map((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const compensateScroll =\n isPrev || panelId === swipeBackNextPanel || (panelId === nextPanel && isBack);\n const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);\n const scrollList = (panelId && this.scrolls.get(panelId)) || [];\n const scroll = scrollList[scrollList.length - 1] || 0;\n\n return (\n <div\n className={classNames(\n styles.panel,\n panelId === activePanel && styles.panelActive,\n panelId === prevPanel && styles.panelPrev,\n panelId === nextPanel && styles.panelNext,\n panelId === swipeBackPrevPanel && styles.panelSwipeBackPrev,\n panelId === swipeBackNextPanel && styles.panelSwipeBackNext,\n swipeBackResult === 'success' && styles.panelSwipeBackSuccess,\n swipeBackResult === 'fail' && styles.panelSwipeBackFailed,\n )}\n onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : undefined}\n ref={(el) => {\n panelId !== undefined && (this.panelNodes[panelId] = el);\n }}\n style={this.calcPanelSwipeStyles(panelId)}\n key={panelId}\n >\n <div\n className={styles.panelIn}\n style={{ marginTop: compensateScroll ? -scroll : undefined }}\n >\n <NavTransitionDirectionProvider isBack={swipingBack || isBack}>\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n animating={swipingBack || animated}\n >\n {panel}\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n </NavViewIdContext.Provider>\n );\n }\n}\n\nexport const ViewInfinite: React.FC<ViewInfiniteProps> = withContext(\n withContext(\n withContext(\n withPlatform(withDOM<ViewInfiniteProps>(ViewInfiniteComponent)),\n SplitColContext,\n 'splitCol',\n ),\n ConfigProviderContext,\n 'configProvider',\n ),\n ScrollContext,\n 'scroll',\n);\n"],"names":["React","classNames","noop","withContext","withPlatform","millisecondsInSecond","canUseDOM","withDOM","getNavId","warnOnce","ScrollContext","ConfigProviderContext","NavViewIdContext","NavTransitionProvider","NavTransitionDirectionProvider","SplitColContext","Touch","getSwipeBackPredicates","hasHorizontalScrollableElementWithScrolledToLeft","swipeBackExcluded","warn","scrollsCache","Map","ViewInfiniteComponent","Component","document","props","window","panels","Children","toArray","children","componentWillUnmount","id","set","scrolls","animationFinishTimeout","clearTimeout","componentDidUpdate","prevProps","prevState","activePanel","swipingBack","browserSwipe","isBack","isBackCheck","from","to","firstLayerId","map","panel","find","blurActiveElement","prevScrolls","get","scroll","getScroll","compensateKeyboardHeight","y","shouldDisableTransitionMotion","flushTransition","setState","visiblePanels","prevPanel","nextPanel","animated","state","swipeBackNextPanel","swipeBackPrevPanel","scrollPosition","undefined","prevPanelScrolls","slice","newPanelScrolls","pop","swipeBackResult","swipeBackStartX","swipeBackShift","scrollTo","onTransition","waitTransitionFinish","pickPanel","swipingBackTransitionEndHandler","configProvider","transitionMotionEnabled","splitCol","animate","platform","disposeTransition","transitionDisposer","elem","eventHandler","transitionFinishTimeout","setTimeout","addEventListener","removeEventListener","activeElement","blur","panelNodes","onSwipeBackSuccess","onSwipeBack","onSwipeBackCancel","calcPanelSwipeStyles","panelId","isPrev","isNext","prevPanelTranslate","nextPanelTranslate","innerWidth","prevPanelShadow","boxShadow","transform","render","_1","history","nav","onSwipeBackStart","className","restProps","filter","includes","sort","isPrevPanel","isNextPanel","disableAnimation","iOSSwipeBackSimulationEnabled","isWebView","Boolean","Provider","value","onMoveX","handleTouchMoveXForIOSSwipeBackSimulation","handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext","onEnd","handleTouchEndForIOSSwipeBackSimulation","div","compensateScroll","isTransitionTarget","scrollList","length","onAnimationEnd","transitionEndHandler","ref","el","style","marginTop","entering","animating","swipeBackPrevented","e","target","currentTarget","propertyName","event","swipeBackTriggered","viewportStartEdgeTouched","viewportEndEdgeTouched","startX","shiftX","swipedToOpposite","originalEvent","payload","speed","duration","defaultProps","ViewInfinite"],"mappings":"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"}
|
|
@@ -2,16 +2,20 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
/* eslint-disable jsdoc/require-jsdoc */ import * as React from "react";
|
|
4
4
|
const TransitionContext = /*#__PURE__*/ React.createContext({
|
|
5
|
-
entering: false
|
|
5
|
+
entering: false,
|
|
6
|
+
animating: false
|
|
6
7
|
});
|
|
7
8
|
export const useNavTransition = ()=>React.useContext(TransitionContext);
|
|
8
|
-
export const NavTransitionProvider = ({ children, entering })=>{
|
|
9
|
+
export const NavTransitionProvider = ({ children, entering, animating })=>{
|
|
9
10
|
const parentContext = useNavTransition();
|
|
10
11
|
const contextValue = React.useMemo(()=>({
|
|
11
|
-
entering: parentContext.entering || entering
|
|
12
|
+
entering: parentContext.entering || entering,
|
|
13
|
+
animating: parentContext.animating || animating
|
|
12
14
|
}), [
|
|
13
15
|
entering,
|
|
14
|
-
|
|
16
|
+
animating,
|
|
17
|
+
parentContext.entering,
|
|
18
|
+
parentContext.animating
|
|
15
19
|
]);
|
|
16
20
|
return /*#__PURE__*/ _jsx(TransitionContext.Provider, {
|
|
17
21
|
value: contextValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/NavTransitionContext/NavTransitionContext.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\n\nexport interface TransitionContextProps {\n entering: boolean;\n}\nconst TransitionContext = React.createContext<TransitionContextProps>({\n entering: false,\n});\nexport const useNavTransition = (): TransitionContextProps => React.useContext(TransitionContext);\n\nexport const NavTransitionProvider = ({\n children,\n entering,\n}: React.PropsWithChildren<TransitionContextProps>): React.ReactNode => {\n const parentContext = useNavTransition();\n const contextValue = React.useMemo(\n () => ({\n entering: parentContext.entering || entering,\n }),\n [entering, parentContext.entering],\n );\n\n return <TransitionContext.Provider value={contextValue}>{children}</TransitionContext.Provider>;\n};\n"],"names":["React","TransitionContext","createContext","entering","useNavTransition","useContext","NavTransitionProvider","children","parentContext","contextValue","useMemo","Provider","value"],"mappings":"AAAA;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/NavTransitionContext/NavTransitionContext.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\n\nexport interface TransitionContextProps {\n entering: boolean;\n animating: boolean;\n}\nconst TransitionContext = React.createContext<TransitionContextProps>({\n entering: false,\n animating: false,\n});\nexport const useNavTransition = (): TransitionContextProps => React.useContext(TransitionContext);\n\nexport const NavTransitionProvider = ({\n children,\n entering,\n animating,\n}: React.PropsWithChildren<TransitionContextProps>): React.ReactNode => {\n const parentContext = useNavTransition();\n const contextValue = React.useMemo(\n () => ({\n entering: parentContext.entering || entering,\n animating: parentContext.animating || animating,\n }),\n [entering, animating, parentContext.entering, parentContext.animating],\n );\n\n return <TransitionContext.Provider value={contextValue}>{children}</TransitionContext.Provider>;\n};\n"],"names":["React","TransitionContext","createContext","entering","animating","useNavTransition","useContext","NavTransitionProvider","children","parentContext","contextValue","useMemo","Provider","value"],"mappings":"AAAA;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAM/B,MAAMC,kCAAoBD,MAAME,aAAa,CAAyB;IACpEC,UAAU;IACVC,WAAW;AACb;AACA,OAAO,MAAMC,mBAAmB,IAA8BL,MAAMM,UAAU,CAACL,mBAAmB;AAElG,OAAO,MAAMM,wBAAwB,CAAC,EACpCC,QAAQ,EACRL,QAAQ,EACRC,SAAS,EACuC;IAChD,MAAMK,gBAAgBJ;IACtB,MAAMK,eAAeV,MAAMW,OAAO,CAChC,IAAO,CAAA;YACLR,UAAUM,cAAcN,QAAQ,IAAIA;YACpCC,WAAWK,cAAcL,SAAS,IAAIA;QACxC,CAAA,GACA;QAACD;QAAUC;QAAWK,cAAcN,QAAQ;QAAEM,cAAcL,SAAS;KAAC;IAGxE,qBAAO,KAACH,kBAAkBW,QAAQ;QAACC,OAAOH;kBAAeF;;AAC3D,EAAE"}
|
|
@@ -8,7 +8,6 @@ import { useGlobalEscKeyDown } from "../../hooks/useGlobalEscKeyDown.js";
|
|
|
8
8
|
import { usePatchChildren } from "../../hooks/usePatchChildren.js";
|
|
9
9
|
import { createPortal } from "../../lib/createPortal.js";
|
|
10
10
|
import { autoUpdateFloatingElement, convertFloatingDataToReactCSSProperties, useFloating, useFloatingMiddlewaresBootstrap, usePlacementChangeCallback } from "../../lib/floating/index.js";
|
|
11
|
-
import { LockFloatingPositionContext } from "../../lib/floating/LockFloatingPosition/LockFloatingPosition.js";
|
|
12
11
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
|
|
13
12
|
import { warnOnce } from "../../lib/warnOnce.js";
|
|
14
13
|
import { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from "../FloatingArrow/DefaultIcon.js";
|
|
@@ -24,7 +23,7 @@ const warn = warnOnce('OnboardingTooltip');
|
|
|
24
23
|
*/ export const OnboardingTooltip = ({ 'id': idProp, children, 'shown': shownProp = true, arrowPadding = DEFAULT_ARROW_PADDING, arrowHeight = DEFAULT_ARROW_HEIGHT, offsetByMainAxis = 0, offsetByCrossAxis = 0, arrowOffset = 0, isStaticArrowOffset = false, onClose, 'placement': placementProp = 'bottom-start', maxWidth = TOOLTIP_MAX_WIDTH, 'style': styleProp, getRootRef, disableArrow = false, onPlacementChange, disableFlipMiddleware = false, disableShiftMiddleware = false, overlayLabel = 'Закрыть', title, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, restoreFocus, disableFocusTrap, overflowPadding, ...restProps })=>{
|
|
25
24
|
const generatedId = React.useId();
|
|
26
25
|
const tooltipId = idProp || generatedId;
|
|
27
|
-
const { entering } = useNavTransition();
|
|
26
|
+
const { entering, animating } = useNavTransition();
|
|
28
27
|
const [arrowRef, setArrowRef] = React.useState(null);
|
|
29
28
|
const [tooltipContainer, setTooltipContainer] = React.useState(null);
|
|
30
29
|
const [positionStrategy, setPositionStrategy] = React.useState('absolute');
|
|
@@ -41,14 +40,13 @@ const warn = warnOnce('OnboardingTooltip');
|
|
|
41
40
|
disableShiftMiddleware,
|
|
42
41
|
overflowPadding
|
|
43
42
|
});
|
|
44
|
-
const isLock = React.useContext(LockFloatingPositionContext);
|
|
45
43
|
const { x: floatingDataX, y: floatingDataY, isPositioned, refs, placement: resolvedPlacement, middlewareData: { arrow: arrowCoords } } = useFloating({
|
|
46
44
|
strategy: positionStrategy,
|
|
47
45
|
...strictPlacement !== undefined && {
|
|
48
46
|
placement: strictPlacement
|
|
49
47
|
},
|
|
50
48
|
middleware: middlewares,
|
|
51
|
-
...!
|
|
49
|
+
...!animating && {
|
|
52
50
|
whileElementsMounted: (...args)=>autoUpdateFloatingElement(...args, {
|
|
53
51
|
elementResize: true
|
|
54
52
|
})
|