Merge pull request 'amalia/21-agustus-25' (#27) from amalia/21-agustus-25 into join

Reviewed-on: bip/mobile-darmasaba#27
This commit is contained in:
2025-08-21 17:37:39 +08:00
43 changed files with 170 additions and 151 deletions

View File

@@ -65,8 +65,9 @@ export default {
}, },
URL_API: process.env.URL_API, URL_API: process.env.URL_API,
URL_OTP: process.env.URL_OTP, URL_OTP: process.env.URL_OTP,
URL_STORAGE : process.env.URL_STORAGE, URL_STORAGE: process.env.URL_STORAGE,
URL_FIREBASE_DB : process.env.URL_FIREBASE_DB URL_FIREBASE_DB: process.env.URL_FIREBASE_DB,
PASS_ENC: process.env.PASS_ENC
} }
} }
}; };

View File

@@ -2,6 +2,7 @@ import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiEditBanner, apiGetBanner, apiGetBannerOne } from "@/lib/api"; import { apiEditBanner, apiGetBanner, apiGetBannerOne } from "@/lib/api";
import { setEntities } from "@/lib/bannerSlice"; import { setEntities } from "@/lib/bannerSlice";
@@ -50,7 +51,7 @@ export default function EditBanner() {
const hasil = await decryptToken(String(token?.current)); const hasil = await decryptToken(String(token?.current));
const data = await apiGetBannerOne({ user: hasil, id }); const data = await apiGetBannerOne({ user: hasil, id });
setSelectedImage({ setSelectedImage({
uri: `https://wibu-storage.wibudev.com/api/files/${data.data.image}`, uri: `${ConstEnv.url_storage}/files/${data.data.image}`,
}); });
setTitle(data.data.title); setTitle(data.data.title);
}; };

View File

@@ -5,6 +5,7 @@ import ButtonBackHeader from "@/components/buttonBackHeader"
import DrawerBottom from "@/components/drawerBottom" import DrawerBottom from "@/components/drawerBottom"
import MenuItemRow from "@/components/menuItemRow" import MenuItemRow from "@/components/menuItemRow"
import ModalLoading from "@/components/modalLoading" import ModalLoading from "@/components/modalLoading"
import { ConstEnv } from "@/constants/ConstEnv"
import Styles from "@/constants/Styles" import Styles from "@/constants/Styles"
import { apiDeleteBanner, apiGetBanner } from "@/lib/api" import { apiDeleteBanner, apiGetBanner } from "@/lib/api"
import { setEntities } from "@/lib/bannerSlice" import { setEntities } from "@/lib/bannerSlice"
@@ -20,7 +21,6 @@ import * as mime from 'react-native-mime-types'
import Toast from "react-native-toast-message" import Toast from "react-native-toast-message"
import { useDispatch, useSelector } from "react-redux" import { useDispatch, useSelector } from "react-redux"
type Props = { type Props = {
id: string id: string
title: string title: string
@@ -71,7 +71,7 @@ export default function BannerList() {
const openFile = () => { const openFile = () => {
setModal(false) setModal(false)
setLoadingOpen(true) setLoadingOpen(true)
let remoteUrl = 'https://wibu-storage.wibudev.com/api/files/' + selectFile?.image; let remoteUrl = ConstEnv.url_storage + '/files/' + selectFile?.image;
const fileName = selectFile?.title + '.' + selectFile?.extension; const fileName = selectFile?.title + '.' + selectFile?.extension;
let localPath = `${FileSystem.documentDirectory}/${fileName}`; let localPath = `${FileSystem.documentDirectory}/${fileName}`;
const mimeType = mime.lookup(fileName) const mimeType = mime.lookup(fileName)
@@ -133,7 +133,7 @@ export default function BannerList() {
borderType="all" borderType="all"
icon={ icon={
<Image <Image
source={{ uri: `https://wibu-storage.wibudev.com/api/files/${index.image}` }} source={{ uri: `${ConstEnv.url_storage}/files/${index.image}` }}
style={[Styles.imgListBanner]} style={[Styles.imgListBanner]}
/> />
} }

View File

@@ -8,6 +8,7 @@ import Skeleton from "@/components/skeleton";
import SkeletonContent from "@/components/skeletonContent"; import SkeletonContent from "@/components/skeletonContent";
import Text from '@/components/Text'; import Text from '@/components/Text';
import { ColorsStatus } from "@/constants/ColorsStatus"; import { ColorsStatus } from "@/constants/ColorsStatus";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetDiscussionGeneralOne, apiSendDiscussionGeneralCommentar } from "@/lib/api"; import { apiGetDiscussionGeneralOne, apiSendDiscussionGeneralCommentar } from "@/lib/api";
import { getDB } from "@/lib/firebaseDatabase"; import { getDB } from "@/lib/firebaseDatabase";
@@ -184,7 +185,7 @@ export default function DetailDiscussionGeneral() {
key={i} key={i}
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} size="xs" /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="xs" />
} }
title={item.username} title={item.username}
rightTopInfo={item.createdAt} rightTopInfo={item.createdAt}

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from '@/components/Text'; import Text from '@/components/Text';
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiAddMemberDiscussionGeneral, apiGetDiscussionGeneralOne, apiGetUser } from "@/lib/api"; import { apiAddMemberDiscussionGeneral, apiGetDiscussionGeneralOne, apiGetUser } from "@/lib/api";
import { setUpdateDiscussionGeneralDetail } from "@/lib/discussionGeneralDetail"; import { setUpdateDiscussionGeneralDetail } from "@/lib/discussionGeneralDetail";
@@ -121,7 +122,7 @@ export default function AddMemberDiscussionDetail() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -147,7 +148,7 @@ export default function AddMemberDiscussionDetail() {
}} }}
> >
<View style={[Styles.rowItemsCenter]}> <View style={[Styles.rowItemsCenter]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]}>{item.name}</Text> <Text style={[Styles.textDefault]}>{item.name}</Text>
{ {
@@ -156,7 +157,7 @@ export default function AddMemberDiscussionDetail() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -7,6 +7,7 @@ import { InputForm } from "@/components/inputForm";
import ModalSelect from "@/components/modalSelect"; import ModalSelect from "@/components/modalSelect";
import SelectForm from "@/components/selectForm"; import SelectForm from "@/components/selectForm";
import Text from '@/components/Text'; import Text from '@/components/Text';
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiCreateDiscussionGeneral } from "@/lib/api"; import { apiCreateDiscussionGeneral } from "@/lib/api";
import { setUpdateDiscussionGeneralDetail } from "@/lib/discussionGeneralDetail"; import { setUpdateDiscussionGeneralDetail } from "@/lib/discussionGeneralDetail";
@@ -215,7 +216,7 @@ export default function CreateDiscussionGeneral() {
key={index} key={index}
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} size="sm" /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="sm" />
} }
title={item.name} title={item.name}
/> />

View File

@@ -7,6 +7,7 @@ import MenuItemRow from "@/components/menuItemRow";
import SkeletonTwoItem from "@/components/skeletonTwoItem"; import SkeletonTwoItem from "@/components/skeletonTwoItem";
import Text from '@/components/Text'; import Text from '@/components/Text';
import { ColorsStatus } from "@/constants/ColorsStatus"; import { ColorsStatus } from "@/constants/ColorsStatus";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiDeleteMemberDiscussionGeneral, apiGetDiscussionGeneralOne } from "@/lib/api"; import { apiDeleteMemberDiscussionGeneral, apiGetDiscussionGeneralOne } from "@/lib/api";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
@@ -109,7 +110,7 @@ export default function MemberDiscussionDetail() {
key={index} key={index}
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} size="sm" /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="sm" />
} }
title={item.name} title={item.name}
onPress={() => { onPress={() => {

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiAddMemberCalendar, apiGetCalendarOne, apiGetDivisionMember } from "@/lib/api"; import { apiAddMemberCalendar, apiGetCalendarOne, apiGetDivisionMember } from "@/lib/api";
import { setUpdateCalendar } from "@/lib/calendarUpdate"; import { setUpdateCalendar } from "@/lib/calendarUpdate";
@@ -128,7 +129,7 @@ export default function AddMemberCalendarEvent() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -154,7 +155,7 @@ export default function AddMemberCalendarEvent() {
}} }}
> >
<View style={[Styles.rowItemsCenter]}> <View style={[Styles.rowItemsCenter]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10, { width: '80%' }]}> <View style={[Styles.ml10, { width: '80%' }]}>
<Text numberOfLines={1} ellipsizeMode="tail" style={[Styles.textDefault]}>{item.name}</Text> <Text numberOfLines={1} ellipsizeMode="tail" style={[Styles.textDefault]}>{item.name}</Text>
{ {
@@ -163,7 +164,7 @@ export default function AddMemberCalendarEvent() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -7,6 +7,7 @@ import ImageUser from "@/components/imageNew"
import MenuItemRow from "@/components/menuItemRow" import MenuItemRow from "@/components/menuItemRow"
import Skeleton from "@/components/skeleton" import Skeleton from "@/components/skeleton"
import Text from "@/components/Text" import Text from "@/components/Text"
import { ConstEnv } from "@/constants/ConstEnv"
import Styles from "@/constants/Styles" import Styles from "@/constants/Styles"
import { apiDeleteCalendarMember, apiGetCalendarOne, apiGetDivisionOneFeature } from "@/lib/api" import { apiDeleteCalendarMember, apiGetCalendarOne, apiGetDivisionOneFeature } from "@/lib/api"
import { setUpdateCalendar } from "@/lib/calendarUpdate" import { setUpdateCalendar } from "@/lib/calendarUpdate"
@@ -70,7 +71,7 @@ export default function DetailEventCalendar() {
} }
} }
async function handleLoad(loading:boolean) { async function handleLoad(loading: boolean) {
try { try {
setLoading(loading) setLoading(loading)
const hasil = await decryptToken(String(token?.current)); const hasil = await decryptToken(String(token?.current));
@@ -241,7 +242,7 @@ export default function DetailEventCalendar() {
<BorderBottomItem <BorderBottomItem
key={index} key={index}
borderType="bottom" borderType="bottom"
icon={<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} />} icon={<ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} />}
title={item.name} title={item.name}
subtitle={item.email} subtitle={item.email}
onPress={() => { onPress={() => {

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiCreateCalendar, apiGetDivisionMember } from "@/lib/api"; import { apiCreateCalendar, apiGetDivisionMember } from "@/lib/api";
import { setFormCreateCalendar } from "@/lib/calendarCreate"; import { setFormCreateCalendar } from "@/lib/calendarCreate";
@@ -117,7 +118,7 @@ export default function CreateCalendarAddMember() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -140,13 +141,13 @@ export default function CreateCalendarAddMember() {
onPress={() => { onChoose(item.idUser, item.name, item.img) }} onPress={() => { onChoose(item.idUser, item.name, item.img) }}
> >
<View style={[Styles.rowItemsCenter, Styles.w70]}> <View style={[Styles.rowItemsCenter, Styles.w70]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text> <Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text>
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.idUser) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.idUser) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -7,6 +7,7 @@ import LabelStatus from "@/components/labelStatus";
import Skeleton from "@/components/skeleton"; import Skeleton from "@/components/skeleton";
import SkeletonContent from "@/components/skeletonContent"; import SkeletonContent from "@/components/skeletonContent";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { import {
apiGetDiscussionOne, apiGetDiscussionOne,
@@ -220,7 +221,7 @@ export default function DiscussionDetail() {
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser <ImageUser
src={`https://wibu-storage.wibudev.com/api/files/${data?.user_img}`} src={`${ConstEnv.url_storage}/files/${data?.user_img}`}
size="sm" size="sm"
/> />
} }
@@ -267,7 +268,7 @@ export default function DiscussionDetail() {
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser <ImageUser
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
size="xs" size="xs"
/> />
} }

View File

@@ -5,6 +5,7 @@ import InputSearch from "@/components/inputSearch";
import LabelStatus from "@/components/labelStatus"; import LabelStatus from "@/components/labelStatus";
import SkeletonContent from "@/components/skeletonContent"; import SkeletonContent from "@/components/skeletonContent";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetDiscussion } from "@/lib/api"; import { apiGetDiscussion } from "@/lib/api";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
@@ -141,7 +142,7 @@ export default function DiscussionDivision() {
onPress={() => { router.push(`./discussion/${item.id}`) }} onPress={() => { router.push(`./discussion/${item.id}`) }}
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} size="sm" /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="sm" />
} }
title={item.user_name} title={item.user_name}
subtitle={ subtitle={
@@ -170,33 +171,8 @@ export default function DiscussionDivision() {
/> />
} }
/> />
// data.map((item, index) => (
// <BorderBottomItem
// key={index}
// onPress={() => { router.push(`./discussion/${item.id}`) }}
// borderType="bottom"
// icon={
// <ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} size="sm" />
// }
// title={item.user_name}
// subtitle={
// active == "true" ? item.status == 1 ? <LabelStatus category='success' text='BUKA' size="small" /> : <LabelStatus category='error' text='TUTUP' size="small" /> : <></>
// }
// rightTopInfo={item.createdAt}
// desc={item.desc}
// leftBottomInfo={
// <View style={[Styles.rowItemsCenter]}>
// <Ionicons name="chatbox-ellipses-outline" size={18} color="grey" style={Styles.mr05} />
// <Text style={[Styles.textInformation, Styles.cGray, Styles.mb05]}>Diskusikan</Text>
// </View>
// }
// rightBottomInfo={item.total_komentar + ' Komentar'}
// />
// ))
: :
( (<Text style={[Styles.textDefault, Styles.cGray, Styles.mv10, { textAlign: "center" }]}>Tidak ada diskusi</Text>)
<Text style={[Styles.textDefault, Styles.cGray, Styles.mv10, { textAlign: "center" }]}>Tidak ada diskusi</Text>
)
} }
</View> </View>
</View> </View>

View File

@@ -13,6 +13,7 @@ import ModalSelectMultiple from "@/components/modalSelectMultiple";
import Skeleton from "@/components/skeleton"; import Skeleton from "@/components/skeleton";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ColorsStatus } from "@/constants/ColorsStatus"; import { ColorsStatus } from "@/constants/ColorsStatus";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { import {
apiDocumentDelete, apiDocumentDelete,
@@ -268,7 +269,7 @@ export default function DocumentDivision() {
const openFile = (item: Props) => { const openFile = (item: Props) => {
if (Platform.OS == 'android') setLoadingOpen(true) if (Platform.OS == 'android') setLoadingOpen(true)
let remoteUrl = 'https://wibu-storage.wibudev.com/api/files/' + item.idStorage; let remoteUrl = ConstEnv.url_storage + '/files/' + item.idStorage;
const fileName = item.name + '.' + item.extension; const fileName = item.name + '.' + item.extension;
let localPath = `${FileSystem.documentDirectory}/${fileName}`; let localPath = `${FileSystem.documentDirectory}/${fileName}`;
const mimeType = mime.lookup(fileName) const mimeType = mime.lookup(fileName)
@@ -440,20 +441,6 @@ export default function DocumentDivision() {
{(selectedFiles.length > 0 || dariSelectAll) && ( {(selectedFiles.length > 0 || dariSelectAll) && (
<View style={[ColorsStatus.primary, Styles.bottomMenuSelectDocument]}> <View style={[ColorsStatus.primary, Styles.bottomMenuSelectDocument]}>
<View style={[Styles.rowItemsCenter, { justifyContent: "center" }]}> <View style={[Styles.rowItemsCenter, { justifyContent: "center" }]}>
{/* <MenuItemRow
icon={
<MaterialCommunityIcons
name="download-outline"
color="white"
size={25}
/>
}
title="Unduh"
onPress={() => { }}
column="many"
color="white"
disabled={selectedFiles.length == 0 || !copyAllowed}
/> */}
<MenuItemRow <MenuItemRow
icon={ icon={
<MaterialCommunityIcons <MaterialCommunityIcons

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiAddMemberTask, apiGetDivisionMember, apiGetTaskOne } from "@/lib/api"; import { apiAddMemberTask, apiGetDivisionMember, apiGetTaskOne } from "@/lib/api";
import { setUpdateTask } from "@/lib/taskUpdate"; import { setUpdateTask } from "@/lib/taskUpdate";
@@ -123,7 +124,7 @@ export default function AddMemberTask() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -149,7 +150,7 @@ export default function AddMemberTask() {
}} }}
> >
<View style={[Styles.rowItemsCenter, Styles.w80]}> <View style={[Styles.rowItemsCenter, Styles.w80]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1}>{item.name}</Text> <Text style={[Styles.textDefault]} numberOfLines={1}>{item.name}</Text>
{ {
@@ -158,7 +159,7 @@ export default function AddMemberTask() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.idUser) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.idUser) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -9,6 +9,7 @@ import MenuItemRow from "@/components/menuItemRow";
import ModalSelect from "@/components/modalSelect"; import ModalSelect from "@/components/modalSelect";
import SectionListAddTask from "@/components/project/sectionListAddTask"; import SectionListAddTask from "@/components/project/sectionListAddTask";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiCreateTask } from "@/lib/api"; import { apiCreateTask } from "@/lib/api";
import { setMemberChoose } from "@/lib/memberChoose"; import { setMemberChoose } from "@/lib/memberChoose";
@@ -189,7 +190,7 @@ export default function CreateTaskDivision() {
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser <ImageUser
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
size="sm" size="sm"
/> />
} }

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetDivisionMember } from "@/lib/api"; import { apiGetDivisionMember } from "@/lib/api";
import { setMemberChoose } from "@/lib/memberChoose"; import { setMemberChoose } from "@/lib/memberChoose";
@@ -93,7 +94,7 @@ export default function AddMemberCreateTask() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -118,13 +119,13 @@ export default function AddMemberCreateTask() {
}} }}
> >
<View style={[Styles.rowItemsCenter]}> <View style={[Styles.rowItemsCenter]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]}>{item.name}</Text> <Text style={[Styles.textDefault]}>{item.name}</Text>
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.idUser) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.idUser) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiAddMemberDivision, apiGetDivisionOneDetail, apiGetUser } from "@/lib/api"; import { apiAddMemberDivision, apiGetDivisionOneDetail, apiGetUser } from "@/lib/api";
import { setUpdateDivision } from "@/lib/divisionUpdate"; import { setUpdateDivision } from "@/lib/divisionUpdate";
@@ -124,7 +125,7 @@ export default function AddMemberDivision() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -150,7 +151,7 @@ export default function AddMemberDivision() {
}} }}
> >
<View style={[Styles.rowItemsCenter]}> <View style={[Styles.rowItemsCenter]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text> <Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text>
{ {
@@ -159,7 +160,7 @@ export default function AddMemberDivision() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -8,6 +8,7 @@ import SectionCancel from "@/components/sectionCancel"
import Skeleton from "@/components/skeleton" import Skeleton from "@/components/skeleton"
import SkeletonTwoItem from "@/components/skeletonTwoItem" import SkeletonTwoItem from "@/components/skeletonTwoItem"
import { ColorsStatus } from "@/constants/ColorsStatus" import { ColorsStatus } from "@/constants/ColorsStatus"
import { ConstEnv } from "@/constants/ConstEnv"
import Styles from "@/constants/Styles" import Styles from "@/constants/Styles"
import { apiDeleteMemberDivision, apiGetDivisionOneDetail, apiUpdateStatusAdminDivision } from "@/lib/api" import { apiDeleteMemberDivision, apiGetDivisionOneDetail, apiUpdateStatusAdminDivision } from "@/lib/api"
import { useAuthSession } from "@/providers/AuthProvider" import { useAuthSession } from "@/providers/AuthProvider"
@@ -188,7 +189,7 @@ export default function InformationDivision() {
borderType="bottom" borderType="bottom"
onPress={() => { dataDetail?.isActive && handleChooseMember(item) }} onPress={() => { dataDetail?.isActive && handleChooseMember(item) }}
icon={ icon={
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} size="sm" /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="sm" />
} }
title={item.name} title={item.name}
rightTopInfo={item.isAdmin ? "Admin" : "Anggota"} rightTopInfo={item.isAdmin ? "Admin" : "Anggota"}

View File

@@ -2,6 +2,7 @@ import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiCreateDivision } from "@/lib/api"; import { apiCreateDivision } from "@/lib/api";
import { setFormCreateDivision } from "@/lib/divisionCreate"; import { setFormCreateDivision } from "@/lib/divisionCreate";
@@ -103,7 +104,7 @@ export default function CreateDivisionAddAdmin() {
}} }}
> >
<View style={[Styles.rowItemsCenter, Styles.w70]}> <View style={[Styles.rowItemsCenter, Styles.w70]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text> <Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text>
{ {
@@ -112,7 +113,7 @@ export default function CreateDivisionAddAdmin() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i == item.idUser) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i == item.idUser) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetUser } from "@/lib/api"; import { apiGetUser } from "@/lib/api";
import { setFormCreateDivision } from "@/lib/divisionCreate"; import { setFormCreateDivision } from "@/lib/divisionCreate";
@@ -86,7 +87,7 @@ export default function CreateDivisionAddMember() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -112,7 +113,7 @@ export default function CreateDivisionAddMember() {
}} }}
> >
<View style={[Styles.rowItemsCenter, Styles.w70]}> <View style={[Styles.rowItemsCenter, Styles.w70]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text> <Text style={[Styles.textDefault]} numberOfLines={1} ellipsizeMode="tail">{item.name}</Text>
{ {
@@ -121,7 +122,7 @@ export default function CreateDivisionAddMember() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -4,6 +4,7 @@ import { InputForm } from "@/components/inputForm";
import ModalSelect from "@/components/modalSelect"; import ModalSelect from "@/components/modalSelect";
import SelectForm from "@/components/selectForm"; import SelectForm from "@/components/selectForm";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiEditProfile, apiGetProfile } from "@/lib/api"; import { apiEditProfile, apiGetProfile } from "@/lib/api";
import { setEntities } from "@/lib/entitiesSlice"; import { setEntities } from "@/lib/entitiesSlice";
@@ -252,7 +253,7 @@ export default function EditProfile() {
) : ( ) : (
<Pressable onPress={pickImageAsync}> <Pressable onPress={pickImageAsync}>
<Image <Image
source={errorImg ? require("../../assets/images/user.jpg") : { uri: `https://wibu-storage.wibudev.com/api/files/${data?.img}` }} source={errorImg ? require("../../assets/images/user.jpg") : { uri: `${ConstEnv.url_storage}/files/${data?.img}` }}
style={[Styles.userProfileBig]} style={[Styles.userProfileBig]}
onError={() => { setErrorImg(true) }} onError={() => { setErrorImg(true) }}
/> />

View File

@@ -5,6 +5,7 @@ import LabelStatus from "@/components/labelStatus";
import HeaderRightMemberDetail from "@/components/member/headerMemberDetail"; import HeaderRightMemberDetail from "@/components/member/headerMemberDetail";
import Skeleton from "@/components/skeleton"; import Skeleton from "@/components/skeleton";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import { valueRoleUser } from "@/constants/RoleUser"; import { valueRoleUser } from "@/constants/RoleUser";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetProfile } from "@/lib/api"; import { apiGetProfile } from "@/lib/api";
@@ -93,7 +94,7 @@ export default function MemberDetail() {
</> </>
: :
<> <>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${data?.img}`} size="lg" /> <ImageUser src={`${ConstEnv.url_storage}/files/${data?.img}`} size="lg" />
<Text style={[Styles.textSubtitle, Styles.cWhite, Styles.mt10]}>{data?.name}</Text> <Text style={[Styles.textSubtitle, Styles.cWhite, Styles.mt10]}>{data?.name}</Text>
<Text style={[Styles.textMediumNormal, Styles.cWhite]}>{data?.role}</Text> <Text style={[Styles.textMediumNormal, Styles.cWhite]}>{data?.role}</Text>
</> </>

View File

@@ -4,6 +4,7 @@ import { InputForm } from "@/components/inputForm";
import ModalSelect from "@/components/modalSelect"; import ModalSelect from "@/components/modalSelect";
import SelectForm from "@/components/selectForm"; import SelectForm from "@/components/selectForm";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiEditUser, apiGetProfile } from "@/lib/api"; import { apiEditUser, apiGetProfile } from "@/lib/api";
import { setUpdateMember } from "@/lib/memberSlice"; import { setUpdateMember } from "@/lib/memberSlice";
@@ -83,7 +84,7 @@ export default function EditMember() {
try { try {
const response = await apiGetProfile({ id: id }); const response = await apiGetProfile({ id: id });
setData(response.data); setData(response.data);
setSelectedImage({ uri: `https://wibu-storage.wibudev.com/api/files/${response.data.img}`, }); setSelectedImage({ uri: `${ConstEnv.url_storage}/files/${response.data.img}`, });
setChoosePosition({ setChoosePosition({
val: response.data.idPosition, val: response.data.idPosition,
label: response.data.position, label: response.data.position,
@@ -270,7 +271,7 @@ export default function EditMember() {
errorImg ? errorImg ?
<Pressable onPress={pickImageAsync}> <Pressable onPress={pickImageAsync}>
<Image <Image
source={errorImg ? require("../../../../assets/images/user.jpg") : { uri: `https://wibu-storage.wibudev.com/api/files/${data?.img}` }} source={errorImg ? require("../../../../assets/images/user.jpg") : { uri: `${ConstEnv.url_storage}/files/${data?.img}` }}
style={[Styles.userProfileBig]} style={[Styles.userProfileBig]}
onError={() => { setErrorImg(true) }} onError={() => { setErrorImg(true) }}
/> />

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import SkeletonTwoItem from "@/components/skeletonTwoItem"; import SkeletonTwoItem from "@/components/skeletonTwoItem";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetUser } from "@/lib/api"; import { apiGetUser } from "@/lib/api";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
@@ -150,7 +151,7 @@ export default function Index() {
onPress={() => { router.push(`/member/${item.id}`) }} onPress={() => { router.push(`/member/${item.id}`) }}
borderType="all" borderType="all"
icon={ icon={
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} />
} }
title={item.name} title={item.name}
subtitle={`${item.group} - ${item.position}`} subtitle={`${item.group} - ${item.position}`}

View File

@@ -3,6 +3,7 @@ import ButtonBackHeader from "@/components/buttonBackHeader";
import { ButtonHeader } from "@/components/buttonHeader"; import { ButtonHeader } from "@/components/buttonHeader";
import ItemDetailMember from "@/components/itemDetailMember"; import ItemDetailMember from "@/components/itemDetailMember";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
import { AntDesign } from "@expo/vector-icons"; import { AntDesign } from "@expo/vector-icons";
@@ -41,7 +42,7 @@ export default function Profile() {
<View style={{ flexDirection: 'column' }}> <View style={{ flexDirection: 'column' }}>
<View style={[Styles.wrapHeadViewMember]}> <View style={[Styles.wrapHeadViewMember]}>
<Image <Image
source={error ? require("../../assets/images/user.jpg") : { uri: `https://wibu-storage.wibudev.com/api/files/${entities.img}` }} source={error ? require("../../assets/images/user.jpg") : { uri: `${ConstEnv.url_storage}/files/${entities.img}` }}
onError={() => { setError(true) }} onError={() => { setError(true) }}
style={[Styles.userProfileBig]} style={[Styles.userProfileBig]}
/> />

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiAddMemberProject, apiGetProjectOne, apiGetUser } from "@/lib/api"; import { apiAddMemberProject, apiGetProjectOne, apiGetUser } from "@/lib/api";
import { setUpdateProject } from "@/lib/projectUpdate"; import { setUpdateProject } from "@/lib/projectUpdate";
@@ -122,7 +123,7 @@ export default function AddMemberProject() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -147,7 +148,7 @@ export default function AddMemberProject() {
}} }}
> >
<View style={[Styles.rowItemsCenter, Styles.w80]}> <View style={[Styles.rowItemsCenter, Styles.w80]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1}>{item.name}</Text> <Text style={[Styles.textDefault]} numberOfLines={1}>{item.name}</Text>
{ {
@@ -156,7 +157,7 @@ export default function AddMemberProject() {
</View> </View>
</View> </View>
{ {
selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'}/> selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} />
} }
</Pressable> </Pressable>
) )

View File

@@ -10,6 +10,7 @@ import ModalSelect from "@/components/modalSelect";
import SectionListAddTask from "@/components/project/sectionListAddTask"; import SectionListAddTask from "@/components/project/sectionListAddTask";
import SelectForm from "@/components/selectForm"; import SelectForm from "@/components/selectForm";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiCreateProject } from "@/lib/api"; import { apiCreateProject } from "@/lib/api";
import { setGroupChoose } from "@/lib/groupChoose"; import { setGroupChoose } from "@/lib/groupChoose";
@@ -300,7 +301,7 @@ export default function CreateProject() {
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser <ImageUser
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
size="sm" size="sm"
/> />
} }

View File

@@ -4,6 +4,7 @@ import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from "@/components/Text"; import Text from "@/components/Text";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetUser } from "@/lib/api"; import { apiGetUser } from "@/lib/api";
import { setMemberChoose } from "@/lib/memberChoose"; import { setMemberChoose } from "@/lib/memberChoose";
@@ -100,7 +101,7 @@ export default function AddMemberCreateProject() {
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -125,7 +126,7 @@ export default function AddMemberCreateProject() {
}} }}
> >
<View style={[Styles.rowItemsCenter]}> <View style={[Styles.rowItemsCenter]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}> <View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]}>{item.name}</Text> <Text style={[Styles.textDefault]}>{item.name}</Text>
</View> </View>

View File

@@ -3,6 +3,7 @@ import ButtonBackHeader from "@/components/buttonBackHeader";
import InputSearch from "@/components/inputSearch"; import InputSearch from "@/components/inputSearch";
import Text from '@/components/Text'; import Text from '@/components/Text';
import { ColorsStatus } from "@/constants/ColorsStatus"; import { ColorsStatus } from "@/constants/ColorsStatus";
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetSearch } from "@/lib/api"; import { apiGetSearch } from "@/lib/api";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
@@ -92,7 +93,7 @@ export default function Search() {
<BorderBottomItem <BorderBottomItem
borderType="bottom" borderType="bottom"
icon={<Image icon={<Image
source={{ uri: `https://wibu-storage.wibudev.com/api/files/${item.img}` }} source={{ uri: `${ConstEnv.url_storage}/files/${item.img}` }}
style={[Styles.userProfileSmall]} style={[Styles.userProfileSmall]}
/>} />}
title={item.name} title={item.name}

View File

@@ -1,5 +1,6 @@
import { ButtonForm } from "@/components/buttonForm"; import { ButtonForm } from "@/components/buttonForm";
import Text from '@/components/Text'; import Text from '@/components/Text';
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
import CryptoES from "crypto-es"; import CryptoES from "crypto-es";
@@ -19,10 +20,7 @@ export default function Index() {
const login = (): void => { const login = (): void => {
const random: string = 'contohLoginMobileDarmasaba'; const random: string = 'contohLoginMobileDarmasaba';
var mytexttoEncryption = "contohLoginMobileDarmasaba" var mytexttoEncryption = "contohLoginMobileDarmasaba"
const encrypted = CryptoES.AES.encrypt(mytexttoEncryption, "your password").toString(); const encrypted = CryptoES.AES.encrypt(mytexttoEncryption, ConstEnv.pass_encrypt).toString();
// var C = require("crypto-js");
// var Decrypted = C.AES.decrypt(encrypted, "your password");
// var result = Decrypted.toString(C.enc.Utf8);
signIn(encrypted); signIn(encrypted);
} }
return ( return (

BIN
bun.lockb

Binary file not shown.

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetDivisionOneFeature } from "@/lib/api"; import { apiGetDivisionOneFeature } from "@/lib/api";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
@@ -8,11 +9,11 @@ import { useLocalSearchParams } from "expo-router";
import * as Sharing from 'expo-sharing'; import * as Sharing from 'expo-sharing';
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Alert, Dimensions, Platform, Pressable, View } from "react-native"; import { Alert, Dimensions, Platform, Pressable, View } from "react-native";
import Text from "../Text";
import * as mime from 'react-native-mime-types'; import * as mime from 'react-native-mime-types';
import { ICarouselInstance } from "react-native-reanimated-carousel"; import { ICarouselInstance } from "react-native-reanimated-carousel";
import Skeleton from "../skeleton";
import ModalLoading from "../modalLoading"; import ModalLoading from "../modalLoading";
import Skeleton from "../skeleton";
import Text from "../Text";
type Props = { type Props = {
id: string id: string
@@ -52,7 +53,7 @@ export default function FileDivisionDetail() {
const openFile = (item: Props) => { const openFile = (item: Props) => {
if (Platform.OS == 'android') setLoadingOpen(true) if (Platform.OS == 'android') setLoadingOpen(true)
let remoteUrl = 'https://wibu-storage.wibudev.com/api/files/' + item.idStorage; let remoteUrl = ConstEnv.url_storage + '/files/' + item.idStorage;
const fileName = item.name + '.' + item.extension; const fileName = item.name + '.' + item.extension;
let localPath = `${FileSystem.documentDirectory}/${fileName}`; let localPath = `${FileSystem.documentDirectory}/${fileName}`;
const mimeType = mime.lookup(fileName) const mimeType = mime.lookup(fileName)

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiGetBanner, apiGetProfile } from "@/lib/api"; import { apiGetBanner, apiGetProfile } from "@/lib/api";
import { setEntities } from "@/lib/bannerSlice"; import { setEntities } from "@/lib/bannerSlice";
@@ -50,7 +51,7 @@ export default function CaraouselHome() {
onProgressChange={progress} onProgressChange={progress}
renderItem={({ index }) => ( renderItem={({ index }) => (
<Image <Image
source={{ uri: `https://wibu-storage.wibudev.com/api/files/${entities[index].image}` }} source={{ uri: `${ConstEnv.url_storage}/files/${entities[index].image}` }}
style={[Styles.caraoselContent]} style={[Styles.caraoselContent]}
/> />
)} )}

View File

@@ -1,8 +1,9 @@
import { ColorsStatus } from "@/constants/ColorsStatus"; import { ColorsStatus } from "@/constants/ColorsStatus";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { stringToDate, stringToDateTime } from "@/lib/fun_stringToDate";
import DateTimePicker from "@react-native-community/datetimepicker"; import DateTimePicker from "@react-native-community/datetimepicker";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useState } from "react"; import { useEffect, useState } from "react";
import { Platform, Pressable, View } from "react-native"; import { Platform, Pressable, View } from "react-native";
import Text from "./Text"; import Text from "./Text";
import ModalFloat from "./modalFloat"; import ModalFloat from "./modalFloat";
@@ -26,20 +27,50 @@ type Props = {
export function InputDate({ label, value, placeholder, onChange, info, disable, error, errorText, required, mode, round, width, }: Props) { export function InputDate({ label, value, placeholder, onChange, info, disable, error, errorText, required, mode, round, width, }: Props) {
const [modal, setModal] = useState(false); const [modal, setModal] = useState(false);
const [valueFix, setValueFix] = useState(new Date())
const [valueFirst, setValueFirst] = useState("")
const onChangeDate = (type: string, selectedDate: any) => { const onChangeDate = (type: string, selectedDate: any) => {
if (type === "set") { if (type === "set") {
let formatted = ""
if (mode == "date") { if (mode == "date") {
onChange(dayjs(selectedDate).format("DD-MM-YYYY")) formatted = dayjs(selectedDate).format("DD-MM-YYYY")
} else if (mode == "time") { } else if (mode == "time") {
onChange(dayjs(selectedDate).format("HH:mm")) formatted = dayjs(selectedDate).format("HH:mm")
}
setValueFirst(formatted)
if (Platform.OS == "android") {
onChange(formatted)
setModal(false)
} }
setModal(false)
} else {
setModal(false);
} }
}; };
function onSetValue() {
onChange(valueFirst)
setModal(false)
}
function changeValue() {
if (value) {
let valDate = new Date()
if (mode == "date") {
valDate = stringToDate(value)
} else if (mode == "time") {
valDate = stringToDateTime("", value)
}
setValueFix(valDate)
}
}
useEffect(() => {
if (modal) changeValue()
}, [value, modal])
return ( return (
<> <>
<View style={[Styles.mb10]}> <View style={[Styles.mb10]}>
@@ -63,23 +94,24 @@ export function InputDate({ label, value, placeholder, onChange, info, disable,
<ModalFloat <ModalFloat
isVisible={modal} isVisible={modal}
setVisible={setModal} setVisible={setModal}
onSubmit={() => { }} onSubmit={() => { onSetValue() }}
buttonHide
disableSubmit
title={mode == "date" ? "Pilih Tanggal" : mode == "time" ? "Pilih Jam" : "Pilih Tanggal & Jam"}> title={mode == "date" ? "Pilih Tanggal" : mode == "time" ? "Pilih Jam" : "Pilih Tanggal & Jam"}>
<DateTimePicker <DateTimePicker
value={new Date()} value={valueFix}
mode={mode} mode={mode}
display="spinner" display="spinner"
onChange={(event, date) => { onChangeDate(event.type, date) }} onChange={(event, date) => {
onChangeDate(event.type, date)
}}
onTouchCancel={() => setModal(false)} onTouchCancel={() => setModal(false)}
/> />
</ModalFloat> </ModalFloat>
) )
) : ( ) : (
modal && ( modal && (
<DateTimePicker <DateTimePicker
value={new Date()} value={valueFix}
mode={mode} mode={mode}
display="inline" display="inline"
onChange={(event, date) => { onChangeDate(event.type, date) }} onChange={(event, date) => { onChangeDate(event.type, date) }}

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv"
import { valueGender } from "@/constants/Gender" import { valueGender } from "@/constants/Gender"
import { valueRoleUser } from "@/constants/RoleUser" import { valueRoleUser } from "@/constants/RoleUser"
import Styles from "@/constants/Styles" import Styles from "@/constants/Styles"
@@ -140,7 +141,7 @@ export default function ModalSelect({ open, close, title, category, idParent, on
<ImageWithLabel <ImageWithLabel
key={index} key={index}
label={item.name} label={item.name}
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} src={`${ConstEnv.url_storage}/files/${item.img}`}
onClick={() => onChoose(item.idUser, item.name, item.img)} onClick={() => onChoose(item.idUser, item.name, item.img)}
/> />
)) ))
@@ -164,7 +165,7 @@ export default function ModalSelect({ open, close, title, category, idParent, on
category == 'member' category == 'member'
? ?
<View style={[Styles.rowItemsCenter]}> <View style={[Styles.rowItemsCenter]}>
<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} border /> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<Text style={[Styles.textDefault, Styles.ml10]}>{item.name}</Text> <Text style={[Styles.textDefault, Styles.ml10]}>{item.name}</Text>
</View> </View>
: :

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiDeleteFileProject, apiGetProjectOne } from "@/lib/api"; import { apiDeleteFileProject, apiGetProjectOne } from "@/lib/api";
import { setUpdateProject } from "@/lib/projectUpdate"; import { setUpdateProject } from "@/lib/projectUpdate";
@@ -94,7 +95,7 @@ export default function SectionFile({ status, member, refreshing }: { status: nu
const openFile = () => { const openFile = () => {
setModal(false) setModal(false)
setLoadingOpen(true) setLoadingOpen(true)
let remoteUrl = 'https://wibu-storage.wibudev.com/api/files/' + selectFile?.idStorage; let remoteUrl = ConstEnv.url_storage + '/files/' + selectFile?.idStorage;
const fileName = selectFile?.name + '.' + selectFile?.extension; const fileName = selectFile?.name + '.' + selectFile?.extension;
let localPath = `${FileSystem.documentDirectory}/${fileName}`; let localPath = `${FileSystem.documentDirectory}/${fileName}`;
const mimeType = mime.lookup(fileName) const mimeType = mime.lookup(fileName)
@@ -172,14 +173,6 @@ export default function SectionFile({ status, member, refreshing }: { status: nu
openFile() openFile()
}} }}
/> />
{/* <MenuItemRow
icon={<MaterialCommunityIcons name="download" color="black" size={25} />}
title="Download"
onPress={() => {
// download()
// setModal(false)
}}
/> */}
{ {
!member && (entityUser.role == "user" || entityUser.role == "coadmin") ? <></> !member && (entityUser.role == "user" || entityUser.role == "coadmin") ? <></>
: :

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiDeleteProjectMember, apiGetProjectOne } from "@/lib/api"; import { apiDeleteProjectMember, apiGetProjectOne } from "@/lib/api";
import { setUpdateProject } from "@/lib/projectUpdate"; import { setUpdateProject } from "@/lib/projectUpdate";
@@ -112,7 +113,7 @@ export default function SectionMember({ status, refreshing }: { status: number |
<BorderBottomItem <BorderBottomItem
key={index} key={index}
borderType="bottom" borderType="bottom"
icon={<ImageUser src={`https://wibu-storage.wibudev.com/api/files/${item.img}`} />} icon={<ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} />}
title={item.name} title={item.name}
onPress={() => { onPress={() => {
if (status == 3) return if (status == 3) return

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiDeleteFileTask, apiGetTaskOne } from "@/lib/api"; import { apiDeleteFileTask, apiGetTaskOne } from "@/lib/api";
import { setUpdateTask } from "@/lib/taskUpdate"; import { setUpdateTask } from "@/lib/taskUpdate";
@@ -27,7 +28,7 @@ type Props = {
idStorage: string idStorage: string
} }
export default function SectionFileTask({refreshing}: {refreshing: boolean}) { export default function SectionFileTask({ refreshing }: { refreshing: boolean }) {
const [isModal, setModal] = useState(false) const [isModal, setModal] = useState(false)
const { token, decryptToken } = useAuthSession() const { token, decryptToken } = useAuthSession()
const { detail } = useLocalSearchParams<{ detail: string }>() const { detail } = useLocalSearchParams<{ detail: string }>()
@@ -68,7 +69,7 @@ export default function SectionFileTask({refreshing}: {refreshing: boolean}) {
const openFile = () => { const openFile = () => {
setModal(false) setModal(false)
setLoadingOpen(true) setLoadingOpen(true)
let remoteUrl = 'https://wibu-storage.wibudev.com/api/files/' + selectFile?.idStorage; let remoteUrl = ConstEnv.url_storage + '/files/' + selectFile?.idStorage;
const fileName = selectFile?.name + '.' + selectFile?.extension; const fileName = selectFile?.name + '.' + selectFile?.extension;
let localPath = `${FileSystem.documentDirectory}/${fileName}`; let localPath = `${FileSystem.documentDirectory}/${fileName}`;
const mimeType = mime.lookup(fileName) const mimeType = mime.lookup(fileName)
@@ -160,17 +161,8 @@ export default function SectionFileTask({refreshing}: {refreshing: boolean}) {
title="Lihat / Share" title="Lihat / Share"
onPress={() => { onPress={() => {
openFile() openFile()
// setModal(false)
}} }}
/> />
{/* <MenuItemRow
icon={<MaterialCommunityIcons name="download" color="black" size={25} />}
title="Download"
onPress={() => {
setModal(false)
}}
/> */}
<MenuItemRow <MenuItemRow
icon={<Ionicons name="trash" color="black" size={25} />} icon={<Ionicons name="trash" color="black" size={25} />}
title="Hapus" title="Hapus"

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from "@/constants/ConstEnv";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { apiDeleteTaskMember, apiGetTaskOne } from "@/lib/api"; import { apiDeleteTaskMember, apiGetTaskOne } from "@/lib/api";
import { setUpdateTask } from "@/lib/taskUpdate"; import { setUpdateTask } from "@/lib/taskUpdate";
@@ -114,9 +115,7 @@ export default function SectionMemberTask({ refreshing }: { refreshing: boolean
key={index} key={index}
borderType="bottom" borderType="bottom"
icon={ icon={
<ImageUser <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} />
src={`https://wibu-storage.wibudev.com/api/files/${item.img}`}
/>
} }
title={item.name} title={item.name}
onPress={() => { onPress={() => {

View File

@@ -1,5 +1,6 @@
import Constants from 'expo-constants'; import Constants from 'expo-constants';
export const ConstEnv = { export const ConstEnv = {
url_storage : Constants?.expoConfig?.extra?.URL_STORAGE url_storage: Constants?.expoConfig?.extra?.URL_STORAGE,
pass_encrypt: Constants?.expoConfig?.extra?.PASS_ENC
} }

View File

@@ -1,8 +1,9 @@
import { getApp } from '@react-native-firebase/app'; import { getApp } from '@react-native-firebase/app';
import { getDatabase } from '@react-native-firebase/database'; import { getDatabase } from '@react-native-firebase/database';
import Constants from 'expo-constants';
// Ganti URL sesuai punya kamu // Ganti URL sesuai punya kamu
const DATABASE_URL = 'https://mobile-darmasaba-default-rtdb.asia-southeast1.firebasedatabase.app'; const DATABASE_URL = Constants?.expoConfig?.extra?.URL_FIREBASE_DB
export function getDB() { export function getDB() {
return getDatabase(getApp(), DATABASE_URL); return getDatabase(getApp(), DATABASE_URL);

View File

@@ -1,9 +1,18 @@
import dayjs from 'dayjs'; import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";
import { DateType } from "react-native-ui-datepicker"; import { DateType } from "react-native-ui-datepicker";
export function formatDateOnly(date?: DateType, format?: "DD-MM-YYYY" | "YYYY-MM-DD") { dayjs.extend(utc);
if (!date) return ""; dayjs.extend(timezone);
const dateObj = dayjs.isDayjs(date) ? date.toDate() : date;
const iso = new Date(dateObj).toISOString().split("T")[0]; export function formatDateOnly(
return dayjs(iso).format(format || "DD-MM-YYYY"); date?: DateType,
format: "DD-MM-YYYY" | "YYYY-MM-DD" = "DD-MM-YYYY"
) {
if (!date) return "";
return dayjs(date)
.tz(dayjs.tz.guess())
.format(format);
} }

View File

@@ -1,3 +1,4 @@
import { ConstEnv } from '@/constants/ConstEnv';
import { apiRegisteredToken, apiUnregisteredToken } from '@/lib/api'; import { apiRegisteredToken, apiUnregisteredToken } from '@/lib/api';
import { getToken, requestPermission } from '@/lib/useNotification'; import { getToken, requestPermission } from '@/lib/useNotification';
import AsyncStorage from '@react-native-async-storage/async-storage'; import AsyncStorage from '@react-native-async-storage/async-storage';
@@ -41,13 +42,13 @@ export default function AuthProvider({ children }: { children: ReactNode }): Rea
const decryptToken = (async (token: string) => { const decryptToken = (async (token: string) => {
var C = require("crypto-js"); var C = require("crypto-js");
var Decrypted = C.AES.decrypt(token, "your password"); var Decrypted = C.AES.decrypt(token, ConstEnv.pass_encrypt);
var result = Decrypted.toString(C.enc.Utf8); var result = Decrypted.toString(C.enc.Utf8);
return result return result
}) })
const encryptToken = (async (token: string) => { const encryptToken = (async (token: string) => {
var result = CryptoES.AES.encrypt(token, "your password").toString(); var result = CryptoES.AES.encrypt(token, ConstEnv.pass_encrypt).toString();
return result return result
}) })