UNPKG

1.63 kBTypeScriptView Raw
1/*
2 * Copyright 2020 Adobe. All rights reserved.
3 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License. You may obtain a copy
5 * of the License at http://www.apache.org/licenses/LICENSE-2.0
6 *
7 * Unless required by applicable law or agreed to in writing, software distributed under
8 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9 * OF ANY KIND, either express or implied. See the License for the specific language
10 * governing permissions and limitations under the License.
11 */
12
13import {DOMPropsResponderContext} from './DOMPropsContext';
14import {HoverProps} from './useHover';
15import React, {ForwardedRef, ReactNode, useEffect, useRef} from 'react';
16import {useObjectRef} from '@react-aria/utils';
17
18interface DOMPropsResponderProps extends HoverProps {
19 children: ReactNode
20}
21
22export const DOMPropsResponder = React.forwardRef(({children, ...props}: DOMPropsResponderProps, ref: ForwardedRef<Element>) => {
23 let isRegistered = useRef(false);
24 let objRef = useObjectRef(ref);
25 let context = {
26 ...props,
27 ref: objRef,
28 register() {
29 isRegistered.current = true;
30 }
31 };
32
33 // TODO: Think of a more generic message when this replaces the PressResponder as well
34 useEffect(() => {
35 if (!isRegistered.current) {
36 console.warn(
37 'A DOMPropsResponder was ultilized without a hoverable DOM node.'
38 );
39 }
40 }, []);
41
42 return (
43 <DOMPropsResponderContext.Provider value={context}>
44 {children}
45 </DOMPropsResponderContext.Provider>
46 );
47});