@progress/kendo-react-spreadsheet
Version:
KendoReact Spreadsheet package
9 lines (8 loc) • 6.32 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
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("react"),O=require("@progress/kendo-react-buttons"),C=require("@progress/kendo-react-common"),B=require("@progress/kendo-react-sortable"),N=require("@progress/kendo-svg-icons"),j=require("@progress/kendo-react-intl"),w=require("./messages.js");function M(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const c in o)if(c!=="default"){const i=Object.getOwnPropertyDescriptor(o,c);Object.defineProperty(e,c,i.get?i:{enumerable:!0,get:()=>o[c]})}}return e.default=o,Object.freeze(e)}const t=M(L),U={onSelect:()=>{},onDelete:()=>{},onEnterEdit:()=>{},onCancelEdit:()=>{},onExitEdit:()=>{},onEdit:()=>{}},R=t.createContext(U),_=o=>{const e=o.dataItem,{onSelect:c,onDelete:i,onEnterEdit:a,onExitEdit:h,onCancelEdit:u,onEdit:f}=t.useContext(R),p=t.useCallback(n=>{n.target instanceof HTMLElement&&n.target.nodeName==="INPUT"||c.call(void 0,e,n)},[e,c]),v=t.useCallback(n=>{i.call(void 0,e,n)},[e,i]),S=t.useCallback(n=>{n.target instanceof HTMLElement&&n.target.nodeName==="INPUT"||a.call(void 0,e,n)},[e,a]),g=t.useCallback(n=>{h.call(void 0,e,n)},[e,h]),x=t.useCallback(n=>{n.key==="Enter"?h.call(void 0,e,n):n.key==="Escape"&&u.call(void 0,e,n)},[e,h,u]),r=t.useCallback(n=>{f.call(void 0,{...e,text:n.target.value},n)},[e,f]);return t.createElement("li",{style:o.style,...o.attributes,ref:o.forwardRef,role:"tab",className:C.classNames("k-item k-tabstrip-item",{"k-disabled":o.isDisabled,"k-active k-state-tab-on-top k-spreadsheet-sheets-bar-active":e.active,"k-spreadsheet-sheets-bar-inactive":!e.active,"k-first":e.first,"k-last":e.last}),onClick:p,onDoubleClick:S},e.inEdit?t.createElement("input",{type:"text",className:"k-textbox k-spreadsheet-sheets-editor",value:e.text,onChange:r,maxLength:50,autoFocus:!0,onBlur:g,onKeyDown:x}):t.createElement(t.Fragment,null,t.createElement("span",{className:"k-link"},e.text),e.first&&e.last?null:t.createElement("span",{className:"k-link k-spreadsheet-sheets-remove",onClick:v},t.createElement(C.IconWrap,{name:"x",icon:N.xIcon}))))},y=t.forwardRef((o,e)=>{const{children:c,className:i,...a}=o;return t.createElement("ul",{className:C.classNames("k-tabstrip-items k-reset",i),role:"tablist",...a,ref:e},c)});y.displayName="TabsList";const A=o=>{const{sheets:e,setSheets:c,onSheetSelect:i,onSheetDelete:a,onSheetEdit:h,onSheetReorderEnd:u}=o,[f,p]=t.useState(null),v=t.useRef(!1),S=t.useRef(-1),g=t.useCallback(s=>{c(s.map((l,k,d)=>({...l,first:k===0,last:k===d.length-1})))},[]),x=t.useCallback(s=>{g(s.newState)},[g,u]),r=t.useCallback(s=>{u.call(void 0,s)},[u]),n=t.useCallback(s=>{v.current=!0,S.current=s.prevIndex},[]),m=t.useCallback(s=>{setTimeout(()=>{v.current=!1},50),u.call(void 0,{...s,prevIndex:S.current})},[]),E=t.useCallback((s,l)=>{v.current||i.call(void 0,s,l)},[i]),b=t.useCallback((s,l)=>{l.stopPropagation(),a.call(void 0,s)},[e,a]),D=t.useCallback((s,l)=>{l.stopPropagation(),l.preventDefault();const k=e.map(d=>({...d,active:d.id===s.id,inEdit:d.id===s.id}));c(k),p({...s})},[e]),P=t.useCallback((s,l)=>{l.stopPropagation(),l.preventDefault();const k=e.map(d=>({...d,inEdit:!1,text:d.inEdit&&f?f.text:d.text}));c(k),p(null)},[e,f]),T=t.useCallback((s,l)=>{l.stopPropagation(),l.preventDefault();const k=e.map(I=>({...I,inEdit:!1})),d=e.findIndex(I=>I.id===s.id);c(k),p(null),h.call(void 0,s,d)},[e,h]),q=t.useCallback((s,l)=>{l.stopPropagation(),l.preventDefault();const k=e.map(d=>({...d,text:s.id===d.id?s.text:d.text}));c(k)},[e]);return t.createElement("div",{className:"k-spreadsheet-sheets-items k-tabstrip k-floatwrap k-tabstrip-bottom"},t.createElement("div",{className:"k-tabstrip-items-wrapper k-hstack"},t.createElement(R.Provider,{value:{onSelect:E,onDelete:b,onEnterEdit:D,onCancelEdit:P,onExitEdit:T,onEdit:q}},t.createElement(B.Sortable,{idField:"id",data:e,itemUI:_,itemsWrapUI:y,onDragOver:x,onNavigate:r,onDragStart:n,onDragEnd:m,navigatable:!0}))))},F=(o,e,c)=>o.map((i,a,h)=>({text:i.name(),id:c+"-sheet-"+a,first:a===0,last:a===h.length-1,active:i.name()===e})),z=o=>{const{spreadsheetRef:e}=o,[c,i]=t.useState([]),a=t.useRef((c.find(r=>r.active)||{}).text),h=C.useId(),u=t.useCallback(()=>{e.current&&(e.current.view.sheetsbar.onSheetSelect(a.current),i(F(e.current.sheets(),a.current,h)))},[]),f=t.useCallback(()=>{if(e.current){const r=e.current.sheets();r.find(n=>n.name()===a.current)||(a.current=r[r.length-1].name()),u()}},[]);t.useEffect(()=>(e.current&&(e.current.sheets().length&&(a.current=e.current.sheets()[0].name(),u()),e.current.view.bind("update",f)),()=>{e.current&&e.current.view.unbind("update",f)}),[e.current]);const p=t.useCallback(r=>{a.current!==r.text&&(a.current=r.text,u())},[]),v=t.useCallback(()=>{if(e.current){e.current.view.sheetsbar.onAddSelect();const r=e.current.sheets();a.current=r[r.length-1].name(),u()}},[]),S=t.useCallback(r=>{if(e.current){if(a.current===r.text){const n=e.current.sheets(),m=n.findIndex(b=>b.name()===r.text),E=n[m+1]||n[m-1];a.current=E?E.name():""}e.current.view.sheetsbar.onSheetRemove(r.text),u()}},[]),g=t.useCallback((r,n)=>{if(e.current){let m=r.text;const E=e.current.sheets(),b=E[n];if(!m){a.current=b.name(),u();return}if(b&&b.name()===m)return;E.find(D=>D.name()===m)&&(m=b.name()),e.current.view.sheetsbar.onSheetRename(m,n),a.current=m,u()}},[]),x=t.useCallback(r=>{if(e.current){const{prevIndex:n,nextIndex:m}=r;a.current=e.current.sheets()[n].name(),e.current.view.sheetsbar.onSheetReorderEnd({oldIndex:n,newIndex:m}),u()}},[]);return t.createElement("div",{className:"k-spreadsheet-sheets-bar k-header"},t.createElement(O.Button,{fillMode:"flat",icon:"plus",className:"k-spreadsheet-sheets-bar-add",title:j.useLocalization().toLanguageString(w.keys.addNewSheet,w.messages[w.keys.addNewSheet]),svgIcon:N.plusIcon,onClick:v}),t.createElement(A,{sheets:c,setSheets:i,onSheetSelect:p,onSheetDelete:S,onSheetEdit:g,onSheetReorderEnd:x}))};exports.SheetsBar=z;