diff --git a/resources/js/composables/usePostCompliance.ts b/resources/js/composables/usePostCompliance.ts index 9b563dee..5bfd6f57 100644 --- a/resources/js/composables/usePostCompliance.ts +++ b/resources/js/composables/usePostCompliance.ts @@ -1,5 +1,5 @@ -import { computed, type ComputedRef, type Ref } from 'vue'; import { trans } from 'laravel-vue-i18n'; +import { computed, type ComputedRef, type Ref } from 'vue'; import { getMediaItemIssue, type MediaItem } from '@/composables/useMedia'; import { getMediaRulesForContentType } from '@/composables/useMediaRules'; diff --git a/resources/js/date.ts b/resources/js/date.ts index c087a29f..913d4974 100644 --- a/resources/js/date.ts +++ b/resources/js/date.ts @@ -176,6 +176,18 @@ export default { return dayjs.utc(date).tz(getUserTimezone()).format('YYYY-MM-DDTHH:mm:00'); }, + /** + * Inverso de `formatUtcForDateTimeLocalInput`: recebe uma string vinda de um + * input `datetime-local` (no timezone do usuário) e devolve uma ISO 8601 em + * UTC pronta para enviar à API. Retorna `null` quando não houver data. + * @param date - String do input (YYYY-MM-DDTHH:mm[:ss]) ou nulo + * @returns ISO 8601 em UTC (ex.: 2026-05-19T19:40:00Z) ou null + */ + formatLocalDateTimeForApi(date: string | null | undefined): string | null { + if (!date) return null; + return dayjs.tz(date, getUserTimezone()).utc().format(); + }, + /** * Formata minutos para formato legível * @param minutes - Número de minutos diff --git a/resources/js/pages/posts/Edit.vue b/resources/js/pages/posts/Edit.vue index d8662d08..3230741b 100644 --- a/resources/js/pages/posts/Edit.vue +++ b/resources/js/pages/posts/Edit.vue @@ -236,9 +236,7 @@ const getSubmitData = () => { content: content.value, media: media.value, platforms, - scheduled_at: scheduledDateTime.value - ? dayjs(scheduledDateTime.value).utc().format() - : null, + scheduled_at: date.formatLocalDateTimeForApi(scheduledDateTime.value), label_ids: selectedLabelIds.value, }; };