mirror of
https://github.com/freedbygrace/ActiveDirectoryManager.git
synced 2026-08-05 16:57:40 +00:00
Add dashboard export functionality and improved layout
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 705f2157-ef97-4fbd-89e4-8c7f2ecaea90 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7ed01c5f-a82d-405a-b728-b2e3d127c60c/12e7f106-633d-47ab-9454-e16cec53726c.jpg
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect, useRef } from "react";
|
||||||
import { useQuery } from "@tanstack/react-query";
|
import { useQuery } from "@tanstack/react-query";
|
||||||
import { useToast } from "@/hooks/use-toast";
|
import { useToast } from "@/hooks/use-toast";
|
||||||
import { useLocation } from "wouter";
|
import { useLocation } from "wouter";
|
||||||
import { DashboardLayout, DashboardConfig } from "@/components/dashboard/dashboard-layout";
|
import { DashboardLayout, DashboardConfig } from "@/components/dashboard/dashboard-layout";
|
||||||
import { ShareDashboardDialog } from "@/components/dashboard/share-dashboard-dialog";
|
import { ShareDashboardDialog } from "@/components/dashboard/share-dashboard-dialog";
|
||||||
|
import { DashboardExport } from "@/components/dashboard/dashboard-export";
|
||||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Plus, RefreshCw, Share2, Trash2, ArrowLeft } from "lucide-react";
|
import { Plus, RefreshCw, Share2, Trash2, ArrowLeft } from "lucide-react";
|
||||||
@@ -57,6 +58,7 @@ export default function CustomDashboardsPage() {
|
|||||||
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
||||||
const [dashboardToDelete, setDashboardToDelete] = useState<string | null>(null);
|
const [dashboardToDelete, setDashboardToDelete] = useState<string | null>(null);
|
||||||
const [dataSourcesLoading, setDataSourcesLoading] = useState(true);
|
const [dataSourcesLoading, setDataSourcesLoading] = useState(true);
|
||||||
|
const dashboardRef = useRef<HTMLDivElement>(null);
|
||||||
const [dataSources, setDataSources] = useState<Array<{
|
const [dataSources, setDataSources] = useState<Array<{
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
@@ -234,7 +236,7 @@ export default function CustomDashboardsPage() {
|
|||||||
const newDashboard: DashboardConfig = {
|
const newDashboard: DashboardConfig = {
|
||||||
id: uuidv4(),
|
id: uuidv4(),
|
||||||
name: values.name,
|
name: values.name,
|
||||||
layout: { lg: [] },
|
layouts: { lg: [] },
|
||||||
widgets: [],
|
widgets: [],
|
||||||
branding: {
|
branding: {
|
||||||
title: values.name,
|
title: values.name,
|
||||||
@@ -324,14 +326,20 @@ export default function CustomDashboardsPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
{dashboards.length > 0 && activeTab !== "dashboard-overview" && (
|
{dashboards.length > 0 && activeTab !== "dashboard-overview" && (
|
||||||
<Button
|
<>
|
||||||
variant="outline"
|
<DashboardExport
|
||||||
onClick={() => confirmDelete(activeTab)}
|
dashboardRef={dashboardRef}
|
||||||
className="text-destructive hover:bg-destructive/10"
|
title={dashboards.find(d => d.id === activeTab)?.name || "Custom Dashboard"}
|
||||||
>
|
/>
|
||||||
<Trash2 className="h-4 w-4 mr-2" />
|
<Button
|
||||||
Delete Dashboard
|
variant="outline"
|
||||||
</Button>
|
onClick={() => confirmDelete(activeTab)}
|
||||||
|
className="text-destructive hover:bg-destructive/10"
|
||||||
|
>
|
||||||
|
<Trash2 className="h-4 w-4 mr-2" />
|
||||||
|
Delete Dashboard
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
<Button onClick={() => setIsCreateDialogOpen(true)}>
|
<Button onClick={() => setIsCreateDialogOpen(true)}>
|
||||||
<Plus className="h-4 w-4 mr-2" />
|
<Plus className="h-4 w-4 mr-2" />
|
||||||
@@ -367,11 +375,13 @@ export default function CustomDashboardsPage() {
|
|||||||
<span className="ml-2">Loading data sources...</span>
|
<span className="ml-2">Loading data sources...</span>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<DashboardLayout
|
<div ref={dashboardRef}>
|
||||||
config={dashboard}
|
<DashboardLayout
|
||||||
onSave={handleSaveDashboard}
|
config={dashboard}
|
||||||
dataSources={dataSources}
|
onSave={handleSaveDashboard}
|
||||||
/>
|
dataSources={dataSources}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
))
|
))
|
||||||
|
|||||||
Reference in New Issue
Block a user