@agile-team/mach-table-react 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/workflows.cjs +1 -1
- package/dist/workflows.js +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# @agile-team/mach-table-react
|
|
6
6
|
|
|
7
|
-
MachTable 0.
|
|
7
|
+
MachTable 0.25 的官方 React 18+ 适配包。一个依赖即可获得 Core、泛型 `<MachTable>`、应用/路由配置、按需工作流、StrictMode 安全清理和最新闭包事件处理。
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
pnpm add @agile-team/mach-table-react
|
|
@@ -94,7 +94,7 @@ import { reactCellRenderer } from "@agile-team/mach-table-react/adapters";
|
|
|
94
94
|
import { createWorkerDataProcessor } from "@agile-team/mach-table-react/worker";
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
- `/workflows
|
|
97
|
+
- `/workflows`:请求取消、防过期覆盖、服务端分页、跨页选择、脏数据和冲突保存;`reset()` 清空全部表格过滤且只请求一次。
|
|
98
98
|
- `/ui`:可选标准工具栏。
|
|
99
99
|
- `/adapters`:自定义 React cell/detail renderer 桥接。
|
|
100
100
|
- `/worker`:大型本地过滤/排序的独立 Worker 能力。
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkII7TCYIUcjs = require('./chunk-II7TCYIU.cjs');var _react = require('react');var _machtable = require('@agile-team/mach-table'); _createStarExport(_machtable);var _adapter = require('@agile-team/mach-table/adapter');var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkII7TCYIUcjs = require('./chunk-II7TCYIU.cjs');var _react = require('react');var _machtable = require('@agile-team/mach-table'); _createStarExport(_machtable);var _adapter = require('@agile-team/mach-table/adapter');var E=_adapter.normalizeMachTableConfig.call(void 0, ),M=_react.createContext.call(void 0, E);function S({config:e,children:o}){let t=_react.useContext.call(void 0, M),r=_react.useMemo.call(void 0, ()=>_adapter.mergeMachTableConfig.call(void 0, t,_nullishCoalesce(e, () => ({}))),[t,e]);return _react.createElement.call(void 0, M.Provider,{value:r},o)}function R(){return _react.useContext.call(void 0, M)}function V(e){return`on${e.charAt(0).toUpperCase()}${e.slice(1)}`}function $(e,o){let t={};for(let r of _adapter.GRID_OPTION_KEYS){if(r==="className")continue;let c=r==="ariaLabel"?e.gridAriaLabel:r==="ariaLabelledBy"?e.gridAriaLabelledBy:r==="ariaDescribedBy"?e.gridAriaDescribedBy:e[r];c!==void 0&&(t[r]=c)}return e.gridClassName!==void 0&&(t.className=e.gridClassName),_adapter.resolveMachTableGridOptions.call(void 0, o,e.preset,t).options}function x(e){let{className:o,style:t,apiRef:r}=e,c=_react.useRef.call(void 0, null),d=_react.useRef.call(void 0, null),C=_react.useRef.call(void 0, e);C.current=e;let v=R(),p=[v,e.preset,..._adapter.GRID_OPTION_KEYS.map(a=>a==="className"?e.gridClassName:a==="ariaLabel"?e.gridAriaLabel:a==="ariaLabelledBy"?e.gridAriaLabelledBy:a==="ariaDescribedBy"?e.gridAriaDescribedBy:e[a])],l=_react.useRef.call(void 0, null);(!l.current||l.current.inputs.length!==p.length||p.some((a,n)=>!Object.is(a,_optionalChain([l, 'access', _2 => _2.current, 'optionalAccess', _3 => _3.inputs, 'access', _4 => _4[n]]))))&&(l.current={inputs:p,options:$(e,v)});let m=l.current.options,g=_react.useRef.call(void 0, m);g.current=m,_react.useEffect.call(void 0, ()=>{let a=c.current;if(!a)return;let n={...g.current};for(let f of _machtable.EVENT_TYPES){let u=V(f);n[u]=P=>{let h=g.current[u],y=C.current[u];try{typeof h=="function"&&h(P)}finally{typeof y=="function"&&y!==h&&y(P)}}}let s=_machtable.createGrid.call(void 0, a,n);return d.current=s,()=>{s.destroy(),d.current=null}},[]),_react.useEffect.call(void 0, ()=>{if(!r)return;let a=d.current;return r.current=a,()=>{r.current===a&&(r.current=null)}},[r]);let T=_adapter.GRID_OPTION_KEYS.map(a=>m[a]),D=_react.useRef.call(void 0, null);return _react.useEffect.call(void 0, ()=>{let a=D.current;if(D.current=T,!a)return;let n={};T.forEach((s,f)=>{if(Object.is(s,a[f]))return;let u=_adapter.GRID_OPTION_KEYS[f];n[u]=s}),Object.keys(n).length>0&&_optionalChain([d, 'access', _5 => _5.current, 'optionalAccess', _6 => _6.updateOptions, 'call', _7 => _7(n)])},T),_react.createElement.call(void 0, "div",{ref:c,className:`mach-react-host ${_nullishCoalesce(o, () => (""))}`.trim()||void 0,style:t,"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-describedby":e["aria-describedby"]})}var X=x;exports.MachTable = x; exports.MachTableProvider = S; exports.default = X; exports.useMachTable = _chunkII7TCYIUcjs.a; exports.useMachTableConfig = R;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as A}from"./chunk-FN4LWAOL.js";import{createElement as j,useEffect as O,useRef as i}from"react";import{createGrid as I,EVENT_TYPES as _}from"@agile-team/mach-table";import{GRID_OPTION_KEYS as b,resolveMachTableGridOptions as H}from"@agile-team/mach-table/adapter";import{createContext as G,createElement as L,useContext as N,useMemo as B}from"react";import{mergeMachTableConfig as w,normalizeMachTableConfig as k}from"@agile-team/mach-table/adapter";var E=k(),M=G(E);function S({config:e,children:o}){let t=N(M),r=B(()=>w(t,e??{}),[t,e]);return L(M.Provider,{value:r},o)}function R(){return N(M)}function V(e){return`on${e.charAt(0).toUpperCase()}${e.slice(1)}`}function $(e,o){let t={};for(let r of b){if(r==="className")continue;let c=r==="ariaLabel"?e.gridAriaLabel:r==="ariaLabelledBy"?e.gridAriaLabelledBy:r==="ariaDescribedBy"?e.gridAriaDescribedBy:e[r];c!==void 0&&(t[r]=c)}return e.gridClassName!==void 0&&(t.className=e.gridClassName),H(o,e.preset,t).options}function x(e){let{className:o,style:t,apiRef:r}=e,c=i(null),d=i(null),C=i(e);C.current=e;let v=R(),p=[v,e.preset,...b.map(a=>a==="className"?e.gridClassName:a==="ariaLabel"?e.gridAriaLabel:a==="ariaLabelledBy"?e.gridAriaLabelledBy:a==="ariaDescribedBy"?e.gridAriaDescribedBy:e[a])],l=i(null);(!l.current||l.current.inputs.length!==p.length||p.some((a,n)=>!Object.is(a,l.current?.inputs[n])))&&(l.current={inputs:p,options:$(e,v)});let m=l.current.options,g=i(m);g.current=m,O(()=>{let a=c.current;if(!a)return;let n={...g.current};for(let f of _){let u=V(f);n[u]=P=>{let h=g.current[u],y=C.current[u];try{typeof h=="function"&&h(P)}finally{typeof y=="function"&&y!==h&&y(P)}}}let s=I(a,n);return d.current=s,()=>{s.destroy(),d.current=null}},[]),O(()=>{if(!r)return;let a=d.current;return r.current=a,()=>{r.current===a&&(r.current=null)}},[r]);let T=b.map(a=>m[a]),D=i(null);return O(()=>{let a=D.current;if(D.current=T,!a)return;let n={};T.forEach((s,f)=>{if(Object.is(s,a[f]))return;let u=b[f];n[u]=s}),Object.keys(n).length>0&&d.current?.updateOptions(n)},T),j("div",{ref:c,className:`mach-react-host ${o??""}`.trim()||void 0,style:t,"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-describedby":e["aria-describedby"]})}export*from"@agile-team/mach-table";var X=x;export{x as MachTable,S as MachTableProvider,X as default,A as useMachTable,R as useMachTableConfig};
|
package/dist/workflows.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkII7TCYIUcjs = require('./chunk-II7TCYIU.cjs');var _react = require('react');var _machtable = require('@agile-team/mach-table');function ee(t,a={}){let[b,R]=_react.useState.call(void 0, []),[w,Q]=_react.useState.call(void 0, []),[D,l]=_react.useState.call(void 0, !1),[v,M]=_react.useState.call(void 0, null),[i,F]=_react.useState.call(void 0, null),S=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, ()=>{let r=t.apiRef.current;if(!r||r.isDestroyed()){Q([]),R([]);return}Q(r.editing.getDirtyRowIds()),R(r.editing.getChanges())},[t.apiRef]);_react.useEffect.call(void 0, ()=>{let r=t.api;return g(),r&&!r.isDestroyed()?r.on("dirtyStateChanged",g):void 0},[t.api,g]);let P=_react.useCallback.call(void 0, async(r,u)=>{let d=t.apiRef.current;if(!d||d.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(S.current)throw new Error("[MachTable] A save operation is already in progress.");S.current=!0,l(!0),M(null),F(null);try{let o=await d.editing.save(r,u);return F(o),g(),_optionalChain([a, 'access', _2 => _2.onSaveSuccess, 'optionalCall', _3 => _3(o.saved)]),_optionalChain([a, 'access', _4 => _4.onSaveResult, 'optionalCall', _5 => _5(o)]),o}catch(o){throw M(o),_optionalChain([a, 'access', _6 => _6.onSaveError, 'optionalCall', _7 => _7(o)]),o}finally{S.current=!1,l(!1)}},[a,g,t.apiRef]),H=_react.useCallback.call(void 0, async(r,u)=>(await P(r,u)).saved,[P]),K=_react.useCallback.call(void 0, ()=>F(null),[]),N=_react.useCallback.call(void 0, (r,u)=>{let d=_optionalChain([i, 'optionalAccess', _8 => _8.conflicts, 'access', _9 => _9.find, 'call', _10 => _10(y=>y.rowId===r)]),o=t.apiRef.current;return!i||!d||!o||!_machtable.resolveSaveConflict.call(void 0, o,d,u)?!1:(F({...i,failures:i.failures,conflicts:i.conflicts.filter(y=>y.rowId!==r)}),g(),!0)},[i,g,t.apiRef]),U=_react.useCallback.call(void 0, r=>{let u=_nullishCoalesce(_optionalChain([t, 'access', _11 => _11.apiRef, 'access', _12 => _12.current, 'optionalAccess', _13 => _13.editing, 'access', _14 => _14.rollback, 'call', _15 => _15(r)]), () => (!1));return g(),u},[g,t.apiRef]),V=_react.useCallback.call(void 0, r=>{_optionalChain([t, 'access', _16 => _16.apiRef, 'access', _17 => _17.current, 'optionalAccess', _18 => _18.editing, 'access', _19 => _19.markSaved, 'call', _20 => _20(r)]),g()},[g,t.apiRef]),q=_react.useCallback.call(void 0, (r,u,d=!1)=>{let o=t.apiRef.current,y=_optionalChain([o, 'optionalAccess', _21 => _21.rows, 'access', _22 => _22.getById, 'call', _23 => _23(r)]);return!o||!y||y.rowIndex<0?!1:(o.view.scrollToRow(y.rowIndex,"middle"),u&&d?o.editing.startCell({rowIndex:y.rowIndex,colId:u}):!0)},[t.apiRef]);_react.useEffect.call(void 0, ()=>{if(!a.guardBeforeUnload||typeof window>"u")return;let r=u=>{if(w.length===0)return;let d=_nullishCoalesce(a.beforeUnloadMessage, () => ("\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002"));return u.preventDefault(),u.returnValue=d,d};return window.addEventListener("beforeunload",r),()=>window.removeEventListener("beforeunload",r)},[w.length,a.beforeUnloadMessage,a.guardBeforeUnload]);let z=_react.useMemo.call(void 0, ()=>[..._nullishCoalesce(_optionalChain([i, 'optionalAccess', _24 => _24.failures]), () => ([])),..._nullishCoalesce(_optionalChain([i, 'optionalAccess', _25 => _25.conflicts]), () => ([]))],[i]),W=_react.useMemo.call(void 0, ()=>[...new Set(z.map(r=>r.rowId))],[z]);return _react.useMemo.call(void 0, ()=>({changes:b,dirtyRowIds:w,dirty:w.length>0,saving:D,saveError:v,lastSaveResult:i,saveIssues:z,failedRowIds:W,save:H,saveDetailed:P,clearSaveIssues:K,resolveConflict:N,rollback:U,markSaved:V,reveal:q,refresh:g}),[b,K,w,W,i,V,g,N,q,U,H,P,v,z,D])}function re(t,a){return typeof t=="number"&&Number.isFinite(t)&&t>0?Math.floor(t):a}function Ue(t){return(t instanceof DOMException||typeof t=="object"&&t!=null&&"name"in t)&&t.name==="AbortError"}function qe(t){return typeof t=="function"?t():t}function Oe(t){let a=_react.useRef.call(void 0, t);a.current=t;let[b,R]=_react.useState.call(void 0, []),[w,Q]=_react.useState.call(void 0, !1),[D,l]=_react.useState.call(void 0, null),[v,M]=_react.useState.call(void 0, re(t.initialPage,1)),[i,F]=_react.useState.call(void 0, re(t.pageSize,20)),[S,g]=_react.useState.call(void 0, 0),[P,H]=_react.useState.call(void 0, []),[K,N]=_react.useState.call(void 0, {}),[U,V]=_react.useState.call(void 0, null),[q,z]=_react.useState.call(void 0, _nullishCoalesce(t.initialQuickFilterText, () => (null))),[,W]=_react.useReducer.call(void 0, e=>e+1,0),r=_react.useRef.call(void 0, {page:v,pageSize:i,sortModel:P,filterModel:K,advancedFilterModel:U,quickFilterText:q,rows:b});r.current={page:v,pageSize:i,sortModel:P,filterModel:K,advancedFilterModel:U,quickFilterText:q,rows:b};let u=_react.useRef.call(void 0, null),d=_react.useRef.call(void 0, null),o=_react.useRef.call(void 0, null),y=_react.useRef.call(void 0, 0),C=_react.useRef.call(void 0, new Set),x=_react.useRef.call(void 0, new Set),T=_react.useRef.call(void 0, new Map),O=_react.useRef.call(void 0, !1),j=_react.useRef.call(void 0, !1),$=_react.useRef.call(void 0, !1),p=_react.useCallback.call(void 0, e=>{let n=a.current.rowKey,s=typeof n=="function"?n(e):_machtable.getByPath.call(void 0, e,n);if(s==null||String(s).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(n)}" returned an empty value.`);return String(s)},[]),B=_react.useCallback.call(void 0, e=>O.current?!x.current.has(e):C.current.has(e),[]),E=_react.useCallback.call(void 0, ()=>W(),[]),I=_react.useCallback.call(void 0, ()=>{let e=u.current;if(!(!e||e.isDestroyed())){$.current=!0;try{e.selection.setRows(r.current.rows.filter(n=>B(p(n))),!0)}finally{$.current=!1}}},[p,B]),te=_react.useCallback.call(void 0, ()=>{y.current++,_optionalChain([d, 'access', _26 => _26.current, 'optionalAccess', _27 => _27.abort, 'call', _28 => _28()]),d.current=null,o.current&&clearTimeout(o.current),o.current=null,Q(!1)},[]),X=_react.useCallback.call(void 0, (e,n)=>e.signal.aborted||n!==y.current,[]),ne=_react.useCallback.call(void 0, (e,n,s)=>{if(X(n,s))return;if(!e||!Array.isArray(e.rows)||!Number.isFinite(e.total)||e.total<0)throw new TypeError("[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.");let c=[...e.rows];for(let Y of c){let Z=p(Y);B(Z)?T.current.set(Z,Y):T.current.delete(Z)}r.current.rows=c,R(c),g(Math.floor(e.total)),E(),_optionalChain([a, 'access', _29 => _29.current, 'access', _30 => _30.onSuccess, 'optionalCall', _31 => _31(e)]),queueMicrotask(I)},[X,E,p,B,I]),ae=_react.useCallback.call(void 0, (e,n,s)=>{if(X(n,s)||Ue(e))return;let c=_nullishCoalesce(e, () => (new Error("Remote request failed")));l(c),_optionalChain([a, 'access', _32 => _32.current, 'access', _33 => _33.onError, 'optionalCall', _34 => _34(c)])},[X]),oe=_react.useCallback.call(void 0, (e,n)=>{n===y.current&&(Q(!1),d.current===e&&(d.current=null))},[]),h=_react.useCallback.call(void 0, async()=>{o.current&&clearTimeout(o.current),o.current=null,_optionalChain([d, 'access', _35 => _35.current, 'optionalAccess', _36 => _36.abort, 'call', _37 => _37()]);let e=new AbortController;d.current=e;let n=++y.current;Q(!0),l(null),a.current.keepPreviousData===!1&&R([]);let s=r.current;try{let c=await a.current.request({page:s.page,pageSize:s.pageSize,query:qe(a.current.query),sortModel:s.sortModel.map(Y=>({...Y})),filterModel:{...s.filterModel},advancedFilterModel:_machtable.normalizeAdvancedFilterModel.call(void 0, s.advancedFilterModel),quickFilterText:s.quickFilterText,signal:e.signal});ne(c,e,n)}catch(c){ae(c,e,n)}finally{oe(e,n)}},[ne,oe,ae]),L=_react.useCallback.call(void 0, e=>{e&&(r.current.page=1,M(1)),_optionalChain([d, 'access', _38 => _38.current, 'optionalAccess', _39 => _39.abort, 'call', _40 => _40()]),d.current=null;let n=Math.max(0,_nullishCoalesce(a.current.debounceMs, () => (0)));o.current&&clearTimeout(o.current),n===0?h():o.current=setTimeout(()=>{h()},n)},[h]),G=_react.useCallback.call(void 0, ()=>{let e=O.current||C.current.size>0||x.current.size>0||T.current.size>0;O.current=!1,C.current.clear(),x.current.clear(),T.current.clear(),e&&E(),$.current=!0;try{_optionalChain([u, 'access', _41 => _41.current, 'optionalAccess', _42 => _42.selection, 'access', _43 => _43.clear, 'call', _44 => _44()])}finally{$.current=!1}},[E]),le=_react.useCallback.call(void 0, e=>{if(j.current)return;let n=r.current;e.page===n.page&&e.pageSize===n.pageSize||(n.page=e.page,n.pageSize=e.pageSize,M(e.page),F(e.pageSize),a.current.mode!=="manual"&&h())},[h]),ie=_react.useCallback.call(void 0, e=>{if(j.current)return;let n=e.sortModel.map(s=>({...s}));r.current.sortModel=n,H(n),a.current.mode!=="manual"?L(!0):(r.current.page=1,M(1))},[L]),se=_react.useCallback.call(void 0, e=>{if(j.current)return;let n={...e.filterModel};r.current.filterModel=n;let s=_machtable.normalizeAdvancedFilterModel.call(void 0, e.advancedFilterModel);r.current.advancedFilterModel=s,r.current.quickFilterText=e.api.filtering.getQuickText(),N(n),V(s),z(r.current.quickFilterText),a.current.clearSelectionOnQueryChange!==!1&&G(),a.current.mode!=="manual"?L(!0):(r.current.page=1,M(1))},[G,L]),ce=_react.useCallback.call(void 0, e=>{if($.current)return;let n=new Set(r.current.rows.map(p)),s=new Set(e.selectedRows.map(p));if(O.current)for(let c of n)s.has(c)?x.current.delete(c):(x.current.add(c),T.current.delete(c));else{if((_nullishCoalesce(a.current.selectionScope, () => ("preserve")))==="page")C.current.clear(),T.current.clear();else for(let c of n)C.current.delete(c),T.current.delete(c);for(let c of e.selectedRows)C.current.add(p(c))}for(let c of e.selectedRows)T.current.set(p(c),c);E()},[E,p]),Me=_react.useCallback.call(void 0, async(e={})=>{e.resetPage&&(r.current.page=1,M(1)),await h()},[h]),Se=_react.useCallback.call(void 0, async()=>{r.current.page=1,r.current.sortModel=[],r.current.filterModel={},r.current.advancedFilterModel=null,M(1),H([]),N({}),V(null),G(),j.current=!0;try{_optionalChain([u, 'access', _45 => _45.current, 'optionalAccess', _46 => _46.sorting, 'access', _47 => _47.setModel, 'call', _48 => _48(null)]),_optionalChain([u, 'access', _49 => _49.current, 'optionalAccess', _50 => _50.filtering, 'access', _51 => _51.setModel, 'call', _52 => _52(null)]),_optionalChain([u, 'access', _53 => _53.current, 'optionalAccess', _54 => _54.filtering, 'access', _55 => _55.setAdvancedModel, 'call', _56 => _56(null)])}finally{j.current=!1}await h()},[G,h]),we=_react.useCallback.call(void 0, ()=>{O.current=!0,C.current.clear(),x.current.clear(),T.current.clear();for(let e of r.current.rows)T.current.set(p(e),e);E(),I()},[E,p,I]),Re=_react.useCallback.call(void 0, e=>{C.current.clear(),x.current.clear(),T.current.clear(),O.current=e.mode==="allMatching";for(let n of(e.mode==="allMatching"?e.excludedKeys:e.selectedKeys).map(String))e.mode==="allMatching"?x.current.add(n):C.current.add(n);for(let n of r.current.rows)B(p(n))&&T.current.set(p(n),n);E(),I()},[E,p,B,I]),ue=_react.useRef.call(void 0, !0),De=t.queryKey===void 0?t.query:t.queryKey;_react.useEffect.call(void 0, ()=>{if(ue.current){ue.current=!1;return}a.current.clearSelectionOnQueryChange!==!1&&G(),a.current.mode!=="manual"?L(!0):(r.current.page=1,M(1))},[De,G,L]),_react.useEffect.call(void 0, ()=>(t.mode!=="manual"&&t.immediate!==!1&&h(),te),[]);let de=_react.useMemo.call(void 0, ()=>{let e=[...new Set((_nullishCoalesce(t.pageSizeOptions, () => ([10,20,50,100]))).map(n=>re(n,0)).filter(Boolean))];return e.includes(i)||e.push(i),e.sort((n,s)=>n-s)},[t.pageSizeOptions,i]),Ce=_react.useMemo.call(void 0, ()=>({rowData:b,loading:w,error:D,rowKey:p,manualSorting:!0,manualFiltering:!0,advancedFilterModel:U,quickFilterText:q,overlayErrorTemplate:D?()=>_nullishCoalesce(_optionalChain([a, 'access', _57 => _57.current, 'access', _58 => _58.errorOverlay, 'optionalCall', _59 => _59({error:D,retry:h})]), () => ("Remote request failed. Please retry.")):void 0,overlayNoRowsTemplate:t.emptyOverlay,pagination:{mode:"server",page:v,pageSize:i,pageSizeOptions:de,total:S,showTotal:!0,showPageSizeSelector:!0},onGridReady:({api:e})=>{u.current=e,queueMicrotask(I)},onPaginationChanged:le,onSortChanged:ie,onFilterChanged:se,onSelectionChanged:ce}),[U,D,h,w,se,le,ce,ie,t.emptyOverlay,v,i,de,q,p,b,I,S]),fe=O.current?[]:[...C.current],xe=[...T.current.entries()].filter(([e])=>!x.current.has(e)).map(([,e])=>e),Ee=O.current?{mode:"allMatching",excludedKeys:[...x.current]}:{mode:"explicit",selectedKeys:fe};return{rows:b,loading:w,error:D,page:v,pageSize:i,total:S,sortModel:P,filterModel:K,advancedFilterModel:U,quickFilterText:q,setQuickFilterText(e){r.current.quickFilterText=e,z(e),_optionalChain([u, 'access', _60 => _60.current, 'optionalAccess', _61 => _61.filtering, 'access', _62 => _62.setQuickText, 'call', _63 => _63(e)])},selectedKeys:fe,selectedRows:xe,selectionState:Ee,bindings:Ce,reload:Me,retry:h,reset:Se,abort:te,clearSelection:G,selectAllMatching:we,applySelectionState:Re}}function Ae(t={}){let a=_chunkII7TCYIUcjs.a.call(void 0, ),b=ee(a,t.editing),[R,w]=_react.useState.call(void 0, _nullishCoalesce(t.initialSearch, () => (""))),[Q,D]=_react.useState.call(void 0, []),l=_nullishCoalesce(t.query, () => (null));_react.useEffect.call(void 0, ()=>{let S=a.api;if(!S||S.isDestroyed()||l)return;let g=()=>D(S.selection.getRows());return g(),S.on("selectionChanged",g)},[l,a.api]),_react.useEffect.call(void 0, ()=>{l?l.setQuickFilterText(R||null):_optionalChain([a, 'access', _64 => _64.apiRef, 'access', _65 => _65.current, 'optionalAccess', _66 => _66.filtering, 'access', _67 => _67.setQuickText, 'call', _68 => _68(R||null)])},[l,R,a.apiRef]);let v=_react.useMemo.call(void 0, ()=>async()=>{l?await l.reload():_optionalChain([a, 'access', _69 => _69.apiRef, 'access', _70 => _70.current, 'optionalAccess', _71 => _71.rows, 'access', _72 => _72.isRemote, 'call', _73 => _73()])?await a.apiRef.current.rows.reload():_optionalChain([a, 'access', _74 => _74.apiRef, 'access', _75 => _75.current, 'optionalAccess', _76 => _76.view, 'access', _77 => _77.refreshCells, 'call', _78 => _78()])},[l,a.apiRef]),M=_react.useMemo.call(void 0, ()=>_machtable.createMachTableCommands.call(void 0, {getApi:()=>a.apiRef.current,reload:v}),[v,a.apiRef]),i=_nullishCoalesce(_optionalChain([l, 'optionalAccess', _79 => _79.selectedRows]), () => (Q)),F=l?l.selectionState.mode==="allMatching"?Math.max(0,l.total-l.selectionState.excludedKeys.length):l.selectionState.selectedKeys.length:i.length;return{table:a,query:l,editing:b,bindings:_nullishCoalesce(_optionalChain([l, 'optionalAccess', _80 => _80.bindings]), () => ({})),search:R,setSearch:w,selectedRows:i,selectedCount:F,busy:_optionalChain([l, 'optionalAccess', _81 => _81.loading])===!0||b.saving,error:_nullishCoalesce(_nullishCoalesce(_optionalChain([l, 'optionalAccess', _82 => _82.error]), () => (b.saveError)), () => (null)),commands:M,reload:v}}exports.useMachTableController = Ae; exports.useMachTableEditing = ee; exports.useMachTableQuery = Oe;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkII7TCYIUcjs = require('./chunk-II7TCYIU.cjs');var _react = require('react');var _machtable = require('@agile-team/mach-table');function ee(t,a={}){let[v,R]=_react.useState.call(void 0, []),[w,Q]=_react.useState.call(void 0, []),[D,l]=_react.useState.call(void 0, !1),[M,y]=_react.useState.call(void 0, null),[i,F]=_react.useState.call(void 0, null),S=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, ()=>{let r=t.apiRef.current;if(!r||r.isDestroyed()){Q([]),R([]);return}Q(r.editing.getDirtyRowIds()),R(r.editing.getChanges())},[t.apiRef]);_react.useEffect.call(void 0, ()=>{let r=t.api;return g(),r&&!r.isDestroyed()?r.on("dirtyStateChanged",g):void 0},[t.api,g]);let P=_react.useCallback.call(void 0, async(r,u)=>{let d=t.apiRef.current;if(!d||d.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(S.current)throw new Error("[MachTable] A save operation is already in progress.");S.current=!0,l(!0),y(null),F(null);try{let o=await d.editing.save(r,u);return F(o),g(),_optionalChain([a, 'access', _2 => _2.onSaveSuccess, 'optionalCall', _3 => _3(o.saved)]),_optionalChain([a, 'access', _4 => _4.onSaveResult, 'optionalCall', _5 => _5(o)]),o}catch(o){throw y(o),_optionalChain([a, 'access', _6 => _6.onSaveError, 'optionalCall', _7 => _7(o)]),o}finally{S.current=!1,l(!1)}},[a,g,t.apiRef]),N=_react.useCallback.call(void 0, async(r,u)=>(await P(r,u)).saved,[P]),L=_react.useCallback.call(void 0, ()=>F(null),[]),V=_react.useCallback.call(void 0, (r,u)=>{let d=_optionalChain([i, 'optionalAccess', _8 => _8.conflicts, 'access', _9 => _9.find, 'call', _10 => _10(T=>T.rowId===r)]),o=t.apiRef.current;return!i||!d||!o||!_machtable.resolveSaveConflict.call(void 0, o,d,u)?!1:(F({...i,failures:i.failures,conflicts:i.conflicts.filter(T=>T.rowId!==r)}),g(),!0)},[i,g,t.apiRef]),U=_react.useCallback.call(void 0, r=>{let u=_nullishCoalesce(_optionalChain([t, 'access', _11 => _11.apiRef, 'access', _12 => _12.current, 'optionalAccess', _13 => _13.editing, 'access', _14 => _14.rollback, 'call', _15 => _15(r)]), () => (!1));return g(),u},[g,t.apiRef]),j=_react.useCallback.call(void 0, r=>{_optionalChain([t, 'access', _16 => _16.apiRef, 'access', _17 => _17.current, 'optionalAccess', _18 => _18.editing, 'access', _19 => _19.markSaved, 'call', _20 => _20(r)]),g()},[g,t.apiRef]),q=_react.useCallback.call(void 0, (r,u,d=!1)=>{let o=t.apiRef.current,T=_optionalChain([o, 'optionalAccess', _21 => _21.rows, 'access', _22 => _22.getById, 'call', _23 => _23(r)]);return!o||!T||T.rowIndex<0?!1:(o.view.scrollToRow(T.rowIndex,"middle"),u&&d?o.editing.startCell({rowIndex:T.rowIndex,colId:u}):!0)},[t.apiRef]);_react.useEffect.call(void 0, ()=>{if(!a.guardBeforeUnload||typeof window>"u")return;let r=u=>{if(w.length===0)return;let d=_nullishCoalesce(a.beforeUnloadMessage, () => ("\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002"));return u.preventDefault(),u.returnValue=d,d};return window.addEventListener("beforeunload",r),()=>window.removeEventListener("beforeunload",r)},[w.length,a.beforeUnloadMessage,a.guardBeforeUnload]);let O=_react.useMemo.call(void 0, ()=>[..._nullishCoalesce(_optionalChain([i, 'optionalAccess', _24 => _24.failures]), () => ([])),..._nullishCoalesce(_optionalChain([i, 'optionalAccess', _25 => _25.conflicts]), () => ([]))],[i]),W=_react.useMemo.call(void 0, ()=>[...new Set(O.map(r=>r.rowId))],[O]);return _react.useMemo.call(void 0, ()=>({changes:v,dirtyRowIds:w,dirty:w.length>0,saving:D,saveError:M,lastSaveResult:i,saveIssues:O,failedRowIds:W,save:N,saveDetailed:P,clearSaveIssues:L,resolveConflict:V,rollback:U,markSaved:j,reveal:q,refresh:g}),[v,L,w,W,i,j,g,V,q,U,N,P,M,O,D])}function re(t,a){return typeof t=="number"&&Number.isFinite(t)&&t>0?Math.floor(t):a}function Ue(t){return(t instanceof DOMException||typeof t=="object"&&t!=null&&"name"in t)&&t.name==="AbortError"}function qe(t){return typeof t=="function"?t():t}function Oe(t){let a=_react.useRef.call(void 0, t);a.current=t;let[v,R]=_react.useState.call(void 0, []),[w,Q]=_react.useState.call(void 0, !1),[D,l]=_react.useState.call(void 0, null),[M,y]=_react.useState.call(void 0, re(t.initialPage,1)),[i,F]=_react.useState.call(void 0, re(t.pageSize,20)),[S,g]=_react.useState.call(void 0, 0),[P,N]=_react.useState.call(void 0, []),[L,V]=_react.useState.call(void 0, {}),[U,j]=_react.useState.call(void 0, null),[q,O]=_react.useState.call(void 0, _nullishCoalesce(t.initialQuickFilterText, () => (null))),[,W]=_react.useReducer.call(void 0, e=>e+1,0),r=_react.useRef.call(void 0, {page:M,pageSize:i,sortModel:P,filterModel:L,advancedFilterModel:U,quickFilterText:q,rows:v});r.current={page:M,pageSize:i,sortModel:P,filterModel:L,advancedFilterModel:U,quickFilterText:q,rows:v};let u=_react.useRef.call(void 0, null),d=_react.useRef.call(void 0, null),o=_react.useRef.call(void 0, null),T=_react.useRef.call(void 0, 0),C=_react.useRef.call(void 0, new Set),x=_react.useRef.call(void 0, new Set),h=_react.useRef.call(void 0, new Map),I=_react.useRef.call(void 0, !1),K=_react.useRef.call(void 0, !1),$=_react.useRef.call(void 0, !1),p=_react.useCallback.call(void 0, e=>{let n=a.current.rowKey,s=typeof n=="function"?n(e):_machtable.getByPath.call(void 0, e,n);if(s==null||String(s).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(n)}" returned an empty value.`);return String(s)},[]),H=_react.useCallback.call(void 0, e=>I.current?!x.current.has(e):C.current.has(e),[]),k=_react.useCallback.call(void 0, ()=>W(),[]),A=_react.useCallback.call(void 0, ()=>{let e=u.current;if(!(!e||e.isDestroyed())){$.current=!0;try{e.selection.setRows(r.current.rows.filter(n=>H(p(n))),!0)}finally{$.current=!1}}},[p,H]),te=_react.useCallback.call(void 0, ()=>{T.current++,_optionalChain([d, 'access', _26 => _26.current, 'optionalAccess', _27 => _27.abort, 'call', _28 => _28()]),d.current=null,o.current&&clearTimeout(o.current),o.current=null,Q(!1)},[]),X=_react.useCallback.call(void 0, (e,n)=>e.signal.aborted||n!==T.current,[]),ne=_react.useCallback.call(void 0, (e,n,s)=>{if(X(n,s))return;if(!e||!Array.isArray(e.rows)||!Number.isFinite(e.total)||e.total<0)throw new TypeError("[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.");let c=[...e.rows];for(let Y of c){let Z=p(Y);H(Z)?h.current.set(Z,Y):h.current.delete(Z)}r.current.rows=c,R(c),g(Math.floor(e.total)),k(),_optionalChain([a, 'access', _29 => _29.current, 'access', _30 => _30.onSuccess, 'optionalCall', _31 => _31(e)]),queueMicrotask(A)},[X,k,p,H,A]),ae=_react.useCallback.call(void 0, (e,n,s)=>{if(X(n,s)||Ue(e))return;let c=_nullishCoalesce(e, () => (new Error("Remote request failed")));l(c),_optionalChain([a, 'access', _32 => _32.current, 'access', _33 => _33.onError, 'optionalCall', _34 => _34(c)])},[X]),oe=_react.useCallback.call(void 0, (e,n)=>{n===T.current&&(Q(!1),d.current===e&&(d.current=null))},[]),m=_react.useCallback.call(void 0, async()=>{o.current&&clearTimeout(o.current),o.current=null,_optionalChain([d, 'access', _35 => _35.current, 'optionalAccess', _36 => _36.abort, 'call', _37 => _37()]);let e=new AbortController;d.current=e;let n=++T.current;Q(!0),l(null),a.current.keepPreviousData===!1&&(r.current.rows=[],R([]));let s=r.current;try{let c=await a.current.request({page:s.page,pageSize:s.pageSize,query:qe(a.current.query),sortModel:s.sortModel.map(Y=>({...Y})),filterModel:{...s.filterModel},advancedFilterModel:_machtable.normalizeAdvancedFilterModel.call(void 0, s.advancedFilterModel),quickFilterText:s.quickFilterText,signal:e.signal});ne(c,e,n)}catch(c){ae(c,e,n)}finally{oe(e,n)}},[ne,oe,ae]),B=_react.useCallback.call(void 0, e=>{e&&(r.current.page=1,y(1)),_optionalChain([d, 'access', _38 => _38.current, 'optionalAccess', _39 => _39.abort, 'call', _40 => _40()]),d.current=null;let n=Math.max(0,_nullishCoalesce(a.current.debounceMs, () => (0)));o.current&&clearTimeout(o.current),n===0?m():o.current=setTimeout(()=>{m()},n)},[m]),z=_react.useCallback.call(void 0, ()=>{let e=I.current||C.current.size>0||x.current.size>0||h.current.size>0;I.current=!1,C.current.clear(),x.current.clear(),h.current.clear(),e&&k(),$.current=!0;try{_optionalChain([u, 'access', _41 => _41.current, 'optionalAccess', _42 => _42.selection, 'access', _43 => _43.clear, 'call', _44 => _44()])}finally{$.current=!1}},[k]),le=_react.useCallback.call(void 0, e=>{if(K.current)return;let n=r.current;e.page===n.page&&e.pageSize===n.pageSize||(n.page=e.page,n.pageSize=e.pageSize,y(e.page),F(e.pageSize),a.current.mode!=="manual"&&m())},[m]),ie=_react.useCallback.call(void 0, e=>{if(K.current)return;let n=e.sortModel.map(s=>({...s}));r.current.sortModel=n,N(n),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},[B]),se=_react.useCallback.call(void 0, e=>{if(K.current)return;let n={...e.filterModel};r.current.filterModel=n;let s=_machtable.normalizeAdvancedFilterModel.call(void 0, e.advancedFilterModel);r.current.advancedFilterModel=s,r.current.quickFilterText=e.api.filtering.getQuickText(),V(n),j(s),O(r.current.quickFilterText),a.current.clearSelectionOnQueryChange!==!1&&z(),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},[z,B]),ce=_react.useCallback.call(void 0, e=>{if($.current)return;let n=new Set(r.current.rows.map(p)),s=new Set(e.selectedRows.map(p));if(I.current)for(let c of n)s.has(c)?x.current.delete(c):(x.current.add(c),h.current.delete(c));else{if((_nullishCoalesce(a.current.selectionScope, () => ("preserve")))==="page")C.current.clear(),h.current.clear();else for(let c of n)C.current.delete(c),h.current.delete(c);for(let c of e.selectedRows)C.current.add(p(c))}for(let c of e.selectedRows)h.current.set(p(c),c);k()},[k,p]),Me=_react.useCallback.call(void 0, async(e={})=>{e.resetPage&&(r.current.page=1,y(1)),await m()},[m]),Se=_react.useCallback.call(void 0, async()=>{r.current.page=1,r.current.sortModel=[],r.current.filterModel={},r.current.advancedFilterModel=null,r.current.quickFilterText=null,y(1),N([]),V({}),j(null),O(null),z(),K.current=!0;try{_optionalChain([u, 'access', _45 => _45.current, 'optionalAccess', _46 => _46.sorting, 'access', _47 => _47.setModel, 'call', _48 => _48(null)]),_optionalChain([u, 'access', _49 => _49.current, 'optionalAccess', _50 => _50.filtering, 'access', _51 => _51.setModel, 'call', _52 => _52(null)]),_optionalChain([u, 'access', _53 => _53.current, 'optionalAccess', _54 => _54.filtering, 'access', _55 => _55.setAdvancedModel, 'call', _56 => _56(null)]),_optionalChain([u, 'access', _57 => _57.current, 'optionalAccess', _58 => _58.filtering, 'access', _59 => _59.setQuickText, 'call', _60 => _60(null)])}finally{K.current=!1}await m()},[z,m]),we=_react.useCallback.call(void 0, ()=>{I.current=!0,C.current.clear(),x.current.clear(),h.current.clear();for(let e of r.current.rows)h.current.set(p(e),e);k(),A()},[k,p,A]),Re=_react.useCallback.call(void 0, e=>{C.current.clear(),x.current.clear(),h.current.clear(),I.current=e.mode==="allMatching";for(let n of(e.mode==="allMatching"?e.excludedKeys:e.selectedKeys).map(String))e.mode==="allMatching"?x.current.add(n):C.current.add(n);for(let n of r.current.rows)H(p(n))&&h.current.set(p(n),n);k(),A()},[k,p,H,A]),ue=_react.useRef.call(void 0, !0),De=t.queryKey===void 0?t.query:t.queryKey;_react.useEffect.call(void 0, ()=>{if(ue.current){ue.current=!1;return}a.current.clearSelectionOnQueryChange!==!1&&z(),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},[De,z,B]),_react.useEffect.call(void 0, ()=>(t.mode!=="manual"&&t.immediate!==!1&&m(),te),[]);let de=_react.useMemo.call(void 0, ()=>{let e=[...new Set((_nullishCoalesce(t.pageSizeOptions, () => ([10,20,50,100]))).map(n=>re(n,0)).filter(Boolean))];return e.includes(i)||e.push(i),e.sort((n,s)=>n-s)},[t.pageSizeOptions,i]),Ce=_react.useMemo.call(void 0, ()=>({rowData:v,loading:w,error:D,rowKey:p,manualSorting:!0,manualFiltering:!0,advancedFilterModel:U,quickFilterText:q,overlayErrorTemplate:D?()=>_nullishCoalesce(_optionalChain([a, 'access', _61 => _61.current, 'access', _62 => _62.errorOverlay, 'optionalCall', _63 => _63({error:D,retry:m})]), () => ("Remote request failed. Please retry.")):void 0,overlayNoRowsTemplate:t.emptyOverlay,pagination:{mode:"server",page:M,pageSize:i,pageSizeOptions:de,total:S,showTotal:!0,showPageSizeSelector:!0},onGridReady:({api:e})=>{u.current=e,queueMicrotask(A)},onPaginationChanged:le,onSortChanged:ie,onFilterChanged:se,onSelectionChanged:ce}),[U,D,m,w,se,le,ce,ie,t.emptyOverlay,M,i,de,q,p,v,A,S]),fe=I.current?[]:[...C.current],xe=[...h.current.entries()].filter(([e])=>!x.current.has(e)).map(([,e])=>e),ke=I.current?{mode:"allMatching",excludedKeys:[...x.current]}:{mode:"explicit",selectedKeys:fe};return{rows:v,loading:w,error:D,page:M,pageSize:i,total:S,sortModel:P,filterModel:L,advancedFilterModel:U,quickFilterText:q,setQuickFilterText(e){r.current.quickFilterText=e,O(e),K.current=!0;try{_optionalChain([u, 'access', _64 => _64.current, 'optionalAccess', _65 => _65.filtering, 'access', _66 => _66.setQuickText, 'call', _67 => _67(e)])}finally{K.current=!1}a.current.clearSelectionOnQueryChange!==!1&&z(),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},selectedKeys:fe,selectedRows:xe,selectionState:ke,bindings:Ce,reload:Me,retry:m,reset:Se,abort:te,clearSelection:z,selectAllMatching:we,applySelectionState:Re}}function Ae(t={}){let a=_chunkII7TCYIUcjs.a.call(void 0, ),v=ee(a,t.editing),[R,w]=_react.useState.call(void 0, _nullishCoalesce(t.initialSearch, () => (""))),[Q,D]=_react.useState.call(void 0, []),l=_nullishCoalesce(t.query, () => (null));_react.useEffect.call(void 0, ()=>{let S=a.api;if(!S||S.isDestroyed()||l)return;let g=()=>D(S.selection.getRows());return g(),S.on("selectionChanged",g)},[l,a.api]),_react.useEffect.call(void 0, ()=>{l?l.setQuickFilterText(R||null):_optionalChain([a, 'access', _68 => _68.apiRef, 'access', _69 => _69.current, 'optionalAccess', _70 => _70.filtering, 'access', _71 => _71.setQuickText, 'call', _72 => _72(R||null)])},[l,R,a.apiRef]);let M=_react.useMemo.call(void 0, ()=>async()=>{l?await l.reload():_optionalChain([a, 'access', _73 => _73.apiRef, 'access', _74 => _74.current, 'optionalAccess', _75 => _75.rows, 'access', _76 => _76.isRemote, 'call', _77 => _77()])?await a.apiRef.current.rows.reload():_optionalChain([a, 'access', _78 => _78.apiRef, 'access', _79 => _79.current, 'optionalAccess', _80 => _80.view, 'access', _81 => _81.refreshCells, 'call', _82 => _82()])},[l,a.apiRef]),y=_react.useMemo.call(void 0, ()=>_machtable.createMachTableCommands.call(void 0, {getApi:()=>a.apiRef.current,reload:M}),[M,a.apiRef]),i=_nullishCoalesce(_optionalChain([l, 'optionalAccess', _83 => _83.selectedRows]), () => (Q)),F=l?l.selectionState.mode==="allMatching"?Math.max(0,l.total-l.selectionState.excludedKeys.length):l.selectionState.selectedKeys.length:i.length;return{table:a,query:l,editing:v,bindings:_nullishCoalesce(_optionalChain([l, 'optionalAccess', _84 => _84.bindings]), () => ({})),search:R,setSearch:w,selectedRows:i,selectedCount:F,busy:_optionalChain([l, 'optionalAccess', _85 => _85.loading])===!0||v.saving,error:_nullishCoalesce(_nullishCoalesce(_optionalChain([l, 'optionalAccess', _86 => _86.error]), () => (v.saveError)), () => (null)),commands:y,reload:M}}exports.useMachTableController = Ae; exports.useMachTableEditing = ee; exports.useMachTableQuery = Oe;
|
package/dist/workflows.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as ge}from"./chunk-FN4LWAOL.js";import{useCallback as A,useEffect as pe,useMemo as _,useRef as ke,useState as J}from"react";import{resolveSaveConflict as Qe}from"@agile-team/mach-table";function ee(t,a={}){let[b,R]=J([]),[w,Q]=J([]),[D,l]=J(!1),[v,M]=J(null),[i,F]=J(null),S=ke(!1),g=A(()=>{let r=t.apiRef.current;if(!r||r.isDestroyed()){Q([]),R([]);return}Q(r.editing.getDirtyRowIds()),R(r.editing.getChanges())},[t.apiRef]);pe(()=>{let r=t.api;return g(),r&&!r.isDestroyed()?r.on("dirtyStateChanged",g):void 0},[t.api,g]);let P=A(async(r,u)=>{let d=t.apiRef.current;if(!d||d.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(S.current)throw new Error("[MachTable] A save operation is already in progress.");S.current=!0,l(!0),M(null),F(null);try{let o=await d.editing.save(r,u);return F(o),g(),a.onSaveSuccess?.(o.saved),a.onSaveResult?.(o),o}catch(o){throw M(o),a.onSaveError?.(o),o}finally{S.current=!1,l(!1)}},[a,g,t.apiRef]),H=A(async(r,u)=>(await P(r,u)).saved,[P]),K=A(()=>F(null),[]),N=A((r,u)=>{let d=i?.conflicts.find(y=>y.rowId===r),o=t.apiRef.current;return!i||!d||!o||!Qe(o,d,u)?!1:(F({...i,failures:i.failures,conflicts:i.conflicts.filter(y=>y.rowId!==r)}),g(),!0)},[i,g,t.apiRef]),U=A(r=>{let u=t.apiRef.current?.editing.rollback(r)??!1;return g(),u},[g,t.apiRef]),V=A(r=>{t.apiRef.current?.editing.markSaved(r),g()},[g,t.apiRef]),q=A((r,u,d=!1)=>{let o=t.apiRef.current,y=o?.rows.getById(r);return!o||!y||y.rowIndex<0?!1:(o.view.scrollToRow(y.rowIndex,"middle"),u&&d?o.editing.startCell({rowIndex:y.rowIndex,colId:u}):!0)},[t.apiRef]);pe(()=>{if(!a.guardBeforeUnload||typeof window>"u")return;let r=u=>{if(w.length===0)return;let d=a.beforeUnloadMessage??"\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002";return u.preventDefault(),u.returnValue=d,d};return window.addEventListener("beforeunload",r),()=>window.removeEventListener("beforeunload",r)},[w.length,a.beforeUnloadMessage,a.guardBeforeUnload]);let z=_(()=>[...i?.failures??[],...i?.conflicts??[]],[i]),W=_(()=>[...new Set(z.map(r=>r.rowId))],[z]);return _(()=>({changes:b,dirtyRowIds:w,dirty:w.length>0,saving:D,saveError:v,lastSaveResult:i,saveIssues:z,failedRowIds:W,save:H,saveDetailed:P,clearSaveIssues:K,resolveConflict:N,rollback:U,markSaved:V,reveal:q,refresh:g}),[b,K,w,W,i,V,g,N,q,U,H,P,v,z,D])}import{useCallback as f,useEffect as ye,useMemo as Te,useReducer as Fe,useRef as m,useState as k}from"react";import{getByPath as Pe,normalizeAdvancedFilterModel as he}from"@agile-team/mach-table";function re(t,a){return typeof t=="number"&&Number.isFinite(t)&&t>0?Math.floor(t):a}function Ue(t){return(t instanceof DOMException||typeof t=="object"&&t!=null&&"name"in t)&&t.name==="AbortError"}function qe(t){return typeof t=="function"?t():t}function Oe(t){let a=m(t);a.current=t;let[b,R]=k([]),[w,Q]=k(!1),[D,l]=k(null),[v,M]=k(re(t.initialPage,1)),[i,F]=k(re(t.pageSize,20)),[S,g]=k(0),[P,H]=k([]),[K,N]=k({}),[U,V]=k(null),[q,z]=k(t.initialQuickFilterText??null),[,W]=Fe(e=>e+1,0),r=m({page:v,pageSize:i,sortModel:P,filterModel:K,advancedFilterModel:U,quickFilterText:q,rows:b});r.current={page:v,pageSize:i,sortModel:P,filterModel:K,advancedFilterModel:U,quickFilterText:q,rows:b};let u=m(null),d=m(null),o=m(null),y=m(0),C=m(new Set),x=m(new Set),T=m(new Map),O=m(!1),j=m(!1),$=m(!1),p=f(e=>{let n=a.current.rowKey,s=typeof n=="function"?n(e):Pe(e,n);if(s==null||String(s).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(n)}" returned an empty value.`);return String(s)},[]),B=f(e=>O.current?!x.current.has(e):C.current.has(e),[]),E=f(()=>W(),[]),I=f(()=>{let e=u.current;if(!(!e||e.isDestroyed())){$.current=!0;try{e.selection.setRows(r.current.rows.filter(n=>B(p(n))),!0)}finally{$.current=!1}}},[p,B]),te=f(()=>{y.current++,d.current?.abort(),d.current=null,o.current&&clearTimeout(o.current),o.current=null,Q(!1)},[]),X=f((e,n)=>e.signal.aborted||n!==y.current,[]),ne=f((e,n,s)=>{if(X(n,s))return;if(!e||!Array.isArray(e.rows)||!Number.isFinite(e.total)||e.total<0)throw new TypeError("[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.");let c=[...e.rows];for(let Y of c){let Z=p(Y);B(Z)?T.current.set(Z,Y):T.current.delete(Z)}r.current.rows=c,R(c),g(Math.floor(e.total)),E(),a.current.onSuccess?.(e),queueMicrotask(I)},[X,E,p,B,I]),ae=f((e,n,s)=>{if(X(n,s)||Ue(e))return;let c=e??new Error("Remote request failed");l(c),a.current.onError?.(c)},[X]),oe=f((e,n)=>{n===y.current&&(Q(!1),d.current===e&&(d.current=null))},[]),h=f(async()=>{o.current&&clearTimeout(o.current),o.current=null,d.current?.abort();let e=new AbortController;d.current=e;let n=++y.current;Q(!0),l(null),a.current.keepPreviousData===!1&&R([]);let s=r.current;try{let c=await a.current.request({page:s.page,pageSize:s.pageSize,query:qe(a.current.query),sortModel:s.sortModel.map(Y=>({...Y})),filterModel:{...s.filterModel},advancedFilterModel:he(s.advancedFilterModel),quickFilterText:s.quickFilterText,signal:e.signal});ne(c,e,n)}catch(c){ae(c,e,n)}finally{oe(e,n)}},[ne,oe,ae]),L=f(e=>{e&&(r.current.page=1,M(1)),d.current?.abort(),d.current=null;let n=Math.max(0,a.current.debounceMs??0);o.current&&clearTimeout(o.current),n===0?h():o.current=setTimeout(()=>{h()},n)},[h]),G=f(()=>{let e=O.current||C.current.size>0||x.current.size>0||T.current.size>0;O.current=!1,C.current.clear(),x.current.clear(),T.current.clear(),e&&E(),$.current=!0;try{u.current?.selection.clear()}finally{$.current=!1}},[E]),le=f(e=>{if(j.current)return;let n=r.current;e.page===n.page&&e.pageSize===n.pageSize||(n.page=e.page,n.pageSize=e.pageSize,M(e.page),F(e.pageSize),a.current.mode!=="manual"&&h())},[h]),ie=f(e=>{if(j.current)return;let n=e.sortModel.map(s=>({...s}));r.current.sortModel=n,H(n),a.current.mode!=="manual"?L(!0):(r.current.page=1,M(1))},[L]),se=f(e=>{if(j.current)return;let n={...e.filterModel};r.current.filterModel=n;let s=he(e.advancedFilterModel);r.current.advancedFilterModel=s,r.current.quickFilterText=e.api.filtering.getQuickText(),N(n),V(s),z(r.current.quickFilterText),a.current.clearSelectionOnQueryChange!==!1&&G(),a.current.mode!=="manual"?L(!0):(r.current.page=1,M(1))},[G,L]),ce=f(e=>{if($.current)return;let n=new Set(r.current.rows.map(p)),s=new Set(e.selectedRows.map(p));if(O.current)for(let c of n)s.has(c)?x.current.delete(c):(x.current.add(c),T.current.delete(c));else{if((a.current.selectionScope??"preserve")==="page")C.current.clear(),T.current.clear();else for(let c of n)C.current.delete(c),T.current.delete(c);for(let c of e.selectedRows)C.current.add(p(c))}for(let c of e.selectedRows)T.current.set(p(c),c);E()},[E,p]),Me=f(async(e={})=>{e.resetPage&&(r.current.page=1,M(1)),await h()},[h]),Se=f(async()=>{r.current.page=1,r.current.sortModel=[],r.current.filterModel={},r.current.advancedFilterModel=null,M(1),H([]),N({}),V(null),G(),j.current=!0;try{u.current?.sorting.setModel(null),u.current?.filtering.setModel(null),u.current?.filtering.setAdvancedModel(null)}finally{j.current=!1}await h()},[G,h]),we=f(()=>{O.current=!0,C.current.clear(),x.current.clear(),T.current.clear();for(let e of r.current.rows)T.current.set(p(e),e);E(),I()},[E,p,I]),Re=f(e=>{C.current.clear(),x.current.clear(),T.current.clear(),O.current=e.mode==="allMatching";for(let n of(e.mode==="allMatching"?e.excludedKeys:e.selectedKeys).map(String))e.mode==="allMatching"?x.current.add(n):C.current.add(n);for(let n of r.current.rows)B(p(n))&&T.current.set(p(n),n);E(),I()},[E,p,B,I]),ue=m(!0),De=t.queryKey===void 0?t.query:t.queryKey;ye(()=>{if(ue.current){ue.current=!1;return}a.current.clearSelectionOnQueryChange!==!1&&G(),a.current.mode!=="manual"?L(!0):(r.current.page=1,M(1))},[De,G,L]),ye(()=>(t.mode!=="manual"&&t.immediate!==!1&&h(),te),[]);let de=Te(()=>{let e=[...new Set((t.pageSizeOptions??[10,20,50,100]).map(n=>re(n,0)).filter(Boolean))];return e.includes(i)||e.push(i),e.sort((n,s)=>n-s)},[t.pageSizeOptions,i]),Ce=Te(()=>({rowData:b,loading:w,error:D,rowKey:p,manualSorting:!0,manualFiltering:!0,advancedFilterModel:U,quickFilterText:q,overlayErrorTemplate:D?()=>a.current.errorOverlay?.({error:D,retry:h})??"Remote request failed. Please retry.":void 0,overlayNoRowsTemplate:t.emptyOverlay,pagination:{mode:"server",page:v,pageSize:i,pageSizeOptions:de,total:S,showTotal:!0,showPageSizeSelector:!0},onGridReady:({api:e})=>{u.current=e,queueMicrotask(I)},onPaginationChanged:le,onSortChanged:ie,onFilterChanged:se,onSelectionChanged:ce}),[U,D,h,w,se,le,ce,ie,t.emptyOverlay,v,i,de,q,p,b,I,S]),fe=O.current?[]:[...C.current],xe=[...T.current.entries()].filter(([e])=>!x.current.has(e)).map(([,e])=>e),Ee=O.current?{mode:"allMatching",excludedKeys:[...x.current]}:{mode:"explicit",selectedKeys:fe};return{rows:b,loading:w,error:D,page:v,pageSize:i,total:S,sortModel:P,filterModel:K,advancedFilterModel:U,quickFilterText:q,setQuickFilterText(e){r.current.quickFilterText=e,z(e),u.current?.filtering.setQuickText(e)},selectedKeys:fe,selectedRows:xe,selectionState:Ee,bindings:Ce,reload:Me,retry:h,reset:Se,abort:te,clearSelection:G,selectAllMatching:we,applySelectionState:Re}}import{useEffect as me,useMemo as be,useState as ve}from"react";import{createMachTableCommands as Ie}from"@agile-team/mach-table";function Ae(t={}){let a=ge(),b=ee(a,t.editing),[R,w]=ve(t.initialSearch??""),[Q,D]=ve([]),l=t.query??null;me(()=>{let S=a.api;if(!S||S.isDestroyed()||l)return;let g=()=>D(S.selection.getRows());return g(),S.on("selectionChanged",g)},[l,a.api]),me(()=>{l?l.setQuickFilterText(R||null):a.apiRef.current?.filtering.setQuickText(R||null)},[l,R,a.apiRef]);let v=be(()=>async()=>{l?await l.reload():a.apiRef.current?.rows.isRemote()?await a.apiRef.current.rows.reload():a.apiRef.current?.view.refreshCells()},[l,a.apiRef]),M=be(()=>Ie({getApi:()=>a.apiRef.current,reload:v}),[v,a.apiRef]),i=l?.selectedRows??Q,F=l?l.selectionState.mode==="allMatching"?Math.max(0,l.total-l.selectionState.excludedKeys.length):l.selectionState.selectedKeys.length:i.length;return{table:a,query:l,editing:b,bindings:l?.bindings??{},search:R,setSearch:w,selectedRows:i,selectedCount:F,busy:l?.loading===!0||b.saving,error:l?.error??b.saveError??null,commands:M,reload:v}}export{Ae as useMachTableController,ee as useMachTableEditing,Oe as useMachTableQuery};
|
|
1
|
+
import{a as ge}from"./chunk-FN4LWAOL.js";import{useCallback as G,useEffect as pe,useMemo as _,useRef as Ee,useState as J}from"react";import{resolveSaveConflict as Qe}from"@agile-team/mach-table";function ee(t,a={}){let[v,R]=J([]),[w,Q]=J([]),[D,l]=J(!1),[M,y]=J(null),[i,F]=J(null),S=Ee(!1),g=G(()=>{let r=t.apiRef.current;if(!r||r.isDestroyed()){Q([]),R([]);return}Q(r.editing.getDirtyRowIds()),R(r.editing.getChanges())},[t.apiRef]);pe(()=>{let r=t.api;return g(),r&&!r.isDestroyed()?r.on("dirtyStateChanged",g):void 0},[t.api,g]);let P=G(async(r,u)=>{let d=t.apiRef.current;if(!d||d.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(S.current)throw new Error("[MachTable] A save operation is already in progress.");S.current=!0,l(!0),y(null),F(null);try{let o=await d.editing.save(r,u);return F(o),g(),a.onSaveSuccess?.(o.saved),a.onSaveResult?.(o),o}catch(o){throw y(o),a.onSaveError?.(o),o}finally{S.current=!1,l(!1)}},[a,g,t.apiRef]),N=G(async(r,u)=>(await P(r,u)).saved,[P]),L=G(()=>F(null),[]),V=G((r,u)=>{let d=i?.conflicts.find(T=>T.rowId===r),o=t.apiRef.current;return!i||!d||!o||!Qe(o,d,u)?!1:(F({...i,failures:i.failures,conflicts:i.conflicts.filter(T=>T.rowId!==r)}),g(),!0)},[i,g,t.apiRef]),U=G(r=>{let u=t.apiRef.current?.editing.rollback(r)??!1;return g(),u},[g,t.apiRef]),j=G(r=>{t.apiRef.current?.editing.markSaved(r),g()},[g,t.apiRef]),q=G((r,u,d=!1)=>{let o=t.apiRef.current,T=o?.rows.getById(r);return!o||!T||T.rowIndex<0?!1:(o.view.scrollToRow(T.rowIndex,"middle"),u&&d?o.editing.startCell({rowIndex:T.rowIndex,colId:u}):!0)},[t.apiRef]);pe(()=>{if(!a.guardBeforeUnload||typeof window>"u")return;let r=u=>{if(w.length===0)return;let d=a.beforeUnloadMessage??"\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002";return u.preventDefault(),u.returnValue=d,d};return window.addEventListener("beforeunload",r),()=>window.removeEventListener("beforeunload",r)},[w.length,a.beforeUnloadMessage,a.guardBeforeUnload]);let O=_(()=>[...i?.failures??[],...i?.conflicts??[]],[i]),W=_(()=>[...new Set(O.map(r=>r.rowId))],[O]);return _(()=>({changes:v,dirtyRowIds:w,dirty:w.length>0,saving:D,saveError:M,lastSaveResult:i,saveIssues:O,failedRowIds:W,save:N,saveDetailed:P,clearSaveIssues:L,resolveConflict:V,rollback:U,markSaved:j,reveal:q,refresh:g}),[v,L,w,W,i,j,g,V,q,U,N,P,M,O,D])}import{useCallback as f,useEffect as ye,useMemo as Te,useReducer as Fe,useRef as b,useState as E}from"react";import{getByPath as Pe,normalizeAdvancedFilterModel as he}from"@agile-team/mach-table";function re(t,a){return typeof t=="number"&&Number.isFinite(t)&&t>0?Math.floor(t):a}function Ue(t){return(t instanceof DOMException||typeof t=="object"&&t!=null&&"name"in t)&&t.name==="AbortError"}function qe(t){return typeof t=="function"?t():t}function Oe(t){let a=b(t);a.current=t;let[v,R]=E([]),[w,Q]=E(!1),[D,l]=E(null),[M,y]=E(re(t.initialPage,1)),[i,F]=E(re(t.pageSize,20)),[S,g]=E(0),[P,N]=E([]),[L,V]=E({}),[U,j]=E(null),[q,O]=E(t.initialQuickFilterText??null),[,W]=Fe(e=>e+1,0),r=b({page:M,pageSize:i,sortModel:P,filterModel:L,advancedFilterModel:U,quickFilterText:q,rows:v});r.current={page:M,pageSize:i,sortModel:P,filterModel:L,advancedFilterModel:U,quickFilterText:q,rows:v};let u=b(null),d=b(null),o=b(null),T=b(0),C=b(new Set),x=b(new Set),h=b(new Map),I=b(!1),K=b(!1),$=b(!1),p=f(e=>{let n=a.current.rowKey,s=typeof n=="function"?n(e):Pe(e,n);if(s==null||String(s).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(n)}" returned an empty value.`);return String(s)},[]),H=f(e=>I.current?!x.current.has(e):C.current.has(e),[]),k=f(()=>W(),[]),A=f(()=>{let e=u.current;if(!(!e||e.isDestroyed())){$.current=!0;try{e.selection.setRows(r.current.rows.filter(n=>H(p(n))),!0)}finally{$.current=!1}}},[p,H]),te=f(()=>{T.current++,d.current?.abort(),d.current=null,o.current&&clearTimeout(o.current),o.current=null,Q(!1)},[]),X=f((e,n)=>e.signal.aborted||n!==T.current,[]),ne=f((e,n,s)=>{if(X(n,s))return;if(!e||!Array.isArray(e.rows)||!Number.isFinite(e.total)||e.total<0)throw new TypeError("[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.");let c=[...e.rows];for(let Y of c){let Z=p(Y);H(Z)?h.current.set(Z,Y):h.current.delete(Z)}r.current.rows=c,R(c),g(Math.floor(e.total)),k(),a.current.onSuccess?.(e),queueMicrotask(A)},[X,k,p,H,A]),ae=f((e,n,s)=>{if(X(n,s)||Ue(e))return;let c=e??new Error("Remote request failed");l(c),a.current.onError?.(c)},[X]),oe=f((e,n)=>{n===T.current&&(Q(!1),d.current===e&&(d.current=null))},[]),m=f(async()=>{o.current&&clearTimeout(o.current),o.current=null,d.current?.abort();let e=new AbortController;d.current=e;let n=++T.current;Q(!0),l(null),a.current.keepPreviousData===!1&&(r.current.rows=[],R([]));let s=r.current;try{let c=await a.current.request({page:s.page,pageSize:s.pageSize,query:qe(a.current.query),sortModel:s.sortModel.map(Y=>({...Y})),filterModel:{...s.filterModel},advancedFilterModel:he(s.advancedFilterModel),quickFilterText:s.quickFilterText,signal:e.signal});ne(c,e,n)}catch(c){ae(c,e,n)}finally{oe(e,n)}},[ne,oe,ae]),B=f(e=>{e&&(r.current.page=1,y(1)),d.current?.abort(),d.current=null;let n=Math.max(0,a.current.debounceMs??0);o.current&&clearTimeout(o.current),n===0?m():o.current=setTimeout(()=>{m()},n)},[m]),z=f(()=>{let e=I.current||C.current.size>0||x.current.size>0||h.current.size>0;I.current=!1,C.current.clear(),x.current.clear(),h.current.clear(),e&&k(),$.current=!0;try{u.current?.selection.clear()}finally{$.current=!1}},[k]),le=f(e=>{if(K.current)return;let n=r.current;e.page===n.page&&e.pageSize===n.pageSize||(n.page=e.page,n.pageSize=e.pageSize,y(e.page),F(e.pageSize),a.current.mode!=="manual"&&m())},[m]),ie=f(e=>{if(K.current)return;let n=e.sortModel.map(s=>({...s}));r.current.sortModel=n,N(n),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},[B]),se=f(e=>{if(K.current)return;let n={...e.filterModel};r.current.filterModel=n;let s=he(e.advancedFilterModel);r.current.advancedFilterModel=s,r.current.quickFilterText=e.api.filtering.getQuickText(),V(n),j(s),O(r.current.quickFilterText),a.current.clearSelectionOnQueryChange!==!1&&z(),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},[z,B]),ce=f(e=>{if($.current)return;let n=new Set(r.current.rows.map(p)),s=new Set(e.selectedRows.map(p));if(I.current)for(let c of n)s.has(c)?x.current.delete(c):(x.current.add(c),h.current.delete(c));else{if((a.current.selectionScope??"preserve")==="page")C.current.clear(),h.current.clear();else for(let c of n)C.current.delete(c),h.current.delete(c);for(let c of e.selectedRows)C.current.add(p(c))}for(let c of e.selectedRows)h.current.set(p(c),c);k()},[k,p]),Me=f(async(e={})=>{e.resetPage&&(r.current.page=1,y(1)),await m()},[m]),Se=f(async()=>{r.current.page=1,r.current.sortModel=[],r.current.filterModel={},r.current.advancedFilterModel=null,r.current.quickFilterText=null,y(1),N([]),V({}),j(null),O(null),z(),K.current=!0;try{u.current?.sorting.setModel(null),u.current?.filtering.setModel(null),u.current?.filtering.setAdvancedModel(null),u.current?.filtering.setQuickText(null)}finally{K.current=!1}await m()},[z,m]),we=f(()=>{I.current=!0,C.current.clear(),x.current.clear(),h.current.clear();for(let e of r.current.rows)h.current.set(p(e),e);k(),A()},[k,p,A]),Re=f(e=>{C.current.clear(),x.current.clear(),h.current.clear(),I.current=e.mode==="allMatching";for(let n of(e.mode==="allMatching"?e.excludedKeys:e.selectedKeys).map(String))e.mode==="allMatching"?x.current.add(n):C.current.add(n);for(let n of r.current.rows)H(p(n))&&h.current.set(p(n),n);k(),A()},[k,p,H,A]),ue=b(!0),De=t.queryKey===void 0?t.query:t.queryKey;ye(()=>{if(ue.current){ue.current=!1;return}a.current.clearSelectionOnQueryChange!==!1&&z(),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},[De,z,B]),ye(()=>(t.mode!=="manual"&&t.immediate!==!1&&m(),te),[]);let de=Te(()=>{let e=[...new Set((t.pageSizeOptions??[10,20,50,100]).map(n=>re(n,0)).filter(Boolean))];return e.includes(i)||e.push(i),e.sort((n,s)=>n-s)},[t.pageSizeOptions,i]),Ce=Te(()=>({rowData:v,loading:w,error:D,rowKey:p,manualSorting:!0,manualFiltering:!0,advancedFilterModel:U,quickFilterText:q,overlayErrorTemplate:D?()=>a.current.errorOverlay?.({error:D,retry:m})??"Remote request failed. Please retry.":void 0,overlayNoRowsTemplate:t.emptyOverlay,pagination:{mode:"server",page:M,pageSize:i,pageSizeOptions:de,total:S,showTotal:!0,showPageSizeSelector:!0},onGridReady:({api:e})=>{u.current=e,queueMicrotask(A)},onPaginationChanged:le,onSortChanged:ie,onFilterChanged:se,onSelectionChanged:ce}),[U,D,m,w,se,le,ce,ie,t.emptyOverlay,M,i,de,q,p,v,A,S]),fe=I.current?[]:[...C.current],xe=[...h.current.entries()].filter(([e])=>!x.current.has(e)).map(([,e])=>e),ke=I.current?{mode:"allMatching",excludedKeys:[...x.current]}:{mode:"explicit",selectedKeys:fe};return{rows:v,loading:w,error:D,page:M,pageSize:i,total:S,sortModel:P,filterModel:L,advancedFilterModel:U,quickFilterText:q,setQuickFilterText(e){r.current.quickFilterText=e,O(e),K.current=!0;try{u.current?.filtering.setQuickText(e)}finally{K.current=!1}a.current.clearSelectionOnQueryChange!==!1&&z(),a.current.mode!=="manual"?B(!0):(r.current.page=1,y(1))},selectedKeys:fe,selectedRows:xe,selectionState:ke,bindings:Ce,reload:Me,retry:m,reset:Se,abort:te,clearSelection:z,selectAllMatching:we,applySelectionState:Re}}import{useEffect as me,useMemo as be,useState as ve}from"react";import{createMachTableCommands as Ie}from"@agile-team/mach-table";function Ae(t={}){let a=ge(),v=ee(a,t.editing),[R,w]=ve(t.initialSearch??""),[Q,D]=ve([]),l=t.query??null;me(()=>{let S=a.api;if(!S||S.isDestroyed()||l)return;let g=()=>D(S.selection.getRows());return g(),S.on("selectionChanged",g)},[l,a.api]),me(()=>{l?l.setQuickFilterText(R||null):a.apiRef.current?.filtering.setQuickText(R||null)},[l,R,a.apiRef]);let M=be(()=>async()=>{l?await l.reload():a.apiRef.current?.rows.isRemote()?await a.apiRef.current.rows.reload():a.apiRef.current?.view.refreshCells()},[l,a.apiRef]),y=be(()=>Ie({getApi:()=>a.apiRef.current,reload:M}),[M,a.apiRef]),i=l?.selectedRows??Q,F=l?l.selectionState.mode==="allMatching"?Math.max(0,l.total-l.selectionState.excludedKeys.length):l.selectionState.selectedKeys.length:i.length;return{table:a,query:l,editing:v,bindings:l?.bindings??{},search:R,setSearch:w,selectedRows:i,selectedCount:F,busy:l?.loading===!0||v.saving,error:l?.error??v.saveError??null,commands:y,reload:M}}export{Ae as useMachTableController,ee as useMachTableEditing,Oe as useMachTableQuery};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agile-team/mach-table-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "Official React 18+ adapter for the MachTable enterprise data grid",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"**/*.css"
|
|
98
98
|
],
|
|
99
99
|
"dependencies": {
|
|
100
|
-
"@agile-team/mach-table": "0.
|
|
100
|
+
"@agile-team/mach-table": "0.25.0"
|
|
101
101
|
},
|
|
102
102
|
"peerDependencies": {
|
|
103
103
|
"react": ">=18.0.0",
|
|
@@ -113,5 +113,5 @@
|
|
|
113
113
|
"test": "vitest run",
|
|
114
114
|
"test:coverage": "vitest run --coverage"
|
|
115
115
|
},
|
|
116
|
-
"readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table-react\n\nMachTable 0.
|
|
116
|
+
"readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table-react\n\nMachTable 0.25 的官方 React 18+ 适配包。一个依赖即可获得 Core、泛型 `<MachTable>`、应用/路由配置、按需工作流、StrictMode 安全清理和最新闭包事件处理。\n\n```bash\npnpm add @agile-team/mach-table-react\n```\n\n应用入口只引入一次样式:\n\n```ts\nimport \"@agile-team/mach-table-react/styles.css\";\n```\n\n## 基础接入\n\n```tsx\nimport { useMemo } from \"react\";\nimport { MachTable, useMachTable, type ColDef } from \"@agile-team/mach-table-react\";\n\ninterface Row { id: string; name: string }\n\nexport function Customers({ rows }: { rows: Row[] }) {\n const table = useMachTable<Row>();\n const columns = useMemo<ColDef<Row>[]>(\n () => [{ field: \"name\", flex: 1, editable: true }],\n []\n );\n\n return (\n <div style={{ height: 520 }}>\n <MachTable<Row>\n apiRef={table.apiRef}\n rowData={rows}\n columnDefs={columns}\n rowKey=\"id\"\n enableColumnResize\n persistence={{ key: \"customers:list\", sections: [\"columns\"] }}\n />\n </div>\n );\n}\n```\n\n对象型列和配置建议用 `useMemo` 保持引用稳定。`useMachTable()` 同时提供 `apiRef`、响应式 `api` 与 `ready`。\n\n## 应用配置\n\n```ts\n// src/config/mach-table.config.ts\nimport { defineMachTableConfig, defineMachTablePreset } from \"@agile-team/mach-table-react\";\n\nexport default defineMachTableConfig({\n defaults: {\n size: \"compact\",\n columnLayout: \"fit\",\n enableColumnResize: true,\n defaultColDef: { sortable: true, filter: true, resizable: true }\n },\n defaultPreset: \"list\",\n presets: {\n list: defineMachTablePreset({ stripedRows: true }),\n crud: defineMachTablePreset({ rowSelection: \"multiple\", editType: \"fullRow\" })\n }\n});\n```\n\n```tsx\n<MachTableProvider config={machTableConfig}>\n <App />\n</MachTableProvider>\n```\n\nProvider 可按路由/布局嵌套,最近一层覆盖外层,表格 props 优先级最高。\n\n## 按需加载\n\nReact 不模拟全局组件注册。路由本身懒加载时普通 import 已自然拆包;需要独立边界时:\n\n```tsx\nconst MachTable = lazy(() => import(\"@agile-team/mach-table-react\"));\n```\n\n可选能力使用子入口:\n\n```tsx\nimport { useMachTableQuery, useMachTableEditing } from \"@agile-team/mach-table-react/workflows\";\nimport { MachTableToolbar } from \"@agile-team/mach-table-react/ui\";\nimport { reactCellRenderer } from \"@agile-team/mach-table-react/adapters\";\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table-react/worker\";\n```\n\n- `/workflows`:请求取消、防过期覆盖、服务端分页、跨页选择、脏数据和冲突保存;`reset()` 清空全部表格过滤且只请求一次。\n- `/ui`:可选标准工具栏。\n- `/adapters`:自定义 React cell/detail renderer 桥接。\n- `/worker`:大型本地过滤/排序的独立 Worker 能力。\n\n```tsx\nconst query = useMachTableQuery({\n query: filters,\n queryKey: filters,\n rowKey: \"id\",\n request: orderApi.page,\n mode: \"manual\"\n});\n\n<MachTable<Row> apiRef={table.apiRef} columnDefs={columns} {...query.bindings} />;\n```\n\n该包自动依赖 `@agile-team/mach-table` 并重导出 Core 类型;宿主只需提供 `react` 和 `react-dom >= 18`。\n\n文档:[React 指南](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/react.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [SSR](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/ssr.md)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
|
|
117
117
|
}
|