@etsoo/smarterp-core
Version:
TypeScript APIs for SmartERP Core
52 lines (51 loc) • 3.23 kB
JavaScript
;
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, "..."] }))] }));
} }));
}