Skip to content

Commit a797f18

Browse files
authored
v1.3 (#20)
* fixing submit flow * debugging splash screen error * Fix word count * Improve loading database * Change swipe direction on iOS * Change result order: noun first * bump version
1 parent 7f29c62 commit a797f18

14 files changed

+10059
-3300
lines changed

App.js

+25-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import React, { useEffect, useState, useRef } from "react";
2-
import { UIManager, Platform, SplashScreen } from "react-native";
1+
import React, { useEffect, useState, useRef, useCallback } from "react";
2+
import { UIManager, Platform, View, Text, Alert } from "react-native";
33
import { useFonts } from "expo-font";
4-
import AppLoading from "expo-app-loading";
4+
import * as SplashScreen from "expo-splash-screen";
55
import i18n from "./lib/i18n";
66

77
import {
@@ -38,6 +38,9 @@ if (Platform.OS === "android") {
3838
//TODO: Move Appereance to AppDB
3939
let MyTheme = generateTheme(false);
4040

41+
// Keep the splash screen visible while we fetch resources
42+
SplashScreen.preventAutoHideAsync();
43+
4144
export default function App() {
4245
const db = useRef(null);
4346
const [isDarkMode, setIsDarkMode] = useState(false);
@@ -52,21 +55,29 @@ export default function App() {
5255

5356
useEffect(() => {
5457
const fetchData = async () => {
55-
console.log("FETCH");
56-
const settings = await getSettings();
57-
const data = await getAllData();
58-
db.current = await new DatabaseInit();
58+
try {
59+
const v = await Promise.all([
60+
getAllData(),
61+
getSettings(),
62+
firstLaunch(),
63+
]);
5964

60-
await firstLaunch();
65+
const data = v[0];
66+
const settings = v[1];
6167

62-
setGlobalData(data);
63-
setLoadedDatabase(true);
68+
db.current = new DatabaseInit();
69+
await db.current.init();
6470

65-
console.log("SET");
71+
setGlobalData(data);
72+
setLoadedDatabase(true);
6673

67-
updateTheme(settings.darkMode);
74+
updateTheme(settings.darkMode);
6875

69-
//SplashScreen.hide();
76+
await SplashScreen.hideAsync();
77+
} catch (e) {
78+
console.log(e);
79+
// Alert.alert(e);
80+
}
7081
};
7182

7283
fetchData();
@@ -86,10 +97,8 @@ export default function App() {
8697
updateSettings(settings);
8798
};
8899

89-
//Onboarding?
90-
// Load scren
91100
if (!loaded || !loadedDatabase) {
92-
return <AppLoading />;
101+
return null;
93102
}
94103

95104
const commonProps = {

app.json

+12-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"expo": {
33
"name": "Wordnote Dictionary",
44
"slug": "dictionote",
5-
"version": "1.0.0",
5+
"version": "1.3.0",
66
"orientation": "portrait",
77
"icon": "./assets/icon.png",
88
"privacy": "unlisted",
@@ -15,21 +15,29 @@
1515
"updates": {
1616
"fallbackToCacheTimeout": 0
1717
},
18-
"assetBundlePatterns": ["**/*", "assets/**"],
18+
"assetBundlePatterns": [
19+
"**/*",
20+
"assets/**"
21+
],
1922
"ios": {
23+
"buildNumber": "4",
2024
"supportsTablet": false,
2125
"infoPlist": {
2226
"CFBundleAllowMixedLocalizations": true
2327
},
24-
"bundleIdentifier": "com.zehfernandes.dictionote"
28+
"bundleIdentifier": "com.zehfernandes.dictionote",
29+
"config": {
30+
"usesNonExemptEncryption": false
31+
}
2532
},
2633
"android": {
2734
"adaptiveIcon": {
2835
"foregroundImage": "./assets/adaptive-icon.png",
2936
"backgroundColor": "#FFFFFF"
3037
},
3138
"allowBackup": true,
32-
"package": "com.zehfernandes.dictionote"
39+
"package": "com.zehfernandes.dictionote",
40+
"versionCode": 4
3341
},
3442
"locales": {
3543
"pt": "./storelocales/pt.json"
34.1 MB
Binary file not shown.

components/ListHiddenItem.js

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ function HiddenItem({ rowMap, data }) {
77
return (
88
<View style={styles.rowBack}>
99
<TrashIcon fill="#fff" width={18} height={18} />
10+
<TrashIcon fill="#fff" width={18} height={18} />
1011
</View>
1112
);
1213
}
@@ -23,6 +24,7 @@ const styles = StyleSheet.create({
2324
flexDirection: "row",
2425
justifyContent: "space-between",
2526
paddingLeft: 20,
27+
paddingRight: 20,
2628
},
2729
backRightBtn: {
2830
alignItems: "center",

components/ListItem.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ function ListItem({ title, content, createAt, press }) {
99

1010
let words = null;
1111
if (content) {
12-
words = content.split("\n").length;
12+
words = content
13+
.trim()
14+
.split("\n")
15+
.filter((t) => t !== "").length;
1316
}
1417

1518
return (

eas.json

+8-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@
1010
"preview": {
1111
"distribution": "internal"
1212
},
13-
"production": {}
13+
"production": {
14+
"ios": {
15+
"autoIncrement": true
16+
},
17+
"android": {
18+
"autoIncrement": true
19+
}
20+
}
1421
},
1522
"submit": {
1623
"production": {}

lib/appDB.js

+16-11
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,23 @@ export const firstLaunch = async () => {
1010
try {
1111
const alreadyLaunch = await AsyncStorage.getItem(FIRSTVISITKEY);
1212
if (!alreadyLaunch) {
13-
await AsyncStorage.setItem(FIRSTVISITKEY, "true");
14-
await AsyncStorage.setItem(NOTESKEY, JSON.stringify([]));
15-
await AsyncStorage.setItem(LANGUAGESKEY, JSON.stringify(["en"]));
16-
await AsyncStorage.setItem(
17-
SETTINGSKEY,
18-
JSON.stringify({
19-
userID: makeid(11),
20-
isFullAppAvailable: true,
21-
darkMode: Appearance.getColorScheme() === "dark",
22-
})
23-
);
13+
await Promise.all([
14+
AsyncStorage.setItem(FIRSTVISITKEY, "true"),
15+
AsyncStorage.setItem(NOTESKEY, JSON.stringify([])),
16+
AsyncStorage.setItem(LANGUAGESKEY, JSON.stringify(["en"])),
17+
AsyncStorage.setItem(
18+
SETTINGSKEY,
19+
JSON.stringify({
20+
userID: makeid(11),
21+
isFullAppAvailable: true,
22+
darkMode: Appearance.getColorScheme() === "dark",
23+
})
24+
),
25+
]);
2426
}
2527
} catch (e) {
2628
console.log(e);
29+
return true;
2730
}
2831
};
2932

@@ -42,6 +45,7 @@ export const getAllData = async () => {
4245
return notes;
4346
} catch (e) {
4447
console.log(e);
48+
return [];
4549
}
4650
};
4751

@@ -214,6 +218,7 @@ export const getSettings = async (value) => {
214218
}
215219
} catch (error) {
216220
console.log(e);
221+
return {};
217222
}
218223
};
219224

lib/dictDB.js

+48-32
Original file line numberDiff line numberDiff line change
@@ -5,47 +5,63 @@ import { Asset } from "expo-asset";
55
import { getOfflineLangs, deleteLang } from "./appDB";
66

77
let databaseKey = {};
8+
89
export class DatabaseInit {
910
constructor() {
10-
return (async () => {
11-
let baseDir = FileSystem.documentDirectory + "SQLite";
11+
return this;
12+
}
1213

13-
//Check Folder and Default idiom
14-
if (!(await FileSystem.getInfoAsync(baseDir)).exists) {
15-
await FileSystem.makeDirectoryAsync(baseDir);
16-
}
14+
async init() {
15+
let baseDir = FileSystem.documentDirectory + "SQLite";
16+
17+
//Check Folder and Default idiom
18+
if (!(await FileSystem.getInfoAsync(baseDir)).exists) {
19+
await FileSystem.makeDirectoryAsync(baseDir);
20+
}
1721

18-
if (!(await FileSystem.getInfoAsync(baseDir + "/dict_en.db")).exists) {
19-
await FileSystem.downloadAsync(
20-
Asset.fromModule(require("../assets/dict_en.db")).uri,
21-
baseDir + "/dict_en.db"
22-
);
22+
// Delete previus version of database
23+
if (await FileSystem.getInfoAsync(baseDir + "/dict_en.db").exists) {
24+
await FileSystem.deleteAsync(baseDir + "/dict_en.db");
25+
}
26+
27+
if (!(await FileSystem.getInfoAsync(baseDir + "/dict_en_v2.db")).exists) {
28+
const file = require("../assets/dict_en_v2.db");
29+
const dbURI = Asset.fromModule(file).uri;
30+
31+
if (dbURI.includes("http")) {
32+
await FileSystem.downloadAsync(dbURI, baseDir + "/dict_en_v2.db");
33+
} else {
34+
await FileSystem.copyAsync({
35+
from: dbURI,
36+
to: baseDir + "/dict_en_v2.db",
37+
});
2338
}
39+
}
40+
41+
databaseKey["en"] = SQLite.openDatabase("dict_en_v2.db");
42+
43+
// get all idioms unless "en" (default one)
44+
let langs = await getOfflineLangs();
45+
langs = langs.filter((lang) => lang !== "en");
2446

25-
databaseKey["en"] = SQLite.openDatabase("dict_en.db");
26-
27-
// get all idioms unless "en" (default one)
28-
let langs = await getOfflineLangs();
29-
langs = langs.filter((lang) => lang !== "en");
30-
31-
//for langs
32-
for (let i = 0; i < langs.length; i++) {
33-
let langcode = langs[i];
34-
let fileName = `/dict_${langcode}.db`;
35-
if ((await FileSystem.getInfoAsync(baseDir + fileName)).exists) {
36-
databaseKey[langcode] = SQLite.openDatabase(fileName);
37-
} else {
38-
console.log("File not found");
39-
deleteLang(langcode);
40-
}
47+
//for langs
48+
for (let i = 0; i < langs.length; i++) {
49+
let langcode = langs[i];
50+
let fileName = `/dict_${langcode}.db`;
51+
if ((await FileSystem.getInfoAsync(baseDir + fileName)).exists) {
52+
databaseKey[langcode] = SQLite.openDatabase(fileName);
53+
} else {
54+
console.log("File not found");
55+
deleteLang(langcode);
4156
}
57+
}
4258

43-
return this;
44-
})();
59+
return this;
4560
}
4661

4762
getDatabase(key) {
4863
// TODO: If don't exist return error
64+
console.log(databaseKey[key]);
4965
return databaseKey[key];
5066
}
5167

@@ -61,9 +77,9 @@ export class DatabaseInit {
6177
}
6278

6379
testDatabase() {
64-
getDatabase("en").transaction((tx) => {
65-
tx.executeSql(
66-
"select * from words_en WHERE word='aasvogels'",
80+
return this.getDatabase("en").transaction((tx) => {
81+
return tx.executeSql(
82+
"select * from words_en WHERE word='test'",
6783
[],
6884
(_, { rows }) => console.log(JSON.stringify(rows))
6985
);

metro.config.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
const { getDefaultConfig } = require("expo/metro-config");
22

3-
const defaultConfig = getDefaultConfig(__dirname);
3+
const config = getDefaultConfig(__dirname);
4+
5+
config.transformer.minifierConfig.compress.drop_console = true;
6+
config.resolver.assetExts.push("db");
47

58
module.exports = {
9+
...config,
610
transformer: {
711
assetPlugins: ["expo-asset/tools/hashAssetFiles"],
812
},
9-
resolver: {
10-
assetExts: [...defaultConfig.resolver.assetExts, "db"],
11-
},
1213
};

0 commit comments

Comments
 (0)