mirror of
https://github.com/KoalaSat/nostros.git
synced 2024-09-28 22:30:41 +00:00
Upgrade eslint config (#439)
This commit is contained in:
commit
7b40508955
@ -20,6 +20,8 @@ import DatabaseModule from '../../lib/Native/DatabaseModule'
|
||||
import { addMutedUsersList, removeMutedUsersList } from '../../Functions/RelayFunctions/Lists'
|
||||
import { getRelayMetadata } from '../../Functions/DatabaseFunctions/RelayMetadatas'
|
||||
import { getUserRelays } from '../../Functions/DatabaseFunctions/NotesRelays'
|
||||
import { lightningInvoice } from '../../Functions/ServicesFunctions/ZapInvoice'
|
||||
import LnPreview from '../LnPreview'
|
||||
|
||||
interface ProfileActionsProps {
|
||||
user: User
|
||||
@ -33,7 +35,7 @@ export const ProfileActions: React.FC<ProfileActionsProps> = ({
|
||||
onActionDone = () => {},
|
||||
}) => {
|
||||
const theme = useTheme()
|
||||
const { database } = React.useContext(AppContext)
|
||||
const { database, longPressZap } = React.useContext(AppContext)
|
||||
const { publicKey, privateKey, mutedUsers, reloadLists } = React.useContext(UserContext)
|
||||
const { relayPool, addRelayItem, lastEventId, sendEvent, relays } =
|
||||
React.useContext(RelayPoolContext)
|
||||
@ -47,6 +49,7 @@ export const ProfileActions: React.FC<ProfileActionsProps> = ({
|
||||
const bottomSheetMuteRef = React.useRef<RBSheet>(null)
|
||||
const [userRelays, setUserRelays] = React.useState<string[]>()
|
||||
const [openLn, setOpenLn] = React.useState<boolean>(false)
|
||||
const [zapInvoice, setZapInvoice] = React.useState<string>()
|
||||
|
||||
React.useEffect(() => {
|
||||
loadUser()
|
||||
@ -208,6 +211,25 @@ export const ProfileActions: React.FC<ProfileActionsProps> = ({
|
||||
)
|
||||
}
|
||||
|
||||
const generateZapInvoice: () => void = () => {
|
||||
const lud = user?.ln_address && user?.ln_address !== '' ? user?.ln_address : user?.lnurl
|
||||
|
||||
if (lud && lud !== '' && longPressZap && database && privateKey && publicKey && user?.id) {
|
||||
lightningInvoice(
|
||||
database,
|
||||
lud,
|
||||
longPressZap,
|
||||
privateKey,
|
||||
publicKey,
|
||||
user?.id,
|
||||
true,
|
||||
user?.zap_pubkey,
|
||||
).then((invoice) => {
|
||||
if (invoice) setZapInvoice(invoice)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<View style={styles.mainLayout}>
|
||||
@ -241,6 +263,7 @@ export const ProfileActions: React.FC<ProfileActionsProps> = ({
|
||||
icon='lightning-bolt'
|
||||
size={28}
|
||||
onPress={() => setOpenLn(true)}
|
||||
onLongPress={longPressZap ? generateZapInvoice : undefined}
|
||||
disabled={
|
||||
!user.lnurl && user.lnurl !== '' && !user?.ln_address && user.ln_address !== ''
|
||||
}
|
||||
@ -368,6 +391,7 @@ export const ProfileActions: React.FC<ProfileActionsProps> = ({
|
||||
</View>
|
||||
</RBSheet>
|
||||
<LnPayment setOpen={setOpenLn} open={openLn} user={user} />
|
||||
{zapInvoice && <LnPreview invoice={zapInvoice} setInvoice={setZapInvoice} />}
|
||||
{showNotification && (
|
||||
<Snackbar
|
||||
style={styles.snackbar}
|
||||
|
@ -22,7 +22,7 @@ export const getRawUserConversation: (
|
||||
WHERE pubkey = ?
|
||||
ORDER BY created_at DESC
|
||||
`
|
||||
const resultSet = await db.execute(notesQuery, [pubKey])
|
||||
const resultSet = db.execute(notesQuery, [pubKey])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Event[] = items.map((object) => evetDatabaseToEntity(object))
|
||||
|
||||
@ -64,7 +64,7 @@ export const getGroupedDirectMessages: (
|
||||
notesQuery += `ORDER BY created_at ${order} `
|
||||
if (limit) notesQuery += `LIMIT ${limit}`
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: DirectMessage[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -91,7 +91,7 @@ export const getDirectMessages: (
|
||||
notesQuery += `LIMIT ${limit}`
|
||||
}
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: DirectMessage[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -112,7 +112,7 @@ export const getUserLastDirectMessages: (
|
||||
LIMIT 1
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(messageQuery, [userId])
|
||||
const resultSet = db.execute(messageQuery, [userId])
|
||||
const items: object[] = getItems(resultSet)
|
||||
if (items.length) {
|
||||
const notes: DirectMessage = databaseToEntity(items[0])
|
||||
|
@ -35,7 +35,7 @@ export const getGroups: (db: QuickSQLiteConnection) => Promise<Group[]> = async
|
||||
nostros_group_meta
|
||||
WHERE (deleted = NULL OR deleted = 0)
|
||||
`
|
||||
const resultSet = await db.execute(groupsQuery)
|
||||
const resultSet = db.execute(groupsQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Group[] = items.map((object) => databaseToGroup(object))
|
||||
|
||||
@ -54,7 +54,7 @@ export const getGroup: (db: QuickSQLiteConnection, groupId: string) => Promise<G
|
||||
WHERE
|
||||
id = ?
|
||||
`
|
||||
const resultSet = await db.execute(groupsQuery, [groupId])
|
||||
const resultSet = db.execute(groupsQuery, [groupId])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const group: Group = databaseToGroup(items[0])
|
||||
|
||||
@ -92,7 +92,7 @@ export const getGroupMessages: (
|
||||
notesQuery += `LIMIT ${limit}`
|
||||
}
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const messages: GroupMessage[] = items.map((object) => databaseToGroupMessage(object))
|
||||
|
||||
@ -174,7 +174,7 @@ export const getRawUserGroupMessages: (
|
||||
WHERE pubkey = ?
|
||||
ORDER BY created_at DESC
|
||||
`
|
||||
const resultSet = await db.execute(notesQuery, [pubKey])
|
||||
const resultSet = db.execute(notesQuery, [pubKey])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const groupMessages: Event[] = items.map((object) => databaseToGroupMessage(object))
|
||||
|
||||
@ -189,7 +189,7 @@ export const getRawUserGroups: (
|
||||
WHERE pubkey = ?
|
||||
ORDER BY created_at DESC
|
||||
`
|
||||
const resultSet = await db.execute(notesQuery, [pubKey])
|
||||
const resultSet = db.execute(notesQuery, [pubKey])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const groups: Event[] = items.map((object) => databaseToGroup(object))
|
||||
|
||||
|
@ -19,7 +19,7 @@ export const getList: (
|
||||
if (tag) {
|
||||
notesQuery += ' AND list_tag = ?'
|
||||
}
|
||||
const resultSet = await db.execute(notesQuery, [kind, pubKey, tag])
|
||||
const resultSet = db.execute(notesQuery, [kind, pubKey, tag])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const relays: List[] = items.map((object) => databaseToEntity(object))
|
||||
return relays[0]
|
||||
@ -31,7 +31,7 @@ export const getRawLists: (db: QuickSQLiteConnection, pubKey: string) => Promise
|
||||
) => {
|
||||
const notesQuery = 'SELECT * FROM nostros_lists WHERE pubkey = ?'
|
||||
|
||||
const resultSet = await db.execute(notesQuery, [pubKey])
|
||||
const resultSet = db.execute(notesQuery, [pubKey])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const lists: Event[] = items.map((object) => evetDatabaseToEntity(object))
|
||||
|
||||
|
@ -64,7 +64,7 @@ export const getMainNotes: (
|
||||
ORDER BY created_at DESC
|
||||
LIMIT ${limit}
|
||||
`
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Note[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -98,7 +98,7 @@ export const getReplyNotes: (
|
||||
LIMIT ${limit}
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Note[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -137,7 +137,7 @@ export const getNoteRelays: (
|
||||
WHERE note_id = "${noteId}"
|
||||
ORDER BY relay_url
|
||||
`
|
||||
const resultSet = await db.execute(relaysQuery)
|
||||
const resultSet = db.execute(relaysQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const relays: NoteRelay[] = items.map((object) => noteRelayDatabaseToEntity(object))
|
||||
|
||||
@ -165,7 +165,7 @@ export const getMentionNotes: (
|
||||
|
||||
notesQuery += `ORDER BY created_at DESC`
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Note[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -191,7 +191,7 @@ export const getReactedNotes: (
|
||||
LIMIT ${limit}
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Note[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -216,7 +216,7 @@ export const getRepostedNotes: (
|
||||
LIMIT ${limit}
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Note[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -312,7 +312,7 @@ export const getLastReply: (
|
||||
LIMIT 1
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(replyQuery)
|
||||
const resultSet = db.execute(replyQuery)
|
||||
const item: object = getItems(resultSet)[0]
|
||||
const reaction: Note = databaseToEntity(item)
|
||||
|
||||
@ -327,7 +327,7 @@ export const getRawUserNotes: (
|
||||
WHERE pubkey = ?
|
||||
ORDER BY created_at DESC
|
||||
`
|
||||
const resultSet = await db.execute(notesQuery, [pubKey])
|
||||
const resultSet = db.execute(notesQuery, [pubKey])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Event[] = items.map((object) => evetDatabaseToEntity(object))
|
||||
|
||||
@ -394,7 +394,7 @@ export const getNotes: (
|
||||
notesQuery += `LIMIT ${limit}`
|
||||
}
|
||||
|
||||
const resultSet = await db.execute(notesQuery)
|
||||
const resultSet = db.execute(notesQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Note[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
|
@ -20,7 +20,7 @@ export const getRawUserReactions: (
|
||||
WHERE pubkey = ?
|
||||
ORDER BY created_at DESC
|
||||
`
|
||||
const resultSet = await db.execute(notesQuery, [pubKey])
|
||||
const resultSet = db.execute(notesQuery, [pubKey])
|
||||
const items: object[] = getItems(resultSet)
|
||||
const notes: Event[] = items.map((object) => evetDatabaseToEntity(object))
|
||||
|
||||
@ -57,7 +57,7 @@ export const getReactions: (
|
||||
`
|
||||
}
|
||||
|
||||
const resultSet = await db.execute(reactionsQuery)
|
||||
const resultSet = db.execute(reactionsQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const reactions: Reaction[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -82,7 +82,7 @@ export const getLastReaction: (
|
||||
LIMIT 1
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(reactionsQuery)
|
||||
const resultSet = db.execute(reactionsQuery)
|
||||
const item: object = getItems(resultSet)[0]
|
||||
const reaction: Reaction = databaseToEntity(item)
|
||||
|
||||
|
@ -28,7 +28,7 @@ export const getUser: (pubkey: string, db: QuickSQLiteConnection) => Promise<Use
|
||||
db,
|
||||
) => {
|
||||
const userQuery = `SELECT * FROM nostros_users WHERE id = '${pubkey}';`
|
||||
const resultSet = await db.execute(userQuery)
|
||||
const resultSet = db.execute(userQuery)
|
||||
|
||||
if (resultSet.rows && resultSet.rows?.length > 0) {
|
||||
const items: object[] = getItems(resultSet)
|
||||
|
@ -56,7 +56,7 @@ export const getMostZapedNotes: (
|
||||
ORDER BY total DESC
|
||||
LIMIT ${limit}
|
||||
`
|
||||
const resultSet = await db.execute(zapsQuery)
|
||||
const resultSet = db.execute(zapsQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const zaps: Zap[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -79,7 +79,7 @@ export const getMostZapedNotesContacts: (
|
||||
GROUP BY nostros_zaps.zapped_event_id
|
||||
ORDER BY total DESC
|
||||
`
|
||||
const resultSet = await db.execute(zapsQuery)
|
||||
const resultSet = db.execute(zapsQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const zaps: Zap[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -100,7 +100,7 @@ export const getUserZaps: (
|
||||
AND created_at > ${limitDate}
|
||||
`
|
||||
|
||||
const resultSet = await db.execute(groupsQuery)
|
||||
const resultSet = db.execute(groupsQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const zaps: Zap[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
@ -138,7 +138,7 @@ export const getZaps: (
|
||||
LIMIT ${filters.limit}
|
||||
`
|
||||
}
|
||||
const resultSet = await db.execute(groupsQuery)
|
||||
const resultSet = db.execute(groupsQuery)
|
||||
const items: object[] = getItems(resultSet)
|
||||
const zaps: Zap[] = items.map((object) => databaseToEntity(object))
|
||||
|
||||
|
@ -41,7 +41,7 @@ export const relayToColor: (string: string) => string = (string) => {
|
||||
return relayColors[Math.abs(hash) % (relayColors.length - 1)]
|
||||
}
|
||||
|
||||
export const pickRandomItems = <T extends unknown>(arr: T[], n: number): T[] => {
|
||||
export const pickRandomItems = <T>(arr: T[], n: number): T[] => {
|
||||
const shuffled = Array.from(arr).sort(() => 0.5 - Math.random())
|
||||
return shuffled.slice(0, n)
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import { FlatList, StyleSheet } from 'react-native'
|
||||
import { Button, Divider, List, Switch, Text, TextInput, useTheme } from 'react-native-paper'
|
||||
import SInfo from 'react-native-sensitive-info'
|
||||
import RBSheet from 'react-native-raw-bottom-sheet'
|
||||
import { AppContext, Config } from '../../Contexts/AppContext'
|
||||
import { AppContext, type Config } from '../../Contexts/AppContext'
|
||||
import { imageHostingServices } from '../../Constants/Services'
|
||||
|
||||
export const ConfigPage: React.FC = () => {
|
||||
|
@ -1,93 +1,113 @@
|
||||
import * as React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { ScrollView, Text, View, StyleSheet, LayoutAnimation, Platform, UIManager } from 'react-native';
|
||||
import { List, Searchbar, Divider, useTheme } from 'react-native-paper';
|
||||
import * as React from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import {
|
||||
Text,
|
||||
View,
|
||||
StyleSheet,
|
||||
LayoutAnimation,
|
||||
Platform,
|
||||
UIManager,
|
||||
type ListRenderItem,
|
||||
FlatList,
|
||||
} from 'react-native'
|
||||
import { List, Searchbar, useTheme } from 'react-native-paper'
|
||||
|
||||
if (Platform.OS === 'android' && UIManager.setLayoutAnimationEnabledExperimental) {
|
||||
UIManager.setLayoutAnimationEnabledExperimental(true);
|
||||
UIManager.setLayoutAnimationEnabledExperimental(true)
|
||||
}
|
||||
|
||||
interface FAQItem {
|
||||
id: number;
|
||||
question: string;
|
||||
answer: string;
|
||||
id: number
|
||||
question: string
|
||||
answer: string
|
||||
group: string
|
||||
}
|
||||
|
||||
const FAQ: React.FC<{ faq: FAQItem; expanded: boolean; onPress: () => void }> = ({ faq, expanded, onPress }) => {
|
||||
const theme = useTheme();
|
||||
const FAQ: React.FC<{ item: FAQItem }> = ({ item }) => {
|
||||
const [expanded, setExpanded] = React.useState<boolean>(false)
|
||||
|
||||
return (
|
||||
<List.Accordion title={faq.question} expanded={expanded} onPress={onPress}>
|
||||
<Text numberOfLines={expanded ? undefined : 3} style={[styles.container, { color: theme.colors.onBackground }]}>
|
||||
{faq.answer}
|
||||
</Text>
|
||||
<List.Accordion
|
||||
title={item.question}
|
||||
expanded={expanded}
|
||||
onPress={() => {
|
||||
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
|
||||
setExpanded((prev) => !prev)
|
||||
}}
|
||||
>
|
||||
<Text numberOfLines={expanded ? undefined : 3}>{item.answer}</Text>
|
||||
</List.Accordion>
|
||||
);
|
||||
};
|
||||
|
||||
const FAQList: React.FC<{ faqs: FAQItem[]; search: string }> = ({ faqs, search }) => {
|
||||
const [expandedId, setExpandedId] = React.useState<number | null>(null);
|
||||
|
||||
const handlePress = (id: number) => {
|
||||
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
|
||||
setExpandedId(expandedId === id ? null : id);
|
||||
};
|
||||
|
||||
const filteredFaqs = faqs.filter((faq) => faq.question.toLowerCase().includes(search.toLowerCase()));
|
||||
const groupedFaqs = filteredFaqs.reduce<{ [key: string]: FAQItem[] }>((groups, faq) => {
|
||||
const firstLetter = faq.question[0].toUpperCase();
|
||||
if (!groups[firstLetter]) {
|
||||
groups[firstLetter] = [];
|
||||
)
|
||||
}
|
||||
|
||||
const FaqPage: React.FC = () => {
|
||||
const [search, setSearch] = React.useState('')
|
||||
const { t } = useTranslation('common')
|
||||
const theme = useTheme()
|
||||
const faqs: FAQItem[] = React.useMemo(
|
||||
() =>
|
||||
[
|
||||
// {
|
||||
// id: 1,
|
||||
// question: t('faq.note_broadcasting.question'),
|
||||
// answer: t('faq.note_broadcasting.answer'),
|
||||
// group: '',
|
||||
// },
|
||||
{
|
||||
id: 2,
|
||||
question: t('faq.notes_colouring.question'),
|
||||
answer: t('faq.notes_colouring.answer'),
|
||||
group: '',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
question: t('faq.resilient_login.question'),
|
||||
answer: t('faq.resilient_login.answer'),
|
||||
group: '',
|
||||
},
|
||||
]
|
||||
.map((item) => {
|
||||
item.group = item.question[0].toLowerCase()
|
||||
return item
|
||||
})
|
||||
.sort((a, b) => (a.group < b.group ? -1 : 1)),
|
||||
[],
|
||||
)
|
||||
const [visibleFaqs, setVisibleFaqs] = React.useState<FAQItem[]>(faqs)
|
||||
|
||||
React.useEffect(() => {
|
||||
if (search !== '') {
|
||||
const searchLower = search.toLowerCase()
|
||||
setVisibleFaqs(faqs.filter((item) => item.question.toLowerCase().includes(searchLower)))
|
||||
} else {
|
||||
setVisibleFaqs(faqs)
|
||||
}
|
||||
}, [search])
|
||||
|
||||
const renderItem: ListRenderItem<FAQItem> = ({ item, index }) => {
|
||||
return (
|
||||
<>
|
||||
{(index === 0 || visibleFaqs[index - 1].group !== item.group) && (
|
||||
<List.Subheader>{item.group.toUpperCase()}</List.Subheader>
|
||||
)}
|
||||
<FAQ item={item} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
groups[firstLetter].push(faq);
|
||||
return groups;
|
||||
}, {});
|
||||
|
||||
return (
|
||||
<ScrollView>
|
||||
{Object.entries(groupedFaqs).map(([letter, faqs]) => (
|
||||
<View key={letter}>
|
||||
<List.Subheader>{letter}</List.Subheader>
|
||||
{faqs.map((faq) => (
|
||||
<FAQ key={faq.id} faq={faq} expanded={faq.id === expandedId} onPress={() => handlePress(faq.id)} />
|
||||
))}
|
||||
<Divider />
|
||||
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||
<Searchbar placeholder={t('faq.searchLabel') ?? ''} value={search} onChangeText={setSearch} />
|
||||
<FlatList data={visibleFaqs} renderItem={renderItem} style={styles.list} />
|
||||
</View>
|
||||
))}
|
||||
</ScrollView>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
interface FaqPageProps {}
|
||||
|
||||
const FaqPage: React.FC<FaqPageProps> = () => {
|
||||
const [search, setSearch] = React.useState('');
|
||||
const { t } = useTranslation('common');
|
||||
const theme = useTheme();
|
||||
|
||||
const faqs: FAQItem[] = [
|
||||
{ id: 1, question: t('faq.note_broadcasting.question'), answer: t('faq.note_broadcasting.answer') },
|
||||
{ id: 2, question: t('faq.notes_colouring.question'), answer: t('faq.notes_colouring.answer') },
|
||||
{ id: 3, question: t('faq.resilient_login.question'), answer: t('faq.resilient_login.answer') },
|
||||
];
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, backgroundColor: theme.colors.background }}>
|
||||
<Searchbar
|
||||
placeholder={t('faq.searchLabel')}
|
||||
value={search}
|
||||
onChangeText={setSearch}
|
||||
/>
|
||||
<FAQList faqs={faqs} search={search} />
|
||||
</View>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
padding: 16,
|
||||
flex: 1,
|
||||
},
|
||||
});
|
||||
})
|
||||
|
||||
export default FaqPage;
|
||||
export default FaqPage
|
||||
|
@ -123,7 +123,7 @@ export const HomeNavigator: React.FC = () => {
|
||||
<Appbar.Action
|
||||
icon='menu'
|
||||
isLeading
|
||||
onPress={() => (navigation as any as DrawerNavigationProp<{}>).openDrawer()}
|
||||
onPress={() => (navigation as any as DrawerNavigationProp<any>).openDrawer()}
|
||||
/>
|
||||
) : null}
|
||||
<Appbar.Content
|
||||
|
@ -73,12 +73,12 @@ export const HomeNavigator: React.FC = () => {
|
||||
const leftAction: () => JSX.Element = () => {
|
||||
if (back && route.name !== 'ProfileLoad') {
|
||||
return <Appbar.BackAction onPress={() => navigation.goBack()} />
|
||||
} else if ((navigation as any as DrawerNavigationProp<{}>).openDrawer) {
|
||||
} else if ((navigation as any as DrawerNavigationProp<any>).openDrawer) {
|
||||
return (
|
||||
<Appbar.Action
|
||||
icon='menu'
|
||||
isLeading
|
||||
onPress={() => (navigation as any as DrawerNavigationProp<{}>).openDrawer()}
|
||||
onPress={() => (navigation as any as DrawerNavigationProp<any>).openDrawer()}
|
||||
/>
|
||||
)
|
||||
} else {
|
||||
|
@ -1,12 +1,12 @@
|
||||
import React, { useCallback, useContext, useEffect, useState } from 'react'
|
||||
import {
|
||||
NativeScrollEvent,
|
||||
NativeSyntheticEvent,
|
||||
type NativeScrollEvent,
|
||||
type NativeSyntheticEvent,
|
||||
RefreshControl,
|
||||
StyleSheet,
|
||||
View,
|
||||
} from 'react-native'
|
||||
import { AppContext, Config } from '../../../Contexts/AppContext'
|
||||
import { AppContext, type Config } from '../../../Contexts/AppContext'
|
||||
import SInfo from 'react-native-sensitive-info'
|
||||
import { getMentionNotes, getNotes, type Note } from '../../../Functions/DatabaseFunctions/Notes'
|
||||
import { RelayPoolContext } from '../../../Contexts/RelayPoolContext'
|
||||
@ -20,11 +20,11 @@ import { useFocusEffect } from '@react-navigation/native'
|
||||
import { format, formatRelative, fromUnixTime, getUnixTime } from 'date-fns'
|
||||
import { FlashList, type ListRenderItem } from '@shopify/flash-list'
|
||||
import { getETags } from '../../../Functions/RelayFunctions/Events'
|
||||
import { getReactions, Reaction } from '../../../Functions/DatabaseFunctions/Reactions'
|
||||
import { getUsers, User } from '../../../Functions/DatabaseFunctions/Users'
|
||||
import { getReactions, type Reaction } from '../../../Functions/DatabaseFunctions/Reactions'
|
||||
import { getUsers, type User } from '../../../Functions/DatabaseFunctions/Users'
|
||||
import { username } from '../../../Functions/RelayFunctions/Users'
|
||||
import { TouchableWithoutFeedback } from 'react-native-gesture-handler'
|
||||
import { getUserZaps, Zap } from '../../../Functions/DatabaseFunctions/Zaps'
|
||||
import { getUserZaps, type Zap } from '../../../Functions/DatabaseFunctions/Zaps'
|
||||
import { handleInfinityScroll } from '../../../Functions/NativeFunctions'
|
||||
|
||||
export const NotificationsFeed: React.FC = () => {
|
||||
|
@ -11,7 +11,7 @@ import { getUsers, type User } from '../../../Functions/DatabaseFunctions/Users'
|
||||
import { relayToColor } from '../../../Functions/NativeFunctions'
|
||||
import {
|
||||
getAllRelayMetadata,
|
||||
RelayMetadata,
|
||||
type RelayMetadata,
|
||||
} from '../../../Functions/DatabaseFunctions/RelayMetadatas'
|
||||
import { getContactsRelays } from '../../../Functions/RelayFunctions/Metadata'
|
||||
|
||||
|
@ -33,7 +33,7 @@ import { getUnixTime } from 'date-fns'
|
||||
import { getAllRelayMetadata } from '../../Functions/DatabaseFunctions/RelayMetadatas'
|
||||
import { getContactsRelays } from '../../Functions/RelayFunctions/Metadata'
|
||||
import { AppContext } from '../../Contexts/AppContext'
|
||||
import { getUsers, User } from '../../Functions/DatabaseFunctions/Users'
|
||||
import { getUsers, type User } from '../../Functions/DatabaseFunctions/Users'
|
||||
|
||||
export const RelaysPage: React.FC = () => {
|
||||
const defaultRelayInput = React.useMemo(() => 'wss://', [])
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { useFocusEffect } from '@react-navigation/native'
|
||||
import { FlashList, ListRenderItem } from '@shopify/flash-list'
|
||||
import { FlashList, type ListRenderItem } from '@shopify/flash-list'
|
||||
import { t } from 'i18next'
|
||||
import debounce from 'lodash.debounce'
|
||||
import { Kind } from 'nostr-tools'
|
||||
@ -12,8 +12,8 @@ import NoteCard from '../../Components/NoteCard'
|
||||
import ProfileData from '../../Components/ProfileData'
|
||||
import { AppContext } from '../../Contexts/AppContext'
|
||||
import { RelayPoolContext } from '../../Contexts/RelayPoolContext'
|
||||
import { getNotes, Note } from '../../Functions/DatabaseFunctions/Notes'
|
||||
import { getUsers, User } from '../../Functions/DatabaseFunctions/Users'
|
||||
import { getNotes, type Note } from '../../Functions/DatabaseFunctions/Notes'
|
||||
import { getUsers, type User } from '../../Functions/DatabaseFunctions/Users'
|
||||
import { validNip21 } from '../../Functions/NativeFunctions'
|
||||
import { navigate } from '../../lib/Navigation'
|
||||
import { getNpub } from '../../lib/nostr/Nip19'
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { Buffer } from 'buffer'
|
||||
import { generateSecureRandom } from 'react-native-securerandom'
|
||||
import * as secp256k1 from '@noble/secp256k1'
|
||||
// @ts-expect-error
|
||||
import aes from 'browserify-cipher'
|
||||
|
||||
export const encrypt: (privkey: string, pubkey: string, text: string) => Promise<string> = async (
|
||||
|
@ -86,7 +86,7 @@
|
||||
"babel-jest": "^29.4.3",
|
||||
"eslint": "^8.36.0",
|
||||
"eslint-config-prettier": "^8.6.0",
|
||||
"eslint-config-standard-with-typescript": "^24.0.0",
|
||||
"eslint-config-standard-with-typescript": "^34.0.1",
|
||||
"eslint-import-resolver-typescript": "^3.5.3",
|
||||
"eslint-plugin-i18next": "^6.0.0-6",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
|
92
yarn.lock
92
yarn.lock
@ -1914,16 +1914,6 @@
|
||||
semver "^7.3.7"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/parser@^5.0.0":
|
||||
version "5.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.41.0.tgz#0414a6405007e463dc527b459af1f19430382d67"
|
||||
integrity sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "5.41.0"
|
||||
"@typescript-eslint/types" "5.41.0"
|
||||
"@typescript-eslint/typescript-estree" "5.41.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/parser@^5.30.5":
|
||||
version "5.42.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.42.0.tgz#be0ffbe279e1320e3d15e2ef0ad19262f59e9240"
|
||||
@ -1934,13 +1924,15 @@
|
||||
"@typescript-eslint/typescript-estree" "5.42.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@5.41.0":
|
||||
version "5.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz#28e3a41d626288d0628be14cf9de8d49fc30fadf"
|
||||
integrity sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==
|
||||
"@typescript-eslint/parser@^5.43.0":
|
||||
version "5.55.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.55.0.tgz#8c96a0b6529708ace1dcfa60f5e6aec0f5ed2262"
|
||||
integrity sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.41.0"
|
||||
"@typescript-eslint/visitor-keys" "5.41.0"
|
||||
"@typescript-eslint/scope-manager" "5.55.0"
|
||||
"@typescript-eslint/types" "5.55.0"
|
||||
"@typescript-eslint/typescript-estree" "5.55.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@5.42.0":
|
||||
version "5.42.0"
|
||||
@ -1958,6 +1950,14 @@
|
||||
"@typescript-eslint/types" "5.43.0"
|
||||
"@typescript-eslint/visitor-keys" "5.43.0"
|
||||
|
||||
"@typescript-eslint/scope-manager@5.55.0":
|
||||
version "5.55.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz#e863bab4d4183ddce79967fe10ceb6c829791210"
|
||||
integrity sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.55.0"
|
||||
"@typescript-eslint/visitor-keys" "5.55.0"
|
||||
|
||||
"@typescript-eslint/type-utils@5.42.0":
|
||||
version "5.42.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.42.0.tgz#4206d7192d4fe903ddf99d09b41d4ac31b0b7dca"
|
||||
@ -1978,11 +1978,6 @@
|
||||
debug "^4.3.4"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/types@5.41.0":
|
||||
version "5.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.41.0.tgz#6800abebc4e6abaf24cdf220fb4ce28f4ab09a85"
|
||||
integrity sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==
|
||||
|
||||
"@typescript-eslint/types@5.42.0":
|
||||
version "5.42.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.42.0.tgz#5aeff9b5eced48f27d5b8139339bf1ef805bad7a"
|
||||
@ -1993,18 +1988,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.43.0.tgz#e4ddd7846fcbc074325293515fa98e844d8d2578"
|
||||
integrity sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==
|
||||
|
||||
"@typescript-eslint/typescript-estree@5.41.0":
|
||||
version "5.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz#bf5c6b3138adbdc73ba4871d060ae12c59366c61"
|
||||
integrity sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.41.0"
|
||||
"@typescript-eslint/visitor-keys" "5.41.0"
|
||||
debug "^4.3.4"
|
||||
globby "^11.1.0"
|
||||
is-glob "^4.0.3"
|
||||
semver "^7.3.7"
|
||||
tsutils "^3.21.0"
|
||||
"@typescript-eslint/types@5.55.0":
|
||||
version "5.55.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.55.0.tgz#9830f8d3bcbecf59d12f821e5bc6960baaed41fd"
|
||||
integrity sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==
|
||||
|
||||
"@typescript-eslint/typescript-estree@5.42.0":
|
||||
version "5.42.0"
|
||||
@ -2032,6 +2019,19 @@
|
||||
semver "^7.3.7"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/typescript-estree@5.55.0":
|
||||
version "5.55.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz#8db7c8e47ecc03d49b05362b8db6f1345ee7b575"
|
||||
integrity sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.55.0"
|
||||
"@typescript-eslint/visitor-keys" "5.55.0"
|
||||
debug "^4.3.4"
|
||||
globby "^11.1.0"
|
||||
is-glob "^4.0.3"
|
||||
semver "^7.3.7"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/utils@5.42.0", "@typescript-eslint/utils@^5.10.0":
|
||||
version "5.42.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.42.0.tgz#f06bd43b9a9a06ed8f29600273240e84a53f2f15"
|
||||
@ -2060,14 +2060,6 @@
|
||||
eslint-utils "^3.0.0"
|
||||
semver "^7.3.7"
|
||||
|
||||
"@typescript-eslint/visitor-keys@5.41.0":
|
||||
version "5.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz#d3510712bc07d5540160ed3c0f8f213b73e3bcd9"
|
||||
integrity sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.41.0"
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@5.42.0":
|
||||
version "5.42.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz#ee8d62d486f41cfe646632fab790fbf0c1db5bb0"
|
||||
@ -2084,6 +2076,14 @@
|
||||
"@typescript-eslint/types" "5.43.0"
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@5.55.0":
|
||||
version "5.55.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz#01ad414fca8367706d76cdb94adf788dc5b664a2"
|
||||
integrity sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "5.55.0"
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
abort-controller@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
||||
@ -3681,12 +3681,12 @@ eslint-config-prettier@^8.6.0:
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207"
|
||||
integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==
|
||||
|
||||
eslint-config-standard-with-typescript@^24.0.0:
|
||||
version "24.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-24.0.0.tgz#30e83b580380fd71477bf80bcb5405e8a46f555f"
|
||||
integrity sha512-vEnGXZ5aiR1enl9652iIP4nTpY3GPcNEwuhrsPbKO3Ce3D6T3yCqZdkUPk8nJetfdL/yO0DLsHg2d/l9iECIdg==
|
||||
eslint-config-standard-with-typescript@^34.0.1:
|
||||
version "34.0.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-34.0.1.tgz#4cf797c7f54b2eb1683c7e990b45a257ed4a9992"
|
||||
integrity sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==
|
||||
dependencies:
|
||||
"@typescript-eslint/parser" "^5.0.0"
|
||||
"@typescript-eslint/parser" "^5.43.0"
|
||||
eslint-config-standard "17.0.0"
|
||||
|
||||
eslint-config-standard@17.0.0:
|
||||
|
Loading…
Reference in New Issue
Block a user