SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
1 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%
1.9 KB · 53 lines tsx
Raw Blame History
1/**2 * =============================================================================3 * Job·Ka — Groupe KA4 * Auteur  : Simon-Pierre Boucher5 * Contact : contact@spboucher.ai6 * Fichier : frontend/src/pages/Sources.tsx7 * Rôle    : Registre public des employeurs connectés (traçabilité des sources)8 * Créé    : 2026-08-17   Modifié : 2026-08-179 * =============================================================================10 */11import { useEffect, useState } from "react";12import { fetchSources, Source } from "../api";1314export default function Sources() {15  const [sources, setSources] = useState<Source[]>([]);1617  useEffect(() => { fetchSources().then((r) => setSources(r.sources)).catch(() => {}); }, []);1819  return (20    <main className="container">21      <h1 className="section-title" style={{ fontSize: 24, marginTop: 28 }}>Employeurs connectés</h1>22      <p className="muted">23        Chaque source est un connecteur automatisé vers la page carrière officielle24        de l'employeur, resynchronisé jour et nuit. Zéro saisie manuelle.25      </p>26      <table className="data" style={{ margin: "18px 0 40px" }}>27        <thead>28          <tr>29            <th>Employeur</th><th>Secteurs</th><th>Région</th><th>ATS</th>30            <th>Offres actives</th><th>Dernière synchro</th>31          </tr>32        </thead>33        <tbody>34          {sources.map((s) => (35            <tr key={s.id}>36              <td><a href={s.careers_url || s.url} target="_blank" rel="noopener noreferrer">{s.name}</a></td>37              <td>{s.sectors.join(", ")}</td>38              <td>{s.region}</td>39              <td>{s.connector}</td>40              <td>{s.active_jobs}</td>41              <td>42                {s.last_sync43                  ? new Date(s.last_sync * 1000).toLocaleString("fr-CA", { dateStyle: "medium", timeStyle: "short" })44                  : "—"}45              </td>46            </tr>47          ))}48        </tbody>49      </table>50    </main>51  );52}53