import { NativeModules } from 'react-native'; import parsePage from './parsePage'; import type { UIPage } from './uidata'; class PickerTask { uidata?: UIPage; status: 'init' | 'running' | 'finish' = 'init'; onLoadData?: (uidata: UIPage) => void; constructor() {} getData(rootTag: number, info: any, callback: (uidata: UIPage) => void) { if (this.uidata) { callback(this.uidata); this.onLoadData = undefined; } else { this.onLoadData = callback; } if (this.status !== 'running') { this.run(rootTag, info); } } run(rootTag: number, info: any) { this.status = 'running'; parsePage(rootTag, info) .then((uidata) => { // console.info(JSON.stringify(uidata, null, 2)); // console.log(JSON.stringify(uidata).length); this.uidata = uidata; this.status = 'finish'; if (this.onLoadData) { this.onLoadData(this.uidata); } }) .catch((e: any) => { console.warn(e.message); this.status = 'finish'; }); } } const { RangersAppLogModule } = NativeModules; const pickerTask = new PickerTask(); export default function pickerPage(rootTag: number, info: any) { if (!rootTag || !info || !info.eventid) { console.warn('pciker failed: rootTag or pageinfo should not be null'); return; } pickerTask.getData(rootTag, info, (uidata) => { RangersAppLogModule.updatePickerInfo(info.eventid, uidata); }); }