/* eslint-disable react-native/no-inline-styles */ // @ts-nocheck import { MarkerBoxProps } from '@jsamr/react-native-li'; import { mapObjIndexed } from 'ramda'; import React, { createContext, PropsWithChildren, useContext, useMemo } from 'react'; import { Text, View } from 'react-native'; import defaultListStyleSpecs from '../elements/defaultListStyleSpecs'; import { ListStyleSpec, UnitaryListStyleSpec } from '../shared-types'; import { useSharedProps } from './SharedPropsProvider'; const listStyleSpecsContext = createContext< Record< string, ListStyleSpec & { renderMarker?: (props: MarkerBoxProps) => any } > >(defaultListStyleSpecs); export function useListStyleSpecs() { return useContext(listStyleSpecsContext); } function createSymbolicMarkerRenderer({ Component, counterStyleRenderer }: UnitaryListStyleSpec) { const prefix = counterStyleRenderer.renderPrefix(); const suffix = counterStyleRenderer.renderSuffix(); return ({ style, markerTextStyle, counterIndex, rtlMarkerReversed }: MarkerBoxProps) => { return ( {!!prefix && {prefix}} {React.createElement(Component, { ...(markerTextStyle as any), index: counterIndex })} {!!suffix && {suffix}} ); }; } const makeMarkerRenderers = mapObjIndexed((value: ListStyleSpec) => { if (value.type === 'unitary') { return { ...value, renderMarker: createSymbolicMarkerRenderer(value) }; } return value; }); export default function ListStyleSpecsProvider({ children }: PropsWithChildren<{}>) { const { customListStyleSpecs } = useSharedProps(); const mergedListStyleSpecs = useMemo(() => { return makeMarkerRenderers( customListStyleSpecs != null ? { ...defaultListStyleSpecs, ...customListStyleSpecs } : defaultListStyleSpecs ); }, [customListStyleSpecs]); return ( {children} ); }