+
•
+
{text}
+ {percent !== null && (
+
+
+
= 100 ? 'bg-green-500' : percent >= 70 ? 'bg-blue-500' : percent >= 40 ? 'bg-yellow-500' : 'bg-red-400'
+ }`}
+ style={{ width: `${Math.min(percent, 100)}%` }}
+ />
+
+
+ )}
+
+ );
+ } else if (line.trim() === '') {
+ elements.push(
);
+ }
+ }
+
+ return elements;
+}
+
+export function MarkdownPreviewModal({ isOpen, onClose, title, markdown, onExport }: MarkdownPreviewModalProps) {
+ useEffect(() => {
+ const handleEscape = (e: KeyboardEvent) => {
+ if (e.key === 'Escape') onClose();
+ };
+
+ if (isOpen) {
+ document.addEventListener('keydown', handleEscape);
+ document.body.style.overflow = 'hidden';
+ }
+
+ return () => {
+ document.removeEventListener('keydown', handleEscape);
+ document.body.style.overflow = 'unset';
+ };
+ }, [isOpen, onClose]);
+
+ if (!isOpen) return null;
+
+ return (
+
+
+
+
+
+
{title}
+
+
+
+
+
+
+ {renderMarkdown(markdown)}
+
+
+
+
+ );
+}
diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx
index 076b8eb..1a71019 100644
--- a/src/pages/Dashboard.tsx
+++ b/src/pages/Dashboard.tsx
@@ -1,8 +1,11 @@
+import { useState } from 'react';
import { useOKR } from '../context/OKRContext';
import { ProgressBar } from '../components/common/ProgressBar';
+import { MarkdownPreviewModal } from '../components/common/MarkdownPreviewModal';
export function Dashboard() {
const { objectives, selectedQuarter } = useOKR();
+ const [showPreview, setShowPreview] = useState(false);
const quarterObjectives = objectives.filter((o) => o.quarter === selectedQuarter);
@@ -66,7 +69,7 @@ export function Dashboard() {
},
];
- const exportToMarkdown = () => {
+ const generateMarkdown = () => {
let markdown = `# OKRs for ${selectedQuarter}\n\n`;
const sections = [
@@ -91,6 +94,12 @@ export function Dashboard() {
}
});
+ return markdown;
+ };
+
+ const exportToMarkdown = () => {
+ const markdown = generateMarkdown();
+
if (window.pendo) {
window.pendo.track("okr_exported", {
quarter: selectedQuarter,
@@ -138,12 +147,27 @@ export function Dashboard() {
Overview for {selectedQuarter}
{quarterObjectives.length > 0 && (
-