Skip to content

Commit

Permalink
fix(front): lazy load constants json
Browse files Browse the repository at this point in the history
Workaround for: facebook/hermes#135
  • Loading branch information
stdavis committed Feb 2, 2022
1 parent 106f926 commit b43b69c
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 11 deletions.
Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions src/front/metro.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ defaultConfig.transformer.getTransformOptions = async () => ({
});
defaultConfig.resolver.extraNodeModules.common = commonDir;
defaultConfig.watchFolders.push(commonDir);
defaultConfig.resolver.assetExts.push('lazy');

module.exports = defaultConfig;
4 changes: 4 additions & 0 deletions src/front/scripts/eas-build-pre-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,7 @@ echo "CLIENT_ID=$CLIENT_ID" >> .env
echo "FACEBOOK_OAUTH_CLIENT_ID=$FACEBOOK_OAUTH_CLIENT_ID" >> .env
echo "GOOGLE_OAUTH_CLIENT_ID_IOS=$GOOGLE_OAUTH_CLIENT_ID_IOS" >> .env
echo "GOOGLE_OAUTH_CLIENT_ID_ANDROID=$GOOGLE_OAUTH_CLIENT_ID_ANDROID" >> .env

echo "installing npm deps for the common package"
cd ../common
npm i
2 changes: 1 addition & 1 deletion src/front/scripts/updateConstants.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const db = knex({

const constants = await getConstants(db);

const jsonFilePath = resolve(`${__dirname}/../services/constants.json`);
const jsonFilePath = resolve(`${__dirname}/../services/constants.json.lazy`);

fs.writeFileSync(jsonFilePath, JSON.stringify(constants, null, 2));

Expand Down
11 changes: 9 additions & 2 deletions src/front/services/constants.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import AsyncStorage from '@react-native-async-storage/async-storage';
import { Asset } from 'expo-asset';
import * as FileSystem from 'expo-file-system';
import * as Sentry from 'sentry-expo';
import bundledConstants from './constants.json';

const KEY = '@roadkill_constants';
export async function updateConstants(constants) {
Expand All @@ -21,7 +22,13 @@ export async function getConstants() {
return JSON.parse(constants);
} else {
// fallback to bundled data
return bundledConstants;
const asset = Asset.fromModule(require('./constants.json.lazy'));

await asset.downloadAsync();

const json = await FileSystem.readAsStringAsync(asset.localUri);

return JSON.parse(json);
}
} catch (error) {
Sentry.Native.captureException(error);
Expand Down
File renamed without changes.
51 changes: 43 additions & 8 deletions src/front/storybook/stories/SearchList.stories.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { storiesOf } from '@storybook/react-native';
import { Text } from '@ui-kitten/components';
import React from 'react';
import React, { useEffect, useState } from 'react';
import { ScrollView } from 'react-native-gesture-handler';
import SearchList from '../../components/reports/SearchList';
import RootView from '../../components/RootView';
import constants from '../../services/constants.json';
import { getConstants } from '../../services/constants.js';

const emptyObject = {
species_id: null,
Expand All @@ -16,17 +16,37 @@ const emptyObject = {
family: null,
};

const useConstants = () => {
const [constants, setConstants] = useState(null);
useEffect(() => {
const init = async () => {
const constants = await getConstants();
setConstants(constants);
};

init();
}, []);

return constants;
};

const ItemsAsObjects = () => {
return React.createElement(() => {
const [value, setValue] = React.useState(emptyObject);
const constants = useConstants();
const [items, setItems] = React.useState(null);

const items = constants.species.slice(0, 18);
React.useEffect(() => {
if (constants) {
setItems(constants.species.slice(0, 18));
}
}, [constants]);

return (
<RootView>
<ScrollView style={{ paddingHorizontal: 25 }}>
<Text category="c1">{`value: ${JSON.stringify(value, null, ' ')}`}</Text>
<SearchList value={value} onChange={setValue} items={items} placeholder="items as objects" />
{items ? <SearchList value={value} onChange={setValue} items={items} placeholder="items as objects" /> : null}
</ScrollView>
</RootView>
);
Expand All @@ -37,13 +57,20 @@ const ManyObjectItems = () => {
return React.createElement(() => {
const [value, setValue] = React.useState(emptyObject);

const items = constants.species;
const constants = useConstants();
const [items, setItems] = React.useState(null);

React.useEffect(() => {
if (constants) {
setItems(constants.species);
}
}, [constants]);

return (
<RootView>
<ScrollView style={{ paddingHorizontal: 25 }}>
<Text category="c1">{`value: ${JSON.stringify(value, null, ' ')}`}</Text>
<SearchList value={value} onChange={setValue} items={items} placeholder="many objects" />
{items ? <SearchList value={value} onChange={setValue} items={items} placeholder="many objects" /> : null}
</ScrollView>
</RootView>
);
Expand All @@ -54,13 +81,21 @@ const ManyStringItems = () => {
return React.createElement(() => {
const [value, setValue] = React.useState(null);

const items = [...new Set(constants.species.map((item) => item.family))].sort();
const constants = useConstants();
const [items, setItems] = React.useState(null);

React.useEffect(() => {
if (constants) {
setItems([...new Set(constants.species.map((item) => item.family))].sort());
setItems(constants.species);
}
}, [constants]);

return (
<RootView>
<ScrollView style={{ paddingHorizontal: 25 }}>
<Text category="c1">{`value: ${JSON.stringify(value, null, ' ')}`}</Text>
<SearchList value={value} onChange={setValue} items={items} placeholder="many strings" />
{items ? <SearchList value={value} onChange={setValue} items={items} placeholder="many strings" /> : null}
</ScrollView>
</RootView>
);
Expand Down

0 comments on commit b43b69c

Please sign in to comment.