Add format tip for text attribute rows (#2340)

* Add format tip for text attribute rows

* Update changelog with added attribute tip

* Update attributes test snapshots

* Update question-help icons for dark mode
This commit is contained in:
Dawid 2022-10-13 12:41:26 +02:00 committed by GitHub
parent 943b96436c
commit be76836e12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 147 additions and 57 deletions

View file

@ -16,7 +16,7 @@ All notable, unreleased changes to this project will be documented in this file.
- Enable save button on discount pages - #2319 by @orzechdev - Enable save button on discount pages - #2319 by @orzechdev
- Enable save button on page pages - #2325 by @orzechdev - Enable save button on page pages - #2325 by @orzechdev
- Fix pagination errors on voucher and sale pages - #2317 by @orzechdev - Fix pagination errors on voucher and sale pages - #2317 by @orzechdev
- Add format tip for text attribute rows - #2340 by @orzechdev
## 3.4 ## 3.4

View file

@ -7,7 +7,7 @@ export const useStyles = makeStyles(
marginBottom: theme.spacing(), marginBottom: theme.spacing(),
}, },
tooltipIcon: { tooltipIcon: {
fill: "#28234A", fill: theme.palette.type === "dark" ? "#FAFAFA" : "#28234A",
fillOpacity: 0.6, fillOpacity: 0.6,
"&:hover": { "&:hover": {
fillOpacity: 1, fillOpacity: 1,

View file

@ -1,4 +1,5 @@
import { InputAdornment, TextField } from "@material-ui/core"; import { InputAdornment, TextField } from "@material-ui/core";
import { inputTypeMessages } from "@saleor/attributes/components/AttributeDetails/messages";
import { getMeasurementUnitMessage } from "@saleor/attributes/components/AttributeDetails/utils"; import { getMeasurementUnitMessage } from "@saleor/attributes/components/AttributeDetails/utils";
import BasicAttributeRow from "@saleor/components/Attributes/BasicAttributeRow"; import BasicAttributeRow from "@saleor/components/Attributes/BasicAttributeRow";
import ExtendedAttributeRow from "@saleor/components/Attributes/ExtendedAttributeRow"; import ExtendedAttributeRow from "@saleor/components/Attributes/ExtendedAttributeRow";
@ -126,7 +127,10 @@ const AttributeRow: React.FC<AttributeRowProps> = ({
); );
case AttributeInputTypeEnum.PLAIN_TEXT: case AttributeInputTypeEnum.PLAIN_TEXT:
return ( return (
<BasicAttributeRow label={attribute.label}> <BasicAttributeRow
label={attribute.label}
description={intl.formatMessage(inputTypeMessages.plainText)}
>
<TextField <TextField
fullWidth fullWidth
disabled={disabled} disabled={disabled}
@ -149,7 +153,10 @@ const AttributeRow: React.FC<AttributeRowProps> = ({
} = richTextGetters; } = richTextGetters;
const defaultValue = getDefaultValue(attribute.id); const defaultValue = getDefaultValue(attribute.id);
return ( return (
<BasicAttributeRow label={attribute.label}> <BasicAttributeRow
label={attribute.label}
description={intl.formatMessage(inputTypeMessages.richText)}
>
{getShouldMount(attribute.id) && ( {getShouldMount(attribute.id) && (
<RichTextEditor <RichTextEditor
defaultValue={defaultValue} defaultValue={defaultValue}

View file

@ -1,51 +1,25 @@
import { Typography } from "@material-ui/core"; import { Typography } from "@material-ui/core";
import HelpOutline from "@material-ui/icons/HelpOutline";
import Grid from "@saleor/components/Grid"; import Grid from "@saleor/components/Grid";
import { makeStyles } from "@saleor/macaw-ui"; import { Tooltip } from "@saleor/macaw-ui";
import classNames from "classnames"; import classNames from "classnames";
import React from "react"; import React from "react";
const useStyles = makeStyles( import { useBasicAttributeStyles } from "./styles";
theme => ({
attributeSection: {
"&:last-of-type": {
paddingBottom: 0,
},
padding: theme.spacing(2, 0),
wordBreak: "break-word",
},
attributeSectionLabel: {
alignItems: "center",
display: "flex",
},
flex: {
columnGap: theme.spacing(2) + "px",
display: "flex",
flexDirection: "row",
[theme.breakpoints.down("md")]: {
flexDirection: "column",
rowGap: theme.spacing(2) + "px",
},
},
value: {
"&&": {
overflow: "visible",
},
},
}),
{ name: "BasicAttributeRow" },
);
interface BasicAttributeRowProps { interface BasicAttributeRowProps {
label: string | React.ReactNode; label: string | React.ReactNode;
description?: string | React.ReactNode;
flexValueContainer?: boolean; flexValueContainer?: boolean;
} }
const BasicAttributeRow: React.FC<BasicAttributeRowProps> = ({ const BasicAttributeRow: React.FC<BasicAttributeRowProps> = ({
label, label,
description,
children, children,
flexValueContainer, flexValueContainer,
}) => { }) => {
const classes = useStyles(); const classes = useBasicAttributeStyles();
return ( return (
<Grid className={classes.attributeSection} variant="uniform"> <Grid className={classes.attributeSection} variant="uniform">
@ -53,7 +27,14 @@ const BasicAttributeRow: React.FC<BasicAttributeRowProps> = ({
className={classes.attributeSectionLabel} className={classes.attributeSectionLabel}
data-test-id="attribute-label" data-test-id="attribute-label"
> >
<Typography>{label}</Typography> <Typography>
{label}
{description && (
<Tooltip title={description}>
<HelpOutline className={classes.tooltipIcon} />
</Tooltip>
)}
</Typography>
</div> </div>
<div <div
data-test-id="attribute-value" data-test-id="attribute-value"

View file

@ -1,27 +1,9 @@
import { Typography } from "@material-ui/core"; import { Typography } from "@material-ui/core";
import { Button } from "@saleor/components/Button"; import { Button } from "@saleor/components/Button";
import Grid from "@saleor/components/Grid"; import Grid from "@saleor/components/Grid";
import { makeStyles } from "@saleor/macaw-ui";
import React from "react"; import React from "react";
const useStyles = makeStyles( import { useExtendedAttributeStyles } from "./styles";
theme => ({
attributeSection: {
"&:last-of-type": {
paddingBottom: 0,
},
padding: theme.spacing(2, 0),
},
attributeSectionButton: {
float: "right",
},
attributeSectionLabel: {
alignItems: "center",
display: "flex",
},
}),
{ name: "ExtendedAttributeRow" },
);
interface ExtendedAttributeRowProps { interface ExtendedAttributeRowProps {
label: string; label: string;
@ -32,7 +14,7 @@ interface ExtendedAttributeRowProps {
const ExtendedAttributeRow: React.FC<ExtendedAttributeRowProps> = props => { const ExtendedAttributeRow: React.FC<ExtendedAttributeRowProps> = props => {
const { label, selectLabel, disabled, onSelect, children } = props; const { label, selectLabel, disabled, onSelect, children } = props;
const classes = useStyles(props); const classes = useExtendedAttributeStyles(props);
return ( return (
<> <>

View file

@ -23,3 +23,63 @@ export const useStyles = makeStyles(
}), }),
{ name: "AttributeRow" }, { name: "AttributeRow" },
); );
export const useBasicAttributeStyles = makeStyles(
theme => ({
attributeSection: {
"&:last-of-type": {
paddingBottom: 0,
},
padding: theme.spacing(2, 0),
wordBreak: "break-word",
},
attributeSectionLabel: {
alignItems: "center",
display: "flex",
},
flex: {
columnGap: theme.spacing(2) + "px",
display: "flex",
flexDirection: "row",
[theme.breakpoints.down("md")]: {
flexDirection: "column",
rowGap: theme.spacing(2) + "px",
},
},
value: {
"&&": {
overflow: "visible",
},
},
tooltipIcon: {
fill: theme.palette.type === "dark" ? "#FAFAFA" : "#28234A",
fillOpacity: 0.6,
"&:hover": {
fillOpacity: 1,
},
position: "absolute",
padding: theme.spacing(0.25),
marginLeft: theme.spacing(0.75),
},
}),
{ name: "BasicAttributeRow" },
);
export const useExtendedAttributeStyles = makeStyles(
theme => ({
attributeSection: {
"&:last-of-type": {
paddingBottom: 0,
},
padding: theme.spacing(2, 0),
},
attributeSectionButton: {
float: "right",
},
attributeSectionLabel: {
alignItems: "center",
display: "flex",
},
}),
{ name: "ExtendedAttributeRow" },
);

View file

@ -357,6 +357,16 @@ exports[`Storyshots Attributes / Attributes default 1`] = `
class="MuiTypography-root-id MuiTypography-body1-id" class="MuiTypography-root-id MuiTypography-body1-id"
> >
Plain Text Attribute Plain Text Attribute
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id BasicAttributeRow-tooltipIcon-id"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"
/>
</svg>
</div> </div>
</div> </div>
<div <div
@ -411,6 +421,16 @@ exports[`Storyshots Attributes / Attributes default 1`] = `
class="MuiTypography-root-id MuiTypography-body1-id" class="MuiTypography-root-id MuiTypography-body1-id"
> >
Rich Text Attribute Rich Text Attribute
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id BasicAttributeRow-tooltipIcon-id"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"
/>
</svg>
</div> </div>
</div> </div>
<div <div
@ -1131,6 +1151,16 @@ exports[`Storyshots Attributes / Attributes disabled 1`] = `
class="MuiTypography-root-id MuiTypography-body1-id" class="MuiTypography-root-id MuiTypography-body1-id"
> >
Plain Text Attribute Plain Text Attribute
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id BasicAttributeRow-tooltipIcon-id"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"
/>
</svg>
</div> </div>
</div> </div>
<div <div
@ -1186,6 +1216,16 @@ exports[`Storyshots Attributes / Attributes disabled 1`] = `
class="MuiTypography-root-id MuiTypography-body1-id" class="MuiTypography-root-id MuiTypography-body1-id"
> >
Rich Text Attribute Rich Text Attribute
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id BasicAttributeRow-tooltipIcon-id"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"
/>
</svg>
</div> </div>
</div> </div>
<div <div
@ -2142,6 +2182,16 @@ exports[`Storyshots Attributes / Attributes selected 1`] = `
class="MuiTypography-root-id MuiTypography-body1-id" class="MuiTypography-root-id MuiTypography-body1-id"
> >
Plain Text Attribute Plain Text Attribute
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id BasicAttributeRow-tooltipIcon-id"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"
/>
</svg>
</div> </div>
</div> </div>
<div <div
@ -2197,6 +2247,16 @@ exports[`Storyshots Attributes / Attributes selected 1`] = `
class="MuiTypography-root-id MuiTypography-body1-id" class="MuiTypography-root-id MuiTypography-body1-id"
> >
Rich Text Attribute Rich Text Attribute
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id BasicAttributeRow-tooltipIcon-id"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"
/>
</svg>
</div> </div>
</div> </div>
<div <div