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

View file

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

View file

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

View file

@ -6,7 +6,10 @@ import { ListSettings, ListViews } from "./../types";
export interface UseListSettings<TColumns extends string = string> { export interface UseListSettings<TColumns extends string = string> {
settings: ListSettings<TColumns>; 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>( export default function useListSettings<TColumns extends string = string>(
listName: ListViews 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 => ({ setListSettings(settings => ({
...settings, ...settings,
[listName]: { [listName]: {

View file

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

View file

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