Fix All Text Input User & Admin, fix deskripsi detail break word

This commit is contained in:
2025-09-29 14:06:04 +08:00
parent 2a26db6e17
commit dbd56a1493
319 changed files with 965 additions and 817 deletions

3
.gitignore vendored
View File

@@ -41,6 +41,9 @@ next-env.d.ts
# uploads # uploads
/uploads /uploads
# download
/download
# cache # cache
/cache /cache

BIN
bun.lockb

Binary file not shown.

View File

@@ -39,19 +39,23 @@
"@tiptap/pm": "^2.11.7", "@tiptap/pm": "^2.11.7",
"@tiptap/react": "^2.11.7", "@tiptap/react": "^2.11.7",
"@tiptap/starter-kit": "^2.11.7", "@tiptap/starter-kit": "^2.11.7",
"@types/adm-zip": "^0.5.7",
"@types/bun": "^1.2.2", "@types/bun": "^1.2.2",
"@types/leaflet": "^1.9.20", "@types/leaflet": "^1.9.20",
"@types/lodash": "^4.17.16", "@types/lodash": "^4.17.16",
"add": "^2.0.6", "add": "^2.0.6",
"adm-zip": "^0.5.16",
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"bcryptjs": "^3.0.2", "bcryptjs": "^3.0.2",
"bun": "^1.2.2", "bun": "^1.2.2",
"chart.js": "^4.4.8", "chart.js": "^4.4.8",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"colors": "^1.4.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"elysia": "^1.3.5", "elysia": "^1.3.5",
"embla-carousel-autoplay": "^8.5.2", "embla-carousel-autoplay": "^8.5.2",
"embla-carousel-react": "^7.1.0", "embla-carousel-react": "^7.1.0",
"extract-zip": "^2.0.1",
"form-data": "^4.0.2", "form-data": "^4.0.2",
"framer-motion": "^12.23.5", "framer-motion": "^12.23.5",
"get-port": "^7.1.0", "get-port": "^7.1.0",

View File

@@ -1,29 +1,23 @@
[ [
{ {
"id": "1", "id": "role-1",
"name": "ADMIN DESA", "name": "ADMIN DESA",
"description": "Administrator Desa", "description": "Administrator Desa",
"permissions": ["manage_users", "manage_content", "view_reports"], "permissions": ["manage_users", "manage_content", "view_reports"],
"isActive": true, "isActive": true
"createdAt": "2025-09-01T00:00:00.000Z",
"updatedAt": "2025-09-01T00:00:00.000Z"
}, },
{ {
"id": "2", "id": "role-2",
"name": "ADMIN KESEHATAN", "name": "ADMIN KESEHATAN",
"description": "Administrator Bidang Kesehatan", "description": "Administrator Bidang Kesehatan",
"permissions": ["manage_health_data", "view_reports"], "permissions": ["manage_health_data", "view_reports"],
"isActive": true, "isActive": true
"createdAt": "2025-09-01T00:00:00.000Z",
"updatedAt": "2025-09-01T00:00:00.000Z"
}, },
{ {
"id": "3", "id": "role-3",
"name": "ADMIN SEKOLAH", "name": "ADMIN SEKOLAH",
"description": "Administrator Sekolah", "description": "Administrator Sekolah",
"permissions": ["manage_school_data", "view_reports"], "permissions": ["manage_school_data", "view_reports"],
"isActive": true, "isActive": true
"createdAt": "2025-09-01T00:00:00.000Z",
"updatedAt": "2025-09-01T00:00:00.000Z"
} }
] ]

View File

@@ -1,32 +1,23 @@
[ [
{ {
"id": "1", "id": "user-1",
"nama": "Admin Desa", "nama": "Admin Desa",
"nomor": "089647037426", "nomor": "089647037426",
"roleId": "1", "roleId": "role-1",
"isActive": true, "isActive": true
"lastLogin": "2025-08-31T10:00:00.000Z", },
"createdAt": "2025-09-01T00:00:00.000Z", {
"updatedAt": "2025-09-01T00:00:00.000Z" "id": "user-2",
}, "nama": "Admin Kesehatan",
{ "nomor": "082339004198",
"id": "2", "roleId": "role-2",
"nama": "Admin Kesehatan", "isActive": true
"nomor": "082339004198", },
"roleId": "2", {
"isActive": true, "id": "user-3",
"lastLogin": null, "nama": "Admin Sekolah",
"createdAt": "2025-09-01T00:00:00.000Z", "nomor": "085237157222",
"updatedAt": "2025-09-01T00:00:00.000Z" "roleId": "role-3",
}, "isActive": true
{ }
"id": "3", ]
"nama": "Admin Sekolah",
"nomor": "085237157222",
"roleId": "3",
"isActive": true,
"lastLogin": null,
"createdAt": "2025-09-01T00:00:00.000Z",
"updatedAt": "2025-09-01T00:00:00.000Z"
}
]

30
prisma/safeseedUnique.ts Normal file
View File

@@ -0,0 +1,30 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
// helpers/safeSeedUnique.ts
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
/**
* Helper generic buat seed dengan upsert aman
*/
export async function safeSeedUnique<T extends keyof PrismaClient>(
model: T,
where: Record<string, any>,
data: Record<string, any>
) {
const m = prisma[model];
if (!m) throw new Error(`Model ${String(model)} tidak ditemukan di PrismaClient`);
try {
// @ts-expect-error upsert dynamic
await m.upsert({
where,
update: data,
create: { ...where, ...data },
});
console.log(`✅ Seeded ${String(model)} -> ${JSON.stringify(where)}`);
} catch (err) {
console.error(`❌ Gagal seed ${String(model)} -> ${JSON.stringify(where)}`, err);
}
}

View File

@@ -56,6 +56,8 @@ import tujuanProgram from "./data/pendidikan/program-pendidikan-anak/tujuan-prog
import roles from "./data/user/roles.json"; import roles from "./data/user/roles.json";
import users from "./data/user/users.json"; import users from "./data/user/users.json";
import fileStorage from "./data/file-storage.json"; import fileStorage from "./data/file-storage.json";
import seedAssets from "./seed_assets";
import { safeSeedUnique } from "./safeseedUnique";
(async () => { (async () => {
// =========== USER & ROLE =========== // =========== USER & ROLE ===========
@@ -63,23 +65,14 @@ import fileStorage from "./data/file-storage.json";
// =========== ROLES =========== // =========== ROLES ===========
console.log("🔄 Seeding roles..."); console.log("🔄 Seeding roles...");
for (const r of roles) { for (const r of roles) {
await prisma.role.upsert({ await safeSeedUnique("role", { id: r.id }, {
where: { id: r.id }, name: r.name,
update: { description: r.description,
name: r.name, permissions: r.permissions,
description: r.description, isActive: r.isActive,
permissions: r.permissions,
isActive: r.isActive,
},
create: {
id: r.id,
name: r.name,
description: r.description,
permissions: r.permissions,
isActive: r.isActive,
},
}); });
} }
console.log("✅ Roles seeded"); console.log("✅ Roles seeded");
// =========== USERS =========== // =========== USERS ===========
@@ -95,22 +88,12 @@ import fileStorage from "./data/file-storage.json";
continue; continue;
} }
await prisma.user.upsert({ await safeSeedUnique("user", { id: u.id }, {
where: { id: u.id }, username: u.nama,
update: { nomor: u.nomor,
username: u.nama, roleId: u.roleId,
nomor: u.nomor,
roleId: u.roleId,
isActive: u.isActive, isActive: u.isActive,
}, });
create: {
id: u.id,
username: u.nama,
nomor: u.nomor,
roleId: u.roleId,
isActive: u.isActive,
},
});
} }
console.log("✅ Users seeded"); console.log("✅ Users seeded");
@@ -364,6 +347,7 @@ import fileStorage from "./data/file-storage.json";
jumlah: l.jumlah, jumlah: l.jumlah,
}, },
create: { create: {
id: l.id,
name: l.name, name: l.name,
jumlah: l.jumlah, jumlah: l.jumlah,
}, },
@@ -1169,6 +1153,10 @@ import fileStorage from "./data/file-storage.json";
console.log( console.log(
"✅ fasilitas bimbingan belajar desa seeded (editable later via UI)" "✅ fasilitas bimbingan belajar desa seeded (editable later via UI)"
); );
// seed assets
await seedAssets();
})() })()
.then(() => prisma.$disconnect()) .then(() => prisma.$disconnect())
.catch((e) => { .catch((e) => {

118
prisma/seed_assets.ts Normal file
View File

@@ -0,0 +1,118 @@
// prisma/seedAssets.ts
import fs from "fs/promises";
import path from "path";
import sharp from "sharp";
import fetch from "node-fetch";
import AdmZip from "adm-zip";
import prisma from "@/lib/prisma";
const UPLOADS_DIR =
process.env.WIBU_UPLOAD_DIR || path.join(process.cwd(), "uploads");
// --- Helper: deteksi kategori file ---
function detectCategory(filename: string): "image" | "document" | "other" {
const ext = path.extname(filename).toLowerCase();
if ([".jpg", ".jpeg", ".png", ".webp"].includes(ext)) return "image";
if ([".pdf", ".doc", ".docx"].includes(ext)) return "document";
return "other";
}
// --- Helper: recursive walk dir ---
async function walkDir(dir: string, fileList: string[] = []): Promise<string[]> {
const entries = await fs.readdir(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
if (entry.name === "__MACOSX") continue; // skip folder sampah
await walkDir(fullPath, fileList);
} else {
if (entry.name.startsWith(".") || entry.name === ".DS_Store") continue; // skip file sampah
fileList.push(fullPath);
}
}
return fileList;
}
export default async function seedAssets() {
console.log("🚀 Seeding assets...");
// 1. Download zip
const url =
"https://cld-dkr-makuro-seafile.wibudev.com/f/ffd5a548a04f47939474/?dl=1";
const res = await fetch(url);
if (!res.ok) throw new Error(`Gagal download assets: ${res.statusText}`);
const buffer = Buffer.from(await res.arrayBuffer());
// 2. Extract zip ke folder tmp
const extractDir = path.join(process.cwd(), "tmp_assets");
await fs.rm(extractDir, { recursive: true, force: true });
await fs.mkdir(extractDir, { recursive: true });
const zip = new AdmZip(buffer);
zip.extractAllTo(extractDir, true);
// 3. Cari semua file valid (recursive)
const files = await walkDir(extractDir);
// 4. Loop tiap file & simpan
for (const filePath of files) {
const entryName = path.basename(filePath);
const category = detectCategory(entryName);
let finalName = entryName;
let mimeType = "application/octet-stream";
let targetPath = "";
if (category === "image") {
const fileBaseName = path.parse(entryName).name;
finalName = `${fileBaseName}.webp`;
targetPath = path.join(UPLOADS_DIR, "images", finalName);
await fs.mkdir(path.dirname(targetPath), { recursive: true });
await sharp(filePath).webp({ quality: 80 }).toFile(targetPath);
mimeType = "image/webp";
} else if (category === "document") {
targetPath = path.join(UPLOADS_DIR, "documents", entryName);
await fs.mkdir(path.dirname(targetPath), { recursive: true });
await fs.copyFile(filePath, targetPath);
mimeType = "application/pdf";
} else {
targetPath = path.join(UPLOADS_DIR, "other", entryName);
await fs.mkdir(path.dirname(targetPath), { recursive: true });
await fs.copyFile(filePath, targetPath);
}
// 5. Simpan ke DB
await prisma.fileStorage.create({
data: {
name: finalName,
realName: entryName,
path: targetPath,
mimeType,
link: `/uploads/${category}/${finalName}`,
category,
},
});
console.log(`📂 saved: ${category}/${finalName}`);
}
// 6. Cleanup
await fs.rm(extractDir, { recursive: true, force: true });
console.log("✅ Selesai seed assets!");
}
// --- Auto run kalau dipanggil langsung ---
if (import.meta.main) {
seedAssets()
.catch((err) => {
console.error("❌ Error seeding assets:", err);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
}

View File

@@ -96,7 +96,7 @@ function EditKategoriBerita() {
<TextInput <TextInput
label="Nama Kategori Berita" label="Nama Kategori Berita"
placeholder="Masukkan nama kategori berita" placeholder="Masukkan nama kategori berita"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />

View File

@@ -7,10 +7,9 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Text,
TextInput, TextInput,
Title, Title,
Tooltip, Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -62,9 +61,9 @@ function CreateKategoriBerita() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Kategori Berita</Text>} label="Nama Kategori Berita"
placeholder="Masukkan nama kategori berita" placeholder="Masukkan nama kategori berita"
value={createState.create.form.name || ''} defaultValue={createState.create.form.name || ''}
onChange={(e) => (createState.create.form.name = e.target.value)} onChange={(e) => (createState.create.form.name = e.target.value)}
required required
/> />

View File

@@ -131,17 +131,36 @@ function EditBerita() {
<TextInput <TextInput
label="Judul" label="Judul"
placeholder="Masukkan judul" placeholder="Masukkan judul"
value={formData.judul} defaultValue={formData.judul}
onChange={(e) => onChange={(e) =>
setFormData({ ...formData, judul: e.target.value }) setFormData({ ...formData, judul: e.target.value })
} }
required required
/> />
<Select
value={formData.kategoriBeritaId}
onChange={(val) =>
setFormData({ ...formData, kategoriBeritaId: val || "" })
}
label="Kategori"
placeholder="Pilih kategori"
data={
beritaState.kategoriBerita.findMany.data?.map((v) => ({
value: v.id,
label: v.name,
})) || []
}
clearable
searchable
required
error={!formData.kategoriBeritaId ? "Pilih kategori" : undefined}
/>
<TextInput <TextInput
label="Deskripsi" label="Deskripsi Singkat"
placeholder="Masukkan deskripsi" placeholder="Masukkan deskripsi singkat"
value={formData.deskripsi} defaultValue={formData.deskripsi}
onChange={(e) => onChange={(e) =>
setFormData({ ...formData, deskripsi: e.target.value }) setFormData({ ...formData, deskripsi: e.target.value })
} }
@@ -216,26 +235,6 @@ function EditBerita() {
}} }}
/> />
</Box> </Box>
<Select
value={formData.kategoriBeritaId}
onChange={(val) =>
setFormData({ ...formData, kategoriBeritaId: val || "" })
}
label="Kategori"
placeholder="Pilih kategori"
data={
beritaState.kategoriBerita.findMany.data?.map((v) => ({
value: v.id,
label: v.name,
})) || []
}
clearable
searchable
required
error={!formData.kategoriBeritaId ? "Pilih kategori" : undefined}
/>
<Group justify="right"> <Group justify="right">
<Button <Button
onClick={handleSubmit} onClick={handleSubmit}

View File

@@ -80,7 +80,7 @@ function DetailBerita() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text fz="md" c="dimmed">{data.deskripsi || '-'}</Text> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }}>{data.deskripsi || '-'}</Text>
</Box> </Box>
<Box> <Box>

View File

@@ -100,7 +100,7 @@ export default function CreateBerita() {
<TextInput <TextInput
label="Judul" label="Judul"
placeholder="Masukkan judul berita" placeholder="Masukkan judul berita"
value={beritaState.berita.create.form.judul} defaultValue={beritaState.berita.create.form.judul}
onChange={(e) => (beritaState.berita.create.form.judul = e.target.value)} onChange={(e) => (beritaState.berita.create.form.judul = e.target.value)}
required required
/> />
@@ -112,7 +112,7 @@ export default function CreateBerita() {
label: item.name, label: item.name,
value: item.id, value: item.id,
}))} }))}
value={beritaState.berita.create.form.kategoriBeritaId || null} defaultValue={beritaState.berita.create.form.kategoriBeritaId || null}
onChange={(val: string | null) => { onChange={(val: string | null) => {
if (val) { if (val) {
const selected = beritaState.kategoriBerita.findMany.data?.find( const selected = beritaState.kategoriBerita.findMany.data?.find(
@@ -133,8 +133,9 @@ export default function CreateBerita() {
<TextInput <TextInput
label="Deskripsi Singkat" label="Deskripsi Singkat"
required
placeholder="Masukkan deskripsi berita" placeholder="Masukkan deskripsi berita"
value={beritaState.berita.create.form.deskripsi} defaultValue={beritaState.berita.create.form.deskripsi}
onChange={(e) => (beritaState.berita.create.form.deskripsi = e.target.value)} onChange={(e) => (beritaState.berita.create.form.deskripsi = e.target.value)}
/> />

View File

@@ -102,7 +102,7 @@ function EditVideo() {
<TextInput <TextInput
label="Judul Video" label="Judul Video"
placeholder="Masukkan judul video" placeholder="Masukkan judul video"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -111,7 +111,7 @@ function EditVideo() {
<TextInput <TextInput
label="Link Video YouTube" label="Link Video YouTube"
placeholder="https://www.youtube.com/watch?v=abc123" placeholder="https://www.youtube.com/watch?v=abc123"
value={formData.linkVideo} defaultValue={formData.linkVideo}
onChange={(e) => setFormData({ ...formData, linkVideo: e.currentTarget.value })} onChange={(e) => setFormData({ ...formData, linkVideo: e.currentTarget.value })}
required required
/> />

View File

@@ -102,6 +102,7 @@ function DetailVideo() {
fz="md" fz="md"
c="dimmed" c="dimmed"
dangerouslySetInnerHTML={{ __html: data.deskripsi }} dangerouslySetInnerHTML={{ __html: data.deskripsi }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
) : ( ) : (
<Text fz="sm" c="dimmed">Tidak ada deskripsi</Text> <Text fz="sm" c="dimmed">Tidak ada deskripsi</Text>

View File

@@ -80,7 +80,7 @@ function CreateVideo() {
<TextInput <TextInput
label="Judul Video" label="Judul Video"
placeholder="Masukkan judul video" placeholder="Masukkan judul video"
value={videoState.create.form.name} defaultValue={videoState.create.form.name}
onChange={(e) => { onChange={(e) => {
videoState.create.form.name = e.currentTarget.value; videoState.create.form.name = e.currentTarget.value;
}} }}
@@ -91,7 +91,7 @@ function CreateVideo() {
<TextInput <TextInput
label="Link Video YouTube" label="Link Video YouTube"
placeholder="https://www.youtube.com/watch?v=abc123" placeholder="https://www.youtube.com/watch?v=abc123"
value={link} defaultValue={link}
onChange={(e) => setLink(e.currentTarget.value)} onChange={(e) => setLink(e.currentTarget.value)}
required required
/> />

View File

@@ -98,7 +98,7 @@ function EditAjukanPermohonan() {
<TextInput <TextInput
label="Nama" label="Nama"
placeholder="Masukkan nama" placeholder="Masukkan nama"
value={formData.nama} defaultValue={formData.nama}
onChange={(e) => setFormData({ ...formData, nama: e.target.value })} onChange={(e) => setFormData({ ...formData, nama: e.target.value })}
required required
/> />
@@ -107,7 +107,7 @@ function EditAjukanPermohonan() {
type="number" type="number"
label="NIK" label="NIK"
placeholder="Masukkan NIK" placeholder="Masukkan NIK"
value={formData.nik} defaultValue={formData.nik}
onChange={(e) => setFormData({ ...formData, nik: e.target.value })} onChange={(e) => setFormData({ ...formData, nik: e.target.value })}
required required
/> />
@@ -115,7 +115,7 @@ function EditAjukanPermohonan() {
<TextInput <TextInput
label="Alamat" label="Alamat"
placeholder="Masukkan alamat" placeholder="Masukkan alamat"
value={formData.alamat} defaultValue={formData.alamat}
onChange={(e) => setFormData({ ...formData, alamat: e.target.value })} onChange={(e) => setFormData({ ...formData, alamat: e.target.value })}
required required
/> />
@@ -124,7 +124,7 @@ function EditAjukanPermohonan() {
type="number" type="number"
label="Nomor KK" label="Nomor KK"
placeholder="Masukkan nomor KK" placeholder="Masukkan nomor KK"
value={formData.nomorKk} defaultValue={formData.nomorKk}
onChange={(e) => setFormData({ ...formData, nomorKk: e.target.value })} onChange={(e) => setFormData({ ...formData, nomorKk: e.target.value })}
required required
/> />

View File

@@ -3,14 +3,14 @@ import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirma
import stateLayananDesa from '@/app/admin/(dashboard)/_state/desa/layananDesa'; import stateLayananDesa from '@/app/admin/(dashboard)/_state/desa/layananDesa';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
Box, Box,
Button, Button,
Group, Group,
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
Text, Text,
Tooltip Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
@@ -79,7 +79,7 @@ function DetailAjukanPermohonan() {
<Text fz="lg" fw="bold"> <Text fz="lg" fw="bold">
Nama Nama
</Text> </Text>
<Text fz="md" c="dimmed"> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }}>
{data?.nama || '-'} {data?.nama || '-'}
</Text> </Text>
</Box> </Box>
@@ -97,7 +97,7 @@ function DetailAjukanPermohonan() {
<Text fz="lg" fw="bold"> <Text fz="lg" fw="bold">
Alamat Alamat
</Text> </Text>
<Text fz="md" c="dimmed"> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }}>
{data?.alamat || '-'} {data?.alamat || '-'}
</Text> </Text>
</Box> </Box>

View File

@@ -76,7 +76,7 @@ function EditPelayananPendudukNonPermanent() {
<TextInput <TextInput
label="Judul" label="Judul"
placeholder="Masukkan judul" placeholder="Masukkan judul"
value={formData.name} defaultValue={formData.name}
onChange={(e) => onChange={(e) =>
setFormData({ ...formData, name: e.target.value }) setFormData({ ...formData, name: e.target.value })
} }

View File

@@ -91,6 +91,7 @@ function PelayananPendudukNonPermanent() {
ta="justify" ta="justify"
fz={{ base: '1rem', md: '1.2rem' }} fz={{ base: '1rem', md: '1.2rem' }}
dangerouslySetInnerHTML={{ __html: data.deskripsi }} dangerouslySetInnerHTML={{ __html: data.deskripsi }}
style={{wordBreak: "break-word", whiteSpace: "normal"}}
/> />
</Box> </Box>
</Box> </Box>

View File

@@ -83,7 +83,7 @@ function EditPelayananPerizinanBerusaha() {
<TextInput <TextInput
label="Judul" label="Judul"
placeholder="Masukkan judul" placeholder="Masukkan judul"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -92,7 +92,7 @@ function EditPelayananPerizinanBerusaha() {
<TextInput <TextInput
label="Link" label="Link"
placeholder="Masukkan link terkait" placeholder="Masukkan link terkait"
value={formData.link} defaultValue={formData.link}
onChange={(e) => setFormData({ ...formData, link: e.target.value })} onChange={(e) => setFormData({ ...formData, link: e.target.value })}
/> />

View File

@@ -101,6 +101,7 @@ function PerizinanBerusaha() {
ta="justify" ta="justify"
fz={{ base: '1rem', md: '1.2rem' }} fz={{ base: '1rem', md: '1.2rem' }}
dangerouslySetInnerHTML={{ __html: data.deskripsi }} dangerouslySetInnerHTML={{ __html: data.deskripsi }}
style={{wordBreak: "break-word", whiteSpace: "normal"}}
/> />
<Text <Text

View File

@@ -122,7 +122,7 @@ function EditSuratKeterangan() {
<TextInput <TextInput
label="Nama Surat Keterangan" label="Nama Surat Keterangan"
placeholder="Masukkan nama surat keterangan" placeholder="Masukkan nama surat keterangan"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />

View File

@@ -95,6 +95,7 @@ function DetailSuratKeterangan() {
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: data?.deskripsi || '-', __html: data?.deskripsi || '-',
}} }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -106,9 +106,9 @@ function CreateSuratKeterangan() {
<Stack gap="md"> <Stack gap="md">
{/* Nama Surat */} {/* Nama Surat */}
<TextInput <TextInput
value={stateSurat.create.form.name} defaultValue={stateSurat.create.form.name}
onChange={(val) => (stateSurat.create.form.name = val.target.value)} onChange={(val) => (stateSurat.create.form.name = val.target.value)}
label={<Text fz="sm" fw="bold">Nama Surat Keterangan</Text>} label="Nama Surat Keterangan"
placeholder="Masukkan nama surat keterangan" placeholder="Masukkan nama surat keterangan"
required required
/> />

View File

@@ -119,6 +119,7 @@ function ListSuratKeterangan({ search }: { search: string }) {
<Box w={200}> <Box w={200}>
<Text truncate="end" lineClamp={1} fz="sm" c="dimmed" <Text truncate="end" lineClamp={1} fz="sm" c="dimmed"
dangerouslySetInnerHTML={{ __html: item.deskripsi }} dangerouslySetInnerHTML={{ __html: item.deskripsi }}
style={{wordBreak: "break-word", whiteSpace: "normal"}}
/> />
</Box> </Box>
</TableTd> </TableTd>

View File

@@ -94,7 +94,7 @@ function EditPelayananTelunjukSakti() {
<TextInput <TextInput
label="Nama Pelayanan" label="Nama Pelayanan"
placeholder="Masukkan nama pelayanan" placeholder="Masukkan nama pelayanan"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -114,7 +114,7 @@ function EditPelayananTelunjukSakti() {
<TextInput <TextInput
label="Link" label="Link"
placeholder="Masukkan link terkait" placeholder="Masukkan link terkait"
value={formData.link} defaultValue={formData.link}
onChange={(e) => setFormData({ ...formData, link: e.target.value })} onChange={(e) => setFormData({ ...formData, link: e.target.value })}
/> />

View File

@@ -103,6 +103,7 @@ function DetailPelayananTelunjukSakti() {
overflow: 'hidden', overflow: 'hidden',
textOverflow: 'ellipsis', textOverflow: 'ellipsis',
whiteSpace: 'nowrap', whiteSpace: 'nowrap',
wordBreak: "break-word",
}} }}
> >
{data.link} {data.link}
@@ -124,6 +125,7 @@ function DetailPelayananTelunjukSakti() {
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: data?.deskripsi || '-', __html: data?.deskripsi || '-',
}} }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -8,15 +8,14 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Text,
TextInput, TextInput,
Title, Title,
Tooltip, Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useProxy } from 'valtio/utils';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
function CreatePelayananTelunjukDesa() { function CreatePelayananTelunjukDesa() {
const stateTelunjukDesa = useProxy(stateLayananDesa.pelayananTelunjukSaktiDesa); const stateTelunjukDesa = useProxy(stateLayananDesa.pelayananTelunjukSaktiDesa);
@@ -68,33 +67,35 @@ function CreatePelayananTelunjukDesa() {
<Stack gap="md"> <Stack gap="md">
{/* Nama */} {/* Nama */}
<TextInput <TextInput
value={stateTelunjukDesa.create.form.name} defaultValue={stateTelunjukDesa.create.form.name}
onChange={(val) => { onChange={(val) => {
stateTelunjukDesa.create.form.name = val.target.value; stateTelunjukDesa.create.form.name = val.target.value;
}} }}
label={<Text fz="sm" fw="bold">Nama Pelayanan</Text>} label="Nama Pelayanan"
placeholder="Masukkan nama pelayanan telunjuk sakti desa" placeholder="Masukkan nama pelayanan telunjuk sakti desa"
required required
/> />
{/* Deskripsi */} {/* Deskripsi */}
<TextInput <TextInput
value={stateTelunjukDesa.create.form.deskripsi} defaultValue={stateTelunjukDesa.create.form.deskripsi}
onChange={(val) => { onChange={(val) => {
stateTelunjukDesa.create.form.deskripsi = val.target.value; stateTelunjukDesa.create.form.deskripsi = val.target.value;
}} }}
label={<Text fz="sm" fw="bold">Deskripsi</Text>} label="Deskripsi"
placeholder="Masukkan deskripsi pelayanan" placeholder="Masukkan deskripsi pelayanan"
required
/> />
{/* Link */} {/* Link */}
<TextInput <TextInput
value={stateTelunjukDesa.create.form.link} defaultValue={stateTelunjukDesa.create.form.link}
onChange={(val) => { onChange={(val) => {
stateTelunjukDesa.create.form.link = val.target.value; stateTelunjukDesa.create.form.link = val.target.value;
}} }}
label={<Text fz="sm" fw="bold">Link</Text>} label="Link"
placeholder="Masukkan link pelayanan" placeholder="Masukkan link pelayanan"
required
/> />
{/* Tombol Simpan */} {/* Tombol Simpan */}

View File

@@ -261,7 +261,7 @@ function ListPelayananTelunjukSakti({ search }: { search: string }) {
<TableTd> <TableTd>
<Box w={200}> <Box w={200}>
<a href={item.link} target="_blank" rel="noopener noreferrer"> <a href={item.link} target="_blank" rel="noopener noreferrer">
<Text lineClamp={1} dangerouslySetInnerHTML={{ __html: item.deskripsi }} truncate="end" fz={"sm"} /> <Text lineClamp={1} dangerouslySetInnerHTML={{ __html: item.deskripsi }} style={{wordBreak: "break-word", whiteSpace: "normal"}} truncate="end" fz={"sm"} />
</a> </a>
</Box> </Box>
</TableTd> </TableTd>

View File

@@ -122,7 +122,7 @@ function EditPenghargaan() {
<TextInput <TextInput
label="Judul" label="Judul"
placeholder="Masukkan judul penghargaan" placeholder="Masukkan judul penghargaan"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -131,7 +131,7 @@ function EditPenghargaan() {
<TextInput <TextInput
label="Juara" label="Juara"
placeholder="Masukkan juara" placeholder="Masukkan juara"
value={formData.juara} defaultValue={formData.juara}
onChange={(e) => setFormData({ ...formData, juara: e.target.value })} onChange={(e) => setFormData({ ...formData, juara: e.target.value })}
required required
/> />

View File

@@ -122,6 +122,7 @@ function DetailPenghargaan() {
fz="md" fz="md"
c="dimmed" c="dimmed"
dangerouslySetInnerHTML={{ __html: data.deskripsi || '-' }} dangerouslySetInnerHTML={{ __html: data.deskripsi || '-' }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -87,17 +87,17 @@ function CreatePenghargaan() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
value={statePenghargaan.create.form.name} defaultValue={statePenghargaan.create.form.name}
onChange={(val) => (statePenghargaan.create.form.name = val.target.value)} onChange={(val) => (statePenghargaan.create.form.name = val.target.value)}
label={<Text fz="sm" fw="bold">Nama Penghargaan</Text>} label="Nama Penghargaan"
placeholder="Masukkan nama penghargaan" placeholder="Masukkan nama penghargaan"
required required
/> />
<TextInput <TextInput
value={statePenghargaan.create.form.juara} defaultValue={statePenghargaan.create.form.juara}
onChange={(val) => (statePenghargaan.create.form.juara = val.target.value)} onChange={(val) => (statePenghargaan.create.form.juara = val.target.value)}
label={<Text fz="sm" fw="bold">Juara</Text>} label="Juara"
placeholder="Masukkan juara" placeholder="Masukkan juara"
required required
/> />

View File

@@ -108,6 +108,7 @@ function ListPenghargaan({ search }: { search: string }) {
fz="sm" fz="sm"
c="dimmed" c="dimmed"
dangerouslySetInnerHTML={{ __html: item.deskripsi }} dangerouslySetInnerHTML={{ __html: item.deskripsi }}
style={{wordBreak: "break-word", whiteSpace: "normal"}}
/> />
</Box> </Box>
</TableTd> </TableTd>

View File

@@ -10,8 +10,7 @@ import {
Stack, Stack,
TextInput, TextInput,
Title, Title,
Tooltip, Tooltip
Text,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -95,11 +94,7 @@ function EditKategoriPengumuman() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
label={ label="Nama Kategori Pengumuman"
<Text fz="sm" fw="bold">
Nama Kategori Pengumuman
</Text>
}
placeholder="Masukkan nama kategori Pengumuman" placeholder="Masukkan nama kategori Pengumuman"
value={formData.name} value={formData.name}
onChange={(e) => onChange={(e) =>

View File

@@ -7,10 +7,9 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Text,
TextInput, TextInput,
Title, Title,
Tooltip, Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -62,9 +61,9 @@ function CreateKategoriPengumuman() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Kategori Pengumuman</Text>} label="Nama Kategori Pengumuman"
placeholder="Masukkan nama kategori pengumuman" placeholder="Masukkan nama kategori pengumuman"
value={createState.create.form.name || ''} defaultValue={createState.create.form.name || ''}
onChange={(e) => (createState.create.form.name = e.target.value)} onChange={(e) => (createState.create.form.name = e.target.value)}
required required
/> />

View File

@@ -108,7 +108,7 @@ function EditPengumuman() {
<TextInput <TextInput
label="Judul Pengumuman" label="Judul Pengumuman"
placeholder="Masukkan judul" placeholder="Masukkan judul"
value={formData.judul} defaultValue={formData.judul}
onChange={(e) => setFormData({ ...formData, judul: e.target.value })} onChange={(e) => setFormData({ ...formData, judul: e.target.value })}
required required
/> />
@@ -116,7 +116,7 @@ function EditPengumuman() {
<TextInput <TextInput
label="Deskripsi Singkat" label="Deskripsi Singkat"
placeholder="Masukkan deskripsi" placeholder="Masukkan deskripsi"
value={formData.deskripsi} defaultValue={formData.deskripsi}
onChange={(e) => onChange={(e) =>
setFormData({ ...formData, deskripsi: e.target.value }) setFormData({ ...formData, deskripsi: e.target.value })
} }

View File

@@ -97,7 +97,7 @@ export default function DetailPengumuman() {
<Text fz="lg" fw="bold"> <Text fz="lg" fw="bold">
Deskripsi Deskripsi
</Text> </Text>
<Text fz="md" c="dimmed"> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }}>
{data?.deskripsi || '-'} {data?.deskripsi || '-'}
</Text> </Text>
</Box> </Box>
@@ -112,6 +112,7 @@ export default function DetailPengumuman() {
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: data?.content || '-', __html: data?.content || '-',
}} }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -68,16 +68,16 @@ function CreatePengumuman() {
<Stack gap="md"> <Stack gap="md">
{/* Judul */} {/* Judul */}
<TextInput <TextInput
value={pengumumanState.pengumuman.create.form.judul} defaultValue={pengumumanState.pengumuman.create.form.judul}
onChange={(val) => (pengumumanState.pengumuman.create.form.judul = val.target.value)} onChange={(val) => (pengumumanState.pengumuman.create.form.judul = val.target.value)}
label={<Text fz="sm" fw="bold">Judul</Text>} label="Judul"
placeholder="Masukkan judul pengumuman" placeholder="Masukkan judul pengumuman"
required required
/> />
{/* Kategori */} {/* Kategori */}
<Select <Select
label={<Text fz="sm" fw="bold">Kategori</Text>} label="Kategori"
placeholder="Pilih kategori" placeholder="Pilih kategori"
value={pengumumanState.pengumuman.create.form.categoryPengumumanId || ""} value={pengumumanState.pengumuman.create.form.categoryPengumumanId || ""}
onChange={(val) => { onChange={(val) => {
@@ -93,9 +93,9 @@ function CreatePengumuman() {
{/* Deskripsi Singkat */} {/* Deskripsi Singkat */}
<TextInput <TextInput
value={pengumumanState.pengumuman.create.form.deskripsi} defaultValue={pengumumanState.pengumuman.create.form.deskripsi}
onChange={(val) => (pengumumanState.pengumuman.create.form.deskripsi = val.target.value)} onChange={(val) => (pengumumanState.pengumuman.create.form.deskripsi = val.target.value)}
label={<Text fz="sm" fw="bold">Deskripsi Singkat</Text>} label="Deskripsi Singkat"
placeholder="Masukkan deskripsi singkat" placeholder="Masukkan deskripsi singkat"
required required
/> />

View File

@@ -89,7 +89,7 @@ function EditKategoriPotensi() {
<TextInput <TextInput
label="Nama Kategori Potensi" label="Nama Kategori Potensi"
placeholder="Masukkan nama kategori potensi" placeholder="Masukkan nama kategori potensi"
value={formData.nama} defaultValue={formData.nama}
onChange={(e) => setFormData({ ...formData, nama: e.target.value })} onChange={(e) => setFormData({ ...formData, nama: e.target.value })}
required required
/> />

View File

@@ -7,10 +7,9 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Text,
TextInput, TextInput,
Title, Title,
Tooltip, Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -62,9 +61,9 @@ function CreateKategoriPotensi() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Kategori Potensi</Text>} label="Nama Kategori Potensi"
placeholder="Masukkan nama kategori potensi" placeholder="Masukkan nama kategori potensi"
value={createState.create.form.nama || ''} defaultValue={createState.create.form.nama || ''}
onChange={(e) => (createState.create.form.nama = e.target.value)} onChange={(e) => (createState.create.form.nama = e.target.value)}
required required
/> />

View File

@@ -122,7 +122,7 @@ function EditPotensi() {
<TextInput <TextInput
label="Judul Potensi" label="Judul Potensi"
placeholder="Masukkan judul" placeholder="Masukkan judul"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -130,7 +130,7 @@ function EditPotensi() {
<TextInput <TextInput
label="Deskripsi Singkat" label="Deskripsi Singkat"
placeholder="Masukkan deskripsi" placeholder="Masukkan deskripsi"
value={formData.deskripsi} defaultValue={formData.deskripsi}
onChange={(e) => setFormData({ ...formData, deskripsi: e.target.value })} onChange={(e) => setFormData({ ...formData, deskripsi: e.target.value })}
required required
/> />

View File

@@ -77,7 +77,7 @@ export default function DetailPotensi() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text fz="md" c="dimmed">{data.deskripsi || '-'}</Text> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }}>{data.deskripsi || '-'}</Text>
</Box> </Box>
<Box> <Box>
@@ -103,6 +103,7 @@ export default function DetailPotensi() {
fz="md" fz="md"
c="dimmed" c="dimmed"
dangerouslySetInnerHTML={{ __html: data.content || '-' }} dangerouslySetInnerHTML={{ __html: data.content || '-' }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -93,25 +93,25 @@ function CreatePotensi() {
<Stack gap="md"> <Stack gap="md">
{/* Judul */} {/* Judul */}
<TextInput <TextInput
value={potensiState.create.form.name} defaultValue={potensiState.create.form.name}
onChange={(val) => (potensiState.create.form.name = val.target.value)} onChange={(val) => (potensiState.create.form.name = val.target.value)}
label={<Text fz="sm" fw="bold">Judul</Text>} label="Judul"
placeholder="Masukkan judul potensi" placeholder="Masukkan judul potensi"
required required
/> />
{/* Deskripsi */} {/* Deskripsi */}
<TextInput <TextInput
value={potensiState.create.form.deskripsi} defaultValue={potensiState.create.form.deskripsi}
onChange={(val) => (potensiState.create.form.deskripsi = val.target.value)} onChange={(val) => (potensiState.create.form.deskripsi = val.target.value)}
label={<Text fz="sm" fw="bold">Deskripsi</Text>} label="Deskripsi"
placeholder="Masukkan deskripsi singkat" placeholder="Masukkan deskripsi singkat"
required required
/> />
{/* Kategori */} {/* Kategori */}
<Select <Select
label={<Text fz="sm" fw="bold">Kategori</Text>} label="Kategori"
placeholder="Pilih kategori" placeholder="Pilih kategori"
value={potensiState.create.form.kategoriId || ""} value={potensiState.create.form.kategoriId || ""}
onChange={(val) => { onChange={(val) => {

View File

@@ -115,6 +115,7 @@ function ListPotensi({ search }: { search: string }) {
truncate truncate
fz="sm" fz="sm"
dangerouslySetInnerHTML={{ __html: item.deskripsi }} dangerouslySetInnerHTML={{ __html: item.deskripsi }}
style={{wordBreak: "break-word", whiteSpace: "normal"}}
/> />
</Box> </Box>
</TableTd> </TableTd>

View File

@@ -115,7 +115,7 @@ function Page() {
<TextInput <TextInput
label={<Text fw="bold">Judul</Text>} label={<Text fw="bold">Judul</Text>}
placeholder="Judul lambang" placeholder="Judul lambang"
value={lambangState.update.form.judul} defaultValue={lambangState.update.form.judul}
onChange={(e) => lambangState.update.form.judul = e.currentTarget.value} onChange={(e) => lambangState.update.form.judul = e.currentTarget.value}
error={!lambangState.update.form.judul && "Judul wajib diisi"} error={!lambangState.update.form.judul && "Judul wajib diisi"}
/> />

View File

@@ -175,7 +175,7 @@ function Page() {
<TextInput <TextInput
label={<Text fw="bold">Judul</Text>} label={<Text fw="bold">Judul</Text>}
placeholder="Masukkan judul maskot" placeholder="Masukkan judul maskot"
value={formData.judul} defaultValue={formData.judul}
onChange={(e) => setFormData({ ...formData, judul: e.currentTarget.value })} onChange={(e) => setFormData({ ...formData, judul: e.currentTarget.value })}
error={!formData.judul && "Judul wajib diisi"} error={!formData.judul && "Judul wajib diisi"}
/> />

View File

@@ -116,7 +116,7 @@ function Page() {
<TextInput <TextInput
label={<Text fw="bold">Judul</Text>} label={<Text fw="bold">Judul</Text>}
placeholder="Judul sejarah" placeholder="Judul sejarah"
value={sejarahState.update.form.judul} defaultValue={sejarahState.update.form.judul}
onChange={(e) => sejarahState.update.form.judul = e.currentTarget.value} onChange={(e) => sejarahState.update.form.judul = e.currentTarget.value}
error={!sejarahState.update.form.judul && "Judul wajib diisi"} error={!sejarahState.update.form.judul && "Judul wajib diisi"}
/> />

View File

@@ -70,7 +70,7 @@ function Page() {
</Paper> </Paper>
</Stack> </Stack>
<Divider my="md" color={colors['blue-button']} /> <Divider my="md" color={colors['blue-button']} />
<Text fz={{ base: "md", md: "h3" }} ta="justify" dangerouslySetInnerHTML={{ __html: sejarah.deskripsi }} /> <Text fz={{ base: "md", md: "h3" }} style={{wordBreak: "break-word", whiteSpace: "normal"}} ta="justify" dangerouslySetInnerHTML={{ __html: sejarah.deskripsi }} />
</Paper> </Paper>
</Box> </Box>
</Paper> </Paper>
@@ -118,9 +118,9 @@ function Page() {
</Stack> </Stack>
<Divider my="md" color={colors['blue-button']} /> <Divider my="md" color={colors['blue-button']} />
<Text fw="bold" fz={{ base: "lg", md: "h2" }}>Visi Desa</Text> <Text fw="bold" fz={{ base: "lg", md: "h2" }}>Visi Desa</Text>
<Text fz={{ base: "md", md: "h3" }} ta="justify" dangerouslySetInnerHTML={{ __html: visiMisi.visi }} /> <Text fz={{ base: "md", md: "h3" }} ta="justify" style={{wordBreak: "break-word", whiteSpace: "normal"}} dangerouslySetInnerHTML={{ __html: visiMisi.visi }} />
<Text fw="bold" fz={{ base: "lg", md: "h2" }}>Misi Desa</Text> <Text fw="bold" fz={{ base: "lg", md: "h2" }}>Misi Desa</Text>
<Text fz={{ base: "md", md: "h3" }} ta="justify" dangerouslySetInnerHTML={{ __html: visiMisi.misi }} /> <Text fz={{ base: "md", md: "h3" }} ta="justify" style={{wordBreak: "break-word", whiteSpace: "normal"}} dangerouslySetInnerHTML={{ __html: visiMisi.misi }} />
</Paper> </Paper>
</Box> </Box>
</Paper> </Paper>
@@ -167,7 +167,7 @@ function Page() {
</Paper> </Paper>
</Stack> </Stack>
<Divider my="md" color={colors['blue-button']} /> <Divider my="md" color={colors['blue-button']} />
<Text fz={{ base: "md", md: "h3" }} ta="justify" dangerouslySetInnerHTML={{ __html: lambang.deskripsi }} /> <Text fz={{ base: "md", md: "h3" }} ta="justify" style={{wordBreak: "break-word", whiteSpace: "normal"}} dangerouslySetInnerHTML={{ __html: lambang.deskripsi }} />
</Paper> </Paper>
</Box> </Box>
</Paper> </Paper>
@@ -214,7 +214,7 @@ function Page() {
</Paper> </Paper>
</Stack> </Stack>
<Divider my="md" color={colors['blue-button']} /> <Divider my="md" color={colors['blue-button']} />
<Text fz={{ base: "md", md: "h3" }} ta="justify" dangerouslySetInnerHTML={{ __html: maskot.deskripsi }} /> <Text fz={{ base: "md", md: "h3" }} ta="justify" style={{wordBreak: "break-word", whiteSpace: "normal"}} dangerouslySetInnerHTML={{ __html: maskot.deskripsi }} />
<Stack mt="md" gap="sm"> <Stack mt="md" gap="sm">
<SimpleGrid cols={{ base: 2, md: 4 }} spacing="md"> <SimpleGrid cols={{ base: 2, md: 4 }} spacing="md">
{maskot.images.map((img, idx) => ( {maskot.images.map((img, idx) => (

View File

@@ -106,7 +106,7 @@ function EditPerbekelDariMasaKeMasa() {
<TextInput <TextInput
label="Nama" label="Nama"
placeholder="Masukkan nama" placeholder="Masukkan nama"
value={formData.nama} defaultValue={formData.nama}
onChange={(e) => setFormData({ ...formData, nama: e.target.value })} onChange={(e) => setFormData({ ...formData, nama: e.target.value })}
required required
/> />
@@ -170,7 +170,7 @@ function EditPerbekelDariMasaKeMasa() {
<TextInput <TextInput
label="Daerah" label="Daerah"
placeholder="Masukkan daerah" placeholder="Masukkan daerah"
value={formData.daerah} defaultValue={formData.daerah}
onChange={(e) => setFormData({ ...formData, daerah: e.target.value })} onChange={(e) => setFormData({ ...formData, daerah: e.target.value })}
required required
/> />
@@ -178,7 +178,7 @@ function EditPerbekelDariMasaKeMasa() {
<TextInput <TextInput
label="Periode" label="Periode"
placeholder="Masukkan periode" placeholder="Masukkan periode"
value={formData.periode} defaultValue={formData.periode}
onChange={(e) => setFormData({ ...formData, periode: e.target.value })} onChange={(e) => setFormData({ ...formData, periode: e.target.value })}
required required
/> />

View File

@@ -70,23 +70,23 @@ function CreatePerbekelDariMasaKeMasa() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Perbekel</Text>} label="Nama Perbekel"
placeholder="Masukkan nama perbekel" placeholder="Masukkan nama perbekel"
value={state.create.form.nama} defaultValue={state.create.form.nama}
onChange={(e) => (state.create.form.nama = e.target.value)} onChange={(e) => (state.create.form.nama = e.target.value)}
required required
/> />
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Daerah</Text>} label="Daerah"
placeholder="Masukkan daerah" placeholder="Masukkan daerah"
value={state.create.form.daerah} defaultValue={state.create.form.daerah}
onChange={(e) => (state.create.form.daerah = e.target.value)} onChange={(e) => (state.create.form.daerah = e.target.value)}
required required
/> />
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Periode</Text>} label="Periode"
placeholder="Masukkan periode" placeholder="Masukkan periode"
value={state.create.form.periode} defaultValue={state.create.form.periode}
onChange={(e) => (state.create.form.periode = e.target.value)} onChange={(e) => (state.create.form.periode = e.target.value)}
required required
/> />

View File

@@ -97,16 +97,16 @@ function Page() {
{/* Biodata & Info */} {/* Biodata & Info */}
<Box mt="lg"> <Box mt="lg">
<Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mb={4}>Biodata</Text> <Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mb={4}>Biodata</Text>
<Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" dangerouslySetInnerHTML={{ __html: perbekel.biodata }} /> <Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: perbekel.biodata }} />
<Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mt="md" mb={4}>Pengalaman</Text> <Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mt="md" mb={4}>Pengalaman</Text>
<Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" dangerouslySetInnerHTML={{ __html: perbekel.pengalaman }} /> <Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: perbekel.pengalaman }} />
<Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mt="md" mb={4}>Pengalaman Organisasi</Text> <Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mt="md" mb={4}>Pengalaman Organisasi</Text>
<Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" dangerouslySetInnerHTML={{ __html: perbekel.pengalamanOrganisasi }} /> <Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: perbekel.pengalamanOrganisasi }} />
<Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mt="md" mb={4}>Program Kerja Unggulan</Text> <Text fz={{ base: "1.125rem", md: "1.5rem" }} fw="bold" mt="md" mb={4}>Program Kerja Unggulan</Text>
<Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" dangerouslySetInnerHTML={{ __html: perbekel.programUnggulan }} /> <Text fz={{ base: "1rem", md: "1.4rem" }} ta="justify" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: perbekel.programUnggulan }} />
</Box> </Box>
</Paper> </Paper>
</Stack> </Stack>

View File

@@ -111,7 +111,7 @@ function EditAPBDesa() {
{/* Tahun */} {/* Tahun */}
<TextInput <TextInput
type="number" type="number"
value={formData.tahun} defaultValue={formData.tahun}
onChange={(e) => onChange={(e) =>
setFormData({ ...formData, tahun: e.target.value }) setFormData({ ...formData, tahun: e.target.value })
} }

View File

@@ -65,7 +65,7 @@ function CreateAPBDesa() {
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
type="number" type="number"
value={apbDesaState.create.form.tahun} defaultValue={apbDesaState.create.form.tahun}
onChange={(val) => { onChange={(val) => {
apbDesaState.create.form.tahun = Number(val.target.value); apbDesaState.create.form.tahun = Number(val.target.value);
}} }}

View File

@@ -112,7 +112,7 @@ function EditBelanja() {
<TextInput <TextInput
label="Nama Jenis Belanja" label="Nama Jenis Belanja"
placeholder="Masukkan nama jenis belanja" placeholder="Masukkan nama jenis belanja"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -120,7 +120,7 @@ function EditBelanja() {
<TextInput <TextInput
label="Nilai" label="Nilai"
placeholder="Masukkan nilai" placeholder="Masukkan nilai"
value={formatRupiah(formData.value)} defaultValue={formatRupiah(formData.value)}
onChange={(e) => { onChange={(e) => {
const raw = e.currentTarget.value; const raw = e.currentTarget.value;
const cleanValue = unformatRupiah(raw); const cleanValue = unformatRupiah(raw);

View File

@@ -85,7 +85,7 @@ function CreateBelanja() {
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Jenis Belanja</Text>} label={<Text fw="bold" fz="sm">Nama Jenis Belanja</Text>}
placeholder="Masukkan nama jenis belanja" placeholder="Masukkan nama jenis belanja"
value={belanjaState.create.form.name} defaultValue={belanjaState.create.form.name}
onChange={(e) => (belanjaState.create.form.name = e.target.value)} onChange={(e) => (belanjaState.create.form.name = e.target.value)}
required required
/> />
@@ -94,7 +94,7 @@ function CreateBelanja() {
type="text" type="text"
label={<Text fw="bold" fz="sm">Nilai</Text>} label={<Text fw="bold" fz="sm">Nilai</Text>}
placeholder="Masukkan nilai belanja" placeholder="Masukkan nilai belanja"
value={formatRupiah(belanjaState.create.form.value)} defaultValue={formatRupiah(belanjaState.create.form.value)}
onChange={(e) => { onChange={(e) => {
const raw = e.currentTarget.value; const raw = e.currentTarget.value;
belanjaState.create.form.value = unformatRupiah(raw); belanjaState.create.form.value = unformatRupiah(raw);

View File

@@ -112,7 +112,7 @@ function EditPembiayaan() {
<TextInput <TextInput
label="Nama Jenis Pembiayaan" label="Nama Jenis Pembiayaan"
placeholder="Masukkan nama jenis pembiayaan" placeholder="Masukkan nama jenis pembiayaan"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -120,7 +120,7 @@ function EditPembiayaan() {
<TextInput <TextInput
label="Nilai" label="Nilai"
placeholder="Masukkan nilai" placeholder="Masukkan nilai"
value={formatRupiah(formData.value)} defaultValue={formatRupiah(formData.value)}
onChange={(e) => { onChange={(e) => {
const raw = e.currentTarget.value; const raw = e.currentTarget.value;
const cleanValue = unformatRupiah(raw); const cleanValue = unformatRupiah(raw);

View File

@@ -85,7 +85,7 @@ function CreatePembiayaan() {
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Jenis Pembiayaan</Text>} label={<Text fw="bold" fz="sm">Nama Jenis Pembiayaan</Text>}
placeholder="Masukkan nama jenis pembiayaan" placeholder="Masukkan nama jenis pembiayaan"
value={pembiayaanState.create.form.name} defaultValue={pembiayaanState.create.form.name}
onChange={(e) => { onChange={(e) => {
pembiayaanState.create.form.name = e.currentTarget.value; pembiayaanState.create.form.name = e.currentTarget.value;
}} }}
@@ -96,7 +96,7 @@ function CreatePembiayaan() {
type="text" type="text"
label={<Text fw="bold" fz="sm">Nilai</Text>} label={<Text fw="bold" fz="sm">Nilai</Text>}
placeholder="Masukkan nilai" placeholder="Masukkan nilai"
value={formatRupiah(pembiayaanState.create.form.value)} defaultValue={formatRupiah(pembiayaanState.create.form.value)}
onChange={(e) => { onChange={(e) => {
const raw = e.currentTarget.value; const raw = e.currentTarget.value;
pembiayaanState.create.form.value = unformatRupiah(raw); pembiayaanState.create.form.value = unformatRupiah(raw);

View File

@@ -110,7 +110,7 @@ function EditPendapatan() {
<TextInput <TextInput
label="Nama Jenis Pendapatan" label="Nama Jenis Pendapatan"
placeholder="Masukkan nama jenis pendapatan" placeholder="Masukkan nama jenis pendapatan"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -118,7 +118,7 @@ function EditPendapatan() {
<TextInput <TextInput
label="Nilai" label="Nilai"
placeholder="Masukkan nilai" placeholder="Masukkan nilai"
value={formatRupiah(formData.value)} defaultValue={formatRupiah(formData.value)}
onChange={(e) => { onChange={(e) => {
const raw = e.currentTarget.value; const raw = e.currentTarget.value;
const cleanValue = unformatRupiah(raw); const cleanValue = unformatRupiah(raw);

View File

@@ -7,10 +7,9 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Text,
TextInput, TextInput,
Title, Title,
Tooltip, Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -76,32 +75,24 @@ function CreatePendapatan() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
value={pendapatanState.create.form.name} defaultValue={pendapatanState.create.form.name}
onChange={(val) => { onChange={(val) => {
pendapatanState.create.form.name = val.target.value; pendapatanState.create.form.name = val.target.value;
}} }}
label={ label="Nama Jenis Pendapatan"
<Text fw="bold" fz="sm">
Nama Jenis Pendapatan
</Text>
}
placeholder="Masukkan nama jenis pendapatan" placeholder="Masukkan nama jenis pendapatan"
required required
/> />
<TextInput <TextInput
type="text" type="text"
value={formatRupiah(pendapatanState.create.form.value)} defaultValue={formatRupiah(pendapatanState.create.form.value)}
onChange={(val) => { onChange={(val) => {
const raw = val.currentTarget.value; const raw = val.currentTarget.value;
const cleanValue = unformatRupiah(raw); const cleanValue = unformatRupiah(raw);
pendapatanState.create.form.value = cleanValue; pendapatanState.create.form.value = cleanValue;
}} }}
label={ label="Nilai"
<Text fw="bold" fz="sm">
Nilai
</Text>
}
placeholder="Masukkan nilai" placeholder="Masukkan nilai"
required required
/> />

View File

@@ -91,7 +91,7 @@ function EditDemografiPekerjaan() {
<TextInput <TextInput
label="Pekerjaan" label="Pekerjaan"
placeholder="Masukkan jenis pekerjaan" placeholder="Masukkan jenis pekerjaan"
value={stateDemografi.update.form.pekerjaan} defaultValue={stateDemografi.update.form.pekerjaan}
onChange={(e) => onChange={(e) =>
(stateDemografi.update.form.pekerjaan = e.currentTarget.value) (stateDemografi.update.form.pekerjaan = e.currentTarget.value)
} }
@@ -102,7 +102,7 @@ function EditDemografiPekerjaan() {
label="Jumlah Pekerja Laki-laki" label="Jumlah Pekerja Laki-laki"
type="number" type="number"
placeholder="Masukkan jumlah pekerja laki-laki" placeholder="Masukkan jumlah pekerja laki-laki"
value={stateDemografi.update.form.lakiLaki} defaultValue={stateDemografi.update.form.lakiLaki}
onChange={(e) => onChange={(e) =>
(stateDemografi.update.form.lakiLaki = Number( (stateDemografi.update.form.lakiLaki = Number(
e.currentTarget.value e.currentTarget.value
@@ -115,7 +115,7 @@ function EditDemografiPekerjaan() {
label="Jumlah Pekerja Perempuan" label="Jumlah Pekerja Perempuan"
type="number" type="number"
placeholder="Masukkan jumlah pekerja perempuan" placeholder="Masukkan jumlah pekerja perempuan"
value={stateDemografi.update.form.perempuan} defaultValue={stateDemografi.update.form.perempuan}
onChange={(e) => onChange={(e) =>
(stateDemografi.update.form.perempuan = Number( (stateDemografi.update.form.perempuan = Number(
e.currentTarget.value e.currentTarget.value

View File

@@ -77,7 +77,7 @@ function CreateDemografiPekerjaan() {
<TextInput <TextInput
label="Pekerjaan" label="Pekerjaan"
type="text" type="text"
value={stateDemografi.create.form.pekerjaan} defaultValue={stateDemografi.create.form.pekerjaan}
placeholder="Masukkan pekerjaan" placeholder="Masukkan pekerjaan"
onChange={(val) => { onChange={(val) => {
stateDemografi.create.form.pekerjaan = val.currentTarget.value; stateDemografi.create.form.pekerjaan = val.currentTarget.value;
@@ -87,7 +87,7 @@ function CreateDemografiPekerjaan() {
<TextInput <TextInput
label="Jumlah Pekerja Laki-Laki" label="Jumlah Pekerja Laki-Laki"
type="number" type="number"
value={stateDemografi.create.form.lakiLaki} defaultValue={stateDemografi.create.form.lakiLaki}
placeholder="Masukkan jumlah pekerja laki-laki" placeholder="Masukkan jumlah pekerja laki-laki"
onChange={(val) => { onChange={(val) => {
stateDemografi.create.form.lakiLaki = Number(val.currentTarget.value); stateDemografi.create.form.lakiLaki = Number(val.currentTarget.value);
@@ -97,7 +97,7 @@ function CreateDemografiPekerjaan() {
<TextInput <TextInput
label="Jumlah Pekerja Perempuan" label="Jumlah Pekerja Perempuan"
type="number" type="number"
value={stateDemografi.create.form.perempuan} defaultValue={stateDemografi.create.form.perempuan}
placeholder="Masukkan jumlah pekerja perempuan" placeholder="Masukkan jumlah pekerja perempuan"
onChange={(val) => { onChange={(val) => {
stateDemografi.create.form.perempuan = Number(val.currentTarget.value); stateDemografi.create.form.perempuan = Number(val.currentTarget.value);

View File

@@ -78,7 +78,7 @@ function EditJumlahPendudukMiskin() {
placeholder="Masukkan tahun" placeholder="Masukkan tahun"
type="number" type="number"
required required
value={stateJPM.update.form.year} defaultValue={stateJPM.update.form.year}
onChange={(val) => { onChange={(val) => {
stateJPM.update.form.year = Number(val.currentTarget.value); stateJPM.update.form.year = Number(val.currentTarget.value);
}} }}
@@ -89,7 +89,7 @@ function EditJumlahPendudukMiskin() {
placeholder="Masukkan jumlah penduduk miskin" placeholder="Masukkan jumlah penduduk miskin"
type="number" type="number"
required required
value={stateJPM.update.form.totalPoorPopulation} defaultValue={stateJPM.update.form.totalPoorPopulation}
onChange={(val) => { onChange={(val) => {
stateJPM.update.form.totalPoorPopulation = Number(val.currentTarget.value); stateJPM.update.form.totalPoorPopulation = Number(val.currentTarget.value);
}} }}

View File

@@ -61,7 +61,7 @@ export default function CreateJumlahPendudukMiskin() {
<TextInput <TextInput
label="Tahun" label="Tahun"
type="number" type="number"
value={stateJPM.create.form.year || ''} defaultValue={stateJPM.create.form.year || ''}
placeholder="Masukkan tahun" placeholder="Masukkan tahun"
onChange={(e) => { onChange={(e) => {
const value = e.currentTarget.value; const value = e.currentTarget.value;
@@ -73,7 +73,7 @@ export default function CreateJumlahPendudukMiskin() {
<TextInput <TextInput
label="Jumlah Penduduk Miskin" label="Jumlah Penduduk Miskin"
type="number" type="number"
value={stateJPM.create.form.totalPoorPopulation} defaultValue={stateJPM.create.form.totalPoorPopulation}
placeholder="Masukkan jumlah penduduk miskin" placeholder="Masukkan jumlah penduduk miskin"
onChange={(e) => { onChange={(e) => {
stateJPM.create.form.totalPoorPopulation = Number(e.currentTarget.value); stateJPM.create.form.totalPoorPopulation = Number(e.currentTarget.value);

View File

@@ -63,35 +63,35 @@ function EditGrafikBerdasarkanPendidikan() {
label="SD" label="SD"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.SD} defaultValue={stategrafik.update.form.SD}
onChange={(val) => (stategrafik.update.form.SD = val.currentTarget.value)} onChange={(val) => (stategrafik.update.form.SD = val.currentTarget.value)}
/> />
<TextInput <TextInput
label="SMP" label="SMP"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.SMP} defaultValue={stategrafik.update.form.SMP}
onChange={(val) => (stategrafik.update.form.SMP = val.currentTarget.value)} onChange={(val) => (stategrafik.update.form.SMP = val.currentTarget.value)}
/> />
<TextInput <TextInput
label="SMA" label="SMA"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.SMA} defaultValue={stategrafik.update.form.SMA}
onChange={(val) => (stategrafik.update.form.SMA = val.currentTarget.value)} onChange={(val) => (stategrafik.update.form.SMA = val.currentTarget.value)}
/> />
<TextInput <TextInput
label="D3" label="D3"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.D3} defaultValue={stategrafik.update.form.D3}
onChange={(val) => (stategrafik.update.form.D3 = val.currentTarget.value)} onChange={(val) => (stategrafik.update.form.D3 = val.currentTarget.value)}
/> />
<TextInput <TextInput
label="S1" label="S1"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.S1} defaultValue={stategrafik.update.form.S1}
onChange={(val) => (stategrafik.update.form.S1 = val.currentTarget.value)} onChange={(val) => (stategrafik.update.form.S1 = val.currentTarget.value)}
/> />

View File

@@ -67,7 +67,7 @@ function CreateGrafikBerdasarkanPendidikan() {
label="SD" label="SD"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.SD} defaultValue={stategrafik.create.form.SD}
onChange={(val) => (stategrafik.create.form.SD = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.SD = val.currentTarget.value)}
required required
/> />
@@ -75,7 +75,7 @@ function CreateGrafikBerdasarkanPendidikan() {
label="SMP" label="SMP"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.SMP} defaultValue={stategrafik.create.form.SMP}
onChange={(val) => (stategrafik.create.form.SMP = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.SMP = val.currentTarget.value)}
required required
/> />
@@ -83,7 +83,7 @@ function CreateGrafikBerdasarkanPendidikan() {
label="SMA" label="SMA"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.SMA} defaultValue={stategrafik.create.form.SMA}
onChange={(val) => (stategrafik.create.form.SMA = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.SMA = val.currentTarget.value)}
required required
/> />
@@ -91,7 +91,7 @@ function CreateGrafikBerdasarkanPendidikan() {
label="D3" label="D3"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.D3} defaultValue={stategrafik.create.form.D3}
onChange={(val) => (stategrafik.create.form.D3 = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.D3 = val.currentTarget.value)}
required required
/> />
@@ -99,7 +99,7 @@ function CreateGrafikBerdasarkanPendidikan() {
label="S1" label="S1"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.S1} defaultValue={stategrafik.create.form.S1}
onChange={(val) => (stategrafik.create.form.S1 = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.S1 = val.currentTarget.value)}
required required
/> />

View File

@@ -71,7 +71,7 @@ function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 18 - 25" label="Usia 18 - 25"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.usia18_25} defaultValue={stategrafik.update.form.usia18_25}
onChange={(val) => { onChange={(val) => {
stategrafik.update.form.usia18_25 = val.currentTarget.value; stategrafik.update.form.usia18_25 = val.currentTarget.value;
}} }}
@@ -81,7 +81,7 @@ function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 26 - 35" label="Usia 26 - 35"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.usia26_35} defaultValue={stategrafik.update.form.usia26_35}
onChange={(val) => { onChange={(val) => {
stategrafik.update.form.usia26_35 = val.currentTarget.value; stategrafik.update.form.usia26_35 = val.currentTarget.value;
}} }}
@@ -91,7 +91,7 @@ function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 36 - 45" label="Usia 36 - 45"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.usia36_45} defaultValue={stategrafik.update.form.usia36_45}
onChange={(val) => { onChange={(val) => {
stategrafik.update.form.usia36_45 = val.currentTarget.value; stategrafik.update.form.usia36_45 = val.currentTarget.value;
}} }}
@@ -101,7 +101,7 @@ function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 46 +" label="Usia 46 +"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.update.form.usia46_keatas} defaultValue={stategrafik.update.form.usia46_keatas}
onChange={(val) => { onChange={(val) => {
stategrafik.update.form.usia46_keatas = val.currentTarget.value; stategrafik.update.form.usia46_keatas = val.currentTarget.value;
}} }}

View File

@@ -66,7 +66,7 @@ function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 18 - 25" label="Usia 18 - 25"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.usia18_25} defaultValue={stategrafik.create.form.usia18_25}
onChange={(val) => (stategrafik.create.form.usia18_25 = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.usia18_25 = val.currentTarget.value)}
required required
/> />
@@ -74,7 +74,7 @@ function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 26 - 35" label="Usia 26 - 35"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.usia26_35} defaultValue={stategrafik.create.form.usia26_35}
onChange={(val) => (stategrafik.create.form.usia26_35 = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.usia26_35 = val.currentTarget.value)}
required required
/> />
@@ -82,7 +82,7 @@ function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 36 - 45" label="Usia 36 - 45"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.usia36_45} defaultValue={stategrafik.create.form.usia36_45}
onChange={(val) => (stategrafik.create.form.usia36_45 = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.usia36_45 = val.currentTarget.value)}
required required
/> />
@@ -90,7 +90,7 @@ function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() {
label="Usia 46 +" label="Usia 46 +"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stategrafik.create.form.usia46_keatas} defaultValue={stategrafik.create.form.usia46_keatas}
onChange={(val) => (stategrafik.create.form.usia46_keatas = val.currentTarget.value)} onChange={(val) => (stategrafik.create.form.usia46_keatas = val.currentTarget.value)}
required required
/> />

View File

@@ -139,20 +139,23 @@ function EditDetailDataPengangguran() {
/> />
<NumberInput <NumberInput
label="Tahun" label="Tahun"
value={formData.year} defaultValue={formData.year}
onChange={(val) => updateFormData({ year: Number(val) })} onChange={(val) => updateFormData({ year: Number(val) })}
required
/> />
<TextInput <TextInput
label="Pengangguran Terdidik" label="Pengangguran Terdidik"
type="number" type="number"
value={formData.educatedUnemployment} defaultValue={formData.educatedUnemployment}
onChange={(val) => updateFormData({ educatedUnemployment: Number(val.currentTarget.value) || 0 })} onChange={(val) => updateFormData({ educatedUnemployment: Number(val.currentTarget.value) || 0 })}
required
/> />
<TextInput <TextInput
label="Pengangguran Tidak Terdidik" label="Pengangguran Tidak Terdidik"
type="number" type="number"
value={formData.uneducatedUnemployment} defaultValue={formData.uneducatedUnemployment}
onChange={(val) => updateFormData({ uneducatedUnemployment: Number(val.currentTarget.value) || 0 })} onChange={(val) => updateFormData({ uneducatedUnemployment: Number(val.currentTarget.value) || 0 })}
required
/> />
<Text fz="sm" fw={500}>Total Otomatis: {formData.totalUnemployment}</Text> <Text fz="sm" fw={500}>Total Otomatis: {formData.totalUnemployment}</Text>
<Text fz="sm" fw={500}>Perubahan Otomatis: {formData.percentageChange !== null ? `${formData.percentageChange}%` : '-'}</Text> <Text fz="sm" fw={500}>Perubahan Otomatis: {formData.percentageChange !== null ? `${formData.percentageChange}%` : '-'}</Text>

View File

@@ -107,7 +107,7 @@ function EditLowonganKerja() {
<TextInput <TextInput
label="Posisi" label="Posisi"
placeholder="Masukkan posisi" placeholder="Masukkan posisi"
value={formData.posisi} defaultValue={formData.posisi}
onChange={(e) => setFormData({ ...formData, posisi: e.target.value })} onChange={(e) => setFormData({ ...formData, posisi: e.target.value })}
required required
/> />
@@ -115,7 +115,7 @@ function EditLowonganKerja() {
<TextInput <TextInput
label="Nama Perusahaan" label="Nama Perusahaan"
placeholder="Masukkan nama perusahaan" placeholder="Masukkan nama perusahaan"
value={formData.namaPerusahaan} defaultValue={formData.namaPerusahaan}
onChange={(e) => setFormData({ ...formData, namaPerusahaan: e.target.value })} onChange={(e) => setFormData({ ...formData, namaPerusahaan: e.target.value })}
required required
/> />
@@ -123,7 +123,7 @@ function EditLowonganKerja() {
<TextInput <TextInput
label="Lokasi" label="Lokasi"
placeholder="Masukkan lokasi" placeholder="Masukkan lokasi"
value={formData.lokasi} defaultValue={formData.lokasi}
onChange={(e) => setFormData({ ...formData, lokasi: e.target.value })} onChange={(e) => setFormData({ ...formData, lokasi: e.target.value })}
required required
/> />
@@ -131,7 +131,7 @@ function EditLowonganKerja() {
<TextInput <TextInput
label="Tipe Pekerjaan" label="Tipe Pekerjaan"
placeholder="Masukkan tipe pekerjaan" placeholder="Masukkan tipe pekerjaan"
value={formData.tipePekerjaan} defaultValue={formData.tipePekerjaan}
onChange={(e) => setFormData({ ...formData, tipePekerjaan: e.target.value })} onChange={(e) => setFormData({ ...formData, tipePekerjaan: e.target.value })}
required required
/> />
@@ -139,7 +139,7 @@ function EditLowonganKerja() {
<TextInput <TextInput
label="Gaji (per bulan)" label="Gaji (per bulan)"
placeholder="Masukkan gaji" placeholder="Masukkan gaji"
value={formData.gaji} defaultValue={formData.gaji}
onChange={(e) => setFormData({ ...formData, gaji: e.target.value })} onChange={(e) => setFormData({ ...formData, gaji: e.target.value })}
required required
/> />

View File

@@ -94,12 +94,12 @@ function DetailLowonganKerjaLokal() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data.deskripsi || '-' }} /> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: data.deskripsi || '-' }} />
</Box> </Box>
<Box> <Box>
<Text fz="lg" fw="bold">Kualifikasi</Text> <Text fz="lg" fw="bold">Kualifikasi</Text>
<Text fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data.kualifikasi || '-' }} /> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: data.kualifikasi || '-' }} />
</Box> </Box>
<Group gap="sm" mt="sm"> <Group gap="sm" mt="sm">

View File

@@ -69,7 +69,7 @@ function CreateLowonganKerja() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
value={lowonganState.create.form.posisi} defaultValue={lowonganState.create.form.posisi}
onChange={(val) => onChange={(val) =>
(lowonganState.create.form.posisi = val.target.value) (lowonganState.create.form.posisi = val.target.value)
} }
@@ -78,7 +78,7 @@ function CreateLowonganKerja() {
required required
/> />
<TextInput <TextInput
value={lowonganState.create.form.namaPerusahaan} defaultValue={lowonganState.create.form.namaPerusahaan}
onChange={(val) => onChange={(val) =>
(lowonganState.create.form.namaPerusahaan = val.target.value) (lowonganState.create.form.namaPerusahaan = val.target.value)
} }
@@ -87,7 +87,7 @@ function CreateLowonganKerja() {
required required
/> />
<TextInput <TextInput
value={lowonganState.create.form.lokasi} defaultValue={lowonganState.create.form.lokasi}
onChange={(val) => onChange={(val) =>
(lowonganState.create.form.lokasi = val.target.value) (lowonganState.create.form.lokasi = val.target.value)
} }
@@ -96,7 +96,7 @@ function CreateLowonganKerja() {
required required
/> />
<TextInput <TextInput
value={lowonganState.create.form.tipePekerjaan} defaultValue={lowonganState.create.form.tipePekerjaan}
onChange={(val) => onChange={(val) =>
(lowonganState.create.form.tipePekerjaan = val.target.value) (lowonganState.create.form.tipePekerjaan = val.target.value)
} }
@@ -105,7 +105,7 @@ function CreateLowonganKerja() {
required required
/> />
<TextInput <TextInput
value={lowonganState.create.form.gaji} defaultValue={lowonganState.create.form.gaji}
onChange={(val) => onChange={(val) =>
(lowonganState.create.form.gaji = val.target.value) (lowonganState.create.form.gaji = val.target.value)
} }

View File

@@ -106,7 +106,7 @@ function EditKategoriProduk() {
<TextInput <TextInput
label={<Text fw="bold" fz="sm">Nama Kategori Produk</Text>} label={<Text fw="bold" fz="sm">Nama Kategori Produk</Text>}
placeholder="Masukkan nama kategori produk" placeholder="Masukkan nama kategori produk"
value={formData.nama} defaultValue={formData.nama}
onChange={(e) => setFormData({ ...formData, nama: e.target.value })} onChange={(e) => setFormData({ ...formData, nama: e.target.value })}
required required
/> />

View File

@@ -74,7 +74,7 @@ function CreateKategoriProduk() {
<TextInput <TextInput
label="Nama Kategori Produk" label="Nama Kategori Produk"
placeholder="Masukkan nama kategori produk" placeholder="Masukkan nama kategori produk"
value={statePasar.create.form.nama || ''} defaultValue={statePasar.create.form.nama || ''}
onChange={(e) => (statePasar.create.form.nama = e.target.value)} onChange={(e) => (statePasar.create.form.nama = e.target.value)}
required required
/> />

View File

@@ -173,7 +173,7 @@ function EditPasarDesa() {
<TextInput <TextInput
label="Nama Produk" label="Nama Produk"
placeholder="Masukkan nama produk" placeholder="Masukkan nama produk"
value={formData.nama} defaultValue={formData.nama}
onChange={(e) => setFormData({ ...formData, nama: e.target.value })} onChange={(e) => setFormData({ ...formData, nama: e.target.value })}
required required
/> />
@@ -182,7 +182,7 @@ function EditPasarDesa() {
type="number" type="number"
label="Harga Produk" label="Harga Produk"
placeholder="Masukkan harga produk" placeholder="Masukkan harga produk"
value={formData.harga} defaultValue={formData.harga}
onChange={(e) => setFormData({ ...formData, harga: Number(e.target.value) })} onChange={(e) => setFormData({ ...formData, harga: Number(e.target.value) })}
required required
/> />
@@ -194,7 +194,7 @@ function EditPasarDesa() {
step={0.1} step={0.1}
label="Rating Produk" label="Rating Produk"
placeholder="Masukkan rating produk (0-5)" placeholder="Masukkan rating produk (0-5)"
value={formData.rating} defaultValue={formData.rating}
onChange={(e) => setFormData({ ...formData, rating: Number(e.target.value) })} onChange={(e) => setFormData({ ...formData, rating: Number(e.target.value) })}
required required
/> />
@@ -202,7 +202,7 @@ function EditPasarDesa() {
<TextInput <TextInput
label="Alamat Usaha" label="Alamat Usaha"
placeholder="Masukkan alamat usaha" placeholder="Masukkan alamat usaha"
value={formData.alamatUsaha} defaultValue={formData.alamatUsaha}
onChange={(e) => setFormData({ ...formData, alamatUsaha: e.target.value })} onChange={(e) => setFormData({ ...formData, alamatUsaha: e.target.value })}
required required
/> />

View File

@@ -144,7 +144,7 @@ export default function CreatePasarDesa() {
<TextInput <TextInput
label="Nama Produk" label="Nama Produk"
placeholder="Masukkan nama produk" placeholder="Masukkan nama produk"
value={statePasar.pasarDesa.create.form.nama} defaultValue={statePasar.pasarDesa.create.form.nama}
onChange={(e) => (statePasar.pasarDesa.create.form.nama = e.target.value)} onChange={(e) => (statePasar.pasarDesa.create.form.nama = e.target.value)}
required required
/> />
@@ -154,7 +154,7 @@ export default function CreatePasarDesa() {
type="number" type="number"
label="Harga Produk" label="Harga Produk"
placeholder="Masukkan harga produk" placeholder="Masukkan harga produk"
value={statePasar.pasarDesa.create.form.harga} defaultValue={statePasar.pasarDesa.create.form.harga}
onChange={(e) => (statePasar.pasarDesa.create.form.harga = Number(e.target.value))} onChange={(e) => (statePasar.pasarDesa.create.form.harga = Number(e.target.value))}
required required
/> />
@@ -167,7 +167,7 @@ export default function CreatePasarDesa() {
step={0.1} step={0.1}
label="Rating Produk (05)" label="Rating Produk (05)"
placeholder="Masukkan rating produk" placeholder="Masukkan rating produk"
value={statePasar.pasarDesa.create.form.rating} defaultValue={statePasar.pasarDesa.create.form.rating}
onChange={(e) => { onChange={(e) => {
const value = Number(e.target.value); const value = Number(e.target.value);
if (value >= 0 && value <= 5) { if (value >= 0 && value <= 5) {
@@ -180,7 +180,7 @@ export default function CreatePasarDesa() {
<TextInput <TextInput
label="Alamat Usaha" label="Alamat Usaha"
placeholder="Masukkan alamat usaha" placeholder="Masukkan alamat usaha"
value={statePasar.pasarDesa.create.form.alamatUsaha} defaultValue={statePasar.pasarDesa.create.form.alamatUsaha}
onChange={(e) => (statePasar.pasarDesa.create.form.alamatUsaha = e.target.value)} onChange={(e) => (statePasar.pasarDesa.create.form.alamatUsaha = e.target.value)}
/> />

View File

@@ -92,7 +92,7 @@ function EditProgramKemiskinan() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
value={stateProgram.update.form.nama} defaultValue={stateProgram.update.form.nama}
onChange={(e) => { onChange={(e) => {
stateProgram.update.form.nama = e.target.value; stateProgram.update.form.nama = e.target.value;
}} }}
@@ -131,7 +131,7 @@ function EditProgramKemiskinan() {
</Text> </Text>
<TextInput <TextInput
type="number" type="number"
value={stateProgram.update.form.statistik.jumlah} defaultValue={stateProgram.update.form.statistik.jumlah}
onChange={(e) => { onChange={(e) => {
stateProgram.update.form.statistik.jumlah = e.target.value; stateProgram.update.form.statistik.jumlah = e.target.value;
}} }}
@@ -142,7 +142,7 @@ function EditProgramKemiskinan() {
<TextInput <TextInput
type="number" type="number"
value={stateProgram.update.form.statistik.tahun} defaultValue={stateProgram.update.form.statistik.tahun}
onChange={(e) => { onChange={(e) => {
stateProgram.update.form.statistik.tahun = e.target.value; stateProgram.update.form.statistik.tahun = e.target.value;
}} }}

View File

@@ -90,6 +90,7 @@ function DetailProgramKemiskinan() {
fz="md" fz="md"
c="dimmed" c="dimmed"
dangerouslySetInnerHTML={{ __html: data.deskripsi || '-' }} dangerouslySetInnerHTML={{ __html: data.deskripsi || '-' }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -93,7 +93,7 @@ function CreateProgramKemiskinan() {
<TextInput <TextInput
label="Judul Program" label="Judul Program"
placeholder="Masukkan judul program" placeholder="Masukkan judul program"
value={programState.create.form.nama} defaultValue={programState.create.form.nama}
onChange={(val) => (programState.create.form.nama = val.target.value)} onChange={(val) => (programState.create.form.nama = val.target.value)}
required required
/> />
@@ -128,7 +128,7 @@ function CreateProgramKemiskinan() {
<Group grow> <Group grow>
<TextInput <TextInput
type="number" type="number"
value={programState.create.form.statistik.jumlah} defaultValue={programState.create.form.statistik.jumlah}
onChange={(val) => onChange={(val) =>
(programState.create.form.statistik.jumlah = val.target.value) (programState.create.form.statistik.jumlah = val.target.value)
} }
@@ -138,7 +138,7 @@ function CreateProgramKemiskinan() {
/> />
<TextInput <TextInput
type="number" type="number"
value={programState.create.form.statistik.tahun} defaultValue={programState.create.form.statistik.tahun}
onChange={(val) => onChange={(val) =>
(programState.create.form.statistik.tahun = val.target.value) (programState.create.form.statistik.tahun = val.target.value)
} }

View File

@@ -89,7 +89,7 @@ function EditSektorUnggulanDesa() {
<TextInput <TextInput
label="Nama Sektor Unggulan" label="Nama Sektor Unggulan"
placeholder="Masukkan nama sektor unggulan" placeholder="Masukkan nama sektor unggulan"
value={stateGrafik.update.form.name} defaultValue={stateGrafik.update.form.name}
onChange={(val) => { onChange={(val) => {
stateGrafik.update.form.name = val.currentTarget.value; stateGrafik.update.form.name = val.currentTarget.value;
}} }}
@@ -110,7 +110,7 @@ function EditSektorUnggulanDesa() {
label="Jumlah" label="Jumlah"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stateGrafik.update.form.value} defaultValue={stateGrafik.update.form.value}
onChange={(val) => { onChange={(val) => {
stateGrafik.update.form.value = Number(val.currentTarget.value); stateGrafik.update.form.value = Number(val.currentTarget.value);
}} }}

View File

@@ -82,7 +82,7 @@ function DetailSektorUnggulanDesa() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text ta={"justify"} fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data.description || '-' }} /> <Text ta={"justify"} fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data.description || '-' }} style={{ wordBreak: "break-word", whiteSpace: "normal" }} />
</Box> </Box>
<Box> <Box>

View File

@@ -78,7 +78,7 @@ function CreateSektorUnggulanDesa() {
<TextInput <TextInput
label="Nama Sektor Unggulan" label="Nama Sektor Unggulan"
placeholder="Masukkan nama sektor unggulan" placeholder="Masukkan nama sektor unggulan"
value={stateGrafik.create.form.name} defaultValue={stateGrafik.create.form.name}
onChange={(e) => { onChange={(e) => {
stateGrafik.create.form.name = e.currentTarget.value; stateGrafik.create.form.name = e.currentTarget.value;
}} }}
@@ -101,7 +101,7 @@ function CreateSektorUnggulanDesa() {
label="Jumlah" label="Jumlah"
type="number" type="number"
placeholder="Masukkan jumlah" placeholder="Masukkan jumlah"
value={stateGrafik.create.form.value} defaultValue={stateGrafik.create.form.value}
onChange={(e) => { onChange={(e) => {
stateGrafik.create.form.value = Number(e.currentTarget.value); stateGrafik.create.form.value = Number(e.currentTarget.value);
}} }}

View File

@@ -83,7 +83,7 @@ export default function EditHubunganOrganisasi() {
<TextInput <TextInput
label="Tipe" label="Tipe"
placeholder="Contoh: langsung_melapor" placeholder="Contoh: langsung_melapor"
value={form.tipe} defaultValue={form.tipe}
onChange={(e) => setForm({ ...form, tipe: e.currentTarget.value })} onChange={(e) => setForm({ ...form, tipe: e.currentTarget.value })}
/> />
<Button onClick={handleSubmit} color="blue">Simpan</Button> <Button onClick={handleSubmit} color="blue">Simpan</Button>

View File

@@ -67,7 +67,7 @@ export default function CreateHubunganOrganisasi() {
<TextInput <TextInput
label="Tipe" label="Tipe"
placeholder="Contoh: langsung_melapor" placeholder="Contoh: langsung_melapor"
value={form.tipe} defaultValue={form.tipe}
onChange={(e) => setForm({ ...form, tipe: e.currentTarget.value })} onChange={(e) => setForm({ ...form, tipe: e.currentTarget.value })}
/> />
<Button onClick={handleSubmit} color="blue">Simpan</Button> <Button onClick={handleSubmit} color="blue">Simpan</Button>

View File

@@ -151,13 +151,13 @@ export default function EditPegawai() {
<TextInput <TextInput
label="Nama Lengkap" label="Nama Lengkap"
placeholder="Masukkan nama lengkap" placeholder="Masukkan nama lengkap"
value={formData.namaLengkap} defaultValue={formData.namaLengkap}
onChange={(e) => setFormData({ ...formData, namaLengkap: e.target.value })} onChange={(e) => setFormData({ ...formData, namaLengkap: e.target.value })}
/> />
<TextInput <TextInput
label="Gelar Akademik" label="Gelar Akademik"
placeholder="Contoh: S.Kom" placeholder="Contoh: S.Kom"
value={formData.gelarAkademik} defaultValue={formData.gelarAkademik}
onChange={(e) => setFormData({ ...formData, gelarAkademik: e.target.value })} onChange={(e) => setFormData({ ...formData, gelarAkademik: e.target.value })}
/> />
<Box> <Box>
@@ -217,25 +217,25 @@ export default function EditPegawai() {
label="Tanggal Masuk" label="Tanggal Masuk"
type="date" type="date"
placeholder="Contoh: 2022-01-01" placeholder="Contoh: 2022-01-01"
value={formatDateForInput(formData.tanggalMasuk)} defaultValue={formatDateForInput(formData.tanggalMasuk)}
onChange={(e) => setFormData({ ...formData, tanggalMasuk: e.target.value })} onChange={(e) => setFormData({ ...formData, tanggalMasuk: e.target.value })}
/> />
<TextInput <TextInput
label="Email" label="Email"
placeholder="Contoh: email@example.com" placeholder="Contoh: email@example.com"
value={formData.email} defaultValue={formData.email}
onChange={(e) => (formData.email = e.currentTarget.value)} onChange={(e) => (formData.email = e.currentTarget.value)}
/> />
<TextInput <TextInput
label="Telepon" label="Telepon"
placeholder="Contoh: 08123456789" placeholder="Contoh: 08123456789"
value={formData.telepon} defaultValue={formData.telepon}
onChange={(e) => (formData.telepon = e.currentTarget.value)} onChange={(e) => (formData.telepon = e.currentTarget.value)}
/> />
<TextInput <TextInput
label="Alamat" label="Alamat"
placeholder="Contoh: Jl. Contoh No. 1" placeholder="Contoh: Jl. Contoh No. 1"
value={formData.alamat} defaultValue={formData.alamat}
onChange={(e) => (formData.alamat = e.currentTarget.value)} onChange={(e) => (formData.alamat = e.currentTarget.value)}
/> />
<Select <Select

View File

@@ -75,7 +75,7 @@ function DetailPegawai() {
</Box> </Box>
<Box> <Box>
<Text fz={"lg"} fw={"bold"}>Email</Text> <Text fz={"lg"} fw={"bold"}>Email</Text>
<Text fz={"lg"}>{statePegawai.findUnique.data?.email}</Text> <Text fz={"lg"} style={{ wordBreak: "break-word", whiteSpace: "normal" }}>{statePegawai.findUnique.data?.email}</Text>
</Box> </Box>
<Box> <Box>
<Text fz={"lg"} fw={"bold"}>Telepon</Text> <Text fz={"lg"} fw={"bold"}>Telepon</Text>
@@ -83,7 +83,7 @@ function DetailPegawai() {
</Box> </Box>
<Box> <Box>
<Text fz={"lg"} fw={"bold"}>Alamat</Text> <Text fz={"lg"} fw={"bold"}>Alamat</Text>
<Text fz={"lg"}>{statePegawai.findUnique.data?.alamat}</Text> <Text fz={"lg"} style={{ wordBreak: "break-word", whiteSpace: "normal" }}>{statePegawai.findUnique.data?.alamat}</Text>
</Box> </Box>
<Box> <Box>
<Text fz={"lg"} fw={"bold"}>Posisi</Text> <Text fz={"lg"} fw={"bold"}>Posisi</Text>

View File

@@ -84,13 +84,13 @@ function CreatePegawai() {
<TextInput <TextInput
label="Nama Lengkap" label="Nama Lengkap"
placeholder="Masukkan nama lengkap" placeholder="Masukkan nama lengkap"
value={stateOrganisasi.pegawai.create.form.namaLengkap} defaultValue={stateOrganisasi.pegawai.create.form.namaLengkap}
onChange={(e) => (stateOrganisasi.pegawai.create.form.namaLengkap = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.pegawai.create.form.namaLengkap = e.currentTarget.value)}
/> />
<TextInput <TextInput
label="Gelar Akademik" label="Gelar Akademik"
placeholder="Contoh: S.Kom" placeholder="Contoh: S.Kom"
value={stateOrganisasi.pegawai.create.form.gelarAkademik} defaultValue={stateOrganisasi.pegawai.create.form.gelarAkademik}
onChange={(e) => (stateOrganisasi.pegawai.create.form.gelarAkademik = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.pegawai.create.form.gelarAkademik = e.currentTarget.value)}
/> />
<Box> <Box>
@@ -150,25 +150,25 @@ function CreatePegawai() {
label="Tanggal Masuk" label="Tanggal Masuk"
type="date" type="date"
placeholder="Contoh: 2022-01-01" placeholder="Contoh: 2022-01-01"
value={stateOrganisasi.pegawai.create.form.tanggalMasuk} defaultValue={stateOrganisasi.pegawai.create.form.tanggalMasuk}
onChange={(e) => (stateOrganisasi.pegawai.create.form.tanggalMasuk = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.pegawai.create.form.tanggalMasuk = e.currentTarget.value)}
/> />
<TextInput <TextInput
label="Email" label="Email"
placeholder="Contoh: email@example.com" placeholder="Contoh: email@example.com"
value={stateOrganisasi.pegawai.create.form.email} defaultValue={stateOrganisasi.pegawai.create.form.email}
onChange={(e) => (stateOrganisasi.pegawai.create.form.email = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.pegawai.create.form.email = e.currentTarget.value)}
/> />
<TextInput <TextInput
label="Telepon" label="Telepon"
placeholder="Contoh: 08123456789" placeholder="Contoh: 08123456789"
value={stateOrganisasi.pegawai.create.form.telepon} defaultValue={stateOrganisasi.pegawai.create.form.telepon}
onChange={(e) => (stateOrganisasi.pegawai.create.form.telepon = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.pegawai.create.form.telepon = e.currentTarget.value)}
/> />
<TextInput <TextInput
label="Alamat" label="Alamat"
placeholder="Contoh: Jl. Contoh No. 1" placeholder="Contoh: Jl. Contoh No. 1"
value={stateOrganisasi.pegawai.create.form.alamat} defaultValue={stateOrganisasi.pegawai.create.form.alamat}
onChange={(e) => (stateOrganisasi.pegawai.create.form.alamat = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.pegawai.create.form.alamat = e.currentTarget.value)}
/> />
<Select <Select
@@ -178,7 +178,7 @@ function CreatePegawai() {
value: p.id, value: p.id,
label: p.nama label: p.nama
})) || []} })) || []}
value={stateOrganisasi.pegawai.create.form.posisiId} defaultValue={stateOrganisasi.pegawai.create.form.posisiId}
onChange={(value) => { onChange={(value) => {
if (value) stateOrganisasi.pegawai.create.form.posisiId = value; if (value) stateOrganisasi.pegawai.create.form.posisiId = value;
}} }}

View File

@@ -114,7 +114,7 @@ function EditPosisiOrganisasi() {
> >
<Stack gap="md"> <Stack gap="md">
<TextInput <TextInput
value={formData.nama} defaultValue={formData.nama}
onChange={(e) => onChange={(e) =>
setFormData({ ...formData, nama: e.target.value }) setFormData({ ...formData, nama: e.target.value })
} }
@@ -137,7 +137,7 @@ function EditPosisiOrganisasi() {
<TextInput <TextInput
type="number" type="number"
value={formData.hierarki} defaultValue={formData.hierarki}
onChange={(e) => onChange={(e) =>
setFormData({ setFormData({
...formData, ...formData,

View File

@@ -75,7 +75,7 @@ function CreatePosisiOrganisasi() {
<TextInput <TextInput
label="Nama Posisi" label="Nama Posisi"
placeholder="Contoh: Kepala Desa" placeholder="Contoh: Kepala Desa"
value={stateOrganisasi.create.form.nama} defaultValue={stateOrganisasi.create.form.nama}
onChange={(e) => (stateOrganisasi.create.form.nama = e.currentTarget.value)} onChange={(e) => (stateOrganisasi.create.form.nama = e.currentTarget.value)}
required required
/> />
@@ -94,7 +94,7 @@ function CreatePosisiOrganisasi() {
label="Hierarki" label="Hierarki"
type="number" type="number"
placeholder="Contoh: 1" placeholder="Contoh: 1"
value={stateOrganisasi.create.form.hierarki} defaultValue={stateOrganisasi.create.form.hierarki}
onChange={(e) => { onChange={(e) => {
const value = parseInt(e.currentTarget.value, 10); const value = parseInt(e.currentTarget.value, 10);
if (!isNaN(value)) { if (!isNaN(value)) {

View File

@@ -94,7 +94,7 @@ function DetailAjukanIdeInofativDesa() {
<Box> <Box>
<Text fz="lg" fw="bold">Alamat</Text> <Text fz="lg" fw="bold">Alamat</Text>
<Text fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data?.alamat || '-' }} /> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: data?.alamat || '-' }} />
</Box> </Box>
<Box> <Box>
@@ -104,12 +104,12 @@ function DetailAjukanIdeInofativDesa() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} /> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} />
</Box> </Box>
<Box> <Box>
<Text fz="lg" fw="bold">Masalah</Text> <Text fz="lg" fw="bold">Masalah</Text>
<Text fz="md" c="dimmed">{data?.masalah || '-'}</Text> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }}>{data?.masalah || '-'}</Text>
</Box> </Box>
<Box> <Box>

View File

@@ -91,7 +91,7 @@ function EditPenghargaan() {
<Stack gap={"xs"}> <Stack gap={"xs"}>
<Title order={3}>Edit Desa Digital Smart Village</Title> <Title order={3}>Edit Desa Digital Smart Village</Title>
<TextInput <TextInput
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
label={<Text fz={"sm"} fw={"bold"}>Judul</Text>} label={<Text fz={"sm"} fw={"bold"}>Judul</Text>}
placeholder="masukkan judul" placeholder="masukkan judul"

View File

@@ -56,7 +56,7 @@ function DetailDesaDigital() {
</Box> </Box>
<Box> <Box>
<Text fw={"bold"} fz={"lg"}>Deskripsi</Text> <Text fw={"bold"} fz={"lg"}>Deskripsi</Text>
<Text fz={"lg"} dangerouslySetInnerHTML={{ __html: stateDesaDigital.findUnique.data?.deskripsi }} /> <Text fz={"lg"} style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: stateDesaDigital.findUnique.data?.deskripsi }} />
</Box> </Box>
<Box> <Box>
<Text fw={"bold"} fz={"lg"}>Gambar</Text> <Text fw={"bold"} fz={"lg"}>Gambar</Text>

View File

@@ -98,7 +98,7 @@ function CreateDesaDigital() {
<TextInput <TextInput
label="Nama Desa Digital Smart Village" label="Nama Desa Digital Smart Village"
placeholder="Masukkan nama desa digital smart village" placeholder="Masukkan nama desa digital smart village"
value={stateDesaDigital.create.form.name} defaultValue={stateDesaDigital.create.form.name}
onChange={(e) => (stateDesaDigital.create.form.name = e.target.value)} onChange={(e) => (stateDesaDigital.create.form.name = e.target.value)}
required required
/> />

View File

@@ -119,7 +119,7 @@ function EditInfoTeknologiTepatGuna() {
<TextInput <TextInput
label="Judul" label="Judul"
placeholder="Masukkan judul info teknologi tepat guna" placeholder="Masukkan judul info teknologi tepat guna"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />

View File

@@ -78,6 +78,7 @@ function DetailInfoTeknologiTepatGuna() {
fz="md" fz="md"
c="dimmed" c="dimmed"
dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }}
style={{ wordBreak: "break-word", whiteSpace: "normal" }}
/> />
</Box> </Box>

View File

@@ -94,7 +94,7 @@ function CreateInfoTeknologiTepatGuna() {
<Stack gap="md"> <Stack gap="md">
{/* Nama */} {/* Nama */}
<TextInput <TextInput
value={stateInfoTekno.create.form.name} defaultValue={stateInfoTekno.create.form.name}
onChange={(val) => { onChange={(val) => {
stateInfoTekno.create.form.name = val.target.value; stateInfoTekno.create.form.name = val.target.value;
}} }}

View File

@@ -104,7 +104,7 @@ function EditKolaborasiInovasi() {
<TextInput <TextInput
label="Nama Kolaborasi" label="Nama Kolaborasi"
placeholder="Masukkan nama kolaborasi" placeholder="Masukkan nama kolaborasi"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />
@@ -112,7 +112,7 @@ function EditKolaborasiInovasi() {
<TextInput <TextInput
label="Deskripsi Singkat" label="Deskripsi Singkat"
placeholder="Masukkan deskripsi singkat" placeholder="Masukkan deskripsi singkat"
value={formData.slug} defaultValue={formData.slug}
onChange={(e) => setFormData({ ...formData, slug: e.target.value })} onChange={(e) => setFormData({ ...formData, slug: e.target.value })}
required required
/> />
@@ -120,7 +120,7 @@ function EditKolaborasiInovasi() {
<TextInput <TextInput
label="Tahun" label="Tahun"
placeholder="Masukkan tahun" placeholder="Masukkan tahun"
value={formData.tahun} defaultValue={formData.tahun}
onChange={(e) => setFormData({ ...formData, tahun: e.target.value })} onChange={(e) => setFormData({ ...formData, tahun: e.target.value })}
required required
/> />
@@ -128,7 +128,7 @@ function EditKolaborasiInovasi() {
<TextInput <TextInput
label="Kolaborator" label="Kolaborator"
placeholder="Masukkan nama kolaborator" placeholder="Masukkan nama kolaborator"
value={formData.kolaborator} defaultValue={formData.kolaborator}
onChange={(e) => setFormData({ ...formData, kolaborator: e.target.value })} onChange={(e) => setFormData({ ...formData, kolaborator: e.target.value })}
required required
/> />

View File

@@ -81,12 +81,12 @@ function DetailKolaborasiInovasi() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi Singkat</Text> <Text fz="lg" fw="bold">Deskripsi Singkat</Text>
<Text fz="md" c="dimmed">{data?.slug || '-'}</Text> <Text fz="md" style={{ wordBreak: "break-word", whiteSpace: "normal" }} c="dimmed">{data?.slug || '-'}</Text>
</Box> </Box>
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text fz="md" c="dimmed" dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} /> <Text fz="md" style={{ wordBreak: "break-word", whiteSpace: "normal" }} c="dimmed" dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} />
</Box> </Box>
<Box> <Box>

View File

@@ -77,7 +77,7 @@ function CreateProgramKreatifDesa() {
<TextInput <TextInput
label={<Text fz="sm" fw="bold">Nama Kolaborasi Inovasi</Text>} label={<Text fz="sm" fw="bold">Nama Kolaborasi Inovasi</Text>}
placeholder="Masukkan nama kolaborasi inovasi" placeholder="Masukkan nama kolaborasi inovasi"
value={stateCreate.create.form.name || ''} defaultValue={stateCreate.create.form.name || ''}
onChange={(val) => stateCreate.create.form.name = val.target.value} onChange={(val) => stateCreate.create.form.name = val.target.value}
required required
/> />
@@ -106,7 +106,7 @@ function CreateProgramKreatifDesa() {
<TextInput <TextInput
label={<Text fz="sm" fw="bold">Kolaborator</Text>} label={<Text fz="sm" fw="bold">Kolaborator</Text>}
placeholder="Masukkan kolaborator" placeholder="Masukkan kolaborator"
value={stateCreate.create.form.kolaborator || ''} defaultValue={stateCreate.create.form.kolaborator || ''}
onChange={(e) => stateCreate.create.form.kolaborator = e.currentTarget.value} onChange={(e) => stateCreate.create.form.kolaborator = e.currentTarget.value}
/> />

View File

@@ -118,7 +118,7 @@ function EditMitraKolaborasi() {
<TextInput <TextInput
label="Nama Mitra" label="Nama Mitra"
placeholder="Masukkan nama mitra" placeholder="Masukkan nama mitra"
value={formData.name} defaultValue={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })} onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required required
/> />

Some files were not shown because too many files have changed in this diff Show More