Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 forked from jollywhoppers.com/witchsky.app
Something went wrong. Try again.
1.8 kB · 68 lines
TypeScript
at build
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import { findNodeHandle, type GestureResponderEvent, type View,} from 'react-native'
import {type DialogControlOpenOptions} from '#/components/Dialog/types'import {type BottomSheetPopoverMode} from '../../../modules/bottom-sheet'
/** * Keep explicit anchors for programmatic opens, but only infer an anchor from * press events when the dialog opts into popover presentation. */export function getDialogSourceViewTag({ popover = 'never', nativeSourceViewTag, options,}: { popover?: BottomSheetPopoverMode nativeSourceViewTag?: number options?: DialogControlOpenOptions & Partial<GestureResponderEvent>}): number | undefined { if (nativeSourceViewTag != null) { return nativeSourceViewTag }
if (typeof options?.sourceViewTag === 'number') { return options.sourceViewTag }
if (popover === 'never') { return undefined }
return ( getNativeViewTag(options?.currentTarget) ?? getNativeViewTag(options?.target) ?? getNativeViewTag(options?.nativeEvent?.target) )}
/** * UIKit needs a React tag even when Fabric exposes the event target as a host * instance. Detached or unsupported targets can fall back to another source. */export function getNativeViewTag(target: unknown): number | undefined { if (typeof target === 'number') { return Number.isSafeInteger(target) ? target : undefined }
if (typeof target === 'string') { const parsed = Number(target) return target.trim() !== '' && Number.isSafeInteger(parsed) ? parsed : undefined }
if (target == null) { return undefined }
try { const tag = findNodeHandle(target as React.ComponentRef<typeof View>) return typeof tag === 'number' ? tag : undefined } catch { return undefined }}