import React, { useState } from 'react'; import { AppSettings } from '../types'; import { Save, Globe, User, Info, Database, FileSpreadsheet, Copy, CheckCircle2, Lock, ExternalLink, ShieldCheck, Hash, Download, // Added missing AlertTriangle icon import AlertTriangle } from 'lucide-react'; interface SettingsPanelProps { settings: AppSettings; onSave: (settings: AppSettings) => void; } const SettingsPanel: React.FC = ({ settings, onSave }) => { const [localSettings, setLocalSettings] = useState(settings); const [copied, setCopied] = useState(false); const [activeTab, setActiveTab] = useState<'profile' | 'google' | 'info'>('profile'); const googleScriptCode = ` /** * AUDITPRO UNIVERSAL SYNC SCRIPT * Copiez ce code dans Extensions > Apps Script de votre Google Sheet */ function doPost(e) { try { var payload = JSON.parse(e.postData.contents); var audit = payload.data; // On utilise l'ID envoyé par l'app pour cibler la bonne feuille var sheetId = audit.sheetId; var ss = sheetId ? SpreadsheetApp.openById(sheetId) : SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; // En-têtes si feuille vide if (sheet.getLastRow() == 0) { sheet.appendRow(["DATE", "INSPECTEUR", "MODÈLE", "QUESTION", "RÉPONSE", "OBSERVATION", "PHOTOS (NB)"]); sheet.getRange(1, 1, 1, 7).setFontWeight("bold").setBackground("#4F46E5").setFontColor("white"); } audit.responses.forEach(function(resp) { sheet.appendRow([ new Date(audit.startedAt).toLocaleString(), audit.inspectorName, audit.checklistName, resp.itemLabel, resp.value, resp.comment || "", resp.photos ? resp.photos.length : 0 ]); }); return ContentService.createTextOutput("SUCCESS").setMimeType(ContentService.MimeType.TEXT); } catch(f) { return ContentService.createTextOutput("ERROR: " + f.message).setMimeType(ContentService.MimeType.TEXT); } } `.trim(); const copyScript = () => { navigator.clipboard.writeText(googleScriptCode); setCopied(true); setTimeout(() => setCopied(false), 2000); }; return (
{/* Navigation Tabs */}
{activeTab === 'profile' && (
setLocalSettings({...localSettings, inspectorName: e.target.value})} placeholder="Votre nom complet" className="w-full border-2 border-slate-100 rounded-2xl p-5 text-slate-800 font-bold focus:border-indigo-600 outline-none bg-slate-50/50 transition-all text-lg" />

Ce nom sera gravé dans chaque audit que vous réaliserez.

)} {activeTab === 'google' && (

Liaison de Données

Ces identifiants sont strictement personnels. Ils permettent à l'application de savoir exactement dans quelle Google Sheet envoyer vos rapports.

setLocalSettings({...localSettings, sheetId: e.target.value})} placeholder="Ex: 1bc-DEFgH..." className="w-full border-2 border-slate-100 rounded-2xl p-5 text-slate-700 font-mono text-sm outline-none bg-slate-50 focus:border-indigo-600 transition-all" />
setLocalSettings({...localSettings, webhookUrl: e.target.value})} placeholder="https://script.google.com/macros/s/..." className="w-full border-2 border-slate-100 rounded-2xl p-5 text-slate-700 font-mono text-sm outline-none bg-slate-50 focus:border-indigo-600 transition-all" />

Script Apps Script Requis

                    {googleScriptCode}
                  
)} {activeTab === 'info' && (

Souveraineté Totale

Votre espace contient tout votre ADN professionnel : modèles, audits et réglages cloud. L'application ne stocke rien en ligne de son côté.

Chaque fois que vous changez d'ordinateur ou que vous videz votre navigateur, vous devez importer votre fichier .auditpro.

Pensez à sauvegarder votre "Clé" régulièrement pour ne perdre aucun audit récent.

)}
); }; export default SettingsPanel;