Event
Fix: Intergrasi pada UI - Beranda, Kontibusi & Riwayat - Detail beranda, detail kontribusi & detail riwayat - List partisipan ### No issue
This commit is contained in:
@@ -1,43 +1,114 @@
|
|||||||
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
import {
|
import {
|
||||||
AvatarCustom,
|
|
||||||
AvatarUsernameAndOtherComponent,
|
AvatarUsernameAndOtherComponent,
|
||||||
BoxWithHeaderSection,
|
BoxWithHeaderSection,
|
||||||
Grid,
|
LoaderCustom,
|
||||||
|
Spacing,
|
||||||
StackCustom,
|
StackCustom,
|
||||||
TextCustom,
|
TextCustom,
|
||||||
ViewWrapper
|
ViewWrapper
|
||||||
} from "@/components";
|
} from "@/components";
|
||||||
import React from "react";
|
import { useAuth } from "@/hooks/use-auth";
|
||||||
|
import {
|
||||||
|
apiEventGetAll
|
||||||
|
} from "@/service/api-client/api-event";
|
||||||
|
import { dateTimeView } from "@/utils/dateTimeView";
|
||||||
|
import { useFocusEffect } from "expo-router";
|
||||||
|
import _ from "lodash";
|
||||||
|
import React, { useCallback, useState } from "react";
|
||||||
|
|
||||||
export default function EventContribution() {
|
export default function EventContribution() {
|
||||||
|
const { user } = useAuth();
|
||||||
|
const [listData, setListData] = useState<any>([]);
|
||||||
|
const [isLoadList, setIsLoadList] = useState(false);
|
||||||
|
|
||||||
|
useFocusEffect(
|
||||||
|
useCallback(() => {
|
||||||
|
onLoadData();
|
||||||
|
}, [user?.id])
|
||||||
|
);
|
||||||
|
|
||||||
|
async function onLoadData() {
|
||||||
|
try {
|
||||||
|
setIsLoadList(true);
|
||||||
|
const response = await apiEventGetAll({
|
||||||
|
category: "contribution",
|
||||||
|
userId: user?.id,
|
||||||
|
});
|
||||||
|
if (response.success) {
|
||||||
|
setListData(response.data);
|
||||||
|
|
||||||
|
// const responseListParticipants = await apiEventListOfParticipants({
|
||||||
|
// id: response?.data?.Event?.id,
|
||||||
|
// });
|
||||||
|
// console.log(
|
||||||
|
// "[LIST PARTICIPANTS]",
|
||||||
|
// JSON.stringify(responseListParticipants.data, null, 2)
|
||||||
|
// );
|
||||||
|
// if (responseListParticipants.success) {
|
||||||
|
// setListParticipants(responseListParticipants.data);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("[ERROR]", error);
|
||||||
|
} finally {
|
||||||
|
setIsLoadList(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewWrapper hideFooter>
|
<ViewWrapper hideFooter>
|
||||||
{Array.from({ length: 10 }).map((_, index) => (
|
{isLoadList ? (
|
||||||
<BoxWithHeaderSection key={index} href={`/event/${index}/contribution`}>
|
<LoaderCustom />
|
||||||
<StackCustom>
|
) : _.isEmpty(listData) ? (
|
||||||
<AvatarUsernameAndOtherComponent
|
<TextCustom align="center">Belum ada kontribusi</TextCustom>
|
||||||
avatarHref={`/profile/${index}`}
|
) : (
|
||||||
rightComponent={
|
listData.map((item: any, index: number) => (
|
||||||
<TextCustom truncate>
|
<BoxWithHeaderSection
|
||||||
{new Date().toLocaleDateString()}
|
key={index}
|
||||||
</TextCustom>
|
href={`/event/${item?.Event?.id}/contribution`}
|
||||||
}
|
>
|
||||||
/>
|
<StackCustom>
|
||||||
|
<AvatarUsernameAndOtherComponent
|
||||||
|
avatar={item?.User?.Profile?.imageId}
|
||||||
|
avatarHref={`/profile/${item?.User?.Profile?.id}`}
|
||||||
|
name={item?.User?.username}
|
||||||
|
rightComponent={
|
||||||
|
<TextCustom truncate>
|
||||||
|
{dateTimeView({
|
||||||
|
date: item?.Event?.tanggal,
|
||||||
|
withoutTime: true,
|
||||||
|
})}
|
||||||
|
</TextCustom>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<TextCustom bold align="center" size="xlarge">
|
<TextCustom bold align="center" size="xlarge">
|
||||||
Judul Event Disini
|
{item?.Event?.title}
|
||||||
</TextCustom>
|
</TextCustom>
|
||||||
|
<Spacing height={10} />
|
||||||
|
|
||||||
<Grid>
|
{/* <Grid>
|
||||||
{Array.from({ length: 4 }).map((_, index2) => (
|
{item?.Event?.Event_Peserta?.map(
|
||||||
<Grid.Col span={3} key={index2}>
|
(item2: any, index2: number) => (
|
||||||
<AvatarCustom size="sm" href={`/profile/${index2}`} />
|
<Grid.Col
|
||||||
</Grid.Col>
|
style={{ alignItems: "center" }}
|
||||||
))}
|
span={12 / item?.Event?.Event_Peserta?.length}
|
||||||
</Grid>
|
key={index2}
|
||||||
</StackCustom>
|
>
|
||||||
</BoxWithHeaderSection>
|
<AvatarComp
|
||||||
))}
|
size="base"
|
||||||
|
href={`/profile/${item2?.User?.Profile?.id}`}
|
||||||
|
fileId={item2?.User?.Profile?.imageId}
|
||||||
|
/>
|
||||||
|
</Grid.Col>
|
||||||
|
)
|
||||||
|
)}
|
||||||
|
</Grid> */}
|
||||||
|
</StackCustom>
|
||||||
|
</BoxWithHeaderSection>
|
||||||
|
))
|
||||||
|
)}
|
||||||
</ViewWrapper>
|
</ViewWrapper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,41 @@
|
|||||||
import { ButtonCustom, Spacing, TextCustom } from "@/components";
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
|
import { ButtonCustom, LoaderCustom, Spacing, TextCustom } from "@/components";
|
||||||
import ViewWrapper from "@/components/_ShareComponent/ViewWrapper";
|
import ViewWrapper from "@/components/_ShareComponent/ViewWrapper";
|
||||||
import { AccentColor, MainColor } from "@/constants/color-palet";
|
import { AccentColor, MainColor } from "@/constants/color-palet";
|
||||||
|
import { useAuth } from "@/hooks/use-auth";
|
||||||
import Event_BoxPublishSection from "@/screens/Event/BoxPublishSection";
|
import Event_BoxPublishSection from "@/screens/Event/BoxPublishSection";
|
||||||
import { useState } from "react";
|
import { apiEventGetAll } from "@/service/api-client/api-event";
|
||||||
|
import { dateTimeView } from "@/utils/dateTimeView";
|
||||||
|
import _ from "lodash";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
import { View } from "react-native";
|
import { View } from "react-native";
|
||||||
|
|
||||||
export default function EventHistory() {
|
export default function EventHistory() {
|
||||||
const [activeCategory, setActiveCategory] = useState<string | null>("all");
|
const [activeCategory, setActiveCategory] = useState<string | null>("all");
|
||||||
|
const { user } = useAuth();
|
||||||
|
const [listData, setListData] = useState<any>([]);
|
||||||
|
const [isLoadList, setIsLoadList] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
onLoadData({ userId: user?.id });
|
||||||
|
}, [user?.id, activeCategory]);
|
||||||
|
|
||||||
|
async function onLoadData({ userId }: { userId?: string }) {
|
||||||
|
try {
|
||||||
|
setIsLoadList(true);
|
||||||
|
const response = await apiEventGetAll({
|
||||||
|
category: activeCategory === "all" ? "all-history" : "my-history",
|
||||||
|
userId: userId,
|
||||||
|
});
|
||||||
|
if (response.success) {
|
||||||
|
setListData(response.data);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("[ERROR]", error);
|
||||||
|
} finally {
|
||||||
|
setIsLoadList(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const handlePress = (item: any) => {
|
const handlePress = (item: any) => {
|
||||||
setActiveCategory(item);
|
setActiveCategory(item);
|
||||||
@@ -52,17 +81,24 @@ export default function EventHistory() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewWrapper headerComponent={headerComponent} hideFooter>
|
<ViewWrapper headerComponent={headerComponent} hideFooter>
|
||||||
{Array.from({ length: 10 }).map((_, index) => (
|
{isLoadList ? (
|
||||||
<Event_BoxPublishSection
|
<LoaderCustom />
|
||||||
key={index.toString()}
|
) : _.isEmpty(listData) ? (
|
||||||
id={index.toString()}
|
<TextCustom align="center">Belum ada riwayat</TextCustom>
|
||||||
username={`Riwayat ${activeCategory === "main" ? "Saya" : "Semua"}`}
|
) : (
|
||||||
rightComponentAvatar={
|
listData.map((item: any, index: number) => (
|
||||||
<TextCustom>{new Date().toLocaleDateString()}</TextCustom>
|
<Event_BoxPublishSection
|
||||||
}
|
key={index.toString()}
|
||||||
href={`/event/${index}/history`}
|
data={item}
|
||||||
/>
|
rightComponentAvatar={
|
||||||
))}
|
<TextCustom>
|
||||||
|
{dateTimeView({ date: item?.tanggal, withoutTime: true })}
|
||||||
|
</TextCustom>
|
||||||
|
}
|
||||||
|
href={`/event/${item.id}/history`}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
)}
|
||||||
</ViewWrapper>
|
</ViewWrapper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export default function EventBeranda() {
|
|||||||
const onLoadData = async () => {
|
const onLoadData = async () => {
|
||||||
try {
|
try {
|
||||||
setIsLoadData(true);
|
setIsLoadData(true);
|
||||||
const response = await apiEventGetAll();
|
const response = await apiEventGetAll({category: "beranda"});
|
||||||
// console.log("Response", JSON.stringify(response.data, null, 2));
|
// console.log("Response", JSON.stringify(response.data, null, 2));
|
||||||
setListData(response.data);
|
setListData(response.data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -1,20 +1,43 @@
|
|||||||
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
import {
|
import {
|
||||||
DotButton,
|
DotButton,
|
||||||
DrawerCustom,
|
DrawerCustom,
|
||||||
|
LoaderCustom,
|
||||||
MenuDrawerDynamicGrid,
|
MenuDrawerDynamicGrid,
|
||||||
ViewWrapper,
|
|
||||||
Spacing,
|
Spacing,
|
||||||
|
ViewWrapper,
|
||||||
} from "@/components";
|
} from "@/components";
|
||||||
import { IMenuDrawerItem } from "@/components/_Interface/types";
|
import { IMenuDrawerItem } from "@/components/_Interface/types";
|
||||||
import LeftButtonCustom from "@/components/Button/BackButton";
|
import LeftButtonCustom from "@/components/Button/BackButton";
|
||||||
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
|
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
|
||||||
import { menuDrawerPublishEvent } from "@/screens/Event/menuDrawerPublish";
|
import { menuDrawerPublishEvent } from "@/screens/Event/menuDrawerPublish";
|
||||||
|
import { apiEventGetOne } from "@/service/api-client/api-event";
|
||||||
import { router, Stack, useLocalSearchParams } from "expo-router";
|
import { router, Stack, useLocalSearchParams } from "expo-router";
|
||||||
import { useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
export default function EventDetailContribution() {
|
export default function EventDetailContribution() {
|
||||||
const { id } = useLocalSearchParams();
|
const { id } = useLocalSearchParams();
|
||||||
const [openDrawer, setOpenDrawer] = useState(false);
|
const [openDrawer, setOpenDrawer] = useState(false);
|
||||||
|
const [data, setData] = useState<any>();
|
||||||
|
const [isLoadData, setIsLoadData] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
onLoadData();
|
||||||
|
}, [id]);
|
||||||
|
|
||||||
|
const onLoadData = async () => {
|
||||||
|
try {
|
||||||
|
setIsLoadData(true);
|
||||||
|
const response = await apiEventGetOne({ id: id as string });
|
||||||
|
if (response.success) {
|
||||||
|
setData(response.data);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("[ERROR]", error);
|
||||||
|
} finally {
|
||||||
|
setIsLoadData(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handlePress = (item: IMenuDrawerItem) => {
|
const handlePress = (item: IMenuDrawerItem) => {
|
||||||
console.log("PATH ", item.path);
|
console.log("PATH ", item.path);
|
||||||
@@ -32,18 +55,22 @@ export default function EventDetailContribution() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<ViewWrapper>
|
<ViewWrapper>
|
||||||
<Event_BoxDetailPublishSection />
|
{isLoadData ? (
|
||||||
|
<LoaderCustom />
|
||||||
|
) : (
|
||||||
|
<Event_BoxDetailPublishSection data={data} />
|
||||||
|
)}
|
||||||
<Spacing />
|
<Spacing />
|
||||||
</ViewWrapper>
|
</ViewWrapper>
|
||||||
<DrawerCustom
|
<DrawerCustom
|
||||||
isVisible={openDrawer}
|
isVisible={openDrawer}
|
||||||
closeDrawer={() => setOpenDrawer(false)}
|
closeDrawer={() => setOpenDrawer(false)}
|
||||||
height={250}
|
height={"auto"}
|
||||||
>
|
>
|
||||||
<MenuDrawerDynamicGrid
|
<MenuDrawerDynamicGrid
|
||||||
data={menuDrawerPublishEvent({ id: id as string })}
|
data={menuDrawerPublishEvent({ id: id as string })}
|
||||||
columns={4}
|
columns={4}
|
||||||
onPressItem={handlePress}
|
onPressItem={handlePress as any}
|
||||||
/>
|
/>
|
||||||
</DrawerCustom>
|
</DrawerCustom>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
import {
|
import {
|
||||||
DotButton,
|
DotButton,
|
||||||
DrawerCustom,
|
DrawerCustom,
|
||||||
@@ -9,12 +10,29 @@ import { IMenuDrawerItem } from "@/components/_Interface/types";
|
|||||||
import LeftButtonCustom from "@/components/Button/BackButton";
|
import LeftButtonCustom from "@/components/Button/BackButton";
|
||||||
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
|
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
|
||||||
import { menuDrawerPublishEvent } from "@/screens/Event/menuDrawerPublish";
|
import { menuDrawerPublishEvent } from "@/screens/Event/menuDrawerPublish";
|
||||||
|
import { apiEventGetOne } from "@/service/api-client/api-event";
|
||||||
import { router, Stack, useLocalSearchParams } from "expo-router";
|
import { router, Stack, useLocalSearchParams } from "expo-router";
|
||||||
import { useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
export default function EventDetailHistory() {
|
export default function EventDetailHistory() {
|
||||||
const { id } = useLocalSearchParams();
|
const { id } = useLocalSearchParams();
|
||||||
const [openDrawer, setOpenDrawer] = useState(false);
|
const [openDrawer, setOpenDrawer] = useState(false);
|
||||||
|
const [data, setData] = useState();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
onLoadData();
|
||||||
|
}, [id]);
|
||||||
|
|
||||||
|
const onLoadData = async () => {
|
||||||
|
try {
|
||||||
|
const response = await apiEventGetOne({ id: id as string });
|
||||||
|
if (response.success) {
|
||||||
|
setData(response.data);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("[ERROR]", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handlePress = (item: IMenuDrawerItem) => {
|
const handlePress = (item: IMenuDrawerItem) => {
|
||||||
console.log("PATH ", item.path);
|
console.log("PATH ", item.path);
|
||||||
@@ -32,7 +50,7 @@ export default function EventDetailHistory() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<ViewWrapper>
|
<ViewWrapper>
|
||||||
<Event_BoxDetailPublishSection />
|
<Event_BoxDetailPublishSection data={data} />
|
||||||
<Spacing />
|
<Spacing />
|
||||||
</ViewWrapper>
|
</ViewWrapper>
|
||||||
<DrawerCustom
|
<DrawerCustom
|
||||||
@@ -43,7 +61,7 @@ export default function EventDetailHistory() {
|
|||||||
<MenuDrawerDynamicGrid
|
<MenuDrawerDynamicGrid
|
||||||
data={menuDrawerPublishEvent({ id: id as string })}
|
data={menuDrawerPublishEvent({ id: id as string })}
|
||||||
columns={4}
|
columns={4}
|
||||||
onPressItem={handlePress}
|
onPressItem={handlePress as any}
|
||||||
/>
|
/>
|
||||||
</DrawerCustom>
|
</DrawerCustom>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -5,29 +5,31 @@ import {
|
|||||||
BaseBox,
|
BaseBox,
|
||||||
LoaderCustom,
|
LoaderCustom,
|
||||||
TextCustom,
|
TextCustom,
|
||||||
ViewWrapper
|
ViewWrapper,
|
||||||
} from "@/components";
|
} from "@/components";
|
||||||
import { apiEventListOfParticipants } from "@/service/api-client/api-event";
|
import {
|
||||||
|
apiEventGetOne,
|
||||||
|
apiEventListOfParticipants,
|
||||||
|
} from "@/service/api-client/api-event";
|
||||||
import { useLocalSearchParams } from "expo-router";
|
import { useLocalSearchParams } from "expo-router";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { View } from "react-native";
|
||||||
|
|
||||||
export default function EventListOfParticipants() {
|
export default function EventListOfParticipants() {
|
||||||
const { id } = useLocalSearchParams();
|
const { id } = useLocalSearchParams();
|
||||||
|
const [startDate, setStartDate] = useState();
|
||||||
const [listData, setListData] = useState([]);
|
const [listData, setListData] = useState([]);
|
||||||
const [isLoadData, setIsLoadData] = useState(false);
|
const [isLoadData, setIsLoadData] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
onLoadData();
|
handlerLoadData();
|
||||||
}, [id]);
|
}, [id]);
|
||||||
|
|
||||||
const onLoadData = async () => {
|
const handlerLoadData = () => {
|
||||||
try {
|
try {
|
||||||
setIsLoadData(true);
|
setIsLoadData(true);
|
||||||
const response = await apiEventListOfParticipants({ id: id as string });
|
onLoadData();
|
||||||
if (response.success) {
|
onLoadList();
|
||||||
console.log("Response", JSON.stringify(response.data, null, 2));
|
|
||||||
setListData(response.data);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("[ERROR]", error);
|
console.log("[ERROR]", error);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -35,6 +37,28 @@ export default function EventListOfParticipants() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onLoadData = async () => {
|
||||||
|
try {
|
||||||
|
const response = await apiEventGetOne({ id: id as string });
|
||||||
|
if (response.success) {
|
||||||
|
setStartDate(response.data.tanggal);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("[ERROR]", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const onLoadList = async () => {
|
||||||
|
try {
|
||||||
|
const response = await apiEventListOfParticipants({ id: id as string });
|
||||||
|
if (response.success) {
|
||||||
|
setListData(response.data);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("[ERROR]", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewWrapper>
|
<ViewWrapper>
|
||||||
{isLoadData ? (
|
{isLoadData ? (
|
||||||
@@ -48,7 +72,27 @@ export default function EventListOfParticipants() {
|
|||||||
avatar={item?.User?.Profile?.imageId}
|
avatar={item?.User?.Profile?.imageId}
|
||||||
name={item?.User?.username}
|
name={item?.User?.username}
|
||||||
avatarHref={`/profile/${item?.User?.Profile?.id}`}
|
avatarHref={`/profile/${item?.User?.Profile?.id}`}
|
||||||
rightComponent={<BadgeCustom color={item?.isPresent ? "green" : "red"}>{item?.isPresent ? "Hadir" : "Tidak Hadir"}</BadgeCustom>}
|
rightComponent={
|
||||||
|
new Date().getTime() > new Date(startDate as any).getTime() ? (
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
justifyContent: "flex-end",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<BadgeCustom color={item?.isPresent ? "green" : "red"}>
|
||||||
|
{item?.isPresent ? "Hadir" : "Tidak Hadir"}
|
||||||
|
</BadgeCustom>
|
||||||
|
</View>
|
||||||
|
) : (
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
justifyContent: "flex-end",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<BadgeCustom color="gray">-</BadgeCustom>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</BaseBox>
|
</BaseBox>
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/* eslint-disable react-hooks/exhaustive-deps */
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
import {
|
import {
|
||||||
|
AlertDefaultSystem,
|
||||||
ButtonCustom,
|
ButtonCustom,
|
||||||
DotButton,
|
DotButton,
|
||||||
DrawerCustom,
|
DrawerCustom,
|
||||||
|
LoaderCustom,
|
||||||
MenuDrawerDynamicGrid,
|
MenuDrawerDynamicGrid,
|
||||||
Spacing,
|
|
||||||
ViewWrapper,
|
ViewWrapper,
|
||||||
} from "@/components";
|
} from "@/components";
|
||||||
import { IMenuDrawerItem } from "@/components/_Interface/types";
|
import { IMenuDrawerItem } from "@/components/_Interface/types";
|
||||||
@@ -12,31 +13,59 @@ import LeftButtonCustom from "@/components/Button/BackButton";
|
|||||||
import { useAuth } from "@/hooks/use-auth";
|
import { useAuth } from "@/hooks/use-auth";
|
||||||
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
|
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
|
||||||
import { menuDrawerPublishEvent } from "@/screens/Event/menuDrawerPublish";
|
import { menuDrawerPublishEvent } from "@/screens/Event/menuDrawerPublish";
|
||||||
import { apiEventGetOne, apiEventJoin } from "@/service/api-client/api-event";
|
import {
|
||||||
import { router, Stack, useLocalSearchParams } from "expo-router";
|
apiEventCheckParticipants,
|
||||||
import { useEffect, useState } from "react";
|
apiEventGetOne,
|
||||||
|
apiEventJoin,
|
||||||
|
} from "@/service/api-client/api-event";
|
||||||
|
import {
|
||||||
|
router,
|
||||||
|
Stack,
|
||||||
|
useFocusEffect,
|
||||||
|
useLocalSearchParams,
|
||||||
|
} from "expo-router";
|
||||||
|
import { useCallback, useState } from "react";
|
||||||
import Toast from "react-native-toast-message";
|
import Toast from "react-native-toast-message";
|
||||||
|
|
||||||
export default function EventDetailPublish() {
|
export default function EventDetailPublish() {
|
||||||
const { id } = useLocalSearchParams();
|
const { id } = useLocalSearchParams();
|
||||||
const { user } = useAuth();
|
const { user } = useAuth();
|
||||||
const [openDrawer, setOpenDrawer] = useState(false);
|
const [openDrawer, setOpenDrawer] = useState(false);
|
||||||
|
const [isLoadingData, setIsLoadingData] = useState(false);
|
||||||
const [isLoadingJoin, setIsLoadingJoin] = useState(false);
|
const [isLoadingJoin, setIsLoadingJoin] = useState(false);
|
||||||
|
|
||||||
const [data, setData] = useState();
|
const [data, setData] = useState();
|
||||||
|
const [isParticipant, setIsParticipant] = useState<boolean | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useFocusEffect(
|
||||||
onLoadData();
|
useCallback(() => {
|
||||||
}, [id]);
|
onLoadData();
|
||||||
|
}, [])
|
||||||
|
);
|
||||||
|
|
||||||
async function onLoadData() {
|
async function onLoadData() {
|
||||||
try {
|
try {
|
||||||
|
setIsLoadingData(true);
|
||||||
const response = await apiEventGetOne({ id: id as string });
|
const response = await apiEventGetOne({ id: id as string });
|
||||||
if (response.success) {
|
if (response.success) {
|
||||||
setData(response.data);
|
setData(response.data);
|
||||||
|
|
||||||
|
const responseCheckParticipants = await apiEventCheckParticipants({
|
||||||
|
id: id as string,
|
||||||
|
userId: user?.id as string,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (
|
||||||
|
responseCheckParticipants.success &&
|
||||||
|
responseCheckParticipants.data
|
||||||
|
) {
|
||||||
|
setIsParticipant(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("[ERROR]", error);
|
console.log("[ERROR]", error);
|
||||||
|
} finally {
|
||||||
|
setIsLoadingData(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,16 +106,30 @@ export default function EventDetailPublish() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const footerButton = (
|
const footerButton = () => {
|
||||||
<ButtonCustom
|
return (
|
||||||
isLoading={isLoadingJoin}
|
<>
|
||||||
backgroundColor="green"
|
<ButtonCustom
|
||||||
textColor="white"
|
disabled={isParticipant as any}
|
||||||
onPress={() => handlerJoin()}
|
isLoading={isLoadingJoin}
|
||||||
>
|
backgroundColor="green"
|
||||||
Join
|
textColor="white"
|
||||||
</ButtonCustom>
|
onPress={() =>
|
||||||
);
|
AlertDefaultSystem({
|
||||||
|
title: "Join event",
|
||||||
|
message: "Anda yakin ingin join sebagai peserta event ?",
|
||||||
|
textLeft: "Tidak",
|
||||||
|
textRight: "Ya",
|
||||||
|
onPressLeft: () => {},
|
||||||
|
onPressRight: () => handlerJoin(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{isParticipant ? "Anda sudah tergabung" : "Join"}
|
||||||
|
</ButtonCustom>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -98,11 +141,14 @@ export default function EventDetailPublish() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<ViewWrapper>
|
<ViewWrapper>
|
||||||
<Event_BoxDetailPublishSection
|
{isLoadingData ? (
|
||||||
data={data}
|
<LoaderCustom />
|
||||||
footerButton={footerButton}
|
) : (
|
||||||
/>
|
<Event_BoxDetailPublishSection
|
||||||
<Spacing />
|
data={data}
|
||||||
|
footerButton={footerButton()}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</ViewWrapper>
|
</ViewWrapper>
|
||||||
|
|
||||||
<DrawerCustom
|
<DrawerCustom
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
AvatarComp,
|
AvatarComp,
|
||||||
ClickableCustom,
|
ClickableCustom,
|
||||||
Grid,
|
Grid,
|
||||||
|
LoaderCustom,
|
||||||
Spacing,
|
Spacing,
|
||||||
StackCustom,
|
StackCustom,
|
||||||
TextCustom,
|
TextCustom,
|
||||||
@@ -19,6 +20,7 @@ import { useEffect, useState } from "react";
|
|||||||
export default function UserSearch() {
|
export default function UserSearch() {
|
||||||
const [data, setData] = useState<any[]>([]);
|
const [data, setData] = useState<any[]>([]);
|
||||||
const [search, setSearch] = useState<string>("");
|
const [search, setSearch] = useState<string>("");
|
||||||
|
const [isLoadList, setIsLoadList] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
onLoadData(search);
|
onLoadData(search);
|
||||||
@@ -26,11 +28,14 @@ export default function UserSearch() {
|
|||||||
|
|
||||||
const onLoadData = async (search: string) => {
|
const onLoadData = async (search: string) => {
|
||||||
try {
|
try {
|
||||||
|
setIsLoadList(true);
|
||||||
const response = await apiAllUser({ search: search });
|
const response = await apiAllUser({ search: search });
|
||||||
console.log("[DATA USER] >", JSON.stringify(response.data, null, 2));
|
console.log("[DATA USER] >", JSON.stringify(response.data, null, 2));
|
||||||
setData(response.data);
|
setData(response.data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Error fetching data", error);
|
console.log("Error fetching data", error);
|
||||||
|
} finally {
|
||||||
|
setIsLoadList(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -60,7 +65,9 @@ export default function UserSearch() {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<StackCustom>
|
<StackCustom>
|
||||||
{!_.isEmpty(data) ? (
|
{isLoadList ? (
|
||||||
|
<LoaderCustom />
|
||||||
|
) : !_.isEmpty(data) ? (
|
||||||
data?.map((e, index) => {
|
data?.map((e, index) => {
|
||||||
return (
|
return (
|
||||||
<ClickableCustom
|
<ClickableCustom
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export default function LoginView() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (token && !isAdmin) {
|
if (token && !isAdmin) {
|
||||||
return <Redirect href={"/(application)/(user)/event/(tabs)"} />;
|
return <Redirect href={"/(application)/(user)/home"} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (token && isAdmin) {
|
if (token && isAdmin) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export default function Event_BoxDetailPublishSection({
|
|||||||
data,
|
data,
|
||||||
footerButton,
|
footerButton,
|
||||||
}: {
|
}: {
|
||||||
data?: any;
|
data: any;
|
||||||
footerButton?: React.ReactNode;
|
footerButton?: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
const listData = [
|
const listData = [
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default function Event_BoxPublishSection({
|
|||||||
rightComponentAvatar,
|
rightComponentAvatar,
|
||||||
}: {
|
}: {
|
||||||
href: Href;
|
href: Href;
|
||||||
data?: any;
|
data: any;
|
||||||
|
|
||||||
// Avatar
|
// Avatar
|
||||||
sourceAvatar?: string;
|
sourceAvatar?: string;
|
||||||
|
|||||||
@@ -44,10 +44,8 @@ export async function apiEventUpdateStatus({
|
|||||||
}) {
|
}) {
|
||||||
try {
|
try {
|
||||||
const response = await apiConfig.put(`/mobile/event/${id}/${status}`);
|
const response = await apiConfig.put(`/mobile/event/${id}/${status}`);
|
||||||
console.log("[SUCCESS]", response.data);
|
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// console.log("[ERROR FECTH]", error);
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,9 +76,19 @@ export async function apiEventDelete({ id }: { id: string }) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function apiEventGetAll() {
|
export async function apiEventGetAll({
|
||||||
|
category,
|
||||||
|
userId,
|
||||||
|
}: {
|
||||||
|
category?: "beranda" | "contribution" | "all-history" | "my-history";
|
||||||
|
userId?: string;
|
||||||
|
}) {
|
||||||
try {
|
try {
|
||||||
const response = await apiConfig.get(`/mobile/event`);
|
const categoryEvent = category ? `?category=${category}` : "";
|
||||||
|
const userIdCreator = userId ? `&userId=${userId}` : "";
|
||||||
|
const response = await apiConfig.get(
|
||||||
|
`/mobile/event${categoryEvent}${userIdCreator}`
|
||||||
|
);
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw error;
|
throw error;
|
||||||
@@ -104,7 +112,7 @@ export async function apiEventJoin({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function apiEventListOfParticipants({id}: {id: string}){
|
export async function apiEventListOfParticipants({ id }: { id?: string }) {
|
||||||
try {
|
try {
|
||||||
const response = await apiConfig.get(`/mobile/event/${id}/participants`);
|
const response = await apiConfig.get(`/mobile/event/${id}/participants`);
|
||||||
return response.data;
|
return response.data;
|
||||||
@@ -113,3 +121,20 @@ export async function apiEventListOfParticipants({id}: {id: string}){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function apiEventCheckParticipants({
|
||||||
|
id,
|
||||||
|
userId,
|
||||||
|
}: {
|
||||||
|
id: string;
|
||||||
|
userId?: string;
|
||||||
|
}) {
|
||||||
|
try {
|
||||||
|
const selectUserId = userId ? `?userId=${userId}` : "";
|
||||||
|
const response = await apiConfig.get(
|
||||||
|
`/mobile/event/${id}/check-participants${selectUserId}`
|
||||||
|
);
|
||||||
|
return response.data;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user