// @flow import React, { type Node } from 'react'; import type { Responders, ContextId, Sensor } from '../../types'; import ErrorBoundary from './error-boundary'; import preset from '../../screen-reader-message-preset'; import App from './app'; import useUniqueContextId, { reset as resetContextId, } from './use-unique-context-id'; import { reset as resetUniqueIds } from '../use-unique-id'; type Props = {| ...Responders, // We do not technically need any children for this component children: Node | null, // Read out by screen readers when focusing on a drag handle dragHandleUsageInstructions?: string, // Used for strict content security policies // See our [content security policy guide](/docs/guides/content-security-policy.md) nonce?: string, // See our [sensor api](/docs/sensors/sensor-api.md) sensors?: Sensor[], enableDefaultSensors?: ?boolean, |}; // Reset any context that gets persisted across server side renders export function resetServerContext() { resetContextId(); resetUniqueIds(); } export default function DragDropContext(props: Props) { const contextId: ContextId = useUniqueContextId(); const dragHandleUsageInstructions: string = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions; // We need the error boundary to be on the outside of App // so that it can catch any errors caused by App return ( {setCallbacks => ( {props.children} )} ); }