better type signature for undefinedIfEmpty

This commit is contained in:
Sebastian 2022-11-04 11:18:30 -03:00
parent 80ab8ccce9
commit a69e559890
No known key found for this signature in database
GPG Key ID: BE4FF68352439FC1
5 changed files with 20 additions and 24 deletions

View File

@ -22,6 +22,7 @@ import { h, VNode, Fragment } from "preact";
import { useCallback, useState } from "preact/hooks";
import { Translate, Translator, useTranslator } from "../../i18n/index.js";
import { COUNTRY_TABLE } from "../../utils/constants.js";
import { undefinedIfEmpty } from "../../utils/table.js";
import { FormErrors, FormProvider } from "./FormProvider.js";
import { Input } from "./Input.js";
import { InputGroup } from "./InputGroup.js";
@ -154,12 +155,6 @@ const targets = [
const noTargetValue = targets[0];
const defaultTarget = { target: noTargetValue, options: {} };
function undefinedIfEmpty<T>(obj: T): T | undefined {
return Object.keys(obj).some((k) => (obj as any)[k] !== undefined)
? obj
: undefined;
}
export function InputPaytoForm<T>({
name,
readonly,

View File

@ -33,6 +33,7 @@ import { Translate, useTranslator } from "../../../i18n/index.js";
import { DefaultInstanceFormFields } from "../../../components/instance/DefaultInstanceFormFields.js";
import { INSTANCE_ID_REGEX, PAYTO_REGEX } from "../../../utils/constants.js";
import { Amounts } from "@gnu-taler/taler-util";
import { undefinedIfEmpty } from "../../../utils/table.js";
export type Entity = MerchantBackend.Instances.InstanceConfigurationMessage & {
auth_token?: string;
@ -54,12 +55,6 @@ function with_defaults(id?: string): Partial<Entity> {
};
}
function undefinedIfEmpty<T>(obj: T): T | undefined {
return Object.keys(obj).some((k) => (obj as any)[k] !== undefined)
? obj
: undefined;
}
export function CreatePage({ onCreate, onBack, forceId }: Props): VNode {
const [value, valueHandler] = useState(with_defaults(forceId));
const [isTokenSet, updateIsTokenSet] = useState<boolean>(false);

View File

@ -42,6 +42,7 @@ import { InventoryProductForm } from "../../../../components/product/InventoryPr
import { NonInventoryProductFrom } from "../../../../components/product/NonInventoryProductForm.js";
import { InputNumber } from "../../../../components/form/InputNumber.js";
import { InputBoolean } from "../../../../components/form/InputBoolean.js";
import { undefinedIfEmpty } from "../../../../utils/table.js";
interface Props {
onCreate: (d: MerchantBackend.Orders.PostOrderRequest) => void;
@ -126,12 +127,6 @@ const stringIsValidJSON = (value: string) => {
}
};
function undefinedIfEmpty<T>(obj: T): T | undefined {
return Object.keys(obj).some((k) => (obj as any)[k] !== undefined)
? obj
: undefined;
}
export function CreatePage({
onCreate,
onBack,

View File

@ -34,6 +34,7 @@ import { Translate, useTranslator } from "../../../i18n/index.js";
import { DefaultInstanceFormFields } from "../../../components/instance/DefaultInstanceFormFields.js";
import { PAYTO_REGEX } from "../../../utils/constants.js";
import { Amounts } from "@gnu-taler/taler-util";
import { undefinedIfEmpty } from "../../../utils/table.js";
type Entity = MerchantBackend.Instances.InstanceReconfigurationMessage & {
auth_token?: string;
@ -70,12 +71,6 @@ function getTokenValuePart(t?: string): string | undefined {
return match[1];
}
function undefinedIfEmpty<T>(obj: T): T | undefined {
return Object.keys(obj).some((k) => (obj as any)[k] !== undefined)
? obj
: undefined;
}
export function UpdatePage({
onUpdate,
onChangeAuth,

View File

@ -35,3 +35,19 @@ export function buildActions<T extends WithId>(instances: T[], selected: string[
.filter(notEmpty)
.map(id => ({ element: id, type: action }))
}
/**
* For any object or array, return the same object if is not empty.
* not empty:
* - for arrays: at least one element not undefined
* - for objects: at least one property not undefined
* @param obj
* @returns
*/
export function undefinedIfEmpty<T extends Record<string, unknown>|Array<unknown>>(obj: T): T | undefined {
if (obj === undefined) return undefined
return Object.values(obj).some((v) => v !== undefined)
? obj
: undefined;
}