Skip to content

Commit

Permalink
fix(LoadingOverlay): add smooth transition to fade in and out
Browse files Browse the repository at this point in the history
  • Loading branch information
TheChristophe committed Sep 14, 2023
1 parent 1e599de commit a0a1864
Show file tree
Hide file tree
Showing 12 changed files with 58 additions and 38 deletions.
16 changes: 11 additions & 5 deletions components/TagSelector/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const TagSelector: FC<TagSelectorProps> = ({
() => api.tags.searchTag(searchString.split(' ')),
{
keepPreviousData: true,
}
},
);

const select = (newTag: Tag) => {
Expand Down Expand Up @@ -79,22 +79,28 @@ const TagSelector: FC<TagSelectorProps> = ({
{tags.data.data.items
.filter(
(tag) =>
!selected.some((otherTag) => otherTag.id === tag.id)
!selected.some((otherTag) => otherTag.id === tag.id),
)
.map((tag) => (
<PlaceholderTag key={tag.id} />
))}
</div>
)}
{(tags.isFetching || tags.isLoading || tags.isRefetching) &&
!tags.isPreviousData && <LoadingOverlay />}
<LoadingOverlay
loading={
(tags.isFetching || tags.isLoading || tags.isRefetching) &&
!tags.isPreviousData
}
/>
{tags.isSuccess && !tags.isPreviousData && (
<>
<div className="d-flex">
{tags.data.data.items
.filter(
(tag) =>
!selected.some((otherTag) => otherTag.id === tag.id)
!selected.some(
(otherTag) => otherTag.id === tag.id,
),
)
.map((tag) => (
<UnselectedTag tag={tag} select={select} key={tag.id} />
Expand Down
9 changes: 7 additions & 2 deletions components/loadingOverlay.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import { type FC, type PropsWithChildren } from 'react';

import styles from 'styles/loadingOverlay.module.css';
import clsx from 'clsx';

type LoadingOverlayProps = {
loading?: boolean;
};

/**
* Space filling loading overlay including a spinner or equivalent
*/
export const LoadingOverlay: FC = () => (
<div className={styles['loading']}>
export const LoadingOverlay: FC<LoadingOverlayProps> = ({ loading = true }) => (
<div className={clsx(styles['loading'], !loading && styles['loaded'])}>
<div className={styles['ldsEllipsis']}>
<div />
<div />
Expand Down
2 changes: 1 addition & 1 deletion components/report-view/BenchmarkInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const BenchmarkInfo: FC<BenchmarkInfoProps> = ({ id }) => {

return (
<>
{benchmark.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={benchmark.isLoading} />
{benchmark.isSuccess && (
<>
Image: {benchmarkLinkDisplay(benchmark.data.data)}
Expand Down
2 changes: 1 addition & 1 deletion components/report-view/ClaimInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const ClaimInfo: FC<ClaimInfoProps> = ({ id, claim: claimCache }) => {

return (
<>
{claim.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={claim.isLoading} />
{claimData && (
<>
Message: {truthyOrNoneTag(claimData.message)} <br />
Expand Down
2 changes: 1 addition & 1 deletion components/report-view/FlavorInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const FlavorInfo: FC<FlavorInfoProps> = ({ id }) => {

return (
<>
{flavor.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={flavor.isLoading} />
{flavor.isSuccess && (
<>
Name: {flavor.data.data.name}
Expand Down
2 changes: 1 addition & 1 deletion components/report-view/ResultInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const ResultInfo: FC<ResultInfoProps> = ({ id }) => {

return (
<>
{result.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={result.isLoading} />
{result.isSuccess && (
<>
Site: {result.data.data.site.name}
Expand Down
2 changes: 1 addition & 1 deletion components/report-view/SiteInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const SiteInfo: FC<SiteInfoProps> = ({ id }) => {

return (
<>
{site.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={site.isLoading} />
{site.isSuccess && (
<>
Name: {site.data.data.name}
Expand Down
37 changes: 19 additions & 18 deletions components/searchSelectors/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export function SearchingSelector<Item extends Identifiable>({
},
{
enabled: !disabled,
}
},
);

const updateItem = (item?: Item) => {
Expand All @@ -61,26 +61,27 @@ export function SearchingSelector<Item extends Identifiable>({
<Popover.Body>
<SearchForm setSearchString={setSearchString} />
<div style={{ position: 'relative' }}>
{items.isLoading && (
{items.isError && <div>Failed to fetch benchmarks!</div>}
{(items.isSuccess || items.isLoading) && (
<>
<Table<Item>
setItem={() => undefined}
items={[]}
tableName={tableName}
displayItem={() => null}
/>
<LoadingOverlay />
{items.isLoading ? (
<Table<Item>
setItem={() => undefined}
items={[]}
tableName={tableName}
displayItem={() => null}
/>
) : (
<Table<Item>
items={items.data.data.items}
setItem={updateItem}
tableName={tableName}
displayItem={displayRow}
/>
)}
<LoadingOverlay loading={items.isLoading} />
</>
)}
{items.isError && <div>Failed to fetch benchmarks!</div>}
{items.isSuccess && (
<Table<Item>
items={items.data.data.items}
setItem={updateItem}
tableName={tableName}
displayItem={displayRow}
/>
)}
</div>
<Row>
{items.isSuccess && (
Expand Down
4 changes: 2 additions & 2 deletions components/site-editor/FlavorList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ const FlavorList: FC<FlavorListProps> = ({ site }) => {
() => api.sites.listFlavors(site.id, undefined, undefined, undefined, undefined, page),
{
refetchOnMount: 'always',
}
},
);

return (
<Form.Group className="mb-3">
<Form.Label>Flavors:</Form.Label>
<Card style={{ maxHeight: '16rem' }} className="overflow-auto">
{flavors.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={flavors.isLoading} />
{flavors.isSuccess &&
flavors.data.data.items.map((flavor: Flavor) => (
<FlavorEditor flavor={flavor} key={flavor.id} refetch={flavors.refetch} />
Expand Down
10 changes: 7 additions & 3 deletions pages/search/result.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -554,9 +554,13 @@ const ResultSearch: FC<PageProps> = (props: PageProps) => {
</Row>
<Stack gap={2}>
<div className="position-relative" style={{ overflowX: 'auto' }}>
{(results.isLoading ||
results.isFetching ||
results.isRefetching) && <LoadingOverlay />}
<LoadingOverlay
loading={
results.isLoading ||
results.isFetching ||
results.isRefetching
}
/>
{results.isSuccess && results.data.data.total > 0 && (
<ResultTable
results={resultData.items}
Expand Down
4 changes: 2 additions & 2 deletions pages/site-editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const SitesEditor: NextPage = () => {
}, [router, auth.admin, auth.loading]);

const sites = useQuery('sites', () =>
api.sites.listSites(undefined, undefined, undefined, undefined, page)
api.sites.listSites(undefined, undefined, undefined, undefined, page),
);

const [activeSite, setActiveSite] = useState<Site | null>(null);
Expand All @@ -40,7 +40,7 @@ const SitesEditor: NextPage = () => {
return (
<>
<ListGroup>
{sites.isLoading && <LoadingOverlay />}
<LoadingOverlay loading={sites.isLoading} />
{sites.isSuccess && sites.data.data.items.length === 0 && 'No sites found!'}
{sites.isSuccess &&
sites.data.data.items.map((site: Site) => (
Expand Down
6 changes: 5 additions & 1 deletion styles/loadingOverlay.module.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.loading {
background-color: rgba(52, 58, 64, 0.6);
transition: opacity .5s ease-in-out;
transition: opacity 0.5s ease-in-out;
opacity: 1;
pointer-events: auto;
display: flex;
Expand All @@ -13,6 +13,10 @@
z-index: 9999;
}

.loading.loaded {
opacity: 0;
}

/**
'ellipsis' from loading.io, in public domain (https://loading.io/license/)
*/
Expand Down

0 comments on commit a0a1864

Please sign in to comment.