mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 13:05:32 +09:00
fix(app): track member list width with a media query (#1939)
This commit is contained in:
1 parent
ef6fb4903f
commit
32d7ae3eef
1 file changed
+13
-17
@@ -3,32 +3,28 @@
|
|||||||
import MemberList from '@app/features/member/state/MemberList';
|
import MemberList from '@app/features/member/state/MemberList';
|
||||||
import {useEffect, useState} from 'react';
|
import {useEffect, useState} from 'react';
|
||||||
|
|
||||||
const MIN_WIDTH_FOR_MEMBERS = 1024;
|
const MEMBER_LIST_FIT_QUERY = '(min-width: 1024px)';
|
||||||
|
|
||||||
interface UseMemberListVisibleOptions {
|
interface UseMemberListVisibleOptions {
|
||||||
channelId?: string | null;
|
channelId?: string | null;
|
||||||
defaultHiddenForChannel?: boolean;
|
defaultHiddenForChannel?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useMemberListVisible = (options: UseMemberListVisibleOptions = {}): boolean => {
|
|
||||||
const [canFit, setCanFit] = useState(() => window.innerWidth >= MIN_WIDTH_FOR_MEMBERS);
|
|
||||||
useEffect(() => {
|
|
||||||
const checkWidth = () => {
|
|
||||||
setCanFit(window.innerWidth >= MIN_WIDTH_FOR_MEMBERS);
|
|
||||||
};
|
|
||||||
window.addEventListener('resize', checkWidth);
|
|
||||||
return () => window.removeEventListener('resize', checkWidth);
|
|
||||||
}, []);
|
|
||||||
return canFit && MemberList.isMembersVisible(options);
|
|
||||||
};
|
|
||||||
export const useCanFitMemberList = (): boolean => {
|
export const useCanFitMemberList = (): boolean => {
|
||||||
const [canFit, setCanFit] = useState(() => window.innerWidth >= MIN_WIDTH_FOR_MEMBERS);
|
const [canFit, setCanFit] = useState(() => window.matchMedia(MEMBER_LIST_FIT_QUERY).matches);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const checkWidth = () => {
|
const mediaQuery = window.matchMedia(MEMBER_LIST_FIT_QUERY);
|
||||||
setCanFit(window.innerWidth >= MIN_WIDTH_FOR_MEMBERS);
|
const handleChange = (event: MediaQueryListEvent | MediaQueryList) => {
|
||||||
|
setCanFit(event.matches);
|
||||||
};
|
};
|
||||||
window.addEventListener('resize', checkWidth);
|
handleChange(mediaQuery);
|
||||||
return () => window.removeEventListener('resize', checkWidth);
|
mediaQuery.addEventListener('change', handleChange);
|
||||||
|
return () => mediaQuery.removeEventListener('change', handleChange);
|
||||||
}, []);
|
}, []);
|
||||||
return canFit;
|
return canFit;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const useMemberListVisible = (options: UseMemberListVisibleOptions = {}): boolean => {
|
||||||
|
const canFit = useCanFitMemberList();
|
||||||
|
return canFit && MemberList.isMembersVisible(options);
|
||||||
|
};
|
||||||
Reference in new issue
Block a user