UNPKG

flipper-plugin

Version:

Flipper Desktop plugin SDK and components

109 lines 6.46 kB
"use strict"; /** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.tableContextMenuFactory = void 0; const icons_1 = require("@ant-design/icons"); const antd_1 = require("antd"); const DataTableWithPowerSearchManager_1 = require("./DataTableWithPowerSearchManager"); const react_1 = __importDefault(require("react")); const toFirstUpper_1 = require("../../utils/toFirstUpper"); const TableRow_1 = require("./TableRow"); const textContent_1 = require("../../utils/textContent"); const FlipperLib_1 = require("../../plugin/FlipperLib"); const { Item, SubMenu } = antd_1.Menu; function tableContextMenuFactory(dataView, dispatch, selection, columns, visibleColumns, onCopyRows = defaultOnCopyRows, onContextMenu, sideBySideOption) { const lib = (0, FlipperLib_1.tryGetFlipperLibImplementation)(); if (!lib) { return (react_1.default.createElement(antd_1.Menu, null, react_1.default.createElement(Item, null, "Menu not ready"))); } const hasSelection = selection.items.size > 0 ?? false; return (react_1.default.createElement(antd_1.Menu, null, onContextMenu ? onContextMenu((0, DataTableWithPowerSearchManager_1.getSelectedItem)(dataView, selection)) : null, react_1.default.createElement(SubMenu, { key: "filter same", title: "Filter on same", icon: react_1.default.createElement(icons_1.FilterOutlined, null), disabled: !hasSelection }, visibleColumns.map((column, idx) => (react_1.default.createElement(Item, { key: column.key ?? idx, onClick: () => { dispatch({ type: 'setSearchExpressionFromSelection', column, }); } }, friendlyColumnTitle(column))))), react_1.default.createElement(SubMenu, { key: "copy rows", title: "Copy row(s)", icon: react_1.default.createElement(icons_1.TableOutlined, null), disabled: !hasSelection }, react_1.default.createElement(Item, { key: "copyToClipboard", disabled: !hasSelection, onClick: () => { const items = (0, DataTableWithPowerSearchManager_1.getSelectedItems)(dataView, selection); if (items.length) { lib.writeTextToClipboard(onCopyRows(items, visibleColumns)); } } }, "Copy row(s)"), lib.isFB && (react_1.default.createElement(Item, { key: "createPaste", disabled: !hasSelection, onClick: () => { const items = (0, DataTableWithPowerSearchManager_1.getSelectedItems)(dataView, selection); if (items.length) { lib.createPaste(onCopyRows(items, visibleColumns)); } } }, "Create paste")), react_1.default.createElement(Item, { key: "copyToClipboardJSON", disabled: !hasSelection, onClick: () => { const items = (0, DataTableWithPowerSearchManager_1.getSelectedItems)(dataView, selection); if (items.length) { lib.writeTextToClipboard(rowsToJson(items)); } } }, "Copy row(s) (JSON)"), lib.isFB && (react_1.default.createElement(Item, { key: "createPasteJSON", disabled: !hasSelection, onClick: () => { const items = (0, DataTableWithPowerSearchManager_1.getSelectedItems)(dataView, selection); if (items.length) { lib.createPaste(rowsToJson(items)); } } }, "Create paste (JSON)"))), react_1.default.createElement(SubMenu, { key: "copy cells", title: "Copy cell(s)", icon: react_1.default.createElement(icons_1.CopyOutlined, null), disabled: !hasSelection }, visibleColumns.map((column, idx) => (react_1.default.createElement(Item, { key: `copy cell${column.key ?? idx}`, onClick: () => { const items = (0, DataTableWithPowerSearchManager_1.getSelectedItems)(dataView, selection); if (items.length) { lib.writeTextToClipboard(items .map((item) => `${(0, DataTableWithPowerSearchManager_1.getValueAtPath)(item, column.key)}`) .join('\n')); } } }, friendlyColumnTitle(column))))), react_1.default.createElement(antd_1.Menu.Divider, null), react_1.default.createElement(SubMenu, { title: "Visible columns", key: "visible columns" }, columns.map((column, idx) => (react_1.default.createElement(antd_1.Menu.Item, { key: `visible column ${column.key ?? idx}` }, react_1.default.createElement(antd_1.Checkbox, { checked: column.visible, onClick: (e) => { e.stopPropagation(); e.preventDefault(); dispatch({ type: 'toggleColumnVisibility', column: column.key }); } }, friendlyColumnTitle(column)))))), react_1.default.createElement(antd_1.Menu.Item, { key: "resetFilters", onClick: () => { dispatch({ type: 'resetFilters' }); } }, "Reset filters"), react_1.default.createElement(antd_1.Menu.Item, { key: "reset", onClick: () => { dispatch({ type: 'reset' }); } }, "Reset view"), sideBySideOption)); } exports.tableContextMenuFactory = tableContextMenuFactory; function friendlyColumnTitle(column) { const name = column.title || column.key; return (0, toFirstUpper_1.toFirstUpper)(name); } function defaultOnCopyRows(items, visibleColumns) { return `${visibleColumns.map(friendlyColumnTitle).join('\t')}\n${items .map((row, idx) => visibleColumns .map((col) => (0, textContent_1.textContent)((0, TableRow_1.renderColumnValue)(col, row, true, idx))) .join('\t')) .join('\n')}`; } function rowsToJson(items) { return JSON.stringify(items.length > 1 ? items : items[0], function (_key, value) { if (typeof value === 'bigint') { return `${value.toString()}n`; } return value; }, 2); } //# sourceMappingURL=PowerSearchTableContextMenu.js.map