1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00

fix: avatar upload and logout

This commit is contained in:
Fedor Katurov 2023-03-17 18:13:04 +06:00
parent 315ba31014
commit bb163eae8f
4 changed files with 41 additions and 19 deletions

View file

@ -27,6 +27,7 @@ const Avatar = forwardRef<HTMLDivElement, Props>(
className, className,
preset = imagePresets.avatar, preset = imagePresets.avatar,
hasUpdates, hasUpdates,
children,
...rest ...rest
}, },
ref, ref,
@ -43,7 +44,9 @@ const Avatar = forwardRef<HTMLDivElement, Props>(
className={classNames(styles.avatar, className)} className={classNames(styles.avatar, className)}
size={size} size={size}
ref={ref} ref={ref}
/> >
{children}
</Square>
</div> </div>
); );
}, },

View file

@ -27,11 +27,14 @@ const MenuButton: FC<MenuButtonProps> = ({
activate = 'focus', activate = 'focus',
fixed, fixed,
}) => { }) => {
const focus = useFocusEvent(false, 150); const focus = useFocusEvent(false, 300);
const hover = useFocusEvent(false, 150); const hover = useFocusEvent(false, 300);
const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null); const [referenceElement, setReferenceElement] =
const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null); useState<HTMLButtonElement | null>(null);
const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(
null,
);
const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null); const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);
const popper = usePopper(referenceElement, popperElement, { const popper = usePopper(referenceElement, popperElement, {
@ -83,7 +86,11 @@ const MenuButton: FC<MenuButtonProps> = ({
[styles.visible]: visible, [styles.visible]: visible,
})} })}
> >
<div style={popper.styles.arrow} ref={setArrowElement} className={styles.arrow} /> <div
style={popper.styles.arrow}
ref={setArrowElement}
className={styles.arrow}
/>
{children} {children}
</div> </div>
</> </>

View file

@ -1,8 +1,7 @@
import React, { FC } from 'react'; import { FC } from 'react';
import { Filler } from '~/components/containers/Filler'; import { Filler } from '~/components/containers/Filler';
import { Button } from '~/components/input/Button'; import { Button } from '~/components/input/Button';
import { ProfileSettings } from '~/components/profile/ProfileSettings';
import { useStackContext } from '~/components/sidebar/SidebarStack'; import { useStackContext } from '~/components/sidebar/SidebarStack';
import { SidebarStackCard } from '~/components/sidebar/SidebarStackCard'; import { SidebarStackCard } from '~/components/sidebar/SidebarStackCard';
import { UserSettingsView } from '~/containers/settings/UserSettingsView'; import { UserSettingsView } from '~/containers/settings/UserSettingsView';

View file

@ -1,18 +1,22 @@
import { useCallback, useEffect } from 'react'; import { useCallback, useEffect } from 'react';
export const useCloseOnEscape = (onRequestClose?: () => void, ignore_inputs = false) => { export const useCloseOnEscape = (
onRequestClose?: () => void,
ignoreInputs = false,
) => {
const onEscape = useCallback( const onEscape = useCallback(
event => { (event) => {
if (event.key !== 'Escape' || !onRequestClose) return; if (event.key !== 'Escape' || !onRequestClose) return;
if ( if (
ignore_inputs && !ignoreInputs &&
(event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') (event.target.tagName === 'INPUT' ||
event.target.tagName === 'TEXTAREA')
) )
return; return;
onRequestClose(); onRequestClose();
}, },
[ignore_inputs, onRequestClose] [ignoreInputs, onRequestClose],
); );
useEffect(() => { useEffect(() => {
@ -24,7 +28,10 @@ export const useCloseOnEscape = (onRequestClose?: () => void, ignore_inputs = fa
}, [onEscape]); }, [onEscape]);
}; };
export const useDelayedReady = (setReady: (val: boolean) => void, delay: number = 500) => { export const useDelayedReady = (
setReady: (val: boolean) => void,
delay: number = 500,
) => {
useEffect(() => { useEffect(() => {
const timer = setTimeout(() => setReady(true), delay); const timer = setTimeout(() => setReady(true), delay);
@ -39,20 +46,26 @@ export const useDelayedReady = (setReady: (val: boolean) => void, delay: number
* @param onUpload -- upload callback * @param onUpload -- upload callback
* @param allowedTypes -- list of allowed types * @param allowedTypes -- list of allowed types
*/ */
export const useFileDropZone = (onUpload: (file: File[]) => void, allowedTypes?: string[]) => { export const useFileDropZone = (
onUpload: (file: File[]) => void,
allowedTypes?: string[],
) => {
return useCallback( return useCallback(
event => { (event) => {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
const files: File[] = Array.from((event.dataTransfer?.files as File[]) || []).filter( const files: File[] = Array.from(
(file: File) => file?.type && (!allowedTypes || allowedTypes.includes(file.type)) (event.dataTransfer?.files as File[]) || [],
).filter(
(file: File) =>
file?.type && (!allowedTypes || allowedTypes.includes(file.type)),
); );
if (!files || !files.length) return; if (!files || !files.length) return;
onUpload(files); onUpload(files);
}, },
[allowedTypes, onUpload] [allowedTypes, onUpload],
); );
}; };