upd: diskusi umum

Deskripsi:
- list diskusi umum
- filter diskusi
- pencarian diskusi
- detail diskusi
- kirim komentar pada diskusi umum

No Issues
This commit is contained in:
amel
2025-05-05 17:31:39 +08:00
parent 9756a05d2a
commit 1644bec261
7 changed files with 282 additions and 262 deletions

View File

@@ -6,7 +6,7 @@ import { Feather } from "@expo/vector-icons";
import { ColorsStatus } from "@/constants/ColorsStatus";
type Props = {
title: string
title?: string
subtitle?: string | React.ReactNode
icon: React.ReactNode
desc?: string

View File

@@ -1,19 +1,23 @@
import { useState } from "react"
import ButtonMenuHeader from "../buttonMenuHeader"
import DrawerBottom from "../drawerBottom"
import { ToastAndroid, View } from "react-native"
import Styles from "@/constants/Styles"
import MenuItemRow from "../menuItemRow"
import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"
import { router } from "expo-router"
import { useState } from "react"
import { ToastAndroid, View } from "react-native"
import { useSelector } from "react-redux"
import AlertKonfirmasi from "../alertKonfirmasi"
import ButtonMenuHeader from "../buttonMenuHeader"
import DrawerBottom from "../drawerBottom"
import MenuItemRow from "../menuItemRow"
type Props = {
id: string | string[]
active: boolean
status: number
}
export default function HeaderRightDiscussionGeneralDetail({ id }: Props) {
export default function HeaderRightDiscussionGeneralDetail({ id, active, status }: Props) {
const [isVisible, setVisible] = useState(false)
const entityUser = useSelector((state: any) => state.user)
return (
<>
@@ -28,45 +32,76 @@ export default function HeaderRightDiscussionGeneralDetail({ id }: Props) {
router.push(`/discussion/member/${id}`)
}}
/>
<MenuItemRow
icon={<MaterialCommunityIcons name="pencil-outline" color="black" size={25} />}
title="Edit"
onPress={() => {
setVisible(false)
router.push(`/discussion/edit/${id}`)
}}
/>
<MenuItemRow
icon={<MaterialIcons name="close" color="black" size={25} />}
title="Tutup Diskusi"
onPress={() => {
AlertKonfirmasi({
title: 'Konfirmasi',
desc: 'Apakah anda yakin ingin menutup diskusi?',
onPress: () => {
setVisible(false)
ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT)
}
})
}}
/>
</View>
<View style={[Styles.rowItemsCenter, Styles.mt15]}>
<MenuItemRow
icon={<MaterialCommunityIcons name="archive-outline" color="black" size={25} />}
title="Arsipkan"
onPress={() => {
AlertKonfirmasi({
title: 'Konfirmasi',
desc: 'Apakah anda yakin ingin mengarsipkan diskusi?',
onPress: () => {
setVisible(false)
ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT)
}
})
}}
/>
{
entityUser.role != "user" && entityUser.role != "coadmin" &&
<>
{
active ?
(
<>
<MenuItemRow
icon={<MaterialCommunityIcons name="pencil-outline" color="black" size={25} />}
title="Edit"
onPress={() => {
setVisible(false)
router.push(`/discussion/edit/${id}`)
}}
/>
<MenuItemRow
icon={<MaterialIcons name="close" color="black" size={25} />}
title={status == 1 ? 'Tutup Diskusi' : 'Buka Diskusi'}
onPress={() => {
AlertKonfirmasi({
title: 'Konfirmasi',
desc: status == 1 ? 'Apakah anda yakin ingin menutup diskusi?' : 'Apakah anda yakin ingin membuka diskusi?',
onPress: () => {
setVisible(false)
ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT)
}
})
}}
/>
</>
)
:
<MenuItemRow
icon={<MaterialCommunityIcons name="archive-outline" color="black" size={25} />}
title="Aktifkan Diskusi"
onPress={() => {
AlertKonfirmasi({
title: 'Konfirmasi',
desc: 'Apakah anda yakin ingin mengaktifkan diskusi ini?',
onPress: () => {
setVisible(false)
ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT)
}
})
}}
/>
}
</>
}
</View>
{
entityUser.role != "user" && entityUser.role != "coadmin" && active &&
<View style={[Styles.rowItemsCenter, Styles.mt15]}>
<MenuItemRow
icon={<MaterialCommunityIcons name="archive-outline" color="black" size={25} />}
title="Arsipkan"
onPress={() => {
AlertKonfirmasi({
title: 'Konfirmasi',
desc: 'Apakah anda yakin ingin mengarsipkan diskusi?',
onPress: () => {
setVisible(false)
ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT)
}
})
}}
/>
</View>
}
</DrawerBottom>
</>
)

View File

@@ -3,15 +3,16 @@ import { useState } from "react";
import { Image } from "react-native";
type Props = {
src: string
src: string,
size?: 'sm' | 'xs'
}
export default function ImageUser({ src }: Props) {
export default function ImageUser({ src, size }: Props) {
const [error, setError] = useState(false)
return (
<Image
source={error ? require('../assets/images/user.jpg') : { uri: src }}
style={[Styles.userProfileSmall]}
style={[size == 'xs' ? Styles.userProfileExtraSmall : Styles.userProfileSmall]}
onError={() =>
setError(true)
}

View File

@@ -16,10 +16,11 @@ type Props = {
width?: number
bg?: 'white' | 'transparent'
value?: string
disable?: boolean
};
export function InputForm({ label, value, placeholder, onChange, info, error, errorText, required, itemLeft, itemRight, type, round, width, bg }: Props) {
export function InputForm({ label, value, placeholder, onChange, info, disable, error, errorText, required, itemLeft, itemRight, type, round, width, bg }: Props) {
const lebar = Dimensions.get("window").width;
if (itemLeft != undefined || itemRight != undefined) {
@@ -36,6 +37,7 @@ export function InputForm({ label, value, placeholder, onChange, info, error, er
<View style={[Styles.inputRoundForm, itemRight != undefined ? Styles.inputRoundFormRight : Styles.inputRoundFormLeft, round && Styles.round30, { backgroundColor: bg && bg == 'white' ? 'white' : 'transparent' }, Styles.pv10]}>
{itemRight != undefined ? itemRight : itemLeft}
<TextInput
editable={!disable}
value={value}
placeholder={placeholder}
keyboardType={type}