From 93a8d49f0a2b96164c04bc03dc6cd473c63ceb69 Mon Sep 17 00:00:00 2001 From: Alexander Samaniego <69481177+alexsam29@users.noreply.github.com> Date: Tue, 8 Nov 2022 02:53:22 -0500 Subject: [PATCH] feat(form): implement unique IDs (#182) * Added Short Unique ID npm library * Added unique ID to form-control * Added unique ID to form-group * Unique ID added to
* Added unique IDs to control components * Added IDs to label and fieldset * Update Form.astro with requested changes Co-authored-by: Ayo Ayco * Adjustments for requested changes. Co-authored-by: Ayo Ayco --- package-lock.json | 17 ++++++++++++++++- package.json | 3 ++- packages/form/components/FieldSet.astro | 2 +- packages/form/components/Form.astro | 5 ++++- packages/form/components/Label.astro | 4 ++-- .../form/components/controls/Dropdown.astro | 2 +- packages/form/components/controls/Input.astro | 2 +- .../form/components/controls/RadioGroup.astro | 1 + .../form/components/controls/TextArea.astro | 2 +- packages/form/core/form-control.ts | 8 ++++++++ packages/form/core/form-group.ts | 4 ++++ 11 files changed, 41 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4080477..eb91b5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,8 @@ "packages/common" ], "dependencies": { - "prettier-plugin-astro": "^0.7.0" + "prettier-plugin-astro": "^0.7.0", + "short-unique-id": "^4.4.4" } }, "apps/demo": { @@ -7578,6 +7579,15 @@ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" }, + "node_modules/short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==", + "bin": { + "short-unique-id": "bin/short-unique-id", + "suid": "bin/short-unique-id" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -14421,6 +14431,11 @@ } } }, + "short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", diff --git a/package.json b/package.json index 903c644..8cb1380 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "packages/common" ], "dependencies": { - "prettier-plugin-astro": "^0.7.0" + "prettier-plugin-astro": "^0.7.0", + "short-unique-id": "^4.4.4" } } diff --git a/packages/form/components/FieldSet.astro b/packages/form/components/FieldSet.astro index 5c3759d..d8918cd 100644 --- a/packages/form/components/FieldSet.astro +++ b/packages/form/components/FieldSet.astro @@ -11,7 +11,7 @@ export interface Props { const { group, showValidationHints, readOnly = false } = Astro.props; --- -
+
{group.name && {group.name}} { group?.controls?.map((control) => ( diff --git a/packages/form/components/Form.astro b/packages/form/components/Form.astro index 8042e9f..38bdfc7 100644 --- a/packages/form/components/Form.astro +++ b/packages/form/components/Form.astro @@ -3,6 +3,7 @@ import type { Submit } from '@astro-reactive/common'; import { FormGroup, FormControl } from '../core'; import FieldSet from './FieldSet.astro'; import Field from './Field.astro'; +import ShortUniqueId from 'short-unique-id'; export interface Props { formGroups: FormGroup | FormGroup[]; @@ -20,14 +21,16 @@ const { readOnly = false, } = Astro.props; +const uid = new ShortUniqueId({ length: 9 }); const formTheme = theme ?? 'light'; const formName = Array.isArray(formGroups) ? null : formGroups?.name || null; +const formId = Array.isArray(formGroups) ? uid() : formGroups?.id || null; --- { diff --git a/packages/form/components/Label.astro b/packages/form/components/Label.astro index 0780471..caa8d12 100644 --- a/packages/form/components/Label.astro +++ b/packages/form/components/Label.astro @@ -16,7 +16,7 @@ const isRequired: boolean = showValidationHints && validators.includes('validato { control.label && control.type !== "checkbox" && ( -