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