DailyLogFilters.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use client"
  2. import { Card, CardContent } from "@/components/ui/card"
  3. import { DateRangeSelector, DateRangePreset } from "./DateRangeSelector"
  4. import { MoodFilter } from "./MoodFilter"
  5. import { DailyLogFilters as FilterTypes } from "@/types/daily-log"
  6. interface DailyLogFiltersProps {
  7. filters: FilterTypes
  8. onFiltersChange: (filters: FilterTypes) => void
  9. }
  10. export function DailyLogFilters({
  11. filters,
  12. onFiltersChange,
  13. }: DailyLogFiltersProps) {
  14. const handleDateRangeChange = (preset: DateRangePreset) => {
  15. const now = new Date()
  16. let startDate: Date
  17. switch (preset) {
  18. case "week":
  19. startDate = new Date(now)
  20. startDate.setDate(now.getDate() - 7)
  21. break
  22. case "month":
  23. startDate = new Date(now)
  24. startDate.setMonth(now.getMonth() - 1)
  25. break
  26. case "3months":
  27. startDate = new Date(now)
  28. startDate.setMonth(now.getMonth() - 3)
  29. break
  30. case "all":
  31. startDate = new Date(0) // Epoch
  32. break
  33. }
  34. onFiltersChange({
  35. ...filters,
  36. startDate: startDate.toISOString().split("T")[0],
  37. endDate: now.toISOString().split("T")[0],
  38. })
  39. }
  40. const handleMoodChange = (moods: number[]) => {
  41. onFiltersChange({
  42. ...filters,
  43. moods: moods.length > 0 ? moods : undefined,
  44. })
  45. }
  46. // Detectar preset actual
  47. const currentPreset = (): DateRangePreset => {
  48. if (!filters.startDate) return "all"
  49. const now = new Date()
  50. const start = new Date(filters.startDate)
  51. const daysDiff = Math.round(
  52. (now.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)
  53. )
  54. if (daysDiff <= 7) return "week"
  55. if (daysDiff <= 31) return "month"
  56. if (daysDiff <= 93) return "3months"
  57. return "all"
  58. }
  59. return (
  60. <Card>
  61. <CardContent className="p-4">
  62. <div className="space-y-3">
  63. <DateRangeSelector
  64. value={currentPreset()}
  65. onChange={handleDateRangeChange}
  66. />
  67. <MoodFilter
  68. selectedMoods={filters.moods || []}
  69. onChange={handleMoodChange}
  70. />
  71. </div>
  72. </CardContent>
  73. </Card>
  74. )
  75. }