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

feat(18117): Add info popups for MCDA layer parameters #753

Merged
merged 7 commits into from
Jun 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/components/BivariateLegend/CornerTooltipWrapper.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { cloneElement, isValidElement } from 'react';
import clsx from 'clsx';
import { TooltipWrapper } from '~components/TooltipTrigger';
import { PopupTooltipWrapper } from '~components/PopupTooltipTrigger';
import { formatSentimentDirection } from '~utils/bivariate';
import { LOW, HIGH, isBottomSide, isLeftSide, CORNER_POINTS_INDEXES } from './const';
import s from './CornerTooltipWrapper.module.css';
Expand Down Expand Up @@ -31,15 +31,15 @@ const CornerTooltipWrapper = ({ children, hints }: CornerTooltipWrapperProps) =>
};

return isValidElement(children) ? (
<TooltipWrapper renderTooltip={renderTooltip}>
<PopupTooltipWrapper renderTooltip={renderTooltip}>
{({ showTooltip, hideTooltip }) =>
cloneElement(children, {
// @ts-expect-error - react version update should fix that
onCellPointerOver: showTooltip,
onCellPointerLeave: hideTooltip,
})
}
</TooltipWrapper>
</PopupTooltipWrapper>
) : null;
};

Expand Down
4 changes: 2 additions & 2 deletions src/components/LabelWithTooltip/LabelWithTooltip.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { TooltipTrigger } from '~components/TooltipTrigger';
import { PopupTooltipTrigger } from '~components/PopupTooltipTrigger';
import { Label } from '~components/Label/Label';

interface LabelWithTooltipProps {
Expand All @@ -14,6 +14,6 @@ export const LabelWithTooltip = ({
}: LabelWithTooltipProps) => (
<Label className={className}>
{text}
<TooltipTrigger tipText={description} showedOnHover={true} />
<PopupTooltipTrigger tipText={description} showedOnHover={true} />
</Label>
);
4 changes: 2 additions & 2 deletions src/components/LayerInfo/LayerInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useMemo } from 'react';
import { TooltipTrigger } from '~components/TooltipTrigger';
import { PopupTooltipTrigger } from '~components/PopupTooltipTrigger';

export type LayerInfo = {
name?: string;
Expand Down Expand Up @@ -36,7 +36,7 @@ export const LayerInfo = React.memo(

if (infoString) {
return (
<TooltipTrigger
<PopupTooltipTrigger
tipText={infoString}
tooltipId={tooltipId}
className={className}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import clsx from 'clsx';
import { useAction } from '@reatom/react-v2';
import { InfoOutline16 } from '@konturio/default-icons';
import { currentTooltipAtom } from '~core/shared_state/currentTooltip';
import s from './TooltipTrigger.module.css';
import s from './PopupTooltipTrigger.module.css';

interface TooltipProps {
tipText: string;
Expand All @@ -12,7 +12,7 @@ interface TooltipProps {
icon?: JSX.Element;
}

export const TooltipTrigger = ({
export const PopupTooltipTrigger = ({
icon = <InfoOutline16 />,
tipText,
className,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ interface TooltipWrapperProps {
popupClasses?: { popupContent?: string };
}

const TooltipWrapper = memo(
const PopupTooltipWrapper = memo(
({
children,
tooltipText,
Expand Down Expand Up @@ -72,6 +72,6 @@ const TooltipWrapper = memo(
},
);

TooltipWrapper.displayName = 'TooltipWrapper';
PopupTooltipWrapper.displayName = 'PopupTooltipWrapper';

export { TooltipWrapper };
export { PopupTooltipWrapper };
2 changes: 2 additions & 0 deletions src/components/PopupTooltipTrigger/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { PopupTooltipTrigger } from './PopupTooltipTrigger';
export { PopupTooltipWrapper } from './PopupTooltipWrapper';
2 changes: 0 additions & 2 deletions src/components/TooltipTrigger/index.ts

This file was deleted.

8 changes: 8 additions & 0 deletions src/core/localization/translations/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,14 @@
"range_from_cannot_be_bigger": "The ‘from’ value cannot be bigger than the ‘to’ value",
"range_cannot_be_empty": "Range cannot be empty",
"range_must_be_a_number": "Range must be a valid number"
},
"tips": {
"range": "Define the minimum and maximum values considered for analysis. For example, if analysing temperature data, set the range from the lowest to the highest temperatures recorded in the dataset.",
"sentiment": "Determine the direction of sentiment for the layer's impact on the analysis:\n* **Bad → Good**: Higher values indicate a positive sentiment.\n* **Good → Bad**: Higher values indicate a negative sentiment.",
"weight": "By default, all layers contribute equally to the analysis through a weighted average. Adjusting the increased weight of a layer (2, 3, etc.) allows you to assign additional importance to it in the analysis.",
"transform": "Apply additional calculations to the layer to linearize distribution. Calculates before normalization:\n * **No**: No additional transformation is applied.\n* **Natural logarithm**: Apply the natural logarithm function to the values.\n* **Square root**: Apply the square root function to the values.\n* **Cube root**: Apply the cube root function to the values.\n\nBy default, transformation with the least skew is selected.",
"normalize": "Adjusts values to a standardized scale. This helps compare them easily and make decisions.\n* **Standard score scaling**: This option adjusts values to a standardized scale, ensuring they are all comparable.\n* **No (for specialists only)**: Leaves values unmodified.",
"outliers": "* **As values on limits**: Keep 0 and 1 for min and max, but allow outlier scores beyond this range.\n* **Exclude**: Exclude areas where values are out of range."
}
},
"bad": "Bad",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { InfoOutline16 } from '@konturio/default-icons';
import { useLayoutEffect, useRef } from 'react';
import { i18n } from '~core/localization';
import { TooltipWrapper } from '~components/TooltipTrigger';
import { PopupTooltipWrapper } from '~components/PopupTooltipTrigger';
import s from './AxisCaptions.module.css';

const AXIS_CAPTIONS_TOOTIP_TEXT = (
Expand Down Expand Up @@ -30,7 +30,7 @@ export const AxisCaptions = ({ baseDimension = 0 }: { baseDimension: number }) =
return (
<div className={s.axisCaptionRoot} ref={rootRef}>
<div className={s.axisCaptionAnchor} style={{ left: -baseDimension }}>
<TooltipWrapper
<PopupTooltipWrapper
hoverBehavior={false}
tooltipId="axis_caption"
tooltipText={AXIS_CAPTIONS_TOOTIP_TEXT}
Expand All @@ -51,7 +51,7 @@ export const AxisCaptions = ({ baseDimension = 0 }: { baseDimension: number }) =
<LongArrow position="right" />
</div>
)}
</TooltipWrapper>
</PopupTooltipWrapper>
</div>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { i18n } from '~core/localization';
import { TooltipWrapper } from '~components/TooltipTrigger';
import { PopupTooltipWrapper } from '~components/PopupTooltipTrigger';
import styles from './DenominatorIcon.module.css';

interface DenominatorIconProps {
Expand Down Expand Up @@ -140,7 +140,7 @@ const DenominatorIcon = ({ iconId }: DenominatorIconProps) => {
const tooltipText = tooltipTextMapper[iconId] || i18n.t('bivariate.matrix.icon.roads');

return (
<TooltipWrapper tooltipText={tooltipText}>
<PopupTooltipWrapper tooltipText={tooltipText}>
{({ showTooltip, hideTooltip }) => (
<span
className={styles.denominatorIcon}
Expand All @@ -150,7 +150,7 @@ const DenominatorIcon = ({ iconId }: DenominatorIconProps) => {
{icon}
</span>
)}
</TooltipWrapper>
</PopupTooltipWrapper>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
import { TooltipTrigger } from '~components/TooltipTrigger';
import { PopupTooltipTrigger } from '~components/PopupTooltipTrigger';
import { LAYERS_PANEL_FEATURE_ID } from '~features/layers_panel/constants';
import s from './MCDALayerParameterRow.module.css';

export type MCDALayerParameterRowProps = {
name: string;
tipText: string;
infoText: string;
children?: JSX.Element | JSX.Element[];
};

export function MCDALayerParameterRow({
name,
tipText,
infoText,
children,
}: MCDALayerParameterRowProps) {
return (
<div className={s.inputLine}>
<span className={s.inputLinelabel}>
{name}
{/* TODO: hidden temporarily until we add content for these popups */}
{/* <TooltipTrigger
<PopupTooltipTrigger
className={s.infoButton}
tipText={tipText}
tipText={infoText}
tooltipId={LAYERS_PANEL_FEATURE_ID}
/> */}
/>
</span>
<div className={s.inputContainer}>{children}</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,10 @@ export function MCDALayerParameters({ layer, onLayerEdited }: MCDALayerLegendPro
// Edit mode
<div className={s.layerEditContainer}>
{/* RANGE */}
<MCDALayerParameterRow name={i18n.t('mcda.layer_editor.range')} tipText="">
<MCDALayerParameterRow
name={i18n.t('mcda.layer_editor.range')}
infoText={i18n.t('mcda.layer_editor.tips.range')}
>
<div className={s.rangeInputContainer}>
<Input
className={s.rangeInputRoot}
Expand Down Expand Up @@ -312,7 +315,10 @@ export function MCDALayerParameters({ layer, onLayerEdited }: MCDALayerLegendPro
</div>
</MCDALayerParameterRow>
{/* OUTLIERS */}
<MCDALayerParameterRow name={i18n.t('mcda.layer_editor.outliers')} tipText="">
<MCDALayerParameterRow
name={i18n.t('mcda.layer_editor.outliers')}
infoText={i18n.t('mcda.layer_editor.tips.outliers')}
>
<Select
className={s.selectInput}
classes={{
Expand All @@ -328,7 +334,7 @@ export function MCDALayerParameters({ layer, onLayerEdited }: MCDALayerLegendPro
{/* SENTIMENT */}
<MCDALayerParameterRow
name={i18n.t('mcda.layer_editor.sentiment')}
tipText=""
infoText={i18n.t('mcda.layer_editor.tips.sentiment')}
>
<Select
className={s.selectInput}
Expand All @@ -343,7 +349,10 @@ export function MCDALayerParameters({ layer, onLayerEdited }: MCDALayerLegendPro
/>
</MCDALayerParameterRow>
{/* WEIGHT */}
<MCDALayerParameterRow name={i18n.t('mcda.layer_editor.weight')} tipText="">
<MCDALayerParameterRow
name={i18n.t('mcda.layer_editor.weight')}
infoText={i18n.t('mcda.layer_editor.tips.weight')}
>
<Input
classes={{
inputBox: s.textInputBox,
Expand All @@ -367,7 +376,7 @@ export function MCDALayerParameters({ layer, onLayerEdited }: MCDALayerLegendPro
{/* TRANSFORM */}
<MCDALayerParameterRow
name={i18n.t('mcda.layer_editor.transform')}
tipText=""
infoText={i18n.t('mcda.layer_editor.tips.transform')}
>
<Select
className={s.selectInput}
Expand All @@ -384,7 +393,7 @@ export function MCDALayerParameters({ layer, onLayerEdited }: MCDALayerLegendPro
{/* NORMALIZE */}
<MCDALayerParameterRow
name={i18n.t('mcda.layer_editor.normalize')}
tipText=""
infoText={i18n.t('mcda.layer_editor.tips.normalize')}
>
<Select
className={s.selectInput}
Expand Down
Loading