Improve typing

This commit is contained in:
dominik-zeglen 2020-10-23 12:40:58 +02:00
parent a34d22de8f
commit 63f042a91b
3 changed files with 28 additions and 26 deletions

View file

@ -56,22 +56,23 @@ export interface ProductCreateData extends ProductCreateFormData {
stocks: ProductStockInput[]; stocks: ProductStockInput[];
} }
type ProductCreateHandlers = Record<
| "changeMetadata"
| "selectCategory"
| "selectCollection"
| "selectProductType"
| "selectTaxRate",
FormChange
> &
Record<
"changeStock" | "selectAttribute" | "selectAttributeMultiple",
FormsetChange<string>
> &
Record<"addStock" | "deleteStock", (id: string) => void>;
export interface UseProductCreateFormResult { export interface UseProductCreateFormResult {
change: FormChange; change: FormChange;
data: ProductCreateData; data: ProductCreateData;
handlers: Record< handlers: ProductCreateHandlers;
| "changeMetadata"
| "selectCategory"
| "selectCollection"
| "selectProductType"
| "selectTaxRate",
FormChange
> &
Record<
"changeStock" | "selectAttribute" | "selectAttributeMultiple",
FormsetChange
> &
Record<"addStock" | "deleteStock", (id: string) => void>;
hasChanged: boolean; hasChanged: boolean;
submit: () => Promise<boolean>; submit: () => Promise<boolean>;
} }
@ -186,7 +187,7 @@ function useProductCreateForm(
opts.productTypes, opts.productTypes,
triggerChange triggerChange
); );
const handleStockChange: FormsetChange = (id, value) => { const handleStockChange: FormsetChange<string> = (id, value) => {
triggerChange(); triggerChange();
stocks.change(id, value); stocks.change(id, value);
}; };

View file

@ -62,18 +62,19 @@ export interface ProductUpdateSubmitData extends ProductUpdateFormData {
removeStocks: string[]; removeStocks: string[];
} }
type ProductUpdateHandlers = Record<
"changeMetadata" | "selectCategory" | "selectCollection" | "selectTaxRate",
FormChange
> &
Record<
"changeStock" | "selectAttribute" | "selectAttributeMultiple",
FormsetChange<string>
> &
Record<"addStock" | "deleteStock", (id: string) => void>;
export interface UseProductUpdateFormResult { export interface UseProductUpdateFormResult {
change: FormChange; change: FormChange;
data: ProductUpdateData; data: ProductUpdateData;
handlers: Record< handlers: ProductUpdateHandlers;
"changeMetadata" | "selectCategory" | "selectCollection" | "selectTaxRate",
FormChange
> &
Record<
"changeStock" | "selectAttribute" | "selectAttributeMultiple",
FormsetChange
> &
Record<"addStock" | "deleteStock", (id: string) => void>;
hasChanged: boolean; hasChanged: boolean;
submit: () => Promise<boolean>; submit: () => Promise<boolean>;
} }
@ -185,7 +186,7 @@ function useProductUpdateForm(
attributes.data, attributes.data,
triggerChange triggerChange
); );
const handleStockChange: FormsetChange = (id, value) => { const handleStockChange: FormsetChange<string> = (id, value) => {
triggerChange(); triggerChange();
stocks.change(id, value); stocks.change(id, value);
}; };

View file

@ -8,7 +8,7 @@ import { getAttributeInputFromProductType, ProductType } from "./data";
export function createAttributeChangeHandler( export function createAttributeChangeHandler(
changeAttributeData: FormsetChange<string[]>, changeAttributeData: FormsetChange<string[]>,
triggerChange: () => void triggerChange: () => void
): FormsetChange { ): FormsetChange<string> {
return (attributeId: string, value: string) => { return (attributeId: string, value: string) => {
triggerChange(); triggerChange();
changeAttributeData(attributeId, value === "" ? [] : [value]); changeAttributeData(attributeId, value === "" ? [] : [value]);
@ -19,7 +19,7 @@ export function createAttributeMultiChangeHandler(
changeAttributeData: FormsetChange<string[]>, changeAttributeData: FormsetChange<string[]>,
attributes: FormsetData<ProductAttributeInputData, string[]>, attributes: FormsetData<ProductAttributeInputData, string[]>,
triggerChange: () => void triggerChange: () => void
): FormsetChange { ): FormsetChange<string> {
return (attributeId: string, value: string) => { return (attributeId: string, value: string) => {
const attribute = attributes.find( const attribute = attributes.find(
attribute => attribute.id === attributeId attribute => attribute.id === attributeId