one
Version:
One is a React framework for web, iOS, and Android apps.
145 lines (142 loc) • 4.59 kB
JavaScript
import { useSyncExternalStore } from "react";
import { NitroModules } from "react-native-nitro-modules";
import * as ReservedRegions from "./ReservedRegions.native.js";
import { useReady, useRegions, useSegments, useSpanning } from "./reservedRegionsContext.native.js";
var hybrid;
function native() {
if (hybrid === void 0) {
hybrid = NitroModules.createHybridObject("OneAdaptive");
}
return hybrid;
}
var DEFAULT_SIZE_CLASS = {
horizontal: "unspecified",
vertical: "unspecified"
};
var currentSizeClass = DEFAULT_SIZE_CLASS;
var currentHinge = null;
function seedFromNative() {
var _created_getInitialHinge;
var created = native();
currentSizeClass = created.getInitialSizeClass();
currentHinge = (_created_getInitialHinge = created.getInitialHinge()) !== null && _created_getInitialHinge !== void 0 ? _created_getInitialHinge : null;
}
seedFromNative();
var sizeClassListeners = /* @__PURE__ */ new Set();
var hingeListeners = /* @__PURE__ */ new Set();
var sizeClassRemove;
var hingeRemove;
var sizeClassGeneration = 0;
var hingeGeneration = 0;
var hingeSeedStale = false;
var sizeClassSeedStale = false;
function sizesEqual(a, b) {
return a.horizontal === b.horizontal && a.vertical === b.vertical;
}
function hingesEqual(a, b) {
return a === b || a != null && b != null && a.status === b.status && a.angle === b.angle;
}
function setSizeClass(next) {
if (sizesEqual(currentSizeClass, next)) return;
currentSizeClass = next;
sizeClassListeners.forEach(function(listener) {
return listener();
});
}
function setHinge(next) {
if (hingesEqual(currentHinge, next)) return;
currentHinge = next;
hingeListeners.forEach(function(listener) {
return listener();
});
}
function subscribeSizeClass(onStoreChange) {
sizeClassListeners.add(onStoreChange);
if (sizeClassRemove === void 0) {
var created = native();
var generation = ++sizeClassGeneration;
var sawEvent = false;
sizeClassRemove = created.addSizeClassListener(function(sizeClass) {
sawEvent = true;
setSizeClass(sizeClass);
});
created.getSizeClass().then(function(sizeClass) {
if (generation === sizeClassGeneration && !sawEvent) setSizeClass(sizeClass);
});
}
return function() {
sizeClassListeners.delete(onStoreChange);
if (sizeClassListeners.size === 0) {
sizeClassGeneration++;
sizeClassRemove === null || sizeClassRemove === void 0 ? void 0 : sizeClassRemove();
sizeClassRemove = void 0;
sizeClassSeedStale = true;
}
};
}
function subscribeHinge(onStoreChange) {
hingeListeners.add(onStoreChange);
if (hingeRemove === void 0) {
var created = native();
var generation = ++hingeGeneration;
var sawEvent = false;
hingeRemove = created.addHingeListener(function(hinge) {
sawEvent = true;
setHinge(hinge !== null && hinge !== void 0 ? hinge : null);
});
created.getHinge().then(function(hinge) {
if (generation === hingeGeneration && !sawEvent) setHinge(hinge !== null && hinge !== void 0 ? hinge : null);
});
}
return function() {
hingeListeners.delete(onStoreChange);
if (hingeListeners.size === 0) {
hingeGeneration++;
hingeRemove === null || hingeRemove === void 0 ? void 0 : hingeRemove();
hingeRemove = void 0;
hingeSeedStale = true;
}
};
}
function sizeClassSnapshot() {
if (sizeClassSeedStale) {
sizeClassSeedStale = false;
currentSizeClass = native().getInitialSizeClass();
}
return currentSizeClass;
}
function hingeSnapshot() {
if (hingeSeedStale) {
var _native_getInitialHinge;
hingeSeedStale = false;
currentHinge = (_native_getInitialHinge = native().getInitialHinge()) !== null && _native_getInitialHinge !== void 0 ? _native_getInitialHinge : null;
}
return currentHinge;
}
function useSizeClass() {
return useSyncExternalStore(subscribeSizeClass, sizeClassSnapshot, function() {
return DEFAULT_SIZE_CLASS;
});
}
function getSizeClass() {
return native().getSizeClass();
}
function useHinge() {
return useSyncExternalStore(subscribeHinge, hingeSnapshot, function() {
return null;
});
}
async function getHinge() {
var _ref;
return (_ref = await native().getHinge()) !== null && _ref !== void 0 ? _ref : null;
}
function onHingeChange(callback) {
var remove = native().addHingeListener(function(hinge) {
return callback(hinge !== null && hinge !== void 0 ? hinge : null);
});
return function() {
return remove();
};
}
export { ReservedRegions, getHinge, getSizeClass, onHingeChange, useHinge, useRegions as useReservedRegions, useReady as useReservedRegionsReady, useSizeClass, useSpanning, useSegments as useWindowSegments };
//# sourceMappingURL=index.native.js.map