diff --git a/frontend/src/app/dashboard/jobs/new/page.tsx b/frontend/src/app/dashboard/jobs/new/page.tsx index fa55341..387c6d1 100644 --- a/frontend/src/app/dashboard/jobs/new/page.tsx +++ b/frontend/src/app/dashboard/jobs/new/page.tsx @@ -19,6 +19,7 @@ import { } from "@/components/ui/select" import { Textarea } from "@/components/ui/textarea" import { adminCompaniesApi, jobsApi, type AdminCompany, type CreateJobPayload } from "@/lib/api" +import { useTranslation } from "@/lib/i18n" type ApplicationChannel = "email" | "url" | "phone" @@ -41,6 +42,7 @@ const DESCRIPTION_MIN_LENGTH = 20 export default function DashboardNewJobPage() { const router = useRouter() + const { t } = useTranslation() const [loading, setLoading] = useState(false) const [loadingCompanies, setLoadingCompanies] = useState(true) const [companies, setCompanies] = useState([]) @@ -69,7 +71,6 @@ export default function DashboardNewJobPage() { status: "draft", }) - // Location autocomplete state const [apiCountries, setApiCountries] = useState([]) const [locationIds, setLocationIds] = useState<{ cityId: number | null; regionId: number | null }>({ cityId: null, regionId: null }) const [locationResults, setLocationResults] = useState([]) @@ -77,15 +78,13 @@ export default function DashboardNewJobPage() { const [showLocationDropdown, setShowLocationDropdown] = useState(false) const locationRef = useRef(null) - // Load companies useEffect(() => { adminCompaniesApi.list(undefined, 1, 100) .then((data) => setCompanies(data.data ?? [])) - .catch(() => toast.error("Falha ao carregar empresas")) + .catch(() => toast.error(t("admin.jobs.create.messages.loadCompaniesError"))) .finally(() => setLoadingCompanies(false)) - }, []) + }, [t]) - // Load countries for location autocomplete useEffect(() => { const apiBase = process.env.NEXT_PUBLIC_API_URL || "" fetch(`${apiBase}/api/v1/locations/countries`) @@ -146,9 +145,9 @@ export default function DashboardNewJobPage() { if (!canSubmit) { const descriptionLength = formData.description.trim().length if (descriptionLength < DESCRIPTION_MIN_LENGTH) { - toast.error(`Descricao da vaga deve ter no minimo ${DESCRIPTION_MIN_LENGTH} caracteres`) + toast.error(t("admin.jobs.create.validation.descriptionMin", { min: DESCRIPTION_MIN_LENGTH })) } else { - toast.error("Preencha os campos obrigatorios") + toast.error(t("admin.jobs.create.validation.requiredFields")) } return } @@ -183,12 +182,12 @@ export default function DashboardNewJobPage() { } await jobsApi.create(payload) - toast.success("Vaga cadastrada com sucesso!") + toast.success(t("admin.jobs.create.messages.createSuccess")) setTimeout(() => { router.push("/dashboard/jobs") }, 700) } catch (error: any) { - toast.error(error.message || "Falha ao cadastrar vaga") + toast.error(error.message || t("admin.jobs.create.messages.createError")) } finally { setLoading(false) } @@ -197,36 +196,37 @@ export default function DashboardNewJobPage() { return (
-

Nova vaga

-

Preencha os dados da vaga. Os campos marcados com * são obrigatórios.

+

{t("admin.jobs.create.title")}

+

+ {t("admin.jobs.create.subtitle")} +

- {/* Empresa e Status */} - Empresa e status + {t("admin.jobs.create.sections.companyStatus")} - -
- + +
+ {loadingCompanies ? ( -
- Carregando... +
+ {t("admin.jobs.create.common.loading")}
) : ( set("status", v)}> - + + + - Rascunho - Em revisão - Aberta - Pausada - Encerrada + {t("admin.jobs.create.options.status.draft")} + {t("admin.jobs.create.options.status.review")} + {t("admin.jobs.create.options.status.open")} + {t("admin.jobs.create.options.status.paused")} + {t("admin.jobs.create.options.status.closed")}
- {/* Dados da vaga */} - Dados da vaga + {t("admin.jobs.create.sections.jobData")}
- + set("title", e.target.value)} /> -

{formData.title.length}/255 caracteres

+

+ {t("admin.jobs.create.help.titleLength", { current: formData.title.length, max: 255 })} +

- +