From d138c15dcd4272cd2358d28867ef35d1550b39cd Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Mon, 15 May 2023 20:35:39 -0600 Subject: Mejora renderizado de formularios --- src/components/forms/account_form.tsx | 25 ++++++++ src/components/forms/address_form.tsx | 78 +++++++++++++++++++++++++ src/components/forms/fields/field.tsx | 23 ++++++++ src/components/forms/fields/field_properties.ts | 9 +++ src/components/forms/fields/select_field.tsx | 10 ++++ 5 files changed, 145 insertions(+) create mode 100644 src/components/forms/account_form.tsx create mode 100644 src/components/forms/address_form.tsx create mode 100644 src/components/forms/fields/field.tsx create mode 100644 src/components/forms/fields/field_properties.ts create mode 100644 src/components/forms/fields/select_field.tsx (limited to 'src/components/forms') diff --git a/src/components/forms/account_form.tsx b/src/components/forms/account_form.tsx new file mode 100644 index 0000000..b0f0fc5 --- /dev/null +++ b/src/components/forms/account_form.tsx @@ -0,0 +1,25 @@ +import { Form } from "react-router-dom"; + +export default function AccountForm({ account }) { + return( +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ ); +} \ No newline at end of file diff --git a/src/components/forms/address_form.tsx b/src/components/forms/address_form.tsx new file mode 100644 index 0000000..d002c4e --- /dev/null +++ b/src/components/forms/address_form.tsx @@ -0,0 +1,78 @@ +import { Form } from "react-router-dom"; +import { formHasErrors } from "../../lib/form_utils"; +import countryList from "react-select-country-list"; +import FieldProperties from "./fields/field_properties"; +import Field from "./fields/field"; +import SelectField from "./fields/select_field"; + +function getFieldProperties(address: any) { + const fields: Array = [ + { + id: "street-field", + type: "text", + name: "street", + label: "Calle", + placeholder: address.street + }, + { + id: "number-field", + type: "number", + name: "number", + label: "Número", + placeholder: address.number + }, + { + id: "zip-code-field", + type: "number", + name: "zip_code", + label: "Código postal", + placeholder: address.zip_code + }, + { + id: "city-field", + type: "text", + name: "city", + label: "Ciudad", + placeholder: address.city + } + ]; + + for(const field of fields) { + if(sessionStorage.getItem(field.name)) + field.error_message = sessionStorage.getItem(field.name); + } + + return fields; +} + +function getCountrySelectOptions(address: any, country_code: string) { + if(country_code == address.country) + return (); + else + return (); +} + +export default function AddressForm({ address }) { + const select_field_properties: FieldProperties = { + id: "country-field", + type: "select", + name: "city", + label: "Ciudad" + } + + const options = countryList().getValues().map(country_code => + getCountrySelectOptions(address, country_code) + ); + + const fields = getFieldProperties(address).map(field_properties => + + ); + + return( +
+ {fields} + + + + ); +} \ No newline at end of file diff --git a/src/components/forms/fields/field.tsx b/src/components/forms/fields/field.tsx new file mode 100644 index 0000000..d7aa342 --- /dev/null +++ b/src/components/forms/fields/field.tsx @@ -0,0 +1,23 @@ +export default function Field({ properties }) { + let field_component; + + if(properties.error_message) { + field_component = ( +
+ + +

{properties.error_message }

+
+ ); + } + else { + field_component = ( +
+ + +
+ ); + } + + return field_component; +} \ No newline at end of file diff --git a/src/components/forms/fields/field_properties.ts b/src/components/forms/fields/field_properties.ts new file mode 100644 index 0000000..d4e8066 --- /dev/null +++ b/src/components/forms/fields/field_properties.ts @@ -0,0 +1,9 @@ +export default interface FieldProperties { + type: string; + id: string; + name: string; + label: string; + placeholder?: string; + error_message?: string; +} + diff --git a/src/components/forms/fields/select_field.tsx b/src/components/forms/fields/select_field.tsx new file mode 100644 index 0000000..75859d9 --- /dev/null +++ b/src/components/forms/fields/select_field.tsx @@ -0,0 +1,10 @@ +export default function SelectField({ properties, options }) { + return( +
+ + +
+ ); +} \ No newline at end of file -- cgit v1.2.3