);
};
let hasChanges = false;
for (const key in settings) {
const oldVal = String(data.settings?.[key] ?? '').replace(/\r\n/g, '\n');
const newVal = String(settings[key] ?? '').replace(/\r\n/g, '\n');
if (oldVal !== newVal) {
hasChanges = true;
break;
}
}
const clientOptionsGlobal = [
{ id: 'opt_collab', label: 'Travail en collaboration' },
{ id: 'opt_messaging', label: 'Messagerie des riverains' },
{ id: 'opt_newsletter', label: 'Info riverains' }
];
const clientOptionsChamps = [
{ id: 'simp_opt_description', label: 'Description des travaux' },
{ id: 'simp_opt_image', label: 'Vue du projet (Image)' },
{ id: 'simp_opt_theme', label: 'Couleur du thème' },
{ id: 'simp_opt_link', label: 'Lien vers le promoteur' },
{ id: 'simp_opt_emergency', label: 'Téléphone d\'urgence' },
{ id: 'simp_opt_schedule', label: 'Horaires de nuisances' }
];
const clientOptionsOnglets = [
{ id: 'simp_opt_hide_intervenants', label: 'Masquer l\'onglet Intervenants' },
{ id: 'simp_opt_hide_lots', label: 'Masquer l\'onglet Lots de travaux' },
{ id: 'simp_opt_hide_legal', label: 'Masquer l\'affichage public de l\'Arrêté' }
];
return (
<>
Règles et Options
Personnalisation des règles métier de .
{/* TITRE DE SECTION: OPTIONS CLIENTS */}
Options côté clients
Gérez la disponibilité globale des fonctionnalités pour l'ensemble des clients. L'état "En option" leur permet d'activer ou masquer eux-mêmes ces champs par projet.
{/* GRILLE ÉCLATÉE DES SOUS-CARTES OPTIONS CLIENTS */}
Configuration des limites techniques, des purges automatiques et des expirations de l'application.
{/* GRILLE ÉCLATÉE DES SOUS-CARTES SEUILS */}
{/* MESSAGERIE ET TIMELINE */}
Messagerie et Timeline
{FormInput && updateSetting('timeline_max_chars', e.target.value)} className="min-w-0 w-full" hint="En caractères" />}
{FormInput && updateSetting('timeline_auto_close_days', e.target.value)} className="min-w-0 w-full" hint="Clôture la discussion au bout de ce délai" />}
{ShieldAlertIcon && } Anti-Flood Riverain
{FormInput && updateSetting('timeline_spam_max_msg', e.target.value)} className="min-w-0 w-full" hint="S'active après ce nombre de messages..." />}
{FormInput && updateSetting('timeline_spam_window_sec', e.target.value)} className="min-w-0 w-full" hint="... envoyés en moins de (secondes)." />}
{FormInput && updateSetting('timeline_anti_spam_sec', e.target.value)} className="min-w-0 w-full" hint="Remis à 0 si le client ou support répond." />}