130 lines
4.7 KiB
C#
130 lines
4.7 KiB
C#
// EN: Centralized helper for shop vertical/category utilities.
|
|
// VI: Helper tập trung cho các tiện ích ngành hàng cửa hàng.
|
|
//
|
|
// Consolidates duplicate GetShopIcon, GetVerticalLabel, NormalizeVertical
|
|
// logic that was scattered across Dashboard.razor, ShopOverview.razor,
|
|
// and ShopSidebarConfig.cs.
|
|
|
|
namespace WebClientTpos.Client.Services;
|
|
|
|
/// <summary>
|
|
/// EN: Centralized utilities for shop vertical display — icon, label, normalize.
|
|
/// VI: Tiện ích tập trung cho hiển thị ngành hàng — icon, label, chuẩn hóa.
|
|
/// </summary>
|
|
public static class ShopVerticalHelper
|
|
{
|
|
/// <summary>
|
|
/// EN: Normalize category string to internal vertical key.
|
|
/// VI: Chuẩn hóa chuỗi category thành key nội bộ.
|
|
/// </summary>
|
|
public static string NormalizeVertical(string? category) => (category ?? "").ToLowerInvariant() switch
|
|
{
|
|
"cafe" or "café" or "coffee" or "foodbeverage" => "cafe",
|
|
"restaurant" or "nhà hàng" or "bar" => "restaurant",
|
|
"karaoke" or "entertainment" => "karaoke",
|
|
"spa" or "services" => "spa",
|
|
"beauty" or "salon" or "thẩm mỹ" => "beauty",
|
|
"retail" => "retail",
|
|
_ => "default"
|
|
};
|
|
|
|
/// <summary>
|
|
/// EN: Get Lucide icon name for a shop vertical/category.
|
|
/// VI: Lấy tên icon Lucide cho ngành hàng.
|
|
/// </summary>
|
|
public static string GetIcon(string? category) => NormalizeVertical(category) switch
|
|
{
|
|
"cafe" => "coffee",
|
|
"restaurant" => "utensils",
|
|
"karaoke" => "mic",
|
|
"spa" => "sparkles",
|
|
"beauty" => "scissors",
|
|
"retail" => "shopping-bag",
|
|
_ => "store"
|
|
};
|
|
|
|
/// <summary>
|
|
/// EN: Get display label for a vertical.
|
|
/// VI: Lấy tên hiển thị cho ngành hàng.
|
|
/// </summary>
|
|
public static string GetLabel(string? category) => NormalizeVertical(category) switch
|
|
{
|
|
"cafe" => "Vertical_Cafe",
|
|
"restaurant" => "Vertical_Restaurant",
|
|
"karaoke" => "Vertical_Karaoke",
|
|
"spa" => "Vertical_Spa",
|
|
"beauty" => "Vertical_Beauty",
|
|
"retail" => "Vertical_Retail",
|
|
_ => "Vertical_Store"
|
|
};
|
|
|
|
/// <summary>
|
|
/// EN: Get accent color CSS value for a vertical.
|
|
/// VI: Lấy màu nhấn CSS cho ngành hàng.
|
|
/// </summary>
|
|
public static string GetColor(string? category) => NormalizeVertical(category) switch
|
|
{
|
|
"cafe" => "var(--admin-orange-primary)",
|
|
"restaurant" => "#3B82F6",
|
|
"karaoke" => "#8B5CF6",
|
|
"spa" => "#EC4899",
|
|
"beauty" => "#A855F7",
|
|
"retail" => "#22C55E",
|
|
_ => "var(--admin-orange-primary)"
|
|
};
|
|
|
|
/// <summary>
|
|
/// EN: Get background color (RGBA) for a vertical.
|
|
/// VI: Lấy màu nền (RGBA) cho ngành hàng.
|
|
/// </summary>
|
|
public static string GetBgColor(string? category) => NormalizeVertical(category) switch
|
|
{
|
|
"cafe" => "rgba(255,92,0,0.125)",
|
|
"restaurant" => "rgba(59,130,246,0.125)",
|
|
"karaoke" => "rgba(139,92,246,0.125)",
|
|
"spa" => "rgba(236,72,153,0.125)",
|
|
"beauty" => "rgba(168,85,247,0.125)",
|
|
"retail" => "rgba(34,197,94,0.125)",
|
|
_ => "rgba(255,92,0,0.125)"
|
|
};
|
|
|
|
// ─── Shop Status Helpers (shared across StoreList, ShopOverview, etc.) ───
|
|
|
|
/// <summary>
|
|
/// EN: Get CSS badge class for shop status.
|
|
/// VI: Lấy CSS badge class cho trạng thái shop.
|
|
/// </summary>
|
|
public static string GetStatusBadgeClass(string? status) => status?.ToLowerInvariant() switch
|
|
{
|
|
"published" or "active" => "online",
|
|
"draft" or "setup" => "setup",
|
|
"inactive" or "paused" => "paused",
|
|
_ => "setup"
|
|
};
|
|
|
|
/// <summary>
|
|
/// EN: Get display label for shop status.
|
|
/// VI: Lấy nhãn hiển thị cho trạng thái shop.
|
|
/// </summary>
|
|
public static string GetStatusLabel(string? status) => status?.ToLowerInvariant() switch
|
|
{
|
|
"published" or "active" => "Status_Active",
|
|
"draft" or "setup" => "Status_Setup",
|
|
"inactive" or "paused" => "Status_Paused",
|
|
"closed" => "Status_Closed",
|
|
_ => status ?? "—"
|
|
};
|
|
|
|
public static bool IsActive(string? status) =>
|
|
status?.Equals("Published", StringComparison.OrdinalIgnoreCase) == true
|
|
|| status?.Equals("active", StringComparison.OrdinalIgnoreCase) == true;
|
|
|
|
public static bool IsSetup(string? status) =>
|
|
status?.Equals("Draft", StringComparison.OrdinalIgnoreCase) == true
|
|
|| status?.Equals("setup", StringComparison.OrdinalIgnoreCase) == true;
|
|
|
|
public static bool IsPaused(string? status) =>
|
|
status?.Equals("Inactive", StringComparison.OrdinalIgnoreCase) == true
|
|
|| status?.Equals("paused", StringComparison.OrdinalIgnoreCase) == true;
|
|
}
|