- Removed verbose debug output from WebSocket connection logs - Removed script execution debug messages - Removed input handling debug logs - Kept important error logging and server startup messages - WebSocket functionality remains fully intact
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
'use client';
|
|
|
|
import { useState } from 'react';
|
|
import { api } from '~/trpc/react';
|
|
|
|
export function ResyncButton() {
|
|
const [isResyncing, setIsResyncing] = useState(false);
|
|
const [lastSync, setLastSync] = useState<Date | null>(null);
|
|
const [syncMessage, setSyncMessage] = useState<string | null>(null);
|
|
|
|
const resyncMutation = api.scripts.resyncScripts.useMutation({
|
|
onSuccess: (data) => {
|
|
setIsResyncing(false);
|
|
setLastSync(new Date());
|
|
if (data.success) {
|
|
setSyncMessage(data.message ?? 'Scripts synced successfully');
|
|
} else {
|
|
setSyncMessage(data.error ?? 'Failed to sync scripts');
|
|
}
|
|
// Clear message after 3 seconds
|
|
setTimeout(() => setSyncMessage(null), 3000);
|
|
},
|
|
onError: (error) => {
|
|
setIsResyncing(false);
|
|
setSyncMessage(`Error: ${error.message}`);
|
|
setTimeout(() => setSyncMessage(null), 3000);
|
|
},
|
|
});
|
|
|
|
const handleResync = async () => {
|
|
setIsResyncing(true);
|
|
setSyncMessage(null);
|
|
resyncMutation.mutate();
|
|
};
|
|
|
|
return (
|
|
<div className="flex items-center space-x-4">
|
|
<button
|
|
onClick={handleResync}
|
|
disabled={isResyncing}
|
|
className={`flex items-center space-x-2 px-4 py-2 rounded-lg font-medium transition-colors ${
|
|
isResyncing
|
|
? 'bg-gray-400 text-white cursor-not-allowed'
|
|
: 'bg-blue-600 text-white hover:bg-blue-700'
|
|
}`}
|
|
>
|
|
{isResyncing ? (
|
|
<>
|
|
<div className="animate-spin rounded-full h-4 w-4 border-b-2 border-white"></div>
|
|
<span>Syncing...</span>
|
|
</>
|
|
) : (
|
|
<>
|
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" />
|
|
</svg>
|
|
<span>Resync Scripts</span>
|
|
</>
|
|
)}
|
|
</button>
|
|
|
|
{lastSync && (
|
|
<div className="text-sm text-gray-500">
|
|
Last sync: {lastSync.toLocaleTimeString()}
|
|
</div>
|
|
)}
|
|
|
|
{syncMessage && (
|
|
<div className={`text-sm px-3 py-1 rounded-lg ${
|
|
syncMessage.includes('Error') || syncMessage.includes('Failed')
|
|
? 'bg-red-100 text-red-700'
|
|
: 'bg-green-100 text-green-700'
|
|
}`}>
|
|
{syncMessage}
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|