From 35051350c68593a4e9d39be14d401c704e9f9399 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Tue, 19 May 2026 16:42:42 -0300 Subject: [PATCH] refactor(posts): encode scheduled_at for API via date helper Parse datetime-local values in the user timezone before converting to UTC, matching formatUtcForDateTimeLocalInput. Fix ESLint import order in usePostCompliance. Co-authored-by: Cursor --- resources/js/composables/usePostCompliance.ts | 2 +- resources/js/date.ts | 12 ++++++++++++ resources/js/pages/posts/Edit.vue | 4 +--- 3 files changed, 14 insertions(+), 4 deletions(-) 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, }; };