@sanity/default-layout
Version:
The default layout components for Sanity
50 lines (48 loc) • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getOrderedTools;
var _defaultLayout = _interopRequireDefault(require("config:@sanity/default-layout"));
var _getRegisteredTools = require("./getRegisteredTools");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// @todo: remove the following line when part imports has been removed from this file
///<reference types="@sanity/types/parts" />
function getOrderedTools() {
var config = _defaultLayout.default.toolSwitcher || {};
var order = config.order || [];
var hidden = config.hidden || [];
var tools = (0, _getRegisteredTools.getRegisteredTools)();
if (!order.length && !hidden.length) {
return tools;
}
var keyed = tools.reduce((target, tool) => {
var title = tool.title || '<unknown>';
if (!tool.name) {
console.warn("Tool \"".concat(title, "\" does not have the required \"name\"-property")); // eslint-disable-line no-console
return target;
}
if (target[tool.name]) {
var existing = target[tool.name].tool.title;
console.warn("Tools with duplicate name \"".concat(tool.name, "\" found (\"").concat(title, "\" and \"").concat(existing, "\")")); // eslint-disable-line no-console
return target;
}
var toolIndex = order.indexOf(tool.name);
target[tool.name] = {
tool: tool,
index: toolIndex === -1 ? +Infinity : toolIndex
};
return target;
}, {});
var isVisible = tool => hidden.indexOf(tool.name) === -1;
return tools.filter(isVisible).sort((tool1, tool2) => {
var toolA = keyed[tool1.name];
var toolB = keyed[tool2.name];
var indexA = toolA ? toolA.index : +Infinity;
var indexB = toolB ? toolB.index : +Infinity;
if (indexA === indexB) {
return 0;
}
return indexA - indexB;
});
}