* added multi select back * (WIP): Complete the dynamc height update logic * (WIP): Dynamic height logic * (WIP): Container computation logic, Next steps: Prevent reflow when resize is disabled. Fix logic of widgets randomly changing positions (Debug) * Fix logic in container computations * Integrate for PoC * fixed the no initial load dynamic height updates * Stop vertical resize and reflow when dynamic height is enabled for a widget * added another container in text widget * enabled dynamic height for container widgets * removed dynamic height feature from list widget * Fixed Button and Input components height increase * added an experiment to overflow the content if maxHEight is less * removed the ref of Textwidget by mistake, added it back * fixed text widget height overflow problem with a little hack * added long labels with text * fixed the table scroll issue * overflow fixed for json form widget * added extra 8px height for Switch, Rating and Checkbox Height * (WIP): Resolve issues * (WIP): Fix widget padding issue * added overflow container for Radio and Switch group widgets * (WIP): Have modals work with dynamic height * added the overlay and the handles * added dragging behavior to the dots * fixed the overlapping with the selection tool * (WIP): Fix issues reported * now we can update the property pane values back from overlay handles * now we can update the property pane values back from overlay handles * (WIP): Fix table widget * Fix package.json * Remove unit tests temporarily * Fix unit test * (WIP): Fix modal resize. Fix cursors. Fix border issue on non-resizable widgets * fetch component heights using the requestAnimationFrame callback * behavioural changes * (WIP): Fix issues on the platform * Update main container size appropriately * more behavioural changes * overlay now only be visible when hovering over the dots * grid showing and widget reselecting * added onfocus and onblur events to property pane listeners * added onfocus and onblur events to property pane listeners * added a range slider for min and max * added demarcations for slider values * (WIP): Fix platform workflows for dynamic height * Fix issues with widgets * Fix removed import * - Add missing cypress files * set the limits * limit increase on change * Fix z-index of min max limit indicators. Fix unused-vars warnings * Fix Table Widget and Text Widget issues * Fix: all the bugs in the bug master list for DH (#16268) * changed the zindex for the signifiers * showing signifiers only when the widget is selected * made changes suggested by Momcilo * activate the dots when the fields are active * created a new centered dot handle * removed overlays on focus and made the border more like deisgn * handles on top of other widgets * hide the overlay when multiple widgets are selected * added a white border * added a white border * bug #15509 resolved * changed the minDynamicHeightLimit to 2 instead of 4 to fix the Bug #15527 * removed the height auto fix from BaseInputComponent to fix the Bug #15388 * removed the condition to not ccalculate dynamic height when the row difference is less than 2 to fix the bug 15353 * made fixes for the bug #16307 * made fixes for the bug #16308 * made fixes for bug 16310 * made fixes for the bug #16402 * removed some log statements * made fixes for the bug #16407 * fixed label problem found in the issue #16543 * made fixes for the issue #16547 * made fixes for the bug #16492 * redeploy * (WIP): Fix to make this branch functional * imported LabelWithTooltip back from design system * signifier is now centered * filled the signifier with primary color * overlay hidden while dragging * made the signifier dashed border also draggable * Fix issue #16590 (#16798) * set the limits to 4 rows * replaced the static 40 value * added signifiers for modal widget * added signifiers for modal widget * tried solving the scroll issue for widgets when there are limits * solved the height problem using ResizeObserver * (WIP): Fix maxDynamicHeight issue with container widgets: * made the changes as per the review * fixed the issue for input widget when label gets out of border * hide text widget overflow options if auto height is enabled * (WIP): In view mode, invisible widgets now donot take space (#16920) * (WIP): In view mode, invisible widgets now donot take space * (WIP): Enable the feature where invisible widgets in view mode don't take space to all widgets irrespective of the dynamic height feature * Remove Replay conditional * removed the scroll container for container type widgets * removed the scroll container for container type widgets * updated the hook to set overflow none for text widget * fixed the should dynamic height logic to respect the min height limit * Modal widget adheres to dynamic height (#16995) * Modal widget adheres to dynamic height * WIP: POC: fix dynamic height issues (#16996) Fix height less than 4 issue. Fix JSONForm adherence to min and max height * POC: Dynamic height undo redo issue (#17085) * Revert debouce timeout * (WIP): Fix issue with undo-redo in dynamic height * fix: Dynamic height issue fixes (#17153) * Dynamic height issue fixes == - Fix issue where nested widgets did not ensure parent dynamic height updates - Fix issue where Modal widget updates came in subsequent renders - Fix issue where JSONForm collapses - Fix performance issue for independent updates * Use functions to get min and max dynamic height * Fix issue where variable might have been undefined * added the dynamic container into the deploy mode as well * added overflow-x hidden when overflow-y is active in the dynamic height container * fix: Dynamic height Issue fixes (#17204) Fix preview mode invisible widgets. Fix Tabs widget dynamic height. * removed a console.log statement * removed the slider control file * imported the LabelWithTooltip from the repo rather than ds * word-break CSS rules added for Switch and Checkbox widget when Dynamic Height is enabled * abstracted the check for dynamic height with limits enabled as isDynamicHeightWithLimitsEnabledForWidget * abstracted the static value of 10 in dynamic height overlay to GridDefaults * abstracted min and max dynamic height limits to getters * fix: replaced all the refs for simpler widgets (#17353) * replaced all the refs for simpler widgets * removed the updateDynamicHeight from componentDidUpdate in BaseWidget * added back lifecycle methods back to BaseWidget * removed the contentRef from SwitchGroup and Table * updating the height from the auto height with limits as well * some hacks to make the limits work * working solution * used setTimeout to send an update to updateDynamicHeight from overlay update * removed a log * added requestanimationframe in settimeout Co-authored-by: Ankur Singhal <ankursinghal@Ankurs-MacBook-Pro-2.local> Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * Fix issues caused during merge * Remove unneeded derived property * removed more unnecessary code which should have been removed after removing the ref dependency * fixed the maxDynamicHeight issue * Fix issue where property configs were not being sent * fix: Auto Height Feature - add selectors for tests (#17687) Add selectors for auto height cypress tests * fix: removed height auto default theme (#17415) removed height auto css rule from the default theme Co-authored-by: Ankur Singhal <ankursinghal@Ankurs-MacBook-Pro-2.local> * fix: Auto Height Feature - Resolve issues and restructure code (#17686) * Fix issues in dynamic height. Restructure code and reduce abstraction leaks * Fix typescript issues * Update based on review comments. Comment migrations, as a cyclic import is causing the jest tests to fail. * Remove unused imports * Decrease code nesting * added the base styles for the overlay like position and z-index in its styled component css * used the isDynamicHeightEnabled prop to set the height of SwitchGroup and RadioGroup widgets from 32px to 100% in case of inline mode * fix: Auto Height - Resolve issues (#17737) * Fix Tabs Widget showTabs toggle based auto height. Revert removal of BaseWidget code. Remove box-intersect and use a bruteforce algorithm. Add base logic for having containers collapse due to hidden child widgets * Hide scroll contents and overflow property pane controls when dynamic height is enabled * Removed the class property expectedHeight from BaseWidget as it is not useful in the overlay logic after some changes * fixed the left alignment issue of label in the rich text editor by adding some styles applied only when the dynamic height is enabled * fixed the input field stretching issue in case of Dynamic height by adding some CSS styles when isDynamicHeight is true * Fix failing modal widget cypress tests * Fix issue with scrollContents and Tabs Widget defaulTab * added a little bit padding of 4px to the right of scroll container of dynamic height with limit * Add test locators for resize handles * removed the dynamic height logic from the table widget * fix: Auto-Height invisible widgets (#17849) * Fix issue where invisible widgets were still taking space * Make sure to collapse only if dynamic height is enabled * Fix issues with reflow (not the invisible widgets) * Fix container min height issues * Fix reflow with original bottom and top values. Testing needed * Fix invisible widgets * fix: enabled dynamic height for stat box widget (#17971) enabled dynamic height for stat box widget Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: added a min height to rich text editor so that it does not collapse (#17970) added a min height to rich text editor so that it does not collapse Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * Fix issue with resizing auto height widget * Add helper text to educate users regarding the scroll disconnect in WYSIWYG * fix: Auto Height Fixes (#18111) AUTO HEIGHT FIXES - Fix JSONForm height discrepancy - Fix issue where widgets moved below the other - Fix droptarget height after parent container resize * fix: sliced up the DynamicHeightOverlay component a little bit (#18100) * sliced up the DynamicHeightOverlay component a little bit * more refactoring * more refactoring * used release event emitter and refactored more Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: rich text editor center alignment issue (#18142) * removed the center alignment from rich text editor * dummy commit Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: old DSL container collapse (#18160) * Fix issue where old containers from old DSLs used to collapse when auto height was enabled * Fix issue where old containers don't allow new widgets to be added when auto height is enabled, this is because the shouldScrollContents is undefined * fix: input widgets issue (#18172) fixed the auto height not working issue Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: preview deploy mode (#18174) fixed the preview and deploy mode Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: auto height limits label intersection with handle dot (#18186) fixed the position of the limits label to the right so that it will not intersect with the handle dot Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: auto height limits rich text editor min height (#18187) decrease the min height of the RTE so that it does not have the boundary issue with the max limit when auto height with limits is enabled Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: grammatical error in the help text (#18188) changed react to reacts in the helpText of the dynamic height property in the proeprty pane Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: auto height tabs double scroll (#18210) solved the issue by disabling the scroll for the child canvas widget in the tabs widget Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: auto height limits resizing (#18213) * fixed the auto height limits resizing issue * made the auto height overlay independent of isResizing and used its own property to show the grid * some more refactoring Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * dummy commit * fix: old apps container issue (#18255) filtered out the widgets which are detached from layout Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: fixing auto height in childless containers. (#18263) fixing auto height in childless containers. * task: Dynamic height reflow fixes in Branch (#18244) dynamic height reflow fixes * fix: compact label issue and min and max limits numeric input (#18282) fixed compact label issue and turned min and max limits to numeric input Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: LabelWithTooltip help icon fix * fix: NaN and min limit for min and max (#18284) * fixed compact label issue and turned min and max limits to numeric input * fixed NaN and set min to be 4 Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: validation issues for min max (#18286) * fixed compact label issue and turned min and max limits to numeric input * fixed NaN and set min to be 4 * validations start working min max Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * added a full stop to container scroll helper text * validations start working min max * dummy commit * feat: stop resizing auto height widgets vertically because of Drag n Drop Reflow (#18267) * reflow fixes * stop resizing auto height widgets vertically because of Drag n Drop Reflow * feat: Analytics for Dynamic height (#18279) * Fix canvas min height issue and invisible widgets issue and remove logs and fix issue where widgets overlapped when coming back from preview mode to edit mode * Fix issue with containers not respecting auto height and decreasing height * Fix issue with modal widget not hugging contents, and container widgets never become visible after going invisible * Fix issue where existing containers don't have correct min height for child canvas * fix: canvasLevelsReducers test (#18301) fixed the canvasLevelsReducers test Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: removed auto height min max config from widget features (#18316) removed auto height min max config from widget features Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: Fixing Modal Height updates (#18317) Fixing Modal Height updates * fix: text widget background auto height (#18319) added background color of Text widget back to the auto height container Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * test: cypress tests for auto height (#17676) * Added tests for dynamic height * updated tests for another usecase * moved locators into commonfile * updated common method * added tests for some more widgets * Added tests for jsonForm / Form widget * Updated the test * updated test for multiple text widgets * updated test with few more usecases * updated the dsl * updated tests for text change * updated tests based on new changes * updated cypress test fixes * fix: auto height container merge poc wrt release (#18334) updated the poc wrt PR already merged in the release regarding the auto height container Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: renamed auto height overlay components and added some tests (#18333) * renamed auto height overlay components and added some tests * replaced the 10 value with GridDefaults * avoiding event to reach drop target Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * updated tests * Merge all code into one branch * Fix failing AutoHeightcontainer test * fix: Fix reflow computations which were causing widget overlap (#18300) * Fix reflow computations which were causing widget overlap * Fix issues with parent container height and overlapping widgets * Remove console logs * Revert comment * Fix issues related to reflow of containers * feat: Making getEffectedBoxes a Recursive function in autoHeight Reflow (#18336) Making getEffectedBoxes a Recursive function in autoHeight Reflow * Return null for invisible widgets from withWidgetProps * Remove duplicate import Co-authored-by: rahulramesha <71900764+rahulramesha@users.noreply.github.com> * Remove missed console log * fix: Label position gets deselected on selecting already selected option (#18298) * fix: Label position gets deselected on selecting the already selected value * Added migration for Currency & Phone input widgets * simplify migration function using a utility * combine conditions * Increments LATEST_PAGE_VERSION * Update DynamicHeight_Visibility_spec.js updated a check wrt auto height * Handling Modals for canvas size calculations * fix: migrate label position test failing issue (#18365) fixed migrate label postition test failing issue Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * removed the two unwanted imports from DSLMigrations to fix client build * fix: Auto height zero and limits issue (#18366) fixed the auto height zero and limits issue Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * fix: Auto height regression issues (#18367) * Fix auto height regression issues #18367 * feat: auto height migrations (#18368) Add auto height migrations * Increase file caching size * Use manual array for list of auto height enabled widgets * Fix cypress test dsl versions * Revert changes to shouldUpdateHeightDynamically * Update test results based on code changes * Marginally increase the workbox file size cache * review comment incorporated for test spec * Update container auto height property on drop * added small wait for validation Co-authored-by: Ankur Singhal <ankur@appsmith.com> Co-authored-by: rahulramesha <rahul@appsmith.com> Co-authored-by: Abhinav Jha <zatanna@Abhinavs-iMac.lan> Co-authored-by: Ankur Singhal <ankursinghal@Ankurs-MacBook-Pro-2.local> Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: rahulramesha <71900764+rahulramesha@users.noreply.github.com> Co-authored-by: Albin <albin@appsmith.com> Co-authored-by: Aswath K <aswath.sana@gmail.com> Co-authored-by: NandanAnantharamu <67676905+NandanAnantharamu@users.noreply.github.com> Co-authored-by: Apple <nandan@thinkify.io>
352 lines
11 KiB
TypeScript
352 lines
11 KiB
TypeScript
import React, { useEffect, useMemo } from "react";
|
|
import Table from "./Table";
|
|
import {
|
|
ColumnTypes,
|
|
CompactMode,
|
|
ReactTableColumnProps,
|
|
ReactTableFilter,
|
|
} from "./Constants";
|
|
import { Row } from "react-table";
|
|
|
|
import { EventType } from "constants/AppsmithActionConstants/ActionConstants";
|
|
import equal from "fast-deep-equal/es6";
|
|
|
|
export interface ColumnMenuOptionProps {
|
|
content: string | JSX.Element;
|
|
closeOnClick?: boolean;
|
|
isSelected?: boolean;
|
|
editColumnName?: boolean;
|
|
columnAccessor?: string;
|
|
id?: string;
|
|
category?: boolean;
|
|
options?: ColumnMenuSubOptionProps[];
|
|
onClick?: (columnIndex: number, isSelected: boolean) => void;
|
|
}
|
|
|
|
export interface ColumnMenuSubOptionProps {
|
|
content: string | JSX.Element;
|
|
isSelected?: boolean;
|
|
closeOnClick?: boolean;
|
|
onClick?: (columnIndex: number) => void;
|
|
id?: string;
|
|
category?: boolean;
|
|
isHeader?: boolean;
|
|
}
|
|
|
|
interface ReactTableComponentProps {
|
|
widgetId: string;
|
|
widgetName: string;
|
|
searchKey: string;
|
|
isDisabled?: boolean;
|
|
isVisible?: boolean;
|
|
isLoading: boolean;
|
|
editMode: boolean;
|
|
width: number;
|
|
height: number;
|
|
pageSize: number;
|
|
totalRecordsCount?: number;
|
|
tableData: Array<Record<string, unknown>>;
|
|
disableDrag: (disable: boolean) => void;
|
|
onRowClick: (rowData: Record<string, unknown>, rowIndex: number) => void;
|
|
onCommandClick: (dynamicTrigger: string, onComplete: () => void) => void;
|
|
selectAllRow: (pageData: Row<Record<string, unknown>>[]) => void;
|
|
unSelectAllRow: () => void;
|
|
updatePageNo: (pageNo: number, event?: EventType) => void;
|
|
sortTableColumn: (column: string, asc: boolean) => void;
|
|
nextPageClick: () => void;
|
|
prevPageClick: () => void;
|
|
pageNo: number;
|
|
serverSidePaginationEnabled: boolean;
|
|
selectedRowIndex: number;
|
|
selectedRowIndices: number[];
|
|
multiRowSelection?: boolean;
|
|
hiddenColumns?: string[];
|
|
triggerRowSelection: boolean;
|
|
columnSizeMap?: { [key: string]: number };
|
|
handleResizeColumn: (columnSizeMap: { [key: string]: number }) => void;
|
|
handleReorderColumn: (columnOrder: string[]) => void;
|
|
searchTableData: (searchKey: any) => void;
|
|
filters?: ReactTableFilter[];
|
|
applyFilter: (filters: ReactTableFilter[]) => void;
|
|
columns: ReactTableColumnProps[];
|
|
compactMode?: CompactMode;
|
|
isVisibleSearch?: boolean;
|
|
isVisibleFilters?: boolean;
|
|
isVisibleDownload?: boolean;
|
|
isVisiblePagination?: boolean;
|
|
delimiter: string;
|
|
isSortable?: boolean;
|
|
accentColor: string;
|
|
borderRadius: string;
|
|
boxShadow?: string;
|
|
}
|
|
|
|
function ReactTableComponent(props: ReactTableComponentProps) {
|
|
const {
|
|
applyFilter,
|
|
columns,
|
|
columnSizeMap,
|
|
compactMode,
|
|
delimiter,
|
|
disableDrag,
|
|
editMode,
|
|
filters,
|
|
handleReorderColumn,
|
|
handleResizeColumn,
|
|
height,
|
|
isLoading,
|
|
isSortable,
|
|
isVisibleDownload,
|
|
isVisibleFilters,
|
|
isVisiblePagination,
|
|
isVisibleSearch,
|
|
multiRowSelection,
|
|
nextPageClick,
|
|
onRowClick,
|
|
pageNo,
|
|
pageSize,
|
|
prevPageClick,
|
|
searchKey,
|
|
searchTableData,
|
|
selectAllRow,
|
|
selectedRowIndex,
|
|
selectedRowIndices,
|
|
serverSidePaginationEnabled,
|
|
sortTableColumn: _sortTableColumn,
|
|
tableData,
|
|
totalRecordsCount,
|
|
triggerRowSelection,
|
|
unSelectAllRow,
|
|
updatePageNo,
|
|
widgetId,
|
|
widgetName,
|
|
width,
|
|
} = props;
|
|
|
|
const { columnOrder, hiddenColumns } = useMemo(() => {
|
|
const order: string[] = [];
|
|
const hidden: string[] = [];
|
|
columns.forEach((item) => {
|
|
if (item.isHidden) {
|
|
hidden.push(item.accessor);
|
|
} else {
|
|
order.push(item.accessor);
|
|
}
|
|
});
|
|
return {
|
|
columnOrder: order,
|
|
hiddenColumns: hidden,
|
|
};
|
|
}, [columns]);
|
|
|
|
useEffect(() => {
|
|
let dragged = -1;
|
|
const headers = Array.prototype.slice.call(
|
|
document.querySelectorAll(`#table${widgetId} .draggable-header`),
|
|
);
|
|
headers.forEach((header, i) => {
|
|
header.setAttribute("draggable", true);
|
|
|
|
header.ondragstart = (e: React.DragEvent<HTMLDivElement>) => {
|
|
// check if table column is resizing
|
|
const isResizing = !!document.querySelectorAll(".resizer.isResizing")
|
|
.length;
|
|
// disable draging if resizing
|
|
if (isResizing) return;
|
|
header.style =
|
|
"background: #efefef; border-radius: 4px; z-index: 100; width: 100%; text-overflow: none; overflow: none;";
|
|
e.stopPropagation();
|
|
dragged = i;
|
|
};
|
|
|
|
header.ondrag = (e: React.DragEvent<HTMLDivElement>) => {
|
|
e.stopPropagation();
|
|
};
|
|
|
|
header.ondragend = (e: React.DragEvent<HTMLDivElement>) => {
|
|
header.style = "";
|
|
e.stopPropagation();
|
|
setTimeout(() => (dragged = -1), 1000);
|
|
};
|
|
|
|
// the dropped header
|
|
header.ondragover = (e: React.DragEvent<HTMLDivElement>) => {
|
|
if (i !== dragged && dragged !== -1) {
|
|
if (dragged > i) {
|
|
header.parentElement.className = "th header-reorder highlight-left";
|
|
} else if (dragged < i) {
|
|
header.parentElement.className =
|
|
"th header-reorder highlight-right";
|
|
}
|
|
}
|
|
e.preventDefault();
|
|
};
|
|
|
|
header.ondragenter = (e: React.DragEvent<HTMLDivElement>) => {
|
|
if (i !== dragged && dragged !== -1) {
|
|
if (dragged > i) {
|
|
header.parentElement.className = "th header-reorder highlight-left";
|
|
} else if (dragged < i) {
|
|
header.parentElement.className =
|
|
"th header-reorder highlight-right";
|
|
}
|
|
}
|
|
e.preventDefault();
|
|
};
|
|
|
|
header.ondragleave = (e: React.DragEvent<HTMLDivElement>) => {
|
|
header.parentElement.className = "th header-reorder";
|
|
e.preventDefault();
|
|
};
|
|
|
|
header.ondrop = (e: React.DragEvent<HTMLDivElement>) => {
|
|
header.style = "";
|
|
header.parentElement.className = "th header-reorder";
|
|
if (i !== dragged && dragged !== -1) {
|
|
e.preventDefault();
|
|
const newColumnOrder = [...columnOrder];
|
|
// The dragged column
|
|
const movedColumnName = newColumnOrder.splice(dragged, 1);
|
|
|
|
// If the dragged column exists
|
|
if (movedColumnName && movedColumnName.length === 1) {
|
|
newColumnOrder.splice(i, 0, movedColumnName[0]);
|
|
}
|
|
handleReorderColumn([...newColumnOrder, ...hiddenColumns]);
|
|
} else {
|
|
dragged = -1;
|
|
}
|
|
};
|
|
});
|
|
});
|
|
|
|
const sortTableColumn = (columnIndex: number, asc: boolean) => {
|
|
if (columnIndex === -1) {
|
|
_sortTableColumn("", asc);
|
|
} else {
|
|
const column = columns[columnIndex];
|
|
const columnType = column.metaProperties?.type || ColumnTypes.TEXT;
|
|
if (
|
|
columnType !== ColumnTypes.IMAGE &&
|
|
columnType !== ColumnTypes.VIDEO
|
|
) {
|
|
_sortTableColumn(column.accessor, asc);
|
|
}
|
|
}
|
|
};
|
|
|
|
const selectTableRow = (row: {
|
|
original: Record<string, unknown>;
|
|
index: number;
|
|
}) => {
|
|
onRowClick(row.original, row.index);
|
|
};
|
|
|
|
const toggleAllRowSelect = (
|
|
isSelect: boolean,
|
|
pageData: Row<Record<string, unknown>>[],
|
|
) => {
|
|
if (isSelect) {
|
|
selectAllRow(pageData);
|
|
} else {
|
|
unSelectAllRow();
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Table
|
|
accentColor={props.accentColor}
|
|
applyFilter={applyFilter}
|
|
borderRadius={props.borderRadius}
|
|
boxShadow={props.boxShadow}
|
|
columnSizeMap={columnSizeMap}
|
|
columns={columns}
|
|
compactMode={compactMode}
|
|
data={tableData}
|
|
delimiter={delimiter}
|
|
disableDrag={() => {
|
|
disableDrag(true);
|
|
}}
|
|
editMode={editMode}
|
|
enableDrag={() => {
|
|
disableDrag(false);
|
|
}}
|
|
filters={filters}
|
|
handleResizeColumn={handleResizeColumn}
|
|
height={height}
|
|
isLoading={isLoading}
|
|
isSortable={isSortable}
|
|
isVisibleDownload={isVisibleDownload}
|
|
isVisibleFilters={isVisibleFilters}
|
|
isVisiblePagination={isVisiblePagination}
|
|
isVisibleSearch={isVisibleSearch}
|
|
multiRowSelection={multiRowSelection}
|
|
nextPageClick={nextPageClick}
|
|
pageNo={pageNo - 1}
|
|
pageSize={pageSize || 1}
|
|
prevPageClick={prevPageClick}
|
|
searchKey={searchKey}
|
|
searchTableData={searchTableData}
|
|
selectTableRow={selectTableRow}
|
|
selectedRowIndex={selectedRowIndex}
|
|
selectedRowIndices={selectedRowIndices}
|
|
serverSidePaginationEnabled={serverSidePaginationEnabled}
|
|
sortTableColumn={sortTableColumn}
|
|
toggleAllRowSelect={toggleAllRowSelect}
|
|
totalRecordsCount={totalRecordsCount}
|
|
triggerRowSelection={triggerRowSelection}
|
|
updatePageNo={updatePageNo}
|
|
widgetId={widgetId}
|
|
widgetName={widgetName}
|
|
width={width}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export default React.memo(ReactTableComponent, (prev, next) => {
|
|
return (
|
|
prev.applyFilter === next.applyFilter &&
|
|
prev.compactMode === next.compactMode &&
|
|
prev.delimiter === next.delimiter &&
|
|
prev.disableDrag === next.disableDrag &&
|
|
prev.editMode === next.editMode &&
|
|
prev.isSortable === next.isSortable &&
|
|
prev.filters === next.filters &&
|
|
prev.handleReorderColumn === next.handleReorderColumn &&
|
|
prev.handleResizeColumn === next.handleResizeColumn &&
|
|
prev.height === next.height &&
|
|
prev.isLoading === next.isLoading &&
|
|
prev.isVisibleDownload === next.isVisibleDownload &&
|
|
prev.isVisibleFilters === next.isVisibleFilters &&
|
|
prev.isVisiblePagination === next.isVisiblePagination &&
|
|
prev.isVisibleSearch === next.isVisibleSearch &&
|
|
prev.nextPageClick === next.nextPageClick &&
|
|
prev.onRowClick === next.onRowClick &&
|
|
prev.pageNo === next.pageNo &&
|
|
prev.pageSize === next.pageSize &&
|
|
prev.prevPageClick === next.prevPageClick &&
|
|
prev.searchKey === next.searchKey &&
|
|
prev.searchTableData === next.searchTableData &&
|
|
prev.selectedRowIndex === next.selectedRowIndex &&
|
|
prev.selectedRowIndices === next.selectedRowIndices &&
|
|
prev.serverSidePaginationEnabled === next.serverSidePaginationEnabled &&
|
|
prev.sortTableColumn === next.sortTableColumn &&
|
|
prev.totalRecordsCount === next.totalRecordsCount &&
|
|
prev.triggerRowSelection === next.triggerRowSelection &&
|
|
prev.updatePageNo === next.updatePageNo &&
|
|
prev.widgetId === next.widgetId &&
|
|
prev.widgetName === next.widgetName &&
|
|
prev.width === next.width &&
|
|
equal(prev.columnSizeMap, next.columnSizeMap) &&
|
|
equal(prev.tableData, next.tableData) &&
|
|
prev.borderRadius === next.borderRadius &&
|
|
prev.boxShadow === next.boxShadow &&
|
|
prev.accentColor === next.accentColor &&
|
|
// Using JSON stringify becuase isEqual doesnt work with functions,
|
|
// and we are not changing the columns manually.
|
|
JSON.stringify(prev.columns) === JSON.stringify(next.columns)
|
|
);
|
|
});
|
|
|
|
ReactTableComponent.displayName = "ReactTableComponent";
|