import React, { useEffect, useRef, useState } from 'react'; import { ScrollView, View, Text, TouchableOpacity, BackHandler } from 'react-native'; import { FontAwesome, Ionicons } from '@expo/vector-icons'; import config from '../../components/data/config.json' import { styles } from '@/components/style/style'; import { FAB } from 'react-native-elements'; import { useNavigation, NavigationProp, useFocusEffect } from '@react-navigation/native'; import { GestureHandlerRootView, TextInput } from 'react-native-gesture-handler'; import { addStorage, cfg } from '@/components/lib/cfg'; import { DB } from '@/components/lib/db'; import AsyncStorage from '@react-native-async-storage/async-storage'; const SettingScreen = () => { const [bgHead, setBgHead] = useState(null) const [title, setTitle] = useState(''); const [popup, setPopup] = useState(true) const [dataList, setDataList] = useState([]); const inputRef = useRef(null); // Create a ref for the TextInput const [contact, setContact] = useState([]); const [produk, setProduk] = useState<{ name: string , value: string }[]>([]); const getData:any = { uom: function(){ return new Promise(async(resolve,reject)=>{ let uom = await DB(` SELECT C .NAME ->> 'en_US' kat, u.create_uid, u.NAME, u.factor FROM "public".uom_uom u LEFT JOIN "public".uom_category C ON C.create_uid = u.create_uid WHERE C.name->>'en_US' = 'Rokok' ORDER BY u.factor DESC `); addStorage("master oum", uom); cfg.dataPilihan.uom = uom; resolve(uom); }) }, uomkat: function(){ return new Promise(async (resolve, reject) => { let uom = await DB(` SELECT create_uid, name FROM uom_category `); cfg.dataPilihan.uomkat = uom; addStorage('master uomkat', uom) resolve(uom); }) } ,product: function () { return new Promise(async (resolve, reject) => { let uom = await DB(` SELECT P .ID, P.NAME ->> 'en_US' AS NAME, P.list_price * factor AS list_price, P.uom_id, u.factor FROM product_template P LEFT JOIN product_tag_product_template_rel T ON P.ID = T.product_template_id LEFT JOIN product_tag pt ON T.product_tag_id = pt.ID LEFT JOIN uom_uom u ON u.id = p.uom_id WHERE pt.NAME ->> 'en_US' = 'rokok' ORDER BY id ASC; `); cfg.dataPilihan.product = uom; addStorage('master product', uom) resolve(uom); }) } } const navigation = useNavigation>(); const Contact = (props: any) => { return ( <> {(props?.data || []).map((data: any, key: number) => { setTitle(data?.name) let datas:any = await getData[data?.row](); setDataList(datas); setPopup(true); }}> {data.type == 'ionic' ? : } {data.value ? data.value : data.name.split(" ").join("\n").toUpperCase()} )} ) } const loadData = async function(){ await getData.uom() await getData.uomkat() await getData.product() } useEffect(()=>{ loadData(); },[]) const ListData = function (props: any) { return ( <> {props.data && props.data.filter((d: any, i: any) => d.name["en_US"] && d.name["en_US"] != '' ).map((data:any, i:any)=> {data.kat ? ( {data.kat ? data.kat:""} ):<>} Unit : {data.name ? data.name["en_US"]:""} Value : {data.factor ? (1/Number(data.factor)) :""} )} ) } useFocusEffect( React.useCallback(() => { const onBackPress = () => { if(popup === false){ navigation.navigate("home"); } return true; }; BackHandler.addEventListener('hardwareBackPress', onBackPress); navigation.setOptions({ headerLeft: () => null }); // Remove back button return () => { BackHandler.removeEventListener('hardwareBackPress', onBackPress); }; }, [navigation, popup]) ); const callData = async () => { setContact([ { name: "Product Unit", row: "uom", icon: "file-tray-stacked-outline", type: "ionic" } , { name: "Product List", row: "uomkat", icon: "cube-outline", type: "ionic" } ]); }; useEffect(() => { (function () { callData() })(); }, []) const customerBack = function () { navigation.navigate('home') } const fabAction = function () { // console.log("action") } const onScroll = (event: any) => { const yOffset = event.nativeEvent.contentOffset.y; if (yOffset > 190) { setBgHead(config.color.primary) } else { setBgHead(null) } }; cfg.action['setting'] = function () { setPopup(false); loadData(); }; return ( <> {popup && ( <> {title} { setPopup(false); }} style={{zIndex:2, position:'absolute', bottom:20, right:20}} icon={{name:"close", color:"white"}} color={config.color.primary}> )} Setting { await AsyncStorage.removeItem('login'); navigation.navigate('index') }}> {`LOGOUT`} ); }; export default SettingScreen;