Compare commits

...

2 Commits

Author SHA1 Message Date
Tom Moor 036b584184 fix: Members table always fades in 2025-03-01 11:14:03 -05:00
Tom Moor 575f1da115 PeopleTable -> MemberTable 2025-03-01 10:53:25 -05:00
7 changed files with 61 additions and 41 deletions
-8
View File
@@ -1,8 +0,0 @@
import styled from "styled-components";
import { fadeIn } from "~/styles/animations";
const Fade = styled.span<{ timing?: number | string }>`
animation: ${fadeIn} ${(props) => props.timing || "250ms"} ease-in-out;
`;
export default Fade;
+24
View File
@@ -0,0 +1,24 @@
import React from "react";
import styled from "styled-components";
import { fadeIn } from "~/styles/animations";
const Fade = styled.span<{ timing?: number | string }>`
animation: ${fadeIn} ${(props) => props.timing || "250ms"} ease-in-out;
`;
type Props = {
children?: JSX.Element | null;
/** If true, children will be animated. */
animate: boolean;
};
/**
* Wraps children in a <Fade> if loading is true on mount.
*/
export const ConditionalFade = ({ animate, children }: Props) => {
const [isAnimated] = React.useState(animate);
return isAnimated ? <Fade>{children}</Fade> : <>{children}</>;
};
export default Fade;
@@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next";
import styled from "styled-components";
import { s } from "@shared/styles";
import ArrowKeyNavigation from "~/components/ArrowKeyNavigation";
import Fade from "~/components/Fade";
import { ConditionalFade } from "~/components/Fade";
import useStores from "~/hooks/useStores";
import RecentSearchListItem from "./RecentSearchListItem";
@@ -19,7 +19,6 @@ function RecentSearches(
) {
const { searches } = useStores();
const { t } = useTranslation();
const [isPreloaded] = React.useState(searches.recent.length > 0);
React.useEffect(() => {
void searches.fetchPage({
@@ -48,7 +47,11 @@ function RecentSearches(
</>
) : null;
return isPreloaded ? content : <Fade>{content}</Fade>;
return (
<ConditionalFade animate={!searches.recent.length}>
{content}
</ConditionalFade>
);
}
const Heading = styled.h2`
+12 -9
View File
@@ -10,6 +10,7 @@ import Group from "~/models/Group";
import { Action } from "~/components/Actions";
import Button from "~/components/Button";
import Empty from "~/components/Empty";
import { ConditionalFade } from "~/components/Fade";
import Heading from "~/components/Heading";
import InputSearch from "~/components/InputSearch";
import Scene from "~/components/Scene";
@@ -149,15 +150,17 @@ function Groups() {
onChange={handleSearch}
/>
</StickyFilters>
<GroupsTable
data={data ?? []}
sort={sort}
loading={loading}
page={{
hasNext: !!next,
fetchNext: next,
}}
/>
<ConditionalFade animate={!data}>
<GroupsTable
data={data ?? []}
sort={sort}
loading={loading}
page={{
hasNext: !!next,
fetchNext: next,
}}
/>
</ConditionalFade>
</>
)}
</Scene>
+5 -5
View File
@@ -9,7 +9,7 @@ import styled from "styled-components";
import UsersStore, { queriedUsers } from "~/stores/UsersStore";
import { Action } from "~/components/Actions";
import Button from "~/components/Button";
import Fade from "~/components/Fade";
import { ConditionalFade } from "~/components/Fade";
import Heading from "~/components/Heading";
import InputSearch from "~/components/InputSearch";
import Scene from "~/components/Scene";
@@ -22,7 +22,7 @@ import usePolicy from "~/hooks/usePolicy";
import useQuery from "~/hooks/useQuery";
import useStores from "~/hooks/useStores";
import { useTableRequest } from "~/hooks/useTableRequest";
import { PeopleTable } from "./components/PeopleTable";
import { MembersTable } from "./components/MembersTable";
import { StickyFilters } from "./components/StickyFilters";
import UserRoleFilter from "./components/UserRoleFilter";
import UserStatusFilter from "./components/UserStatusFilter";
@@ -163,8 +163,8 @@ function Members() {
onSelect={handleRoleFilter}
/>
</StickyFilters>
<Fade>
<PeopleTable
<ConditionalFade animate={!data}>
<MembersTable
data={data ?? []}
sort={sort}
canManage={can.update}
@@ -174,7 +174,7 @@ function Members() {
fetchNext: next,
}}
/>
</Fade>
</ConditionalFade>
</Scene>
);
}
+13 -15
View File
@@ -5,7 +5,7 @@ import * as React from "react";
import { useTranslation, Trans } from "react-i18next";
import { Link } from "react-router-dom";
import { toast } from "sonner";
import Fade from "~/components/Fade";
import { ConditionalFade } from "~/components/Fade";
import Heading from "~/components/Heading";
import Notice from "~/components/Notice";
import Scene from "~/components/Scene";
@@ -83,20 +83,18 @@ function Shares() {
</Trans>
</Text>
{data?.length ? (
<Fade>
<SharesTable
data={data ?? []}
sort={sort}
canManage={can.update}
loading={loading}
page={{
hasNext: !!next,
fetchNext: next,
}}
/>
</Fade>
) : null}
<ConditionalFade animate={!data}>
<SharesTable
data={data ?? []}
sort={sort}
canManage={can.update}
loading={loading}
page={{
hasNext: !!next,
fetchNext: next,
}}
/>
</ConditionalFade>
</Scene>
);
}
@@ -24,7 +24,7 @@ type Props = Omit<TableProps<User>, "columns" | "rowHeight"> & {
canManage: boolean;
};
export function PeopleTable({ canManage, ...rest }: Props) {
export function MembersTable({ canManage, ...rest }: Props) {
const { t } = useTranslation();
const currentUser = useCurrentUser();