react-native-unistyles
Version:
Level up your React Native StyleSheet
34 lines (27 loc) • 909 B
text/typescript
import type React from 'react'
import type { Nullable, UnistylesValues } from '../../types'
import * as unistyles from '../services'
import { isServer } from './common'
type Styles = readonly [
{
hash: string
},
Array<UnistylesValues>
]
export const createUnistylesRef = <T>(styles?: Styles, forwardedRef?: React.ForwardedRef<T>) => {
const storedRef = { current: null as Nullable<T> }
const [classNames] = styles ?? []
return isServer() ? undefined : (ref: Nullable<T>) => {
if (!ref) {
unistyles.services.shadowRegistry.remove(storedRef, classNames?.hash)
}
storedRef.current = ref
unistyles.services.shadowRegistry.add(ref, classNames?.hash)
if (typeof forwardedRef === 'function') {
return forwardedRef(ref)
}
if (forwardedRef) {
forwardedRef.current = ref
}
}
}