Fix error with inject/provide

This commit is contained in:
thewebartisan7 2024-12-18 05:10:11 +01:00
parent caa1010bc7
commit 7b3d625a22
4 changed files with 46 additions and 34 deletions

View File

@ -1,16 +1,35 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Slot } from 'radix-vue' import { Slot } from "radix-vue";
import { useFormField } from './useFormField' import { useFormField } from "./useFormField";
const { error, formItemId, formDescriptionId, formMessageId } = useFormField() const props = defineProps<{
label?: string;
description?: string;
}>();
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
</script> </script>
<template> <template>
<FormLabel v-if="props.label">{{ props.label }}</FormLabel>
<Slot <Slot
:id="formItemId" :id="formItemId"
:aria-describedby="!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`" :aria-describedby="
!error
? `${formDescriptionId}`
: props.description
? `${formMessageId}`
: `${formDescriptionId} ${formMessageId}`
"
:aria-invalid="!!error" :aria-invalid="!!error"
> >
<slot /> <slot />
</Slot> </Slot>
<FormDescription v-if="props.description && !error">
{{ props.description }}
</FormDescription>
<FormMessage v-if="props.description" />
</template> </template>

View File

@ -3,30 +3,17 @@ import { cn } from "@/lib/utils";
import { useId } from "radix-vue"; import { useId } from "radix-vue";
import { type HTMLAttributes, provide } from "vue"; import { type HTMLAttributes, provide } from "vue";
import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys"; import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys";
import { useFormField } from "./useFormField";
const props = defineProps<{ const props = defineProps<{
class?: HTMLAttributes["class"]; class?: HTMLAttributes["class"];
label?: string;
description?: string;
}>(); }>();
const { error } = useFormField();
const id = useId(); const id = useId();
provide(FORM_ITEM_INJECTION_KEY, id); provide(FORM_ITEM_INJECTION_KEY, id);
</script> </script>
<template> <template>
<div :class="cn('space-y-2', props.class)"> <div :class="cn('space-y-2', props.class)">
<FormLabel v-if="props.label">{{ props.label }}</FormLabel>
<slot /> <slot />
<FormDescription v-if="props.description && !error">
{{ props.description }}
</FormDescription>
<FormMessage v-if="props.description" />
</div> </div>
</template> </template>

View File

@ -1,16 +1,35 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Slot } from 'radix-vue' import { Slot } from "radix-vue";
import { useFormField } from './useFormField' import { useFormField } from "./useFormField";
const { error, formItemId, formDescriptionId, formMessageId } = useFormField() const props = defineProps<{
label?: string;
description?: string;
}>();
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
</script> </script>
<template> <template>
<FormLabel v-if="props.label">{{ props.label }}</FormLabel>
<Slot <Slot
:id="formItemId" :id="formItemId"
:aria-describedby="!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`" :aria-describedby="
!error
? `${formDescriptionId}`
: props.description
? `${formMessageId}`
: `${formDescriptionId} ${formMessageId}`
"
:aria-invalid="!!error" :aria-invalid="!!error"
> >
<slot /> <slot />
</Slot> </Slot>
<FormDescription v-if="props.description && !error">
{{ props.description }}
</FormDescription>
<FormMessage v-if="props.description" />
</template> </template>

View File

@ -3,30 +3,17 @@ import { cn } from "@/lib/utils";
import { useId } from "radix-vue"; import { useId } from "radix-vue";
import { type HTMLAttributes, provide } from "vue"; import { type HTMLAttributes, provide } from "vue";
import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys"; import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys";
import { useFormField } from "./useFormField";
const props = defineProps<{ const props = defineProps<{
class?: HTMLAttributes["class"]; class?: HTMLAttributes["class"];
label?: string;
description?: string;
}>(); }>();
const { error } = useFormField();
const id = useId(); const id = useId();
provide(FORM_ITEM_INJECTION_KEY, id); provide(FORM_ITEM_INJECTION_KEY, id);
</script> </script>
<template> <template>
<div :class="cn('space-y-2', props.class)"> <div :class="cn('space-y-2', props.class)">
<FormLabel v-if="props.label">{{ props.label }}</FormLabel>
<slot /> <slot />
<FormDescription v-if="props.description && !error">
{{ props.description }}
</FormDescription>
<FormMessage v-if="props.description" />
</div> </div>
</template> </template>