gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 05/07: better type signature for undefinedIfEmpty


From: gnunet
Subject: [taler-wallet-core] 05/07: better type signature for undefinedIfEmpty
Date: Fri, 04 Nov 2022 15:56:22 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit a69e559890d888d10739c8e29549ff37b788743a
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Fri Nov 4 11:18:30 2022 -0300

    better type signature for undefinedIfEmpty
---
 .../src/components/form/InputPaytoForm.tsx               |  7 +------
 .../src/paths/admin/create/CreatePage.tsx                |  7 +------
 .../src/paths/instance/orders/create/CreatePage.tsx      |  7 +------
 .../src/paths/instance/update/UpdatePage.tsx             |  7 +------
 packages/merchant-backoffice-ui/src/utils/table.ts       | 16 ++++++++++++++++
 5 files changed, 20 insertions(+), 24 deletions(-)

diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
index c2aa9c3e9..e8022ca15 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
@@ -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,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
index 16f22ea4b..0d7681e1d 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
@@ -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);
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
index fa0dd7a5a..56bb65b90 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
@@ -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,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
index fb4794bf0..b5328249a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
@@ -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,
diff --git a/packages/merchant-backoffice-ui/src/utils/table.ts 
b/packages/merchant-backoffice-ui/src/utils/table.ts
index 4ebd95807..199e5fda5 100644
--- a/packages/merchant-backoffice-ui/src/utils/table.ts
+++ b/packages/merchant-backoffice-ui/src/utils/table.ts
@@ -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;
+}
+

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]