@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
237 lines (236 loc) • 7.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.correctInternalHeadingLevel = void 0;
exports.debugCounter = debugCounter;
exports.globalSyncCounter = exports.globalResetNextTime = exports.globalNextLevel = exports.globalHeadingCounter = exports.getHeadingSize = exports.getHeadingElement = void 0;
exports.resetAllLevels = resetAllLevels;
exports.resetLevels = resetLevels;
exports.setNextLevel = setNextLevel;
exports.teardownHeadings = teardownHeadings;
exports.windupHeadings = windupHeadings;
var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js"));
var _componentHelper = require("../../shared/component-helper.js");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const globalSyncCounter = exports.globalSyncCounter = {
current: null
};
const globalHeadingCounter = exports.globalHeadingCounter = {
current: null
};
const refs = {
current: null
};
const correctInternalHeadingLevel = ({
counter,
level,
ref = null,
reset = null,
inherit = null,
increase = false,
decrease = false,
source = null,
bypassChecks = false,
isRerender = false,
debug = null
}) => {
if (ref && refs.current) {
const foundRef = refs.current.find(cur => cur.ref === ref);
if (foundRef) {
return foundRef.counter;
}
}
if (bypassChecks) {
counter.enableBypassChecks();
}
const hasCounterWasCorrectedToLevel2 = () => {
var _globalSyncCounter$cu, _globalHeadingCounter;
return (globalSyncCounter === null || globalSyncCounter === void 0 || (_globalSyncCounter$cu = globalSyncCounter.current) === null || _globalSyncCounter$cu === void 0 ? void 0 : _globalSyncCounter$cu.level) === 1 && (globalHeadingCounter === null || globalHeadingCounter === void 0 || (_globalHeadingCounter = globalHeadingCounter.current) === null || _globalHeadingCounter === void 0 ? void 0 : _globalHeadingCounter.hasCorrection()) && (counter === null || counter === void 0 ? void 0 : counter.getLevel()) === 2;
};
const update = level => {
var _globalHeadingCounter2;
if (!isRerender) {
counter.makeMeReady({
level
});
}
if (inherit) {
if (globalSyncCounter.current) {
counter.entry = globalSyncCounter.current.contextCounter.entry;
counter.level = globalSyncCounter.current.level;
} else {
report(debug, source, 'Heading got inherit, but there was noting to inherit.');
}
}
if (level >= 1) {
counter.setLevel(level);
} else if (decrease) {
counter.decrement();
} else if (increase && !hasCounterWasCorrectedToLevel2()) {
counter.increment();
}
if (counter.level > 0 && !((_globalHeadingCounter2 = globalHeadingCounter.current) !== null && _globalHeadingCounter2 !== void 0 && _globalHeadingCounter2.hasEntryLevel())) {
var _globalHeadingCounter3;
(_globalHeadingCounter3 = globalHeadingCounter.current) === null || _globalHeadingCounter3 === void 0 || _globalHeadingCounter3.setEntryLevel();
}
};
let skipUpdateFromProp = false;
const canBeManipulatedNextTime = overwriteContext => {
return counter.contextCounter.isGlobal || counter.contextCounter.entry === 1 || overwriteContext;
};
if (globalResetNextTime.current) {
const {
level: resetLevel,
overwriteContext
} = globalResetNextTime.current;
globalResetNextTime.current = null;
if (canBeManipulatedNextTime(overwriteContext) || counter.lastResetLevel === resetLevel) {
counter.makeMeReady();
counter.reset(resetLevel);
skipUpdateFromProp = true;
}
} else if (globalNextLevel.current) {
const {
level: nextLevel,
overwriteContext
} = globalNextLevel.current;
globalNextLevel.current = null;
if (canBeManipulatedNextTime(overwriteContext)) {
counter.enableBypassChecks();
update(nextLevel);
counter.disableBypassChecks();
skipUpdateFromProp = true;
}
}
if (!skipUpdateFromProp) {
if (reset === true || parseFloat(String(reset)) > -1) {
counter.reset(reset);
} else {
update(level);
}
}
const hasReport = counter.useLastReport();
if (hasReport) {
report(debug, source, ...hasReport);
}
if (bypassChecks) {
counter.disableBypassChecks();
}
if (ref) {
var _context;
refs.current = refs.current || [];
(0, _push.default)(_context = refs.current).call(_context, {
ref,
counter
});
}
return counter;
};
exports.correctInternalHeadingLevel = correctInternalHeadingLevel;
function report(debug, source, ...reports) {
if (source) {
const props = source.props || {};
const identifiers = [props.id, props['class'], props.className].filter(Boolean);
(0, _push.default)(reports).call(reports, '\nNB: This warning was triggered by:', identifiers.length > 0 ? identifiers.join(', ') : '', (0, _componentHelper.convertJsxToString)(source));
}
if (typeof debug === 'function') {
debug(...reports);
} else {
(0, _componentHelper.warn)(...reports);
}
}
function resetAllLevels() {
countHeadings = 0;
resetLevels(1, {
overwriteContext: false
});
teardownHeadings();
}
const globalResetNextTime = exports.globalResetNextTime = {
current: null
};
function resetLevels(level, {
overwriteContext = false
} = {}) {
globalResetNextTime.current = {
level,
overwriteContext
};
}
const globalNextLevel = exports.globalNextLevel = {
current: null
};
function setNextLevel(level, {
overwriteContext = false
} = {}) {
globalNextLevel.current = {
level,
overwriteContext
};
}
let countHeadings = 0;
function windupHeadings() {
countHeadings++;
globalSyncCounter.current = null;
}
function teardownHeadings() {
countHeadings--;
if (countHeadings === 0) {
globalHeadingCounter.current = null;
globalSyncCounter.current = null;
globalResetNextTime.current = null;
globalNextLevel.current = null;
}
}
function debugCounter(counter) {
return JSON.stringify({
group: counter.group || counter.contextCounter.group,
level: counter.level,
entry: counter.entry,
contextLevel: counter.contextCounter.level,
contextLEntry: counter.contextCounter.entry
}, null, 2);
}
const getHeadingSize = theme => {
switch (theme) {
case 'sbanken':
return {
1: 'xx-large',
2: 'x-large',
3: 'large',
4: 'medium',
5: 'basis',
6: 'small'
};
case 'ui':
default:
return {
1: 'xx-large',
2: 'large',
3: 'medium',
4: 'basis',
5: 'small',
6: 'x-small'
};
}
};
exports.getHeadingSize = getHeadingSize;
const getHeadingElement = level => {
switch (level) {
case 1:
return 'h1';
case 2:
return 'h2';
case 3:
return 'h3';
case 4:
return 'h4';
case 5:
return 'h5';
case 6:
return 'h6';
}
};
exports.getHeadingElement = getHeadingElement;
//# sourceMappingURL=HeadingHelpers.js.map