@zextras/carbonio-shell-ui
Version:
The Zextras Carbonio web client
123 lines • 4.14 kB
JavaScript
;
/*
* SPDX-FileCopyrightText: 2021 Zextras <https://www.zextras.com>
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateBoardContext = exports.updateBoard = exports.setCurrentBoard = exports.reduceBoards = exports.expandBoards = exports.reopenBoards = exports.minimizeBoards = exports.onGoToPanel = exports.closeAllBoards = exports.closeBoard = exports.addBoard = exports.useBoardStore = void 0;
const immer_1 = require("immer");
const lodash_1 = require("lodash");
const zustand_1 = require("zustand");
const app_1 = require("../app");
// extra currying as suggested in https://github.com/pmndrs/zustand/blob/main/docs/guides/typescript.md#basic-usage
exports.useBoardStore = (0, zustand_1.create)()(() => ({
orderedBoards: [],
boards: {},
expanded: false,
minimized: false
}));
const addBoard = (app) => (board, expanded) => {
const id = board.id ?? (0, lodash_1.uniqueId)('board-');
exports.useBoardStore.setState((0, immer_1.produce)((state) => {
state.boards[id] = {
...board,
app,
id,
icon: board.icon ?? (0, app_1.getApp)(app)()?.icon ?? 'CubeOutline'
};
state.current = id;
state.minimized = false;
state.expanded = expanded ?? state.expanded;
state.orderedBoards.unshift(id);
}));
return exports.useBoardStore.getState().boards[id];
};
exports.addBoard = addBoard;
const closeBoard = (id) => {
exports.useBoardStore.setState((0, immer_1.produce)((state) => {
state.boards[id]?.onClose?.(state.boards[id]);
delete state.boards[id];
const index = state.orderedBoards.findIndex((boardId) => boardId === id);
if (state.current === id) {
state.current = state.orderedBoards[index + 1] || state.orderedBoards[index - 1];
}
if (index !== -1) {
state.orderedBoards.splice(index, 1);
}
}));
};
exports.closeBoard = closeBoard;
const closeAllBoards = () => {
exports.useBoardStore.setState((0, immer_1.produce)((state) => {
(0, lodash_1.forEach)(state.boards, (b) => {
b?.onClose?.(b);
delete state.boards[b.id];
});
state.orderedBoards = [];
}));
};
exports.closeAllBoards = closeAllBoards;
const onGoToPanel = () => {
exports.useBoardStore.setState((0, immer_1.produce)((state) => {
const id = state.current;
if (id) {
state.boards[id]?.onGoToPanel?.(state.boards[id]);
delete state.boards[id];
const index = state.orderedBoards.findIndex((boardId) => boardId === id);
if (index !== -1) {
state.orderedBoards.splice(index, 1);
}
}
}));
};
exports.onGoToPanel = onGoToPanel;
const minimizeBoards = () => {
exports.useBoardStore.setState({
minimized: true
});
};
exports.minimizeBoards = minimizeBoards;
const reopenBoards = () => {
exports.useBoardStore.setState({
minimized: false
});
};
exports.reopenBoards = reopenBoards;
const expandBoards = () => {
exports.useBoardStore.setState({
expanded: true
});
};
exports.expandBoards = expandBoards;
const reduceBoards = () => {
exports.useBoardStore.setState({
expanded: false
});
};
exports.reduceBoards = reduceBoards;
const setCurrentBoard = (id) => {
exports.useBoardStore.setState({
current: id
});
};
exports.setCurrentBoard = setCurrentBoard;
const updateBoard = (id, board) => {
exports.useBoardStore.setState((0, immer_1.produce)((state) => {
if (state.boards[id])
state.boards[id] = {
...state.boards[id],
...board
};
}));
};
exports.updateBoard = updateBoard;
const updateBoardContext = (id, context) => {
exports.useBoardStore.setState((0, immer_1.produce)((state) => {
if (state.boards[id]) {
state.boards[id].context = context;
}
}));
};
exports.updateBoardContext = updateBoardContext;
//# sourceMappingURL=store.js.map