Files
ActiveDirectoryManager/client/src/lib/snapshot-utils.ts
T

95 lines
2.1 KiB
TypeScript

import { DashboardConfig } from "@/components/dashboard/dashboard-layout";
// Interface for snapshot branding options
export interface SnapshotBranding {
logoUrl: string;
companyName: string;
title: string;
description: string;
primaryColor: string;
secondaryColor: string;
showDate: boolean;
showFooter: boolean;
footerText: string;
expiresInDays: number;
}
// Interface for snapshot data
export interface SnapshotData {
dashboard: DashboardConfig;
dataSources: Array<{
id: string;
name: string;
data: any[];
fields: Array<{ name: string; type: string }>;
}>;
branding: SnapshotBranding;
createdAt: string;
expiresAt: string | null;
}
/**
* Generate a snapshot of the dashboard data for sharing
*/
export function generateSnapshot({
dashboard,
dataSources,
branding,
}: {
dashboard: DashboardConfig;
dataSources: Array<{
id: string;
name: string;
data: any[];
fields: Array<{ name: string; type: string }>;
}>;
branding: SnapshotBranding;
}): SnapshotData {
const createdAt = new Date().toISOString();
// Calculate expiry date if applicable
let expiresAt: string | null = null;
if (branding.expiresInDays > 0) {
const expiry = new Date();
expiry.setDate(expiry.getDate() + branding.expiresInDays);
expiresAt = expiry.toISOString();
}
const snapshotData: SnapshotData = {
dashboard,
dataSources,
branding,
createdAt,
expiresAt,
};
return snapshotData;
}
/**
* Checks if a snapshot has expired
*/
export function isSnapshotExpired(snapshot: SnapshotData): boolean {
if (!snapshot.expiresAt) {
return false; // No expiry date means it never expires
}
const expiryDate = new Date(snapshot.expiresAt);
const now = new Date();
return now > expiryDate;
}
/**
* Format a date for display in the snapshot
*/
export function formatSnapshotDate(dateString: string): string {
const date = new Date(dateString);
return date.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
});
}