diff --git a/src/lib/components/reusable/form/order-form-renderer.svelte b/src/lib/components/reusable/form/order-form-renderer.svelte index ba69d45..dff17c0 100644 --- a/src/lib/components/reusable/form/order-form-renderer.svelte +++ b/src/lib/components/reusable/form/order-form-renderer.svelte @@ -41,6 +41,8 @@ const leftGroups = $derived([formFields[0]]); const rightGroups = $derived(formFields.slice(1)); let selectedTest = $state(null); + let selectedTests2 = $state([]); + let pendingTests = $state([]); let selectedCodes = $derived( new Set((formState.form.Tests ?? []).map(t => t.TestSiteCode)) ); @@ -67,6 +69,38 @@ return result; }); + + function toggleTest(test) { + const exists = selectedTests2.find(t => t.rawItem.TestSiteID === test.rawItem.TestSiteID); + if (exists) { + selectedTests2 = selectedTests2.filter(t => t.rawItem.TestSiteID !== test.rawItem.TestSiteID); + } else { + selectedTests2 = [...selectedTests2, test]; + } + } + + function isSelected(test) { + return selectedTests2.some(t => t.rawItem.TestSiteID === test.rawItem.TestSiteID); + } + + function addSelected() { + for (const test of selectedTests2) { + const alreadyAdded = pendingTests.some(t => t.rawItem.TestSiteID === test.rawItem.TestSiteID); + if (!alreadyAdded) { + pendingTests = [...pendingTests, test]; + } + } + selectedTests2 = []; + } + + function isPending(test) { + return pendingTests.some(t => t.rawItem.TestSiteID === test.rawItem.TestSiteID); + } + + function removeTest2(test) { + pendingTests = pendingTests.filter(t => t.rawItem.TestSiteID !== test.rawItem.TestSiteID); + selectedTests2 = selectedTests2.filter(t => t.rawItem.TestSiteID !== test.rawItem.TestSiteID); + } function getFilteredOptions(key) { const query = searchQuery[key] || ''; @@ -175,7 +209,7 @@ Object.entries(testsByDiscipline).filter(([disciplineId]) => disciplineId === selectedDiscipline) ); }); - $inspect(searchedTests) + $inspect(pendingTests) {#snippet Fieldset({ @@ -402,8 +436,10 @@ {@const filteredOptions = getFilteredOptions(key)}
-
-

Test list

+
+
+

Test list

+
- {disciplineName} + {disciplineName ?? 'Unspecified'} {tests.length} tests
{#each tests as test} -
- +
+ toggleTest(test)} + /> {test.rawItem.TestSiteCode}
@@ -453,27 +492,34 @@ {/each}
- 0 selected - + {selectedTests2.length} selected +
-
+

Test ordered

- 0 test(s) + {pendingTests.length} test(s)
- {#each [1,2,3,3] as x } + {#each pendingTests as test, index (test.rawItem.TestSiteID) } - 1 + {index + 1} - CREAD + {test.rawItem.TestSiteCode} - MCU PT. XYZ + {test.rawItem.TestSiteName} @@ -481,6 +527,7 @@ aria-label="Delete" title="Delete" size="icon-xs" + onclick={() => removeTest2(test)} >