SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
2 min agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%
3.0 KB · 92 lines tsx
Raw Blame History
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// ka-ui/react/KaFooter.tsx — footer commun Groupe KA (fond encre), à vendorer3// dans chaque app Vite/React sous frontend/src/ka/. Consomme ecosystem.json :4// toute modification des infos de contact se fait dans ka-ui/ecosystem.json5// puis se resynchronise sur les 12 sites (voir ka-ui/README.md).6import eco from "./ecosystem.json";78type LocalLink = { label: string; href: string };910export default function KaFooter({11  siteId,12  localLegal = [],13}: {14  /** id du site courant dans ecosystem.json (ex. "resto-ka") */15  siteId: string;16  /** pages légales PROPRES au site (ex. /conditions), affichées avant celles du hub */17  localLegal?: LocalLink[];18}) {19  const year = new Date().getFullYear();20  const site = eco.sites.find((s) => s.id === siteId);21  const others = eco.sites.filter((s) => s.id !== siteId);22  return (23    <footer className="ka-footer" id="contact">24      <div className="container">25        <a26          className="wordmark"27          href={eco.hub.url}28          target={siteId === "groupe-ka" ? undefined : "_blank"}29          rel="noopener noreferrer"30          aria-label="Groupe KA — le portail de l'écosystème"31        >32          Groupe <span className="ka">KA</span>33        </a>34        <p className="desc">35          {eco.org.tagline} Des centaines de connecteurs lisent les sites à la36          source, normalisent la donnée et se resynchronisent seuls.{" "}37          {site ? (38            <>39              <b style={{ color: "var(--paper)" }}>{site.wordmark}</b> —{" "}40              {site.tagline} — est un service Groupe KA.41            </>42          ) : null}43        </p>44        <p className="notice">45          <b>{eco.org.disclaimer}</b>46        </p>47        <ul className="sites">48          {others.map((s) => (49            <li key={s.id}>50              <a href={`https://${s.domain}`} target="_blank" rel="noopener noreferrer">51                {s.wordmark}52              </a>53            </li>54          ))}55          {eco.extraFooterLinks.map((l) => (56            <li key={l.href}>57              <a href={l.href} target="_blank" rel="noopener noreferrer">58                {l.label}59              </a>60            </li>61          ))}62        </ul>63        <div className="contacts">64          {eco.contacts.map((c) => (65            <p key={c.email} style={{ margin: 0 }}>66              <a href={`mailto:${c.email}`}>{c.email}</a>67              <span>{c.role}</span>68            </p>69          ))}70        </div>71        <p className="legal">72          © {year} {eco.org.copyrightHolder}73          {localLegal.map((l) => (74            <span key={l.href}>75              {" · "}76              <a href={l.href}>{l.label}</a>77            </span>78          ))}79          {eco.legal.map((l) => (80            <span key={l.href}>81              {" · "}82              <a href={l.href} target="_blank" rel="noopener noreferrer">83                {l.label}84              </a>85            </span>86          ))}87        </p>88      </div>89    </footer>90  );91}92