Add CSV export for orders and update UI symbols

Introduces an exportOrdersToCSV function in lib/api-client.ts to allow exporting orders by status as a CSV file. Updates various UI components to use the '•' (bullet) symbol instead of '·' (middle dot) and replaces some emoji/unicode characters for improved consistency and compatibility. Also normalizes the 'use client' directive to include a BOM in many files.
This commit is contained in:
g
2025-12-15 17:57:18 +00:00
parent 07dcaf55c0
commit 0176f89cb7
91 changed files with 232 additions and 136 deletions

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import React, { useState, useEffect } from "react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
@@ -739,4 +739,4 @@ export default function AdminAnalytics() {
</Tabs>
</div>
);
}
}

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useState } from "react";
import { fetchClient } from "@/lib/api-client";

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useEffect, useState } from "react";
import { fetchClient } from "@/lib/api-client";
@@ -62,7 +62,7 @@ export default function InvitationsListCard() {
Code: <span className="font-mono px-1.5 py-0.5 rounded bg-muted">{inv.code}</span>
</div>
<div className="text-xs text-muted-foreground">
Created: {new Date(inv.createdAt).toLocaleString()} · Expires: {new Date(inv.expiresAt).toLocaleString()}
Created: {new Date(inv.createdAt).toLocaleString()} Expires: {new Date(inv.expiresAt).toLocaleString()}
</div>
</div>
<div className="flex items-center gap-2 shrink-0">

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useState } from "react";
import { fetchClient } from "@/lib/api-client";

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useState } from "react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useEffect, useState } from "react";
import { fetchClient } from "@/lib/api-client";
@@ -81,7 +81,7 @@ export default function RecentOrdersCard() {
</div>
</div>
<div className="mt-1 text-xs text-muted-foreground">
User: {o.userId} · Total: £{Number(o.total).toFixed(2)}
User: {o.userId} Total: £{Number(o.total).toFixed(2)}
</div>
{o.items && o.items.length > 0 && (
<ul className="mt-2 text-xs list-disc pl-4 text-muted-foreground">

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useEffect, useState } from "react";
import { fetchClient } from "@/lib/api-client";
import { Button } from "@/components/ui/button";

View File

@@ -1,4 +1,4 @@
"use client";
"use client";
import { useEffect, useState } from "react";
import { fetchClient } from "@/lib/api-client";
@@ -63,7 +63,7 @@ export default function VendorsCard() {
<div className="font-medium">{vendor.username}</div>
<div className="text-xs text-muted-foreground">
Created: {new Date(vendor.createdAt).toLocaleDateString()}
{vendor.lastLogin && ` · Last login: ${new Date(vendor.lastLogin).toLocaleDateString()}`}
{vendor.lastLogin && ` Last login: ${new Date(vendor.lastLogin).toLocaleDateString()}`}
</div>
</div>
<div className="flex items-center gap-2">