update: list ranges in menu

This commit is contained in:
Daniel
2025-11-22 01:32:53 +01:00
committed by Nicolás Hatcher Andrés
parent 126e62957a
commit a3c201e4e4
3 changed files with 35 additions and 6 deletions

View File

@@ -55,6 +55,7 @@ function FormulaBar(properties: FormulaBarProps) {
onMenuOpenChange={handleMenuOpenChange} onMenuOpenChange={handleMenuOpenChange}
openDrawer={properties.openDrawer} openDrawer={properties.openDrawer}
canEdit={properties.canEdit} canEdit={properties.canEdit}
model={model}
> >
<CellBarAddress $active={isMenuOpen}>{cellAddress}</CellBarAddress> <CellBarAddress $active={isMenuOpen}>{cellAddress}</CellBarAddress>
<MenuButton $active={isMenuOpen}> <MenuButton $active={isMenuOpen}>

View File

@@ -1,3 +1,4 @@
import type { Model } from "@ironcalc/wasm";
import { Menu, MenuItem, styled } from "@mui/material"; import { Menu, MenuItem, styled } from "@mui/material";
import { Tag } from "lucide-react"; import { Tag } from "lucide-react";
import { type ComponentProps, useCallback, useRef, useState } from "react"; import { type ComponentProps, useCallback, useRef, useState } from "react";
@@ -13,6 +14,7 @@ type FormulaBarMenuProps = {
anchorOrigin?: ComponentProps<typeof Menu>["anchorOrigin"]; anchorOrigin?: ComponentProps<typeof Menu>["anchorOrigin"];
openDrawer: () => void; openDrawer: () => void;
canEdit: boolean; canEdit: boolean;
model: Model;
}; };
const FormulaBarMenu = (properties: FormulaBarMenuProps) => { const FormulaBarMenu = (properties: FormulaBarMenuProps) => {
@@ -30,6 +32,8 @@ const FormulaBarMenu = (properties: FormulaBarMenuProps) => {
properties.onMenuOpenChange?.(false); properties.onMenuOpenChange?.(false);
}, [properties.onMenuOpenChange]); }, [properties.onMenuOpenChange]);
const definedNameList = properties.model.getDefinedNameList();
return ( return (
<> <>
<ChildrenWrapper onClick={handleMenuOpen} ref={anchorElement}> <ChildrenWrapper onClick={handleMenuOpen} ref={anchorElement}>
@@ -49,12 +53,32 @@ const FormulaBarMenu = (properties: FormulaBarMenuProps) => {
horizontal: "left", horizontal: "left",
}} }}
> >
<MenuItemWrapper disableRipple> {definedNameList.length > 0 ? (
<>
{definedNameList.map((definedName) => {
const worksheets = properties.model.getWorksheetsProperties();
const scopeName =
definedName.scope != null
? worksheets[definedName.scope]?.name || "[Unknown]"
: "[Global]";
return (
<MenuItemWrapper
key={`${definedName.name}-${definedName.scope}`}
disableRipple
onClick={() => {
properties.onChange(definedName.name);
handleMenuClose();
}}
>
<Tag /> <Tag />
<MenuItemText>Range1</MenuItemText> <MenuItemText>{definedName.name}</MenuItemText>
<MenuItemExample>$Sheet1!$A$1:$B$2</MenuItemExample> <MenuItemExample>{definedName.formula}</MenuItemExample>
</MenuItemWrapper> </MenuItemWrapper>
);
})}
<MenuDivider /> <MenuDivider />
</>
) : null}
<MenuItemWrapper <MenuItemWrapper
$pressed={false} $pressed={false}
onClick={() => { onClick={() => {
@@ -101,6 +125,7 @@ const MenuItemWrapper = styled(MenuItem, {
& svg { & svg {
width: 12px; width: 12px;
height: 12px; height: 12px;
flex-shrink: 0;
color: ${theme.palette.grey[600]}; color: ${theme.palette.grey[600]};
} }
`; `;
@@ -118,9 +143,11 @@ const MenuDivider = styled("div")`
`; `;
const MenuItemText = styled("div")` const MenuItemText = styled("div")`
width: 100%;
color: #000; color: #000;
display: flex; display: flex;
align-items: center; align-items: center;
text-overflow: ellipsis;
`; `;
const MenuItemExample = styled("div")` const MenuItemExample = styled("div")`

View File

@@ -399,6 +399,7 @@ const ListItem = styled("div")<{ $isSelected: boolean }>(({ $isSelected }) => ({
alignItems: "flex-start", alignItems: "flex-start",
justifyContent: "space-between", justifyContent: "space-between",
padding: "8px 12px", padding: "8px 12px",
cursor: "pointer",
minHeight: "40px", minHeight: "40px",
boxSizing: "border-box", boxSizing: "border-box",
borderBottom: `1px solid ${theme.palette.grey[200]}`, borderBottom: `1px solid ${theme.palette.grey[200]}`,