Untitled

 avatar
unknown
plain_text
2 months ago
4.0 kB
3
Indexable
      <CardContent>
        <ChartContainer config={chartConfig} className="aspect-auto h-[400px] w-full">
          <ResponsiveContainer width="100%" height="100%">
            <LineChart 
              data={chartData}
              margin={{ top: 20, right: 20, bottom: 20, left: 20 }}
            >
              <CartesianGrid vertical={false} />
              <XAxis
                dataKey="date"
                tickFormatter={(date) => format(date, "MMM dd")}
                minTickGap={40}
                axisLine={false}
                tickLine={false}
                tickMargin={8}
              />
              <YAxis
                domain={[0, 100]}
                axisLine={false}
                tickLine={false}
                tickFormatter={(value) => `${value}%`}
              />

              <Tooltip
                wrapperStyle={{ outline: 'none' }}
                isAnimationActive={false}
                cursor={{ strokeDasharray: '3 3' }}
                content={({ active, payload, label }) => {
                  if (!active || !payload?.length) return null

                  const date = format(label, "MMM dd, yyyy HH:mm")

                  return (
                    <div className="rounded-lg border bg-background p-2 shadow-sm">
                      <div className="grid gap-2">
                        <div className="text-sm font-medium">{date}</div>
                        {payload.map((entry) => (
                          <div key={entry.dataKey} className="flex items-center gap-2">
                            <div 
                              className="h-2 w-2 rounded-full" 
                              style={{ background: entry.stroke }} 
                            />
                            <span className="text-sm text-muted-foreground">
                              {entry.name || formatBinName(entry.dataKey)}:
                            </span>
                            <span className="text-sm font-medium">
                              {`${entry.value?.toFixed(0)}%`}
                            </span>
                          </div>
                        ))}
                      </div>
                    </div>
                  )
                }}
              />

              <ChartLegend content={<ChartLegendContent />} />

              {selectedBin === "all" ? (
                activeBins.map(bin => (
                  <Line
                    key={bin}
                    type="monotone"
                    dataKey={bin}
                    name={formatBinName(bin)}
                    stroke={binColors[bin as keyof typeof binColors]}
                    strokeWidth={2}
                    dot={false}
                    connectNulls
                    activeDot={{ r: 4, strokeWidth: 1 }}
                    isAnimationActive={false}
                  />
                ))
              ) : (
                <>
                  <Line
                    type="monotone"
                    dataKey="fillLevel"
                    name={formatBinName(selectedBin)}
                    stroke={binColors[selectedBin as keyof typeof binColors]}
                    strokeWidth={2}
                    dot={false}
                    connectNulls
                    activeDot={{ r: 4, strokeWidth: 1 }}
                    isAnimationActive={false}
                  />
                  <Scatter
                    data={chartData.filter((d: any) => d.emptied)}
                    dataKey="fillLevel"
                    fill="var(--chart-5)"
                    shape={(props) => (
                      <circle {...props} r={6} strokeWidth={2} stroke="var(--background)" />
                    )}
                  />
                </>
              )}
            </LineChart>
          </ResponsiveContainer>
        </ChartContainer>
      </CardContent>
Editor is loading...
Leave a Comment