UNPKG

@logicwind/react-native-fold-detection

Version:

The purpose of the package is to provide details regarding the Android folding capability.

109 lines (107 loc) 4.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useFoldingFeature = exports.FoldingFeatureProvider = exports.FoldingFeatureContext = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _FoldingFeature = _interopRequireDefault(require("../FoldingFeature")); var _types = require("../types"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const FoldingFeatureContext = exports.FoldingFeatureContext = /*#__PURE__*/(0, _react.createContext)({ layoutInfo: { state: _types.FoldingFeatureState.FLAT, occlusionType: _types.FoldingFeatureOcclusionType.NONE, orientation: _types.FoldingFeatureOrientation.VERTICAL, isSeparating: false, isFoldSupported: false }, // helper state isTableTop: false, isBook: false, isFlat: true }); const useFoldingFeature = () => { const context = (0, _react.useContext)(FoldingFeatureContext); if (context === undefined) { throw new Error('useFoldingFeature was used outside of its provider'); } if (_reactNative.Platform.OS === 'ios') { return { layoutInfo: {}, isTableTop: false, isBook: false, isFlat: true }; } return context; }; exports.useFoldingFeature = useFoldingFeature; const FoldingFeatureProvider = ({ children }) => { const value = useProvideFunc(); if (_reactNative.Platform.OS === 'ios') { return children; } return /*#__PURE__*/_react.default.createElement(FoldingFeatureContext.Provider, { value: value }, children); }; exports.FoldingFeatureProvider = FoldingFeatureProvider; const useProvideFunc = () => { const [layoutInfo, setLayoutInfo] = (0, _react.useState)({ state: _types.FoldingFeatureState.FLAT, occlusionType: _types.FoldingFeatureOcclusionType.NONE, orientation: _types.FoldingFeatureOrientation.VERTICAL, isSeparating: false, isFoldSupported: false }); const updateLayoutInfo = event => { setLayoutInfo(event); }; const isTableTop = (0, _react.useMemo)(() => { return layoutInfo.state === _types.FoldingFeatureState.HALF_OPENED && layoutInfo.orientation === _types.FoldingFeatureOrientation.HORIZONTAL; }, [layoutInfo]); const isBook = (0, _react.useMemo)(() => { return layoutInfo.state === _types.FoldingFeatureState.HALF_OPENED && layoutInfo.orientation === _types.FoldingFeatureOrientation.VERTICAL; }, [layoutInfo]); const isFlat = (0, _react.useMemo)(() => { return !(isTableTop || isBook); }, [isTableTop, isBook]); (0, _react.useEffect)(() => { if (_reactNative.Platform.OS === 'ios') { return; // Just return early from the effect } _FoldingFeature.default.startListening(); const eventEmitter = new _reactNative.NativeEventEmitter(); const layoutSubscription = eventEmitter.addListener('onLayoutInfoChange', event => { if (event !== null && event !== void 0 && event.displayFeatures) { const stringObject = JSON.stringify(event.displayFeatures); const displayFeatures = JSON.parse(stringObject); if (displayFeatures) { // Now you can use these values as needed in your React Native component updateLayoutInfo(displayFeatures); } } }); const errorSubscription = eventEmitter.addListener('onError', event => { if (event !== null && event !== void 0 && event.error) { console.log('FoldingFeature', event.error); } }); return () => { layoutSubscription.remove(); errorSubscription.remove(); }; }, []); return { layoutInfo, isTableTop, isBook, isFlat }; }; //# sourceMappingURL=FoldingFeatureContext.js.map