diff --git a/frontend/Components/ConfigPage/index.tsx b/frontend/Components/ConfigPage/index.tsx
index 0dbbfea..f913c42 100644
--- a/frontend/Components/ConfigPage/index.tsx
+++ b/frontend/Components/ConfigPage/index.tsx
@@ -88,7 +88,7 @@ export const ConfigPage: React.FC = () => {
- {note.content}
+
+ {note.content}
+
{moment.unix(note.created_at).format('DD-MM-YY HH:mm')}
diff --git a/frontend/Components/NotePage/index.tsx b/frontend/Components/NotePage/index.tsx
index d219646..7fef441 100644
--- a/frontend/Components/NotePage/index.tsx
+++ b/frontend/Components/NotePage/index.tsx
@@ -37,8 +37,9 @@ export const NotePage: React.FC = () => {
const onRefresh = useCallback(() => {
setRefreshing(true)
+ setTimeout(() => setRefreshing(false), 5000)
relayPool?.unsubscribeAll()
- subscribeNotes().finally(() => setRefreshing(false))
+ subscribeNotes()
}, [])
useEffect(() => {
diff --git a/frontend/Components/ProfilePage/index.tsx b/frontend/Components/ProfilePage/index.tsx
index 9452efa..760150a 100644
--- a/frontend/Components/ProfilePage/index.tsx
+++ b/frontend/Components/ProfilePage/index.tsx
@@ -76,7 +76,6 @@ export const ProfilePage: React.FC = () => {
if (database) {
getNotes(database, { filters: { pubkey: userId }, limit: pageSize }).then((results) => {
setNotes(results)
- setRefreshing(false)
})
}
}
@@ -112,7 +111,8 @@ export const ProfilePage: React.FC = () => {
const ids = event.tags.map((tag) => tagToUser(tag).id)
setContactsIds(ids)
} else if (event.kind === EventKind.meta) {
- storeEvent(event, database).then(() => setRefreshing(false))
+ setTimeout(() => setRefreshing(false), 5000)
+ storeEvent(event, database)
subscribeNotes()
}
}
diff --git a/frontend/Constants/AppConstants/index.ts b/frontend/Constants/AppConstants/index.ts
index 5cb629d..569f1d8 100644
--- a/frontend/Constants/AppConstants/index.ts
+++ b/frontend/Constants/AppConstants/index.ts
@@ -1,4 +1,5 @@
import { StyleSheet } from 'react-native'
+import { MarkdownIt } from 'react-native-markdown-display'
export const markdownStyle: (theme: Record) => StyleSheet.NamedStyles = (
theme,
@@ -41,3 +42,7 @@ export const markdownStyle: (theme: Record) => StyleSheet.NamedS
},
}
}
+
+export const markdownIt = new MarkdownIt({
+ linkify: true,
+})
diff --git a/frontend/Contexts/AppContext.tsx b/frontend/Contexts/AppContext.tsx
index 0fdd5ba..0290350 100644
--- a/frontend/Contexts/AppContext.tsx
+++ b/frontend/Contexts/AppContext.tsx
@@ -4,6 +4,8 @@ import { initDatabase } from '../Functions/DatabaseFunctions'
import { createInitDatabase } from '../Functions/DatabaseFunctions/Migrations'
import FlashMessage from 'react-native-flash-message'
import SInfo from 'react-native-sensitive-info'
+import { BackHandler } from 'react-native'
+import { markdownIt } from '../Constants/AppConstants'
export interface AppContextProps {
page: string
@@ -35,6 +37,15 @@ export const AppContextProvider = ({ children }: AppContextProviderProps): JSX.E
const [loadingDb, setLoadingDb] = useState(initialAppContext.loadingDb)
const init: () => void = () => {
+ BackHandler.addEventListener('hardwareBackPress', () => {
+ goBack()
+ return true
+ })
+ markdownIt.linkify
+ .tlds('onion', true)
+ .add('git:', 'http:')
+ .add('ftp:', null)
+ .set({ fuzzyIP: true })
const db = initDatabase()
setDatabase(db)
SInfo.getItem('privateKey', {}).then((result) => {
@@ -60,7 +71,9 @@ export const AppContextProvider = ({ children }: AppContextProviderProps): JSX.E
const goBack: () => void = () => {
const breadcrump = page.split('%')
- setPage(breadcrump.slice(0, -1).join('%') || 'home')
+ if (breadcrump.length > 1) {
+ setPage(breadcrump.slice(0, -1).join('%'))
+ }
}
const getActualPage: () => string = () => {
diff --git a/package.json b/package.json
index 79a0106..0fe6608 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"create-hash": "^1.2.0",
"events": "^3.3.0",
"i18next": "^22.0.2",
+ "markdown-it": "^13.0.1",
"moment": "^2.29.4",
"react": "18.1.0",
"react-i18next": "^11.18.6",
diff --git a/yarn.lock b/yarn.lock
index 9570fff..4d5e3f1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2882,6 +2882,11 @@ entities@~2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
+entities@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
+ integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
+
envinfo@^7.7.2:
version "7.8.1"
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
@@ -4910,6 +4915,13 @@ linkify-it@^2.0.0:
dependencies:
uc.micro "^1.0.1"
+linkify-it@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec"
+ integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==
+ dependencies:
+ uc.micro "^1.0.1"
+
locate-path@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
@@ -5033,6 +5045,17 @@ markdown-it@^10.0.0:
mdurl "^1.0.1"
uc.micro "^1.0.5"
+markdown-it@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430"
+ integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==
+ dependencies:
+ argparse "^2.0.1"
+ entities "~3.0.1"
+ linkify-it "^4.0.1"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"