@progress/kendo-react-grid
Version:
React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package
10 lines (9 loc) • 5.08 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2026 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 ae=require("react"),le=require("../utils/GridContext.js"),ue=require("@progress/kendo-react-buttons"),ce=require("@progress/kendo-svg-icons"),de=require("@progress/kendo-react-intl"),n=require("../messages/index.js"),y=require("@progress/kendo-react-common"),ge=require("@progress/kendo-react-dialogs"),pe=require("./ai-tool/GridAIPrompt.js"),me=require("../hooks/useGridAIRequest.js");function fe(r){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const e in r)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(r,e);Object.defineProperty(a,e,i.get?i:{enumerable:!0,get:()=>r[e]})}}return a.default=r,Object.freeze(a)}const o=fe(ae),P=768,he=(r,a)=>r.map(i=>{let c=i;return a.forEach(l=>{l.field&&c.includes(l.field)&&(c=c.replace(new RegExp(l.field,"g"),l.title||l.field))}),c}),Ce=()=>null,q=o.forwardRef((r,a)=>{const e=o.useContext(le.GridContext),i=de.useLocalization(),{requestUrl:c,requestOptions:l,onPromptRequest:v,onResponseSuccess:x,onResponseError:T,role:E="user",gridAIPrompt:W=pe.GridAIPrompt,icon:k,svgIcon:O,onCloseWindow:m,promptPlaceHolder:L,suggestionsList:M,streaming:B,loading:D,outputs:G,enableSpeechToText:S}=r,[j,I]=o.useState([]),z=o.useMemo(()=>e&&Array.isArray(e.columnsRef)&&Array.isArray(e.hiddenColumnsRef)?[...e.columnsRef,...e.hiddenColumnsRef].map(t=>{var s;return{id:t.id,field:t.field,values:(s=t.values)!=null?s:[]}}):[],[e]),N=o.useMemo(()=>({sort:e.sort,filter:e.filter,group:e.group,highlight:e.highlight,select:e.select,columnsState:e.columnsState,skip:e.skip,take:e.take}),[e]),H=o.useMemo(()=>({getTotal:()=>e.getTotal(),getLeafDataItems:()=>e.getLeafDataItems(),exportAsPdf:()=>e.exportAsPdf(),props:{dataItemKey:e.dataItemKey}}),[e]),[f,h]=o.useState(!1),[K,_]=o.useState(),[F,w]=o.useState(),[b,U]=o.useState(()=>{const t=window.innerWidth;return t<P?t*.8:560}),d=o.useRef(null),X=o.useCallback(t=>{var s,u;t.sort!==void 0&&t.sort!==e.sort&&e.sortChange(t.sort,{}),t.filter!==e.filter&&e.filterChange(t.filter,{}),t.group!==void 0&&t.group!==e.group&&e.groupChange(t.group,{}),t.highlight!==void 0&&t.highlight!==e.highlight&&e.applyHighlightDescriptor(t.highlight),t.select!==void 0&&t.select!==e.select&&e.applySelectionDescriptor(t.select),t.columnsState!==void 0&&t.columnsState!==e.columnsState&&e.onColumnsStateChange(t.columnsState),(t.skip!==void 0&&t.skip!==e.skip||t.take!==void 0&&t.take!==e.take)&&e.pagerPageChange({skip:(s=t.skip)!=null?s:0,take:(u=t.take)!=null?u:0,syntheticEvent:{}})},[e]),Y=o.useCallback((t,s,u)=>{const C=[i.toLanguageString(n.aIResponseData,n.messages[n.aIResponseData])];t.forEach(re=>{const ie=he([re],e.columnsRef).join(`
`);I(A=>[{id:A.length+1,title:i.toLanguageString(n.generatedWithAI,n.messages[n.generatedWithAI]),subTitle:s,prompt:s,responseContent:C.concat(ie).join(""),isRetry:u},...A])})},[i,e.columnsRef]),$=o.useCallback(()=>{e.exportAsPdf()},[e]),{loading:J,streaming:Q,sendRequest:V,cancelRequest:Z}=me.useGridAIRequest({requestUrl:c,requestOptions:l,role:E,columns:z,gridState:N,gridRef:H,onPromptRequest:v,onResponseSuccess:x,onResponseError:T,onStateChange:X,onMessages:Y,onExportPdf:$}),ee=t=>{t.preventDefault(),h(!f)},g=o.useMemo(()=>{var t;return(t=r.show)!=null?t:f},[r.show,f]),p=o.useCallback(()=>{var t;m&&m(),I([]),h(!1),d.current&&((t=d.current.element)==null||t.focus())},[m]),[te,R]=y.useCustomComponent(W),oe=Object.keys(R).length>0?R:{},se=o.createElement(te,{onPromptRequest:V,onCancel:Z,onClose:p,streaming:B||Q,loading:D||J,outputs:G||j,promptPlaceHolder:L,suggestionsList:M,enableSpeechToText:S,...oe}),ne=o.createElement(ue.Button,{ref:d,togglable:!0,themeColor:"primary",rounded:"full",selected:g,svgIcon:O||(k?void 0:ce.sparklesIcon),icon:k,size:e.mobileMode?"large":"medium",className:y.classNames("k-toolbar-button",{"k-icon-button":e.mobileMode}),title:i.toLanguageString(n.toolbarAI,n.messages[n.toolbarAI]),onClick:ee});return o.useEffect(()=>{var t;if(d.current&&g){const s=(t=d.current.element)==null?void 0:t.getBoundingClientRect();if(s){_(s.top+window.scrollY+s.height),w(s.left+window.scrollX+s.width);const u=window.innerWidth,C=u<P?u*.75:560;U(C)}}},[g]),o.useImperativeHandle(a,()=>({show:()=>h(!0),hide:()=>p()}),[p]),o.createElement(o.Fragment,null,ne,g&&o.createElement(ge.Window,{key:b,autoFocus:!1,title:i.toLanguageString(n.toolbarAI,n.messages[n.toolbarAI]),initialTop:K,initialLeft:F,initialWidth:b,style:{height:"auto",minWidth:"90px",minHeight:"50px"},onClose:p,resizable:!0,draggable:!0,className:"k-grid-assistant-window",maximizeButton:Ce},se))});q.displayName="KendoReactGridToolbarAIAssistant";exports.GridToolbarAIAssistant=q;