2022-09-11 03:35:20 +00:00
|
|
|
import React, {useState} from 'react';
|
|
|
|
import {useColorScheme} from 'react-native';
|
|
|
|
import {Snackbar} from 'react-native-paper';
|
|
|
|
import {CombinedDarkTheme, CombinedDefaultTheme} from './App';
|
|
|
|
|
|
|
|
export const SnackbarContext = React.createContext<{
|
|
|
|
toast: (value: string, timeout: number) => void;
|
|
|
|
}>({toast: () => null});
|
|
|
|
|
|
|
|
const MassiveSnack = ({children}: {children: JSX.Element[] | JSX.Element}) => {
|
|
|
|
const [snackbar, setSnackbar] = useState('');
|
2022-09-16 09:37:44 +00:00
|
|
|
const [timeoutId, setTimeoutId] = useState(0);
|
2022-09-11 03:35:20 +00:00
|
|
|
const dark = useColorScheme() === 'dark';
|
|
|
|
|
|
|
|
const toast = (value: string, timeout: number) => {
|
|
|
|
setSnackbar(value);
|
|
|
|
clearTimeout(timeoutId);
|
2022-09-16 09:37:44 +00:00
|
|
|
const id = setTimeout(() => setSnackbar(''), timeout);
|
|
|
|
setTimeoutId(id);
|
2022-09-11 03:35:20 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<SnackbarContext.Provider value={{toast}}>
|
|
|
|
{children}
|
|
|
|
</SnackbarContext.Provider>
|
|
|
|
<Snackbar
|
|
|
|
onDismiss={() => setSnackbar('')}
|
|
|
|
visible={!!snackbar}
|
|
|
|
action={{
|
|
|
|
label: 'Close',
|
|
|
|
onPress: () => setSnackbar(''),
|
|
|
|
color: dark
|
|
|
|
? CombinedDarkTheme.colors.background
|
|
|
|
: CombinedDefaultTheme.colors.primary,
|
|
|
|
}}>
|
|
|
|
{snackbar}
|
|
|
|
</Snackbar>
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default MassiveSnack;
|