2023-01-02 17:03:33 -08:00
|
|
|
import { ReactNode } from 'react';
|
2023-03-31 05:22:51 -07:00
|
|
|
import { Box } from '@mantine/core';
|
|
|
|
|
import { Paper, PaperProps, SpinnerIcon, TextTitle } from '/@/renderer/components';
|
2023-01-02 17:03:33 -08:00
|
|
|
import { PlayButton as PlayBtn } from '/@/renderer/features/shared/components/play-button';
|
2023-03-31 05:22:51 -07:00
|
|
|
import styled from 'styled-components';
|
2023-01-02 17:03:33 -08:00
|
|
|
|
|
|
|
|
interface LibraryHeaderBarProps {
|
2023-07-01 19:10:05 -07:00
|
|
|
children: ReactNode;
|
2023-01-02 17:03:33 -08:00
|
|
|
}
|
|
|
|
|
|
2023-03-31 05:22:51 -07:00
|
|
|
const HeaderContainer = styled.div`
|
2023-07-01 19:10:05 -07:00
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
gap: 1rem;
|
|
|
|
|
align-items: center;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
padding: 0 1rem;
|
2023-03-31 05:22:51 -07:00
|
|
|
`;
|
|
|
|
|
|
2023-01-02 17:03:33 -08:00
|
|
|
export const LibraryHeaderBar = ({ children }: LibraryHeaderBarProps) => {
|
2023-07-01 19:10:05 -07:00
|
|
|
return <HeaderContainer>{children}</HeaderContainer>;
|
2023-01-02 17:03:33 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
interface TitleProps {
|
2023-07-01 19:10:05 -07:00
|
|
|
children: ReactNode;
|
2023-01-02 17:03:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const Title = ({ children }: TitleProps) => {
|
2023-07-01 19:10:05 -07:00
|
|
|
return (
|
|
|
|
|
<TextTitle
|
|
|
|
|
order={1}
|
|
|
|
|
overflow="hidden"
|
|
|
|
|
weight={700}
|
|
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
</TextTitle>
|
|
|
|
|
);
|
2023-01-02 17:03:33 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
interface PlayButtonProps {
|
2023-07-20 00:22:52 -07:00
|
|
|
onClick: (args: any) => void;
|
2023-01-02 17:03:33 -08:00
|
|
|
}
|
|
|
|
|
|
2023-01-28 20:46:07 -08:00
|
|
|
const PlayButton = ({ onClick }: PlayButtonProps) => {
|
2023-07-01 19:10:05 -07:00
|
|
|
return (
|
|
|
|
|
<Box>
|
|
|
|
|
<PlayBtn
|
|
|
|
|
h="45px"
|
|
|
|
|
w="45px"
|
|
|
|
|
onClick={onClick}
|
|
|
|
|
/>
|
|
|
|
|
</Box>
|
|
|
|
|
);
|
2023-01-02 17:03:33 -08:00
|
|
|
};
|
|
|
|
|
|
2023-03-31 05:22:51 -07:00
|
|
|
const Badge = styled(Paper)`
|
2023-07-01 19:10:05 -07:00
|
|
|
padding: 0.3rem 1rem;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
border-radius: 0.3rem;
|
2023-03-31 05:22:51 -07:00
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
interface HeaderBadgeProps extends PaperProps {
|
2023-07-01 19:10:05 -07:00
|
|
|
isLoading?: boolean;
|
2023-03-31 05:22:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const HeaderBadge = ({ children, isLoading, ...props }: HeaderBadgeProps) => {
|
2023-07-01 19:10:05 -07:00
|
|
|
return <Badge {...props}>{isLoading ? <SpinnerIcon /> : children}</Badge>;
|
2023-03-31 05:22:51 -07:00
|
|
|
};
|
|
|
|
|
|
2023-01-02 17:03:33 -08:00
|
|
|
LibraryHeaderBar.Title = Title;
|
|
|
|
|
LibraryHeaderBar.PlayButton = PlayButton;
|
2023-03-31 05:22:51 -07:00
|
|
|
LibraryHeaderBar.Badge = HeaderBadge;
|