UNPKG

@zextras/carbonio-shell-ui

Version:

The Zextras Carbonio web client

123 lines 4.14 kB
"use strict"; /* * 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