From 995cdd3fecc2a678d9966e7da6b17da95ea3ab92 Mon Sep 17 00:00:00 2001 From: mahdahar <89adham@gmail.com> Date: Thu, 19 Feb 2026 07:12:11 +0700 Subject: [PATCH] Update test modal components with improved UX and add TestTypeSelector --- .../(app)/master-data/tests/+page.svelte | 27 +++- .../tests/test-modal/BasicInfoForm.svelte | 57 ++++---- .../tests/test-modal/GroupMembersTab.svelte | 135 ++++++------------ .../tests/test-modal/NumericRefRange.svelte | 4 +- .../tests/test-modal/TestTypeSelector.svelte | 43 ++++++ 5 files changed, 135 insertions(+), 131 deletions(-) create mode 100644 src/routes/(app)/master-data/tests/test-modal/TestTypeSelector.svelte diff --git a/src/routes/(app)/master-data/tests/+page.svelte b/src/routes/(app)/master-data/tests/+page.svelte index ccbcdec..6fbc406 100644 --- a/src/routes/(app)/master-data/tests/+page.svelte +++ b/src/routes/(app)/master-data/tests/+page.svelte @@ -6,11 +6,12 @@ import DataTable from '$lib/components/DataTable.svelte'; import Modal from '$lib/components/Modal.svelte'; import TestModal from './TestModal.svelte'; + import TestTypeSelector from './test-modal/TestTypeSelector.svelte'; import { validateNumericRange, validateTholdRange, validateTextRange, validateVsetRange } from './referenceRange.js'; import { Plus, Edit2, Trash2, ArrowLeft, Filter, Search, ChevronDown, ChevronRight, Microscope, Variable, Calculator, Box, Layers } from 'lucide-svelte'; let loading = $state(false), tests = $state([]), disciplines = $state([]), departments = $state([]); - let modalOpen = $state(false), selectedRowIndex = $state(-1), expandedGroups = $state(new Set()); + let modalOpen = $state(false), selectedRowIndex = $state(-1), expandedGroups = $state(new Set()), typeSelectorOpen = $state(false); let currentPage = $state(1), perPage = $state(20), totalItems = $state(0), totalPages = $state(1); let modalMode = $state('create'), saving = $state(false), selectedType = $state(''), searchQuery = $state(''), searchInputRef = $state(null); let deleteModalOpen = $state(false), testToDelete = $state(null), deleting = $state(false); @@ -70,14 +71,23 @@ const canHaveRefRange = $derived(formData.TestType === 'TEST' || formData.TestTy function getVisibleTests() { return tests.filter(t => t.IsActive !== '0' && t.IsActive !== 0); } function getTestTypeConfig(type) { return testTypeConfig[type] || testTypeConfig.TEST; } function formatReferenceRange(test) { return '-'; } - function openCreateModal() { +function openTypeSelector() { + typeSelectorOpen = true; +} + +function handleTypeSelect(type) { + typeSelectorOpen = false; + openCreateModal(type); +} + +function openCreateModal(type = 'TEST') { modalMode = 'create'; formData = { // Basic Info TestSiteID: null, TestSiteCode: '', TestSiteName: '', - TestType: 'TEST', + TestType: type, DisciplineID: null, DepartmentID: null, SeqScr: '0', @@ -284,7 +294,7 @@ const canHaveRefRange = $derived(formData.TestType === 'TEST' || formData.TestTy

Test Definitions

Manage laboratory tests, panels, and calculated values

- +
@@ -296,7 +306,7 @@ const canHaveRefRange = $derived(formData.TestType === 'TEST' || formData.TestTy
- - - - - - -
-
- - -
+ +
+ +
diff --git a/src/routes/(app)/master-data/tests/test-modal/GroupMembersTab.svelte b/src/routes/(app)/master-data/tests/test-modal/GroupMembersTab.svelte index d583f68..b0c5019 100644 --- a/src/routes/(app)/master-data/tests/test-modal/GroupMembersTab.svelte +++ b/src/routes/(app)/master-data/tests/test-modal/GroupMembersTab.svelte @@ -1,5 +1,5 @@ -
- -
+
+ +

Add Group Members

-
+
- {#if searchQuery} -
+
+ {#if searchQuery} {#if filteredTests.length === 0}
No tests found matching "{searchQuery}" @@ -138,70 +102,57 @@ {/each} {/if} -
- {/if} -
- - -
-
-
- Group Members - {formData.groupMembers?.length || 0} -
- {#if formData.groupMembers?.length > 0} - Drag to reorder + {:else} +
+ +

Type to search for tests

+
{/if}
+
- {#if !formData.groupMembers || formData.groupMembers.length === 0} -
- -

No members added yet

-

Search and add tests above

+ +
+
+
+ Group Members + {formData.groupMembers?.length || 0}
- {:else} -
- {#each formData.groupMembers as member, index (member.TestSiteID)} -
handleDragStart(index)} - ondragover={(e) => handleDragOver(e, index)} - ondragend={handleDragEnd} - class:opacity-50={draggedIndex === index} - > -
-
- -
+
-
- {member.Sequence} -
- -
-
- {member.TestSiteCode} - {member.TestSiteName} +
+ {#if !formData.groupMembers || formData.groupMembers.length === 0} +
+ +

No members added yet

+

Search and add tests from the left

+
+ {:else} +
+ {#each formData.groupMembers as member, index (`${member.TestSiteID}-${index}`)} +
+
+
+ {member.TestSiteCode} + {member.TestSiteName}
- + {member.TestType}
-
- {/each} -
- {/if} + {/each} +
+ {/if} +
diff --git a/src/routes/(app)/master-data/tests/test-modal/NumericRefRange.svelte b/src/routes/(app)/master-data/tests/test-modal/NumericRefRange.svelte index 61c5bff..099f49c 100644 --- a/src/routes/(app)/master-data/tests/test-modal/NumericRefRange.svelte +++ b/src/routes/(app)/master-data/tests/test-modal/NumericRefRange.svelte @@ -89,9 +89,9 @@ if (ref.Low !== null && ref.High !== null) { rangeText = `${ref.Low} - ${ref.High}`; } else if (ref.Low !== null) { - rangeText = `${ref.Low}`; + rangeText = `> ${ref.Low}`; } else if (ref.High !== null) { - rangeText = `${ref.High}`; + rangeText = `< ${ref.High}`; } else { rangeText = 'Not set'; } diff --git a/src/routes/(app)/master-data/tests/test-modal/TestTypeSelector.svelte b/src/routes/(app)/master-data/tests/test-modal/TestTypeSelector.svelte new file mode 100644 index 0000000..6f92e85 --- /dev/null +++ b/src/routes/(app)/master-data/tests/test-modal/TestTypeSelector.svelte @@ -0,0 +1,43 @@ + + +
+

Select test type to create

+
+ {#each types as type} + + {/each} +
+
+ +
+