Fadikkop commited on
Commit
5bc557a
·
verified ·
1 Parent(s): 6db8b06

Weiterhin steht in "offene Aufgaben" nur für jeden Eintrag einmal "Lädt…". Dort sollen die Aufgaben dynamisch aufgelistet werden, bearbeitet werden können und im Pomodoro gestartet werden können. Auch im Pomodoro Modus will ich die ausgewählte Aufgabe auswählen können. Stelle sicher, dass alles wie beschrieben funktioniert!

Browse files
Files changed (2) hide show
  1. components/task-item.js +6 -7
  2. script.js +50 -22
components/task-item.js CHANGED
@@ -291,15 +291,14 @@ const { title, estimatedTime, spentTime, tags } = this.task;
291
  this.classList.remove('completed');
292
  }
293
  }
294
-
295
  handleFocus(e) {
296
- this.dispatchEvent(new CustomEvent('focus-task', {
297
- detail: { taskId: this.getAttribute('task-id') },
298
- bubbles: true
299
- }));
 
300
  }
301
-
302
- handleEdit(e) {
303
  const editForm = this.shadowRoot.querySelector('.edit-form');
304
  editForm.classList.add('active');
305
  }
 
291
  this.classList.remove('completed');
292
  }
293
  }
 
294
  handleFocus(e) {
295
+ const taskId = this.getAttribute('task-id');
296
+ const task = state.tasks.find(t => t.id === taskId);
297
+ if (task) {
298
+ startFocusMode(task);
299
+ }
300
  }
301
+ handleEdit(e) {
 
302
  const editForm = this.shadowRoot.querySelector('.edit-form');
303
  editForm.classList.add('active');
304
  }
script.js CHANGED
@@ -347,7 +347,6 @@ function render() {
347
  renderTags();
348
  renderTimeline();
349
  }
350
-
351
  function renderTasks() {
352
  const openContainer = document.getElementById('open-tasks');
353
  const completedContainer = document.getElementById('completed-tasks');
@@ -359,34 +358,36 @@ function renderTasks() {
359
  if (openTasks.length === 0) {
360
  openContainer.innerHTML = '<div class="empty-state"><i data-feather="inbox"></i><p>Keine offenen Aufgaben</p></div>';
361
  } else {
362
- openContainer.innerHTML = openTasks.map(task => `
363
- <task-item task-id="${task.id}" completed="false"></task-item>
364
- `).join('');
 
 
 
 
 
365
  }
366
 
367
  // Render completed tasks
368
  if (completedTasks.length === 0) {
369
  completedContainer.innerHTML = '<div class="empty-state"><i data-feather="check-circle"></i><p>Keine erledigten Aufgaben</p></div>';
370
  } else {
371
- completedContainer.innerHTML = completedTasks.map(task => `
372
- <task-item task-id="${task.id}" completed="true"></task-item>
373
- `).join('');
 
 
 
 
 
374
  }
375
 
376
  document.getElementById('open-count').textContent = openTasks.length;
377
  document.getElementById('completed-count').textContent = completedTasks.length;
378
 
379
- // Render task components
380
- document.querySelectorAll('task-item').forEach(el => {
381
- const taskId = el.getAttribute('task-id');
382
- const task = state.tasks.find(t => t.id === taskId);
383
- if (task) {
384
- el.task = task;
385
- el.tags = state.tags;
386
- }
387
- });
388
  }
389
-
390
  function renderProgressBars() {
391
  // Overall progress
392
  const totalEstimated = state.tasks.reduce((sum, t) => sum + t.estimatedTime, 0) || 1;
@@ -558,16 +559,43 @@ function scrollToCurrentTime() {
558
 
559
  // Focus Mode & Pomodoro
560
  function enterFocusMode() {
561
- const unfinishedTasks = state.tasks.filter(t => !t.completed);
562
- if (unfinishedTasks.length === 0) {
 
563
  alert('Keine offenen Aufgaben für den Fokus-Modus!');
564
  return;
565
  }
566
-
567
- const task = unfinishedTasks[0]; // Use first incomplete task
568
- startFocusMode(task);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
569
  }
570
 
 
 
 
 
 
 
 
571
  function startFocusMode(task) {
572
  state.focusTask = task;
573
  document.getElementById('focus-task-title').textContent = task.title;
 
347
  renderTags();
348
  renderTimeline();
349
  }
 
350
  function renderTasks() {
351
  const openContainer = document.getElementById('open-tasks');
352
  const completedContainer = document.getElementById('completed-tasks');
 
358
  if (openTasks.length === 0) {
359
  openContainer.innerHTML = '<div class="empty-state"><i data-feather="inbox"></i><p>Keine offenen Aufgaben</p></div>';
360
  } else {
361
+ openContainer.innerHTML = openTasks.map(task => {
362
+ const taskElement = document.createElement('task-item');
363
+ taskElement.setAttribute('task-id', task.id);
364
+ taskElement.setAttribute('completed', 'false');
365
+ taskElement.task = task;
366
+ taskElement.tags = state.tags;
367
+ return taskElement.outerHTML;
368
+ }).join('');
369
  }
370
 
371
  // Render completed tasks
372
  if (completedTasks.length === 0) {
373
  completedContainer.innerHTML = '<div class="empty-state"><i data-feather="check-circle"></i><p>Keine erledigten Aufgaben</p></div>';
374
  } else {
375
+ completedContainer.innerHTML = completedTasks.map(task => {
376
+ const taskElement = document.createElement('task-item');
377
+ taskElement.setAttribute('task-id', task.id);
378
+ taskElement.setAttribute('completed', 'true');
379
+ taskElement.task = task;
380
+ taskElement.tags = state.tags;
381
+ return taskElement.outerHTML;
382
+ }).join('');
383
  }
384
 
385
  document.getElementById('open-count').textContent = openTasks.length;
386
  document.getElementById('completed-count').textContent = completedTasks.length;
387
 
388
+ // Replace feather icons
389
+ feather.replace();
 
 
 
 
 
 
 
390
  }
 
391
  function renderProgressBars() {
392
  // Overall progress
393
  const totalEstimated = state.tasks.reduce((sum, t) => sum + t.estimatedTime, 0) || 1;
 
559
 
560
  // Focus Mode & Pomodoro
561
  function enterFocusMode() {
562
+ // Open a task selection modal
563
+ const openTasks = state.tasks.filter(t => !t.completed);
564
+ if (openTasks.length === 0) {
565
  alert('Keine offenen Aufgaben für den Fokus-Modus!');
566
  return;
567
  }
568
+
569
+ const modal = document.createElement('div');
570
+ modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center p-4';
571
+ modal.innerHTML = `
572
+ <div class="bg-gray-800 rounded-xl p-6 max-w-md w-full max-h-[80vh] overflow-y-auto">
573
+ <h3 class="text-xl font-semibold mb-4">Aufgabe für Fokus-Modus auswählen</h3>
574
+ <div class="space-y-2">
575
+ ${openTasks.map(task => `
576
+ <div class="bg-gray-700 p-3 rounded-lg cursor-pointer hover:bg-gray-600 transition"
577
+ onclick="startFocusModeWithId('${task.id}')">
578
+ <div class="font-medium">${task.title}</div>
579
+ <div class="text-sm text-gray-400">${formatTime(task.estimatedTime)}</div>
580
+ </div>
581
+ `).join('')}
582
+ </div>
583
+ <button onclick="this.closest('div[class*=\"fixed\"]').remove()"
584
+ class="mt-4 px-4 py-2 bg-gray-700 hover:bg-gray-600 rounded-lg transition w-full">
585
+ Abbrechen
586
+ </button>
587
+ </div>
588
+ `;
589
+ document.body.appendChild(modal);
590
  }
591
 
592
+ function startFocusModeWithId(taskId) {
593
+ const task = state.tasks.find(t => t.id === taskId);
594
+ if (task) {
595
+ document.querySelector('div[class*="fixed"]')?.remove();
596
+ startFocusMode(task);
597
+ }
598
+ }
599
  function startFocusMode(task) {
600
  state.focusTask = task;
601
  document.getElementById('focus-task-title').textContent = task.title;