one
Version:
One is a React framework for web, iOS, and Android apps.
109 lines (106 loc) • 3.17 kB
JavaScript
import { createContext, useContext, useMemo } from "react";
var ReservedRegionsContext = createContext(null);
function useSnapshot(hook) {
var snapshot = useContext(ReservedRegionsContext);
if (!snapshot) {
throw new Error(`One.${hook} must be used inside One.UI.ReservedRegions.Provider`);
}
return snapshot;
}
function useRegions(options) {
var { regions } = useSnapshot("useReservedRegions");
var kind = options === null || options === void 0 ? void 0 : options.kind;
var includeInactive = (options === null || options === void 0 ? void 0 : options.includeInactive) === true;
return useMemo(function() {
return regions.filter(function(region) {
return (!kind || region.kind === kind) && (includeInactive || region.isActive);
});
}, [
regions,
kind,
includeInactive
]);
}
function useReady() {
return useSnapshot("useReservedRegionsReady").ready;
}
function useSegments() {
var { bounds, ready, regions } = useSnapshot("useWindowSegments");
return useMemo(function() {
if (!ready || !bounds || bounds.width <= 0 || bounds.height <= 0) return [];
return segmentsFor(bounds, regions);
}, [
bounds,
ready,
regions
]);
}
function useSpanning() {
return useSegments().length > 1;
}
function segmentsFor(bounds, regions) {
var edgeTolerance = .5;
var segments = [{
x: 0,
y: 0,
...bounds
}];
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
var _loop = function() {
var region = _step.value;
if (region.kind !== "division" || !region.isActive) return "continue";
var { x, y, width, height } = region.frame;
segments = segments.flatMap(function(segment) {
var right = segment.x + segment.width;
var bottom = segment.y + segment.height;
if (y <= segment.y + edgeTolerance && y + height >= bottom - edgeTolerance && x > segment.x && x + width < right) {
return [{
x: segment.x,
y: segment.y,
width: x - segment.x,
height: segment.height
}, {
x: x + width,
y: segment.y,
width: right - x - width,
height: segment.height
}];
}
if (x <= segment.x + edgeTolerance && x + width >= right - edgeTolerance && y > segment.y && y + height < bottom) {
return [{
x: segment.x,
y: segment.y,
width: segment.width,
height: y - segment.y
}, {
x: segment.x,
y: y + height,
width: segment.width,
height: bottom - y - height
}];
}
return [segment];
});
};
for (var _iterator = regions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return segments.sort(function(a, b) {
return a.y - b.y || a.x - b.x;
});
}
export { ReservedRegionsContext, segmentsFor, useReady, useRegions, useSegments, useSpanning };
//# sourceMappingURL=reservedRegionsContext.native.js.map