T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/domains/lavocat.ca/public_html/src/components/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/src/components/DocumentEditor.tsx
import React, { useState } from 'react';

interface DocumentEditorProps {
  documentId: string;
  initialContent: string;
  onSave?: (newContent: string) => void;
}

export default function DocumentEditor({ documentId, initialContent, onSave }: DocumentEditorProps) {
  const [content, setContent] = useState(initialContent);
  const [saving, setSaving] = useState(false);
  const [error, setError] = useState<string | null>(null);

  const handleSave = async () => {
    setSaving(true);
    setError(null);
    try {
      const res = await fetch(`/api/documents/${documentId}/versions`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ content }),
      });
      if (!res.ok) throw new Error('Failed to save');
      if (onSave) onSave(content);
    } catch (e: any) {
      setError(e.message);
    } finally {
      setSaving(false);
    }
  };

  return (
    <div>
      <textarea
        style={{ width: '100%', minHeight: 200 }}
        value={content}
        onChange={e => setContent(e.target.value)}
        disabled={saving}
      />
      <button onClick={handleSave} disabled={saving} style={{ marginTop: 8 }}>
        {saving ? 'Saving...' : 'Save as New Version'}
      </button>
      {error && <div style={{ color: 'red' }}>{error}</div>}
    </div>
  );
} 

CasperSecurity Mini