From 84e2ebe8f2c90debaac7a37651cec5d39d377a52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C5=A1per=20Grom?= Date: Sun, 27 Sep 2026 00:27:49 +0100 Subject: [PATCH 1/4] refactor: convert shared form helpers and components to TypeScript (CM-1579) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gašper Grom --- frontend/src/shared/form/array-input.vue | 55 +++++------- .../{element-change.js => element-change.ts} | 12 ++- frontend/src/shared/form/form-change.js | 17 ---- frontend/src/shared/form/form-change.ts | 23 +++++ frontend/src/shared/form/form-errors.vue | 55 +++++------- frontend/src/shared/form/form-item.vue | 85 +++++++------------ .../src/shared/form/inline-select-input.vue | 55 +++++------- 7 files changed, 125 insertions(+), 177 deletions(-) rename frontend/src/shared/form/{element-change.js => element-change.ts} (51%) delete mode 100644 frontend/src/shared/form/form-change.js create mode 100644 frontend/src/shared/form/form-change.ts diff --git a/frontend/src/shared/form/array-input.vue b/frontend/src/shared/form/array-input.vue index 5f7af0df81..9778532ae5 100644 --- a/frontend/src/shared/form/array-input.vue +++ b/frontend/src/shared/form/array-input.vue @@ -25,36 +25,33 @@ - - - diff --git a/frontend/src/shared/form/element-change.js b/frontend/src/shared/form/element-change.ts similarity index 51% rename from frontend/src/shared/form/element-change.js rename to frontend/src/shared/form/element-change.ts index 01e857d5db..91cd692700 100644 --- a/frontend/src/shared/form/element-change.js +++ b/frontend/src/shared/form/element-change.ts @@ -1,9 +1,15 @@ -import { ref, computed } from 'vue'; +import { + ref, computed, type Ref, type ComputedRef, +} from 'vue'; -export default function elementChangeDetector(element) { +export default function elementChangeDetector(element: Ref): { + temporaryElement: Ref; + elementSnapshot: () => void; + hasElementChanged: ComputedRef; +} { const temporaryElement = ref(''); - function elementSnapshot() { + function elementSnapshot(): void { temporaryElement.value = JSON.stringify(element.value); } diff --git a/frontend/src/shared/form/form-change.js b/frontend/src/shared/form/form-change.js deleted file mode 100644 index 54b7942b01..0000000000 --- a/frontend/src/shared/form/form-change.js +++ /dev/null @@ -1,17 +0,0 @@ -import { ref, computed } from 'vue'; - -export default function formChangeDetector(form) { - const temporaryForm = ref(''); - - function formSnapshot() { - temporaryForm.value = JSON.stringify(form); - } - - const hasFormChanged = computed(() => temporaryForm.value !== JSON.stringify(form), { deep: true }); - - return { - temporaryForm, - formSnapshot, - hasFormChanged, - }; -} diff --git a/frontend/src/shared/form/form-change.ts b/frontend/src/shared/form/form-change.ts new file mode 100644 index 0000000000..25b30e039b --- /dev/null +++ b/frontend/src/shared/form/form-change.ts @@ -0,0 +1,23 @@ +import { + ref, computed, type Ref, type ComputedRef, +} from 'vue'; + +export default function formChangeDetector(form: T): { + temporaryForm: Ref; + formSnapshot: () => void; + hasFormChanged: ComputedRef; +} { + const temporaryForm = ref(''); + + function formSnapshot(): void { + temporaryForm.value = JSON.stringify(form); + } + + const hasFormChanged = computed(() => temporaryForm.value !== JSON.stringify(form)); + + return { + temporaryForm, + formSnapshot, + hasFormChanged, + }; +} diff --git a/frontend/src/shared/form/form-errors.vue b/frontend/src/shared/form/form-errors.vue index dbcdae91cd..841f0ba814 100644 --- a/frontend/src/shared/form/form-errors.vue +++ b/frontend/src/shared/form/form-errors.vue @@ -10,40 +10,29 @@ - - - diff --git a/frontend/src/shared/form/form-item.vue b/frontend/src/shared/form/form-item.vue index abd4ea84ef..016ec1d554 100644 --- a/frontend/src/shared/form/form-item.vue +++ b/frontend/src/shared/form/form-item.vue @@ -33,67 +33,48 @@ - - - diff --git a/frontend/src/shared/form/inline-select-input.vue b/frontend/src/shared/form/inline-select-input.vue index d00f1dd8d6..f04c710ff7 100644 --- a/frontend/src/shared/form/inline-select-input.vue +++ b/frontend/src/shared/form/inline-select-input.vue @@ -50,41 +50,34 @@ - - -