Added skeleton loader on page load (#3740)
* #3722 added skeleton loader on page load * #3740 Resolved comment in loader
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import { ComponentProps, ReactNode } from 'react';
|
import { ComponentProps, ReactNode } from 'react';
|
||||||
|
import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { useTheme } from '@emotion/react';
|
import { useTheme } from '@emotion/react';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
@ -71,11 +72,25 @@ const StyledTopBarButtonContainer = styled.div`
|
|||||||
margin-right: ${({ theme }) => theme.spacing(1)};
|
margin-right: ${({ theme }) => theme.spacing(1)};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const StyledSkeletonLoader = () => {
|
||||||
|
const theme = useTheme();
|
||||||
|
return (
|
||||||
|
<SkeletonTheme
|
||||||
|
baseColor={theme.background.quaternary}
|
||||||
|
highlightColor={theme.background.transparent.light}
|
||||||
|
borderRadius={50}
|
||||||
|
>
|
||||||
|
<Skeleton height={24} width={108} />
|
||||||
|
</SkeletonTheme>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
type PageHeaderProps = ComponentProps<'div'> & {
|
type PageHeaderProps = ComponentProps<'div'> & {
|
||||||
title: string;
|
title: string;
|
||||||
hasBackButton?: boolean;
|
hasBackButton?: boolean;
|
||||||
Icon: IconComponent;
|
Icon: IconComponent;
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
|
loading?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const PageHeader = ({
|
export const PageHeader = ({
|
||||||
@ -83,6 +98,7 @@ export const PageHeader = ({
|
|||||||
hasBackButton,
|
hasBackButton,
|
||||||
Icon,
|
Icon,
|
||||||
children,
|
children,
|
||||||
|
loading,
|
||||||
}: PageHeaderProps) => {
|
}: PageHeaderProps) => {
|
||||||
const isMobile = useIsMobile();
|
const isMobile = useIsMobile();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@ -105,12 +121,16 @@ export const PageHeader = ({
|
|||||||
variant="tertiary"
|
variant="tertiary"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<StyledTopBarIconStyledTitleContainer>
|
{loading ? (
|
||||||
{Icon && <Icon size={theme.icon.size.md} />}
|
<StyledSkeletonLoader />
|
||||||
<StyledTitleContainer data-testid="top-bar-title">
|
) : (
|
||||||
<OverflowingTextWithTooltip text={title} />
|
<StyledTopBarIconStyledTitleContainer>
|
||||||
</StyledTitleContainer>
|
{Icon && <Icon size={theme.icon.size.md} />}
|
||||||
</StyledTopBarIconStyledTitleContainer>
|
<StyledTitleContainer data-testid="top-bar-title">
|
||||||
|
<OverflowingTextWithTooltip text={title} />
|
||||||
|
</StyledTitleContainer>
|
||||||
|
</StyledTopBarIconStyledTitleContainer>
|
||||||
|
)}
|
||||||
</StyledLeftContainer>
|
</StyledLeftContainer>
|
||||||
<StyledPageActionContainer>{children}</StyledPageActionContainer>
|
<StyledPageActionContainer>{children}</StyledPageActionContainer>
|
||||||
</StyledTopBarContainer>
|
</StyledTopBarContainer>
|
||||||
|
|||||||
@ -42,7 +42,7 @@ export const RecordShowPage = () => {
|
|||||||
recordStoreFamilyState(objectRecordId),
|
recordStoreFamilyState(objectRecordId),
|
||||||
);
|
);
|
||||||
|
|
||||||
const { record } = useFindOneRecord({
|
const { record, loading } = useFindOneRecord({
|
||||||
objectRecordId,
|
objectRecordId,
|
||||||
objectNameSingular,
|
objectNameSingular,
|
||||||
});
|
});
|
||||||
@ -80,6 +80,7 @@ export const RecordShowPage = () => {
|
|||||||
title={pageName ?? ''}
|
title={pageName ?? ''}
|
||||||
hasBackButton
|
hasBackButton
|
||||||
Icon={IconBuildingSkyscraper}
|
Icon={IconBuildingSkyscraper}
|
||||||
|
loading={loading}
|
||||||
>
|
>
|
||||||
{record && (
|
{record && (
|
||||||
<>
|
<>
|
||||||
|
|||||||
Reference in New Issue
Block a user