Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#9553: Improving readability of long attribute values in attribute table and table widgets #9701

Merged
merged 8 commits into from
Nov 21, 2023
Prev Previous commit
Next Next commit
#9553: create a separate enhnacer for handleLongText and use it for f…
…ormatter table cell
  • Loading branch information
mahmoudadel54 committed Nov 14, 2023
commit f58b394b62b636c40f5a604678333a28beda4ca3
27 changes: 27 additions & 0 deletions web/client/components/misc/enhancers/handleLongTextEnhancer.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import React from "react";
import OverlayTrigger from "../OverlayTrigger";
import { Tooltip } from "react-bootstrap";

export const handleLongTextEnhancer = (props, RenderFormatter) => {
const { value } = props;
const cellRef = React.useRef(null);
const contentRef = React.useRef(null);
const [isContentOverflowing, setIsContentOverflowing] = React.useState(false);

const handleMouseEnter = () => {
const cellWidth = cellRef.current.offsetWidth;
const contentWidth = contentRef.current.offsetWidth;
setIsContentOverflowing(contentWidth > cellWidth);
};

return (<OverlayTrigger
placement="top"
overlay={isContentOverflowing ? <Tooltip id="tooltip">{RenderFormatter ? <RenderFormatter {...props} /> : value}</Tooltip> : <></>}
mahmoudadel54 marked this conversation as resolved.
Show resolved Hide resolved
>
<div ref={cellRef} onMouseEnter={handleMouseEnter}>
<span ref={contentRef}>
<span>{RenderFormatter ? <RenderFormatter {...props} /> : value}</span>
</span>
</div>
</OverlayTrigger>);
};
34 changes: 2 additions & 32 deletions web/client/utils/FeatureGridUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@ import {
} from './ogc/WFS/base';

import { applyDefaultToLocalizedString } from '../components/I18N/LocalizedString';
import React from 'react';
import OverlayTrigger from '../components/misc/OverlayTrigger';
import { Tooltip } from 'react-bootstrap';
import { handleLongTextEnhancer } from '../components/misc/enhancers/handleLongTextEnhancer';

const getGeometryName = (describe) => get(findGeometryProperty(describe), "name");
const getPropertyName = (name, describe) => name === "geometry" ? getGeometryName(describe) : name;
Expand Down Expand Up @@ -119,34 +117,6 @@ export const getCurrentPaginationOptions = ({ startPage, endPage }, oldPages, si
};


const formatterWrapperForLongContent = (props, RenderFormatter) => {
const { value } = props;
const cellRef = React.useRef(null);
const contentRef = React.useRef(null);
const [isContentOverflowing, setIsContentOverflowing] = React.useState(false);

const handleMouseEnter = () => {
const cellWidth = cellRef.current.offsetWidth;
const contentWidth = contentRef.current.offsetWidth;

if (contentWidth > cellWidth) {
setIsContentOverflowing(contentWidth > cellWidth);
} else setIsContentOverflowing(false);
};

return (<OverlayTrigger
placement="top"
overlay={isContentOverflowing ? <Tooltip id="tooltip">{RenderFormatter ? <RenderFormatter {...props} /> : value}</Tooltip> : <></>}
>
<div ref={cellRef} onMouseEnter={handleMouseEnter}>
<span ref={contentRef}>
<span>{RenderFormatter ? <RenderFormatter {...props} /> : value}</span>
</span>
</div>
</OverlayTrigger>);
};


/**
* Utility function to get from a describeFeatureType response the columns to use in the react-data-grid
* @param {object} describe describeFeatureType response
Expand Down Expand Up @@ -178,7 +148,7 @@ export const featureTypeToGridColumns = (
editable,
filterable,
editor: getEditor(desc, field),
formatter: (props_) => formatterWrapperForLongContent(props_, getFormatter(desc, field)),
formatter: (props)=>handleLongTextEnhancer(props, getFormatter(desc, field)),
filterRenderer: getFilterRenderer(desc, field)
};
});
Expand Down