// withHooks import { LibCurl } from 'esoftplay/cache/lib/curl/import'; import { LibLoading } from 'esoftplay/cache/lib/loading/import'; import { LibUtils } from 'esoftplay/cache/lib/utils/import'; import { UserData } from 'esoftplay/cache/user/data/import'; import FastStorage from 'esoftplay/mmkv'; import useSafeState from 'esoftplay/state'; import { ReactElement, useEffect } from 'react'; import { Text } from 'react-native'; export interface LibCurl_viewArgs { } export interface LibCurl_viewProps { url: string; post?: any; cache?: boolean; isUserData?: boolean; onSuccess?: (res: any, message: string) => ReactElement; onError?: (err: any, retry: Function) => ReactElement; onLoading?: ReactElement; } /** Klik [disini](https://github.com/dev-esoftplay/mobile-docs/blob/main/modules/lib/curl_view.md) untuk melihat dokumentasi*/ export default function m(props: LibCurl_viewProps): any { let key = "" let initialData: any = undefined if (props.cache) { key = "curl-view" + LibUtils.shorten(props.url + JSON.stringify(props.post)) if (props.isUserData) { UserData.register(key) } try { initialData = JSON.parse(FastStorage.getItemSync(key)) } catch (error) { } } const [data, setData] = useSafeState(initialData) function fetchData() { new LibCurl(props.url, props.post, (result, message) => { if (props.cache) { FastStorage.setItem(key, JSON.stringify({ result, message, ok: 1 })) } setData({ result, message, ok: 1 }) }, (err) => { setData(err) }) } function retry() { setData(initialData) fetchData() } useEffect(fetchData, []); if (!data) { return props.onLoading ? props.onLoading : } if (data.ok == 1) return props.onSuccess ? props.onSuccess(data.result, data.message) : null return props.onError ? props.onError(data, retry) : {data?.message} }