@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
74 lines (73 loc) • 2.27 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const React = require("react");
const h = require("@macrostrat/hyper");
const patterns = require("./patterns.cjs");
const frame = require("../frame.cjs");
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
const h__default = /* @__PURE__ */ _interopDefault(h);
const PatternDefsContext = React.createContext(null);
const GeologicPatternDefs = function(props) {
let { patternIDs, scalePattern } = props;
const UUID = props.UUID ?? frame.useUUID();
return h__default.default(
"defs",
Array.from(patternIDs).map(function(id, i) {
if (id === -1) {
return null;
}
let sz = 100;
if (scalePattern != null) {
sz *= scalePattern(id);
}
return h__default.default(patterns.GeologicPattern, {
key: i,
prefix: UUID,
id,
width: sz,
height: sz
});
})
);
};
function PatternDefsProvider(props) {
const { scalePattern, children } = props;
const [patternIDs, setPatternIDs] = React.useState(/* @__PURE__ */ new Set());
const trackPattern = React.useCallback(
(p) => {
if (patternIDs.has(p)) return;
let newSet = new Set(patternIDs);
newSet.add(p);
setPatternIDs(newSet);
},
[patternIDs]
);
const value = React.useMemo(() => {
return { trackPattern };
}, [trackPattern]);
return h__default.default(
frame.UUIDProvider,
h__default.default(
PatternDefsContext.Provider,
{ value },
h__default.default("g.patterns", [
h__default.default(GeologicPatternDefs, { scalePattern, patternIDs }),
children
])
)
);
}
function useGeologicPattern(patternID, fallback = "#aaa") {
const ctx1 = React.useContext(patterns.GeologicPatternContext);
const ctx = React.useContext(PatternDefsContext);
const UUID = frame.useUUID();
React.useEffect(() => {
ctx?.trackPattern(patternID);
}, [patternID, ctx]);
let v = ctx1?.resolvePattern(patternID);
if (v == null) return fallback;
return `url(#${UUID}-${patternID})`;
}
exports.PatternDefsProvider = PatternDefsProvider;
exports.useGeologicPattern = useGeologicPattern;
//# sourceMappingURL=column-patterns.cjs.map