feat : update image

Deskripsi:
- update image calender
- update image discussion
- update image division
- update image project
- update image task
- update image user
- update api image

No Issue
This commit is contained in:
lukman
2024-09-02 15:39:15 +08:00
parent cbd999678d
commit 71451229c2
28 changed files with 92 additions and 66 deletions

View File

@@ -66,17 +66,17 @@ export async function GET(request: Request, context: { params: { id: string } })
select: { select: {
id: true, id: true,
name: true, name: true,
email: true email: true,
img: true
} }
} }
} }
}) })
const fixMember = member.map((v: any) => ({ const fixMember = member.map((v: any) => ({
..._.omit(v, ["User"]), ..._.omit(v, ["User"]),
name: v.User.name, name: v.User.name,
email: v.User.email, email: v.User.email,
img: v.User.img
})) }))

View File

@@ -43,7 +43,8 @@ export async function GET(request: Request, context: { params: { id: string } })
createdAt: true, createdAt: true,
User: { User: {
select: { select: {
name: true name: true,
img: true
} }
}, },
DivisionDisscussionComment: { DivisionDisscussionComment: {
@@ -53,7 +54,8 @@ export async function GET(request: Request, context: { params: { id: string } })
createdAt: true, createdAt: true,
User: { User: {
select: { select: {
name: true name: true,
img: true
} }
} }
} }
@@ -63,16 +65,17 @@ export async function GET(request: Request, context: { params: { id: string } })
const { ...userMember } = data const { ...userMember } = data
const username = data?.User.name const username = data?.User.name
const user_img = data?.User.img
const createdAt = moment(data?.createdAt).format("LL") const createdAt = moment(data?.createdAt).format("LL")
const result = { ...userMember, username, createdAt } const result = { ...userMember, username, createdAt, user_img }
const omitData = _.omit(result, ["User"]) const omitData = _.omit(result, ["User"])
const comments = omitData.DivisionDisscussionComment.map((comment: any) => { const comments = omitData.DivisionDisscussionComment.map((comment: any) => {
return { ...comment, username: comment.User.name }; return { ...comment, username: comment.User.name, img: comment.User.img };
}); });

View File

@@ -53,7 +53,8 @@ export async function GET(request: Request) {
createdAt: true, createdAt: true,
User: { User: {
select: { select: {
name: true name: true,
img: true
} }
}, },
DivisionDisscussionComment: { DivisionDisscussionComment: {
@@ -69,6 +70,7 @@ export async function GET(request: Request) {
const fixData = data.map((v: any) => ({ const fixData = data.map((v: any) => ({
..._.omit(v, ["User", "DivisionDisscussionComment", "createdAt"]), ..._.omit(v, ["User", "DivisionDisscussionComment", "createdAt"]),
user_name: v.User.name, user_name: v.User.name,
img: v.User.img,
total_komentar: v.DivisionDisscussionComment.length, total_komentar: v.DivisionDisscussionComment.length,
createdAt: moment(v.createdAt).format("LL") createdAt: moment(v.createdAt).format("LL")
})) }))

View File

@@ -160,6 +160,7 @@ export async function GET(request: Request, context: { params: { id: string } })
id: true, id: true,
name: true, name: true,
email: true, email: true,
img: true
} }
}) })
@@ -167,7 +168,7 @@ export async function GET(request: Request, context: { params: { id: string } })
idUser: v.id, idUser: v.id,
name: v.name, name: v.name,
email: v.email, email: v.email,
img: v.img
})) }))
const dataFix = { const dataFix = {

View File

@@ -108,9 +108,10 @@ export async function GET(request: Request, context: { params: { id: string } })
User: { User: {
select: { select: {
name: true, name: true,
email: true email: true,
img: true
} }
} },
} }
}) })
@@ -118,6 +119,7 @@ export async function GET(request: Request, context: { params: { id: string } })
..._.omit(v, ["User"]), ..._.omit(v, ["User"]),
name: v.User.name, name: v.User.name,
email: v.User.email, email: v.User.email,
img: v.User.img
})) }))
allData = fix allData = fix

View File

@@ -112,7 +112,8 @@ export async function GET(request: Request, context: { params: { id: string } })
User: { User: {
select: { select: {
name: true, name: true,
email: true email: true,
img: true
} }
} }
} }
@@ -123,6 +124,7 @@ export async function GET(request: Request, context: { params: { id: string } })
..._.omit(v, ["User"]), ..._.omit(v, ["User"]),
name: v.User.name, name: v.User.name,
email: v.User.email, email: v.User.email,
img: v.User.img
})) }))
allData = fix allData = fix

View File

@@ -37,6 +37,7 @@ export interface IDataDetailByIdMember {
idUser: string idUser: string
name: string name: string
email: string email: string
img: string
} }
export interface IFormCreateCalender { export interface IFormCreateCalender {
@@ -56,6 +57,7 @@ export interface IFormMemberCalender {
idUser: { idUser: {
id: string id: string
name: string name: string
img: string
}[] }[]
} }

View File

@@ -49,7 +49,7 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) =>
if (selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) { if (selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) {
setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != isData[index].idUser)) setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != isData[index].idUser))
} else { } else {
setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name }]) setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img }])
} }
}; };
@@ -61,7 +61,7 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) =>
for (let index = 0; index < isData.length; index++) { for (let index = 0; index < isData.length; index++) {
if (!selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) { if (!selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) {
const newArr = { const newArr = {
idUser: isData[index].idUser, name: isData[index].name idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img
} }
setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr]) setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr])
} }
@@ -111,7 +111,7 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) =>
<Box mb={15} key={i} onClick={() => handleFileClick(i)}> <Box mb={15} key={i} onClick={() => handleFileClick(i)}>
<Flex justify={"space-between"} align={"center"}> <Flex justify={"space-between"} align={"center"}>
<Group> <Group>
<Avatar src={"v.image"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Text style={{ <Text style={{
cursor: 'pointer', cursor: 'pointer',
display: 'flex', display: 'flex',

View File

@@ -172,7 +172,7 @@ export default function DetailEventDivision() {
key={i} key={i}
> >
<Group> <Group>
<Avatar src={""} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.name} {v.name}

View File

@@ -18,8 +18,8 @@ export default function NavbarCreateDivisionCalender() {
const [value, setValue] = useState<Date | null>(null); const [value, setValue] = useState<Date | null>(null);
const router = useRouter() const router = useRouter()
const [isModal, setModal] = useState(false) const [isModal, setModal] = useState(false)
const memberUser = useHookstate(globalCalender) const member = useHookstate(globalCalender)
const memberValue = memberUser.get() as IFormMemberCalender[] const memberValue = member.get() as IFormMemberCalender[]
const [openMember, setOpenMember] = useState(false) const [openMember, setOpenMember] = useState(false)
const param = useParams<{ id: string, detail: string }>() const param = useParams<{ id: string, detail: string }>()
const [touched, setTouched] = useState({ const [touched, setTouched] = useState({
@@ -63,7 +63,7 @@ export default function NavbarCreateDivisionCalender() {
setModal(false) setModal(false)
router.push(`/division/${param.id}/calender`) router.push(`/division/${param.id}/calender`)
toast.success(response.message) toast.success(response.message)
memberUser.set([]) member.set([])
} else { } else {
toast.error(response.message) toast.error(response.message)
setModal(false) setModal(false)
@@ -244,11 +244,11 @@ export default function NavbarCreateDivisionCalender() {
</Group> </Group>
</Box> </Box>
{ {
memberUser.length > 0 && member.length > 0 &&
<Box pt={30} mb={60}> <Box pt={30} mb={60}>
<Group justify="space-between"> <Group justify="space-between">
<Text c={WARNA.biruTua}>Anggota Terpilih</Text> <Text c={WARNA.biruTua}>Anggota Terpilih</Text>
<Text c={WARNA.biruTua}>Total {memberUser.length} Anggota</Text> <Text c={WARNA.biruTua}>Total {member.length} Anggota</Text>
</Group> </Group>
<Box pt={10}> <Box pt={10}>
<Box mb={20}> <Box mb={20}>
@@ -260,28 +260,34 @@ export default function NavbarCreateDivisionCalender() {
px={20} px={20}
py={10} py={10}
> >
{memberUser.get().map((v: any, i: any) => { {member.length == 0 ?
return ( <Box style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '10vh' }}>
<Flex <Text c="dimmed" ta={"center"} fs={"italic"}>Tidak ada Anggota</Text>
justify={"space-between"} </Box>
align={"center"} :
mt={20}
key={i} member.get().map((v: any, i: any) => {
> return (
<Group> <Flex
<Avatar src={"v.image"} alt="it's me" size="lg" /> justify={"space-between"}
<Box> align={"center"}
<Text c={WARNA.biruTua} fw={"bold"}> mt={20}
{v.name} key={i}
</Text> >
</Box> <Group>
</Group> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Text c={WARNA.biruTua} fw={"bold"}> <Box>
Anggota <Text c={WARNA.biruTua} fw={"bold"}>
</Text> {v.name}
</Flex> </Text>
); </Box>
})} </Group>
<Text c={WARNA.biruTua} fw={"bold"}>
Anggota
</Text>
</Flex>
);
})}
</Box> </Box>
</Box> </Box>
</Box> </Box>

View File

@@ -339,7 +339,7 @@ export default function UpdateDivisionCalender() {
key={i} key={i}
> >
<Group> <Group>
<Avatar src={"v.image"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.name} {v.name}

View File

@@ -145,7 +145,7 @@ export default function UpdateListUsers({ onClose }: { onClose: (val: any) => vo
<Box mb={15} key={i} onClick={() => handleFileClick(i)}> <Box mb={15} key={i} onClick={() => handleFileClick(i)}>
<Flex justify={"space-between"} align={"center"}> <Flex justify={"space-between"} align={"center"}>
<Group> <Group>
<Avatar src={"v.image"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Text style={{ <Text style={{
cursor: 'pointer', cursor: 'pointer',
display: 'flex', display: 'flex',

View File

@@ -2,6 +2,7 @@ export interface IDataDiscussion {
id: string id: string
title: string title: string
desc: string desc: string
img: string
status: number status: number
createdAt: string createdAt: string
user_name: string user_name: string
@@ -26,6 +27,7 @@ export interface IDetailDiscussion {
createdAt: string createdAt: string
DivisionDisscussionComment: IAllComents[] DivisionDisscussionComment: IAllComents[]
username: string username: string
user_img: string
totalComments: number totalComments: number
} }
@@ -33,7 +35,8 @@ export interface IDetailDiscussion {
id: string id: string
comment: string comment: string
createdAt: string createdAt: string
User: User User: User
img: string
username: string username: string
} }

View File

@@ -103,7 +103,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
> >
{isData?.username ? {isData?.username ?
<Group> <Group>
<Avatar src={'https://i.pravatar.cc/1000?img=5'} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${isData?.user_img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{isData?.username} {isData?.username}
@@ -142,7 +142,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
> >
{isData?.username ? {isData?.username ?
<Group> <Group>
<Avatar src={'https://i.pravatar.cc/1000?img=5'} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${isData?.user_img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{isData?.username} {isData?.username}
@@ -216,7 +216,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
align={"center"} align={"center"}
> >
<Group> <Group>
<Avatar alt="it's me" size="md" /> <Avatar alt="it's me" size="md" src={`/api/file/img?cat=user&file=${v.img}`} />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"} fz={15}> <Text c={WARNA.biruTua} fw={"bold"} fz={15}>
{v.username} {v.username}

View File

@@ -110,7 +110,7 @@ export default function ListDiscussion({ id }: { id: string }) {
}} }}
> >
<Group> <Group>
<Avatar alt="it's me" size="lg" /> <Avatar alt="it's me" src={`/api/file/img?cat=user&file=${v.img}`} size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.user_name} {v.user_name}

View File

@@ -112,7 +112,7 @@ export default function CreateAnggotaDivision() {
</Box> </Box>
)) ))
: :
<Box mt={20} mb={60}> <Box mt={20} mb={100}>
{dataMember.map((v: any, index: any) => { {dataMember.map((v: any, index: any) => {
const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id) const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id)
const found = memberDb.some((i: any) => i.idUser == v.id) const found = memberDb.some((i: any) => i.idUser == v.id)
@@ -120,7 +120,7 @@ export default function CreateAnggotaDivision() {
<Box my={10} key={index} onClick={() => (!found) ? handleFileClick(index) : null}> <Box my={10} key={index} onClick={() => (!found) ? handleFileClick(index) : null}>
<Group justify='space-between' align='center'> <Group justify='space-between' align='center'>
<Group> <Group>
<Avatar src={"v.img"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Stack align="flex-start" justify="flex-start"> <Stack align="flex-start" justify="flex-start">
<Text>{v.name}</Text> <Text>{v.name}</Text>
<Text c={"dimmed"}>{(found) ? "sudah menjadi anggota divisi" : ""}</Text> <Text c={"dimmed"}>{(found) ? "sudah menjadi anggota divisi" : ""}</Text>

View File

@@ -191,7 +191,7 @@ export default function InformationDivision() {
onClick={() => { onClickMember(v.id, (v.isAdmin) ? true : false), setChooseMemberName(v.name) }} onClick={() => { onClickMember(v.id, (v.isAdmin) ? true : false), setChooseMemberName(v.name) }}
> >
<Group> <Group>
<Avatar src={"v.img"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.name} {v.name}

View File

@@ -89,7 +89,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on
.fill(null) .fill(null)
.map((_, i) => ( .map((_, i) => (
<Box key={i}> <Box key={i}>
<Skeleton width={"100%"} height={100} radius={"md"} /> <Skeleton width={"100%"} height={130} radius={"md"} />
</Box> </Box>
))} ))}
</SimpleGrid> </SimpleGrid>
@@ -114,7 +114,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on
onClick={() => handleFileClick(index)} onClick={() => handleFileClick(index)}
> >
<Center> <Center>
<Avatar src={"https://i.pravatar.cc/1000?img=37"} alt="it's me" size="xl" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="xl" />
</Center> </Center>
<Text mt={20} ta="center"> <Text mt={20} ta="center">
{v.name} {v.name}

View File

@@ -26,6 +26,7 @@ export interface IDataMemberProject {
idUser: string idUser: string
name: string name: string
email: string email: string
img: string
} }
export interface IFormProject { export interface IFormProject {
@@ -44,7 +45,8 @@ export interface IFormDateProject {
export interface IFormMemberProject { export interface IFormMemberProject {
idUser: string, idUser: string,
name: string name: string,
img: string
} }
@@ -63,7 +65,8 @@ export interface IDataMemberProjectDetail {
id: string, id: string,
idUser: string, idUser: string,
isLeader: string, isLeader: string,
name: string name: string,
img: string
} }
export interface IListFileTaskProject { export interface IListFileTaskProject {

View File

@@ -133,7 +133,7 @@ export default function AddMemberDetailProject() {
<Box mb={15} key={i} onClick={() => (!found) ? handleFileClick(i) : null}> <Box mb={15} key={i} onClick={() => (!found) ? handleFileClick(i) : null}>
<Flex justify={"space-between"} align={"center"}> <Flex justify={"space-between"} align={"center"}>
<Group> <Group>
<Avatar src={"v.image"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Stack align="flex-start" justify="flex-start"> <Stack align="flex-start" justify="flex-start">
<Text style={{ <Text style={{
cursor: 'pointer', cursor: 'pointer',

View File

@@ -78,7 +78,7 @@ export default function ViewDateEndTask({ onClose }: { onClose: (val: IFormDateP
</Group> </Group>
</Box> </Box>
<Box> <Box>
<Text c={WARNA.biruTua}>Tanggal Berakhir</Text> <Text>Tanggal Berakhir</Text>
<Group <Group
justify="center" justify="center"
bg={"white"} bg={"white"}
@@ -89,7 +89,7 @@ export default function ViewDateEndTask({ onClose }: { onClose: (val: IFormDateP
</Group> </Group>
</Box> </Box>
</SimpleGrid> </SimpleGrid>
<Stack pt={15}> <Stack pt={15} pb={100}>
<TextInput <TextInput
styles={{ styles={{
input: { input: {

View File

@@ -289,7 +289,7 @@ export default function CreateProject() {
key={i} key={i}
> >
<Group> <Group>
<Avatar src={"v.image"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.name} {v.name}

View File

@@ -24,7 +24,7 @@ export default function CreateUsersProject({ grup, onClose }: { grup?: string, o
if (selectedFiles.some((i: any) => i.idUser == dataMember[index].id)) { if (selectedFiles.some((i: any) => i.idUser == dataMember[index].id)) {
setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != dataMember[index].id)) setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != dataMember[index].id))
} else { } else {
setSelectedFiles([...selectedFiles, { idUser: dataMember[index].id, name: dataMember[index].name }]) setSelectedFiles([...selectedFiles, { idUser: dataMember[index].id, name: dataMember[index].name, img: dataMember[index].img }])
} }
}; };
@@ -114,7 +114,7 @@ export default function CreateUsersProject({ grup, onClose }: { grup?: string, o
onClick={() => handleFileClick(index)} onClick={() => handleFileClick(index)}
> >
<Center> <Center>
<Avatar src={"https://i.pravatar.cc/1000?img=37"} alt="it's me" size="xl" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="xl" />
</Center> </Center>
<Text mt={20} ta="center"> <Text mt={20} ta="center">
{v.name} {v.name}

View File

@@ -100,7 +100,7 @@ export default function ListAnggotaDetailProject() {
}} }}
> >
<Group> <Group>
<Avatar src={""} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.name} {v.name}

View File

@@ -60,6 +60,7 @@ export interface IDataMemberTaskDivision {
idUser: string idUser: string
name: string name: string
email: string email: string
img: string
} }
export interface IDataFileTaskDivision { export interface IDataFileTaskDivision {

View File

@@ -150,7 +150,7 @@ export default function AddMemberDetailTask() {
<Box mb={15} key={i} onClick={() => (!found) ? handleFileClick(i) : null}> <Box mb={15} key={i} onClick={() => (!found) ? handleFileClick(i) : null}>
<Flex justify={"space-between"} align={"center"}> <Flex justify={"space-between"} align={"center"}>
<Group> <Group>
<Avatar src={"v.image"} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Stack align="flex-start" justify="flex-start"> <Stack align="flex-start" justify="flex-start">
<Text style={{ <Text style={{
cursor: 'pointer', cursor: 'pointer',

View File

@@ -102,7 +102,7 @@ export default function ListAnggotaDetailTask() {
}} }}
> >
<Group> <Group>
<Avatar src={""} alt="it's me" size="lg" /> <Avatar src={`/api/file/img?cat=user&file=${v.img}`} alt="it's me" size="lg" />
<Box> <Box>
<Text c={WARNA.biruTua} fw={"bold"}> <Text c={WARNA.biruTua} fw={"bold"}>
{v.name} {v.name}

View File

@@ -7,5 +7,6 @@ export type TypeUser = {
gender: string gender: string
isActive: boolean, isActive: boolean,
group: string, group: string,
img: string
position: string position: string
}[] }[]