@progress/kendo-react-grid
Version:
React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package
10 lines (9 loc) • 4.87 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 re=require("react"),ae=require("../utils/GridContext.js"),ie=require("@progress/kendo-react-buttons"),le=require("@progress/kendo-svg-icons"),G=require("axios"),ue=require("@progress/kendo-react-intl"),i=require("../messages/index.js"),D=require("@progress/kendo-react-common"),ce=require("@progress/kendo-react-dialogs"),de=require("./ai-tool/GridAIPrompt.js"),L=require("../filterCommon.js");function pe(s){const c=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const t in s)if(t!=="default"){const u=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(c,t,u.get?u:{enumerable:!0,get:()=>s[t]})}}return c.default=s,Object.freeze(c)}const o=pe(re),fe=(s,c)=>s.map(u=>{let p=u;return c.forEach(d=>{d.field&&p.includes(d.field)&&(p=p.replace(new RegExp(d.field,"g"),d.title||d.field))}),p}),v=o.forwardRef((s,c)=>{const t=o.useContext(ae.GridContext),u=ue.useLocalization(),{requestUrl:p,requestOptions:d,onPromptRequest:O,onResponseSuccess:P,onResponseError:E,role:W="user",gridAIPrompt:B=de.GridAIPrompt,icon:F,svgIcon:A,onCloseWindow:R,promptPlaceHolder:M,suggestionsList:z,streaming:H,loading:N,outputs:_}=s,[w,j]=o.useState([]),$=o.useMemo(()=>t&&Array.isArray(t.columnsRef)?t.columnsRef.map(e=>({field:e.field})):[],[t]),[K,h]=o.useState(!1),[C,I]=o.useState(!1),[U,X]=o.useState(),[Y,J]=o.useState(),f=o.useRef(null),k=o.useRef(null),Q=e=>{e.preventDefault(),I(!C)},y=o.useMemo(()=>{var e;return(e=s.show)!=null?e:C},[s.show,C]),b=o.useCallback(()=>{var e;R&&R(),j([]),I(!1),f.current&&((e=f.current.element)==null||e.focus())},[R]),V=(e,r,g)=>{var l,S;if(h(!1),e!=null&&e.data){if(t.sortable&&e.data.sort)if(e.data.sort.length===0)t.sortChange([],e);else{const a=(l=t.sort)!=null?l:[],n=[];a.forEach(m=>{e.data.sort.some(T=>T.field===m.field)||n.push(m)}),n.push(...e.data.sort),t.sortChange(n,e)}if(e.data.filter){const a=L.combineSmartFilters(e.data.filter,t.filter);t.filterChange(a,e)}if(e.data.highlight){let a=e.data.highlight;Array.isArray(a)&&(a=a.map(n=>(n!=null&&n.filters&&Array.isArray(n.filters)&&L.parseFilterDates(n),n))),t.applyHighlightDescriptor(a)}if(t&&e.data.group)if(e.data.group.length===0)t.groupChange([],e);else{const a=(S=t.group)!=null?S:[],n=[];a.forEach(m=>{e.data.group.some(T=>T.field===m.field)||n.push(m)}),n.push(...e.data.group),t.groupChange(n,e)}if(e.data.messages){const a=[u.toLanguageString(i.aIResponseData,i.messages[i.aIResponseData])],n=fe(e.data.messages,t.columnsRef).join(`
`);j([{id:w.length+1,title:u.toLanguageString(i.generatedWithAI,i.messages[i.generatedWithAI]),subTitle:r,prompt:r,responseContent:a.concat(n).join(""),isRetry:g},...w])}}P&&P(e,r,g)},Z=e=>{E&&E(e),h(!1)},q=(e,r)=>{const g=G.CancelToken.source(),l={role:"user",columns:$||[],headers:{Accept:"*/*","Content-Type":"application/json"},promptMessage:e,requestOptions:{url:p,method:"POST",withCredentials:!1,responseType:"json",cancelToken:g.token,...d}};O&&O(l,r),l.requestOptions.url!==void 0&&(h(!0),G({...l.requestOptions,headers:l.headers,data:{role:W||l.role,contents:[{$type:"text",text:l.promptMessage}],columns:l.columns||[]},...s.requestOptions}).then(S=>V(S,l.promptMessage,r)).catch(Z),k.current=g)},ee=o.useCallback(()=>{k.current&&k.current.cancel("Request cancelled by user."),h(!1)},[]),[te,x]=D.useCustomComponent(B),oe=Object.keys(x).length>0?x:{},ne=o.createElement(te,{onPromptRequest:q,onCancel:ee,onClose:b,streaming:H||K,loading:N,outputs:_||w,promptPlaceHolder:M,suggestionsList:z,...oe}),se=o.createElement(ie.Button,{ref:f,togglable:!0,themeColor:"primary",rounded:"full",selected:y,svgIcon:A!=null?A:le.sparklesIcon,icon:F,size:t.mobileMode?"large":"medium",className:D.classNames("k-toolbar-button",{"k-icon-button":t.mobileMode}),title:u.toLanguageString(i.toolbarAI,i.messages[i.toolbarAI]),onClick:Q});return o.useEffect(()=>{var e;if(f.current&&y){const r=(e=f.current.element)==null?void 0:e.getBoundingClientRect();r&&(X(r.top+window.scrollY+r.height),J(r.left+window.scrollX+r.width))}},[y]),o.useImperativeHandle(c,()=>({show:()=>I(!0),hide:()=>b()}),[b]),o.createElement(o.Fragment,null,se,C&&o.createElement(ce.Window,{autoFocus:!1,title:u.toLanguageString(i.toolbarAI,i.messages[i.toolbarAI]),initialTop:U,initialLeft:Y,initialWidth:520,initialHeight:500,onClose:b,resizable:!0,draggable:!0,className:"k-grid-assistant-window"},ne))});v.displayName="KendoReactGridToolbarAIAssistant";exports.GridToolbarAIAssistant=v;