diff --git a/src/assets/images/empty-album-dark.png b/src/assets/images/empty-album-dark.png new file mode 100644 index 0000000..1b47c93 Binary files /dev/null and b/src/assets/images/empty-album-dark.png differ diff --git a/src/assets/images/empty-album-light.png b/src/assets/images/empty-album-light.png new file mode 100644 index 0000000..4971b69 Binary files /dev/null and b/src/assets/images/empty-album-light.png differ diff --git a/src/components/CoverImage.tsx b/src/components/CoverImage.tsx index f6aa003..b592708 100644 --- a/src/components/CoverImage.tsx +++ b/src/components/CoverImage.tsx @@ -1,5 +1,5 @@ import React, { useMemo } from 'react'; -import { Dimensions, ViewProps } from 'react-native'; +import { Dimensions, useColorScheme, ViewProps } from 'react-native'; import { Canvas, Blur, Image as SkiaImage, useImage, Offset, Mask, RoundedRect, Shadow } from '@shopify/react-native-skia'; import useDefaultStyles from './Colors'; import styled from 'styled-components/native'; @@ -45,8 +45,10 @@ function CoverImage({ src, }: Props) { const defaultStyles = useDefaultStyles(); + const colorScheme = useColorScheme(); - const image = useImage(src || ''); + const image = useImage(src || null); + const fallback = useImage(colorScheme === 'light' ? require('assets/images/empty-album-light.png') : require('assets/images/empty-album-dark.png')); const { canvasSize, imageSize } = useMemo(() => { const imageSize = Screen.width - margin; const canvasSize = imageSize + blurRadius * 2; @@ -63,15 +65,15 @@ function CoverImage({ - {image ? ( + {(image || fallback) ? ( <> - + }> - {image ? ( - + {(image || fallback) ? ( + ) : null} diff --git a/src/screens/Music/stacks/components/AlbumImage.ts b/src/screens/Music/stacks/components/AlbumImage.ts deleted file mode 100644 index bc823d2..0000000 --- a/src/screens/Music/stacks/components/AlbumImage.ts +++ /dev/null @@ -1,23 +0,0 @@ -import styled from 'styled-components/native'; -import FastImage from 'react-native-fast-image'; -import { Dimensions } from 'react-native'; - -const Screen = Dimensions.get('screen'); -export const AlbumWidth = Screen.width / 2 - 24; -export const AlbumHeight = AlbumWidth + 40; -export const CoverSize = AlbumWidth - 16; - -export const AlbumItem = styled.View` - width: ${AlbumWidth}px; - height: ${AlbumHeight}px; - padding: 8px; -`; - -const AlbumImage = styled(FastImage)` - border-radius: 10px; - width: ${CoverSize}px; - height: ${CoverSize}px; - margin-bottom: 5px; -`; - -export default AlbumImage; \ No newline at end of file diff --git a/src/screens/Music/stacks/components/AlbumImage.tsx b/src/screens/Music/stacks/components/AlbumImage.tsx new file mode 100644 index 0000000..5a6bc70 --- /dev/null +++ b/src/screens/Music/stacks/components/AlbumImage.tsx @@ -0,0 +1,39 @@ +import React, { useState } from 'react'; +import styled from 'styled-components/native'; +import FastImage, { FastImageProps } from 'react-native-fast-image'; +import { Dimensions, Image, useColorScheme } from 'react-native'; + +const Screen = Dimensions.get('screen'); +export const AlbumWidth = Screen.width / 2 - 24; +export const AlbumHeight = AlbumWidth + 40; +export const CoverSize = AlbumWidth - 16; + +export const AlbumItem = styled.View` + width: ${AlbumWidth}px; + height: ${AlbumHeight}px; + padding: 8px; +`; + +const Container = styled(FastImage)` + border-radius: 10px; + width: ${CoverSize}px; + height: ${CoverSize}px; + margin-bottom: 5px; +`; + +function AlbumImage(props: FastImageProps) { + const [hasError, setError] = useState(false); + const colorScheme = useColorScheme(); + + if (!props.source || hasError) { + return ( + + ); + } + + return ( + setError(true)} /> + ); +} + +export default AlbumImage; \ No newline at end of file