dataTable/dist/datatable.min.js

2 lines
12 KiB
JavaScript
Raw Normal View History

import{Component as t,NewState as e,RefreshState as n,Util as o}from"@web/state";import{VirtualScroll as r,State as l}from"@web/base";t.register("DataTable",t=>{t.state||(t.state=e({}));const o=t.state;Object.assign(o,{list:[],fields:[],_renderedList:[],prevHeight:0,postHeight:0,_listStartIndex:0,selectedRowCount:0});const i=(()=>{let t=!!window.__DT_PERF_MODE__;const e={refreshTime:0,refreshCount:0,scrollCount:0,totalNodes:0};return t&&!window.__statePerformanceTelemetry&&(window.__statePerformanceTelemetry={scanCount:0,reuseCount:0,moveCount:0}),{get stats(){return e},enable:()=>{t=!0},disable:()=>{t=!1},onScroll:()=>{t&&e.scrollCount++},startFrame:()=>{var e,n,o;return t?{start:performance.now(),scan:(null==(e=window.__statePerformanceTelemetry)?void 0:e.scanCount)||0,move:(null==(n=window.__statePerformanceTelemetry)?void 0:n.moveCount)||0,reuse:(null==(o=window.__statePerformanceTelemetry)?void 0:o.reuseCount)||0}:null},endFrame:(n,o)=>{if(!t||!n)return;e.refreshCount++,e.totalNodes+=o;const r=performance.now()-n.start;e.refreshTime+=r;const l=window.__statePerformanceTelemetry;if(l){const t=l.scanCount-n.scan,e=l.moveCount-n.move,i=l.reuseCount-n.reuse;(t>0||r>2)&&console.log(`[DataTable Frame] Time: ${r.toFixed(2)}ms, Scans: ${t}, Moves: ${e}, Reuses: ${i}, Rows: ${o}`)}}}})();o.perf=i.stats;const s=((t,e)=>{let n=null,o=null,r=[];const l=(t,e)=>!!(n&&t>=n.minRow&&t<=n.maxRow&&e>=n.minCol&&e<=n.maxCol)||r.some(n=>t>=n.minRow&&t<=n.maxRow&&e>=n.minCol&&e<=n.maxCol);let i=!1;const s=()=>{var o;let s=1/0,a=-1/0;n&&(s=Math.min(s,n.minRow),a=Math.max(a,n.maxRow)),r.forEach(t=>{s=Math.min(s,t.minRow),a=Math.max(a,t.maxRow)});const d=s!==1/0;if(!d&&!i)return;i=d;const c=t.querySelector(".dt-body");if(!c)return;const m=c.children;for(let t=0;t<m.length;t++){const n=m[t];if(!n.classList.contains("dt-body-row"))continue;const r=((null==(o=n._ref)?void 0:o.rIdx)??-1)+e._listStartIndex,i=n.children;if(!d||r<s||r>a)for(let t=0;t<i.length;t++)i[t].classList.contains("dt-cell-selected")&&i[t].classList.remove("dt-cell-selected");else for(let t=0;t<i.length;t++){const e=l(r,t),n=i[t].classList.contains("dt-cell-selected");e&&!n?i[t].classList.add("dt-cell-selected"):!e&&n&&i[t].classList.remove("dt-cell-selected")}}},a=()=>{let t=0;n&&(t+=n.maxRow-n.minRow+1),r.forEach(e=>t+=e.maxRow-e.minRow+1),e.selectedRowCount=t},d=(t=!1)=>{t||(n=null,o=null,r=[],s(),a())},c=()=>{if(!n)return null;let t=n.minRow,e=n.maxRow,o=n.minCol,l=n.maxCol;return r.forEach(n=>{t=Math.min(t,n.minRow),e=Math.max(e,n.maxRow),o=Math.min(o,n.minCol),l=Math.max(l,n.maxCol)}),{minRow:t,maxRow:e,minCol:o,maxCol:l}};return{applySelectionUI:s,clearAllActive:d,startSelect:(i,c,m)=>{const h=l(i,c),u=n&&(n.minRow!==n.maxRow||n.minCol!==n.maxCol)||r.length>0;m.shiftKey&&o?n={minRow:Math.min(o.row,i),maxRow:Math.max(o.row,i),minCol:Math.min(o.col,c),maxCol:Math.max(o.col,c)}:(!h||m.ctrlKey||m.metaKey?(m.ctrlKey||m.metaKey?n&&!h&&r.push(n):d(),o={row:i,col:c},n={minRow:i,maxRow:i,minCol:c,maxCol:c}):u||(t._potentialCancel={row:i,col:c}),e.isSelecting=!0),s(),a(),t.focus()},updateSelect:(r,l)=>{e.isSelecting&&o&&(n={minRow:Math.min(o.row,r),maxRow:Math.max(o.row,r),minCol:Math.min(o.col,l),maxCol:Math.max(o.col,l)},t._potentialCancel=null,s(),a())},endSelect:()=>{if(t._potentialCancel){const{row:e,col:n}=t._potentialCancel;l(e,n)&&d(),t._potentialCancel=null}e.isSelecting=!1},deleteSelected:()=>{const t=c();if(!t)return;const n=t.minRow,o=t.maxRow,r=e.list.filter((t,e)=>!(e>=n&&e<=o));e.list=r,d()},getSelectionBounds:c,copy:async()=>{const t=c();if(!t)return;const n=e.list.slice(t.minRow,t.maxRow+1).map(n=>e.fields.slice(t.minCol,t.maxCol+1).map(t=>{let e=String(n[t.id]??"");return(e.includes("\t")||e.includes("\n")||e.includes('"'))&&(e='"'+e.replace(/"/g,'""')+'"'),e}).join("\t")).join("\n");await navigator.clipboard.writeText(n)},paste:async()=>{try{const n=await navigator.clipboard.readText();if(!n)return;const o=c();if(!o)return;const r=n.split(/\r?\n/).filter(t=>t.length>0).map(t=>{const e=[];let n="",o=!1;for(let r=0;r<t.length;r++){const l=t[r];'"'===l?o&&'"'===