{job.title}
+{job.description}
+ {job.url && مشاهده و ارسال رزومه} +diff --git a/app/src/pages/JobsPage.jsx b/app/src/pages/JobsPage.jsx new file mode 100644 index 0000000..c483cdc --- /dev/null +++ b/app/src/pages/JobsPage.jsx @@ -0,0 +1,64 @@ +import { useState, useEffect } from 'react'; +import { useToast, EmptyState, inputStyle, pillBtn } from '../../teknav-ui.jsx'; +import { contentApi } from '../../src/lib/content-api.js'; + +export function JobsPage() { + const toast = useToast(); + const [items, setItems] = useState([]); + const [form, setForm] = useState({ company: '', title: '', location: 'Remote', remote: true, url: '', contactEmail: '', description: '' }); + const [busy, setBusy] = useState(false); + useEffect(() => { + contentApi.listJobs().then(setItems).catch(() => setItems([])); + }, []); + const set = (key, value) => setForm((current) => ({ ...current, [key]: value })); + const submit = async (event) => { + event.preventDefault(); + setBusy(true); + try { + await contentApi.submitJob(form); + setForm({ company: '', title: '', location: 'Remote', remote: true, url: '', contactEmail: '', description: '' }); + toast('آگهی شغلی برای بررسی ارسال شد'); + } catch { + toast('ارسال آگهی ناموفق بود', 'error'); + } finally { + setBusy(false); + } + }; + return ( +
جایگاههای منتخب شرکتهای فنی فارسیزبان. آگهیهای جدید بعد از بررسی تحریریه منتشر میشوند.
+{job.description}
+ {job.url && مشاهده و ارسال رزومه} +