Merge pull request 'amalia/26-sept-25' (#43) from amalia/26-sept-25 into join
Reviewed-on: bip/mobile-darmasaba#43
This commit is contained in:
@@ -160,7 +160,6 @@ export default function DetailDiscussionGeneral() {
|
|||||||
:
|
:
|
||||||
<LabelStatus category={data.status == 1 ? 'success' : 'error'} text={data.status == 1 ? 'BUKA' : 'TUTUP'} size="small" />
|
<LabelStatus category={data.status == 1 ? 'success' : 'error'} text={data.status == 1 ? 'BUKA' : 'TUTUP'} size="small" />
|
||||||
}
|
}
|
||||||
// rightTopInfo={data?.createdAt}
|
|
||||||
desc={data?.desc}
|
desc={data?.desc}
|
||||||
leftBottomInfo={
|
leftBottomInfo={
|
||||||
<View style={[Styles.rowItemsCenter]}>
|
<View style={[Styles.rowItemsCenter]}>
|
||||||
@@ -224,7 +223,11 @@ export default function DetailDiscussionGeneral() {
|
|||||||
<Pressable onPress={() => {
|
<Pressable onPress={() => {
|
||||||
(komentar != '' && data?.status === 1 && data?.isActive && (memberDiscussion || (entityUser.role != "user" && entityUser.role != "coadmin")))
|
(komentar != '' && data?.status === 1 && data?.isActive && (memberDiscussion || (entityUser.role != "user" && entityUser.role != "coadmin")))
|
||||||
&& handleKomentar()
|
&& handleKomentar()
|
||||||
}}>
|
}}
|
||||||
|
style={[
|
||||||
|
Platform.OS == 'android' && Styles.mb15,
|
||||||
|
]}
|
||||||
|
>
|
||||||
<MaterialIcons name="send" size={25} style={(komentar == '' || data?.status === 2 || !data?.isActive || (!memberDiscussion && (entityUser.role == "user" || entityUser.role == "coadmin"))) ? Styles.cGray : Styles.cDefault} />
|
<MaterialIcons name="send" size={25} style={(komentar == '' || data?.status === 2 || !data?.isActive || (!memberDiscussion && (entityUser.role == "user" || entityUser.role == "coadmin"))) ? Styles.cGray : Styles.cDefault} />
|
||||||
</Pressable>
|
</Pressable>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,12 +324,15 @@ export default function DiscussionDetail() {
|
|||||||
entityUser.role == "cosupadmin") &&
|
entityUser.role == "cosupadmin") &&
|
||||||
handleKomentar();
|
handleKomentar();
|
||||||
}}
|
}}
|
||||||
|
style={[
|
||||||
|
Platform.OS == 'android' && Styles.mb15,
|
||||||
|
]}
|
||||||
>
|
>
|
||||||
<MaterialIcons
|
<MaterialIcons
|
||||||
name="send"
|
name="send"
|
||||||
size={25}
|
size={25}
|
||||||
style={
|
style={
|
||||||
komentar == "" ||
|
[komentar == "" ||
|
||||||
loadingSend ||
|
loadingSend ||
|
||||||
data?.status == 2 ||
|
data?.status == 2 ||
|
||||||
data?.isActive == false ||
|
data?.isActive == false ||
|
||||||
@@ -337,7 +340,8 @@ export default function DiscussionDetail() {
|
|||||||
entityUser.role == "coadmin") &&
|
entityUser.role == "coadmin") &&
|
||||||
!isMemberDivision)
|
!isMemberDivision)
|
||||||
? Styles.cGray
|
? Styles.cGray
|
||||||
: Styles.cDefault
|
: Styles.cDefault,
|
||||||
|
]
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import Styles from "@/constants/Styles";
|
|||||||
import {
|
import {
|
||||||
apiDocumentDelete,
|
apiDocumentDelete,
|
||||||
apiDocumentRename,
|
apiDocumentRename,
|
||||||
|
apiGetDivisionOneFeature,
|
||||||
apiGetDocument,
|
apiGetDocument,
|
||||||
apiShareDocument,
|
apiShareDocument,
|
||||||
} from "@/lib/api";
|
} from "@/lib/api";
|
||||||
@@ -85,6 +86,8 @@ export default function DocumentDivision() {
|
|||||||
const update = useSelector((state: any) => state.dokumenUpdate)
|
const update = useSelector((state: any) => state.dokumenUpdate)
|
||||||
const [refreshing, setRefreshing] = useState(false)
|
const [refreshing, setRefreshing] = useState(false)
|
||||||
const [loadingOpen, setLoadingOpen] = useState(false)
|
const [loadingOpen, setLoadingOpen] = useState(false)
|
||||||
|
const [isMemberDivision, setIsMemberDivision] = useState(false)
|
||||||
|
const entityUser = useSelector((state: any) => state.user)
|
||||||
const [bodyRename, setBodyRename] = useState({
|
const [bodyRename, setBodyRename] = useState({
|
||||||
id: "",
|
id: "",
|
||||||
name: "",
|
name: "",
|
||||||
@@ -93,6 +96,24 @@ export default function DocumentDivision() {
|
|||||||
extension: "",
|
extension: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function handleCheckMember() {
|
||||||
|
try {
|
||||||
|
const hasil = await decryptToken(String(token?.current));
|
||||||
|
const response = await apiGetDivisionOneFeature({
|
||||||
|
id,
|
||||||
|
user: hasil,
|
||||||
|
cat: "check-member",
|
||||||
|
});
|
||||||
|
setIsMemberDivision(response.data);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
handleCheckMember()
|
||||||
|
}, [id])
|
||||||
|
|
||||||
async function handleLoad(loading: boolean) {
|
async function handleLoad(loading: boolean) {
|
||||||
try {
|
try {
|
||||||
setLoading(loading)
|
setLoading(loading)
|
||||||
@@ -347,7 +368,7 @@ export default function DocumentDivision() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<HeaderRightDocument path={path} />
|
<HeaderRightDocument path={path} isMember={isMemberDivision} />
|
||||||
),
|
),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@@ -407,6 +428,7 @@ export default function DocumentDivision() {
|
|||||||
: `${item.name}.${item.extension}`
|
: `${item.name}.${item.extension}`
|
||||||
}
|
}
|
||||||
dateTime={item.createdAt}
|
dateTime={item.createdAt}
|
||||||
|
canChecked={(entityUser.role != "user" && entityUser.role != "coadmin") || isMemberDivision}
|
||||||
onChecked={() => {
|
onChecked={() => {
|
||||||
handleCheckboxChange(index);
|
handleCheckboxChange(index);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ export default function DetailTaskDivision() {
|
|||||||
<SectionTanggalTugasTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
<SectionTanggalTugasTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
||||||
<SectionFileTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
<SectionFileTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
||||||
<SectionLinkTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
<SectionLinkTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
||||||
<SectionMemberTask refreshing={refreshing} isMemberDivision={isMemberDivision} />
|
<SectionMemberTask refreshing={refreshing} isAdminDivision={isAdminDivision} />
|
||||||
</View>
|
</View>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
</SafeAreaView>
|
</SafeAreaView>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { InputForm } from "../inputForm";
|
|||||||
import MenuItemRow from "../menuItemRow";
|
import MenuItemRow from "../menuItemRow";
|
||||||
import ModalFloat from "../modalFloat";
|
import ModalFloat from "../modalFloat";
|
||||||
|
|
||||||
export default function HeaderRightDocument({ path }: { path: string }) {
|
export default function HeaderRightDocument({ path, isMember }: { path: string, isMember: boolean }) {
|
||||||
const [isVisible, setVisible] = useState(false);
|
const [isVisible, setVisible] = useState(false);
|
||||||
const [newFolder, setNewFolder] = useState(false);
|
const [newFolder, setNewFolder] = useState(false);
|
||||||
const { id } = useLocalSearchParams<{ id: string }>();
|
const { id } = useLocalSearchParams<{ id: string }>();
|
||||||
@@ -25,6 +25,7 @@ export default function HeaderRightDocument({ path }: { path: string }) {
|
|||||||
const update = useSelector((state: any) => state.dokumenUpdate)
|
const update = useSelector((state: any) => state.dokumenUpdate)
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [loadingFolder, setLoadingFolder] = useState(false)
|
const [loadingFolder, setLoadingFolder] = useState(false)
|
||||||
|
const entityUser = useSelector((state: any) => state.user)
|
||||||
|
|
||||||
async function handleCreateFolder() {
|
async function handleCreateFolder() {
|
||||||
try {
|
try {
|
||||||
@@ -102,11 +103,14 @@ export default function HeaderRightDocument({ path }: { path: string }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
{
|
||||||
|
((entityUser.role != "user" && entityUser.role != "coadmin") || isMember) &&
|
||||||
<ButtonMenuHeader
|
<ButtonMenuHeader
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
}
|
||||||
<DrawerBottom
|
<DrawerBottom
|
||||||
animation="slide"
|
animation="slide"
|
||||||
isVisible={isVisible}
|
isVisible={isVisible}
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ type Props = {
|
|||||||
checked?: boolean
|
checked?: boolean
|
||||||
onChecked?: () => void
|
onChecked?: () => void
|
||||||
onPress?: () => void
|
onPress?: () => void
|
||||||
|
canChecked?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ItemFile({ category, checked, dateTime, title, onChecked, onPress }: Props) {
|
export default function ItemFile({ category, checked, dateTime, title, onChecked, onPress, canChecked }: Props) {
|
||||||
return (
|
return (
|
||||||
<View style={[Styles.wrapItemBorderBottom]}>
|
<View style={[Styles.wrapItemBorderBottom]}>
|
||||||
<View style={[Styles.rowItemsCenter]}>
|
<View style={[Styles.rowItemsCenter]}>
|
||||||
@@ -43,10 +44,13 @@ export default function ItemFile({ category, checked, dateTime, title, onChecked
|
|||||||
|
|
||||||
</Pressable>
|
</Pressable>
|
||||||
<View style={[Styles.rowSpaceBetween, { flex: 1, alignItems: 'center' }]}>
|
<View style={[Styles.rowSpaceBetween, { flex: 1, alignItems: 'center' }]}>
|
||||||
<Pressable style={[Styles.ml10, {flex:1},]} onPress={onPress}>
|
<Pressable style={[Styles.ml10, { flex: 1 },]} onPress={onPress}>
|
||||||
<Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{title}</Text>
|
<Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{title}</Text>
|
||||||
<Text style={[Styles.textInformation]}>{dateTime}</Text>
|
<Text style={[Styles.textInformation]}>{dateTime}</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
{
|
||||||
|
!canChecked ? <></>
|
||||||
|
:
|
||||||
<Pressable onPress={onChecked}>
|
<Pressable onPress={onChecked}>
|
||||||
{
|
{
|
||||||
checked
|
checked
|
||||||
@@ -55,6 +59,7 @@ export default function ItemFile({ category, checked, dateTime, title, onChecked
|
|||||||
}
|
}
|
||||||
|
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
}
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ export function InputForm({ label, value, placeholder, onChange, info, disable,
|
|||||||
round && Styles.round30,
|
round && Styles.round30,
|
||||||
{ backgroundColor: bg && bg == 'white' ? 'white' : 'transparent' },
|
{ backgroundColor: bg && bg == 'white' ? 'white' : 'transparent' },
|
||||||
error && { borderColor: "red" },
|
error && { borderColor: "red" },
|
||||||
Platform.OS == 'ios' ? { paddingVertical: 10 } : { paddingVertical: 0 },
|
Platform.OS == 'ios' ? { paddingVertical: 10 } : { paddingVertical: 0, minHeight: 40 },
|
||||||
|
{ alignItems: 'center' },
|
||||||
|
multiline
|
||||||
|
? { alignItems: "flex-end" } // multiline: tombol send di bawah
|
||||||
|
: { alignItems: "center" }, // default: tetap di tengah
|
||||||
]}>
|
]}>
|
||||||
{itemRight != undefined ? itemRight : itemLeft}
|
{itemRight != undefined ? itemRight : itemLeft}
|
||||||
<TextInput
|
<TextInput
|
||||||
@@ -58,12 +62,9 @@ export function InputForm({ label, value, placeholder, onChange, info, disable,
|
|||||||
numberOfLines={3}
|
numberOfLines={3}
|
||||||
style={[
|
style={[
|
||||||
Styles.mh05,
|
Styles.mh05,
|
||||||
multiline && { height: '100%', paddingTop: 3 },
|
multiline && { height: '100%', maxHeight: 100 },
|
||||||
{ width: width ? lebar * width / 100 : lebar * 0.78, color: 'black' },
|
{ width: width ? lebar * width / 100 : lebar * 0.78, color: 'black' },
|
||||||
Platform.OS == 'ios' ? { paddingVertical: 1 } : { paddingVertical: 5 },
|
Platform.OS == 'ios' ? { paddingVertical: 1, paddingTop: 3 } : { paddingVertical: 0 },
|
||||||
multiline && {
|
|
||||||
maxHeight: 100, // batas maksimal
|
|
||||||
}
|
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ type Props = {
|
|||||||
position: string;
|
position: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function SectionMemberTask({ refreshing, isMemberDivision }: { refreshing: boolean, isMemberDivision: boolean }) {
|
export default function SectionMemberTask({ refreshing, isAdminDivision }: { refreshing: boolean, isAdminDivision: boolean }) {
|
||||||
const [isModal, setModal] = useState(false);
|
const [isModal, setModal] = useState(false);
|
||||||
const entityUser = useSelector((state: any) => state.user);
|
const entityUser = useSelector((state: any) => state.user);
|
||||||
const { token, decryptToken } = useAuthSession();
|
const { token, decryptToken } = useAuthSession();
|
||||||
@@ -168,7 +168,7 @@ export default function SectionMemberTask({ refreshing, isMemberDivision }: { re
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
(entityUser.role != "user" && entityUser.role != "coadmin") || isMemberDivision
|
(entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision
|
||||||
?
|
?
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={
|
icon={
|
||||||
|
|||||||
Reference in New Issue
Block a user