Changes
This commit is contained in:
@@ -31,7 +31,7 @@ interface ConsultingSlot {
|
||||
meet_link: string | null;
|
||||
created_at: string;
|
||||
profiles?: {
|
||||
full_name: string;
|
||||
name: string;
|
||||
email: string;
|
||||
};
|
||||
}
|
||||
@@ -78,7 +78,7 @@ export default function AdminConsulting() {
|
||||
.from('consulting_slots')
|
||||
.select(`
|
||||
*,
|
||||
profiles:user_id (full_name, email)
|
||||
profiles:user_id (name, email)
|
||||
`)
|
||||
.order('date', { ascending: false })
|
||||
.order('start_time', { ascending: true });
|
||||
@@ -125,7 +125,7 @@ export default function AdminConsulting() {
|
||||
body: {
|
||||
template_key: 'consulting_scheduled',
|
||||
recipient_email: selectedSlot.profiles.email,
|
||||
recipient_name: selectedSlot.profiles.full_name,
|
||||
recipient_name: selectedSlot.profiles.name,
|
||||
variables: {
|
||||
consultation_date: format(parseISO(selectedSlot.date), 'd MMMM yyyy', { locale: id }),
|
||||
consultation_time: `${selectedSlot.start_time.substring(0, 5)} - ${selectedSlot.end_time.substring(0, 5)}`,
|
||||
@@ -168,7 +168,7 @@ export default function AdminConsulting() {
|
||||
start_time: selectedSlot.start_time,
|
||||
end_time: selectedSlot.end_time,
|
||||
topic: selectedSlot.topic_category,
|
||||
client_name: selectedSlot.profiles?.full_name || 'Client',
|
||||
client_name: selectedSlot.profiles?.name || 'Client',
|
||||
client_email: selectedSlot.profiles?.email,
|
||||
calendar_id: settings.integration_google_calendar_id,
|
||||
}),
|
||||
@@ -251,7 +251,7 @@ export default function AdminConsulting() {
|
||||
{todaySlots.map(slot => (
|
||||
<div key={slot.id} className="flex items-center justify-between text-sm">
|
||||
<span>
|
||||
{slot.start_time.substring(0, 5)} - {slot.profiles?.full_name || 'N/A'} ({slot.topic_category})
|
||||
{slot.start_time.substring(0, 5)} - {slot.profiles?.name || 'N/A'} ({slot.topic_category})
|
||||
</span>
|
||||
{slot.meet_link ? (
|
||||
<a href={slot.meet_link} target="_blank" rel="noopener noreferrer" className="text-primary underline flex items-center gap-1">
|
||||
@@ -334,7 +334,7 @@ export default function AdminConsulting() {
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<div>
|
||||
<p className="font-medium">{slot.profiles?.full_name || '-'}</p>
|
||||
<p className="font-medium">{slot.profiles?.name || '-'}</p>
|
||||
<p className="text-sm text-muted-foreground">{slot.profiles?.email}</p>
|
||||
</div>
|
||||
</TableCell>
|
||||
@@ -425,7 +425,7 @@ export default function AdminConsulting() {
|
||||
<TableRow key={slot.id}>
|
||||
<TableCell>{format(parseISO(slot.date), 'd MMM yyyy', { locale: id })}</TableCell>
|
||||
<TableCell>{slot.start_time.substring(0, 5)} - {slot.end_time.substring(0, 5)}</TableCell>
|
||||
<TableCell>{slot.profiles?.full_name || '-'}</TableCell>
|
||||
<TableCell>{slot.profiles?.name || '-'}</TableCell>
|
||||
<TableCell><Badge variant="outline">{slot.topic_category}</Badge></TableCell>
|
||||
<TableCell>
|
||||
<Badge variant={statusLabels[slot.status]?.variant || 'secondary'}>
|
||||
@@ -462,7 +462,7 @@ export default function AdminConsulting() {
|
||||
<div className="p-3 bg-muted rounded-lg text-sm space-y-1">
|
||||
<p><strong>Tanggal:</strong> {format(parseISO(selectedSlot.date), 'd MMMM yyyy', { locale: id })}</p>
|
||||
<p><strong>Waktu:</strong> {selectedSlot.start_time.substring(0, 5)} - {selectedSlot.end_time.substring(0, 5)}</p>
|
||||
<p><strong>Klien:</strong> {selectedSlot.profiles?.full_name}</p>
|
||||
<p><strong>Klien:</strong> {selectedSlot.profiles?.name}</p>
|
||||
<p><strong>Topik:</strong> {selectedSlot.topic_category}</p>
|
||||
{selectedSlot.notes && <p><strong>Catatan:</strong> {selectedSlot.notes}</p>}
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,7 @@ import { toast } from "@/hooks/use-toast";
|
||||
interface Member {
|
||||
id: string;
|
||||
email: string | null;
|
||||
full_name: string | null;
|
||||
name: string | null;
|
||||
created_at: string;
|
||||
isAdmin?: boolean;
|
||||
}
|
||||
@@ -118,7 +118,7 @@ export default function AdminMembers() {
|
||||
{members.map((member) => (
|
||||
<TableRow key={member.id}>
|
||||
<TableCell>{member.email || "-"}</TableCell>
|
||||
<TableCell>{member.full_name || "-"}</TableCell>
|
||||
<TableCell>{member.name || "-"}</TableCell>
|
||||
<TableCell>
|
||||
{adminIds.has(member.id) ? (
|
||||
<Badge className="bg-primary">Admin</Badge>
|
||||
@@ -166,7 +166,7 @@ export default function AdminMembers() {
|
||||
<span className="text-muted-foreground">Email:</span> {selectedMember.email}
|
||||
</p>
|
||||
<p>
|
||||
<span className="text-muted-foreground">Nama:</span> {selectedMember.full_name || "-"}
|
||||
<span className="text-muted-foreground">Nama:</span> {selectedMember.name || "-"}
|
||||
</p>
|
||||
<p>
|
||||
<span className="text-muted-foreground">ID:</span> {selectedMember.id}
|
||||
|
||||
@@ -23,7 +23,7 @@ interface Review {
|
||||
body: string;
|
||||
is_approved: boolean;
|
||||
created_at: string;
|
||||
profiles: { full_name: string | null; email: string | null } | null;
|
||||
profiles: { name: string | null; email: string | null } | null;
|
||||
products: { title: string } | null;
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ export default function AdminReviews() {
|
||||
.from("reviews")
|
||||
.select(`
|
||||
*,
|
||||
profiles:user_id (full_name, email),
|
||||
profiles:user_id (name, email),
|
||||
products:product_id (title)
|
||||
`)
|
||||
.order("created_at", { ascending: false });
|
||||
@@ -224,7 +224,7 @@ export default function AdminReviews() {
|
||||
<h3 className="font-bold">{review.title}</h3>
|
||||
{review.body && <p className="text-muted-foreground text-sm">{review.body}</p>}
|
||||
<div className="text-xs text-muted-foreground">
|
||||
<span>{review.profiles?.full_name || review.profiles?.email || "Unknown"}</span>
|
||||
<span>{review.profiles?.name || review.profiles?.email || "Unknown"}</span>
|
||||
{review.products && <span> • {review.products.title}</span>}
|
||||
<span> • {new Date(review.created_at).toLocaleDateString("id-ID")}</span>
|
||||
</div>
|
||||
@@ -300,7 +300,7 @@ export default function AdminReviews() {
|
||||
<h3 className="font-bold">{review.title}</h3>
|
||||
{review.body && <p className="text-muted-foreground text-sm">{review.body}</p>}
|
||||
<div className="text-xs text-muted-foreground">
|
||||
{review.profiles?.full_name || review.profiles?.email}
|
||||
{review.profiles?.name || review.profiles?.email}
|
||||
{review.products && <span> • {review.products.title}</span>}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user