Skip to content

Form ​

Семантична обгортка форми з обробкою надсилання, станами завантаження та вимкнення.

Живе демо ​

Базове ​

Вимкнена ​

Використання ​

Базове ​

vue
<template>
  <orio-form v-model="payload" @submit="onSubmit">
    <orio-input name="email" label="Email" type="email" />
    <orio-button type="submit">Submit</orio-button>
  </orio-form>
</template>

<script setup>
import { ref } from "vue";

const payload = ref({
  email: "",
});

function onSubmit() {
  console.log("Submitted:", payload.value);
}
</script>

З валідацією ​

vue
<template>
  <orio-form v-model="payload" @submit="onSubmit">
    <orio-input name="email" label="Email" :error="errors.email" />
    <orio-button type="submit" :loading="isLoading">Submit</orio-button>
  </orio-form>
</template>

<script setup>
import { ref } from "vue";
import { useValidation, isFilled, isEmail } from "orio-ui";

const payload = ref({
  email: "",
});
const isLoading = ref(false);

const { checkValidity, errors } = useValidation([
  {
    model: () => payload.value.email,
    id: "email",
    validator: isFilled,
    message: "Email is required",
  },
  {
    model: () => payload.value.email,
    id: "email",
    validator: isEmail,
    message: "Invalid email",
  },
]);

function onSubmit() {
  if (!checkValidity()) return;
  isLoading.value = true;
  // ...
}
</script>

Завантаження та вимкнення ​

vue
<!-- Prevents interaction during async submission -->
<orio-form v-model="payload" :loading="isLoading" @submit="onSubmit">
  ...
</orio-form>

<!-- Fully disabled form -->
<orio-form v-model="payload" disabled>
  ...
</orio-form>

Пропси ​

ПропТипЗа замовчуваннямОпис
disabledbooleanfalseВимикає будь-яку взаємодію з формою
loadingbooleanfalseБлокує взаємодію під час асинхронної роботи

Події ​

ПодіяДаніОпис
submit-Генерується під час надсилання форми (не генерується, коли disabled/loading)

Слоти ​

СлотОпис
defaultВміст форми (поля, кнопки тощо)