Compare commits

..
3 Commits
Author SHA1 Message Date
Amirmahdi 5c4af242fc feat: add sub category 2026-07-01 15:21:54 +03:30
Amirmahdi aba556618b feat 2026-07-01 13:21:29 +03:30
Amirmahdi ec79ea2771 feat: add ispremium 2026-07-01 13:01:19 +03:30
+31
View File
@@ -6,6 +6,7 @@ import { useList } from "@/lib/useResource";
import { useToast } from "@/components/toast";
import { DataTable, type Column } from "@/components/DataTable";
import {
Badge,
Button,
ConfirmDialog,
Field,
@@ -13,6 +14,7 @@ import {
Textarea,
Modal,
PageHeader,
Switch,
} from "@/components/ui";
import { EditIcon, PlusIcon, TrashIcon } from "@/components/icons";
import { ImagePicker } from "@/components/ImagePicker";
@@ -28,6 +30,9 @@ interface Playlist {
image?: unknown;
detail_image_id?: number | null;
detail_image?: unknown;
is_premium?: boolean;
categories?: { id: number; name?: string }[];
subcategories?: { id: number; name?: string }[];
}
interface MusicCategory {
@@ -53,6 +58,7 @@ export default function MusicPlaylistsPage() {
const [imageFile, setImageFile] = useState<File | null>(null);
const [detailImageId, setDetailImageId] = useState<number | null>(null);
const [detailImageFile, setDetailImageFile] = useState<File | null>(null);
const [isPremium, setIsPremium] = useState(false);
const [deleting, setDeleting] = useState<Playlist | null>(null);
const [removing, setRemoving] = useState(false);
@@ -71,6 +77,7 @@ export default function MusicPlaylistsPage() {
setImageFile(null);
setDetailImageId(null);
setDetailImageFile(null);
setIsPremium(false);
setOpen(true);
}
function openEdit(row: Playlist) {
@@ -83,6 +90,7 @@ export default function MusicPlaylistsPage() {
setImageFile(null);
setDetailImageId(row.detail_image_id ?? null);
setDetailImageFile(null);
setIsPremium(row.is_premium ?? false);
setOpen(true);
}
@@ -101,6 +109,7 @@ export default function MusicPlaylistsPage() {
image: imageFile,
detail_image_id: detailImageId,
detail_image: detailImageFile,
is_premium: isPremium,
}),
});
toast.success("پلی‌لیست ویرایش شد.");
@@ -117,6 +126,7 @@ export default function MusicPlaylistsPage() {
image: imageFile,
detail_image_id: detailImageId,
detail_image: detailImageFile,
is_premium: isPremium,
}),
});
toast.success("پلی‌لیست افزوده شد.");
@@ -156,11 +166,30 @@ export default function MusicPlaylistsPage() {
),
},
{ key: "name", header: "نام" },
{
key: "subcategories",
header: "زیر‌دسته",
render: (r) =>
r.subcategories?.length
? r.subcategories.map((s) => s.name).filter(Boolean).join("، ")
: "—",
},
{
key: "description",
header: "توضیحات",
render: (r) => r.description ?? "—",
},
{
key: "is_premium",
header: "ویژه",
className: "w-20",
render: (r) =>
r.is_premium ? (
<Badge tone="primary">ویژه</Badge>
) : (
<Badge tone="neutral">رایگان</Badge>
),
},
];
return (
@@ -257,6 +286,8 @@ export default function MusicPlaylistsPage() {
/>
</Field>
<Switch checked={isPremium} onChange={setIsPremium} label="ویژه (پرمیوم)" />
{!editing && (
<>
<Field label="دسته‌بندی‌ها">