@progress/kendo-react-spreadsheet
Version:
KendoReact Spreadsheet package
9 lines (8 loc) • 7.85 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const re=require("react"),s=require("prop-types"),y=require("@progress/kendo-react-buttons"),M=require("@progress/kendo-react-layout"),P=require("@progress/kendo-react-dialogs"),W=require("./FormulaInput.js"),ne=require("./NameBox.js"),oe=require("./SheetsBar.js"),ae=require("@progress/kendo-spreadsheet-common"),j=require("./tools/defaultTools.js"),b=require("@progress/kendo-react-common"),D=require("./package-metadata.js"),se=require("@progress/kendo-svg-icons"),w=require("@progress/kendo-react-intl"),le=require("@progress/kendo-file-saver"),ce=require("@progress/kendo-ooxml"),l=require("./messages.js");function ie(e){const f=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const m in e)if(m!=="default"){const h=Object.getOwnPropertyDescriptor(e,m);Object.defineProperty(f,m,h.get?h:{enumerable:!0,get:()=>e[m]})}}return f.default=e,Object.freeze(f)}const r=ie(re),J=["bold","italic","underline","fontFamily","fontSize","color","background","textAlign","verticalAlign","wrap","gridLines"],N={Bold:e=>e.bold,Italic:e=>e.italic,Underline:e=>e.underline,FontFamily:e=>e.fontFamily,FontSize:e=>e.fontSize,IncreaseFontSize:e=>e.fontSize,DecreaseFontSize:e=>e.fontSize,TextColor:e=>e.color,BackgroundColor:e=>e.background,Alignment:e=>({textAlign:e.textAlign,verticalAlign:e.verticalAlign}),AlignHorizontally:e=>e.textAlign,AlignVertically:e=>e.verticalAlign,TextWrap:e=>e.wrap,GridLines:e=>e.gridLines,AddColumnLeft:e=>e.selectedHeaders,AddColumnRight:e=>e.selectedHeaders,AddRowBelow:e=>e.selectedHeaders,AddRowAbove:e=>e.selectedHeaders,DeleteColumn:e=>e.selectedHeaders,DeleteRow:e=>e.selectedHeaders},K=":not(.k-dropdownlist button):not(.k-combobox button):not(.k-upload-button):not(.k-colorpicker button):not(.k-split-button .k-split-button-arrow)",ue=["button"+K,".k-button-group > button"+K,".k-dropdownlist",".k-combobox",".k-colorpicker"],R=r.forwardRef((e,f)=>{const m=!b.validatePackage(D.packageMetadata,{component:"Spreadsheet"}),h=b.getLicenseMessage(D.packageMetadata),{toolbar:v=j.defaultTabs}=e,g=[];typeof v=="boolean"?g.push(...v?j.defaultTabs:[]):g.push(...v);const[i,I]=r.useState(null),[_,G]=r.useState(g.findIndex(t=>t.selected)||0),[de,V]=r.useState(!1),E=r.useRef(null),A=r.useRef(null),F=r.useRef(null),q=r.useRef(null),a=r.useRef(null),[x,U]=r.useState({}),S=r.useRef({});S.current=x;const c=r.useRef({});c.current=e;const C=w.useLocalization(),Q=r.useCallback(t=>{c.current.onSelect&&c.current.onSelect.call(void 0,t)},[]),X=r.useCallback(t=>{c.current.onChange&&c.current.onChange.call(void 0,t)},[]),Y=r.useCallback(t=>{c.current.onChangeFormat&&c.current.onChangeFormat.call(void 0,t)},[]),Z=r.useCallback(t=>{c.current.onExcelImport&&c.current.onExcelImport.call(void 0,t)},[]),$=r.useCallback(t=>{c.current.onExcelExport&&c.current.onExcelExport.call(void 0,t)},[]),T=r.useRef(null);r.useImperativeHandle(T,()=>({element:E.current,get instance(){return a.current},props:e,get view(){return a.current.view},get workbook(){return a.current.workbook},executeCommand(t){var n;(n=a.current)==null||n.executeCommand(t)},fromJSON(t){var n;return(n=a.current)==null?void 0:n.fromJSON(t)},toJSON(){return a.current.toJSON()},saveJSON(){return a.current.saveJSON()},fromFile(t){return a.current.fromFile(t)},saveAsExcel(t){var n;(n=a.current)==null||n.saveAsExcel({...a.current.options.excel,saveAs:le.saveAs,Workbook:ce.Workbook,...t})},activeSheet(t){var n;return(n=a.current)==null?void 0:n.activeSheet(t)},sheets(){return a.current.sheets()},refresh(){var t;return(t=a.current)==null?void 0:t.refresh()}}),[e]),r.useImperativeHandle(f,()=>T.current);const ee=r.useCallback(()=>a.current&&a.current.view.nameEditor,[]),H=r.useCallback(t=>{const n={};J.forEach(o=>{typeof t.range[o]=="function"?n[o]=t.range[o]():o==="gridLines"&&(n[o]=t.range.sheet().showGridLines())}),n.selectedHeaders=t.range.sheet().selectedHeaders(),(J.some(o=>n[o]!==S.current[o])||n.selectedHeaders.allCols!==S.current.selectedHeaders.allCols||n.selectedHeaders.allRows!==S.current.selectedHeaders.allRows)&&U(n)},[]),te=r.useCallback(t=>{const n=t.name,o=l.keys[n];I({title:t.title==="Error"?C.toLanguageString(l.keys.error,l.messages[l.keys.error]):t.title,message:o?C.toLanguageString(o,l.messages[o]||t.text):t.text,close:t.close})},[]),L=r.useCallback(()=>{I(null),i==null||i.close()},[i]),p=w.useInternationalization(),O=w.useLocalization();r.useEffect(()=>{var k;const t={...e.defaultProps,sheets:window==null?void 0:window.structuredClone((k=e.defaultProps)==null?void 0:k.sheets),messages:{workbook:{defaultSheetName:O.toLanguageString(l.keys.defaultSheetName,l.messages[l.keys.defaultSheetName])}},intl:{localeInfo:()=>p.localeInfo(),localeCurrency:()=>p.localeCurrency(),parseDate:(u,d)=>p.parseDate(u,d),toString:(u,d)=>p.toString(u,d),format:(u,...d)=>p.format(u,...d)},formulaBarInputRef:A,formulaCellInputRef:F,nameBoxRef:q},n=new ae.SpreadsheetWidget(E.current,t);a.current=n,n.bind("select",Q),n.bind("change",X),n.bind("changeFormat",Y),n.bind("excelImport",Z),n.bind("excelExport",$),n.view.bind("update",H),n.view.bind("message",te);const o=n.activeSheet();return o&&H({range:o.range(o.activeCell())}),V(!0),()=>{n.destroy()}},[]);const B=r.useCallback((t,n)=>{const o=r.createElement(t,{spreadsheetRef:a,value:N[t.displayName]?N[t.displayName](x):void 0,key:n});return o.type===y.ToolbarSeparator?r.createElement(t,{key:n}):o},[x]);let z=null;return g.length&&(z=r.createElement(M.TabStrip,{selected:_,animation:!1,className:"k-floatwrap k-spreadsheet-tabstrip",style:{minHeight:"auto"},onSelect:t=>G(t.selected)},g.map(t=>{const n=t.textKey?O.toLanguageString(t.textKey,l.messages[t.textKey]):t.text;return r.createElement(M.TabStripTab,{key:t.textKey||t.text,title:n},r.createElement(y.Toolbar,{buttons:ue,className:"k-spreadsheet-toolbar"},t.tools.map((o,k)=>Array.isArray(o)?r.createElement(y.ButtonGroup,{key:k},o.map((u,d)=>B(u,d))):B(o,k))))}))),r.createElement("div",{ref:E,style:e.style,className:b.classNames("k-widget k-spreadsheet",e.className),role:"application"},z,r.createElement("div",{className:"k-spreadsheet-action-bar"},r.createElement(ne.NameBox,{ref:q,nameEditor:ee}),r.createElement("div",{className:"k-spreadsheet-formula-bar"},r.createElement(b.IconWrap,{name:"formula-fx",icon:se.formulaFxIcon}),r.createElement(W.FormulaInput,{ref:A}))),r.createElement("div",{className:"k-spreadsheet-view"},r.createElement("div",{className:"k-spreadsheet-fixed-container"}),r.createElement("div",{className:"k-spreadsheet-scroller"},r.createElement("div",{className:"k-spreadsheet-view-size"})),r.createElement("div",{tabIndex:0,className:"k-spreadsheet-clipboard",contentEditable:"true"}),r.createElement(W.FormulaInput,{ref:F,className:"k-spreadsheet-cell-editor"})),r.createElement(oe.SheetsBar,{spreadsheetRef:a}),i&&r.createElement(P.Dialog,{title:i.title,onClose:L},r.createElement("div",null,i.message),r.createElement(P.DialogActionsBar,{layout:"start"},r.createElement(y.Button,{themeColor:"primary",onClick:L,autoFocus:!0},C.toLanguageString(l.keys.ok,l.messages[l.keys.ok])))),m&&r.createElement(b.WatermarkOverlay,{message:h}))});R.displayName="KendoReactSpreadsheet";R.propTypes={className:s.string,defaultProps:s.any,toolbar:s.oneOfType([s.bool,s.arrayOf(s.any)]),style:s.object,onSelect:s.func,onChange:s.func,onChangeFormat:s.func,onExcelImport:s.func,onExcelExport:s.func};exports.Spreadsheet=R;exports.toolsValueMap=N;