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
JavaScript
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