@ag-grid-enterprise/menu
Version:
Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue
4 lines (3 loc) • 37.3 kB
JavaScript
import{ModuleNames as k,_CommunityMenuApiModule as D,_defineModule as P}from"@ag-grid-community/core";import{AgMenuItemRenderer as z,EnterpriseCoreModule as U}from"@ag-grid-enterprise/core";import{BeanStub as O,ModuleNames as H,_createIconNoSpan as F,_warnOnce as B}from"@ag-grid-community/core";var V=class N extends O{constructor(){super(...arguments),this.beanName="chartMenuItemMapper"}wireBeans(t){this.chartService=t.chartService}getChartItems(t){if(!this.chartService){this.gos.assertModuleRegistered(H.GridChartsModule,`the Context Menu key "${t}"`);return}const i=t==="pivotChart"?new W(this.gos,this.chartService,this.localeService):new X(this.gos,this.chartService,this.localeService),o=this.chartService.isEnterprise();let s=i.getMenuItem();if(s&&s.subMenu&&!o){const r=a=>({...a,subMenu:a.subMenu?.filter(u=>!u._enterprise).map(u=>r(u))});s=r(s)}const n=this.gos.get("chartToolPanelsDef")?.settingsPanel?.chartGroupsDef;return n&&(s=N.filterAndOrderChartMenu(s,n,i.getConfigLookup())),this.cleanInternals(s)}cleanInternals(t){if(!t)return t;const i=o=>(delete o?._key,delete o?._enterprise,o?.subMenu?.forEach(s=>i(s)),o);return i(t)}static buildLookup(t){const i={},o=s=>{i[s._key]=s,s.subMenu&&s.subMenu.forEach(n=>o(n))};return o(t),i}static filterAndOrderChartMenu(t,i,o){const s=this.buildLookup(t),n={...t,subMenu:[]};if(Object.entries(i).forEach(([r,a])=>{const u=o[r];if(u===null)return;if(u==null){B(`invalid chartGroupsDef config '${r}'`);return}const l=s[u._key];if(l)if(l.subMenu){const d=a.map(c=>{const m=u[c];if(m==null){B(`invalid chartGroupsDef config '${r}.${c}'`);return}return s[m]}).filter(c=>c!==void 0);d.length>0&&(l.subMenu=d,n.subMenu?.push(l))}else n.subMenu?.push(l)}),n.subMenu?.length!=0)return n}},W=class{constructor(e,t,i){this.gos=e,this.chartService=t,this.localeService=i}getMenuItem(){const e=this.localeService.getLocaleTextFunc(),t=(i,o,s,n,r=!1)=>({name:e(i,o),action:()=>this.chartService.createPivotChart({chartType:s}),_key:n,_enterprise:r});return{name:e("pivotChart","Pivot Chart"),_key:"pivotChart",subMenu:[{_key:"pivotColumnChart",name:e("columnChart","Column"),subMenu:[t("groupedColumn","Grouped‎","groupedColumn","pivotGroupedColumn"),t("stackedColumn","Stacked‎","stackedColumn","pivotStackedColumn"),t("normalizedColumn","100% Stacked‎","normalizedColumn","pivotNormalizedColumn")]},{_key:"pivotBarChart",name:e("barChart","Bar"),subMenu:[t("groupedBar","Grouped‎","groupedBar","pivotGroupedBar"),t("stackedBar","Stacked‎","stackedBar","pivotStackedBar"),t("normalizedBar","100% Stacked‎","normalizedBar","pivotNormalizedBar")]},{_key:"pivotPieChart",name:e("pieChart","Pie"),subMenu:[t("pie","Pie‎","pie","pivotPie"),t("donut","Donut‎","donut","pivotDonut")]},t("line","Line‎","line","pivotLineChart"),{_key:"pivotXYChart",name:e("xyChart","X Y (Scatter)"),subMenu:[t("scatter","Scatter‎","scatter","pivotScatter"),t("bubble","Bubble‎","bubble","pivotBubble")]},{_key:"pivotAreaChart",name:e("areaChart","Area"),subMenu:[t("area","Area‎","area","pivotArea"),t("stackedArea","Stacked‎","stackedArea","pivotStackedArea"),t("normalizedArea","100% Stacked‎","normalizedArea","pivotNormalizedArea")]},{_key:"pivotStatisticalChart",_enterprise:!1,name:e("statisticalChart","Statistical"),subMenu:[t("histogramChart","Histogram‎","histogram","pivotHistogram",!1)]},{_key:"pivotHierarchicalChart",_enterprise:!0,name:e("hierarchicalChart","Hierarchical"),subMenu:[t("treemapChart","Treemap‎","treemap","pivotTreemap",!0),t("sunburstChart","Sunburst‎","sunburst","pivotSunburst",!0)]},{_key:"pivotCombinationChart",name:e("combinationChart","Combination"),subMenu:[t("columnLineCombo","Column & Line‎","columnLineCombo","pivotColumnLineCombo"),t("AreaColumnCombo","Area & Column‎","areaColumnCombo","pivotAreaColumnCombo")]}],icon:F("chart",this.gos,void 0)}}getConfigLookup(){return{columnGroup:{_key:"pivotColumnChart",column:"pivotGroupedColumn",stackedColumn:"pivotStackedColumn",normalizedColumn:"pivotNormalizedColumn"},barGroup:{_key:"pivotBarChart",bar:"pivotGroupedBar",stackedBar:"pivotStackedBar",normalizedBar:"pivotNormalizedBar"},pieGroup:{_key:"pivotPieChart",pie:"pivotPie",donut:"pivotDonut",doughnut:"pivotDonut"},lineGroup:{_key:"pivotLineChart",line:"pivotLineChart"},scatterGroup:{_key:"pivotXYChart",bubble:"pivotBubble",scatter:"pivotScatter"},areaGroup:{_key:"pivotAreaChart",area:"pivotArea",stackedArea:"pivotStackedArea",normalizedArea:"pivotNormalizedArea"},combinationGroup:{_key:"pivotCombinationChart",columnLineCombo:"pivotColumnLineCombo",areaColumnCombo:"pivotAreaColumnCombo",customCombo:null},hierarchicalGroup:{_key:"pivotHierarchicalChart",treemap:"pivotTreemap",sunburst:"pivotSunburst"},statisticalGroup:{_key:"pivotStatisticalChart",histogram:"pivotHistogram",rangeBar:null,rangeArea:null,boxPlot:null},polarGroup:null,specializedGroup:null}}},X=class{constructor(e,t,i){this.gos=e,this.chartService=t,this.localeService=i}getMenuItem(){const e=this.localeService.getLocaleTextFunc(),t=(i,o,s,n,r=!1)=>({name:e(i,o),action:()=>this.chartService.createChartFromCurrentRange(s),_key:n,_enterprise:r});return{name:e("chartRange","Chart Range"),_key:"chartRange",subMenu:[{name:e("columnChart","Column"),subMenu:[t("groupedColumn","Grouped‎","groupedColumn","rangeGroupedColumn"),t("stackedColumn","Stacked‎","stackedColumn","rangeStackedColumn"),t("normalizedColumn","100% Stacked‎","normalizedColumn","rangeNormalizedColumn")],_key:"rangeColumnChart"},{name:e("barChart","Bar"),subMenu:[t("groupedBar","Grouped‎","groupedBar","rangeGroupedBar"),t("stackedBar","Stacked‎","stackedBar","rangeStackedBar"),t("normalizedBar","100% Stacked‎","normalizedBar","rangeNormalizedBar")],_key:"rangeBarChart"},{name:e("pieChart","Pie"),subMenu:[t("pie","Pie‎","pie","rangePie"),t("donut","Donut‎","donut","rangeDonut")],_key:"rangePieChart"},t("line","Line‎","line","rangeLineChart"),{name:e("xyChart","X Y (Scatter)"),subMenu:[t("scatter","Scatter‎","scatter","rangeScatter"),t("bubble","Bubble‎","bubble","rangeBubble")],_key:"rangeXYChart"},{name:e("areaChart","Area"),subMenu:[t("area","Area‎","area","rangeArea"),t("stackedArea","Stacked‎","stackedArea","rangeStackedArea"),t("normalizedArea","100% Stacked‎","normalizedArea","rangeNormalizedArea")],_key:"rangeAreaChart"},{name:e("polarChart","Polar"),subMenu:[t("radarLine","Radar Line‎","radarLine","rangeRadarLine"),t("radarArea","Radar Area‎","radarArea","rangeRadarArea"),t("nightingale","Nightingale‎","nightingale","rangeNightingale"),t("radialColumn","Radial Column‎","radialColumn","rangeRadialColumn"),t("radialBar","Radial Bar‎","radialBar","rangeRadialBar")],_key:"rangePolarChart",_enterprise:!0},{name:e("statisticalChart","Statistical"),subMenu:[t("boxPlot","Box Plot‎","boxPlot","rangeBoxPlot",!0),t("histogramChart","Histogram‎","histogram","rangeHistogram",!1),t("rangeBar","Range Bar‎","rangeBar","rangeRangeBar",!0),t("rangeArea","Range Area‎","rangeArea","rangeRangeArea",!0)],_key:"rangeStatisticalChart",_enterprise:!1},{name:e("hierarchicalChart","Hierarchical"),subMenu:[t("treemap","Treemap‎","treemap","rangeTreemap"),t("sunburst","Sunburst‎","sunburst","rangeSunburst")],_key:"rangeHierarchicalChart",_enterprise:!0},{name:e("specializedChart","Specialized"),subMenu:[t("heatmap","Heatmap‎","heatmap","rangeHeatmap"),t("waterfall","Waterfall‎","waterfall","rangeWaterfall")],_key:"rangeSpecializedChart",_enterprise:!0},{name:e("combinationChart","Combination"),subMenu:[t("columnLineCombo","Column & Line‎","columnLineCombo","rangeColumnLineCombo"),t("AreaColumnCombo","Area & Column‎","areaColumnCombo","rangeAreaColumnCombo")],_key:"rangeCombinationChart"}],icon:F("chart",this.gos,void 0)}}getConfigLookup(){return{columnGroup:{_key:"rangeColumnChart",column:"rangeGroupedColumn",stackedColumn:"rangeStackedColumn",normalizedColumn:"rangeNormalizedColumn"},barGroup:{_key:"rangeBarChart",bar:"rangeGroupedBar",stackedBar:"rangeStackedBar",normalizedBar:"rangeNormalizedBar"},pieGroup:{_key:"rangePieChart",pie:"rangePie",donut:"rangeDonut",doughnut:"rangeDonut"},lineGroup:{_key:"rangeLineChart",line:"rangeLineChart"},scatterGroup:{_key:"rangeXYChart",bubble:"rangeBubble",scatter:"rangeScatter"},areaGroup:{_key:"rangeAreaChart",area:"rangeArea",stackedArea:"rangeStackedArea",normalizedArea:"rangeNormalizedArea"},polarGroup:{_key:"rangePolarChart",radarLine:"rangeRadarLine",radarArea:"rangeRadarArea",nightingale:"rangeNightingale",radialColumn:"rangeRadialColumn",radialBar:"rangeRadialBar"},statisticalGroup:{_key:"rangeStatisticalChart",boxPlot:"rangeBoxPlot",histogram:"rangeHistogram",rangeBar:"rangeRangeBar",rangeArea:"rangeRangeArea"},hierarchicalGroup:{_key:"rangeHierarchicalChart",treemap:"rangeTreemap",sunburst:"rangeSunburst"},specializedGroup:{_key:"rangeSpecializedChart",heatmap:"rangeHeatmap",waterfall:"rangeWaterfall"},combinationGroup:{_key:"rangeCombinationChart",columnLineCombo:"rangeColumnLineCombo",areaColumnCombo:"rangeAreaColumnCombo",customCombo:null}}}};import{BeanStub as $}from"@ag-grid-community/core";import{AgPrimaryCols as Y}from"@ag-grid-enterprise/column-tool-panel";import{AgDialog as K}from"@ag-grid-enterprise/core";var j=class extends ${constructor(){super(...arguments),this.beanName="columnChooserFactory"}wireBeans(e){this.focusService=e.focusService,this.menuUtils=e.menuUtils,this.visibleColsService=e.visibleColsService}createColumnSelectPanel(e,t,i,o){const s=e.createManagedBean(new Y),n=o??t?.getColDef().columnChooserParams??t?.getColDef().columnsMenuParams??{},{contractColumnSelection:r,suppressColumnExpandAll:a,suppressColumnFilter:u,suppressColumnSelectAll:l,suppressSyncLayoutWithGrid:d,columnLayout:c}=n;return s.init(!!i,this.gos.addGridCommonParams({suppressColumnMove:!1,suppressValues:!1,suppressPivots:!1,suppressRowGroups:!1,suppressPivotMode:!1,contractColumnSelection:!!r,suppressColumnExpandAll:!!a,suppressColumnFilter:!!u,suppressColumnSelectAll:!!l,suppressSyncLayoutWithGrid:!!c||!!d,onStateUpdated:()=>{}}),"columnMenu"),c&&s.setColumnLayout(c),s}showColumnChooser({column:e,chooserParams:t,eventSource:i}){this.hideActiveColumnChooser();const o=this.createColumnSelectPanel(this,e,!0,t),s=this.localeService.getLocaleTextFunc(),n=this.visibleColsService.getAllCols().indexOf(e),r=e?this.focusService.getFocusedHeader():null;this.activeColumnChooserDialog=this.createBean(new K({title:s("chooseColumns","Choose Columns"),component:o,width:300,height:300,resizable:!0,movable:!0,centered:!0,closable:!0,afterGuiAttached:()=>{this.focusService.findNextFocusableElement(o.getGui())?.focus({preventScroll:!0}),this.dispatchVisibleChangedEvent(!0,e)},closedCallback:a=>{const u=this.activeColumnChooser.getGui();this.destroyBean(this.activeColumnChooser),this.activeColumnChooser=void 0,this.activeColumnChooserDialog=void 0,this.dispatchVisibleChangedEvent(!1,e),e&&this.menuUtils.restoreFocusOnClose({column:e,headerPosition:r,columnIndex:n,eventSource:i},u,a,!0)},postProcessPopupParams:{type:"columnChooser",column:e,eventSource:i}})),this.activeColumnChooser=o}hideActiveColumnChooser(){this.activeColumnChooserDialog&&this.destroyBean(this.activeColumnChooserDialog)}dispatchVisibleChangedEvent(e,t){this.eventService.dispatchEvent({type:"columnMenuVisibleChanged",visible:e,switchingTab:!1,key:"columnChooser",column:t??null})}};import{BeanStub as q,_isClientSideRowModel as J,_removeRepeatsFromArray as Q}from"@ag-grid-community/core";import{AgMenuList as Z}from"@ag-grid-enterprise/core";var S="separator",ee=class extends q{constructor(){super(...arguments),this.beanName="columnMenuFactory"}wireBeans(e){this.menuItemMapper=e.menuItemMapper,this.columnModel=e.columnModel,this.funcColsService=e.funcColsService,this.menuService=e.menuService}createMenu(e,t,i,o){const s=e.createManagedBean(new Z(0,{column:i??null,node:null,value:null})),n=this.menuItemMapper.mapWithStockItems(t,i??null,o,"columnMenu");return s.addMenuItems(n),s}getMenuItems(e,t){const i=this.getDefaultMenuOptions(e);let o;const s=e?.getColDef().mainMenuItems;if(Array.isArray(s))o=s;else if(typeof s=="function")o=s(this.gos.addGridCommonParams({column:e,defaultItems:i}));else{const n=this.gos.getCallback("getMainMenuItems");n&&e?o=n({column:e,defaultItems:i}):o=i}return Q(o,S),o}getDefaultMenuOptions(e){const t=[],i=this.menuService.isLegacyMenuEnabled();if(!e)return i||t.push("columnChooser"),t.push("resetColumns"),t;const o=!e.getColDef().lockPinned,s=this.funcColsService.getRowGroupColumns().length,n=s>0,r=e.isAllowValue(),a=e.isAllowRowGroup(),u=e.isPrimary(),l=this.columnModel.isPivotMode(),d=J(this.gos),c=this.gos.get("treeData"),m=u&&n&&r||!u;if(!i&&e.isSortable()){const v=e.getSort();v!=="asc"&&t.push("sortAscending"),v!=="desc"&&t.push("sortDescending"),v&&t.push("sortUnSort"),t.push(S)}return this.menuService.isFilterMenuItemEnabled(e)&&(t.push("columnFilter"),t.push(S)),o&&t.push("pinSubMenu"),m&&t.push("valueAggSubMenu"),(o||m)&&t.push(S),t.push("autoSizeThis"),t.push("autoSizeAll"),t.push(S),e.getColDef().showRowGroup?t.push("rowUnGroup"):a&&e.isPrimary()&&(e.isRowGroupActive()?this.columnModel.isColGroupLocked(e)||t.push("rowUnGroup"):t.push("rowGroup")),t.push(S),i||t.push("columnChooser"),t.push("resetColumns"),d&&(c||s>(l?1:0))&&(t.push("expandAll"),t.push("contractAll")),t}};import{BeanStub as te,Component as oe,ModuleNames as y,_exists as E,_isIOSUserAgent as se,_isNothingFocused as ie,_missingOrEmpty as re}from"@ag-grid-community/core";import{AgMenuList as ne}from"@ag-grid-enterprise/core";var ae="ag-menu",I="ag-context-menu-open",ue=class extends te{constructor(){super(...arguments),this.beanName="contextMenuFactory"}wireBeans(e){this.popupService=e.popupService,this.ctrlsService=e.ctrlsService,this.columnModel=e.columnModel,this.menuUtils=e.menuUtils,this.rangeService=e.rangeService,this.focusService=e.focusService}hideActiveMenu(){this.destroyBean(this.activeMenu)}getMenuItems(e,t,i){const o=[];if(E(e)&&this.gos.isModuleRegistered(y.ClipboardModule)&&t&&(this.gos.get("suppressCutToClipboard")||o.push("cut"),o.push("copy","copyWithHeaders","copyWithGroupHeaders","paste","separator")),this.gos.get("enableCharts")&&this.gos.isModuleRegistered(y.GridChartsModule)&&(this.columnModel.isPivotMode()&&o.push("pivotChart"),this.rangeService&&!this.rangeService.isEmpty()&&o.push("chartRange")),E(e)){const a=!this.gos.isModuleRegistered(y.CsvExportModule),u=!this.gos.isModuleRegistered(y.ExcelExportModule),l=this.gos.get("suppressExcelExport")||u,d=this.gos.get("suppressCsvExport")||a;!se()&&(!l||!d)&&o.push("export")}const s=o.length?o:void 0,n=t?.getColDef().contextMenuItems;if(Array.isArray(n))return n;if(typeof n=="function")return n(this.gos.addGridCommonParams({column:t,node:e,value:i,defaultItems:s}));const r=this.gos.getCallback("getContextMenuItems");return r?r({column:t,node:e,value:i,defaultItems:s}):o}onContextMenu(e,t,i,o,s,n){this.menuUtils.onContextMenu(e,t,r=>this.showMenu(i,o,s,r,n))}showMenu(e,t,i,o,s){const n=this.getMenuItems(e,t,i),r=this.ctrlsService.getGridBodyCtrl().getGui();if(n===void 0||re(n))return!1;const a=new le(n,t,e,i);this.createBean(a);const u=a.getGui();t||this.focusService.clearFocusedCell();const l={column:t,rowNode:e,type:"contextMenu",mouseEvent:o,ePopup:u,nudgeY:1},d=this.localeService.getLocaleTextFunc(),c=this.popupService.addPopup({modal:!0,eChild:u,closeOnEsc:!0,closedCallback:C=>{r.classList.remove(I),this.destroyBean(a),this.dispatchVisibleChangedEvent(!1,C===void 0?"api":"ui")},click:o,positionCallback:()=>{const C=this.gos.get("enableRtl");this.popupService.positionPopupUnderMouseEvent({...l,nudgeX:C?(u.offsetWidth+1)*-1:1})},anchorToElement:s,ariaLabel:d("ariaLabelContextMenu","Context Menu")});c&&(r.classList.add(I),a.afterGuiAttached({container:"contextMenu",hidePopup:c.hideFunc})),this.activeMenu&&this.hideActiveMenu(),this.activeMenu=a,a.addEventListener("destroyed",()=>{this.activeMenu===a&&(this.activeMenu=null)}),c&&a.addEventListener("closeMenu",C=>c.hideFunc({mouseEvent:C.mouseEvent??void 0,keyboardEvent:C.keyboardEvent??void 0,forceHide:!0}));const m=o&&o instanceof MouseEvent&&o.type==="mousedown";return this.dispatchVisibleChangedEvent(!0,m?"api":"ui"),!0}dispatchVisibleChangedEvent(e,t="ui"){this.eventService.dispatchEvent({type:"contextMenuVisibleChanged",visible:e,source:t})}},le=class extends oe{constructor(e,t,i,o){super(`<div class="${ae}" role="presentation"></div>`),this.menuItems=e,this.column=t,this.node=i,this.value=o,this.menuList=null,this.focusedCell=null}wireBeans(e){this.focusService=e.focusService,this.menuItemMapper=e.menuItemMapper,this.cellPositionUtils=e.cellPositionUtils}postConstruct(){const e=this.createManagedBean(new ne(0,{column:this.column,node:this.node,value:this.value})),t=this.menuItemMapper.mapWithStockItems(this.menuItems,null,()=>this.getGui(),"contextMenu");e.addMenuItems(t),this.appendChild(e),this.menuList=e,e.addEventListener("closeMenu",i=>this.dispatchLocalEvent(i))}afterGuiAttached(e){e.hidePopup&&this.addDestroyFunc(e.hidePopup),this.focusedCell=this.focusService.getFocusedCell(),this.menuList&&this.focusService.focusInto(this.menuList.getGui())}restoreFocusedCell(){const e=this.focusService.getFocusedCell();if(e&&this.focusedCell&&this.cellPositionUtils.equals(e,this.focusedCell)){const{rowIndex:t,rowPinned:i,column:o}=this.focusedCell;ie(this.gos)&&this.focusService.setFocusedCell({rowIndex:t,column:o,rowPinned:i,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!this.focusService.isKeyboardMode()})}}destroy(){this.restoreFocusedCell(),super.destroy()}};import{AgPromise as G,BeanStub as R,Component as ce,FilterWrapperComp as he,ModuleNames as de,RefPlaceholder as me,_createIconNoSpan as x,_warnOnce as pe,isColumn as Ce}from"@ag-grid-community/core";import{TabbedLayout as ge}from"@ag-grid-enterprise/core";var f="filterMenuTab",M="generalMenuTab",b="columnsMenuTab",A=[M,f,b],ve=class extends R{constructor(){super(...arguments),this.beanName="enterpriseMenuFactory"}wireBeans(e){this.popupService=e.popupService,this.focusService=e.focusService,this.ctrlsService=e.ctrlsService,this.visibleColsService=e.visibleColsService,this.filterManager=e.filterManager,this.menuUtils=e.menuUtils,this.menuService=e.menuService,this.columnMenuFactory=e.columnMenuFactory}hideActiveMenu(){this.destroyBean(this.activeMenu)}showMenuAfterMouseEvent(e,t,i,o){const{column:s,columnGroup:n}=this.splitColumnOrGroup(e),r=o?"filterMenuTab":void 0;this.showMenu(s,n,a=>{const u=a.getGui();this.popupService.positionPopupUnderMouseEvent({type:i,column:s,mouseEvent:t,ePopup:u}),r&&a.showTab?.(r),this.dispatchVisibleChangedEvent(!0,!1,s,n,r)},i,r,void 0,t.target)}splitColumnOrGroup(e){const t=e&&Ce(e);return{column:t?e:void 0,columnGroup:t?void 0:e}}showMenuAfterButtonClick(e,t,i,o){let s=-1,n="left";this.gos.get("enableRtl")&&(s=1,n="right");const r=o?"filterMenuTab":void 0,a=r?[r]:void 0,u=this.menuService.isLegacyMenuEnabled(),l=(u?9:4)*s,d=u?-23:4,{column:c,columnGroup:m}=this.splitColumnOrGroup(e);this.showMenu(c,m,C=>{const p=C.getGui();this.popupService.positionPopupByComponent({type:i,column:c,eventSource:t,ePopup:p,alignSide:n,nudgeX:l,nudgeY:d,position:"under",keepWithinBounds:!0}),r&&C.showTab?.(r),this.dispatchVisibleChangedEvent(!0,!1,c,m,r)},i,r,a,t)}showMenu(e,t,i,o,s,n,r){const a=this.getMenuParams(e,t,n,r);if(!a)return;const{menu:u,eMenuGui:l,anchorToElement:d,restoreFocusParams:c}=a,m=[];m.push(p=>{const v=u.getGui();this.destroyBean(u),e&&(e.setMenuVisible(!1,"contextMenu"),this.menuUtils.restoreFocusOnClose(c,v,p))});const C=this.localeService.getLocaleTextFunc();if(this.popupService.addPopup({modal:!0,eChild:l,closeOnEsc:!0,closedCallback:p=>{m.forEach(v=>v(p)),this.dispatchVisibleChangedEvent(!1,!1,e,t,s)},afterGuiAttached:p=>u.afterGuiAttached(Object.assign({},{container:o},p)),positionCallback:s?()=>i(u):void 0,ariaLabel:C("ariaLabelColumnMenu","Column Menu")}),s||(u.showTabBasedOnPreviousSelection?.(),i(u)),this.menuService.isColumnMenuAnchoringEnabled()){const p=this.popupService.setPopupPositionRelatedToElement(l,d);p&&e&&this.addStopAnchoring(p,e,m)}u.addEventListener("tabSelected",p=>{this.dispatchVisibleChangedEvent(!1,!0,e),this.lastSelectedTab=p.key,this.dispatchVisibleChangedEvent(!0,!0,e)}),e?.setMenuVisible(!0,"contextMenu"),this.activeMenu=u,u.addEventListener("destroyed",()=>{this.activeMenu===u&&(this.activeMenu=null)})}addStopAnchoring(e,t,i){e.then(o=>{t.addEventListener("leftChanged",o),t.addEventListener("visibleChanged",o),i.push(()=>{t.removeEventListener("leftChanged",o),t.removeEventListener("visibleChanged",o)})})}getMenuParams(e,t,i,o){const s={column:e,headerPosition:this.focusService.getFocusedHeader(),columnIndex:this.visibleColsService.getAllCols().indexOf(e),eventSource:o},n=this.createMenu(e,t,s,i,o);return n?{menu:n,eMenuGui:n.getGui(),anchorToElement:o||this.ctrlsService.getGridBodyCtrl().getGui(),restoreFocusParams:s}:void 0}createMenu(e,t,i,o,s){if(this.menuService.isLegacyMenuEnabled())return this.createBean(new fe(e,i,this.lastSelectedTab,o,s));{const n=this.columnMenuFactory.getMenuItems(e,t);return n.length?this.createBean(new Me(n,e,i,s)):void 0}}dispatchVisibleChangedEvent(e,t,i,o,s){this.eventService.dispatchEvent({type:"columnMenuVisibleChanged",visible:e,switchingTab:t,key:this.lastSelectedTab??s??(this.menuService.isLegacyMenuEnabled()?M:"columnMenu"),column:i??null,columnGroup:o??null})}isMenuEnabled(e){if(!this.menuService.isLegacyMenuEnabled())return!0;const t=!this.filterManager?.isFilterAllowed(e),i=e.getColDef().menuTabs??A;return(t&&i.includes(f)?i.length-1:i.length)>0}showMenuAfterContextMenuEvent(e,t,i){this.menuUtils.onContextMenu(t,i,o=>(this.showMenuAfterMouseEvent(e,o,"columnMenu"),!0))}},fe=class extends R{constructor(e,t,i,o,s){super(),this.column=e,this.restoreFocusParams=t,this.initialSelection=i,this.restrictTo=o,this.sourceElement=s,this.tabFactories={},this.includeChecks={},this.tabFactories[M]=this.createMainPanel.bind(this),this.tabFactories[f]=this.createFilterPanel.bind(this),this.tabFactories[b]=this.createColumnsPanel.bind(this),this.includeChecks[M]=()=>!0,this.includeChecks[f]=()=>e?!!this.filterManager?.isFilterAllowed(e):!1,this.includeChecks[b]=()=>!0}wireBeans(e){this.filterManager=e.filterManager,this.columnChooserFactory=e.columnChooserFactory,this.columnMenuFactory=e.columnMenuFactory,this.menuUtils=e.menuUtils}postConstruct(){const e=this.getTabsToCreate().map(t=>this.createTab(t));this.tabbedLayout=new ge({items:e,cssClass:"ag-menu",onActiveItemClicked:this.onHidePopup.bind(this),onItemClicked:this.onTabItemClicked.bind(this)}),this.createBean(this.tabbedLayout),this.mainMenuList&&this.mainMenuList.setParentComponent(this.tabbedLayout),this.addDestroyFunc(()=>this.destroyBean(this.tabbedLayout))}getTabsToCreate(){return this.restrictTo?this.restrictTo:(this.column?.getColDef().menuTabs??A).filter(e=>this.isValidMenuTabItem(e)).filter(e=>this.isNotSuppressed(e)).filter(e=>this.isModuleLoaded(e))}isModuleLoaded(e){return e===b?this.gos.isModuleRegistered(de.ColumnsToolPanelModule):!0}isValidMenuTabItem(e){let t=!0,i=A;return this.restrictTo!=null&&(t=this.restrictTo.indexOf(e)>-1,i=this.restrictTo),t=t&&A.indexOf(e)>-1,t||pe(`Trying to render an invalid menu item '${e}'. Check that your 'menuTabs' contains one of [${i}]`),t}isNotSuppressed(e){return this.includeChecks[e]()}createTab(e){return this.tabFactories[e]()}showTabBasedOnPreviousSelection(){this.showTab(this.initialSelection)}showTab(e){this.tabItemColumns&&e===b?this.tabbedLayout.showItem(this.tabItemColumns):this.tabItemFilter&&e===f?this.tabbedLayout.showItem(this.tabItemFilter):this.tabItemGeneral&&e===M?this.tabbedLayout.showItem(this.tabItemGeneral):this.tabbedLayout.showFirstItem()}onTabItemClicked(e){let t=null;switch(e.item){case this.tabItemColumns:t=b;break;case this.tabItemFilter:t=f;break;case this.tabItemGeneral:t=M;break}t&&this.activateTab(t)}activateTab(e){const t={type:"tabSelected",key:e};this.dispatchLocalEvent(t)}createMainPanel(){return this.mainMenuList=this.columnMenuFactory.createMenu(this,this.columnMenuFactory.getMenuItems(this.column),this.column,()=>this.sourceElement??this.getGui()),this.mainMenuList.addEventListener("closeMenu",this.onHidePopup.bind(this)),this.tabItemGeneral={title:x("menu",this.gos,this.column),titleLabel:M.replace("MenuTab",""),bodyPromise:G.resolve(this.mainMenuList.getGui()),name:M},this.tabItemGeneral}onHidePopup(e){this.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc,this.restoreFocusParams,e)}createFilterPanel(){const e=this.column?this.createBean(new he(this.column,"COLUMN_MENU")):null;if(this.filterComp=e,!e?.hasFilter())throw new Error("AG Grid - Unable to instantiate filter");const t=o=>e.afterGuiAttached(o),i=()=>e.afterGuiDetached();return this.tabItemFilter={title:x("filter",this.gos,this.column),titleLabel:f.replace("MenuTab",""),bodyPromise:G.resolve(e?.getGui()),afterAttachedCallback:t,afterDetachedCallback:i,name:f},this.tabItemFilter}createColumnsPanel(){const e=document.createElement("div");e.classList.add("ag-menu-column-select-wrapper");const i=this.columnChooserFactory.createColumnSelectPanel(this,this.column).getGui();return i.classList.add("ag-menu-column-select"),e.appendChild(i),this.tabItemColumns={title:x("columns",this.gos,this.column),titleLabel:b.replace("MenuTab",""),bodyPromise:G.resolve(e),name:b},this.tabItemColumns}afterGuiAttached(e){const{container:t,hidePopup:i}=e;this.tabbedLayout.setAfterAttachedParams({container:t,hidePopup:i}),i&&(this.hidePopupFunc=i,this.addDestroyFunc(i))}getGui(){return this.tabbedLayout.getGui()}destroy(){super.destroy(),this.destroyBean(this.filterComp)}},Me=class extends ce{constructor(e,t,i,o){super(`
<div data-ref="eColumnMenu" role="presentation" class="ag-menu ag-column-menu"></div>
`),this.menuItems=e,this.column=t,this.restoreFocusParams=i,this.sourceElement=o,this.eColumnMenu=me}wireBeans(e){this.columnMenuFactory=e.columnMenuFactory,this.menuUtils=e.menuUtils,this.focusService=e.focusService}postConstruct(){this.mainMenuList=this.columnMenuFactory.createMenu(this,this.menuItems,this.column,()=>this.sourceElement??this.getGui()),this.mainMenuList.addEventListener("closeMenu",this.onHidePopup.bind(this)),this.eColumnMenu.appendChild(this.mainMenuList.getGui())}onHidePopup(e){this.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc,this.restoreFocusParams,e)}afterGuiAttached({hidePopup:e}){e&&(this.hidePopupFunc=e,this.addDestroyFunc(e)),this.focusService.focusInto(this.mainMenuList.getGui())}};function be(e,t){const{rowNode:i,column:o,value:s,x:n,y:r}=t||{};let{x:a,y:u}=e.menuService.getContextMenuPosition(i,o);n!=null&&(a=n),r!=null&&(u=r),e.menuService.showContextMenu({mouseEvent:new MouseEvent("mousedown",{clientX:a,clientY:u}),rowNode:i,column:o,value:s})}function Se(e,t){e.menuService.showColumnChooser({chooserParams:t})}function ye(e){e.menuService.hideColumnChooser()}import{BeanStub as Ae,ModuleNames as g,_createIconNoSpan as h,_escapeString as w,_exists as ke,_warnOnce as Pe}from"@ag-grid-community/core";var Ge=class extends Ae{constructor(){super(...arguments),this.beanName="menuItemMapper"}wireBeans(e){this.columnModel=e.columnModel,this.columnNameService=e.columnNameService,this.columnApplyStateService=e.columnApplyStateService,this.funcColsService=e.funcColsService,this.focusService=e.focusService,this.rowPositionUtils=e.rowPositionUtils,this.chartMenuItemMapper=e.chartMenuItemMapper,this.menuService=e.menuService,this.sortController=e.sortController,this.columnAutosizeService=e.columnAutosizeService,this.expansionService=e.expansionService,this.clipboardService=e.clipboardService,this.aggFuncService=e.aggFuncService,this.csvCreator=e.csvCreator,this.excelCreator=e.excelCreator}mapWithStockItems(e,t,i,o){if(!e)return[];const s=[];return e.forEach(n=>{let r;if(typeof n=="string"?r=this.getStockMenuItem(n,t,i,o):r={...n},!r)return;const a=r,{subMenu:u}=a;u&&u instanceof Array&&(a.subMenu=this.mapWithStockItems(u,t,i,o)),r!=null&&s.push(r)}),s}getStockMenuItem(e,t,i,o){const s=this.localeService.getLocaleTextFunc(),n=this.gos.get("skipHeaderOnAutoSize");switch(e){case"pinSubMenu":return{name:s("pinColumn","Pin Column"),icon:h("menuPin",this.gos,null),subMenu:["clearPinned","pinLeft","pinRight"]};case"pinLeft":return{name:s("pinLeft","Pin Left"),action:()=>this.columnModel.setColsPinned([t],"left",o),checked:!!t&&t.isPinnedLeft()};case"pinRight":return{name:s("pinRight","Pin Right"),action:()=>this.columnModel.setColsPinned([t],"right",o),checked:!!t&&t.isPinnedRight()};case"clearPinned":return{name:s("noPin","No Pin"),action:()=>this.columnModel.setColsPinned([t],null,o),checked:!!t&&!t.isPinned()};case"valueAggSubMenu":return this.gos.assertModuleRegistered(g.RowGroupingModule,"Aggregation from Menu")?!t?.isPrimary()&&!t?.getColDef().pivotValueColumn?null:{name:s("valueAggregation","Value Aggregation"),icon:h("menuValue",this.gos,null),subMenu:this.createAggregationSubMenu(t,this.aggFuncService),disabled:this.gos.get("functionsReadOnly")}:null;case"autoSizeThis":return{name:s("autosizeThisColumn","Autosize This Column"),action:()=>this.columnAutosizeService.autoSizeColumn(t,o,n)};case"autoSizeAll":return{name:s("autosizeAllColumns","Autosize All Columns"),action:()=>this.columnAutosizeService.autoSizeAllColumns(o,n)};case"rowGroup":return{name:s("groupBy","Group by")+" "+w(this.columnNameService.getDisplayNameForColumn(t,"header")),disabled:this.gos.get("functionsReadOnly")||t?.isRowGroupActive()||!t?.getColDef().enableRowGroup,action:()=>this.funcColsService.addRowGroupColumns([t],o),icon:h("menuAddRowGroup",this.gos,null)};case"rowUnGroup":{const r=h("menuRemoveRowGroup",this.gos,null),a=t?.getColDef().showRowGroup,u=this.gos.get("groupLockGroupColumns");if(a===!0)return{name:s("ungroupAll","Un-Group All"),disabled:this.gos.get("functionsReadOnly")||u===-1||u>=this.funcColsService.getRowGroupColumns().length,action:()=>this.funcColsService.setRowGroupColumns(this.funcColsService.getRowGroupColumns().slice(0,u),o),icon:r};if(typeof a=="string"){const l=this.columnModel.getColDefCol(a),d=l!=null?w(this.columnNameService.getDisplayNameForColumn(l,"header")):a;return{name:s("ungroupBy","Un-Group by")+" "+d,disabled:this.gos.get("functionsReadOnly")||l!=null&&this.columnModel.isColGroupLocked(l),action:()=>this.funcColsService.removeRowGroupColumns([a],o),icon:r}}return{name:s("ungroupBy","Un-Group by")+" "+w(this.columnNameService.getDisplayNameForColumn(t,"header")),disabled:this.gos.get("functionsReadOnly")||!t?.isRowGroupActive()||!t?.getColDef().enableRowGroup||this.columnModel.isColGroupLocked(t),action:()=>this.funcColsService.removeRowGroupColumns([t],o),icon:r}}case"resetColumns":return{name:s("resetColumns","Reset Columns"),action:()=>this.columnApplyStateService.resetColumnState(o)};case"expandAll":return{name:s("expandAll","Expand All Row Groups"),action:()=>this.expansionService.expandAll(!0)};case"contractAll":return{name:s("collapseAll","Collapse All Row Groups"),action:()=>this.expansionService.expandAll(!1)};case"copy":return this.gos.assertModuleRegistered(g.ClipboardModule,"Copy from Menu")?{name:s("copy","Copy"),shortcut:s("ctrlC","Ctrl+C"),icon:h("clipboardCopy",this.gos,null),action:()=>this.clipboardService.copyToClipboard()}:null;case"copyWithHeaders":return this.gos.assertModuleRegistered(g.ClipboardModule,"Copy with Headers from Menu")?{name:s("copyWithHeaders","Copy with Headers"),icon:h("clipboardCopy",this.gos,null),action:()=>this.clipboardService.copyToClipboard({includeHeaders:!0})}:null;case"copyWithGroupHeaders":return this.gos.assertModuleRegistered(g.ClipboardModule,"Copy with Group Headers from Menu")?{name:s("copyWithGroupHeaders","Copy with Group Headers"),icon:h("clipboardCopy",this.gos,null),action:()=>this.clipboardService.copyToClipboard({includeHeaders:!0,includeGroupHeaders:!0})}:null;case"cut":if(this.gos.assertModuleRegistered(g.ClipboardModule,"Cut from Menu")){const r=this.focusService.getFocusedCell(),a=r?this.rowPositionUtils.getRowNode(r):null,u=a?r?.column.isCellEditable(a):!1;return{name:s("cut","Cut"),shortcut:s("ctrlX","Ctrl+X"),icon:h("clipboardCut",this.gos,null),disabled:!u||this.gos.get("suppressCutToClipboard"),action:()=>this.clipboardService.cutToClipboard(void 0,"contextMenu")}}else return null;case"paste":return this.gos.assertModuleRegistered(g.ClipboardModule,"Paste from Clipboard")?{name:s("paste","Paste"),shortcut:s("ctrlV","Ctrl+V"),disabled:!0,icon:h("clipboardPaste",this.gos,null),action:()=>this.clipboardService.pasteFromClipboard()}:null;case"export":{const r=[],a=this.gos.isModuleRegistered(g.CsvExportModule),u=this.gos.isModuleRegistered(g.ExcelExportModule);return!this.gos.get("suppressCsvExport")&&a&&r.push("csvExport"),!this.gos.get("suppressExcelExport")&&u&&r.push("excelExport"),{name:s("export","Export"),subMenu:r,icon:h("save",this.gos,null)}}case"csvExport":return{name:s("csvExport","CSV Export"),icon:h("csvExport",this.gos,null),action:()=>this.csvCreator?.exportDataAsCsv()};case"excelExport":return{name:s("excelExport","Excel Export"),icon:h("excelExport",this.gos,null),action:()=>this.excelCreator?.exportDataAsExcel()};case"separator":return"separator";case"pivotChart":case"chartRange":return this.chartMenuItemMapper.getChartItems(e)??null;case"columnFilter":return t?{name:s("columnFilter","Column Filter"),icon:h("filter",this.gos,null),action:()=>this.menuService.showFilterMenu({column:t,buttonElement:i(),containerType:"columnFilter",positionBy:"button"})}:null;case"columnChooser":return this.gos.isModuleRegistered(g.ColumnsToolPanelModule)?{name:s("columnChooser","Choose Columns"),icon:h("columns",this.gos,null),action:()=>this.menuService.showColumnChooser({column:t,eventSource:i()})}:null;case"sortAscending":return{name:s("sortAscending","Sort Ascending"),icon:h("sortAscending",this.gos,null),action:()=>this.sortController.setSortForColumn(t,"asc",!1,o)};case"sortDescending":return{name:s("sortDescending","Sort Descending"),icon:h("sortDescending",this.gos,null),action:()=>this.sortController.setSortForColumn(t,"desc",!1,o)};case"sortUnSort":return{name:s("sortUnSort","Clear Sort"),icon:h("sortUnSort",this.gos,null),action:()=>this.sortController.setSortForColumn(t,null,!1,o)};default:return Pe(`unknown menu item type ${e}`),null}}createAggregationSubMenu(e,t){const i=this.localeService.getLocaleTextFunc();let o;if(e.isPrimary())o=e;else{const n=e.getColDef().pivotValueColumn;o=ke(n)?n:void 0}const s=[];if(o){const n=o.isValueActive(),r=t.getFuncNames(o);s.push({name:i("noAggregation","None"),action:()=>{this.funcColsService.removeValueColumns([o],"contextMenu"),this.funcColsService.setColumnAggFunc(o,void 0,"contextMenu")},checked:!n}),r.forEach(a=>{s.push({name:i(a,t.getDefaultFuncLabel(a)),action:()=>{this.funcColsService.setColumnAggFunc(o,a,"contextMenu"),this.funcColsService.addValueColumns([o],"contextMenu")},checked:n&&o.getAggFunc()===a})})}return s}};import{BeanStub as xe,_getActiveDomElement as we,_isNothingFocused as T,_isVisible as Le,_last as Fe}from"@ag-grid-community/core";var Be=class extends xe{constructor(){super(...arguments),this.beanName="menuUtils"}wireBeans(e){this.focusService=e.focusService,this.headerNavigationService=e.headerNavigationService,this.visibleColsService=e.visibleColsService}restoreFocusOnClose(e,t,i,o){const{eventSource:s}=e,n=i instanceof KeyboardEvent;if(!o&&!n||!s)return;const r=we(this.gos);!t.contains(r)&&!T(this.gos)||this.focusHeaderCell(e)}closePopupAndRestoreFocusOnSelect(e,t,i){let o;i&&i.keyboardEvent&&(o=i.keyboardEvent),e(o&&{keyboardEvent:o});const s=this.focusService.getFocusedCell();if(T(this.gos))if(s){const{rowIndex:n,rowPinned:r,column:a}=s;this.focusService.setFocusedCell({rowIndex:n,column:a,rowPinned:r,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0})}else this.focusHeaderCell(t)}onContextMenu(e,t,i){if(!this.gos.get("allowContextMenuWithControlKey")&&e&&(e.ctrlKey||e.metaKey)||(e&&this.blockMiddleClickScrollsIfNeeded(e),this.gos.get("suppressContextMenu")))return;const o=e??t.touches[0];if(i(o)){const s=e??t;s&&s.cancelable&&s.preventDefault()}}async focusHeaderCell(e){const{column:t,columnIndex:i,headerPosition:o,eventSource:s}=e,n=await this.visibleColsService.getAllCols().some(r=>r===t);if(!(t&&!t.isAlive())){if(n&&s&&Le(s)){const r=this.focusService.findTabbableParent(s);r&&(t&&this.headerNavigationService.scrollToColumn(t),r.focus())}else if(o&&i!==-1){const r=this.visibleColsService.getAllCols(),a=r[i]||Fe(r);a&&this.focusService.focusHeaderPosition({headerPosition:{headerRowIndex:o.headerRowIndex,column:a}})}}}blockMiddleClickScrollsIfNeeded(e){this.gos.get("suppressMiddleClickScrolls")&&e.which===2&&e.preventDefault()}},L="32.3.5",_=P({version:L,moduleName:`${k.MenuModule}-core`,beans:[ve,ue,Ge,V,j,ee,Be],dependantModules:[U],userComponents:[{name:"agMenuItem",classImp:z}]}),Ee=P({version:L,moduleName:`${k.MenuModule}-api`,apiFunctions:{showContextMenu:be,showColumnChooser:Se,hideColumnChooser:ye},dependantModules:[_,D]}),Ie=P({version:L,moduleName:k.MenuModule,dependantModules:[_,Ee]});export{Ie as MenuModule};