2022-10-12 01:07:19 +00:00
|
|
|
import React, {useState} from 'react';
|
2022-09-11 03:35:20 +00:00
|
|
|
import {Snackbar} from 'react-native-paper';
|
2022-10-12 01:07:19 +00:00
|
|
|
import {CombinedDarkTheme, CombinedDefaultTheme} from './App';
|
|
|
|
import useDark from './use-dark';
|
2022-09-11 03:35:20 +00:00
|
|
|
|
|
|
|
export const SnackbarContext = React.createContext<{
|
|
|
|
toast: (value: string, timeout: number) => void;
|
|
|
|
}>({toast: () => null});
|
|
|
|
|
2022-09-24 03:29:24 +00:00
|
|
|
export default function MassiveSnack({
|
|
|
|
children,
|
|
|
|
}: {
|
2022-10-04 01:35:56 +00:00
|
|
|
children?: JSX.Element[] | JSX.Element;
|
2022-09-24 03:29:24 +00:00
|
|
|
}) {
|
2022-09-11 03:35:20 +00:00
|
|
|
const [snackbar, setSnackbar] = useState('');
|
2022-09-16 09:37:44 +00:00
|
|
|
const [timeoutId, setTimeoutId] = useState(0);
|
2022-10-12 01:07:19 +00:00
|
|
|
const dark = useDark();
|
2022-09-11 03:35:20 +00:00
|
|
|
|
|
|
|
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(''),
|
2022-10-12 01:07:19 +00:00
|
|
|
color: dark
|
|
|
|
? CombinedDarkTheme.colors.background
|
|
|
|
: CombinedDefaultTheme.colors.background,
|
2022-09-11 03:35:20 +00:00
|
|
|
}}>
|
|
|
|
{snackbar}
|
|
|
|
</Snackbar>
|
|
|
|
</>
|
|
|
|
);
|
2022-09-24 03:29:24 +00:00
|
|
|
}
|