@peak-ai/canvas 1.5.6 → 1.5.7
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/package.json +1 -1
- package/plugins/helpers/data-table.d.ts +4 -1
- package/plugins/helpers/data-table.js +4 -4
- package/plugins/helpers/data-table.js.map +1 -1
- package/plugins/helpers/render-components.js +4 -4
- package/plugins/helpers/render-components.js.map +1 -1
- package/shadcn/components/ui/button.js +2 -2
- package/shadcn/components/ui/button.js.map +1 -1
package/package.json
CHANGED
|
@@ -33,6 +33,9 @@ export type DataTableProps = {
|
|
|
33
33
|
decimalPrecision?: number;
|
|
34
34
|
columnWithChipClass?: Record<string, 'useMap' | 'useRandom'>;
|
|
35
35
|
chipStylesMapping?: Record<string, Record<string, string>>;
|
|
36
|
+
isBulkSelectionEnabled?: boolean;
|
|
37
|
+
selectedIndices?: number[];
|
|
38
|
+
setSelectedIndices?: (indices: number[]) => void;
|
|
36
39
|
};
|
|
37
|
-
export declare function DataTable({ data, headerMapper, className, actions, isEditable, pagination, isLoading, onRowAction, onPageChange, onSort, sortConfig, otherProps, height, decimalPrecision, columnWithChipClass, chipStylesMapping, }: DataTableProps): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export declare function DataTable({ data, headerMapper, className, actions, isEditable, pagination, isLoading, onRowAction, onPageChange, onSort, sortConfig, otherProps, height, decimalPrecision, columnWithChipClass, chipStylesMapping, isBulkSelectionEnabled, selectedIndices, setSelectedIndices, }: DataTableProps): import("react/jsx-runtime").JSX.Element;
|
|
38
41
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _extends from"@babel/runtime/helpers/extends";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import{useEffect,useState,Fragment,useMemo,useRef}from"react";import{Table,TableHeader,TableRow,TableHead,TableBody,TableCell,TableHeadSortable}from"../../shadcn/components/ui/table";import{TableLoader}from"../../shadcn/components/ui/skeleton";import{ScrollArea,ScrollBar}from"../../shadcn/components/ui/scroll-area";import{Pagination,PaginationContent,renderPaginationArrows}from"../../shadcn/components/ui/pagination";import{Button}from"../../shadcn/components/ui/button";import{cn}from"../../shadcn/utils";import{renderNoDataFallback}from"./extra";import{formatValue}from"../../helpers";import{SEMANTIC_CHIP_STYLES_MAP,RANDOM_CHIP_COLOR_PALETTE}from"../../constants";import{MoreVertical,Loader2}from"lucide-react";import{useButtonForm}from"./button-form";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";/**
|
|
1
|
+
import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _extends from"@babel/runtime/helpers/extends";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import{useEffect,useState,Fragment,useMemo,useRef}from"react";import{Table,TableHeader,TableRow,TableHead,TableBody,TableCell,TableHeadSortable}from"../../shadcn/components/ui/table";import{TableLoader}from"../../shadcn/components/ui/skeleton";import{ScrollArea,ScrollBar}from"../../shadcn/components/ui/scroll-area";import{Pagination,PaginationContent,renderPaginationArrows}from"../../shadcn/components/ui/pagination";import{Button}from"../../shadcn/components/ui/button";import{cn}from"../../shadcn/utils";import{renderNoDataFallback}from"./extra";import{formatValue}from"../../helpers";import{SEMANTIC_CHIP_STYLES_MAP,RANDOM_CHIP_COLOR_PALETTE}from"../../constants";import{Checkbox}from"../../shadcn/components/ui/checkbox";import{MoreVertical,Loader2}from"lucide-react";import{useButtonForm}from"./button-form";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";/**
|
|
2
2
|
* Normalizes a value to a consistent string key for color mapping.
|
|
3
3
|
* Handles all value types: null/undefined, numbers, booleans, objects, arrays, dates.
|
|
4
4
|
* Ensures consistent color assignment for all variations of the same logical value.
|
|
@@ -7,12 +7,12 @@ if(value===null||value===undefined){return""}var str=String(value);return str.tr
|
|
|
7
7
|
* Generates a stable hash based on unique value sets per column.
|
|
8
8
|
* This hash is order-independent - it only changes when the set of unique values changes,
|
|
9
9
|
* not when rows are reordered (e.g., during sorting).
|
|
10
|
-
*/function getUniqueValuesHash(data,columnWithChipClass){if(!Array.isArray(data)||data.length===0){return""}var availableKeys=Object.keys(data[0]||{});var hashParts={};Object.keys(columnWithChipClass).forEach(function(columnKey){if(!availableKeys.includes(columnKey)){return}var chipMode=getChipMode(columnWithChipClass,columnKey);if(chipMode==="useRandom"){var uniqueNormalizedValues=new Set;data.forEach(function(row){var value=row[columnKey];var normalizedKey=normalizeValue(value);if(normalizedKey){uniqueNormalizedValues.add(normalizedKey)}});var sortedUniqueValues=Array.from(uniqueNormalizedValues).sort();hashParts[columnKey]=sortedUniqueValues}});return JSON.stringify(hashParts)}export function DataTable(_ref){var _ref2,_pagination$values$pa,_pagination$values,_ref3,_pagination$values$pa2,_pagination$values2;var _ref$data=_ref.data,data=_ref$data===void 0?[]:_ref$data,_ref$headerMapper=_ref.headerMapper,headerMapper=_ref$headerMapper===void 0?{}:_ref$headerMapper,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,_ref$actions=_ref.actions,actions=_ref$actions===void 0?[]:_ref$actions,_ref$isEditable=_ref.isEditable,isEditable=_ref$isEditable===void 0?false:_ref$isEditable,pagination=_ref.pagination,_ref$isLoading=_ref.isLoading,isLoading=_ref$isLoading===void 0?false:_ref$isLoading,onRowAction=_ref.onRowAction,onPageChange=_ref.onPageChange,onSort=_ref.onSort,sortConfig=_ref.sortConfig,_ref$otherProps=_ref.otherProps,otherProps=_ref$otherProps===void 0?{}:_ref$otherProps,height=_ref.height,_ref$decimalPrecision=_ref.decimalPrecision,decimalPrecision=_ref$decimalPrecision===void 0?2:_ref$decimalPrecision,_ref$columnWithChipCl=_ref.columnWithChipClass,columnWithChipClass=_ref$columnWithChipCl===void 0?{}:_ref$columnWithChipCl,_ref$chipStylesMappin=_ref.chipStylesMapping,chipStylesMapping=_ref$chipStylesMappin===void 0?{}:_ref$chipStylesMappin;if(!data||data.length===0){return/*#__PURE__*/_jsx(Fragment,{children:/*#__PURE__*/_jsx("div",{className:"flex flex-col overflow-hidden",children:/*#__PURE__*/_jsx("div",{"data-slot":"table-container",className:"aspect-auto w-full",style:{height:"auto",minHeight:"180px"},children:isLoading?/*#__PURE__*/_jsx(TableLoader,{}):renderNoDataFallback()})})})}var _useState=useState(null),activeSortColumn=_useState[0],setActiveSortColumn=_useState[1];var _useState2=useState({}),sortDirections=_useState2[0],setSortDirections=_useState2[1];var _useState3=useState(null),activeRowIndex=_useState3[0],setActiveRowIndex=_useState3[1];var _useState4=useState(null),activeAction=_useState4[0],setActiveAction=_useState4[1];var _useState5=useState(false),isFormSubmitting=_useState5[0],setIsFormSubmitting=_useState5[1];var _useState6=useState(null),loadingActionKey=_useState6[0],setLoadingActionKey=_useState6[1];var _useState7=useState(Number((_ref2=(_pagination$values$pa=pagination==null||(_pagination$values=pagination.values)==null?void 0:_pagination$values.pageNumber)!=null?_pagination$values$pa:pagination==null?void 0:pagination.initialPage)!=null?_ref2:1)),pageNumber=_useState7[0],setPageNumber=_useState7[1];var _useState8=useState(Number((_ref3=(_pagination$values$pa2=pagination==null||(_pagination$values2=pagination.values)==null?void 0:_pagination$values2.pageSize)!=null?_pagination$values$pa2:pagination==null?void 0:pagination.initialPageSize)!=null?_ref3:10)),pageSize=_useState8[0],setPageSize=_useState8[1];var _useState9=useState(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1),totalPages=_useState9[0],setTotalPages=_useState9[1];var _useState10=useState({}),chipColorMap=_useState10[0],setChipColorMap=_useState10[1];// Track which dropdown is currently open (by row index)
|
|
10
|
+
*/function getUniqueValuesHash(data,columnWithChipClass){if(!Array.isArray(data)||data.length===0){return""}var availableKeys=Object.keys(data[0]||{});var hashParts={};Object.keys(columnWithChipClass).forEach(function(columnKey){if(!availableKeys.includes(columnKey)){return}var chipMode=getChipMode(columnWithChipClass,columnKey);if(chipMode==="useRandom"){var uniqueNormalizedValues=new Set;data.forEach(function(row){var value=row[columnKey];var normalizedKey=normalizeValue(value);if(normalizedKey){uniqueNormalizedValues.add(normalizedKey)}});var sortedUniqueValues=Array.from(uniqueNormalizedValues).sort();hashParts[columnKey]=sortedUniqueValues}});return JSON.stringify(hashParts)}export function DataTable(_ref){var _ref2,_pagination$values$pa,_pagination$values,_ref3,_pagination$values$pa2,_pagination$values2;var _ref$data=_ref.data,data=_ref$data===void 0?[]:_ref$data,_ref$headerMapper=_ref.headerMapper,headerMapper=_ref$headerMapper===void 0?{}:_ref$headerMapper,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,_ref$actions=_ref.actions,actions=_ref$actions===void 0?[]:_ref$actions,_ref$isEditable=_ref.isEditable,isEditable=_ref$isEditable===void 0?false:_ref$isEditable,pagination=_ref.pagination,_ref$isLoading=_ref.isLoading,isLoading=_ref$isLoading===void 0?false:_ref$isLoading,onRowAction=_ref.onRowAction,onPageChange=_ref.onPageChange,onSort=_ref.onSort,sortConfig=_ref.sortConfig,_ref$otherProps=_ref.otherProps,otherProps=_ref$otherProps===void 0?{}:_ref$otherProps,height=_ref.height,_ref$decimalPrecision=_ref.decimalPrecision,decimalPrecision=_ref$decimalPrecision===void 0?2:_ref$decimalPrecision,_ref$columnWithChipCl=_ref.columnWithChipClass,columnWithChipClass=_ref$columnWithChipCl===void 0?{}:_ref$columnWithChipCl,_ref$chipStylesMappin=_ref.chipStylesMapping,chipStylesMapping=_ref$chipStylesMappin===void 0?{}:_ref$chipStylesMappin,_ref$isBulkSelectionE=_ref.isBulkSelectionEnabled,isBulkSelectionEnabled=_ref$isBulkSelectionE===void 0?false:_ref$isBulkSelectionE,_ref$selectedIndices=_ref.selectedIndices,selectedIndices=_ref$selectedIndices===void 0?[]:_ref$selectedIndices,setSelectedIndices=_ref.setSelectedIndices;if(!data||data.length===0){return/*#__PURE__*/_jsx(Fragment,{children:/*#__PURE__*/_jsx("div",{className:"flex flex-col overflow-hidden",children:/*#__PURE__*/_jsx("div",{"data-slot":"table-container",className:"aspect-auto w-full",style:{height:"auto",minHeight:"180px"},children:isLoading?/*#__PURE__*/_jsx(TableLoader,{}):renderNoDataFallback()})})})}var _useState=useState(null),activeSortColumn=_useState[0],setActiveSortColumn=_useState[1];var _useState2=useState({}),sortDirections=_useState2[0],setSortDirections=_useState2[1];var _useState3=useState(null),activeRowIndex=_useState3[0],setActiveRowIndex=_useState3[1];var _useState4=useState(null),activeAction=_useState4[0],setActiveAction=_useState4[1];var _useState5=useState(false),isFormSubmitting=_useState5[0],setIsFormSubmitting=_useState5[1];var _useState6=useState(null),loadingActionKey=_useState6[0],setLoadingActionKey=_useState6[1];var _useState7=useState(Number((_ref2=(_pagination$values$pa=pagination==null||(_pagination$values=pagination.values)==null?void 0:_pagination$values.pageNumber)!=null?_pagination$values$pa:pagination==null?void 0:pagination.initialPage)!=null?_ref2:1)),pageNumber=_useState7[0],setPageNumber=_useState7[1];var _useState8=useState(Number((_ref3=(_pagination$values$pa2=pagination==null||(_pagination$values2=pagination.values)==null?void 0:_pagination$values2.pageSize)!=null?_pagination$values$pa2:pagination==null?void 0:pagination.initialPageSize)!=null?_ref3:10)),pageSize=_useState8[0],setPageSize=_useState8[1];var _useState9=useState(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1),totalPages=_useState9[0],setTotalPages=_useState9[1];var _useState10=useState({}),chipColorMap=_useState10[0],setChipColorMap=_useState10[1];// Track which dropdown is currently open (by row index)
|
|
11
11
|
var _useState11=useState(null),openDropdownIndex=_useState11[0],setOpenDropdownIndex=_useState11[1];var prevDataHashRef=useRef("");useEffect(function(){var _ref4,_pagination$values$pa3,_pagination$values3,_ref5,_pagination$values$pa4,_pagination$values4;setPageNumber(Number((_ref4=(_pagination$values$pa3=pagination==null||(_pagination$values3=pagination.values)==null?void 0:_pagination$values3.pageNumber)!=null?_pagination$values$pa3:pagination==null?void 0:pagination.initialPage)!=null?_ref4:1));setPageSize(Number((_ref5=(_pagination$values$pa4=pagination==null||(_pagination$values4=pagination.values)==null?void 0:_pagination$values4.pageSize)!=null?_pagination$values$pa4:pagination==null?void 0:pagination.initialPageSize)!=null?_ref5:25))},[pagination]);useEffect(function(){setTotalPages(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1)},[pagination==null?void 0:pagination.totalCount,pageSize]);useEffect(function(){if(sortConfig){setSortDirections(sortConfig);var first=Object.keys(sortConfig)[0];if(first){setActiveSortColumn(first)}}},[sortConfig]);useEffect(function(){if(sortConfig!=null&&sortConfig.sortColumn||sortConfig!=null&&sortConfig.sortDirection){sortConfig.sortColumn=null;sortConfig.sortDirection=null}setActiveSortColumn(null);setSortDirections({})},[]);var computedColorMap=useMemo(function(){if(!Array.isArray(data)||data.length===0){return{}}// Get available column keys from first row
|
|
12
12
|
var availableKeys=Object.keys(data[0]||{});var newColorMap={};// Process each column that uses random chips
|
|
13
13
|
Object.keys(columnWithChipClass).forEach(function(columnKey){// Validate column key exists in data
|
|
14
14
|
if(!availableKeys.includes(columnKey)){return}var chipMode=getChipMode(columnWithChipClass,columnKey);if(chipMode==="useRandom"){if(!newColorMap[columnKey]){newColorMap[columnKey]={}}var uniqueNormalizedValues=new Set;data.forEach(function(row){var value=row[columnKey];var normalizedKey=normalizeValue(value);if(normalizedKey){uniqueNormalizedValues.add(normalizedKey)}});var sortedUniqueValues=Array.from(uniqueNormalizedValues).sort();sortedUniqueValues.forEach(function(normalizedKey,index){if(!newColorMap[columnKey][normalizedKey]){var colorIndex=index%RANDOM_CHIP_COLOR_PALETTE.length;newColorMap[columnKey][normalizedKey]=RANDOM_CHIP_COLOR_PALETTE[colorIndex]}})}});return newColorMap},[data,columnWithChipClass]);useEffect(function(){var uniqueValuesHash=getUniqueValuesHash(data,columnWithChipClass);// Only update if the set of unique values actually changed
|
|
15
|
-
if(uniqueValuesHash!==prevDataHashRef.current){prevDataHashRef.current=uniqueValuesHash;setChipColorMap(function(prevMap){var merged=_extends({},prevMap);Object.keys(computedColorMap).forEach(function(columnKey){merged[columnKey]=_extends({},computedColorMap[columnKey],merged[columnKey])});return merged})}},[computedColorMap,data,columnWithChipClass]);useEffect(function(){setChipColorMap(function(prevMap){var cleaned=_extends({},prevMap);var hasChanges=false;Object.keys(cleaned).forEach(function(columnKey){var chipMode=getChipMode(columnWithChipClass,columnKey);if(!chipMode){delete cleaned[columnKey];hasChanges=true}});return hasChanges?cleaned:prevMap})},[columnWithChipClass]);var _useButtonForm=useButtonForm({formMapper:activeAction==null?void 0:activeAction.action.formMapper,formTitle:activeAction==null?void 0:activeAction.action.formTitle,formDescription:activeAction==null?void 0:activeAction.action.formDescription,formButtonText:activeAction==null?void 0:activeAction.action.formButtonText,isSubmitting:isFormSubmitting||isLoading,onClose:function onClose(){setActiveRowIndex(null);setActiveAction(null)},onSubmit:function(){var _onSubmit=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(formData){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(activeRowIndex!==null&&activeAction)){_context.next=10;break}setIsFormSubmitting(true);_context.prev=2;_context.next=5;return onRowAction==null?void 0:onRowAction(activeRowIndex,activeAction.id,formData);case 5:_context.prev=5;setIsFormSubmitting(false);return _context.finish(5);case 8:setActiveAction(null);setActiveRowIndex(null);case 10:case"end":return _context.stop()}},_callee,null,[[2,,5,8]])}));function onSubmit(_x){return _onSubmit.apply(this,arguments)}return onSubmit}()}),FormDialog=_useButtonForm.FormDialog,openForm=_useButtonForm.openForm;useEffect(function(){if(activeAction!=null&&activeAction.action.formMapper&&Object.keys(activeAction.action.formMapper).length>0){openForm()}},[activeAction]);var originalKeys=Object.keys(data[0]||{}).filter(function(key){return key in headerMapper});var headers=originalKeys.map(function(key){return headerMapper[key]});if(actions.length>0){headers.push("")}var rows=data.map(function(datum){return originalKeys.map(function(key){return datum[key]})});function handlePageChange(_x2,_x3){return _handlePageChange.apply(this,arguments)}function _handlePageChange(){_handlePageChange=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(newPage,newSize){return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(newPage===void 0){newPage=pageNumber}if(newSize===void 0){newSize=pageSize}setPageNumber(newPage);setPageSize(newSize);onPageChange==null||onPageChange(newPage,newSize);case 5:case"end":return _context3.stop()}},_callee3)}));return _handlePageChange.apply(this,arguments)}function handleSortClick(column,direction){setActiveSortColumn(direction?column:null);setSortDirections(function(prev){var _extends2;return _extends({},prev,(_extends2={},_extends2[column]=direction,_extends2))});onSort==null||onSort(column,direction)}function ActionsDropdown(_ref6){var rowIndex=_ref6.rowIndex,rowActions=_ref6.rowActions;var isOpen=openDropdownIndex===rowIndex;// Simple check: if it's one of the last 3 rows, position dropdown above
|
|
15
|
+
if(uniqueValuesHash!==prevDataHashRef.current){prevDataHashRef.current=uniqueValuesHash;setChipColorMap(function(prevMap){var merged=_extends({},prevMap);Object.keys(computedColorMap).forEach(function(columnKey){merged[columnKey]=_extends({},computedColorMap[columnKey],merged[columnKey])});return merged})}},[computedColorMap,data,columnWithChipClass]);useEffect(function(){setChipColorMap(function(prevMap){var cleaned=_extends({},prevMap);var hasChanges=false;Object.keys(cleaned).forEach(function(columnKey){var chipMode=getChipMode(columnWithChipClass,columnKey);if(!chipMode){delete cleaned[columnKey];hasChanges=true}});return hasChanges?cleaned:prevMap})},[columnWithChipClass]);var _useButtonForm=useButtonForm({formMapper:activeAction==null?void 0:activeAction.action.formMapper,formTitle:activeAction==null?void 0:activeAction.action.formTitle,formDescription:activeAction==null?void 0:activeAction.action.formDescription,formButtonText:activeAction==null?void 0:activeAction.action.formButtonText,isSubmitting:isFormSubmitting||isLoading,onClose:function onClose(){setActiveRowIndex(null);setActiveAction(null)},onSubmit:function(){var _onSubmit=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(formData){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(activeRowIndex!==null&&activeAction)){_context.next=10;break}setIsFormSubmitting(true);_context.prev=2;_context.next=5;return onRowAction==null?void 0:onRowAction(activeRowIndex,activeAction.id,formData);case 5:_context.prev=5;setIsFormSubmitting(false);return _context.finish(5);case 8:setActiveAction(null);setActiveRowIndex(null);case 10:case"end":return _context.stop()}},_callee,null,[[2,,5,8]])}));function onSubmit(_x){return _onSubmit.apply(this,arguments)}return onSubmit}()}),FormDialog=_useButtonForm.FormDialog,openForm=_useButtonForm.openForm;useEffect(function(){if(activeAction!=null&&activeAction.action.formMapper&&Object.keys(activeAction.action.formMapper).length>0){openForm()}},[activeAction]);var originalKeys=Object.keys(data[0]||{}).filter(function(key){return key in headerMapper});var headers=originalKeys.map(function(key){return headerMapper[key]});if(actions.length>0){headers.push("")}var rows=data.map(function(datum){return originalKeys.map(function(key){return datum[key]})});function handlePageChange(_x2,_x3){return _handlePageChange.apply(this,arguments)}function _handlePageChange(){_handlePageChange=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(newPage,newSize){return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(newPage===void 0){newPage=pageNumber}if(newSize===void 0){newSize=pageSize}setPageNumber(newPage);setPageSize(newSize);onPageChange==null||onPageChange(newPage,newSize);case 5:case"end":return _context3.stop()}},_callee3)}));return _handlePageChange.apply(this,arguments)}function handleSortClick(column,direction){setActiveSortColumn(direction?column:null);setSortDirections(function(prev){var _extends2;return _extends({},prev,(_extends2={},_extends2[column]=direction,_extends2))});onSort==null||onSort(column,direction)}function handleCheckboxClick(rowIndex){if(setSelectedIndices){if(selectedIndices.includes(rowIndex)){setSelectedIndices(selectedIndices.filter(function(idx){return idx!==rowIndex}))}else{setSelectedIndices([].concat(selectedIndices,[rowIndex]))}}}function ActionsDropdown(_ref6){var rowIndex=_ref6.rowIndex,rowActions=_ref6.rowActions;var isOpen=openDropdownIndex===rowIndex;// Simple check: if it's one of the last 3 rows, position dropdown above
|
|
16
16
|
var totalRows=rows.length;var isNearBottom=rowIndex>=totalRows-3;function handleActionClick(_x4){return _handleActionClick.apply(this,arguments)}function _handleActionClick(){_handleActionClick=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(action){var actionKey;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:actionKey=rowIndex+"-"+action.id;if(!(action.action.formMapper&&Object.keys(action.action.formMapper).length>0)){_context2.next=7;break}setActiveRowIndex(rowIndex);setActiveAction(action);setOpenDropdownIndex(null);_context2.next=15;break;case 7:_context2.prev=7;setLoadingActionKey(actionKey);_context2.next=11;return onRowAction==null?void 0:onRowAction(rowIndex,action.id);case 11:_context2.prev=11;setLoadingActionKey(null);setOpenDropdownIndex(null);return _context2.finish(11);case 15:case"end":return _context2.stop()}},_callee2,null,[[7,,11,15]])}));return _handleActionClick.apply(this,arguments)}function toggleDropdown(){setOpenDropdownIndex(isOpen?null:rowIndex)}function handleBackdropClick(){// Only close if no action is currently running
|
|
17
|
-
if(!loadingActionKey){setOpenDropdownIndex(null)}}return/*#__PURE__*/_jsxs(_Fragment,{children:[isOpen&&/*#__PURE__*/_jsx("div",{className:"fixed inset-0 z-40",onClick:handleBackdropClick,style:{background:"transparent",cursor:"default"}}),/*#__PURE__*/_jsxs("div",{className:"relative",children:[/*#__PURE__*/_jsx(Button,{variant:"ghost",size:"icon",onClick:function onClick(e){e.stopPropagation();toggleDropdown()},disabled:isLoading,className:"h-8 w-8 relative z-50","data-dropdown-button":"true",children:/*#__PURE__*/_jsx(MoreVertical,{className:"h-4 w-4"})}),isOpen&&/*#__PURE__*/_jsx("div",{className:cn("absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50",isNearBottom?"bottom-0":"top-0"),children:/*#__PURE__*/_jsx("div",{className:"py-1",role:"menu",children:rowActions.map(function(action){var actionKey=rowIndex+"-"+action.id;var isActionLoading=loadingActionKey===actionKey;return/*#__PURE__*/_jsxs("button",{onClick:function onClick(){return handleActionClick(action)},className:"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent",disabled:isLoading||isActionLoading,role:"menuitem",children:[isActionLoading&&/*#__PURE__*/_jsx(Loader2,{className:"h-3 w-3 animate-spin"}),action.text]},action.id)})})})]})]})}function renderActions(rowIndex,rowActions){if(!actions.length){return null}return/*#__PURE__*/_jsx(TableCell,{className:"sticky right-0 bg-white overflow-visible",children:/*#__PURE__*/_jsx(ActionsDropdown,{rowIndex:rowIndex,rowActions:rowActions})})}var defaultClasses="aspect-auto w-full";var mergedClasses=className?cn(defaultClasses,className):defaultClasses;function getRandomColorForValue(columnKey,value){var _chipColorMap$columnK;var normalizedKey=normalizeValue(value);if((_chipColorMap$columnK=chipColorMap[columnKey])!=null&&_chipColorMap$columnK[normalizedKey]){return chipColorMap[columnKey][normalizedKey]}return"bg-gray-50 text-gray-900 shadow-sm"}function renderChip(columnKey,value){var chipMode=getChipMode(columnWithChipClass,columnKey);var formattedValue=formatValue(value,decimalPrecision);if(!chipMode){return/*#__PURE__*/_jsx(_Fragment,{children:formattedValue})}var chipClassName="";if(chipMode==="useMap"){var _chipStylesMapping$co;var valueStr=String(value);chipClassName=(_chipStylesMapping$co=chipStylesMapping[columnKey])==null?void 0:_chipStylesMapping$co[valueStr];if(!chipClassName){var valueLower=valueStr.toLowerCase().trim();chipClassName=SEMANTIC_CHIP_STYLES_MAP[valueLower]}if(!chipClassName){chipClassName="bg-gray-50 text-gray-900 shadow-sm"}}else if(chipMode==="useRandom"){chipClassName=getRandomColorForValue(columnKey,value)}return/*#__PURE__*/_jsx("span",{className:cn("inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10",chipClassName),children:formattedValue})}function renderTableComponent(){if(isLoading||!data||data.length===0){return/*#__PURE__*/_jsx(TableLoader,{})}return/*#__PURE__*/_jsxs(Table,_extends({},otherProps,{className:"caption-bottom text-sm relative "+mergedClasses,"data-slot":"table",children:[/*#__PURE__*/_jsx(TableHeader,{"data-slot":"table-header",className:"sticky top-0 z-2",children:/*#__PURE__*/
|
|
17
|
+
if(!loadingActionKey){setOpenDropdownIndex(null)}}return/*#__PURE__*/_jsxs(_Fragment,{children:[isOpen&&/*#__PURE__*/_jsx("div",{className:"fixed inset-0 z-40",onClick:handleBackdropClick,style:{background:"transparent",cursor:"default"}}),/*#__PURE__*/_jsxs("div",{className:"relative",children:[/*#__PURE__*/_jsx(Button,{variant:"ghost",size:"icon",onClick:function onClick(e){e.stopPropagation();toggleDropdown()},disabled:isLoading,className:"h-8 w-8 relative z-50","data-dropdown-button":"true",children:/*#__PURE__*/_jsx(MoreVertical,{className:"h-4 w-4"})}),isOpen&&/*#__PURE__*/_jsx("div",{className:cn("absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50",isNearBottom?"bottom-0":"top-0"),children:/*#__PURE__*/_jsx("div",{className:"py-1",role:"menu",children:rowActions.map(function(action){var actionKey=rowIndex+"-"+action.id;var isActionLoading=loadingActionKey===actionKey;return/*#__PURE__*/_jsxs("button",{onClick:function onClick(){return handleActionClick(action)},className:"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent",disabled:isLoading||isActionLoading,role:"menuitem",children:[isActionLoading&&/*#__PURE__*/_jsx(Loader2,{className:"h-3 w-3 animate-spin"}),action.text]},action.id)})})})]})]})}function renderActions(rowIndex,rowActions){if(!actions.length){return null}return/*#__PURE__*/_jsx(TableCell,{className:"sticky right-0 bg-white overflow-visible",children:/*#__PURE__*/_jsx(ActionsDropdown,{rowIndex:rowIndex,rowActions:rowActions})})}var defaultClasses="aspect-auto w-full";var mergedClasses=className?cn(defaultClasses,className):defaultClasses;function getRandomColorForValue(columnKey,value){var _chipColorMap$columnK;var normalizedKey=normalizeValue(value);if((_chipColorMap$columnK=chipColorMap[columnKey])!=null&&_chipColorMap$columnK[normalizedKey]){return chipColorMap[columnKey][normalizedKey]}return"bg-gray-50 text-gray-900 shadow-sm"}function renderChip(columnKey,value){var chipMode=getChipMode(columnWithChipClass,columnKey);var formattedValue=formatValue(value,decimalPrecision);if(!chipMode){return/*#__PURE__*/_jsx(_Fragment,{children:formattedValue})}var chipClassName="";if(chipMode==="useMap"){var _chipStylesMapping$co;var valueStr=String(value);chipClassName=(_chipStylesMapping$co=chipStylesMapping[columnKey])==null?void 0:_chipStylesMapping$co[valueStr];if(!chipClassName){var valueLower=valueStr.toLowerCase().trim();chipClassName=SEMANTIC_CHIP_STYLES_MAP[valueLower]}if(!chipClassName){chipClassName="bg-gray-50 text-gray-900 shadow-sm"}}else if(chipMode==="useRandom"){chipClassName=getRandomColorForValue(columnKey,value)}return/*#__PURE__*/_jsx("span",{className:cn("inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10",chipClassName),children:formattedValue})}function renderTableComponent(){if(isLoading||!data||data.length===0){return/*#__PURE__*/_jsx(TableLoader,{})}return/*#__PURE__*/_jsxs(Table,_extends({},otherProps,{className:"caption-bottom text-sm relative "+mergedClasses,"data-slot":"table",children:[/*#__PURE__*/_jsx(TableHeader,{"data-slot":"table-header",className:"sticky top-0 z-2",children:/*#__PURE__*/_jsxs(TableRow,{children:[isBulkSelectionEnabled&&/*#__PURE__*/_jsx(TableCell,{className:"p-2 w-10",children:/*#__PURE__*/_jsx(Checkbox,{checked:(selectedIndices==null?void 0:selectedIndices.length)===data.length,onCheckedChange:function onCheckedChange(){if(setSelectedIndices){if((selectedIndices==null?void 0:selectedIndices.length)===data.length){setSelectedIndices([])}else{setSelectedIndices(data.map(function(_,idx){return idx}))}}}})}),headers.map(function(head,idx){var isActionColumn=actions.length>0&&idx===headers.length-1;var originalKey=originalKeys[idx];if(isActionColumn){return/*#__PURE__*/_jsx(TableHead,{"data-slot":"table-header-"+idx,contentEditable:isEditable,className:"sticky right-0 bg-slate-100",children:head},idx)}return/*#__PURE__*/_jsx(TableHeadSortable,{"data-slot":"table-header-"+idx,sortDirection:sortDirections[originalKey]||"asc",isActive:activeSortColumn===originalKey,onSort:function onSort(direction){return handleSortClick(originalKey,direction)},sortable:!isLoading,isEditable:isEditable,children:head},idx)})]})}),/*#__PURE__*/_jsx(TableBody,{"data-slot":"table-body",children:rows.map(function(row,rIdx){return/*#__PURE__*/_jsxs(TableRow,{"data-slot":"row-"+rIdx,className:"hover:bg-muted/50 border-b transition-colors",children:[isBulkSelectionEnabled&&/*#__PURE__*/_jsx(TableCell,{className:"p-2 align-middle",children:/*#__PURE__*/_jsx(Checkbox,{checked:selectedIndices==null?void 0:selectedIndices.includes(rIdx),onCheckedChange:function onCheckedChange(){return handleCheckboxClick(rIdx)}})}),row.map(function(cell,cIdx){var columnKey=originalKeys[cIdx];var chipMode=columnKey?getChipMode(columnWithChipClass,columnKey):undefined;var shouldRenderChip=!!chipMode;return/*#__PURE__*/_jsx(TableCell,{"data-slot":"cell-"+rIdx+"-"+cIdx,className:"p-2 align-middle whitespace-nowrap",contentEditable:false,children:shouldRenderChip?renderChip(columnKey,cell):formatValue(cell,decimalPrecision)},cIdx)}),renderActions(rIdx,actions)]},rIdx)})})]}))}return/*#__PURE__*/_jsxs(Fragment,{children:[/*#__PURE__*/_jsx("div",{className:"flex flex-col h-full overflow-hidden",children:/*#__PURE__*/_jsxs(ScrollArea,_extends({"data-slot":"table-container",className:mergedClasses},height!==undefined&&{style:{height:height}},{children:[renderTableComponent(),/*#__PURE__*/_jsx(ScrollBar,{orientation:"horizontal"})]}))}),pagination&&pagination.totalCount>0&&/*#__PURE__*/_jsxs("div",{className:"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2",children:[/*#__PURE__*/_jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[/*#__PURE__*/_jsx("label",{htmlFor:"page-size-select",className:"text-sm whitespace-nowrap",children:"Rows per page:"}),/*#__PURE__*/_jsx("select",{id:"page-size-select",value:pageSize,onChange:function onChange(e){return handlePageChange(1,Number(e.target.value))},className:"border rounded px-2 py-1 text-sm cursor-pointer",disabled:isLoading,children:pagination.pageSizeOptions.map(function(size){return/*#__PURE__*/_jsx("option",{value:size,children:size},size)})})]}),/*#__PURE__*/_jsxs("div",{className:"flex items-center gap-1 flex-shrink-0",children:[/*#__PURE__*/_jsxs("span",{className:"text-xs text-muted-foreground whitespace-nowrap ml-1.5",children:[(pageNumber-1)*pageSize+1,"\u2013",Math.min(pageNumber*pageSize,pagination.totalCount)," of ",pagination.totalCount]}),/*#__PURE__*/_jsx(Pagination,{children:/*#__PURE__*/_jsx(PaginationContent,{className:"gap-0.2 flex-shrink-0",children:renderPaginationArrows(pageNumber,totalPages,isLoading,handlePageChange)})})]})]}),FormDialog]})}
|
|
18
18
|
//# sourceMappingURL=data-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","names":["useEffect","useState","Fragment","useMemo","useRef","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","TableHeadSortable","TableLoader","ScrollArea","ScrollBar","Pagination","PaginationContent","renderPaginationArrows","Button","cn","renderNoDataFallback","formatValue","SEMANTIC_CHIP_STYLES_MAP","RANDOM_CHIP_COLOR_PALETTE","MoreVertical","Loader2","useButtonForm","jsx","_jsx","jsxs","_jsxs","_Fragment","normalizeValue","value","undefined","str","String","trim","toLowerCase","getChipMode","columnWithChipClass","columnKey","mode","getUniqueValuesHash","data","Array","isArray","length","availableKeys","Object","keys","hashParts","forEach","includes","chipMode","uniqueNormalizedValues","Set","row","normalizedKey","add","sortedUniqueValues","from","sort","JSON","stringify","DataTable","_ref","_ref2","_pagination$values$pa","_pagination$values","_ref3","_pagination$values$pa2","_pagination$values2","_ref$data","_ref$headerMapper","headerMapper","_ref$className","className","_ref$actions","actions","_ref$isEditable","isEditable","pagination","_ref$isLoading","isLoading","onRowAction","onPageChange","onSort","sortConfig","_ref$otherProps","otherProps","height","_ref$decimalPrecision","decimalPrecision","_ref$columnWithChipCl","_ref$chipStylesMappin","chipStylesMapping","children","style","minHeight","_useState","activeSortColumn","setActiveSortColumn","_useState2","sortDirections","setSortDirections","_useState3","activeRowIndex","setActiveRowIndex","_useState4","activeAction","setActiveAction","_useState5","isFormSubmitting","setIsFormSubmitting","_useState6","loadingActionKey","setLoadingActionKey","_useState7","Number","values","pageNumber","initialPage","setPageNumber","_useState8","pageSize","initialPageSize","setPageSize","_useState9","Math","ceil","totalCount","totalPages","setTotalPages","_useState10","chipColorMap","setChipColorMap","_useState11","openDropdownIndex","setOpenDropdownIndex","prevDataHashRef","_ref4","_pagination$values$pa3","_pagination$values3","_ref5","_pagination$values$pa4","_pagination$values4","first","sortColumn","sortDirection","computedColorMap","newColorMap","index","colorIndex","uniqueValuesHash","current","prevMap","merged","_extends","cleaned","hasChanges","_useButtonForm","formMapper","action","formTitle","formDescription","formButtonText","isSubmitting","onClose","onSubmit","_onSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","wrap","_callee$","_context","prev","next","id","finish","stop","_x","apply","arguments","FormDialog","openForm","originalKeys","filter","key","headers","map","push","rows","datum","handlePageChange","_x2","_x3","_handlePageChange","_callee3","newPage","newSize","_callee3$","_context3","handleSortClick","column","direction","_extends2","ActionsDropdown","_ref6","rowIndex","rowActions","isOpen","totalRows","isNearBottom","handleActionClick","_x4","_handleActionClick","_callee2","actionKey","_callee2$","_context2","toggleDropdown","handleBackdropClick","onClick","background","cursor","variant","size","e","stopPropagation","disabled","role","isActionLoading","text","renderActions","defaultClasses","mergedClasses","getRandomColorForValue","_chipColorMap$columnK","renderChip","formattedValue","chipClassName","_chipStylesMapping$co","valueStr","valueLower","renderTableComponent","head","idx","isActionColumn","originalKey","contentEditable","isActive","sortable","rIdx","cell","cIdx","shouldRenderChip","orientation","htmlFor","onChange","target","pageSizeOptions","min"],"sources":["../../../src/plugins/helpers/data-table.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useState, Fragment, useMemo, useRef } from 'react';\nimport {\n Table,\n TableHeader,\n TableRow,\n TableHead,\n TableBody,\n TableCell,\n TableHeadSortable,\n SortDirection,\n} from '../../shadcn/components/ui/table';\nimport { TableLoader } from '../../shadcn/components/ui/skeleton';\nimport { ScrollArea, ScrollBar } from '../../shadcn/components/ui/scroll-area';\nimport {\n Pagination,\n PaginationContent,\n renderPaginationArrows,\n} from '../../shadcn/components/ui/pagination';\nimport { Button } from '../../shadcn/components/ui/button';\nimport { cn } from '../../shadcn/utils';\nimport { renderNoDataFallback } from './extra';\nimport { formatValue } from '../../helpers';\nimport { SEMANTIC_CHIP_STYLES_MAP, RANDOM_CHIP_COLOR_PALETTE } from '../../constants';\nimport { MoreVertical, Loader2 } from 'lucide-react';\nimport { useButtonForm } from './button-form';\n\ntype RowAction = {\n id: string;\n text: string;\n variant?: string;\n tooltipContent?: string;\n className?: string;\n action: any;\n};\n\nexport type DataTableProps = {\n data: Record<string, any>[];\n headerMapper?: Record<string, string>;\n className?: string;\n isEditable?: boolean;\n actions?: RowAction[];\n pagination?: {\n values?: {\n pageNumber: number;\n pageSize: number;\n };\n initialPage?: number;\n initialPageSize?: number;\n totalCount: number;\n pageSizeOptions: number[];\n };\n isLoading?: boolean;\n onRowAction?: (rowIndex: number, actionId: string, formData?: Record<string, any>) => void;\n onPageChange?: (pageNumber: number, pageSize: number) => void;\n onSort?: (column: string, direction: SortDirection) => void;\n sortConfig?: Record<string, SortDirection>;\n otherProps?: Record<string, any>;\n height?: string | number;\n decimalPrecision?: number;\n columnWithChipClass?: Record<string, 'useMap' | 'useRandom'>;\n chipStylesMapping?: Record<string, Record<string, string>>;\n};\n\n/**\n * Normalizes a value to a consistent string key for color mapping.\n * Handles all value types: null/undefined, numbers, booleans, objects, arrays, dates.\n * Ensures consistent color assignment for all variations of the same logical value.\n */\nfunction normalizeValue(value: any): string {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n\n return str.trim().toLowerCase();\n}\n\nfunction getChipMode(\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n columnKey: string,\n): 'useMap' | 'useRandom' | undefined {\n if (!(columnKey in columnWithChipClass)) {\n return undefined;\n }\n\n const mode = columnWithChipClass[columnKey];\n\n if (mode !== 'useMap' && mode !== 'useRandom') {\n return 'useRandom';\n }\n\n return mode;\n}\n\n/**\n * Generates a stable hash based on unique value sets per column.\n * This hash is order-independent - it only changes when the set of unique values changes,\n * not when rows are reordered (e.g., during sorting).\n */\nfunction getUniqueValuesHash(\n data: Record<string, any>[],\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n): string {\n if (!Array.isArray(data) || data.length === 0) {\n return '';\n }\n\n const availableKeys = Object.keys(data[0] || {});\n const hashParts: Record<string, string[]> = {};\n\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n if (chipMode === 'useRandom') {\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n hashParts[columnKey] = sortedUniqueValues;\n }\n });\n\n return JSON.stringify(hashParts);\n}\n\nexport function DataTable({\n data = [],\n headerMapper = {},\n className = '',\n actions = [],\n isEditable = false,\n pagination,\n isLoading = false,\n onRowAction,\n onPageChange,\n onSort,\n sortConfig,\n otherProps = {},\n height,\n decimalPrecision = 2,\n columnWithChipClass = {},\n chipStylesMapping = {},\n}: DataTableProps) {\n if (!data || data.length === 0) {\n return (\n <Fragment>\n <div className=\"flex flex-col overflow-hidden\">\n <div\n data-slot=\"table-container\"\n className=\"aspect-auto w-full\"\n style={{ height: 'auto', minHeight: '180px' }}\n >\n {isLoading ? <TableLoader /> : renderNoDataFallback()}\n </div>\n </div>\n </Fragment>\n );\n }\n\n const [activeSortColumn, setActiveSortColumn] = useState<string | null>(null);\n const [sortDirections, setSortDirections] = useState<Record<string, SortDirection>>({});\n const [activeRowIndex, setActiveRowIndex] = useState<number | null>(null);\n const [activeAction, setActiveAction] = useState<RowAction | null>(null);\n const [isFormSubmitting, setIsFormSubmitting] = useState(false);\n const [loadingActionKey, setLoadingActionKey] = useState<string | null>(null);\n\n const [pageNumber, setPageNumber] = useState(\n Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1),\n );\n const [pageSize, setPageSize] = useState(\n Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 10),\n );\n const [totalPages, setTotalPages] = useState(\n Math.ceil((pagination?.totalCount || 0) / pageSize) || 1,\n );\n\n const [chipColorMap, setChipColorMap] = useState<Record<string, Record<string, string>>>({});\n\n // Track which dropdown is currently open (by row index)\n const [openDropdownIndex, setOpenDropdownIndex] = useState<number | null>(null);\n\n const prevDataHashRef = useRef<string>('');\n\n useEffect(() => {\n setPageNumber(Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1));\n setPageSize(Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 25));\n }, [pagination]);\n\n useEffect(() => {\n setTotalPages(Math.ceil((pagination?.totalCount || 0) / pageSize) || 1);\n }, [pagination?.totalCount, pageSize]);\n\n useEffect(() => {\n if (sortConfig) {\n setSortDirections(sortConfig);\n const first = Object.keys(sortConfig)[0];\n\n if (first) {\n setActiveSortColumn(first);\n }\n }\n }, [sortConfig]);\n\n useEffect(() => {\n if (sortConfig?.sortColumn || sortConfig?.sortDirection) {\n sortConfig.sortColumn = null;\n sortConfig.sortDirection = null;\n }\n\n setActiveSortColumn(null);\n setSortDirections({});\n }, []);\n\n const computedColorMap = useMemo(() => {\n if (!Array.isArray(data) || data.length === 0) {\n return {};\n }\n\n // Get available column keys from first row\n const availableKeys = Object.keys(data[0] || {});\n\n const newColorMap: Record<string, Record<string, string>> = {};\n\n // Process each column that uses random chips\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n // Validate column key exists in data\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n if (chipMode === 'useRandom') {\n if (!newColorMap[columnKey]) {\n newColorMap[columnKey] = {};\n }\n\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n\n sortedUniqueValues.forEach((normalizedKey, index) => {\n if (!newColorMap[columnKey][normalizedKey]) {\n const colorIndex = index % RANDOM_CHIP_COLOR_PALETTE.length;\n newColorMap[columnKey][normalizedKey] = RANDOM_CHIP_COLOR_PALETTE[colorIndex];\n }\n });\n }\n });\n\n return newColorMap;\n }, [data, columnWithChipClass]);\n\n useEffect(() => {\n const uniqueValuesHash = getUniqueValuesHash(data, columnWithChipClass);\n\n // Only update if the set of unique values actually changed\n if (uniqueValuesHash !== prevDataHashRef.current) {\n prevDataHashRef.current = uniqueValuesHash;\n\n setChipColorMap((prevMap) => {\n const merged = { ...prevMap };\n Object.keys(computedColorMap).forEach((columnKey) => {\n merged[columnKey] = { ...computedColorMap[columnKey], ...merged[columnKey] };\n });\n return merged;\n });\n }\n }, [computedColorMap, data, columnWithChipClass]);\n\n useEffect(() => {\n setChipColorMap((prevMap) => {\n const cleaned = { ...prevMap };\n let hasChanges = false;\n\n Object.keys(cleaned).forEach((columnKey) => {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n if (!chipMode) {\n delete cleaned[columnKey];\n hasChanges = true;\n }\n });\n\n return hasChanges ? cleaned : prevMap;\n });\n }, [columnWithChipClass]);\n\n const { FormDialog, openForm } = useButtonForm({\n formMapper: activeAction?.action.formMapper,\n formTitle: activeAction?.action.formTitle,\n formDescription: activeAction?.action.formDescription,\n formButtonText: activeAction?.action.formButtonText,\n isSubmitting: isFormSubmitting || isLoading,\n onClose: () => {\n setActiveRowIndex(null);\n setActiveAction(null);\n },\n onSubmit: async (formData) => {\n if (activeRowIndex !== null && activeAction) {\n setIsFormSubmitting(true);\n try {\n await onRowAction?.(activeRowIndex, activeAction.id, formData);\n } finally {\n setIsFormSubmitting(false);\n }\n\n setActiveAction(null);\n setActiveRowIndex(null);\n }\n },\n });\n\n useEffect(() => {\n if (activeAction?.action.formMapper && Object.keys(activeAction.action.formMapper).length > 0) {\n openForm();\n }\n }, [activeAction]);\n\n const originalKeys = Object.keys(data[0] || {}).filter((key) => key in headerMapper);\n const headers = originalKeys.map((key) => headerMapper[key]);\n\n if (actions.length > 0) {\n headers.push('');\n }\n\n const rows = data.map((datum: any) => originalKeys.map((key) => datum[key]));\n\n async function handlePageChange(newPage = pageNumber, newSize = pageSize) {\n setPageNumber(newPage);\n setPageSize(newSize);\n onPageChange?.(newPage, newSize);\n }\n\n function handleSortClick(column: string, direction: SortDirection) {\n setActiveSortColumn(direction ? column : null);\n setSortDirections((prev) => ({\n ...prev,\n [column]: direction,\n }));\n onSort?.(column, direction);\n }\n\n function ActionsDropdown({\n rowIndex,\n rowActions,\n }: {\n rowIndex: number;\n rowActions: RowAction[];\n }) {\n const isOpen = openDropdownIndex === rowIndex;\n\n // Simple check: if it's one of the last 3 rows, position dropdown above\n const totalRows = rows.length;\n const isNearBottom = rowIndex >= totalRows - 3;\n\n async function handleActionClick(action: RowAction) {\n const actionKey = `${rowIndex}-${action.id}`;\n\n if (action.action.formMapper && Object.keys(action.action.formMapper).length > 0) {\n setActiveRowIndex(rowIndex);\n setActiveAction(action);\n setOpenDropdownIndex(null);\n } else {\n try {\n setLoadingActionKey(actionKey);\n await onRowAction?.(rowIndex, action.id);\n } finally {\n setLoadingActionKey(null);\n setOpenDropdownIndex(null);\n }\n }\n }\n\n function toggleDropdown() {\n setOpenDropdownIndex(isOpen ? null : rowIndex);\n }\n\n function handleBackdropClick() {\n // Only close if no action is currently running\n if (!loadingActionKey) {\n setOpenDropdownIndex(null);\n }\n }\n\n return (\n <>\n {isOpen && (\n <div\n className=\"fixed inset-0 z-40\"\n onClick={handleBackdropClick}\n style={{ background: 'transparent', cursor: 'default' }}\n />\n )}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={(e) => {\n e.stopPropagation();\n toggleDropdown();\n }}\n disabled={isLoading}\n className=\"h-8 w-8 relative z-50\"\n data-dropdown-button=\"true\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {isOpen && (\n <div\n className={cn(\n \"absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50\",\n isNearBottom ? 'bottom-0' : 'top-0'\n )}\n >\n <div className=\"py-1\" role=\"menu\">\n {rowActions.map((action) => {\n const actionKey = `${rowIndex}-${action.id}`;\n const isActionLoading = loadingActionKey === actionKey;\n\n return (\n <button\n key={action.id}\n onClick={() => handleActionClick(action)}\n className=\"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent\"\n disabled={isLoading || isActionLoading}\n role=\"menuitem\"\n >\n {isActionLoading && (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n )}\n {action.text}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </>\n );\n }\n\n function renderActions(rowIndex: number, rowActions: RowAction[]) {\n if (!actions.length) {\n return null;\n }\n\n return (\n <TableCell className=\"sticky right-0 bg-white overflow-visible\">\n <ActionsDropdown rowIndex={rowIndex} rowActions={rowActions} />\n </TableCell>\n );\n }\n\n const defaultClasses = `aspect-auto w-full`;\n const mergedClasses = className ? cn(defaultClasses, className) : defaultClasses;\n\n function getRandomColorForValue(columnKey: string, value: any): string {\n const normalizedKey = normalizeValue(value);\n\n if (chipColorMap[columnKey]?.[normalizedKey]) {\n return chipColorMap[columnKey][normalizedKey];\n }\n\n return 'bg-gray-50 text-gray-900 shadow-sm';\n }\n\n function renderChip(columnKey: string, value: any) {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n const formattedValue = formatValue(value, decimalPrecision);\n\n if (!chipMode) {\n return <>{formattedValue}</>;\n }\n\n let chipClassName = '';\n\n if (chipMode === 'useMap') {\n const valueStr = String(value);\n chipClassName = chipStylesMapping[columnKey]?.[valueStr];\n\n if (!chipClassName) {\n const valueLower = valueStr.toLowerCase().trim();\n chipClassName = SEMANTIC_CHIP_STYLES_MAP[valueLower];\n }\n\n if (!chipClassName) {\n chipClassName = 'bg-gray-50 text-gray-900 shadow-sm';\n }\n } else if (chipMode === 'useRandom') {\n chipClassName = getRandomColorForValue(columnKey, value);\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10',\n chipClassName,\n )}\n >\n {formattedValue}\n </span>\n );\n }\n\n function renderTableComponent() {\n if (isLoading || !data || data.length === 0) {\n return <TableLoader />;\n }\n\n return (\n <Table\n {...otherProps}\n className={`caption-bottom text-sm relative ${mergedClasses}`}\n data-slot=\"table\"\n >\n <TableHeader data-slot=\"table-header\" className=\"sticky top-0 z-2\">\n <TableRow>\n {headers.map((head: string, idx: number) => {\n const isActionColumn = actions.length > 0 && idx === headers.length - 1;\n const originalKey = originalKeys[idx];\n\n if (isActionColumn) {\n return (\n <TableHead\n key={idx}\n data-slot={`table-header-${idx}`}\n contentEditable={isEditable}\n className=\"sticky right-0 bg-slate-100\"\n >\n {head}\n </TableHead>\n );\n }\n\n return (\n <TableHeadSortable\n key={idx}\n data-slot={`table-header-${idx}`}\n sortDirection={sortDirections[originalKey] || 'asc'}\n isActive={activeSortColumn === originalKey}\n onSort={(direction) => handleSortClick(originalKey, direction)}\n sortable={!isLoading}\n isEditable={isEditable}\n >\n {head}\n </TableHeadSortable>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody data-slot=\"table-body\">\n {rows.map((row: any[], rIdx: number) => (\n <TableRow\n key={rIdx}\n data-slot={`row-${rIdx}`}\n className=\"hover:bg-muted/50 border-b transition-colors\"\n >\n {row.map((cell: string, cIdx: number) => {\n const columnKey = originalKeys[cIdx];\n const chipMode = columnKey\n ? getChipMode(columnWithChipClass, columnKey)\n : undefined;\n const shouldRenderChip = !!chipMode;\n\n return (\n <TableCell\n key={cIdx}\n data-slot={`cell-${rIdx}-${cIdx}`}\n className=\"p-2 align-middle whitespace-nowrap\"\n contentEditable={false}\n >\n {shouldRenderChip\n ? renderChip(columnKey, cell)\n : formatValue(cell, decimalPrecision)}\n </TableCell>\n );\n })}\n {renderActions(rIdx, actions)}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n }\n\n return (\n <Fragment>\n <div className=\"flex flex-col h-full overflow-hidden\">\n <ScrollArea\n data-slot=\"table-container\"\n className={mergedClasses}\n {...(height !== undefined && { style: { height } })}\n >\n {renderTableComponent()}\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n {pagination && pagination.totalCount > 0 && (\n <div className=\"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2\">\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <label htmlFor=\"page-size-select\" className=\"text-sm whitespace-nowrap\">\n Rows per page:\n </label>\n <select\n id=\"page-size-select\"\n value={pageSize}\n onChange={(e) => handlePageChange(1, Number(e.target.value))}\n className=\"border rounded px-2 py-1 text-sm cursor-pointer\"\n disabled={isLoading}\n >\n {pagination.pageSizeOptions.map((size: number) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-1.5\">\n {(pageNumber - 1) * pageSize + 1}–\n {Math.min(pageNumber * pageSize, pagination.totalCount)} of {pagination.totalCount}\n </span>\n <Pagination>\n <PaginationContent className=\"gap-0.2 flex-shrink-0\">\n {renderPaginationArrows(pageNumber, totalPages, isLoading, handlePageChange)}\n </PaginationContent>\n </Pagination>\n </div>\n </div>\n )}\n {FormDialog}\n </Fragment>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"data-table.js","names":["useEffect","useState","Fragment","useMemo","useRef","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","TableHeadSortable","TableLoader","ScrollArea","ScrollBar","Pagination","PaginationContent","renderPaginationArrows","Button","cn","renderNoDataFallback","formatValue","SEMANTIC_CHIP_STYLES_MAP","RANDOM_CHIP_COLOR_PALETTE","Checkbox","MoreVertical","Loader2","useButtonForm","jsx","_jsx","jsxs","_jsxs","_Fragment","normalizeValue","value","undefined","str","String","trim","toLowerCase","getChipMode","columnWithChipClass","columnKey","mode","getUniqueValuesHash","data","Array","isArray","length","availableKeys","Object","keys","hashParts","forEach","includes","chipMode","uniqueNormalizedValues","Set","row","normalizedKey","add","sortedUniqueValues","from","sort","JSON","stringify","DataTable","_ref","_ref2","_pagination$values$pa","_pagination$values","_ref3","_pagination$values$pa2","_pagination$values2","_ref$data","_ref$headerMapper","headerMapper","_ref$className","className","_ref$actions","actions","_ref$isEditable","isEditable","pagination","_ref$isLoading","isLoading","onRowAction","onPageChange","onSort","sortConfig","_ref$otherProps","otherProps","height","_ref$decimalPrecision","decimalPrecision","_ref$columnWithChipCl","_ref$chipStylesMappin","chipStylesMapping","_ref$isBulkSelectionE","isBulkSelectionEnabled","_ref$selectedIndices","selectedIndices","setSelectedIndices","children","style","minHeight","_useState","activeSortColumn","setActiveSortColumn","_useState2","sortDirections","setSortDirections","_useState3","activeRowIndex","setActiveRowIndex","_useState4","activeAction","setActiveAction","_useState5","isFormSubmitting","setIsFormSubmitting","_useState6","loadingActionKey","setLoadingActionKey","_useState7","Number","values","pageNumber","initialPage","setPageNumber","_useState8","pageSize","initialPageSize","setPageSize","_useState9","Math","ceil","totalCount","totalPages","setTotalPages","_useState10","chipColorMap","setChipColorMap","_useState11","openDropdownIndex","setOpenDropdownIndex","prevDataHashRef","_ref4","_pagination$values$pa3","_pagination$values3","_ref5","_pagination$values$pa4","_pagination$values4","first","sortColumn","sortDirection","computedColorMap","newColorMap","index","colorIndex","uniqueValuesHash","current","prevMap","merged","_extends","cleaned","hasChanges","_useButtonForm","formMapper","action","formTitle","formDescription","formButtonText","isSubmitting","onClose","onSubmit","_onSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","wrap","_callee$","_context","prev","next","id","finish","stop","_x","apply","arguments","FormDialog","openForm","originalKeys","filter","key","headers","map","push","rows","datum","handlePageChange","_x2","_x3","_handlePageChange","_callee3","newPage","newSize","_callee3$","_context3","handleSortClick","column","direction","_extends2","handleCheckboxClick","rowIndex","idx","concat","ActionsDropdown","_ref6","rowActions","isOpen","totalRows","isNearBottom","handleActionClick","_x4","_handleActionClick","_callee2","actionKey","_callee2$","_context2","toggleDropdown","handleBackdropClick","onClick","background","cursor","variant","size","e","stopPropagation","disabled","role","isActionLoading","text","renderActions","defaultClasses","mergedClasses","getRandomColorForValue","_chipColorMap$columnK","renderChip","formattedValue","chipClassName","_chipStylesMapping$co","valueStr","valueLower","renderTableComponent","checked","onCheckedChange","_","head","isActionColumn","originalKey","contentEditable","isActive","sortable","rIdx","cell","cIdx","shouldRenderChip","orientation","htmlFor","onChange","target","pageSizeOptions","min"],"sources":["../../../src/plugins/helpers/data-table.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useState, Fragment, useMemo, useRef } from 'react';\nimport {\n Table,\n TableHeader,\n TableRow,\n TableHead,\n TableBody,\n TableCell,\n TableHeadSortable,\n SortDirection,\n} from '../../shadcn/components/ui/table';\nimport { TableLoader } from '../../shadcn/components/ui/skeleton';\nimport { ScrollArea, ScrollBar } from '../../shadcn/components/ui/scroll-area';\nimport {\n Pagination,\n PaginationContent,\n renderPaginationArrows,\n} from '../../shadcn/components/ui/pagination';\nimport { Button } from '../../shadcn/components/ui/button';\nimport { cn } from '../../shadcn/utils';\nimport { renderNoDataFallback } from './extra';\nimport { formatValue } from '../../helpers';\nimport { SEMANTIC_CHIP_STYLES_MAP, RANDOM_CHIP_COLOR_PALETTE } from '../../constants';\nimport { Checkbox } from '../../shadcn/components/ui/checkbox';\nimport { MoreVertical, Loader2 } from 'lucide-react';\nimport { useButtonForm } from './button-form';\n\ntype RowAction = {\n id: string;\n text: string;\n variant?: string;\n tooltipContent?: string;\n className?: string;\n action: any;\n};\n\nexport type DataTableProps = {\n data: Record<string, any>[];\n headerMapper?: Record<string, string>;\n className?: string;\n isEditable?: boolean;\n actions?: RowAction[];\n pagination?: {\n values?: {\n pageNumber: number;\n pageSize: number;\n };\n initialPage?: number;\n initialPageSize?: number;\n totalCount: number;\n pageSizeOptions: number[];\n };\n isLoading?: boolean;\n onRowAction?: (rowIndex: number, actionId: string, formData?: Record<string, any>) => void;\n onPageChange?: (pageNumber: number, pageSize: number) => void;\n onSort?: (column: string, direction: SortDirection) => void;\n sortConfig?: Record<string, SortDirection>;\n otherProps?: Record<string, any>;\n height?: string | number;\n decimalPrecision?: number;\n columnWithChipClass?: Record<string, 'useMap' | 'useRandom'>;\n chipStylesMapping?: Record<string, Record<string, string>>;\n isBulkSelectionEnabled?: boolean;\n selectedIndices?: number[];\n setSelectedIndices?: (indices: number[]) => void;\n};\n\n/**\n * Normalizes a value to a consistent string key for color mapping.\n * Handles all value types: null/undefined, numbers, booleans, objects, arrays, dates.\n * Ensures consistent color assignment for all variations of the same logical value.\n */\nfunction normalizeValue(value: any): string {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n\n return str.trim().toLowerCase();\n}\n\nfunction getChipMode(\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n columnKey: string,\n): 'useMap' | 'useRandom' | undefined {\n if (!(columnKey in columnWithChipClass)) {\n return undefined;\n }\n\n const mode = columnWithChipClass[columnKey];\n\n if (mode !== 'useMap' && mode !== 'useRandom') {\n return 'useRandom';\n }\n\n return mode;\n}\n\n/**\n * Generates a stable hash based on unique value sets per column.\n * This hash is order-independent - it only changes when the set of unique values changes,\n * not when rows are reordered (e.g., during sorting).\n */\nfunction getUniqueValuesHash(\n data: Record<string, any>[],\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n): string {\n if (!Array.isArray(data) || data.length === 0) {\n return '';\n }\n\n const availableKeys = Object.keys(data[0] || {});\n const hashParts: Record<string, string[]> = {};\n\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n if (chipMode === 'useRandom') {\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n hashParts[columnKey] = sortedUniqueValues;\n }\n });\n\n return JSON.stringify(hashParts);\n}\n\nexport function DataTable({\n data = [],\n headerMapper = {},\n className = '',\n actions = [],\n isEditable = false,\n pagination,\n isLoading = false,\n onRowAction,\n onPageChange,\n onSort,\n sortConfig,\n otherProps = {},\n height,\n decimalPrecision = 2,\n columnWithChipClass = {},\n chipStylesMapping = {},\n isBulkSelectionEnabled = false,\n selectedIndices = [],\n setSelectedIndices,\n}: DataTableProps) {\n if (!data || data.length === 0) {\n return (\n <Fragment>\n <div className=\"flex flex-col overflow-hidden\">\n <div\n data-slot=\"table-container\"\n className=\"aspect-auto w-full\"\n style={{ height: 'auto', minHeight: '180px' }}\n >\n {isLoading ? <TableLoader /> : renderNoDataFallback()}\n </div>\n </div>\n </Fragment>\n );\n }\n\n const [activeSortColumn, setActiveSortColumn] = useState<string | null>(null);\n const [sortDirections, setSortDirections] = useState<Record<string, SortDirection>>({});\n const [activeRowIndex, setActiveRowIndex] = useState<number | null>(null);\n const [activeAction, setActiveAction] = useState<RowAction | null>(null);\n const [isFormSubmitting, setIsFormSubmitting] = useState(false);\n const [loadingActionKey, setLoadingActionKey] = useState<string | null>(null);\n\n const [pageNumber, setPageNumber] = useState(\n Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1),\n );\n const [pageSize, setPageSize] = useState(\n Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 10),\n );\n const [totalPages, setTotalPages] = useState(\n Math.ceil((pagination?.totalCount || 0) / pageSize) || 1,\n );\n\n const [chipColorMap, setChipColorMap] = useState<Record<string, Record<string, string>>>({});\n\n // Track which dropdown is currently open (by row index)\n const [openDropdownIndex, setOpenDropdownIndex] = useState<number | null>(null);\n\n const prevDataHashRef = useRef<string>('');\n\n useEffect(() => {\n setPageNumber(Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1));\n setPageSize(Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 25));\n }, [pagination]);\n\n useEffect(() => {\n setTotalPages(Math.ceil((pagination?.totalCount || 0) / pageSize) || 1);\n }, [pagination?.totalCount, pageSize]);\n\n useEffect(() => {\n if (sortConfig) {\n setSortDirections(sortConfig);\n const first = Object.keys(sortConfig)[0];\n\n if (first) {\n setActiveSortColumn(first);\n }\n }\n }, [sortConfig]);\n\n useEffect(() => {\n if (sortConfig?.sortColumn || sortConfig?.sortDirection) {\n sortConfig.sortColumn = null;\n sortConfig.sortDirection = null;\n }\n\n setActiveSortColumn(null);\n setSortDirections({});\n }, []);\n\n const computedColorMap = useMemo(() => {\n if (!Array.isArray(data) || data.length === 0) {\n return {};\n }\n\n // Get available column keys from first row\n const availableKeys = Object.keys(data[0] || {});\n\n const newColorMap: Record<string, Record<string, string>> = {};\n\n // Process each column that uses random chips\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n // Validate column key exists in data\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n if (chipMode === 'useRandom') {\n if (!newColorMap[columnKey]) {\n newColorMap[columnKey] = {};\n }\n\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n\n sortedUniqueValues.forEach((normalizedKey, index) => {\n if (!newColorMap[columnKey][normalizedKey]) {\n const colorIndex = index % RANDOM_CHIP_COLOR_PALETTE.length;\n newColorMap[columnKey][normalizedKey] = RANDOM_CHIP_COLOR_PALETTE[colorIndex];\n }\n });\n }\n });\n\n return newColorMap;\n }, [data, columnWithChipClass]);\n\n useEffect(() => {\n const uniqueValuesHash = getUniqueValuesHash(data, columnWithChipClass);\n\n // Only update if the set of unique values actually changed\n if (uniqueValuesHash !== prevDataHashRef.current) {\n prevDataHashRef.current = uniqueValuesHash;\n\n setChipColorMap((prevMap) => {\n const merged = { ...prevMap };\n Object.keys(computedColorMap).forEach((columnKey) => {\n merged[columnKey] = { ...computedColorMap[columnKey], ...merged[columnKey] };\n });\n return merged;\n });\n }\n }, [computedColorMap, data, columnWithChipClass]);\n\n useEffect(() => {\n setChipColorMap((prevMap) => {\n const cleaned = { ...prevMap };\n let hasChanges = false;\n\n Object.keys(cleaned).forEach((columnKey) => {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n if (!chipMode) {\n delete cleaned[columnKey];\n hasChanges = true;\n }\n });\n\n return hasChanges ? cleaned : prevMap;\n });\n }, [columnWithChipClass]);\n\n const { FormDialog, openForm } = useButtonForm({\n formMapper: activeAction?.action.formMapper,\n formTitle: activeAction?.action.formTitle,\n formDescription: activeAction?.action.formDescription,\n formButtonText: activeAction?.action.formButtonText,\n isSubmitting: isFormSubmitting || isLoading,\n onClose: () => {\n setActiveRowIndex(null);\n setActiveAction(null);\n },\n onSubmit: async (formData) => {\n if (activeRowIndex !== null && activeAction) {\n setIsFormSubmitting(true);\n try {\n await onRowAction?.(activeRowIndex, activeAction.id, formData);\n } finally {\n setIsFormSubmitting(false);\n }\n\n setActiveAction(null);\n setActiveRowIndex(null);\n }\n },\n });\n\n useEffect(() => {\n if (activeAction?.action.formMapper && Object.keys(activeAction.action.formMapper).length > 0) {\n openForm();\n }\n }, [activeAction]);\n\n const originalKeys = Object.keys(data[0] || {}).filter((key) => key in headerMapper);\n const headers = originalKeys.map((key) => headerMapper[key]);\n\n if (actions.length > 0) {\n headers.push('');\n }\n\n const rows = data.map((datum: any) => originalKeys.map((key) => datum[key]));\n\n async function handlePageChange(newPage = pageNumber, newSize = pageSize) {\n setPageNumber(newPage);\n setPageSize(newSize);\n onPageChange?.(newPage, newSize);\n }\n\n function handleSortClick(column: string, direction: SortDirection) {\n setActiveSortColumn(direction ? column : null);\n setSortDirections((prev) => ({\n ...prev,\n [column]: direction,\n }));\n onSort?.(column, direction);\n }\n\n function handleCheckboxClick(rowIndex: number) {\n if (setSelectedIndices) {\n if (selectedIndices.includes(rowIndex)) {\n setSelectedIndices(selectedIndices.filter((idx) => idx !== rowIndex));\n } else {\n setSelectedIndices([...selectedIndices, rowIndex]);\n }\n }\n }\n\n function ActionsDropdown({\n rowIndex,\n rowActions,\n }: {\n rowIndex: number;\n rowActions: RowAction[];\n }) {\n const isOpen = openDropdownIndex === rowIndex;\n\n // Simple check: if it's one of the last 3 rows, position dropdown above\n const totalRows = rows.length;\n const isNearBottom = rowIndex >= totalRows - 3;\n\n async function handleActionClick(action: RowAction) {\n const actionKey = `${rowIndex}-${action.id}`;\n\n if (action.action.formMapper && Object.keys(action.action.formMapper).length > 0) {\n setActiveRowIndex(rowIndex);\n setActiveAction(action);\n setOpenDropdownIndex(null);\n } else {\n try {\n setLoadingActionKey(actionKey);\n await onRowAction?.(rowIndex, action.id);\n } finally {\n setLoadingActionKey(null);\n setOpenDropdownIndex(null);\n }\n }\n }\n\n function toggleDropdown() {\n setOpenDropdownIndex(isOpen ? null : rowIndex);\n }\n\n function handleBackdropClick() {\n // Only close if no action is currently running\n if (!loadingActionKey) {\n setOpenDropdownIndex(null);\n }\n }\n\n return (\n <>\n {isOpen && (\n <div\n className=\"fixed inset-0 z-40\"\n onClick={handleBackdropClick}\n style={{ background: 'transparent', cursor: 'default' }}\n />\n )}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={(e) => {\n e.stopPropagation();\n toggleDropdown();\n }}\n disabled={isLoading}\n className=\"h-8 w-8 relative z-50\"\n data-dropdown-button=\"true\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {isOpen && (\n <div\n className={cn(\n \"absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50\",\n isNearBottom ? 'bottom-0' : 'top-0'\n )}\n >\n <div className=\"py-1\" role=\"menu\">\n {rowActions.map((action) => {\n const actionKey = `${rowIndex}-${action.id}`;\n const isActionLoading = loadingActionKey === actionKey;\n\n return (\n <button\n key={action.id}\n onClick={() => handleActionClick(action)}\n className=\"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent\"\n disabled={isLoading || isActionLoading}\n role=\"menuitem\"\n >\n {isActionLoading && (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n )}\n {action.text}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </>\n );\n }\n\n function renderActions(rowIndex: number, rowActions: RowAction[]) {\n if (!actions.length) {\n return null;\n }\n\n return (\n <TableCell className=\"sticky right-0 bg-white overflow-visible\">\n <ActionsDropdown rowIndex={rowIndex} rowActions={rowActions} />\n </TableCell>\n );\n }\n\n const defaultClasses = `aspect-auto w-full`;\n const mergedClasses = className ? cn(defaultClasses, className) : defaultClasses;\n\n function getRandomColorForValue(columnKey: string, value: any): string {\n const normalizedKey = normalizeValue(value);\n\n if (chipColorMap[columnKey]?.[normalizedKey]) {\n return chipColorMap[columnKey][normalizedKey];\n }\n\n return 'bg-gray-50 text-gray-900 shadow-sm';\n }\n\n function renderChip(columnKey: string, value: any) {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n const formattedValue = formatValue(value, decimalPrecision);\n\n if (!chipMode) {\n return <>{formattedValue}</>;\n }\n\n let chipClassName = '';\n\n if (chipMode === 'useMap') {\n const valueStr = String(value);\n chipClassName = chipStylesMapping[columnKey]?.[valueStr];\n\n if (!chipClassName) {\n const valueLower = valueStr.toLowerCase().trim();\n chipClassName = SEMANTIC_CHIP_STYLES_MAP[valueLower];\n }\n\n if (!chipClassName) {\n chipClassName = 'bg-gray-50 text-gray-900 shadow-sm';\n }\n } else if (chipMode === 'useRandom') {\n chipClassName = getRandomColorForValue(columnKey, value);\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10',\n chipClassName,\n )}\n >\n {formattedValue}\n </span>\n );\n }\n\n function renderTableComponent() {\n if (isLoading || !data || data.length === 0) {\n return <TableLoader />;\n }\n\n return (\n <Table\n {...otherProps}\n className={`caption-bottom text-sm relative ${mergedClasses}`}\n data-slot=\"table\"\n >\n <TableHeader data-slot=\"table-header\" className=\"sticky top-0 z-2\">\n <TableRow>\n {isBulkSelectionEnabled && (\n <TableCell className=\"p-2 w-10\">\n <Checkbox\n checked={selectedIndices?.length === data.length}\n onCheckedChange={() => {\n if (setSelectedIndices) {\n if (selectedIndices?.length === data.length) {\n setSelectedIndices([]);\n } else {\n setSelectedIndices(data.map((_, idx) => idx));\n }\n }\n }}\n />\n </TableCell>\n )}\n {headers.map((head: string, idx: number) => {\n const isActionColumn = actions.length > 0 && idx === headers.length - 1;\n const originalKey = originalKeys[idx];\n\n if (isActionColumn) {\n return (\n <TableHead\n key={idx}\n data-slot={`table-header-${idx}`}\n contentEditable={isEditable}\n className=\"sticky right-0 bg-slate-100\"\n >\n {head}\n </TableHead>\n );\n }\n\n return (\n <TableHeadSortable\n key={idx}\n data-slot={`table-header-${idx}`}\n sortDirection={sortDirections[originalKey] || 'asc'}\n isActive={activeSortColumn === originalKey}\n onSort={(direction) => handleSortClick(originalKey, direction)}\n sortable={!isLoading}\n isEditable={isEditable}\n >\n {head}\n </TableHeadSortable>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody data-slot=\"table-body\">\n {rows.map((row: any[], rIdx: number) => (\n <TableRow\n key={rIdx}\n data-slot={`row-${rIdx}`}\n className=\"hover:bg-muted/50 border-b transition-colors\"\n >\n {isBulkSelectionEnabled && (\n <TableCell className=\"p-2 align-middle\">\n <Checkbox\n checked={selectedIndices?.includes(rIdx)}\n onCheckedChange={() => handleCheckboxClick(rIdx)}\n />\n </TableCell>\n )}\n {row.map((cell: string, cIdx: number) => {\n const columnKey = originalKeys[cIdx];\n const chipMode = columnKey\n ? getChipMode(columnWithChipClass, columnKey)\n : undefined;\n const shouldRenderChip = !!chipMode;\n\n return (\n <TableCell\n key={cIdx}\n data-slot={`cell-${rIdx}-${cIdx}`}\n className=\"p-2 align-middle whitespace-nowrap\"\n contentEditable={false}\n >\n {shouldRenderChip\n ? renderChip(columnKey, cell)\n : formatValue(cell, decimalPrecision)}\n </TableCell>\n );\n })}\n {renderActions(rIdx, actions)}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n }\n\n return (\n <Fragment>\n <div className=\"flex flex-col h-full overflow-hidden\">\n <ScrollArea\n data-slot=\"table-container\"\n className={mergedClasses}\n {...(height !== undefined && { style: { height } })}\n >\n {renderTableComponent()}\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n {pagination && pagination.totalCount > 0 && (\n <div className=\"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2\">\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <label htmlFor=\"page-size-select\" className=\"text-sm whitespace-nowrap\">\n Rows per page:\n </label>\n <select\n id=\"page-size-select\"\n value={pageSize}\n onChange={(e) => handlePageChange(1, Number(e.target.value))}\n className=\"border rounded px-2 py-1 text-sm cursor-pointer\"\n disabled={isLoading}\n >\n {pagination.pageSizeOptions.map((size: number) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-1.5\">\n {(pageNumber - 1) * pageSize + 1}–\n {Math.min(pageNumber * pageSize, pagination.totalCount)} of {pagination.totalCount}\n </span>\n <Pagination>\n <PaginationContent className=\"gap-0.2 flex-shrink-0\">\n {renderPaginationArrows(pageNumber, totalPages, isLoading, handlePageChange)}\n </PaginationContent>\n </Pagination>\n </div>\n </div>\n )}\n {FormDialog}\n </Fragment>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|