56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { Check, Send, X } from '@lucide/vue';
|
|
import type { Component } from 'vue';
|
|
import type { BadgeVariant } from '@/lib/badge-variant';
|
|
|
|
export const OrderStatus = {
|
|
PENDING: 'pending',
|
|
PROCESSING: 'processing',
|
|
COMPLETED: 'completed',
|
|
CANCELLED: 'cancelled',
|
|
} as const;
|
|
|
|
export type OrderStatusValue = (typeof OrderStatus)[keyof typeof OrderStatus];
|
|
|
|
export function orderStatusBadgeVariant(status: string): BadgeVariant {
|
|
if (status === OrderStatus.COMPLETED) {
|
|
return 'default';
|
|
}
|
|
|
|
if (status === OrderStatus.CANCELLED) {
|
|
return 'destructive';
|
|
}
|
|
|
|
if (status === OrderStatus.PROCESSING) {
|
|
return 'secondary';
|
|
}
|
|
|
|
return 'outline';
|
|
}
|
|
|
|
export function orderStatusTransitionConfirmDescription(
|
|
targetStatus: string,
|
|
orderNumber: string,
|
|
): string {
|
|
if (targetStatus === OrderStatus.PROCESSING) {
|
|
return `Pesanan ${orderNumber} akan dikirim dan diproses.`;
|
|
}
|
|
|
|
if (targetStatus === OrderStatus.COMPLETED) {
|
|
return `Pesanan ${orderNumber} akan ditandai selesai.`;
|
|
}
|
|
|
|
return `Pesanan ${orderNumber} akan dibatalkan. Stok produk akan dikembalikan.`;
|
|
}
|
|
|
|
export function orderStatusActionIcon(status: string): Component {
|
|
if (status === OrderStatus.PROCESSING) {
|
|
return Send;
|
|
}
|
|
|
|
if (status === OrderStatus.COMPLETED) {
|
|
return Check;
|
|
}
|
|
|
|
return X;
|
|
}
|