upd: redesign #23
@@ -328,7 +328,7 @@ export default function DetailAnnouncement() {
|
|||||||
accessibilityLabel="Download or share image"
|
accessibilityLabel="Download or share image"
|
||||||
disabled={loadingOpen}
|
disabled={loadingOpen}
|
||||||
>
|
>
|
||||||
<Text style={{ color: loadingOpen ? 'gray' : 'white', fontSize: 22 }}>⋯</Text>
|
<Text style={{ color: loadingOpen ? 'gray' : 'white', fontSize: 26 }}>⋯</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -205,15 +205,16 @@ export default function CreateAnnouncement() {
|
|||||||
{
|
{
|
||||||
fileForm.length > 0
|
fileForm.length > 0
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, Styles.mb10]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, Styles.mb10, { borderColor: colors.icon + '20' }]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
||||||
{
|
{
|
||||||
fileForm.map((item, index) => (
|
fileForm.map((item, index) => (
|
||||||
<BorderBottomItem
|
<BorderBottomItem
|
||||||
key={index}
|
key={index}
|
||||||
borderType={fileForm.length > 1 ? "bottom" : "none"}
|
borderType={fileForm.length - 1 == index ? "none" : "bottom"}
|
||||||
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
|
bgColor="transparent"
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
onPress={() => { setIndexDelFile(index); setModalFile(true) }}
|
onPress={() => { setIndexDelFile(index); setModalFile(true) }}
|
||||||
/>
|
/>
|
||||||
@@ -232,7 +233,7 @@ export default function CreateAnnouncement() {
|
|||||||
{
|
{
|
||||||
divisionMember.length > 0
|
divisionMember.length > 0
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, { borderColor: colors.icon + '20' }]}>
|
||||||
{
|
{
|
||||||
divisionMember.map((item: { name: any; Division: any }, index: any) => {
|
divisionMember.map((item: { name: any; Division: any }, index: any) => {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ export default function EditAnnouncement() {
|
|||||||
{
|
{
|
||||||
(fileForm.length > 0 || dataFile.filter((val) => !val.delete).length > 0)
|
(fileForm.length > 0 || dataFile.filter((val) => !val.delete).length > 0)
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, Styles.mb10]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, Styles.mb10, { borderColor: colors.icon + '20' }]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
||||||
{
|
{
|
||||||
dataFile.filter((val) => !val.delete).map((item, index) => (
|
dataFile.filter((val) => !val.delete).map((item, index) => (
|
||||||
@@ -268,6 +268,7 @@ export default function EditAnnouncement() {
|
|||||||
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
||||||
title={item.name + '.' + item.extension}
|
title={item.name + '.' + item.extension}
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
|
bgColor="transparent"
|
||||||
onPress={() => { setIndexDelFile({ id: item.id, cat: "oldFile" }); setModalFile(true) }}
|
onPress={() => { setIndexDelFile({ id: item.id, cat: "oldFile" }); setModalFile(true) }}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
@@ -280,6 +281,7 @@ export default function EditAnnouncement() {
|
|||||||
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
|
bgColor="transparent"
|
||||||
onPress={() => { setIndexDelFile({ id: index, cat: "newFile" }); setModalFile(true) }}
|
onPress={() => { setIndexDelFile({ id: index, cat: "newFile" }); setModalFile(true) }}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
@@ -295,7 +297,7 @@ export default function EditAnnouncement() {
|
|||||||
{
|
{
|
||||||
dataMember.length > 0
|
dataMember.length > 0
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, { borderColor: colors.icon + '20' }]}>
|
||||||
{
|
{
|
||||||
dataMember.map((item: { name: any; Division: any }, index: any) => {
|
dataMember.map((item: { name: any; Division: any }, index: any) => {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -110,9 +110,10 @@ export default function Announcement() {
|
|||||||
key={index}
|
key={index}
|
||||||
onPress={() => { router.push(`/announcement/${item.id}`) }}
|
onPress={() => { router.push(`/announcement/${item.id}`) }}
|
||||||
borderType="bottom"
|
borderType="bottom"
|
||||||
|
bgColor="transparent"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.lightGreen]}>
|
<View style={[Styles.iconContent]}>
|
||||||
<MaterialIcons name="campaign" size={25} color={'#384288'} />
|
<MaterialIcons name="campaign" size={25} color={'black'} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title={item.title}
|
title={item.title}
|
||||||
|
|||||||
@@ -253,15 +253,16 @@ export default function CreateDiscussionGeneral() {
|
|||||||
{
|
{
|
||||||
fileForm.length > 0
|
fileForm.length > 0
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, Styles.mb10, { borderColor: colors.icon }]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, Styles.mb10, { borderColor: colors.icon + '20' }]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
||||||
{
|
{
|
||||||
fileForm.map((item, index) => (
|
fileForm.map((item, index) => (
|
||||||
<BorderBottomItem
|
<BorderBottomItem
|
||||||
key={index}
|
key={index}
|
||||||
borderType={fileForm.length > 1 ? "bottom" : "none"}
|
borderType={fileForm.length - 1 == index ? "none" : "bottom"}
|
||||||
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
|
bgColor="transparent"
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
onPress={() => { setIndexDelFile(index); setModalFile(true) }}
|
onPress={() => { setIndexDelFile(index); setModalFile(true) }}
|
||||||
/>
|
/>
|
||||||
@@ -296,17 +297,18 @@ export default function CreateDiscussionGeneral() {
|
|||||||
<Text>Total {entitiesMember.length} Anggota</Text>
|
<Text>Total {entitiesMember.length} Anggota</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, { borderColor: colors.icon }]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, { borderColor: colors.icon + '20' }]}>
|
||||||
{
|
{
|
||||||
entitiesMember.map((item: { img: any; name: any; }, index: any) => {
|
entitiesMember.map((item: { img: any; name: any; }, index: any) => {
|
||||||
return (
|
return (
|
||||||
<BorderBottomItem
|
<BorderBottomItem
|
||||||
key={index}
|
key={index}
|
||||||
borderType="bottom"
|
borderType={entitiesMember.length - 1 == index ? "none" : "bottom"}
|
||||||
icon={
|
icon={
|
||||||
<ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="sm" />
|
<ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} size="xs" />
|
||||||
}
|
}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
|
bgColor="transparent"
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ export default function EditDiscussionGeneral() {
|
|||||||
{
|
{
|
||||||
(fileForm.length > 0 || dataFile.filter((val) => !val.delete).length > 0)
|
(fileForm.length > 0 || dataFile.filter((val) => !val.delete).length > 0)
|
||||||
&&
|
&&
|
||||||
<View>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, Styles.mb10, { borderColor: colors.icon + '20' }]}>
|
||||||
<Text style={[Styles.textDefault]}>File</Text>
|
<Text style={[Styles.textDefault]}>File</Text>
|
||||||
{
|
{
|
||||||
dataFile.filter((val) => !val.delete).map((item, index) => (
|
dataFile.filter((val) => !val.delete).map((item, index) => (
|
||||||
@@ -239,6 +239,7 @@ export default function EditDiscussionGeneral() {
|
|||||||
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
||||||
title={item.name + '.' + item.extension}
|
title={item.name + '.' + item.extension}
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
|
bgColor="transparent"
|
||||||
onPress={() => { setIndexDelFile({ id: item.id, cat: "oldFile" }); setModalFile(true) }}
|
onPress={() => { setIndexDelFile({ id: item.id, cat: "oldFile" }); setModalFile(true) }}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
@@ -251,6 +252,7 @@ export default function EditDiscussionGeneral() {
|
|||||||
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
icon={<MaterialCommunityIcons name="file-outline" size={25} color={colors.text} />}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
|
bgColor="transparent"
|
||||||
onPress={() => { setIndexDelFile({ id: index, cat: "newFile" }); setModalFile(true) }}
|
onPress={() => { setIndexDelFile({ id: index, cat: "newFile" }); setModalFile(true) }}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ export default function CreateCalendarAddMember() {
|
|||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
key={index}
|
key={index}
|
||||||
style={[Styles.itemSelectModal]}
|
style={[Styles.itemSelectModal, {borderColor: colors.icon + '20'}]}
|
||||||
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]}>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import InputSearch from "@/components/inputSearch";
|
import InputSearch from "@/components/inputSearch";
|
||||||
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 Styles from "@/constants/Styles";
|
import Styles from "@/constants/Styles";
|
||||||
import { apiGetCalendarHistory } from "@/lib/api";
|
import { apiGetCalendarHistory } from "@/lib/api";
|
||||||
import { useAuthSession } from "@/providers/AuthProvider";
|
import { useAuthSession } from "@/providers/AuthProvider";
|
||||||
@@ -70,7 +69,7 @@ export default function CalendarHistory() {
|
|||||||
<View>
|
<View>
|
||||||
<InputSearch onChange={(val) => setSearch(val)} />
|
<InputSearch onChange={(val) => setSearch(val)} />
|
||||||
</View>
|
</View>
|
||||||
<View style={[{ flex: 2, }]}>
|
<View style={[{ flex: 2 }, Styles.mt10]}>
|
||||||
{
|
{
|
||||||
loading ?
|
loading ?
|
||||||
arrSkeleton.map((item, index) => (
|
arrSkeleton.map((item, index) => (
|
||||||
@@ -83,7 +82,7 @@ export default function CalendarHistory() {
|
|||||||
getItem={getItem}
|
getItem={getItem}
|
||||||
renderItem={({ item, index }: { item: Props, index: number }) => {
|
renderItem={({ item, index }: { item: Props, index: number }) => {
|
||||||
return (
|
return (
|
||||||
<View key={index} style={[{ flexDirection: 'row' }, Styles.mv05, activeTheme === 'dark' ? { backgroundColor: colors.card } : ColorsStatus.lightGreen, Styles.p10, Styles.round10, { borderBottomWidth: 1, borderColor: colors.background }]}>
|
<View key={index} style={[{ flexDirection: 'row' }, Styles.mb05, Styles.borderAll, { backgroundColor: colors.card }, Styles.p10, Styles.round05, { borderColor: colors.icon + '20' }]}>
|
||||||
<View style={[Styles.mr10, Styles.ph05]}>
|
<View style={[Styles.mr10, Styles.ph05]}>
|
||||||
<Text style={[Styles.textSubtitle]}>{String(item.dateStart)}</Text>
|
<Text style={[Styles.textSubtitle]}>{String(item.dateStart)}</Text>
|
||||||
<Text style={[Styles.textDefault, { textAlign: 'center' }]}>{item.year}</Text>
|
<Text style={[Styles.textDefault, { textAlign: 'center' }]}>{item.year}</Text>
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ export default function DiscussionDivisionEdit() {
|
|||||||
{
|
{
|
||||||
(fileForm.length > 0 || dataFile.filter((val) => !val.delete).length > 0)
|
(fileForm.length > 0 || dataFile.filter((val) => !val.delete).length > 0)
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, Styles.mb10, { borderColor: colors.background, backgroundColor: colors.card }]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, Styles.mb10, { borderColor: colors.background, backgroundColor: colors.card }]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
||||||
{
|
{
|
||||||
dataFile.filter((val) => !val.delete).map((item, index) => (
|
dataFile.filter((val) => !val.delete).map((item, index) => (
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ export default function DiscussionDetail() {
|
|||||||
showBack={true}
|
showBack={true}
|
||||||
onPressLeft={() => router.back()}
|
onPressLeft={() => router.back()}
|
||||||
right={
|
right={
|
||||||
(entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision || isCreator ?
|
((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision || isCreator) ?
|
||||||
<HeaderRightDiscussionDetail
|
<HeaderRightDiscussionDetail
|
||||||
id={detail}
|
id={detail}
|
||||||
status={data?.status}
|
status={data?.status}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export default function CreateDiscussionDivision() {
|
|||||||
{
|
{
|
||||||
fileForm.length > 0
|
fileForm.length > 0
|
||||||
&&
|
&&
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, Styles.mb10, { borderColor: colors.background, backgroundColor: colors.card }]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, Styles.mb10, { borderColor: colors.background, backgroundColor: colors.card }]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>File</Text>
|
||||||
{
|
{
|
||||||
fileForm.map((item, index) => (
|
fileForm.map((item, index) => (
|
||||||
|
|||||||
@@ -382,7 +382,7 @@ export default function DocumentDivision() {
|
|||||||
showBack={(selectedFiles.length > 0 || dariSelectAll) ? false : true}
|
showBack={(selectedFiles.length > 0 || dariSelectAll) ? false : true}
|
||||||
left={
|
left={
|
||||||
<ButtonHeader
|
<ButtonHeader
|
||||||
item={<MaterialIcons name="close" size={20} color="white" />}
|
item={<MaterialIcons name="close" size={25} color="white" />}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
handleBatal();
|
handleBatal();
|
||||||
}}
|
}}
|
||||||
@@ -395,7 +395,7 @@ export default function DocumentDivision() {
|
|||||||
selectedFiles.length > 0 || dariSelectAll ? (
|
selectedFiles.length > 0 || dariSelectAll ? (
|
||||||
<ButtonHeader
|
<ButtonHeader
|
||||||
item={
|
item={
|
||||||
<MaterialIcons name="checklist-rtl" size={20} color="white" />
|
<MaterialIcons name="checklist-rtl" size={25} color="white" />
|
||||||
}
|
}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
handleSelectAll();
|
handleSelectAll();
|
||||||
@@ -495,7 +495,7 @@ export default function DocumentDivision() {
|
|||||||
</View>
|
</View>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
{(selectedFiles.length > 0 || dariSelectAll) && (
|
{(selectedFiles.length > 0 || dariSelectAll) && (
|
||||||
<View style={[ColorsStatus.primary, Styles.bottomMenuSelectDocument]}>
|
<View style={[Styles.bottomMenuSelectDocument, { backgroundColor: colors.header }]}>
|
||||||
<View style={[Styles.rowItemsCenter, { justifyContent: "center" }]}>
|
<View style={[Styles.rowItemsCenter, { justifyContent: "center" }]}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={
|
icon={
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ export default function CreateTaskDivision() {
|
|||||||
<Text>Total {entitiesMember.length} Anggota</Text>
|
<Text>Total {entitiesMember.length} Anggota</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, { backgroundColor: colors.card, borderColor: colors.background }]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, { backgroundColor: colors.card, borderColor: colors.background }]}>
|
||||||
{entitiesMember.map(
|
{entitiesMember.map(
|
||||||
(item: { img: any; name: any }, index: any) => {
|
(item: { img: any; name: any }, index: any) => {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import { ConstEnv } from "@/constants/ConstEnv"
|
|||||||
import Styles from "@/constants/Styles"
|
import Styles from "@/constants/Styles"
|
||||||
import { apiDeleteMemberDivision, apiGetDivisionOneDetail, apiGetDivisionOneFeature, apiUpdateStatusAdminDivision } from "@/lib/api"
|
import { apiDeleteMemberDivision, apiGetDivisionOneDetail, apiGetDivisionOneFeature, apiUpdateStatusAdminDivision } from "@/lib/api"
|
||||||
import { useAuthSession } from "@/providers/AuthProvider"
|
import { useAuthSession } from "@/providers/AuthProvider"
|
||||||
import { Feather, MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"
|
|
||||||
import { useTheme } from "@/providers/ThemeProvider"
|
import { useTheme } from "@/providers/ThemeProvider"
|
||||||
|
import { Feather, MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"
|
||||||
import { router, Stack, useLocalSearchParams } from "expo-router"
|
import { router, Stack, useLocalSearchParams } from "expo-router"
|
||||||
import { useEffect, useState } from "react"
|
import { useEffect, useState } from "react"
|
||||||
import { Pressable, RefreshControl, SafeAreaView, ScrollView, View } from "react-native"
|
import { Pressable, RefreshControl, SafeAreaView, ScrollView, View } from "react-native"
|
||||||
@@ -199,7 +199,7 @@ export default function InformationDivision() {
|
|||||||
}
|
}
|
||||||
<View style={[Styles.mb15]}>
|
<View style={[Styles.mb15]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold, Styles.mb05]}>Deskripsi Divisi</Text>
|
<Text style={[Styles.textDefaultSemiBold, Styles.mb05]}>Deskripsi Divisi</Text>
|
||||||
<View style={[Styles.wrapPaper, { backgroundColor: colors.card, borderColor: colors.background }]}>
|
<View style={[Styles.wrapPaper, Styles.noShadow, { backgroundColor: colors.card, borderWidth: 1, borderColor: colors.icon + '20' }]}>
|
||||||
{loading ?
|
{loading ?
|
||||||
arrSkeleton.map((item, index) => {
|
arrSkeleton.map((item, index) => {
|
||||||
return (
|
return (
|
||||||
@@ -213,7 +213,7 @@ export default function InformationDivision() {
|
|||||||
</View>
|
</View>
|
||||||
<View style={[Styles.mb15]}>
|
<View style={[Styles.mb15]}>
|
||||||
<Text style={[Styles.textDefault, Styles.mv05]}>{dataMember.length} Anggota</Text>
|
<Text style={[Styles.textDefault, Styles.mv05]}>{dataMember.length} Anggota</Text>
|
||||||
<View style={[Styles.wrapPaper, { backgroundColor: colors.card, borderColor: colors.background }]}>
|
<View style={[Styles.wrapPaper, Styles.noShadow, { backgroundColor: colors.card, borderWidth: 1, borderColor: colors.icon + '20' }]}>
|
||||||
{
|
{
|
||||||
((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision) &&
|
((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision) &&
|
||||||
dataDetail?.isActive && (
|
dataDetail?.isActive && (
|
||||||
@@ -221,8 +221,8 @@ export default function InformationDivision() {
|
|||||||
onPress={() => { router.push(`/division/${id}/add-member`) }}
|
onPress={() => { router.push(`/division/${id}/add-member`) }}
|
||||||
borderType="none"
|
borderType="none"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.gray]}>
|
<View style={[Styles.iconContent]}>
|
||||||
<Feather name="user-plus" size={25} color={colors.primary} />
|
<Feather name="user-plus" size={25} color={'black'} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title="Tambah Anggota"
|
title="Tambah Anggota"
|
||||||
@@ -262,8 +262,8 @@ export default function InformationDivision() {
|
|||||||
<View>
|
<View>
|
||||||
<Pressable style={[Styles.wrapItemBorderBottom]} onPress={() => { handleMemberAdmin() }}>
|
<Pressable style={[Styles.wrapItemBorderBottom]} onPress={() => { handleMemberAdmin() }}>
|
||||||
<View style={[Styles.rowItemsCenter]}>
|
<View style={[Styles.rowItemsCenter]}>
|
||||||
<View style={[Styles.iconContent, ColorsStatus.info]}>
|
<View style={[Styles.iconContent]}>
|
||||||
<MaterialIcons name="verified-user" size={25} color={colors.primary} />
|
<MaterialIcons name="verified-user" size={25} color={'black'} />
|
||||||
</View>
|
</View>
|
||||||
<View style={[Styles.rowSpaceBetween, { width: '88%' }]}>
|
<View style={[Styles.rowSpaceBetween, { width: '88%' }]}>
|
||||||
<View style={[Styles.ml10]}>
|
<View style={[Styles.ml10]}>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import Skeleton from "@/components/skeleton";
|
|||||||
import SkeletonTwoItem from "@/components/skeletonTwoItem";
|
import SkeletonTwoItem from "@/components/skeletonTwoItem";
|
||||||
import Text from "@/components/Text";
|
import Text from "@/components/Text";
|
||||||
import WrapTab from "@/components/wrapTab";
|
import WrapTab from "@/components/wrapTab";
|
||||||
import { ColorsStatus } from "@/constants/ColorsStatus";
|
|
||||||
import Styles from "@/constants/Styles";
|
import Styles from "@/constants/Styles";
|
||||||
import { apiGetDivision } from "@/lib/api";
|
import { apiGetDivision } from "@/lib/api";
|
||||||
import { useAuthSession } from "@/providers/AuthProvider";
|
import { useAuthSession } from "@/providers/AuthProvider";
|
||||||
@@ -16,8 +15,7 @@ import {
|
|||||||
AntDesign,
|
AntDesign,
|
||||||
Feather,
|
Feather,
|
||||||
Ionicons,
|
Ionicons,
|
||||||
MaterialCommunityIcons,
|
MaterialCommunityIcons
|
||||||
MaterialIcons,
|
|
||||||
} from "@expo/vector-icons";
|
} from "@expo/vector-icons";
|
||||||
import { router, useLocalSearchParams } from "expo-router";
|
import { router, useLocalSearchParams } from "expo-router";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
@@ -236,10 +234,10 @@ export default function ListDivision() {
|
|||||||
key={index}
|
key={index}
|
||||||
onPress={() => { router.push(`/division/${item.id}`) }}
|
onPress={() => { router.push(`/division/${item.id}`) }}
|
||||||
borderType="bottom"
|
borderType="bottom"
|
||||||
bgColor={colors.card}
|
bgColor="transparent"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.lightGreen]}>
|
<View style={[Styles.iconContent]}>
|
||||||
<MaterialIcons name="group" size={25} color={colors.primary} />
|
<Feather name="users" size={25} color={'black'} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ export default function CreateProject() {
|
|||||||
<Text>Total {entitiesMember.length} Anggota</Text>
|
<Text>Total {entitiesMember.length} Anggota</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View style={[Styles.borderAll, Styles.round10, Styles.p10, { borderColor: colors.icon, backgroundColor: colors.card }]}>
|
<View style={[Styles.borderAll, Styles.round05, Styles.p10, { borderColor: colors.icon, backgroundColor: colors.card }]}>
|
||||||
{entitiesMember.map(
|
{entitiesMember.map(
|
||||||
(item: { img: any; name: any }, index: any) => {
|
(item: { img: any; name: any }, index: any) => {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export default function HeaderRightAnnouncementList() {
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Pengumuman"
|
title="Tambah Pengumuman"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default function HeaderRightBannerList() {
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={() => setVisible(false)} title="Menu">
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={() => setVisible(false)} title="Menu">
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Banner"
|
title="Tambah Banner"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -56,14 +56,14 @@ export default function BorderBottomItem({ title, subtitle, icon, desc, onPress,
|
|||||||
{
|
{
|
||||||
subtitle &&
|
subtitle &&
|
||||||
typeof subtitle == "string"
|
typeof subtitle == "string"
|
||||||
? <Text style={[Styles.textMediumNormal, { lineHeight: 15, color: textColorFix }]}>{subtitle}</Text>
|
? <Text style={[Styles.textMediumNormal, { lineHeight: 15, color: colors.dimmed }]}>{subtitle}</Text>
|
||||||
: <View style={{ alignItems: 'flex-start' }}>
|
: <View style={{ alignItems: 'flex-start' }}>
|
||||||
{subtitle}
|
{subtitle}
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
</View>
|
</View>
|
||||||
{
|
{
|
||||||
rightTopInfo && <Text style={[Styles.textInformation, Styles.mt05, { color: textColorFix }]}>{rightTopInfo}</Text>
|
rightTopInfo && <Text style={[Styles.textInformation, Styles.mt05, { color: colors.dimmed }]}>{rightTopInfo}</Text>
|
||||||
}
|
}
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ export default function BorderBottomItem2({ title, subtitle, icon, desc, onPress
|
|||||||
accessibilityLabel="Download or share image"
|
accessibilityLabel="Download or share image"
|
||||||
disabled={loadingOpen}
|
disabled={loadingOpen}
|
||||||
>
|
>
|
||||||
<Text style={{ color: loadingOpen ? 'gray' : 'white', fontSize: 22 }}>⋯</Text>
|
<Text style={{ color: loadingOpen ? 'gray' : 'white', fontSize: 26 }}>⋯</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ export default function HeaderRightCalendarList() {
|
|||||||
<></>
|
<></>
|
||||||
) : (
|
) : (
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Acara"
|
title="Tambah Acara"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export default function ItemHistoryEvent({ data }: { data: Props }) {
|
|||||||
{
|
{
|
||||||
data.length > 0 ? (
|
data.length > 0 ? (
|
||||||
data.map((item, index) => (
|
data.map((item, index) => (
|
||||||
<View key={index} style={[{ flexDirection: 'row' }, Styles.mv05, activeTheme === 'dark' ? { backgroundColor: colors.card } : ColorsStatus.lightGreen, Styles.p10, Styles.round10, { borderBottomWidth: 1, borderColor: colors.background }]}>
|
<View key={index} style={[{ flexDirection: 'row' }, Styles.mv05, activeTheme === 'dark' ? { backgroundColor: colors.card } : ColorsStatus.lightGreen, Styles.p10, Styles.round05, { borderBottomWidth: 1, borderColor: colors.background }]}>
|
||||||
<View style={[Styles.mr10, Styles.ph05]}>
|
<View style={[Styles.mr10, Styles.ph05]}>
|
||||||
<Text style={[Styles.textSubtitle]}>{String(item.dateStart)}</Text>
|
<Text style={[Styles.textSubtitle]}>{String(item.dateStart)}</Text>
|
||||||
<Text style={[Styles.textDefault, { textAlign: 'center' }]}>{item.year}</Text>
|
<Text style={[Styles.textDefault, { textAlign: 'center' }]}>{item.year}</Text>
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export default function HeaderRightDiscussionList() {
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Diskusi"
|
title="Tambah Diskusi"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
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";
|
||||||
|
import { useTheme } from "@/providers/ThemeProvider";
|
||||||
import { router, useLocalSearchParams } from "expo-router";
|
import { router, useLocalSearchParams } from "expo-router";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { View } from "react-native";
|
import { View } from "react-native";
|
||||||
import Text from "../Text";
|
import Text from "../Text";
|
||||||
import DiscussionItem from "../discussionItem";
|
import DiscussionItem from "../discussionItem";
|
||||||
import Skeleton from "../skeleton";
|
import Skeleton from "../skeleton";
|
||||||
import { useTheme } from "@/providers/ThemeProvider";
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -54,8 +54,7 @@ export default function DiscussionDivisionDetail({ refreshing }: { refreshing: b
|
|||||||
return (
|
return (
|
||||||
<View style={[Styles.mb15]}>
|
<View style={[Styles.mb15]}>
|
||||||
<Text style={[Styles.textDefaultSemiBold, Styles.mv10]}>Diskusi</Text>
|
<Text style={[Styles.textDefaultSemiBold, Styles.mv10]}>Diskusi</Text>
|
||||||
<View style={[Styles.wrapPaper, { backgroundColor: colors.card, borderColor: colors.background }]}>
|
<View style={[Styles.wrapPaper, { backgroundColor: colors.card, borderColor: colors.icon + '20' }, Styles.p0]}>
|
||||||
|
|
||||||
{
|
{
|
||||||
loading ?
|
loading ?
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -112,8 +112,8 @@ export default function FileDivisionDetail({ refreshing }: { refreshing: boolean
|
|||||||
data.map((item, index) => (
|
data.map((item, index) => (
|
||||||
<Pressable style={[Styles.mr05, { width: '24%' }]} key={index} onPress={() => openFile(item)}>
|
<Pressable style={[Styles.mr05, { width: '24%' }]} key={index} onPress={() => openFile(item)}>
|
||||||
<View style={{ alignItems: 'center' }}>
|
<View style={{ alignItems: 'center' }}>
|
||||||
<View style={[Styles.wrapPaper, { alignItems: 'center' }]}>
|
<View style={[Styles.wrapPaper, { alignItems: 'center', backgroundColor: colors.card, borderWidth: 1, borderColor: colors.icon + '20' }]}>
|
||||||
<Feather name="file-text" size={50} color="black" style={Styles.mr05} />
|
<Feather name="file-text" size={50} color={colors.text} style={Styles.mr05} />
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
<View style={[Styles.contentItemCenter]}>
|
<View style={[Styles.contentItemCenter]}>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ColorsStatus } from "@/constants/ColorsStatus"
|
|||||||
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"
|
||||||
import { AntDesign, MaterialIcons, SimpleLineIcons } from "@expo/vector-icons"
|
import { AntDesign, Feather, MaterialIcons, SimpleLineIcons } from "@expo/vector-icons"
|
||||||
import { router, useLocalSearchParams } from "expo-router"
|
import { router, useLocalSearchParams } from "expo-router"
|
||||||
import { useEffect, useState } from "react"
|
import { useEffect, useState } from "react"
|
||||||
import { View } from "react-native"
|
import { View } from "react-native"
|
||||||
@@ -56,13 +56,13 @@ export default function FiturDivisionDetail({ refreshing }: { refreshing: boolea
|
|||||||
bgColor={colors.card}
|
bgColor={colors.card}
|
||||||
borderType="all"
|
borderType="all"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.lightGreen]}>
|
<View style={[Styles.p05]}>
|
||||||
<AntDesign name="filetext1" size={25} color={colors.primary} />
|
<AntDesign name="filetext1" size={28} color={colors.text} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title="Tugas"
|
title="Tugas"
|
||||||
subtitle={`${data.tugas} Tugas`}
|
subtitle={`${data.tugas} Tugas`}
|
||||||
width={28}
|
width={30}
|
||||||
onPress={() => { router.push(`/division/${id}/task?status=0`) }}
|
onPress={() => { router.push(`/division/${id}/task?status=0`) }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -70,13 +70,13 @@ export default function FiturDivisionDetail({ refreshing }: { refreshing: boolea
|
|||||||
bgColor={colors.card}
|
bgColor={colors.card}
|
||||||
borderType="all"
|
borderType="all"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.lightGreen]}>
|
<View style={[Styles.p05]}>
|
||||||
<MaterialIcons name="attach-file" size={25} color={colors.primary} />
|
<Feather name="paperclip" size={28} color={colors.text} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title="Dokumen"
|
title="Dokumen"
|
||||||
subtitle={`${data.dokumen} File`}
|
subtitle={`${data.dokumen} File`}
|
||||||
width={28}
|
width={30}
|
||||||
onPress={() => { router.push(`/division/${id}/document`) }}
|
onPress={() => { router.push(`/division/${id}/document`) }}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
@@ -86,13 +86,13 @@ export default function FiturDivisionDetail({ refreshing }: { refreshing: boolea
|
|||||||
bgColor={colors.card}
|
bgColor={colors.card}
|
||||||
borderType="all"
|
borderType="all"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.lightGreen]}>
|
<View style={[Styles.p05]}>
|
||||||
<SimpleLineIcons name="bubbles" size={25} color={colors.primary} />
|
<SimpleLineIcons name="bubbles" size={28} color={colors.text} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title="Diskusi"
|
title="Diskusi"
|
||||||
subtitle={`${data.diskusi} Diskusi`}
|
subtitle={`${data.diskusi} Diskusi`}
|
||||||
width={28}
|
width={30}
|
||||||
onPress={() => { router.push(`/division/${id}/discussion?active=true`) }}
|
onPress={() => { router.push(`/division/${id}/discussion?active=true`) }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -100,13 +100,13 @@ export default function FiturDivisionDetail({ refreshing }: { refreshing: boolea
|
|||||||
bgColor={colors.card}
|
bgColor={colors.card}
|
||||||
borderType="all"
|
borderType="all"
|
||||||
icon={
|
icon={
|
||||||
<View style={[Styles.iconContent, ColorsStatus.lightGreen]}>
|
<View style={[Styles.p05]}>
|
||||||
<AntDesign name="calendar" size={25} color={colors.primary} />
|
<AntDesign name="calendar" size={28} color={colors.text} />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
title="Kalender"
|
title="Kalender"
|
||||||
subtitle={`${data.kalender} Acara`}
|
subtitle={`${data.kalender} Acara`}
|
||||||
width={28}
|
width={30}
|
||||||
onPress={() => { router.push(`/division/${id}/calendar`) }}
|
onPress={() => { router.push(`/division/${id}/calendar`) }}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export default function HeaderRightDivisionList() {
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Divisi"
|
title="Tambah Divisi"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
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";
|
||||||
|
import { useTheme } from "@/providers/ThemeProvider";
|
||||||
import { Feather } from "@expo/vector-icons";
|
import { Feather } from "@expo/vector-icons";
|
||||||
import { router, useLocalSearchParams } from "expo-router";
|
import { router, useLocalSearchParams } from "expo-router";
|
||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import { Dimensions, Pressable, View } from "react-native";
|
import { Dimensions, Pressable, View } from "react-native";
|
||||||
import { ICarouselInstance } from "react-native-reanimated-carousel";
|
import { ICarouselInstance } from "react-native-reanimated-carousel";
|
||||||
import Skeleton from "../skeleton";
|
import Skeleton from "../skeleton";
|
||||||
import { useTheme } from "@/providers/ThemeProvider";
|
|
||||||
import Text from "../Text";
|
import Text from "../Text";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -59,11 +59,11 @@ export default function TaskDivisionDetail({ refreshing }: { refreshing: boolean
|
|||||||
:
|
:
|
||||||
data.length > 0 ?
|
data.length > 0 ?
|
||||||
data.map((item, index) => (
|
data.map((item, index) => (
|
||||||
<Pressable key={index} style={[Styles.wrapPaper, Styles.mb05, { backgroundColor: colors.card, borderColor: colors.background }]} onPress={() => { router.push(`/division/${id}/task/${item.idProject}`) }}>
|
<Pressable key={index} style={[Styles.wrapPaper, Styles.mb10, { backgroundColor: colors.card, borderWidth: 1, borderColor: colors.icon + '20' }]} onPress={() => { router.push(`/division/${id}/task/${item.idProject}`) }}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]} numberOfLines={1} ellipsizeMode="tail">{item.title} - {item.projectTitle}</Text>
|
<Text style={[Styles.textDefaultSemiBold]} numberOfLines={1} ellipsizeMode="tail">{item.title} - {item.projectTitle}</Text>
|
||||||
<View style={[Styles.rowItemsCenter, Styles.mt10]}>
|
<View style={[Styles.rowItemsCenter, Styles.mt10]}>
|
||||||
<Feather name="clock" size={18} color={colors.text} style={Styles.mr05} />
|
<Feather name="clock" size={18} color={colors.dimmed} style={Styles.mr05} />
|
||||||
<Text style={[Styles.textInformation]} numberOfLines={1} ellipsizeMode="tail">{item.dateStart} - {item.dateEnd}</Text>
|
<Text style={[Styles.textInformation, { color: colors.dimmed }]} numberOfLines={1} ellipsizeMode="tail">{item.dateStart} - {item.dateEnd}</Text>
|
||||||
</View>
|
</View>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -26,13 +26,13 @@ export default function ItemFile({ category, checked, dateTime, title, onChecked
|
|||||||
?
|
?
|
||||||
<>
|
<>
|
||||||
<Ionicons name="folder-open-sharp" color={'#f9cc40'} size={40} />
|
<Ionicons name="folder-open-sharp" color={'#f9cc40'} size={40} />
|
||||||
<MaterialCommunityIcons name="share" color={'gray'} size={25} style={[Styles.absoluteIcon]} />
|
<MaterialCommunityIcons name="share" color={colors.tint} size={25} style={[Styles.absoluteIcon]} />
|
||||||
</>
|
</>
|
||||||
: category == 'file-shared'
|
: category == 'file-shared'
|
||||||
?
|
?
|
||||||
<>
|
<>
|
||||||
<Ionicons name="document-text-sharp" color={'#9fcff8'} size={40} />
|
<Ionicons name="document-text-sharp" color={'#9fcff8'} size={40} />
|
||||||
<MaterialCommunityIcons name="share" color={'gray'} size={25} style={[Styles.absoluteIcon]} />
|
<MaterialCommunityIcons name="share" color={colors.tint} size={25} style={[Styles.absoluteIcon]} />
|
||||||
</>
|
</>
|
||||||
:
|
:
|
||||||
category == 'folder'
|
category == 'folder'
|
||||||
@@ -47,8 +47,8 @@ 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, { color: colors.text }]} numberOfLines={1} ellipsizeMode="tail">{title}</Text>
|
||||||
<Text style={[Styles.textInformation]}>{dateTime}</Text>
|
<Text style={[Styles.textInformation, { color: colors.dimmed }]}>{dateTime}</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
{
|
{
|
||||||
!canChecked ? <></>
|
!canChecked ? <></>
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ export default function ModalSalinMove({ open, close, category, onConfirm, dataC
|
|||||||
icon={<Ionicons name="folder-open-sharp" style={[found ? Styles.cGray : Styles.cFolder]} size={30} />}
|
icon={<Ionicons name="folder-open-sharp" style={[found ? Styles.cGray : Styles.cFolder]} size={30} />}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
titleWeight="normal"
|
titleWeight="normal"
|
||||||
|
bgColor="transparent"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
if (found) return;
|
if (found) return;
|
||||||
setPath(item.id);
|
setPath(item.id);
|
||||||
@@ -108,7 +109,7 @@ export default function ModalSalinMove({ open, close, category, onConfirm, dataC
|
|||||||
<Text style={[Styles.textDefault, Styles.cGray, Styles.mt15, { textAlign: 'center' }]}>Tidak ada data</Text>
|
<Text style={[Styles.textDefault, Styles.cGray, Styles.mt15, { textAlign: 'center' }]}>Tidak ada data</Text>
|
||||||
}
|
}
|
||||||
</View>
|
</View>
|
||||||
<View style={[Styles.rowOnly, Styles.mt15, Styles.absolute0, { backgroundColor: colors.background }]}>
|
<View style={[Styles.rowOnly, Styles.mt15, Styles.absolute0, { backgroundColor: colors.modalBackground }]}>
|
||||||
<ModalNewFolder path={path} onCreated={() => getData()} />
|
<ModalNewFolder path={path} onCreated={() => getData()} />
|
||||||
<Pressable style={[Styles.pv05, { width: '50%' }]} onPress={() => onConfirm(path)}>
|
<Pressable style={[Styles.pv05, { width: '50%' }]} onPress={() => onConfirm(path)}>
|
||||||
<Text style={[Styles.textDefaultSemiBold, { textAlign: 'center' }]}>{category == 'copy' ? 'SALIN' : 'PINDAH'}</Text>
|
<Text style={[Styles.textDefaultSemiBold, { textAlign: 'center' }]}>{category == 'copy' ? 'SALIN' : 'PINDAH'}</Text>
|
||||||
|
|||||||
@@ -13,18 +13,25 @@ type Props = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function EventItem({ category, title, user, jamAwal, jamAkhir, onPress }: Props) {
|
export default function EventItem({ category, title, user, jamAwal, jamAkhir, onPress }: Props) {
|
||||||
const { theme } = useTheme();
|
const { theme, colors } = useTheme();
|
||||||
|
|
||||||
const getBackgroundColor = (cat: 'purple' | 'orange') => {
|
const getBackgroundColor = (cat: 'purple' | 'orange') => {
|
||||||
if (theme === 'dark') {
|
if (theme === 'dark') {
|
||||||
return cat === 'orange' ? '#5A2D0C' : '#1F2255';
|
return cat === 'orange' ? '#547792' : '#1D546D';
|
||||||
}
|
}
|
||||||
return cat === 'orange' ? '#FED6C5' : '#D8D8F1';
|
return cat === 'orange' ? '#D6E6F2' : '#A9B5DF';
|
||||||
|
};
|
||||||
|
|
||||||
|
const getStickColor = (cat: 'purple' | 'orange') => {
|
||||||
|
if (theme === 'dark') {
|
||||||
|
return cat === 'orange' ? '#94B4C1' : '#5F9598';
|
||||||
|
}
|
||||||
|
return cat === 'orange' ? '#F5F5F5' : '#7886C7' ;
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Pressable style={[Styles.itemEvent, { backgroundColor: getBackgroundColor(category) }]} onPress={onPress}>
|
<Pressable style={[Styles.itemEvent, { backgroundColor: getBackgroundColor(category) }]} onPress={onPress}>
|
||||||
<View style={[Styles.dividerEvent, { backgroundColor: category == 'orange' ? '#FB804C' : '#535FCA' }]} />
|
<View style={[Styles.dividerEvent, { backgroundColor: getStickColor(category) }]} />
|
||||||
<View style={[Styles.w90]}>
|
<View style={[Styles.w90]}>
|
||||||
<Text>{jamAwal} - {jamAkhir}</Text>
|
<Text>{jamAwal} - {jamAkhir}</Text>
|
||||||
<Text numberOfLines={1} ellipsizeMode="tail" style={[Styles.textDefaultSemiBold, Styles.mv05]}>{title}</Text>
|
<Text numberOfLines={1} ellipsizeMode="tail" style={[Styles.textDefaultSemiBold, Styles.mv05]}>{title}</Text>
|
||||||
|
|||||||
@@ -80,17 +80,17 @@ export function InputDate({ label, value, placeholder, onChange, info, disable,
|
|||||||
<View style={[Styles.mb10]}>
|
<View style={[Styles.mb10]}>
|
||||||
{
|
{
|
||||||
label != undefined && (
|
label != undefined && (
|
||||||
<Text style={[Styles.mb05, error && Styles.cError]}>
|
<Text style={[Styles.mb05, error && { color: colors.error }]}>
|
||||||
{label}
|
{label}
|
||||||
{required && (<Text style={Styles.cError}>*</Text>)}
|
{required && (<Text style={{ color: colors.error }}>*</Text>)}
|
||||||
</Text>
|
</Text>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
<Pressable style={[Styles.inputRoundForm, disable && ColorsStatus.gray, error && { borderColor: "red" }, { backgroundColor: colors.card }]} onPress={() => setModal(true)} disabled={disable}>
|
<Pressable style={[Styles.inputRoundForm, disable && ColorsStatus.gray, { borderColor: colors.icon + '20' }, error && { borderColor: colors.error }, { backgroundColor: colors.card }]} onPress={() => setModal(true)} disabled={disable}>
|
||||||
<Text style={!value && [Styles.cGray]}>{value ? value : placeholder}</Text>
|
<Text style={!value && [{ color: colors.dimmed }]}>{value ? value : placeholder}</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
{error && (<Text style={[Styles.textInformation, Styles.cError, Styles.mt05]}>{errorText}</Text>)}
|
{error && (<Text style={[Styles.textInformation, { color: colors.error }, Styles.mt05]}>{errorText}</Text>)}
|
||||||
{info != undefined && (<Text style={[Styles.textInformation, Styles.mt05, Styles.cGray]}>{info}</Text>)}
|
{info != undefined && (<Text style={[Styles.textInformation, Styles.mt05, { color: colors.icon }]}>{info}</Text>)}
|
||||||
</View>
|
</View>
|
||||||
{
|
{
|
||||||
Platform.OS === 'ios' ? (
|
Platform.OS === 'ios' ? (
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { useTheme } from "@/providers/ThemeProvider";
|
|||||||
import { Feather } from "@expo/vector-icons";
|
import { Feather } from "@expo/vector-icons";
|
||||||
import { InputForm } from "./inputForm";
|
import { InputForm } from "./inputForm";
|
||||||
|
|
||||||
export default function InputSearch({ onChange, width, value }: { onChange?: (val: string) => void, width?: number, value?: string }) {
|
export default function InputSearch({ onChange, width, value, bg }: { onChange?: (val: string) => void, width?: number, value?: string, bg?: string }) {
|
||||||
const { colors } = useTheme();
|
const { colors } = useTheme();
|
||||||
return (
|
return (
|
||||||
<InputForm
|
<InputForm
|
||||||
@@ -12,7 +12,7 @@ export default function InputSearch({ onChange, width, value }: { onChange?: (va
|
|||||||
itemLeft={<Feather name="search" size={20} color={colors.dimmed} />}
|
itemLeft={<Feather name="search" size={20} color={colors.dimmed} />}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
width={width}
|
width={width}
|
||||||
bg="white"
|
bg={bg}
|
||||||
value={value}
|
value={value}
|
||||||
mb={false}
|
mb={false}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export default function LabelStatus({ category, text, size, style }: Props) {
|
|||||||
<View style={[
|
<View style={[
|
||||||
size == "small" ? Styles.labelStatusSmall : Styles.labelStatus,
|
size == "small" ? Styles.labelStatusSmall : Styles.labelStatus,
|
||||||
{ backgroundColor },
|
{ backgroundColor },
|
||||||
Styles.round10,
|
Styles.round05,
|
||||||
Styles.contentItemCenter,
|
Styles.contentItemCenter,
|
||||||
style
|
style
|
||||||
]}>
|
]}>
|
||||||
|
|||||||
@@ -35,10 +35,10 @@ export default function ModalFloat({ isVisible, setVisible, title, children, onS
|
|||||||
{
|
{
|
||||||
!buttonHide && (
|
!buttonHide && (
|
||||||
<View style={[Styles.rowItemsCenter, { justifyContent: 'flex-end' }]}>
|
<View style={[Styles.rowItemsCenter, { justifyContent: 'flex-end' }]}>
|
||||||
<Pressable style={[Styles.ph15, Styles.pv05, Styles.round10, Styles.mr10]} onPress={() => { setVisible(false) }}>
|
<Pressable style={[Styles.ph15, Styles.pv05, Styles.round05, Styles.mr10]} onPress={() => { setVisible(false) }}>
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>Batal</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>Batal</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
<Pressable style={[Styles.ph15, Styles.pv05, Styles.round10]} onPress={onSubmit} disabled={disableSubmit}>
|
<Pressable style={[Styles.ph15, Styles.pv05, Styles.round05]} onPress={onSubmit} disabled={disableSubmit}>
|
||||||
<Text style={[Styles.textDefaultSemiBold, disableSubmit && Styles.cGray]}>Simpan</Text>
|
<Text style={[Styles.textDefaultSemiBold, disableSubmit && Styles.cGray]}>Simpan</Text>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ export default function ModalSelect({ open, close, title, category, idParent, on
|
|||||||
{
|
{
|
||||||
category == 'member' &&
|
category == 'member' &&
|
||||||
<>
|
<>
|
||||||
<InputSearch onChange={setSearch} value={search} />
|
<InputSearch onChange={setSearch} value={search} bg={"transparent"} />
|
||||||
{
|
{
|
||||||
selectMember.length > 0
|
selectMember.length > 0
|
||||||
?
|
?
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ export default function ModalSelectMultiple({ open, close, title, category, choo
|
|||||||
<Text numberOfLines={1} style={[Styles.w80]}>{item.name}</Text>
|
<Text numberOfLines={1} style={[Styles.w80]}>{item.name}</Text>
|
||||||
{
|
{
|
||||||
selectedDivision.some((i: any) => i.id == item.id)
|
selectedDivision.some((i: any) => i.id == item.id)
|
||||||
? <AntDesign name="check" size={18} color={colors.text} />
|
? <AntDesign name="check" size={17} color={colors.text} />
|
||||||
: <></>
|
: <></>
|
||||||
}
|
}
|
||||||
</Pressable>
|
</Pressable>
|
||||||
@@ -179,9 +179,9 @@ export default function ModalSelectMultiple({ open, close, title, category, choo
|
|||||||
<Text style={[Styles.textMediumSemiBold]}>{item.name}</Text>
|
<Text style={[Styles.textMediumSemiBold]}>{item.name}</Text>
|
||||||
{
|
{
|
||||||
checked[item.id] && checked[item.id]?.length === item.Division?.length
|
checked[item.id] && checked[item.id]?.length === item.Division?.length
|
||||||
? <AntDesign name="check" size={20} color={colors.text} />
|
? <AntDesign name="check" size={17} color={colors.text} />
|
||||||
: (checked[item.id] && checked[item.id]?.length > 0 && checked[item.id]?.length < item.Division?.length)
|
: (checked[item.id] && checked[item.id]?.length > 0 && checked[item.id]?.length < item.Division?.length)
|
||||||
? <AntDesign name="minus" size={20} color={colors.text} />
|
? <AntDesign name="minus" size={17} color={colors.text} />
|
||||||
: <></>
|
: <></>
|
||||||
}
|
}
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export default function HeaderRightProjectDetail({ id, status }: Props) {
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu" height={35}>
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu" height={35}>
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Tugas"
|
title="Tambah Tugas"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
if (status == 3) return
|
if (status == 3) return
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export default function HeaderRightProjectList() {
|
|||||||
{
|
{
|
||||||
entityUser.role != "user" && entityUser.role != "coadmin" &&
|
entityUser.role != "user" && entityUser.role != "coadmin" &&
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Kegiatan"
|
title="Tambah Kegiatan"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export default function SectionCancel({ text, title }: Props) {
|
|||||||
const { colors } = useTheme();
|
const { colors } = useTheme();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={[Styles.p10, Styles.round10, Styles.mb15, { backgroundColor: colors.card }]}>
|
<View style={[Styles.p10, Styles.round05, Styles.mb15, { backgroundColor: colors.card }]}>
|
||||||
<View style={[Styles.rowItemsCenter]}>
|
<View style={[Styles.rowItemsCenter]}>
|
||||||
<AntDesign name="warning" size={22} style={[Styles.mr10]} color={colors.text} />
|
<AntDesign name="warning" size={22} style={[Styles.mr10]} color={colors.text} />
|
||||||
<Text style={[Styles.textDefaultSemiBold]}>{title ? title : 'Kegiatan Dibatalkan'}</Text>
|
<Text style={[Styles.textDefaultSemiBold]}>{title ? title : 'Kegiatan Dibatalkan'}</Text>
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ export default function HeaderRightTaskDetail({ id, division, status, isAdminDiv
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu" height={35}>
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu" height={35}>
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Tugas"
|
title="Tambah Tugas"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
if (status == 3) return
|
if (status == 3) return
|
||||||
|
|||||||
@@ -51,10 +51,10 @@ export default function HeaderRightTaskList() {
|
|||||||
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
<DrawerBottom animation="slide" isVisible={isVisible} setVisible={setVisible} title="Menu">
|
||||||
<View style={Styles.rowItemsCenter}>
|
<View style={Styles.rowItemsCenter}>
|
||||||
{
|
{
|
||||||
(entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision
|
((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision)
|
||||||
&&
|
&&
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={<AntDesign name="pluscircle" color={colors.text} size={25} />}
|
icon={<AntDesign name="pluscircleo" color={colors.text} size={25} />}
|
||||||
title="Tambah Tugas Divisi"
|
title="Tambah Tugas Divisi"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setVisible(false)
|
setVisible(false)
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ export default function SectionMemberTask({ refreshing, isAdminDivision }: { ref
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
(entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision
|
((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision)
|
||||||
?
|
?
|
||||||
<MenuItemRow
|
<MenuItemRow
|
||||||
icon={
|
icon={
|
||||||
|
|||||||
@@ -196,6 +196,9 @@ const Styles = StyleSheet.create({
|
|||||||
pv20: {
|
pv20: {
|
||||||
paddingVertical: 20
|
paddingVertical: 20
|
||||||
},
|
},
|
||||||
|
p05: {
|
||||||
|
padding: 5
|
||||||
|
},
|
||||||
p15: {
|
p15: {
|
||||||
padding: 15
|
padding: 15
|
||||||
},
|
},
|
||||||
@@ -398,8 +401,8 @@ const Styles = StyleSheet.create({
|
|||||||
contentPaperGrid2: {
|
contentPaperGrid2: {
|
||||||
backgroundColor: 'white',
|
backgroundColor: 'white',
|
||||||
height: 100,
|
height: 100,
|
||||||
borderBottomEndRadius: 15,
|
borderBottomEndRadius: 5,
|
||||||
borderBottomStartRadius: 15,
|
borderBottomStartRadius: 5,
|
||||||
paddingHorizontal: 20,
|
paddingHorizontal: 20,
|
||||||
paddingVertical: 15,
|
paddingVertical: 15,
|
||||||
justifyContent: 'flex-start'
|
justifyContent: 'flex-start'
|
||||||
@@ -428,6 +431,13 @@ const Styles = StyleSheet.create({
|
|||||||
shadowRadius: 4,
|
shadowRadius: 4,
|
||||||
elevation: 5,
|
elevation: 5,
|
||||||
},
|
},
|
||||||
|
noShadow: {
|
||||||
|
shadowColor: 'transparent',
|
||||||
|
shadowOffset: { width: 0, height: 0 },
|
||||||
|
shadowOpacity: 0,
|
||||||
|
shadowRadius: 0,
|
||||||
|
elevation: 0,
|
||||||
|
},
|
||||||
contentItemCenter: {
|
contentItemCenter: {
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
alignItems: 'center'
|
alignItems: 'center'
|
||||||
@@ -459,8 +469,8 @@ const Styles = StyleSheet.create({
|
|||||||
padding: 10,
|
padding: 10,
|
||||||
borderColor: '#d6d8f6',
|
borderColor: '#d6d8f6',
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
borderRadius: 10,
|
borderRadius: 5,
|
||||||
marginBottom: 5
|
marginBottom: 10
|
||||||
},
|
},
|
||||||
wrapItemBorderNone: {
|
wrapItemBorderNone: {
|
||||||
padding: 10,
|
padding: 10,
|
||||||
|
|||||||
Reference in New Issue
Block a user