UNPKG

@etsoo/smarterp-core

Version:

TypeScript APIs for SmartERP Core

52 lines (51 loc) 3.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OrgSwitchPopover = OrgSwitchPopover; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = __importDefault(require("react")); const AccountTree_1 = __importDefault(require("@mui/icons-material/AccountTree")); const react_router_dom_1 = require("react-router-dom"); const materialui_1 = require("@etsoo/materialui"); const ICoreServiceApp_1 = require("../../ICoreServiceApp"); const ButtonGroup_1 = __importDefault(require("@mui/material/ButtonGroup")); const Button_1 = __importDefault(require("@mui/material/Button")); const Stack_1 = __importDefault(require("@mui/material/Stack")); function OrgSwitchPopover(props) { // Destruct const { appId, organizationName } = props; // Route const navigate = (0, react_router_dom_1.useNavigate)(); // App const app = (0, ICoreServiceApp_1.useRequiredAppContext)(); // Labels const labels = app.getLabels("currentOrg", "more", "switchOrg"); // Refs const anchorRef = react_1.default.useRef(null); // Max items to read const maxItems = 10; // Current organization const currentOrg = app.userData?.organization; // Layout return ((0, jsx_runtime_1.jsx)(materialui_1.ButtonPopover, { button: (callback) => ((0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: (0, jsx_runtime_1.jsxs)(ButtonGroup_1.default, { variant: "text", children: [(0, jsx_runtime_1.jsx)(Button_1.default, { sx: { display: { xs: "none", md: "block" } }, title: labels.currentOrg, onClick: () => callback(anchorRef.current), children: organizationName ?? labels.switchOrg }), (0, jsx_runtime_1.jsx)(Button_1.default, { title: labels.switchOrg, onClick: (e) => callback(e.currentTarget), ref: anchorRef, children: (0, jsx_runtime_1.jsx)(AccountTree_1.default, {}) })] }) })), loadData: () => app.core.orgApi.getMy({ appId, maxItems }, { showLoading: false }), children: (data) => { if (data == null) return (0, jsx_runtime_1.jsx)(react_1.default.Fragment, {}); // Remove the current organization if (currentOrg != null) { const index = data.findIndex((org) => org.id === currentOrg); if (index >= 0) data.splice(index, 1); } return ((0, jsx_runtime_1.jsxs)(Stack_1.default, { direction: "column", margin: 2, children: [data.map((org) => ((0, jsx_runtime_1.jsx)(Button_1.default, { onClick: async () => { const result = await app.switchOrg(org.id); if (result == null) return; if (!result.ok) { app.alertResult(result); return; } }, children: org.name }, org.id))), (data.length === 0 || data.length === maxItems) && ((0, jsx_runtime_1.jsxs)(Button_1.default, { onClick: () => navigate("./org/my"), children: [labels.more, "..."] }))] })); } })); }