diff --git a/src/components/WorksheetList.jsx b/src/components/WorksheetList.jsx
index 0d9e365..0f5a31f 100644
--- a/src/components/WorksheetList.jsx
+++ b/src/components/WorksheetList.jsx
@@ -1,6 +1,17 @@
import { useState } from 'react'
-import { FaClock, FaUser, FaExchangeAlt, FaComment, FaChevronDown, FaChevronUp, FaPen } from 'react-icons/fa'
-import { serviceTypeLabel, needsTimeEntry } from '../lib/ticketForm'
+import { FaClock, FaUser, FaExchangeAlt, FaComment, FaChevronDown, FaChevronUp, FaPen, FaCheck } from 'react-icons/fa'
+import { serviceTypeLabel, needsTimeEntry, worksheetTone } from '../lib/ticketForm'
+
+// Kopffarbe je Zustand (worksheetTone): orange = Git-Zeit fehlt, gruen = Git-Zeit eingetragen
+const TONES = {
+ 'git-open': { border: '#f97316', base: 'linear-gradient(135deg, #f97316 0%, #ea580c 100%)', hover: 'linear-gradient(135deg, #ea580c 0%, #c2410c 100%)' },
+ 'git-done': { border: '#10b981', base: 'linear-gradient(135deg, #10b981 0%, #059669 100%)', hover: 'linear-gradient(135deg, #059669 0%, #047857 100%)' },
+ comment: { border: '#3b82f6', base: 'linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)', hover: 'linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%)' },
+ work: { border: '#4a5568', base: 'linear-gradient(135deg, #4a5568 0%, #2d3748 100%)', hover: 'linear-gradient(135deg, #2d3748 0%, #1a202c 100%)' },
+}
+
+// Hinweise im farbigen Kopf: mit der grauen Badge-Schrift waeren sie kaum lesbar
+const headerBadgeStyle = { background: 'rgba(255,255,255,0.3)', color: 'white', marginLeft: '8px' }
const headerButtonStyle = {
background: 'rgba(255,255,255,0.25)',
@@ -61,13 +72,15 @@ export default function WorksheetList({ worksheets, totalTime, loading, onEditTi
{worksheets.map((ws, index) => {
const isExpanded = expandedWorksheets[ws.wsid] || false
const isGit = ws.serviceType === 'GIT'
+ const tone = worksheetTone(ws)
+ const colors = TONES[tone]
return (
{
@@ -82,11 +95,7 @@ export default function WorksheetList({ worksheets, totalTime, loading, onEditTi
className="card-header d-flex justify-content-between align-items-center py-3"
onClick={() => toggleWorksheet(ws.wsid)}
style={{
- background: isGit
- ? 'linear-gradient(135deg, #f97316 0%, #ea580c 100%)'
- : ws.isComment
- ? 'linear-gradient(135deg, #10b981 0%, #059669 100%)'
- : 'linear-gradient(135deg, #4a5568 0%, #2d3748 100%)',
+ background: colors.base,
color: 'white',
border: 'none',
cursor: 'pointer',
@@ -94,18 +103,10 @@ export default function WorksheetList({ worksheets, totalTime, loading, onEditTi
transition: 'background 0.2s ease'
}}
onMouseEnter={(e) => {
- e.currentTarget.style.background = isGit
- ? 'linear-gradient(135deg, #ea580c 0%, #c2410c 100%)'
- : ws.isComment
- ? 'linear-gradient(135deg, #059669 0%, #047857 100%)'
- : 'linear-gradient(135deg, #2d3748 0%, #1a202c 100%)'
+ e.currentTarget.style.background = colors.hover
}}
onMouseLeave={(e) => {
- e.currentTarget.style.background = isGit
- ? 'linear-gradient(135deg, #f97316 0%, #ea580c 100%)'
- : ws.isComment
- ? 'linear-gradient(135deg, #10b981 0%, #059669 100%)'
- : 'linear-gradient(135deg, #4a5568 0%, #2d3748 100%)'
+ e.currentTarget.style.background = colors.base
}}
>
@@ -117,19 +118,20 @@ export default function WorksheetList({ worksheets, totalTime, loading, onEditTi
WSID {ws.wsid}
{ws.isComment && !isGit && (
-
+
Kommentar
)}
- {needsTimeEntry(ws) && (
-
+ {tone === 'git-open' && (
+
Zeit offen
)}
+ {tone === 'git-done' && (
+
+ Zeit eingetragen
+
+ )}
{ws.countsToPlan && !ws.isComment && (
{formatTime(ws.totalTime)}
)}
-
{serviceTypeLabel(ws.serviceType)}
diff --git a/src/hooks/useWorksheets.js b/src/hooks/useWorksheets.js
index 4f08761..3777d9a 100644
--- a/src/hooks/useWorksheets.js
+++ b/src/hooks/useWorksheets.js
@@ -150,8 +150,14 @@ export function useWorksheets(woid = null) {
const [error, setError] = useState(null)
const fetchWorksheets = useCallback(async () => {
+ // Zugeklappte Tickets uebergeben keine WOID - dann gibt es nichts zu laden
+ if (!woid) {
+ setWorksheets([])
+ setLoading(false)
+ return
+ }
setLoading(true)
-
+
if (DEMO_MODE) {
// Filter demo data by WOID if provided
const filtered = woid
@@ -163,12 +169,8 @@ export function useWorksheets(woid = null) {
}
try {
- const queries = [Query.orderDesc('$createdAt')]
-
- // Filter by WOID if provided
- if (woid) {
- queries.push(Query.equal('woid', woid))
- }
+ // Ohne limit liefert Appwrite nur 25 Eintraege, ein Ticket sammelt aber viele Git-Pushes
+ const queries = [Query.orderDesc('$createdAt'), Query.equal('woid', woid), Query.limit(5000)]
if (import.meta.env.DEV) {
console.log('📋 Fetching worksheets:')
diff --git a/src/lib/ticketForm.js b/src/lib/ticketForm.js
index 54f7eea..070ccd2 100644
--- a/src/lib/ticketForm.js
+++ b/src/lib/ticketForm.js
@@ -33,6 +33,13 @@ export function needsTimeEntry(worksheet) {
return isGitWorksheet(worksheet) && (!worksheet.startTime || !Number(worksheet.totalTime))
}
+// Farbe in der Arbeitsblatt-Liste: Git-Pushes sind orange, bis ihre Zeit nachgetragen
+// ist, danach gruen. Kommentare blau, normale Arbeitszeit grau.
+export function worksheetTone(worksheet) {
+ if (isGitWorksheet(worksheet)) return needsTimeEntry(worksheet) ? 'git-open' : 'git-done'
+ return worksheet?.isComment ? 'comment' : 'work'
+}
+
const sameName = (a, b) => String(a || '').trim().toLowerCase() === String(b || '').trim().toLowerCase()
/* Wer hat das Arbeitsblatt erstellt? Normale Eintraege tragen die Appwrite-ID des