akhaliq HF Staff commited on
Commit
35169fd
Β·
1 Parent(s): d1b315f
Files changed (2) hide show
  1. frontend/src/app/page.tsx +39 -20
  2. frontend/src/lib/api.ts +24 -2
frontend/src/app/page.tsx CHANGED
@@ -11,22 +11,8 @@ import { isAuthenticated as checkIsAuthenticated, getStoredToken } from '@/lib/a
11
  import type { Message, Language, CodeGenerationRequest } from '@/types';
12
 
13
  export default function Home() {
14
- // Load messages from localStorage on mount (CRITICAL FOR IMPORT/DEPLOY TRACKING!)
15
- const [messages, setMessages] = useState<Message[]>(() => {
16
- if (typeof window !== 'undefined') {
17
- const saved = localStorage.getItem('anycoder_messages');
18
- if (saved) {
19
- try {
20
- const parsed = JSON.parse(saved);
21
- console.log('[localStorage] Loaded messages from localStorage:', parsed.length, 'messages');
22
- return parsed;
23
- } catch (e) {
24
- console.error('[localStorage] Failed to parse saved messages:', e);
25
- }
26
- }
27
- }
28
- return [];
29
- });
30
 
31
  const [generatedCode, setGeneratedCode] = useState('');
32
  const [selectedLanguage, setSelectedLanguage] = useState<Language>('html');
@@ -39,9 +25,25 @@ export default function Home() {
39
  // Mobile view state: 'chat', 'editor', or 'settings'
40
  const [mobileView, setMobileView] = useState<'chat' | 'editor' | 'settings'>('editor');
41
 
42
- // Save messages to localStorage whenever they change (CRITICAL FOR PERSISTENCE!)
43
  useEffect(() => {
44
  if (typeof window !== 'undefined') {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  localStorage.setItem('anycoder_messages', JSON.stringify(messages));
46
  console.log('[localStorage] Saved', messages.length, 'messages to localStorage');
47
  }
@@ -182,6 +184,11 @@ export default function Home() {
182
  };
183
 
184
  const handleDeploy = async () => {
 
 
 
 
 
185
  if (!generatedCode) {
186
  alert('No code to publish! Generate some code first.');
187
  return;
@@ -313,10 +320,13 @@ export default function Home() {
313
  existing_repo_id: deployRequest.existing_repo_id,
314
  space_name: deployRequest.space_name,
315
  language: deployRequest.language,
316
- has_code: !!deployRequest.code
 
317
  });
 
318
 
319
  const response = await apiClient.deploy(deployRequest);
 
320
 
321
  if (response.success) {
322
  // Update current repo ID if we got one back
@@ -356,8 +366,17 @@ export default function Home() {
356
  } else {
357
  alert(`Deployment failed: ${response.message}`);
358
  }
359
- } catch (error) {
360
- alert(`Deployment error: ${error instanceof Error ? error.message : 'Unknown error'}`);
 
 
 
 
 
 
 
 
 
361
  }
362
  };
363
 
 
11
  import type { Message, Language, CodeGenerationRequest } from '@/types';
12
 
13
  export default function Home() {
14
+ // Initialize messages as empty array (will load from localStorage in useEffect)
15
+ const [messages, setMessages] = useState<Message[]>([]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  const [generatedCode, setGeneratedCode] = useState('');
18
  const [selectedLanguage, setSelectedLanguage] = useState<Language>('html');
 
25
  // Mobile view state: 'chat', 'editor', or 'settings'
26
  const [mobileView, setMobileView] = useState<'chat' | 'editor' | 'settings'>('editor');
27
 
28
+ // Load messages from localStorage on mount (client-side only to avoid hydration issues)
29
  useEffect(() => {
30
  if (typeof window !== 'undefined') {
31
+ const saved = localStorage.getItem('anycoder_messages');
32
+ if (saved) {
33
+ try {
34
+ const parsed = JSON.parse(saved);
35
+ console.log('[localStorage] Loaded messages from localStorage:', parsed.length, 'messages');
36
+ setMessages(parsed);
37
+ } catch (e) {
38
+ console.error('[localStorage] Failed to parse saved messages:', e);
39
+ }
40
+ }
41
+ }
42
+ }, []); // Empty deps = run once on mount
43
+
44
+ // Save messages to localStorage whenever they change (CRITICAL FOR PERSISTENCE!)
45
+ useEffect(() => {
46
+ if (typeof window !== 'undefined' && messages.length > 0) {
47
  localStorage.setItem('anycoder_messages', JSON.stringify(messages));
48
  console.log('[localStorage] Saved', messages.length, 'messages to localStorage');
49
  }
 
184
  };
185
 
186
  const handleDeploy = async () => {
187
+ console.log('[Deploy] 🎬 handleDeploy called');
188
+ console.log('[Deploy] generatedCode exists?', !!generatedCode);
189
+ console.log('[Deploy] generatedCode length:', generatedCode?.length);
190
+ console.log('[Deploy] generatedCode preview:', generatedCode?.substring(0, 200));
191
+
192
  if (!generatedCode) {
193
  alert('No code to publish! Generate some code first.');
194
  return;
 
320
  existing_repo_id: deployRequest.existing_repo_id,
321
  space_name: deployRequest.space_name,
322
  language: deployRequest.language,
323
+ has_code: !!deployRequest.code,
324
+ code_length: deployRequest.code?.length
325
  });
326
+ console.log('[Deploy] Full request object:', JSON.stringify(deployRequest, null, 2).substring(0, 500));
327
 
328
  const response = await apiClient.deploy(deployRequest);
329
+ console.log('[Deploy] βœ… Response received:', response);
330
 
331
  if (response.success) {
332
  // Update current repo ID if we got one back
 
366
  } else {
367
  alert(`Deployment failed: ${response.message}`);
368
  }
369
+ } catch (error: any) {
370
+ console.error('[Deploy] Full error object:', error);
371
+ console.error('[Deploy] Error response:', error.response);
372
+ console.error('[Deploy] Error data:', error.response?.data);
373
+
374
+ const errorMessage = error.response?.data?.detail
375
+ || error.response?.data?.message
376
+ || error.message
377
+ || 'Unknown error';
378
+
379
+ alert(`Deployment error: ${errorMessage}\n\nCheck console for details.`);
380
  }
381
  };
382
 
frontend/src/lib/api.ts CHANGED
@@ -247,8 +247,30 @@ class ApiClient {
247
  }
248
 
249
  async deploy(request: DeploymentRequest): Promise<DeploymentResponse> {
250
- const response = await this.client.post<DeploymentResponse>('/api/deploy', request);
251
- return response.data;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  }
253
 
254
  async importProject(url: string, preferLocal: boolean = false): Promise<any> {
 
247
  }
248
 
249
  async deploy(request: DeploymentRequest): Promise<DeploymentResponse> {
250
+ console.log('[API Client] Deploy request:', {
251
+ endpoint: '/api/deploy',
252
+ method: 'POST',
253
+ baseURL: API_URL,
254
+ hasToken: !!this.token,
255
+ language: request.language,
256
+ code_length: request.code?.length,
257
+ space_name: request.space_name,
258
+ existing_repo_id: request.existing_repo_id,
259
+ });
260
+
261
+ try {
262
+ const response = await this.client.post<DeploymentResponse>('/api/deploy', request);
263
+ console.log('[API Client] Deploy response:', response.status, response.data);
264
+ return response.data;
265
+ } catch (error: any) {
266
+ console.error('[API Client] Deploy error:', {
267
+ status: error.response?.status,
268
+ statusText: error.response?.statusText,
269
+ data: error.response?.data,
270
+ message: error.message,
271
+ });
272
+ throw error;
273
+ }
274
  }
275
 
276
  async importProject(url: string, preferLocal: boolean = false): Promise<any> {