@navikt/ds-react
Version:
React components from the Norwegian Labour and Welfare Administration.
113 lines • 4.65 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDescendantContext = createDescendantContext;
/**
* https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
*/
const react_1 = __importStar(require("react"));
const create_context_1 = require("../../create-context");
const useClientLayoutEffect_1 = require("../useClientLayoutEffect");
const useMergeRefs_1 = require("../useMergeRefs");
const descendant_1 = require("./descendant");
const utils_1 = require("./utils");
/**
* Provides strongly typed versions of the context provider and hooks above.
*/
function createDescendantContext() {
const [DescendantsContextProvider, useDescendantsContext] = (0, create_context_1.createContext)({
name: "DescendantsProvider",
errorMessage: "useDescendantsContext must be used within DescendantsProvider",
});
const ContextProvider = (0, utils_1.cast)((props) => (react_1.default.createElement(DescendantsContextProvider, Object.assign({}, props.value), props.children)));
/**
* @internal
* This hook provides information to descendant component:
* - Index compared to other descendants
* - ref callback to register the descendant
* - Its enabled index compared to other enabled descendants
*/
function useDescendant(options) {
const descendants = useDescendantsContext();
const [index, setIndex] = (0, react_1.useState)(-1);
const ref = (0, react_1.useRef)(null);
(0, useClientLayoutEffect_1.useClientLayoutEffect)(() => {
return () => {
if (!ref.current)
return;
// eslint-disable-next-line react-hooks/exhaustive-deps
descendants.unregister(ref.current);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
// eslint-disable-next-line react-hooks/exhaustive-deps
(0, useClientLayoutEffect_1.useClientLayoutEffect)(() => {
if (!ref.current)
return;
const dataIndex = Number(ref.current.dataset.index);
if (index !== dataIndex && !Number.isNaN(dataIndex)) {
setIndex(dataIndex);
}
});
const refCallback = options
? (0, utils_1.cast)(descendants.register(options))
: (0, utils_1.cast)(descendants.register);
return {
descendants,
index,
enabledIndex: descendants.enabledIndexOf(ref.current),
register: (0, useMergeRefs_1.mergeRefs)([refCallback, ref]),
};
}
/**
* @internal
* Initializing DescendantsManager
*/
function useDescendants() {
const descendants = (0, react_1.useRef)(new descendant_1.DescendantsManager()).current;
return descendants;
}
return [
// context provider
ContextProvider,
// call this when you need to read from context
useDescendantsContext,
// descendants state information, to be called and passed to `ContextProvider`
useDescendants,
// descendant index information
useDescendant,
];
}
//# sourceMappingURL=useDescendant.js.map