gnunet-svn
[Top][All Lists]
Advanced

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

[taler-typescript-core] 01/08: new input type: secret


From: gnunet
Subject: [taler-typescript-core] 01/08: new input type: secret
Date: Wed, 15 Jan 2025 22:32:47 +0100

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

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

commit 6dc70f3df6ec6c431137ef83f2975de9a987de3f
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Jan 13 13:43:16 2025 -0300

    new input type: secret
---
 packages/web-util/src/forms/field-types.ts         |  4 ++
 .../src/forms/fields/InputSecret.stories.tsx       | 57 ++++++++++++++++++++++
 packages/web-util/src/forms/fields/InputSecret.tsx |  9 ++++
 packages/web-util/src/forms/forms-types.ts         | 11 +++++
 packages/web-util/src/forms/forms-utils.ts         | 13 +++++
 packages/web-util/src/forms/index.stories.ts       |  1 +
 packages/web-util/src/forms/index.ts               |  1 +
 7 files changed, 96 insertions(+)

diff --git a/packages/web-util/src/forms/field-types.ts 
b/packages/web-util/src/forms/field-types.ts
index 91c4b2539..23fcf5fe7 100644
--- a/packages/web-util/src/forms/field-types.ts
+++ b/packages/web-util/src/forms/field-types.ts
@@ -11,6 +11,7 @@ import { InputInteger } from "./fields/InputInteger.js";
 import { InputSelectMultiple } from "./fields/InputSelectMultiple.js";
 import { InputSelectOne } from "./fields/InputSelectOne.js";
 import { InputText } from "./fields/InputText.js";
+import { InputSecret } from "./fields/InputSecret.js";
 import { InputTextArea } from "./fields/InputTextArea.js";
 import { InputToggle } from "./fields/InputToggle.js";
 import { Group } from "./Group.js";
@@ -33,6 +34,7 @@ type FieldType<T extends object = any, K extends keyof T = 
any> = {
   choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];
   absoluteTimeText: Parameters<typeof InputAbsoluteTime<T, K>>[0];
   integer: Parameters<typeof InputInteger<T, K>>[0];
+  secret: Parameters<typeof InputSecret<T, K>>[0];
   toggle: Parameters<typeof InputToggle<T, K>>[0];
   amount: Parameters<typeof InputAmount<T, K>>[0];
 };
@@ -64,6 +66,7 @@ export type UIFormField =
       properties: FieldType["choiceHorizontal"];
     }
   | { type: "integer"; properties: FieldType["integer"] }
+  | { type: "secret"; properties: FieldType["secret"] }
   | { type: "toggle"; properties: FieldType["toggle"] }
   | {
       type: "absoluteTimeText";
@@ -99,6 +102,7 @@ export const UIFormConfiguration: UIFormFieldMap = {
   //@ts-ignore
   choiceHorizontal: InputChoiceHorizontal,
   integer: InputInteger,
+  secret: InputSecret,
   //@ts-ignore
   selectOne: InputSelectOne,
   //@ts-ignore
diff --git a/packages/web-util/src/forms/fields/InputSecret.stories.tsx 
b/packages/web-util/src/forms/fields/InputSecret.stories.tsx
new file mode 100644
index 000000000..e143c3af8
--- /dev/null
+++ b/packages/web-util/src/forms/fields/InputSecret.stories.tsx
@@ -0,0 +1,57 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { TranslatedString } from "@gnu-taler/taler-util";
+import * as tests from "../../tests/hook.js";
+import { DefaultForm as TestedComponent } from "../forms-ui.js";
+import { FormDesign, UIHandlerId } from "../forms-types.js";
+
+export default {
+  title: "Input secret",
+};
+
+type TargetObject = {
+  pwd: string;
+};
+const initial: TargetObject = {
+  pwd: 5,
+};
+
+const design: FormDesign = {
+  type: "double-column",
+  sections: [
+    {
+      title: "this is a simple form" as TranslatedString,
+      fields: [
+        {
+          type: "secret",
+          label: "Password" as TranslatedString,
+          id: "pwd" as UIHandlerId,
+        },
+      ],
+    },
+  ],
+};
+
+export const SimpleComment = tests.createExample(TestedComponent, {
+  initial,
+  design,
+});
diff --git a/packages/web-util/src/forms/fields/InputSecret.tsx 
b/packages/web-util/src/forms/fields/InputSecret.tsx
new file mode 100644
index 000000000..730cb0880
--- /dev/null
+++ b/packages/web-util/src/forms/fields/InputSecret.tsx
@@ -0,0 +1,9 @@
+import { VNode, h } from "preact";
+import { InputLine } from "./InputLine.js";
+import { UIFormProps } from "../FormProvider.js";
+
+export function InputSecret<T extends object, K extends keyof T>(
+  props: UIFormProps<T, K>,
+): VNode {
+  return <InputLine type="password" {...props} />;
+}
diff --git a/packages/web-util/src/forms/forms-types.ts 
b/packages/web-util/src/forms/forms-types.ts
index e604ce274..d5bcced6c 100644
--- a/packages/web-util/src/forms/forms-types.ts
+++ b/packages/web-util/src/forms/forms-types.ts
@@ -54,6 +54,7 @@ export type UIFormElementConfig =
   | UIFormFieldChoiseStacked
   | UIFormFieldFile
   | UIFormFieldInteger
+  | UIFormFieldSecret
   | UIFormFieldSelectMultiple
   | UIFormFieldSelectOne
   | UIFormFieldText
@@ -124,6 +125,10 @@ type UIFormFieldInteger = {
   min?: Integer;
 } & UIFormFieldBaseConfig;
 
+type UIFormFieldSecret = {
+  type: "secret";
+} & UIFormFieldBaseConfig;
+
 export interface SelectUiChoice {
   label: string;
   description?: string;
@@ -310,6 +315,11 @@ const codecForUiFormFieldInteger = (): 
Codec<UIFormFieldInteger> =>
     .property("min", codecOptional(codecForNumber()))
     .build("UIFormFieldInteger");
 
+const codecForUiFormFieldSecret = (): Codec<UIFormFieldSecret> =>
+  codecForUIFormFieldBaseConfigTemplate<UIFormFieldSecret>()
+    .property("type", codecForConstString("secret"))
+    .build("UIFormFieldSecret");
+
 const codecForUiFormFieldSelectMultiple =
   (): Codec<UIFormFieldSelectMultiple> =>
     codecForUIFormFieldBaseConfigTemplate<UIFormFieldSelectMultiple>()
@@ -358,6 +368,7 @@ const codecForUiFormField = (): Codec<UIFormElementConfig> 
=>
     .alternative("choiceStacked", codecForUiFormFieldChoiceStacked())
     .alternative("file", codecForUiFormFieldFile())
     .alternative("integer", codecForUiFormFieldInteger())
+    .alternative("secret", codecForUiFormFieldSecret())
     .alternative("selectMultiple", codecForUiFormFieldSelectMultiple())
     .alternative("selectOne", codecForUiFormFieldSelectOne())
     .alternative("text", codecForUiFormFieldText())
diff --git a/packages/web-util/src/forms/forms-utils.ts 
b/packages/web-util/src/forms/forms-utils.ts
index 5322913cf..b6797d8d1 100644
--- a/packages/web-util/src/forms/forms-utils.ts
+++ b/packages/web-util/src/forms/forms-utils.ts
@@ -177,6 +177,19 @@ export function convertFormConfigToUiField(
           },
         } as UIFormField;
       }
+      case "secret": {
+        return {
+          type: "secret",
+          properties: {
+            ...converBaseFieldsProps(i18n_, config),
+            ...converInputFieldsProps(
+              form,
+              config,
+              getConverterByFieldType(config.type, config),
+            ),
+          },
+        } as UIFormField;
+      }
       case "selectMultiple": {
         return {
           type: "selectMultiple",
diff --git a/packages/web-util/src/forms/index.stories.ts 
b/packages/web-util/src/forms/index.stories.ts
index cdccff050..702114f65 100644
--- a/packages/web-util/src/forms/index.stories.ts
+++ b/packages/web-util/src/forms/index.stories.ts
@@ -10,3 +10,4 @@ export * as a10 from "./fields/InputSelectOne.stories.js";
 export * as a11 from "./fields/InputText.stories.js";
 export * as a12 from "./fields/InputTextArea.stories.js";
 export * as a13 from "./fields/InputToggle.stories.js";
+export * as a14 from "./fields/InputSecret.stories.js";
diff --git a/packages/web-util/src/forms/index.ts 
b/packages/web-util/src/forms/index.ts
index 1ae882ab9..8908166a9 100644
--- a/packages/web-util/src/forms/index.ts
+++ b/packages/web-util/src/forms/index.ts
@@ -25,6 +25,7 @@ export * from "./fields/InputLine.js";
 export * from "./fields/InputSelectMultiple.js";
 export * from "./fields/InputSelectOne.js";
 export * from "./fields/InputText.js";
+export * from "./fields/InputSecret.js";
 export * from "./fields/InputTextArea.js";
 export * from "./fields/InputToggle.js";
 export * from "./TimePicker.js";

-- 
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]