UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

113 lines 6.55 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.useAccessibilityContext = exports.accessibilityContextDefaultValue = exports.AccessibilityProvider = exports.AccessibilityContext = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _useAccessibilityAnnouncer = require("../../components/Accessibility/useAccessibilityAnnouncer"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/contexts/accessibilityContext/AccessibilityContext.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var ANNOUNCE_DEBOUNCE_MS = 50; var defaultHasInteractiveAccessibilityContent = message => !!(message.poll_id || message.quoted_message || message.attachments?.length || message.shared_location); var accessibilityContextDefaultValue = exports.accessibilityContextDefaultValue = { announceConnectionState: true, announceNewMessages: true, announceTypingIndicator: false, audioRecorderTapMode: 'auto', enabled: false, forceScreenReaderMode: false, hasInteractiveAccessibilityContent: defaultHasInteractiveAccessibilityContent, imageGalleryScreenReaderMode: 'auto', messageActionsTrigger: 'auto' }; var AccessibilityContext = exports.AccessibilityContext = _react.default.createContext(accessibilityContextDefaultValue); var AccessibilityAnnouncerProvider = ({ children }) => { var sequenceByPriorityRef = (0, _react.useRef)({ assertive: 0, polite: 0 }); var timeoutByPriorityRef = (0, _react.useRef)({ assertive: undefined, polite: undefined }); var unmountedRef = (0, _react.useRef)(false); var clearPendingTimeout = (0, _react.useCallback)(priority => { if (!timeoutByPriorityRef.current[priority]) return; clearTimeout(timeoutByPriorityRef.current[priority]); timeoutByPriorityRef.current[priority] = undefined; }, []); var announce = (0, _react.useCallback)((message, priority = 'polite') => { if (!message) return; var sequence = sequenceByPriorityRef.current[priority] + 1; sequenceByPriorityRef.current[priority] = sequence; clearPendingTimeout(priority); timeoutByPriorityRef.current[priority] = setTimeout(() => { if (unmountedRef.current) return; if (sequenceByPriorityRef.current[priority] !== sequence) return; _reactNative.AccessibilityInfo.announceForAccessibility(message); timeoutByPriorityRef.current[priority] = undefined; }, ANNOUNCE_DEBOUNCE_MS); }, [clearPendingTimeout]); (0, _react.useEffect)(() => { unmountedRef.current = false; return () => { unmountedRef.current = true; clearPendingTimeout('assertive'); clearPendingTimeout('polite'); }; }, [clearPendingTimeout]); var contextValue = (0, _react.useMemo)(() => ({ announce }), [announce]); return (0, _jsxRuntime.jsx)(_useAccessibilityAnnouncer.AccessibilityAnnouncerContext.Provider, { value: contextValue, children: children }); }; var AccessibilityProvider = ({ children, value }) => { var _ref = value ?? {}, _ref$announceConnecti = _ref.announceConnectionState, announceConnectionState = _ref$announceConnecti === void 0 ? accessibilityContextDefaultValue.announceConnectionState : _ref$announceConnecti, _ref$announceNewMessa = _ref.announceNewMessages, announceNewMessages = _ref$announceNewMessa === void 0 ? accessibilityContextDefaultValue.announceNewMessages : _ref$announceNewMessa, _ref$announceTypingIn = _ref.announceTypingIndicator, announceTypingIndicator = _ref$announceTypingIn === void 0 ? accessibilityContextDefaultValue.announceTypingIndicator : _ref$announceTypingIn, _ref$audioRecorderTap = _ref.audioRecorderTapMode, audioRecorderTapMode = _ref$audioRecorderTap === void 0 ? accessibilityContextDefaultValue.audioRecorderTapMode : _ref$audioRecorderTap, _ref$enabled = _ref.enabled, enabled = _ref$enabled === void 0 ? accessibilityContextDefaultValue.enabled : _ref$enabled, _ref$forceScreenReade = _ref.forceScreenReaderMode, forceScreenReaderMode = _ref$forceScreenReade === void 0 ? accessibilityContextDefaultValue.forceScreenReaderMode : _ref$forceScreenReade, hasInteractiveAccessibilityContent = _ref.hasInteractiveAccessibilityContent, _ref$imageGalleryScre = _ref.imageGalleryScreenReaderMode, imageGalleryScreenReaderMode = _ref$imageGalleryScre === void 0 ? accessibilityContextDefaultValue.imageGalleryScreenReaderMode : _ref$imageGalleryScre, _ref$messageActionsTr = _ref.messageActionsTrigger, messageActionsTrigger = _ref$messageActionsTr === void 0 ? accessibilityContextDefaultValue.messageActionsTrigger : _ref$messageActionsTr; var resolved = (0, _react.useMemo)(() => ({ announceConnectionState, announceNewMessages, announceTypingIndicator, audioRecorderTapMode, enabled, forceScreenReaderMode, hasInteractiveAccessibilityContent: hasInteractiveAccessibilityContent ? message => hasInteractiveAccessibilityContent(message, accessibilityContextDefaultValue.hasInteractiveAccessibilityContent(message)) : accessibilityContextDefaultValue.hasInteractiveAccessibilityContent, imageGalleryScreenReaderMode, messageActionsTrigger }), [announceConnectionState, announceNewMessages, announceTypingIndicator, audioRecorderTapMode, enabled, forceScreenReaderMode, hasInteractiveAccessibilityContent, imageGalleryScreenReaderMode, messageActionsTrigger]); return (0, _jsxRuntime.jsx)(AccessibilityContext.Provider, { value: resolved, children: enabled ? (0, _jsxRuntime.jsx)(AccessibilityAnnouncerProvider, { children: children }) : children }); }; exports.AccessibilityProvider = AccessibilityProvider; var useAccessibilityContext = () => (0, _react.useContext)(AccessibilityContext); exports.useAccessibilityContext = useAccessibilityContext; //# sourceMappingURL=AccessibilityContext.js.map