Loading...
) : (
<>
@@ -258,8 +287,8 @@ useEffect(() => {
+ {myVariable.isLoggedIn && selectedWorkgroupId && (
{getComponent()}
)}
{myVariable.isLoggedIn && !selectedWorkgroupId && !isLoading && (
diff --git a/styles/admintools.module.css b/styles/admintools.module.css
new file mode 100644
index 0000000..b818018
--- /dev/null
+++ b/styles/admintools.module.css
@@ -0,0 +1,74 @@
+/* admintools.module.css */
+.container {
+ display: flex;
+ flex-direction: column;
+ margin-top: 4.5em; /* Leaving space for the top fixed navbar */
+ height: calc(100vh - 4.5em);
+ justify-content: center; /* Centers content vertically */
+ align-items: center; /* Centers content horizontally */
+}
+
+@media (max-width: 600px) {
+ .container {
+ display: flex;
+ flex-direction: column;
+ margin-top: 120px;
+ align-items: center;
+ }
+}
+
+.heading {
+ font-size: 2rem;
+ font-weight: bold;
+ margin-bottom: 1rem;
+}
+
+.subheading {
+ font-size: 1.5rem;
+ margin-bottom: 2rem;
+}
+
+.buttonContainer {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 1rem;
+}
+
+.button {
+ background-color: #0070f3;
+ color: white;
+ border: none;
+ padding: 0.75rem 1.5rem;
+ font-size: 1rem;
+ cursor: pointer;
+ transition: background-color 0.3s ease;
+ margin: 5px;
+}
+
+.button:hover {
+ background-color: #0056b3;
+}
+
+.column-flex {
+ display: flex;
+ flex-direction: column;
+}
+
+.row-flex-space-between {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.column {
+ display: flex;
+ flex-direction: column;
+ align-items: center; /* Aligns buttons and headings in the center of the column */
+ gap: 0.5rem; /* Adjusts the space between items in the column */
+}
+
+.columnHeading {
+ font-size: 1.25rem; /* Adjust size as needed */
+ margin-bottom: 1rem; /* Adds some space between the heading and the first button */
+}
diff --git a/utils/exportUtils.ts b/utils/exportUtils.ts
new file mode 100644
index 0000000..f01b690
--- /dev/null
+++ b/utils/exportUtils.ts
@@ -0,0 +1,113 @@
+// exportUtils.ts
+import { supabase } from "../lib/supabaseClient";
+import axios from 'axios';
+
+const formatDate = (dateString: string): string => {
+ const date = new Date(dateString);
+ const day = date.getDate();
+ const months = ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"];
+ const month = months[date.getMonth()];
+ const year = date.getFullYear();
+
+ return `${day} ${month} ${year}`;
+};
+
+const convertToMarkdown = (data: any[]): string => {
+ let markdown = '';
+ const headers = Object.keys(data[0]).join(' | ');
+ markdown += `| ${headers} |\n| ${new Array(headers.length).fill('-').join(' | ')} |\n`;
+
+ data.forEach((item) => {
+ const formattedItem = Object.entries(item).map(([key, value]) => {
+ if (key === 'created_at') {
+ return formatDate(value as string);
+ }
+ return value;
+ });
+ const values = formattedItem.join(' | ');
+ markdown += `| ${values} |\n`;
+ });
+
+ return markdown;
+};
+
+const convertToCsv = (data: any[]): string => {
+ const headers = Object.keys(data[0]).join(',');
+ const rows = data.map((item) =>
+ Object.entries(item).map(([key, value]) => {
+ if (key === 'created_at') {
+ return `"${formatDate(value as string)}"`;
+ }
+ return `"${value}"`;
+ }).join(',')
+ );
+ return `${headers}\n${rows.join('\n')}`;
+};
+
+const exportAsCsv = async (data: any[]) => {
+ const csvData = convertToCsv(data);
+ const blob = new Blob([csvData], { type: 'text/csv;charset=utf-8' });
+ const link = document.createElement('a');
+ link.href = URL.createObjectURL(blob);
+ link.download = 'Export.csv'; // Consider making the filename dynamic
+ link.click();
+};
+
+const exportAsPdf = async (data: any[]) => {
+ const markdown = convertToMarkdown(data);
+ const pdfResponse = await axios.post('/api/convertToPdf', { markdown }, {
+ responseType: 'blob',
+ });
+ const url = window.URL.createObjectURL(new Blob([pdfResponse.data]));
+ const link = document.createElement('a');
+ link.href = url;
+ link.setAttribute('download', 'Export.pdf'); // Consider making the filename dynamic
+ document.body.appendChild(link);
+ link.click();
+ link.remove();
+};
+
+const exportAsJson = async (data: any[]) => {
+ console.log("Json", data)
+};
+
+const exportStrategies = {
+ csv: exportAsCsv,
+ pdf: exportAsPdf,
+ json: exportAsJson,
+};
+
+const exportData = async (format: 'csv' | 'pdf' | 'json', data: any[]) => {
+ const exportStrategy = exportStrategies[format];
+ if (!exportStrategy) {
+ throw new Error(`Export format '${format}' is not supported.`);
+ }
+ await exportStrategy(data);
+};
+
+export const exportTags = async (format: 'csv' | 'pdf' | 'json') => {
+ try {
+ const { data, error } = await supabase.from('tags').select('created_at, type, tag');
+ if (error) {
+ console.error('Error exporting tags:', error);
+ return;
+ }
+ await exportData(format, data);
+ } catch (error) {
+ console.error('Error exporting tags:', error);
+ }
+};
+
+export const exportUsers = async (format: 'csv' | 'pdf' | 'json') => {
+ try {
+ const { data, error } = await supabase.from('users').select('created_at, global_name');
+ if (error) {
+ console.error('Error exporting users:', error);
+ return;
+ }
+ await exportData(format, data);
+ } catch (error) {
+ console.error('Error exporting users:', error);
+ }
+};
diff --git a/utils/generateMarkdown.js b/utils/generateMarkdown.js
index 779245c..82c3aa4 100644
--- a/utils/generateMarkdown.js
+++ b/utils/generateMarkdown.js
@@ -237,5 +237,9 @@ export function generateMarkdown(summary, order) {
if (summary.noSummaryGiven == true) {
markdown += `No Summary Given \n`;
}
+ //canceledSummary
+ if (summary.canceledSummary == true) {
+ markdown += `Meeting was canceled \n`;
+ }
return markdown;
};