Update list settings types (#1165)

This commit is contained in:
Dawid Tarasiuk 2021-06-15 17:15:14 +02:00 committed by GitHub
parent 236548a897
commit 64c0f0fcc4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 17 deletions

View file

@ -10,6 +10,7 @@ import Metadata from "@saleor/components/Metadata/Metadata";
import { MetadataFormData } from "@saleor/components/Metadata/types";
import PageHeader from "@saleor/components/PageHeader";
import SaveButtonBar from "@saleor/components/SaveButtonBar";
import { ListSettingsUpdate } from "@saleor/components/TablePagination";
import { AttributeDetailsFragment } from "@saleor/fragments/types/AttributeDetailsFragment";
import { AttributeErrorFragment } from "@saleor/fragments/types/AttributeErrorFragment";
import { sectionNames } from "@saleor/intl";
@ -46,7 +47,7 @@ export interface AttributePageProps {
onValueReorder: ReorderAction;
onValueUpdate: (id: string) => void;
settings?: ListSettings;
onUpdateListSettings?: (key: keyof ListSettings, value: any) => void;
onUpdateListSettings?: ListSettingsUpdate;
pageInfo: {
hasNextPage: boolean;
hasPreviousPage: boolean;

View file

@ -3,8 +3,6 @@ import { makeStyles } from "@saleor/theme";
import React from "react";
import { FormattedMessage } from "react-intl";
import { ListSettings } from "../../types";
const useStyles = makeStyles(
theme => ({
label: {
@ -34,14 +32,14 @@ const useStyles = makeStyles(
interface RowNumberSelectProps {
choices: number[];
className?: string;
settings: ListSettings;
onChange(key: keyof ListSettings, value: any);
rowNumber: number;
onChange(value: number);
}
const RowNumberSelect: React.FC<RowNumberSelectProps> = ({
className,
choices,
settings,
rowNumber,
onChange
}) => {
const classes = useStyles({});
@ -54,8 +52,8 @@ const RowNumberSelect: React.FC<RowNumberSelectProps> = ({
<Select
data-test-id="rowNumberSelect"
className={classes.select}
value={settings.rowNumber}
onChange={event => onChange("rowNumber", event.target.value)}
value={rowNumber}
onChange={event => onChange(event.target.value as number)}
>
{choices.length > 0 &&
choices.map(choice => (

View file

@ -52,6 +52,11 @@ const useStyles = makeStyles(
{ name: "TablePagination" }
);
export type ListSettingsUpdate = <T extends keyof ListSettings>(
key: T,
value: ListSettings[T]
) => void;
interface TablePaginationProps {
backIconButtonProps?: Partial<IconButtonProps>;
colSpan: number;
@ -60,9 +65,9 @@ interface TablePaginationProps {
hasNextPage: boolean;
hasPreviousPage: boolean;
nextIconButtonProps?: Partial<IconButtonProps>;
onUpdateListSettings?: ListSettingsUpdate;
onNextPage(event);
onPreviousPage(event);
onUpdateListSettings?(key: keyof ListSettings, value: any): void;
}
const TablePagination: React.FC<TablePaginationProps> = props => {
@ -94,8 +99,8 @@ const TablePagination: React.FC<TablePaginationProps> = props => {
{maybe(() => settings.rowNumber) && (
<RowNumberSelect
choices={[10, 20, 30, 50, 100]}
settings={settings}
onChange={onUpdateListSettings}
rowNumber={settings.rowNumber}
onChange={value => onUpdateListSettings("rowNumber", value)}
/>
)}
</div>

View file

@ -6,7 +6,10 @@ import { ListSettings, ListViews } from "./../types";
export interface UseListSettings<TColumns extends string = string> {
settings: ListSettings<TColumns>;
updateListSettings: (key: keyof ListSettings<TColumns>, value: any) => void;
updateListSettings: <T extends keyof ListSettings<TColumns>>(
key: T,
value: ListSettings<TColumns>[T]
) => void;
}
export default function useListSettings<TColumns extends string = string>(
listName: ListViews
@ -25,7 +28,10 @@ export default function useListSettings<TColumns extends string = string>(
}
}, []);
const updateListSettings = (key: keyof ListSettings, value: any) =>
const updateListSettings = <T extends keyof ListSettings>(
key: T,
value: ListSettings[T]
) =>
setListSettings(settings => ({
...settings,
[listName]: {

View file

@ -3,6 +3,7 @@ import CardSpacer from "@saleor/components/CardSpacer";
import Container from "@saleor/components/Container";
import LanguageSwitch from "@saleor/components/LanguageSwitch";
import PageHeader from "@saleor/components/PageHeader";
import { ListSettingsUpdate } from "@saleor/components/TablePagination";
import { AttributeTranslationDetailsFragment } from "@saleor/fragments/types/AttributeTranslationDetailsFragment";
import { commonMessages, sectionNames } from "@saleor/intl";
import { TranslationsEntitiesPageProps } from "@saleor/translations/types";
@ -27,7 +28,7 @@ export interface TranslationsProductTypesPageProps
extends TranslationsEntitiesPageProps {
data: AttributeTranslationDetailsFragment;
settings?: ListSettings;
onUpdateListSettings?: (key: keyof ListSettings, value: any) => void;
onUpdateListSettings?: ListSettingsUpdate;
pageInfo: {
hasNextPage: boolean;
hasPreviousPage: boolean;

View file

@ -55,9 +55,9 @@ export interface ListProps<TColumns extends string = string> {
onNextPage: () => void;
onPreviousPage: () => void;
onRowClick: (id: string) => () => void;
onUpdateListSettings?: (
key: keyof ListSettings<TColumns>,
value: any
onUpdateListSettings?: <T extends keyof ListSettings<TColumns>>(
key: T,
value: ListSettings<TColumns>[T]
) => void;
onListSettingsReset?: () => void;
}