reka-ui
Version:
Vue port for Radix UI Primitives.
31 lines (23 loc) • 1.02 kB
text/typescript
import { isEqual } from 'ohash'
export function queryCheckedElement(parentEl: HTMLElement | null) {
return parentEl?.querySelector('[data-state=checked]') as HTMLElement | null
}
export function valueComparator<T>(value: T | T[] | undefined, currentValue: T, comparator?: string | ((a: T, b: T) => boolean)) {
if (value === undefined)
return false
else if (Array.isArray(value))
return value.some(val => compare(val, currentValue, comparator))
else
return compare(value, currentValue, comparator)
}
export function compare<T>(value?: T, currentValue?: T, comparator?: string | ((a: T, b: T) => boolean)) {
if (value === undefined || currentValue === undefined)
return false
if (typeof value === 'string')
return value === currentValue
if (typeof comparator === 'function')
return comparator(value, currentValue)
if (typeof comparator === 'string')
return value?.[comparator as keyof T] === currentValue?.[comparator as keyof T]
return isEqual(value, currentValue)
}