sem clerk

This commit is contained in:
2026-03-14 21:24:23 -03:00
parent e126b0d3f9
commit 13d18d3fc3
11 changed files with 279 additions and 531 deletions

View File

@@ -1,7 +1,7 @@
import React, { useState, useRef } from 'react';
import { Download, Upload, AlertTriangle, CheckCircle, Database, FileJson, Info, RefreshCw } from 'lucide-react';
import api from '../../services/api';
import { useOrganization } from '@clerk/clerk-react';
import { useAuth } from '../../context/useAuth';
interface BackupStats {
projects: number;
@@ -28,7 +28,7 @@ interface BackupValidation {
}
export const BackupRestore: React.FC = () => {
const { organization } = useOrganization();
const { appUser } = useAuth();
const [isExporting, setIsExporting] = useState(false);
const [isImporting, setIsImporting] = useState(false);
const [validationResult, setValidationResult] = useState<BackupValidation | null>(null);
@@ -36,7 +36,7 @@ export const BackupRestore: React.FC = () => {
const fileInputRef = useRef<HTMLInputElement>(null);
const handleExport = async () => {
if (!organization) return;
if (!appUser) return;
setIsExporting(true);
try {
@@ -52,7 +52,7 @@ export const BackupRestore: React.FC = () => {
// Nome do arquivo com timestamp
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
link.download = `backup_${organization.name}_${timestamp}.json`;
link.download = `backup_gpi_${timestamp}.json`;
document.body.appendChild(link);
link.click();
@@ -148,8 +148,8 @@ export const BackupRestore: React.FC = () => {
<div className="flex-1">
<h3 className="text-lg font-bold text-text-main mb-2">Backup e Restauração de Dados</h3>
<p className="text-sm text-text-muted leading-relaxed">
Use esta ferramenta para criar cópias de segurança de todos os dados da organização ou restaurar dados de um backup anterior.
<strong className="text-amber-500"> Os backups são específicos para cada organização e não podem ser restaurados em outras organizações.</strong>
Use esta ferramenta para criar cópias de segurança de todos os dados do sistema ou restaurar dados de um backup anterior.
<strong className="text-amber-500"> Os backups são específicos para cada instalação e podem não ser compatíveis entre versões diferentes se houver mudanças estruturais.</strong>
</p>
</div>
</div>
@@ -191,7 +191,7 @@ export const BackupRestore: React.FC = () => {
>
{isExporting ? (
<>
<RefreshCw size={20} className="animate-spin" />
<RefreshCw size={20} className="animate-spin" />
Gerando Backup...
</>
) : (
@@ -248,18 +248,18 @@ export const BackupRestore: React.FC = () => {
</label>
{validationResult && (
<div className={`p-4 rounded-xl border ${validationResult.valid && validationResult.isValidOrganization
<div className={`p-4 rounded-xl border ${validationResult.valid
? 'bg-green-500/10 border-green-500/30'
: 'bg-red-500/10 border-red-500/30'
}`}>
<div className="flex items-start gap-3">
{validationResult.valid && validationResult.isValidOrganization ? (
{validationResult.valid ? (
<CheckCircle size={20} className="text-green-400 flex-shrink-0 mt-0.5" />
) : (
<AlertTriangle size={20} className="text-red-400 flex-shrink-0 mt-0.5" />
)}
<div className="flex-1 space-y-2">
<p className={`text-sm font-bold ${validationResult.valid && validationResult.isValidOrganization
<p className={`text-sm font-bold ${validationResult.valid
? 'text-green-400'
: 'text-red-400'
}`}>
@@ -289,7 +289,7 @@ export const BackupRestore: React.FC = () => {
<button
onClick={handleImport}
disabled={!validationResult?.valid || !validationResult?.isValidOrganization || isImporting}
disabled={!validationResult?.valid || isImporting}
className="w-full flex items-center justify-center gap-2 px-6 py-4 bg-red-500 hover:bg-red-600 text-white rounded-xl font-bold transition-all disabled:opacity-50 disabled:cursor-not-allowed shadow-lg shadow-red-500/20"
>
{isImporting ? (