add test group validation

This commit is contained in:
faiztyanirh 2026-03-08 14:45:30 +07:00
parent 34f81fbe1a
commit ec5ebba12e
3 changed files with 38 additions and 8 deletions

View File

@ -73,8 +73,32 @@ export const testCalSchema = z
}
});
export const testGroupSchema = z.object({
Members: z.string().optional()
export const testGroupSchema = z
.object({
Members: z
.array(
z.object({
id: z.number(),
value: z.string(),
})
)
.optional()
})
.superRefine((data, ctx) => {
if (!data.Members) return;
const values = data.Members.map(m => m.value).filter(Boolean);
const duplicates = values.filter((v, i) => values.indexOf(v) !== i);
if (duplicates.length) {
const uniqueDuplicates = [...new Set(duplicates)];
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: `Duplicate member : ${uniqueDuplicates.join(", ")}`,
path: ["Members"]
});
}
});
export const refNumSchema = z
@ -284,7 +308,7 @@ export const testCalDefaultErrors = {
};
export const testGroupDefaultErrors = {
Members: 'fdsa',
Members: null,
}
export const refNumDefaultErrors = {
@ -618,7 +642,7 @@ export const testGroupFormFields = [
type: 'row',
columns: [
{
key: 'Member',
key: 'Members',
label: 'Member Test',
required: false,
type: 'members',

View File

@ -17,10 +17,10 @@
// function removeMember(id) {
// members = members.filter((m) => m.id !== id);
// }
// $inspect(props.groupFormState.form)
// $inspect(props.groupFormState.form.Members)
function removeMember(id) {
props.groupFormState.form.Members =
props.groupFormState.form.Members.filter((m) => m.id !== id);
props.groupFormState.form.Members = props.groupFormState.form.Members.filter((m) => m.id !== id);
props.groupFormState.validateField?.("Members", props.groupFormState.form.Members, false);
}
</script>

View File

@ -654,6 +654,12 @@
);
}
}}
onValueChange={() => {
console.log(key);
if (validateOn?.includes('input')) {
formState.validateField?.(key, formState.form[key], false);
}
}}
>
<Select.Trigger class="w-full">
{selectedLabel}
@ -704,7 +710,7 @@
placeholder="Custom field type: {type}"
/>
{/if}
<div class={`absolute min-h-[1rem] w-full ${key === 'FormulaCode' ? 'top-10' : 'top-10'}`}>
<div class={`absolute min-h-[1rem] w-full ${key === 'Members' ? 'right-0 -top-5 text-right' : 'top-10'}`}>
{#if key !== 'FormulaCode' && (formState.errors[key] || formState.errors[txtKey])}
{@const errorMessage = formState.errors[key] ?? formState.errors[txtKey]}