Fix react/jsx-key ESLint rule (#4046)

This commit is contained in:
Krzysztof Żuraw 2023-08-02 10:05:24 +02:00 committed by GitHub
parent 8fb3b43295
commit a8794d41a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 43 additions and 16 deletions

View file

@ -0,0 +1,5 @@
---
"saleor-dashboard": patch
---
Fix `react/jsx-key` eslint rule

View file

@ -110,8 +110,7 @@
"no-useless-catch": "off", "no-useless-catch": "off",
"no-useless-escape": "off", "no-useless-escape": "off",
"prefer-promise-reject-errors": "off", "prefer-promise-reject-errors": "off",
"react/display-name": "off", "react/display-name": "warn"
"react/jsx-key": "warn"
}, },
"ignorePatterns": ["node_modules/", "**/types/**/*", "type-policies.ts"] "ignorePatterns": ["node_modules/", "**/types/**/*", "type-policies.ts"]
} }

View file

@ -37,8 +37,8 @@ export const ButtonWithDropdown: React.FC<ButtonWithDropdownProps> = ({
boxShadow="overlay" boxShadow="overlay"
backgroundColor="surfaceNeutralPlain" backgroundColor="surfaceNeutralPlain"
> >
{options.map(item => ( {options.map((item, idx) => (
<Dropdown.Item> <Dropdown.Item key={`dropdown-item-${idx}`}>
<List.Item <List.Item
borderRadius={4} borderRadius={4}
paddingX={1.5} paddingX={1.5}

View file

@ -72,7 +72,7 @@ export interface MenuItemsActions {
} }
export interface DatagridProps { export interface DatagridProps {
fillHandle?: boolean, fillHandle?: boolean;
addButtonLabel?: string; addButtonLabel?: string;
availableColumns: readonly AvailableColumn[]; availableColumns: readonly AvailableColumn[];
emptyText: string; emptyText: string;
@ -574,6 +574,7 @@ export const Datagrid: React.FC<DatagridProps> = ({
.fill(0) .fill(0)
.map((_, index) => ( .map((_, index) => (
<RowActions <RowActions
key={`row-actions-${index}`}
menuItems={menuItems(index)} menuItems={menuItems(index)}
disabled={index >= rowsTotal - added.length} disabled={index >= rowsTotal - added.length}
/> />

View file

@ -70,7 +70,10 @@ export const FilterKeyValueField = <K extends string = string>({
<div className={classes.formWrapper}> <div className={classes.formWrapper}>
<div className={classes.fieldsWrapper}> <div className={classes.fieldsWrapper}>
{values.map((innerField, index) => ( {values.map((innerField, index) => (
<div className={classes.metadataField}> <div
className={classes.metadataField}
key={`${innerField.key}-${index}`}
>
<TextField <TextField
fullWidth fullWidth
name={filter.name} name={filter.name}

View file

@ -54,6 +54,7 @@ export const TimelineEventHeader: React.FC<
marginRight: 0.5, marginRight: 0.5,
})} })}
onClick={() => navigate(link)} onClick={() => navigate(link)}
key={`timeline-event-${link}`}
> >
{text} {text}
</Link> </Link>
@ -61,7 +62,12 @@ export const TimelineEventHeader: React.FC<
} }
return ( return (
<Text variant="caption" size="large" marginRight={0.5}> <Text
variant="caption"
size="large"
marginRight={0.5}
key={`timeline-event-${text}`}
>
{text} {text}
</Text> </Text>
); );

View file

@ -65,10 +65,10 @@ const NoteMessage: React.FC<NoteMessageProps> = ({ message }) => (
<> <>
{message.split("\n").map(string => { {message.split("\n").map(string => {
if (string === "") { if (string === "") {
return <br />; return <br key={`break-${string}`} />;
} }
return <Typography>{string}</Typography>; return <Typography key={`note-${string}`}>{string}</Typography>;
})} })}
</> </>
); );

View file

@ -118,7 +118,11 @@ export const ConfigurationPage: React.FC<ConfigurationPageProps> = props => {
hasUserMenuItemPermissions(menuItem, user), hasUserMenuItemPermissions(menuItem, user),
) )
.map((item, itemIndex) => ( .map((item, itemIndex) => (
<Link className={classes.link} to={item.url}> <Link
className={classes.link}
to={item.url}
key={`${item.title}-${itemIndex}`}
>
<NavigationCard <NavigationCard
className={classes.navigationCard} className={classes.navigationCard}
key={itemIndex} key={itemIndex}

View file

@ -123,6 +123,7 @@ const OrderGrantRefundPage: React.FC<OrderGrantRefundPageProps> = ({
/> />
{order?.fulfillments?.map?.(fulfillment => ( {order?.fulfillments?.map?.(fulfillment => (
<ProductsCard <ProductsCard
key={fulfillment.id}
title={intl.formatMessage( title={intl.formatMessage(
getOrderTitleMessage(fulfillment.status), getOrderTitleMessage(fulfillment.status),
)} )}

View file

@ -98,6 +98,7 @@ const OrderHistory: React.FC<OrderHistoryProps> = props => {
if (isTimelineEventOfType("extendable", type)) { if (isTimelineEventOfType("extendable", type)) {
return ( return (
<ExtendedTimelineEvent <ExtendedTimelineEvent
key={event.id}
event={event} event={event}
orderCurrency={orderCurrency} orderCurrency={orderCurrency}
hasPlainDate={true} hasPlainDate={true}

View file

@ -124,7 +124,7 @@ const OrderPayment: React.FC<OrderPaymentProps> = props => {
<CardContent className={classes.payments}> <CardContent className={classes.payments}>
<div className={classes.root}> <div className={classes.root}>
{order?.discounts?.map(discount => ( {order?.discounts?.map(discount => (
<div> <div key={discount.id}>
<FormattedMessage {...orderPaymentMessages.discount} /> <FormattedMessage {...orderPaymentMessages.discount} />
<HorizontalSpacer spacing={4} /> <HorizontalSpacer spacing={4} />
<span className={classes.supportText}> <span className={classes.supportText}>

View file

@ -122,7 +122,7 @@ const OrderSendRefundPage: React.FC<OrderSendRefundPageProps> = ({
{loading && <Skeleton />} {loading && <Skeleton />}
<ul className={classes.dataList}> <ul className={classes.dataList}>
{order?.transactions.map(transaction => ( {order?.transactions.map(transaction => (
<DataLine label={transaction.name}> <DataLine label={transaction.name} key={transaction.id}>
<DataLineMoney money={transaction.refundedAmount} /> <DataLineMoney money={transaction.refundedAmount} />
</DataLine> </DataLine>
))} ))}

View file

@ -65,6 +65,7 @@ const OrderSummaryCard: React.FC<OrderPaymentProps> = ({ order }) => {
/> />
{order?.discounts?.map(discount => ( {order?.discounts?.map(discount => (
<SummaryLine <SummaryLine
key={discount.id}
text={<FormattedMessage {...orderSummaryMessages.discount} />} text={<FormattedMessage {...orderSummaryMessages.discount} />}
subText={ subText={
discount.type === OrderDiscountType.MANUAL discount.type === OrderDiscountType.MANUAL

View file

@ -45,10 +45,10 @@ export const CardTitle: React.FC<CardTitleProps> = ({
chargePendingAmount, chargePendingAmount,
canceledAmount, canceledAmount,
chargedAmount, chargedAmount,
authorizedAmount authorizedAmount,
} = transaction; } = transaction;
const title = capitalize(transaction.name || "Transaction") const title = capitalize(transaction.name || "Transaction");
return ( return (
<DefaultCardTitle <DefaultCardTitle
className={className} className={className}
@ -127,7 +127,7 @@ export const CardTitle: React.FC<CardTitleProps> = ({
transaction.actions transaction.actions
.filter(action => action !== TransactionActionEnum.REFUND) .filter(action => action !== TransactionActionEnum.REFUND)
.map(action => ( .map(action => (
<div> <div key={`translation-action-${action}`}>
<Button <Button
variant="tertiary" variant="tertiary"
onClick={() => onClick={() =>

View file

@ -492,6 +492,7 @@ const ProductExportDialogInfo: React.FC<ProductExportDialogInfoProps> = ({
<div className={classes.quickPeekContainer}> <div className={classes.quickPeekContainer}>
{selectedInventoryFields.slice(0, maxChips).map(field => ( {selectedInventoryFields.slice(0, maxChips).map(field => (
<Chip <Chip
key={field}
className={classes.chip} className={classes.chip}
label={getFieldLabel(field)} label={getFieldLabel(field)}
onClose={() => onClose={() =>
@ -508,6 +509,7 @@ const ProductExportDialogInfo: React.FC<ProductExportDialogInfoProps> = ({
.slice(0, maxChips - selectedInventoryFields.length) .slice(0, maxChips - selectedInventoryFields.length)
.map(warehouseId => ( .map(warehouseId => (
<Chip <Chip
key={warehouseId}
className={classes.chip} className={classes.chip}
label={ label={
warehouses.find( warehouses.find(

View file

@ -38,7 +38,11 @@ export const AvailabilityCard: React.FC<AvailabilityCardProps> = ({
<CardContainer cardTitle={children}> <CardContainer cardTitle={children}>
<ChannelsList summary={channelListSummary}> <ChannelsList summary={channelListSummary}>
{items.map(channel => ( {items.map(channel => (
<ChannelsListItem {...channel} listings={productChannelListings} /> <ChannelsListItem
{...channel}
listings={productChannelListings}
key={channel.id}
/>
))} ))}
</ChannelsList> </ChannelsList>
</CardContainer> </CardContainer>