diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 5c03d4b..d268c54 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -44,7 +44,7 @@ export default function App() { } return ( -
+

Packlist

diff --git a/frontend/src/pages/TripChecklist.tsx b/frontend/src/pages/TripChecklist.tsx index b6ab5d8..30fdf61 100644 --- a/frontend/src/pages/TripChecklist.tsx +++ b/frontend/src/pages/TripChecklist.tsx @@ -127,54 +127,10 @@ export default function TripChecklist({ trips }: { trips: any[] }) { return ( <> - {normalItems.map((item) => ( -
  • { - await toggleTripItem(item.id); - const updated = await getTripItems(id!); - setItems(updated); - }} - > - - - {item.name_calculated} - - {item.item && item.item.tags && item.item.tags.length > 0 && ( - - {[...item.item.tags] - .slice() - .sort((a, b) => a.name.localeCompare(b.name)) - .map((tag: any) => ( - - #{tag.name} - - ))} - - )} -
  • - ))} - {Object.entries(slashCategoryMap).map(([cat, catItems]) => ( - -
  • -

    - {cat.charAt(0).toUpperCase() + cat.slice(1)} -

    -
  • - {catItems.map((item) => ( + {/* Haupt-Items als Grid */} + {normalItems.length > 0 && ( +
      + {normalItems.map((item) => (
    • - {item._sub} + {item.name_calculated} {item.item && item.item.tags && item.item.tags.length > 0 && ( @@ -214,6 +170,58 @@ export default function TripChecklist({ trips }: { trips: any[] }) { )}
    • ))} +
    + )} + {/* Slash-Kategorien wie gehabt */} + {Object.entries(slashCategoryMap).map(([cat, catItems]) => ( + +
  • +

    + {cat.charAt(0).toUpperCase() + cat.slice(1)} +

    +
  • +
      + {catItems.map((item) => ( +
    • { + await toggleTripItem(item.id); + const updated = await getTripItems(id!); + setItems(updated); + }} + > + + + {item._sub} + + {item.item && item.item.tags && item.item.tags.length > 0 && ( + + {[...item.item.tags] + .slice() + .sort((a, b) => a.name.localeCompare(b.name)) + .map((tag: any) => ( + + #{tag.name} + + ))} + + )} +
    • + ))} +
    ))} @@ -228,93 +236,94 @@ export default function TripChecklist({ trips }: { trips: any[] }) { } return ( -
    +
    {/* Trip-Titel und Zeitraum */} -
    -

    {trip.name}

    -
    +
    +

    {trip.name}

    +
    {trip.start_date} – {trip.end_date}
    -
    - {/* Tag-Liste */} -
    - Tags: - {selectedTags.length === 0 ? ( - keine - ) : ( - selectedTags.map((tag: any) => { - const isMarked = markedTags.some((mt: any) => mt.id === tag.id); - return ( - handleToggleMark(tag.id)} - onMouseEnter={() => setHoveredTag(tag.id)} - onMouseLeave={() => setHoveredTag(null)} - > - #{tag.name} - {hoveredTag === tag.id && ( - - )} - - ); - }) - )} - {/* Tag hinzufügen */} -
    - setTagInput(e.target.value)} - className="border rounded px-2 py-0.5 text-sm ml-2" - list="tag-suggestions" - /> - - {allTags - .filter( - (t) => - t.name.toLowerCase().includes(tagInput.toLowerCase()) && - !selectedTags.some((st) => st.id === t.id) - ) - .map((t) => ( - - {tagInput && - allTags - .filter( - (t) => - t.name.toLowerCase() === tagInput.toLowerCase() && - !selectedTags.some((st) => st.id === t.id) - ) - .map((t) => ( - - ))} + #{tag.name} + {hoveredTag === tag.id && ( + + )} + + ); + }) + )} + {/* Tag hinzufügen */} +
    + setTagInput(e.target.value)} + className="border rounded px-2 py-0.5 text-sm ml-2" + list="tag-suggestions" + /> + + {allTags + .filter( + (t) => + t.name.toLowerCase().includes(tagInput.toLowerCase()) && + !selectedTags.some((st) => st.id === t.id) + ) + .map((t) => ( + + {tagInput && + allTags + .filter( + (t) => + t.name.toLowerCase() === tagInput.toLowerCase() && + !selectedTags.some((st) => st.id === t.id) + ) + .map((t) => ( + + ))} +
    {/* ...Rest der Checklist... */} -
      +
        {/* 1. Ohne Tag */} {renderItemsWithCategories(itemsWithoutTag)}