diff --git a/application/src/components/dashboard/Header.tsx b/application/src/components/dashboard/Header.tsx index 5febc55..747dca4 100644 --- a/application/src/components/dashboard/Header.tsx +++ b/application/src/components/dashboard/Header.tsx @@ -9,6 +9,7 @@ import { useEffect, useState } from "react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { useNavigate } from "react-router-dom"; import { useSystemSettings } from "@/hooks/useSystemSettings"; +import QuickActionsDialog from "./QuickActionsDialog"; interface HeaderProps { currentUser: AuthUser | null; @@ -28,6 +29,7 @@ export const Header = ({ const [greeting, setGreeting] = useState(""); const { systemName } = useSystemSettings(); const navigate = useNavigate(); + const [quickActionsOpen, setQuickActionsOpen] = useState(false); // Set greeting based on time of day useEffect(() => { @@ -88,8 +90,18 @@ export const Header = ({ -
+ + {/* Quick Actions Button */} + + +

{greeting}, {currentUser?.name || currentUser?.email?.split('@')[0] || 'User'} πŸ‘‹ ✨

@@ -118,25 +130,45 @@ export const Header = ({ {/* Documentation */} - {/* GitHub */} - {/* X (Twitter) */} - - {/* Discord (replaced with MessageSquare) */} - @@ -185,6 +217,9 @@ export const Header = ({ + + {/* Quick Actions Dialog */} + ); -}; +}; \ No newline at end of file diff --git a/application/src/components/dashboard/QuickActionsDialog.tsx b/application/src/components/dashboard/QuickActionsDialog.tsx new file mode 100644 index 0000000..6bd6a90 --- /dev/null +++ b/application/src/components/dashboard/QuickActionsDialog.tsx @@ -0,0 +1,145 @@ + +import React from 'react'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogClose +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import { X } from "lucide-react"; +import { useLanguage } from "@/contexts/LanguageContext"; + +interface QuickActionsDialogProps { + isOpen: boolean; + setIsOpen: (open: boolean) => void; +} + +export const QuickActionsDialog: React.FC = ({ isOpen, setIsOpen }) => { + const { t } = useLanguage(); + + return ( + + + + + Close + + + {t('quickActions')} + + {t('quickActionsDescription')} + + + +
+ {/* Website Monitoring Card */} +
+

{t('monitorWebsite')}

+

+ {t('monitorWebsiteDesc')} +

+
+

{t('quickTips')}:

+
    +
  • {t('monitorMultipleEndpoints')}
  • +
  • {t('trackResponseTimes')}
  • +
  • {t('setCustomAlerts')}
  • +
+
+
+ + {/* Server Monitoring Card */} +
+

{t('monitorServer')}

+

+ {t('monitorServerDesc')} +

+
+

{t('quickTips')}:

+
    +
  • {t('monitorCPURam')}
  • +
  • {t('trackNetworkMetrics')}
  • +
  • {t('viewProcesses')}
  • +
+
+
+ + {/* SSL Certificate Card */} +
+

{t('sslCertificate')}

+

+ {t('sslCertificateDesc')} +

+
+

{t('quickTips')}:

+
    +
  • {t('trackSSLExpiration')}
  • +
  • {t('getEarlyRenewal')}
  • +
  • {t('monitorMultipleDomains')}
  • +
+
+
+ + {/* Incidents Management Card */} +
+

{t('incidentsManagement')}

+

+ {t('incidentsManagementDesc')} +

+
+

{t('quickTips')}:

+
    +
  • {t('createTrackIncidents')}
  • +
  • {t('assignIncidents')}
  • +
  • {t('monitorResolution')}
  • +
+
+
+ + {/* Operational Status Card */} +
+

{t('operationalStatus')}

+

+ {t('operationalStatusDesc')} +

+
+

{t('quickTips')}:

+
    +
  • {t('createCustomStatus')}
  • +
  • {t('displayRealTime')}
  • +
  • {t('shareIncidentUpdates')}
  • +
+
+
+ + {/* Reports & Analytics Card */} +
+

{t('reportsAnalytics')}

+

+ {t('reportsAnalyticsDesc')} +

+
+

{t('quickTips')}:

+
    +
  • {t('generateUptimeReports')}
  • +
  • {t('analyzePerformance')}
  • +
  • {t('exportMonitoringData')}
  • +
+
+
+
+ +
+ +
+
+
+ ); +}; + +export default QuickActionsDialog; \ No newline at end of file diff --git a/application/src/components/settings/about-system/AboutSystem.tsx b/application/src/components/settings/about-system/AboutSystem.tsx index 6a52bbd..0f2c903 100644 --- a/application/src/components/settings/about-system/AboutSystem.tsx +++ b/application/src/components/settings/about-system/AboutSystem.tsx @@ -1,3 +1,4 @@ + import React from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Separator } from "@/components/ui/separator"; @@ -19,7 +20,7 @@ export const AboutSystem: React.FC = () => { return

{t('aboutSystem')}

-

{t('aboutCheckCle')}

+

{t('aboutReamStack')}

@@ -31,10 +32,13 @@ export const AboutSystem: React.FC = () => { {t('systemDescription')} + {systemName || 'ReamStack'}
- +

+ {t('systemVersion')} 1.0.0 {t('isAModern')} {t('serverMonitoring')} {t('solution')} {t('designedFor')} {t('enterpriseUse')}. {t('providesRealtime')} {t('uptimeTracking')}, {t('performanceAnalytics')}, {t('andAlertNotifications')}. +

@@ -49,7 +53,7 @@ export const AboutSystem: React.FC = () => {
{t('releasedOn')} - May 10, 2025 + January 15, 2025
@@ -62,7 +66,7 @@ export const AboutSystem: React.FC = () => { {t('links')} - {systemName || 'CheckCle'} {t('resources').toLowerCase()} + {systemName || 'ReamStack'} {t('resources').toLowerCase()}
@@ -78,7 +82,7 @@ export const AboutSystem: React.FC = () => { {t('followOnX')} - diff --git a/application/src/translations/en.ts b/application/src/translations/en.ts index 1a82c4e..5ad6d48 100644 --- a/application/src/translations/en.ts +++ b/application/src/translations/en.ts @@ -72,5 +72,46 @@ export const enTranslations = { viewOnGithub: "View on GitHub", viewDocumentation: "View Documentation", followOnX: "Follow on X", - joinDiscord: "Join Discord" -}; + joinDiscord: "Join Discord", + // Quick Actions Dialog translations + quickActions: "Quick Actions", + quickActionsDescription: "Access common monitoring operations and features quickly. Select an action below to get started.", + close: "Close", + quickTips: "Quick Tips", + // Website Monitoring Card + monitorWebsite: "Website Monitoring", + monitorWebsiteDesc: "Monitor website availability and performance with detailed metrics and alerts.", + monitorMultipleEndpoints: "Monitor multiple endpoints", + trackResponseTimes: "Track response times", + setCustomAlerts: "Set custom alerts", + // Server Monitoring Card + monitorServer: "Server Monitoring", + monitorServerDesc: "Track server health metrics including CPU, memory, disk usage, and network traffic.", + monitorCPURam: "Monitor CPU & RAM usage", + trackNetworkMetrics: "Track network metrics", + viewProcesses: "View active processes", + // SSL Certificate Card + sslCertificate: "SSL Certificate", + sslCertificateDesc: "Monitor SSL certificate validity and receive alerts before expiration dates.", + trackSSLExpiration: "Track SSL expiration dates", + getEarlyRenewal: "Get early renewal notices", + monitorMultipleDomains: "Monitor multiple domains", + // Incidents Management Card + incidentsManagement: "Incidents Management", + incidentsManagementDesc: "Create, track, and manage incidents including assignment and resolution workflows.", + createTrackIncidents: "Create & track incidents", + assignIncidents: "Assign incidents to team", + monitorResolution: "Monitor resolution progress", + // Operational Status Card + operationalStatus: "Operational Status", + operationalStatusDesc: "Create and manage public status pages to communicate system health to users.", + createCustomStatus: "Create custom status pages", + displayRealTime: "Display real-time metrics", + shareIncidentUpdates: "Share incident updates", + // Reports & Analytics Card + reportsAnalytics: "Reports & Analytics", + reportsAnalyticsDesc: "Generate reports on system performance, uptime history, and incident metrics.", + generateUptimeReports: "Generate uptime reports", + analyzePerformance: "Analyze performance trends", + exportMonitoringData: "Export monitoring data" +}; \ No newline at end of file diff --git a/application/src/translations/km.ts b/application/src/translations/km.ts index b34717e..a760cac 100644 --- a/application/src/translations/km.ts +++ b/application/src/translations/km.ts @@ -72,5 +72,46 @@ export const kmTranslations = { viewOnGithub: "αž˜αžΎαž›αž›αžΎ GitHub", viewDocumentation: "αž˜αžΎαž›αž―αž€αžŸαžΆαžš", followOnX: "αžαžΆαž˜αžŠαžΆαž“αž›αžΎ X", - joinDiscord: "αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„ Discord" -}; + joinDiscord: "αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„ Discord", + // Quick Actions Dialog translations + quickActions: "αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžšαž αŸαžŸ", + quickActionsDescription: "αž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž“αž·αž„αž˜αž»αžαž„αžΆαžšαž‘αžΌαž‘αŸ…αž™αŸ‰αžΆαž„αžšαž αŸαžŸαŸ” αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”", + close: "αž”αž·αž‘", + quickTips: "αž‚αž“αŸ’αž›αžΉαŸ‡αžšαž αŸαžŸ", + // Website Monitoring Card + monitorWebsite: "αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αŸαž αž‘αŸ†αž–αŸαžš", + monitorWebsiteDesc: "αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž“αŸƒαž‚αŸαž αž‘αŸ†αž–αŸαžš αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αž“αž·αž„αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αŸ”", + monitorMultipleEndpoints: "αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž…αŸ†αžŽαž»αž…αž…αž”αŸ‹αž…αŸ’αžšαžΎαž“", + trackResponseTimes: "αžαžΆαž˜αžŠαžΆαž“αž–αŸαž›αžœαŸαž›αžΆαž†αŸ’αž›αžΎαž™αžαž”", + setCustomAlerts: "αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“", + // Server Monitoring Card + monitorServer: "αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ", + monitorServerDesc: "αžαžΆαž˜αžŠαžΆαž“αžŸαž»αžαž—αžΆαž–αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ CPU, αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†, ថអស, αž“αž·αž„αž…αžšαžΆαž…αžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αŸ”", + monitorCPURam: "αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ CPU αž“αž·αž„ RAM", + trackNetworkMetrics: "αžαžΆαž˜αžŠαžΆαž“αž…αžšαžΆαž…αžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰", + viewProcesses: "αž˜αžΎαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž€αž˜αŸ’αž˜", + // SSL Certificate Card + sslCertificate: "αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš SSL", + sslCertificateDesc: "αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αž–αž›αž—αžΆαž–αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš SSL αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž˜αž»αž“αžαŸ’αž„αŸƒαž•αž»αžαž€αŸ†αžŽαžαŸ‹αŸ”", + trackSSLExpiration: "αžαžΆαž˜αžŠαžΆαž“αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αž•αž»αžαž€αŸ†αžŽαžαŸ‹ SSL", + getEarlyRenewal: "αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž”αž“αŸ’αžαž˜αž»αž“αž–αŸαž›", + monitorMultipleDomains: "αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ‚αž“αž‡αžΆαž…αŸ’αžšαžΎαž“", + // Incidents Management Card + incidentsManagement: "αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»", + incidentsManagementDesc: "αž”αž„αŸ’αž€αžΎαž, αžαžΆαž˜αžŠαžΆαž“ αž“αž·αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž…αžΆαžαŸ‹αžαžΆαŸ†αž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ”", + createTrackIncidents: "αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžαžΆαž˜αžŠαžΆαž“αž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»", + assignIncidents: "αž…αžΆαžαŸ‹αžαžΆαŸ†αž„αž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»αž‘αŸ…αž€αŸ’αžšαž»αž˜", + monitorResolution: "αžαžΆαž˜αžŠαžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™", + // Operational Status Card + operationalStatus: "αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš", + operationalStatusDesc: "αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αŸ†αž–αŸαžšαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαžΆαž’αžΆαžšαžŽαŸˆαžŠαžΎαž˜αŸ’αž”αžΈαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžŸαž»αžαž—αžΆαž–αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”", + createCustomStatus: "αž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αŸαžšαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžαžΆαž˜αž”αŸ†αžŽαž„", + displayRealTime: "αž”αž„αŸ’αž αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„", + shareIncidentUpdates: "αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αž˜αžΈαŸ—αž’αŸ†αž–αžΈαž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»", + // Reports & Analytics Card + reportsAnalytics: "αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚", + reportsAnalyticsDesc: "αž”αž„αŸ’αž€αžΎαžαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’, αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž–αŸαž›αžœαŸαž›αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš, αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»αŸ”", + generateUptimeReports: "αž”αž„αŸ’αž€αžΎαžαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž–αŸαž›αžœαŸαž›αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš", + analyzePerformance: "αžœαž·αž—αžΆαž‚αž“αž·αž“αŸ’αž“αžΆαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš", + exportMonitoringData: "αž“αžΆαŸ†αž…αŸαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™" +}; \ No newline at end of file