@launchmenu/core
Version:
An environment for visual keyboard controlled applets
187 lines • 16.1 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (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 (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.StackView = void 0;
const react_1 = __importStar(require("react"));
const Transition_1 = require("./transitions/Transition");
const getViewStackItemElement_1 = require("./getViewStackItemElement");
const uuid_1 = require("uuid");
const findStackChanges_1 = require("../../../context/findStackChanges");
const model_react_1 = require("model-react");
/**
* Retrieves the view for a given stack item
* @param item The item to get the view for
* @returns THe view
*/
function getView(item) {
if ("close" in item.value)
return;
let view;
if ("view" in item.value)
view = item.value.view;
else
view = item.value;
return view;
}
/**
* Updates the children array, replacing, adding or removing children
* @param items The new items array
* @param prevItems The old items array
* @param children The children list to modify
* @param defaultTransitions The default transitions to be used
* @param skipOpening Whether to skip opening animation for the new items
*/
function updateChildren(items, prevItems, children, defaultTransitions, skipOpening) {
const { added, removed, updated } = findStackChanges_1.findStackChanges(prevItems, items);
const childMap = {};
children.forEach(item => {
if (item.element)
childMap[item.id] = item;
});
updated.forEach(({ index, oldItem, newItem }) => {
const child = childMap[oldItem.ID];
const view = getView(newItem);
if (child && view)
child.element = view;
});
removed.forEach(({ item }) => {
const child = childMap[item.ID];
if (child)
child.element = undefined;
});
added.forEach(({ index, item }) => {
if ("close" in item.value)
return;
// Find the index to add the item at
let childIndex;
if (index > 0) {
const itemBefore = items[index - 1];
childIndex = children.findIndex(({ id }) => id == itemBefore.ID) + 1;
}
else {
childIndex = 0;
}
const view = getView(item);
const { transparent, transitions } = "transparent" in item.value || "transitions" in item.value
? item.value
: { transparent: false, transitions: {} };
// Add the child or replace a previous child
const currentChild = children[childIndex];
if (currentChild && currentChild.element == undefined && !currentChild.closing) {
currentChild.element = view;
currentChild.id = item.ID;
currentChild.wasTransparent =
currentChild.wasTransparent || currentChild.transparent;
currentChild.transparent = transparent !== null && transparent !== void 0 ? transparent : false;
currentChild.transitions = { ...defaultTransitions, ...transitions };
}
else {
children.splice(childIndex, 0, {
key: uuid_1.v4(),
id: item.ID,
element: view,
closing: false,
opening: skipOpening ? false : true,
wasTransparent: false,
transparent: transparent !== null && transparent !== void 0 ? transparent : false,
transitions: { ...defaultTransitions, ...transitions },
skipOpening,
});
}
});
removed.forEach(({ item }) => {
const child = children.find(({ id, closing, element }) => id == item.ID && !closing && !element);
if (child)
child.closing = true;
});
}
/**
* Visualizes a stack of views
*/
exports.StackView = react_1.memo(({ stackGetter, smartHide = true, ChangeTransitionComp, CloseTransitionComp, OpenTransitionComp, }) => {
var _a;
// Retrieve the items
const [h] = model_react_1.useDataHook();
const items = stackGetter(h);
const prevItems = react_1.useRef();
// Keep track of the children to render
const childrenRef = react_1.useRef([]);
// Update the elements to render when the items array changes
if (prevItems.current != items) {
updateChildren(items, (_a = prevItems.current) !== null && _a !== void 0 ? _a : [], childrenRef.current, {
Open: OpenTransitionComp !== null && OpenTransitionComp !== void 0 ? OpenTransitionComp : Transition_1.defaultTransitions.Open,
Change: ChangeTransitionComp !== null && ChangeTransitionComp !== void 0 ? ChangeTransitionComp : Transition_1.defaultTransitions.Change,
Close: CloseTransitionComp !== null && CloseTransitionComp !== void 0 ? CloseTransitionComp : Transition_1.defaultTransitions.Close,
}, prevItems.current == undefined);
prevItems.current = items;
}
// Handle transition changes
const [_, _forceUpdate] = react_1.useState(false);
const forceUpdate = () => _forceUpdate(a => !a);
const onClose = (key) => {
const children = childrenRef.current;
const index = children.findIndex(({ key: k }) => k == key);
if (index != -1) {
children.splice(index, 1);
forceUpdate();
}
};
const onOpen = (key) => {
const children = childrenRef.current;
const child = children.find(({ key: k }) => k == key);
if (child) {
child.opening = false;
forceUpdate();
}
};
const onChange = (key) => {
const children = childrenRef.current;
const child = children.find(({ key: k }) => k == key);
if (child) {
child.wasTransparent = false;
forceUpdate();
}
};
// Find the first index that needs to be rendered
const children = childrenRef.current;
let firstOpaqueIndex = smartHide ? children.length : 0;
let childTransparent = true;
while (childTransparent && --firstOpaqueIndex >= 0) {
const child = children[firstOpaqueIndex];
childTransparent =
child.opening ||
child.closing ||
child.transparent ||
child.wasTransparent;
}
// Render the children
return (react_1.default.createElement(react_1.default.Fragment, null, childrenRef.current.map(({ key, id, element, transitions, skipOpening }, index) => {
const props = {
key: id,
onTop: index == childrenRef.current.length,
stack: items,
index,
};
const el = element && getViewStackItemElement_1.getViewStackItemElement(element, props);
return (react_1.default.createElement(Transition_1.Transition, { key: key, hidden: index < firstOpaqueIndex, onClose: () => onClose(key), onChange: () => onChange(key), onOpen: () => onOpen(key), skipMountAnimation: skipOpening, ChangeTransitionComp: transitions.Change, CloseTransitionComp: transitions.Close, OpenTransitionComp: transitions.Open }, el));
})));
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhY2tWaWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29udGV4dC9zdGFja3MvU3RhY2tWaWV3LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQW9EO0FBR3BELHlEQUF3RTtBQUN4RSx1RUFBa0U7QUFHbEUsK0JBQWdDO0FBTWhDLHdFQUFtRTtBQUNuRSw2Q0FBd0M7QUF1QnhDOzs7O0dBSUc7QUFDSCxTQUFTLE9BQU8sQ0FBQyxJQUFxQztJQUNsRCxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU87SUFFbEMsSUFBSSxJQUF3QixDQUFDO0lBQzdCLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLO1FBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOztRQUM1QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN2QixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsY0FBYyxDQUNuQixLQUFpRCxFQUNqRCxTQUFxRCxFQUNyRCxRQUEyQixFQUMzQixrQkFBOEMsRUFDOUMsV0FBcUI7SUFFckIsTUFBTSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLEdBQUcsbUNBQWdCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFvQyxFQUFFLENBQUM7SUFDckQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsT0FB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
;