mirror of
https://github.com/faiztyanirh/clqms-shadcn-v1.git
synced 2026-04-26 02:46:32 +07:00
initial group test & payload group
This commit is contained in:
parent
3573b1b2dc
commit
34f81fbe1a
@ -74,7 +74,7 @@ export const testCalSchema = z
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const testGroupSchema = z.object({
|
export const testGroupSchema = z.object({
|
||||||
Member: z.string().optional()
|
Members: z.string().optional()
|
||||||
});
|
});
|
||||||
|
|
||||||
export const refNumSchema = z
|
export const refNumSchema = z
|
||||||
@ -219,7 +219,7 @@ export const testCalInitialForm = {
|
|||||||
export const testGroupInitialForm = {
|
export const testGroupInitialForm = {
|
||||||
TestGrpID: '',
|
TestGrpID: '',
|
||||||
TestSiteID: '',
|
TestSiteID: '',
|
||||||
Member: '',
|
Members: [],
|
||||||
}
|
}
|
||||||
|
|
||||||
export const refNumInitialForm = {
|
export const refNumInitialForm = {
|
||||||
@ -284,7 +284,7 @@ export const testCalDefaultErrors = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const testGroupDefaultErrors = {
|
export const testGroupDefaultErrors = {
|
||||||
Member: null,
|
Members: 'fdsa',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const refNumDefaultErrors = {
|
export const refNumDefaultErrors = {
|
||||||
@ -1062,6 +1062,11 @@ export function buildTestPayload({ mainForm, activeFormStates, testType, refNumD
|
|||||||
} else if (key === 'refTxt' && refTxtData?.length > 0) {
|
} else if (key === 'refTxt' && refTxtData?.length > 0) {
|
||||||
payload[key] = refTxtData;
|
payload[key] = refTxtData;
|
||||||
|
|
||||||
|
} else if(key === 'group') {
|
||||||
|
payload[key] = {
|
||||||
|
...state.form,
|
||||||
|
Members: state.form?.Members?.map((m) => m.value).filter(Boolean) ?? []
|
||||||
|
};
|
||||||
} else if (state?.form) {
|
} else if (state?.form) {
|
||||||
payload[key] = {
|
payload[key] = {
|
||||||
...state.form
|
...state.form
|
||||||
|
|||||||
@ -123,6 +123,9 @@
|
|||||||
map: mapFormState
|
map: mapFormState
|
||||||
};
|
};
|
||||||
case 'GROUP':
|
case 'GROUP':
|
||||||
|
return {
|
||||||
|
group: groupFormState
|
||||||
|
}
|
||||||
case 'TITLE':
|
case 'TITLE':
|
||||||
default:
|
default:
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
@ -1,25 +1,34 @@
|
|||||||
<script>
|
<script>
|
||||||
import DictionaryFormRenderer from "$lib/components/reusable/form/dictionary-form-renderer.svelte";
|
import DictionaryFormRenderer from '$lib/components/reusable/form/dictionary-form-renderer.svelte';
|
||||||
|
|
||||||
let props = $props();
|
let props = $props();
|
||||||
|
|
||||||
let members = $state([{ id: 1, value: "" }]);
|
// function addMember() {
|
||||||
|
// members = [...members, { id: Date.now(), value: '' }];
|
||||||
|
// }
|
||||||
|
|
||||||
function addMember() {
|
function addMember() {
|
||||||
members = [...members, { id: Date.now(), value: "" }];
|
props.groupFormState.form.Members = [
|
||||||
|
...(props.groupFormState.form.Members ?? []),
|
||||||
|
{ id: Date.now(), value: '' }
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// function removeMember(id) {
|
||||||
|
// members = members.filter((m) => m.id !== id);
|
||||||
|
// }
|
||||||
|
// $inspect(props.groupFormState.form)
|
||||||
function removeMember(id) {
|
function removeMember(id) {
|
||||||
members = members.filter(m => m.id !== id);
|
props.groupFormState.form.Members =
|
||||||
|
props.groupFormState.form.Members.filter((m) => m.id !== id);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 w-full">
|
<div class="flex flex-col gap-4 w-full">
|
||||||
<DictionaryFormRenderer
|
<DictionaryFormRenderer
|
||||||
formState={props.groupFormState}
|
formState={props.groupFormState}
|
||||||
formFields={props.testGroupFormFields}
|
formFields={props.testGroupFormFields}
|
||||||
{members}
|
onAddMember={addMember}
|
||||||
onAddMember={addMember}
|
onRemoveMember={removeMember}
|
||||||
onRemoveMember={removeMember}
|
/>
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
@ -30,11 +30,26 @@
|
|||||||
handleTestTypeChange,
|
handleTestTypeChange,
|
||||||
handleResultTypeChange,
|
handleResultTypeChange,
|
||||||
handleRefTypeChange,
|
handleRefTypeChange,
|
||||||
members = [],
|
|
||||||
onAddMember,
|
onAddMember,
|
||||||
onRemoveMember,
|
onRemoveMember
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
|
// $effect(() => {
|
||||||
|
// if (!formFields) return;
|
||||||
|
|
||||||
|
// const hasMembersField = formFields.some((group) =>
|
||||||
|
// group.rows?.some((row) => row.columns?.some((col) => col.type === 'members'))
|
||||||
|
// );
|
||||||
|
|
||||||
|
// if (hasMembersField) {
|
||||||
|
// if (members.length > 0) {
|
||||||
|
// formState.form.Member = members.map((m) => m.value).filter((v) => v);
|
||||||
|
// } else {
|
||||||
|
// formState.form.Member = '';
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
const operators = ['+', '-', '*', '/', '^', '(', ')'];
|
const operators = ['+', '-', '*', '/', '^', '(', ')'];
|
||||||
|
|
||||||
let searchQuery = $state({});
|
let searchQuery = $state({});
|
||||||
@ -615,14 +630,13 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{:else if type === "members"}
|
{:else if type === 'members'}
|
||||||
{@const filteredOptions = getFilteredOptions(key)}
|
{@const filteredOptions = getFilteredOptions(key)}
|
||||||
<div class="flex flex-col gap-2 w-full">
|
<div class="flex flex-col gap-2 w-full">
|
||||||
{#each members as member, index (member.id)}
|
{#each formState.form.Members as member, index (member.id)}
|
||||||
{@const selectedLabel =
|
{@const selectedLabel =
|
||||||
formState.selectOptions?.[key]?.find(
|
formState.selectOptions?.[key]?.find((opt) => opt.value === member.value)?.label ||
|
||||||
(opt) => opt.value === member.value
|
'Choose'}
|
||||||
)?.label || 'Choose'}
|
|
||||||
<div class="flex gap-1 w-full">
|
<div class="flex gap-1 w-full">
|
||||||
<Button type="button" variant="outline" size="icon" disabled>
|
<Button type="button" variant="outline" size="icon" disabled>
|
||||||
{index + 1}
|
{index + 1}
|
||||||
@ -668,7 +682,12 @@
|
|||||||
</Select.Content>
|
</Select.Content>
|
||||||
</Select.Root>
|
</Select.Root>
|
||||||
</div>
|
</div>
|
||||||
<Button type="button" variant="outline" size="icon" onclick={() => onRemoveMember(member.id)}>
|
<Button
|
||||||
|
type="button"
|
||||||
|
variant="outline"
|
||||||
|
size="icon"
|
||||||
|
onclick={() => onRemoveMember(member.id)}
|
||||||
|
>
|
||||||
<Trash2Icon class="size-4" />
|
<Trash2Icon class="size-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user