UI & API Pendidikan Non Formal

This commit is contained in:
2025-07-28 17:51:42 +08:00
parent ac0eb926eb
commit e2e1672c80
28 changed files with 1241 additions and 75 deletions

View File

@@ -0,0 +1,86 @@
'use client'
import pendidikanNonFormalState from '@/app/admin/(dashboard)/_state/pendidikan/pendidikan-non-formal';
import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack } from '@tabler/icons-react';
import dynamic from 'next/dynamic';
import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
const JenisProgramYangDiselenggarakanTextEditor = dynamic(() => import('../../_lib/pendidikanNonFormalTextEditor').then(mod => mod.PendidikanNonFormalTextEditor), {
ssr: false,
});
function EditJenisProgramYangDiselenggarakan() {
const router = useRouter()
const editState = useProxy(pendidikanNonFormalState.stateJenisProgram)
const [judul, setJudul] = useState('');
const [content, setContent] = useState('');
useShallowEffect(() => {
if (!editState.findById.data) {
editState.findById.initialize(); // biar masuk ke `findFirst` route kamu
}
}, []);
useEffect(() => {
if (editState.findById.data) {
setJudul(editState.findById.data.judul ?? '')
setContent(editState.findById.data.deskripsi ?? '')
}
}, [editState.findById.data])
const submit = () => {
if (editState.findById.data) {
editState.findById.data.judul = judul;
editState.findById.data.deskripsi = content;
editState.update.save(editState.findById.data)
}
router.push('/admin/pendidikan/pendidikan-non-formal/jenis-program-yang-diselenggarakan')
}
return (
<Box>
<Stack gap={'xs'}>
<Box>
<Button
variant={'subtle'}
onClick={() => router.back()}
>
<IconArrowBack color={colors['blue-button']} size={20} />
</Button>
</Box>
<Box>
<Paper bg={colors['white-1']} p={'md'} radius={10} w={{ base: '100%', md: '50%' }}>
<Stack gap={'xs'}>
<Title order={3}>Edit Jenis Program Yang Diselenggarakan</Title>
<TextInput
label={<Text fz={"sm"} fw={"bold"}>Judul</Text>}
value={judul}
onChange={(e) => setJudul(e.target.value)}
/>
<Text fw={"bold"}>Deskripsi</Text>
<JenisProgramYangDiselenggarakanTextEditor
showSubmit={false}
onChange={setContent}
initialContent={content}
/>
<Group>
<Button
bg={colors['blue-button']}
onClick={submit}
loading={editState.update.loading}
>
Submit
</Button>
</Group>
</Stack>
</Paper>
</Box>
</Stack>
</Box>
);
}
export default EditJenisProgramYangDiselenggarakan;