diff --git a/components/Section/Calendario/Forms/Form1.vue b/components/Section/Calendario/Forms/Form1.vue
index a9a161fe..50c4dc81 100644
--- a/components/Section/Calendario/Forms/Form1.vue
+++ b/components/Section/Calendario/Forms/Form1.vue
@@ -1,91 +1,230 @@
+const props = withDefaults(defineProps(), {
+ editId: null,
+});
+
+//
+
+const editIdRef = toRef(props, 'editId');
+
+
+const apiClient = useApiClient();
+const queryClient = useQueryClient();
+const { curso: currentCurso } = await useApiCursosFindOne(editIdRef);
+
+type FormValues = {
+ imagem: Blob | null | undefined;
+
+ modalidade: {
+ id: string | null;
+ };
+ campus: {
+ id: string | null;
+ };
+
+ nome: string;
+
+ nomeAbreviado: string;
+};
+
+type FormOutput = {
+ imagem: Blob | null | undefined;
+
+ modalidade: {
+ id: string;
+ };
+ campus: {
+ id: string;
+ };
+
+ nome: string;
+
+ nomeAbreviado: string;
+};
+
+const initialFormValues = reactive({
+ imagem: null,
+ modalidade: {
+ id: currentCurso.value?.modalidade?.id ?? null,
+ },
+
+ campus: {
+ id: currentCurso.value?.campus?.id ?? null,
+ },
+ nome: currentCurso.value?.nome ?? '',
+ nomeAbreviado: currentCurso.value?.nomeAbreviado ?? '',
+});
+
+const handleDelete = async () => {
+ const id = editIdRef.value;
+
+ if (!id) return;
+
+ const resposta = window.confirm(
+ 'Você tem certeza de que deseja deletar esse curso?'
+ );
+
+ if (resposta) {
+ await apiClient.cursos.cursoDeleteById({ id: id });
+ await queryClient.invalidateQueries({ queryKey: ['cursos'] });
+ $emit('close');
+ }
+};
+
+const schema = yup.object().shape({
+ imagem: yup.mixed().nullable().optional(),
+ modalidade: yup.object().shape({
+ id: yup.string().required('Modalidade é obrigatório!'),
+ }),
+ campus: yup.object().shape({
+ id: yup.string().required('Campus é obrigatório!'),
+ }),
+
+ nome: yup.string().required('Nome do bloco é obrigatório!'),
+ nomeAbreviado: yup
+ .string()
+ .required('Nome abreviado do bloco é obrigatório!'),
+});
+
+const {
+ resetForm,
+ handleSubmit,
+ setFieldValue,
+ values: formValues,
+} = useForm({
+ validationSchema: schema,
+ initialValues: initialFormValues,
+});
+
+const onSubmit = handleSubmit(async (values: FormOutput) => {
+ const editId = editIdRef.value;
+
+ const { imagem, ...data } = values;
+
+ let id;
+
+ if (editId === null) {
+ const cursoCriado = await apiClient.cursos.cursoCreate({
+ requestBody: { ...data },
+ });
+
+ id = cursoCriado.id;
+ } else {
+ await apiClient.cursos.cursoUpdateById({
+ id: editId,
+
+ requestBody: {
+ ...values,
+ },
+ });
+
+ id = editId;
+ }
+
+ if (imagem) {
+ await apiClient.cursos.cursoSetCoverImage({
+ id: id,
+ formData: {
+ file: imagem,
+ },
+ });
+ }
+
+ await queryClient.invalidateQueries({
+ queryKey: ['cursos'],
+ });
+
+ resetForm();
+ $emit('close');
+}, console.error);
+
+const nome = computed({
+ get: () => formValues.nome,
+ set: (value) => {
+ formValues.nome = value;
+ },
+});
+
-
+
-
- Etapa 1
-
-
+
+
-
diff --git a/components/Section/Calendario/Forms/Form2.vue b/components/Section/Calendario/Forms/Form2.vue
index 5c6b109c..d94191d8 100644
--- a/components/Section/Calendario/Forms/Form2.vue
+++ b/components/Section/Calendario/Forms/Form2.vue
@@ -1,232 +1,98 @@
+
-
+
-
-
+
+ Etapa 1
+
+
-
-''
\ No newline at end of file
+
+.date-fields {
+ display: flex; /* Habilita o Flexbox */
+ gap: 20px; /* Espaçamento entre os campos */
+}
+
+.date-fields .v-text-field {
+ flex: 1; /* Faz com que cada campo de data ocupe espaço igual */
+}
+
+
\ No newline at end of file
diff --git a/components/Section/Calendario/Forms/Form3.vue b/components/Section/Calendario/Forms/Form3.vue
index e0c58efc..7854b577 100644
--- a/components/Section/Calendario/Forms/Form3.vue
+++ b/components/Section/Calendario/Forms/Form3.vue
@@ -13,6 +13,10 @@ const calendario = ref({
fim: '',
});
+const backform = () => {
+ $emit('back'); // Emitir o evento de próximo
+};
+
const closeForm = () => {
$emit('close');
};
@@ -21,7 +25,7 @@ const nextForm = () => {
$emit('next');
};
-const $emit = defineEmits(['close', 'next']);
+const $emit = defineEmits(['close', 'next', 'back']);
@@ -130,6 +134,7 @@ const $emit = defineEmits(['close', 'next']);
@@ -167,7 +172,7 @@ const $emit = defineEmits(['close', 'next']);
justify-content: space-between;
flex-wrap: wrap;
margin-top: 20px;
- gap: 153px;
+ gap: 0px;
}
.color-picker-square input[type="color"]::-webkit-color-swatch {
diff --git a/components/Section/Calendario/Forms/Form4.vue b/components/Section/Calendario/Forms/Form4.vue
deleted file mode 100644
index e69de29b..00000000
diff --git a/components/Section/Calendario/Modal/ModalForm.vue b/components/Section/Calendario/Modal/ModalForm.vue
index e2d30a6f..f08b1549 100644
--- a/components/Section/Calendario/Modal/ModalForm.vue
+++ b/components/Section/Calendario/Modal/ModalForm.vue
@@ -11,7 +11,7 @@ const isActive = ref(false);
-
+