@grafana/ui
Version:
Grafana Components Library
66 lines (61 loc) • 1.83 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
;
const TimeRangeContext = React.createContext(void 0);
function TimeRangeProvider({ children }) {
const [pickersCount, setPickersCount] = React.useState(0);
const [syncedValue, setSyncedValue] = React.useState();
const contextVal = React.useMemo(() => {
return {
sync: (value) => setSyncedValue(value),
unSync: () => setSyncedValue(void 0),
addPicker: () => setPickersCount((val) => val + 1),
removePicker: () => {
setPickersCount((val) => {
const newVal = val - 1;
if (newVal < 2) {
setSyncedValue(void 0);
}
return newVal;
});
},
syncPossible: pickersCount > 1,
synced: Boolean(syncedValue),
syncedValue
};
}, [pickersCount, syncedValue]);
return /* @__PURE__ */ jsxRuntime.jsx(TimeRangeContext.Provider, { value: contextVal, children });
}
function useTimeRangeContext(initialSyncValue) {
const context = React.useContext(TimeRangeContext);
React.useEffect(() => {
if (context) {
context.addPicker();
if (initialSyncValue) {
context.sync(initialSyncValue);
}
return () => {
context.removePicker();
};
}
return () => {
};
}, []);
return React.useMemo(() => {
if (!context) {
return context;
}
return {
sync: context.sync,
unSync: context.unSync,
syncPossible: context.syncPossible,
synced: context.synced,
syncedValue: context.syncedValue
};
}, [context]);
}
exports.TimeRangeProvider = TimeRangeProvider;
exports.useTimeRangeContext = useTimeRangeContext;
//# sourceMappingURL=TimeRangeContext.cjs.map