Fix Login KodeOtp WA

This commit is contained in:
2026-02-26 22:10:28 +08:00
parent 55ea3c473a
commit 409ad4f1a2
8 changed files with 68 additions and 25 deletions

View File

@@ -60,7 +60,7 @@ model FileStorage {
deletedAt DateTime?
isActive Boolean @default(true)
link String
category String // "image" / "document" / "other"
category String // "image" / "document" / "audio" / "other"
Berita Berita[]
PotensiDesa PotensiDesa[]
Posyandu Posyandu[]

View File

@@ -1,6 +1,6 @@
'use client'
import CreateEditor from '@/app/admin/(dashboard)/_com/createEditor';
import stateDashboardMusik from '@/app/admin/(dashboard)/_state/desa/musik';
import CreateEditor from '../../../_com/createEditor';
import stateDashboardMusik from '../../../_state/desa/musik';
import colors from '@/con/colors';
import ApiFetch from '@/lib/api-fetch';
import {
@@ -116,7 +116,7 @@ export default function EditMusik() {
await musikState.musik.edit.update();
resetForm();
router.push('/admin/desa/musik');
router.push('/admin/musik');
} catch (error) {
console.error('Error updating musik:', error);
toast.error('Terjadi kesalahan saat mengupdate musik');

View File

@@ -19,7 +19,7 @@ import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation';
import { useState } from 'react';
import { useProxy } from 'valtio/utils';
import stateDashboardMusik from '../../../_state/desa/musik';
import stateDashboardMusik from '../../_state/desa/musik';
export default function DetailMusik() {
const musikState = useProxy(stateDashboardMusik);
@@ -63,7 +63,7 @@ export default function DetailMusik() {
setIsDeleting(true);
await musikState.musik.delete.byId(id);
setShowDeleteModal(false);
router.push('/admin/desa/musik');
router.push('/admin/musik');
} catch (error) {
console.error('Error deleting musik:', error);
} finally {
@@ -77,7 +77,7 @@ export default function DetailMusik() {
<Group mb="md">
<Button
variant="subtle"
onClick={() => router.push('/admin/desa/musik')}
onClick={() => router.push('/admin/musik')}
p="xs"
radius="md"
>
@@ -99,15 +99,22 @@ export default function DetailMusik() {
<Stack gap="md">
{/* Cover Image */}
{data.coverImage && (
<Box style={{ textAlign: 'center' }}>
<Box
style={{
width: '100%',
maxWidth: 400,
margin: '0 auto',
}}
>
<Image
src={data.coverImage.link}
alt={data.judul}
radius="md"
style={{
maxHeight: 300,
width: '100%',
aspectRatio: '1/1',
objectFit: 'cover',
margin: '0 auto',
display: 'block',
}}
/>
</Box>
@@ -219,7 +226,7 @@ export default function DetailMusik() {
radius="md"
size="md"
leftSection={<IconEdit size={18} />}
onClick={() => router.push(`/admin/desa/musik/${id}/edit`)}
onClick={() => router.push(`/admin/musik/${id}/edit`)}
>
Edit
</Button>

View File

@@ -1,6 +1,6 @@
'use client'
import CreateEditor from '@/app/admin/(dashboard)/_com/createEditor';
import stateDashboardMusik from '@/app/admin/(dashboard)/_state/desa/musik';
import CreateEditor from '../../_com/createEditor';
import stateDashboardMusik from '../../_state/desa/musik';
import colors from '@/con/colors';
import ApiFetch from '@/lib/api-fetch';
import {
@@ -126,7 +126,7 @@ export default function CreateMusik() {
await musikState.musik.create.create();
resetForm();
router.push('/admin/desa/musik');
router.push('/admin/musik');
} catch (error) {
console.error('Error creating musik:', error);
toast.error('Terjadi kesalahan saat membuat musik');

View File

@@ -23,8 +23,8 @@ import { IconCircleDashedPlus, IconDeviceImacCog, IconSearch } from '@tabler/ico
import { useRouter } from 'next/navigation';
import { useState } from 'react';
import { useProxy } from 'valtio/utils';
import HeaderSearch from '../../_com/header';
import stateDashboardMusik from '../../_state/desa/musik';
import HeaderSearch from '../_com/header';
import stateDashboardMusik from '../_state/desa/musik';
function Musik() {
@@ -73,7 +73,7 @@ function ListMusik({ search }: { search: string }) {
leftSection={<IconCircleDashedPlus size={18} />}
color="blue"
variant="light"
onClick={() => router.push('/admin/desa/musik/create')}
onClick={() => router.push('/admin/musik/create')}
>
Tambah Baru
</Button>
@@ -122,7 +122,7 @@ function ListMusik({ search }: { search: string }) {
variant="light"
color="blue"
onClick={() =>
router.push(`/admin/desa/musik/${item.id}`)
router.push(`/admin/musik/${item.id}`)
}
fz="sm"
px="sm"
@@ -189,7 +189,7 @@ function ListMusik({ search }: { search: string }) {
fullWidth
mt="sm"
onClick={() =>
router.push(`/admin/desa/musik/${item.id}`)
router.push(`/admin/musik/${item.id}`)
}
fz="sm"
h={36}

View File

@@ -330,7 +330,7 @@ export const devBar = [
path: "/admin/lingkungan/konservasi-adat-bali/filosofi-tri-hita-karana"
}
]
},
},
{
id: "Pendidikan",
name: "Pendidikan",
@@ -373,6 +373,11 @@ export const devBar = [
}
]
},
{
id: "Musik",
name: "Musik",
path: "/admin/musik"
},
{
id: "User & Role",
name: "User & Role",
@@ -729,7 +734,7 @@ export const navBar = [
path: "/admin/lingkungan/konservasi-adat-bali/filosofi-tri-hita-karana"
}
]
},
},
{
id: "Pendidikan",
name: "Pendidikan",
@@ -772,6 +777,11 @@ export const navBar = [
}
]
},
{
id: "Musik",
name: "Musik",
path: "/admin/musik"
},
{
id: "User & Role",
name: "User & Role",
@@ -1051,7 +1061,7 @@ export const role1 = [
}
]
},
},
{
id: "Lingkungan",
name: "Lingkungan",
@@ -1088,6 +1098,11 @@ export const role1 = [
path: "/admin/lingkungan/konservasi-adat-bali/filosofi-tri-hita-karana"
}
]
},
{
id: "Musik",
name: "Musik",
path: "/admin/musik"
}
]
@@ -1133,6 +1148,11 @@ export const role2 = [
path: "/admin/kesehatan/info-wabah-penyakit"
}
]
},
{
id: "Musik",
name: "Musik",
path: "/admin/musik"
}
]
@@ -1178,5 +1198,10 @@ export const role3 = [
path: "/admin/pendidikan/data-pendidikan"
}
]
},
{
id: "Musik",
name: "Musik",
path: "/admin/musik"
}
]

View File

@@ -316,8 +316,13 @@ export default function Layout({ children }: { children: React.ReactNode }) {
}}
variant="light"
active={isParentActive}
onClick={(e) => {
e.preventDefault();
if (v.path) handleNavClick(v.path);
}}
href={v.path || undefined}
>
{v.children.map((child, key) => {
{v.children?.map((child, key) => {
const isChildActive = segments.includes(_.lowerCase(child.name));
return (
<NavLink

View File

@@ -22,9 +22,10 @@ const fileStorageCreate = async (context: Context) => {
if (!UPLOAD_DIR) return { status: 500, body: "UPLOAD_DIR is not defined" };
const isImage = file.type.startsWith("image/");
const category = isImage ? "image" : "document";
const isAudio = file.type.startsWith("audio/");
const category = isImage ? "image" : isAudio ? "audio" : "document";
const pathName = category === "image" ? "images" : "documents";
const pathName = category === "image" ? "images" : category === "audio" ? "audio" : "documents";
const rootPath = path.join(UPLOAD_DIR, pathName);
await fs.mkdir(rootPath, { recursive: true });
@@ -54,6 +55,11 @@ const fileStorageCreate = async (context: Context) => {
// Simpan metadata untuk versi desktop sebagai default
finalName = desktopName;
finalMimeType = "image/webp";
} else if (isAudio) {
// Simpan file audio tanpa kompresi
const ext = file.name.split(".").pop() || "mp3";
finalName = `${finalName}.${ext}`;
await fs.writeFile(path.join(rootPath, finalName), buffer);
} else {
// Jika file adalah PDF, simpan tanpa kompresi
if (file.type === "application/pdf") {