fixes commcoach

This commit is contained in:
ValueOn AG 2026-03-28 22:29:18 +01:00
parent 4e2510c38b
commit e9f7b2016f
3 changed files with 26 additions and 2 deletions

View file

@ -79,6 +79,14 @@ const FilesTab: React.FC<FilesTabProps> = ({ context, onFileSelect }) => {
_loadFiles(); _loadFiles();
}, [_loadFiles]); }, [_loadFiles]);
useEffect(() => {
const _onFileUploaded = () => {
setTimeout(() => _loadFiles(), 150);
};
window.addEventListener('fileUploaded', _onFileUploaded as EventListener);
return () => window.removeEventListener('fileUploaded', _onFileUploaded as EventListener);
}, [_loadFiles]);
const _folderNodes = useMemo(() => const _folderNodes = useMemo(() =>
folders.map(f => ({ folders.map(f => ({
id: f.id, id: f.id,

View file

@ -360,8 +360,10 @@ const NeutralizationMappingsTab: React.FC = () => {
<section className={styles.section}> <section className={styles.section}>
<h2 className={styles.sectionTitle}>Platzhalter-Mappings</h2> <h2 className={styles.sectionTitle}>Platzhalter-Mappings</h2>
<p className={styles.settingDescription} style={{ marginBottom: '1rem' }}> <p className={styles.settingDescription} style={{ marginBottom: '1rem' }}>
Bei der Datenneutralisierung werden personenbezogene Daten durch Platzhalter ersetzt. Bei der Datenneutralisierung werden personenbezogene Daten durch Platzhalter ersetzt, bevor Text an KI-Modelle
Hier sehen Sie Ihre gespeicherten Mappings und koennen sie loeschen. geht; die Antwort wird anschliessend wieder mit Ihren Originalbegriffen angereichert (zentrale Pipeline ueber
den AI-Service). Diese Liste betrifft nur Ihre gespeicherten Platzhalter-Zuordnungen hier einsehbar und
loeschbar.
</p> </p>
{mappings.length === 0 ? ( {mappings.length === 0 ? (
@ -537,6 +539,11 @@ export const SettingsPage: React.FC = () => {
{activeTab === 'privacy' && ( {activeTab === 'privacy' && (
<section className={styles.section}> <section className={styles.section}>
<h2 className={styles.sectionTitle}>Datenschutz</h2> <h2 className={styles.sectionTitle}>Datenschutz</h2>
<p className={styles.settingDescription} style={{ marginBottom: '1rem' }}>
Feature-Daten (z.&nbsp;B. Workspace, CommCoach, Automation) liegen mandantenbezogen; Zugriff richtet sich
nach Ihren Rollen im Mandanten und an Feature-Instanzen. Allgemeine Rechte (Auskunft, Export,
Loeschung) finden Sie unter GDPR.
</p>
<div className={styles.settingRow}> <div className={styles.settingRow}>
<div className={styles.settingInfo}><label className={styles.settingLabel}>GDPR / Privacy</label><p className={styles.settingDescription}>Datenexport, Portabilitaet und Kontoloeschung.</p></div> <div className={styles.settingInfo}><label className={styles.settingLabel}>GDPR / Privacy</label><p className={styles.settingDescription}>Datenexport, Portabilitaet und Kontoloeschung.</p></div>
<div className={styles.settingControl}><Link className={`${styles.button} ${styles.linkButton}`} to="/gdpr">GDPR oeffnen</Link></div> <div className={styles.settingControl}><Link className={`${styles.button} ${styles.linkButton}`} to="/gdpr">GDPR oeffnen</Link></div>

View file

@ -111,6 +111,15 @@ export const CommcoachDossierView: React.FC = () => {
} }
}, [activeTab, coach.session?.id, voice]); }, [activeTab, coach.session?.id, voice]);
useEffect(() => {
coach.onDocumentCreatedRef.current = () => {
window.dispatchEvent(new CustomEvent('fileUploaded', { detail: { source: 'commcoachDocument' } }));
};
return () => {
coach.onDocumentCreatedRef.current = null;
};
}, [coach]);
const handleStopTts = useCallback(() => coach.stopTts(), [coach]); const handleStopTts = useCallback(() => coach.stopTts(), [coach]);
const handlePauseTts = useCallback(() => coach.pauseTts(), [coach]); const handlePauseTts = useCallback(() => coach.pauseTts(), [coach]);
const handleResumeTts = useCallback(() => coach.resumeTts(), [coach]); const handleResumeTts = useCallback(() => coach.resumeTts(), [coach]);