From bcc7818550b6f72c26e74acf16c70a81f57a7b3e Mon Sep 17 00:00:00 2001 From: 22 <60903333+nini22P@users.noreply.github.com> Date: Sun, 22 Oct 2023 18:08:15 +0800 Subject: [PATCH 1/5] PlayQueue auto scroll --- src/components/CommonList/CommonList.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/CommonList/CommonList.tsx b/src/components/CommonList/CommonList.tsx index e5e77ad..90dd3b5 100644 --- a/src/components/CommonList/CommonList.tsx +++ b/src/components/CommonList/CommonList.tsx @@ -39,6 +39,8 @@ const CommonList = ( const isPlayQueueView = listData?.some((item) => typeof (item as PlayQueueItem).index === 'number') + isPlayQueueView && document.getElementById('playing-item')?.scrollIntoView({behavior: 'auto', block: 'center'}) + const handleClickMenu = (event: React.MouseEvent, currentFile: File) => { setMenuOpen(true) setCurrentFile(currentFile) @@ -136,6 +138,7 @@ const CommonList = ( Date: Sun, 22 Oct 2023 19:43:31 +0800 Subject: [PATCH 2/5] Fix hook --- src/hooks/useControlHide.ts | 41 +++--- src/hooks/useMediaSession.ts | 71 ++++++----- src/hooks/useSync.ts | 40 +++--- src/pages/Player/Audio.tsx | 10 +- src/pages/Player/Player.tsx | 241 +++++++++++++++++++---------------- 5 files changed, 217 insertions(+), 186 deletions(-) diff --git a/src/hooks/useControlHide.ts b/src/hooks/useControlHide.ts index 408bc72..9ca7204 100644 --- a/src/hooks/useControlHide.ts +++ b/src/hooks/useControlHide.ts @@ -3,25 +3,28 @@ import useUiStore from '../store/useUiStore' export const useControlHide = (type: string, videoViewIsShow: boolean) => { const updateControlIsShow = useUiStore((state) => state.updateControlIsShow) - useEffect(() => { - if (type === 'video' && videoViewIsShow) { - let timer: string | number | NodeJS.Timeout | undefined - const resetTimer = () => { - updateControlIsShow(true) - clearTimeout(timer) - timer = (setTimeout(() => updateControlIsShow(false), 3000)) + useEffect( + () => { + if (type === 'video' && videoViewIsShow) { + let timer: string | number | NodeJS.Timeout | undefined + const resetTimer = () => { + updateControlIsShow(true) + clearTimeout(timer) + timer = (setTimeout(() => updateControlIsShow(false), 3000)) + } + resetTimer() + window.addEventListener('mousemove', resetTimer) + window.addEventListener('mousedown', resetTimer) + window.addEventListener('keydown', resetTimer) + return () => { + window.removeEventListener('mousemove', resetTimer) + window.removeEventListener('mousedown', resetTimer) + window.removeEventListener('keydown', resetTimer) + clearTimeout(timer) + } } - resetTimer() - window.addEventListener('mousemove', resetTimer) - window.addEventListener('mousedown', resetTimer) - window.addEventListener('keydown', resetTimer) - return () => { - window.removeEventListener('mousemove', resetTimer) - window.removeEventListener('mousedown', resetTimer) - window.removeEventListener('keydown', resetTimer) - clearTimeout(timer) - } - } + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [type, videoViewIsShow]) + [type, videoViewIsShow] + ) } \ No newline at end of file diff --git a/src/hooks/useMediaSession.ts b/src/hooks/useMediaSession.ts index 3b83cbc..b7a6c6c 100644 --- a/src/hooks/useMediaSession.ts +++ b/src/hooks/useMediaSession.ts @@ -31,40 +31,43 @@ export const useMediaSession = ( updatePositionState() } // 添加 mediaSession - useEffect(() => { - if ('mediaSession' in navigator) { - navigator.mediaSession.metadata = new MediaMetadata({ - title: title, - artist: artist, - album: album, - artwork: [{ src: cover }] - }) - navigator.mediaSession.setActionHandler('play', () => handleClickPlay()) - navigator.mediaSession.setActionHandler('pause', () => handleClickPause()) - navigator.mediaSession.setActionHandler('nexttrack', () => handleClickNext()) - navigator.mediaSession.setActionHandler('previoustrack', () => handleClickPrev()) - navigator.mediaSession.setActionHandler('seekbackward', (details) => { - const skipTime = details.seekOffset || defaultSkipTime - handleClickSeekbackward(skipTime) - }) - navigator.mediaSession.setActionHandler('seekforward', (details) => { - const skipTime = details.seekOffset || defaultSkipTime - handleClickSeekforward(skipTime) - }) - navigator.mediaSession.setActionHandler('seekto', (details) => { - if (details.seekTime) { - SeekTo(details.seekTime) + useEffect( + () => { + if ('mediaSession' in navigator) { + navigator.mediaSession.metadata = new MediaMetadata({ + title: title, + artist: artist, + album: album, + artwork: [{ src: cover }] + }) + navigator.mediaSession.setActionHandler('play', () => handleClickPlay()) + navigator.mediaSession.setActionHandler('pause', () => handleClickPause()) + navigator.mediaSession.setActionHandler('nexttrack', () => handleClickNext()) + navigator.mediaSession.setActionHandler('previoustrack', () => handleClickPrev()) + navigator.mediaSession.setActionHandler('seekbackward', (details) => { + const skipTime = details.seekOffset || defaultSkipTime + handleClickSeekbackward(skipTime) + }) + navigator.mediaSession.setActionHandler('seekforward', (details) => { + const skipTime = details.seekOffset || defaultSkipTime + handleClickSeekforward(skipTime) + }) + navigator.mediaSession.setActionHandler('seekto', (details) => { + if (details.seekTime) { + SeekTo(details.seekTime) + } + }) + return () => { + navigator.mediaSession.setActionHandler('play', null) + navigator.mediaSession.setActionHandler('pause', null) + navigator.mediaSession.setActionHandler('nexttrack', null) + navigator.mediaSession.setActionHandler('previoustrack', null) + navigator.mediaSession.setActionHandler('seekbackward', null) + navigator.mediaSession.setActionHandler('seekforward', null) + navigator.mediaSession.setActionHandler('seekto', null) } - }) - return () => { - navigator.mediaSession.setActionHandler('play', null) - navigator.mediaSession.setActionHandler('pause', null) - navigator.mediaSession.setActionHandler('nexttrack', null) - navigator.mediaSession.setActionHandler('previoustrack', null) - navigator.mediaSession.setActionHandler('seekbackward', null) - navigator.mediaSession.setActionHandler('seekforward', null) - navigator.mediaSession.setActionHandler('seekto', null) } - } - }, [cover, album, artist, title, handleClickPlay, handleClickPause, handleClickNext, handleClickPrev, handleClickSeekbackward, handleClickSeekforward, SeekTo]) + }, + [cover, album, artist, title, handleClickPlay, handleClickPause, handleClickNext, handleClickPrev, handleClickSeekbackward, handleClickSeekforward, SeekTo] + ) } \ No newline at end of file diff --git a/src/hooks/useSync.ts b/src/hooks/useSync.ts index e7becd4..c42f97e 100644 --- a/src/hooks/useSync.ts +++ b/src/hooks/useSync.ts @@ -39,34 +39,38 @@ const useSync = (accounts: AccountInfo[]) => { const { data, error, isLoading } = useSWR<{ history: File[], playlists: Playlist[] }>(isLoggedIn ? 'fetchAppData' : null, appDatafetcher) // 自动更新播放历史 - useMemo(() => { - if (!isLoading && !error && data?.history) - updateHistoryList(data.history) + useMemo( + () => { + (!isLoading && !error && data?.history) && updateHistoryList(data.history) + return true + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [data]) + [data] + ) // 自动上传播放历史 - useMemo(() => { - if (historyList !== null) { - uploadAppRootJsonData('history.json', JSON.stringify(historyList)) - } + useMemo( + () => (historyList !== null) && uploadAppRootJsonData('history.json', JSON.stringify(historyList)), // eslint-disable-next-line react-hooks/exhaustive-deps - }, [historyList]) + [historyList] + ) // 自动更新播放列表 - useMemo(() => { - if (!isLoading && !error && data?.playlists) - updatePlaylists(data.playlists) + useMemo( + () => { + (!isLoading && !error && data?.playlists) && updatePlaylists(data.playlists) + return true + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [data]) + [data] + ) // 自动上传播放列表 - useMemo(() => { - if (playlists !== null) { - uploadAppRootJsonData('playlists.json', JSON.stringify(playlists)) - } + useMemo( + () => (playlists !== null) && uploadAppRootJsonData('playlists.json', JSON.stringify(playlists)), // eslint-disable-next-line react-hooks/exhaustive-deps - }, [playlists]) + [playlists] + ) } diff --git a/src/pages/Player/Audio.tsx b/src/pages/Player/Audio.tsx index 4b99f44..b1d99c4 100644 --- a/src/pages/Player/Audio.tsx +++ b/src/pages/Player/Audio.tsx @@ -62,12 +62,10 @@ const Audio = ( const [noBackgound, setNoBackground] = useState(false) const [color, setColor] = useState('#ffffff') - useMemo(() => { - if (cover !== './cover.png') - extractColors(cover) - .then(color => setColor(color[0].hex)) - .catch(console.error) - }, [cover]) + useMemo( + () => (cover !== './cover.png') && extractColors(cover).then(color => setColor(color[0].hex)).catch(console.error), + [cover] + ) return ( { const [url, setUrl] = useState('') // 获取当前播放文件链接 - useMemo(() => { - if (playQueue !== null && playQueue.length !== 0) { - try { - getFileData(filePathConvert(playQueue.filter(item => item.index === currentIndex)[0].filePath)).then((res) => { - setUrl(res['@microsoft.graph.downloadUrl']) - updatePlayStatu('waiting') - }) - } catch (error) { - console.error(error) - updatePlayStatu('paused') + useMemo( + () => { + if (playQueue !== null && playQueue.length !== 0) { + try { + getFileData(filePathConvert(playQueue.filter(item => item.index === currentIndex)[0].filePath)).then((res) => { + setUrl(res['@microsoft.graph.downloadUrl']) + updatePlayStatu('waiting') + }) + } catch (error) { + console.error(error) + updatePlayStatu('paused') + } } - } + return true + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [playQueue?.find(item => item.index === currentIndex)?.filePath]) - - useMemo(() => { - if (player !== null && playQueue) { - updateDuration(0) - player.load() - player.onloadedmetadata = () => { - if (type === 'video') { - updateVideoViewIsShow(true) //类型是视频时打开视频播放 + [playQueue?.find(item => item.index === currentIndex)?.filePath] + ) + + useMemo( + () => { + if (player !== null && playQueue) { + updateDuration(0) + player.load() + player.onloadedmetadata = () => { + if (type === 'video') { + updateVideoViewIsShow(true) //类型是视频时打开视频播放 + } + updatePlayStatu('playing') + updateDuration(player.duration) + const currentItem = playQueue.filter(item => item.index === currentIndex)[0] + insertHistory({ + fileName: currentItem.fileName, + filePath: currentItem.filePath, + fileSize: currentItem.fileSize, + fileType: currentItem.fileType, + }) } - updatePlayStatu('playing') - updateDuration(player.duration) - const currentItem = playQueue.filter(item => item.index === currentIndex)[0] - insertHistory({ - fileName: currentItem.fileName, - filePath: currentItem.filePath, - fileSize: currentItem.fileSize, - fileType: currentItem.fileType, - }) } - } + return true + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [url]) + [url] + ) // 播放开始暂停 - useEffect(() => { - if (playStatu === 'playing') { - console.log('开始播放', playQueue?.filter(item => item.index === currentIndex)[0].filePath) - if (playQueue?.filter(item => item.index === currentIndex)[0].filePath) - player?.play() - else { - updatePlayStatu('paused') + useEffect( + () => { + if (playStatu === 'playing') { + console.log('开始播放', playQueue?.filter(item => item.index === currentIndex)[0].filePath) + if (playQueue?.filter(item => item.index === currentIndex)[0].filePath) + player?.play() + else { + updatePlayStatu('paused') + } } - } - if (playStatu === 'paused') - player?.pause() + if (playStatu === 'paused') + player?.pause() + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [playStatu]) + [playStatu] + ) // 随机 - useEffect(() => { - if (shuffle && playQueue) { - const randomPlayQueue = shufflePlayQueue(playQueue, currentIndex) - updatePlayQueue(randomPlayQueue) - } - if (!shuffle && playQueue) { - updatePlayQueue([...playQueue].sort((a, b) => a.index - b.index)) - } + useEffect( + () => { + if (shuffle && playQueue) { + const randomPlayQueue = shufflePlayQueue(playQueue, currentIndex) + updatePlayQueue(randomPlayQueue) + } + if (!shuffle && playQueue) { + updatePlayQueue([...playQueue].sort((a, b) => a.index - b.index)) + } + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [shuffle]) + [shuffle] + ) // 设置当前播放进度 - useEffect(() => { - if (player) - player.ontimeupdate = () => { - updateCurrentTime(player.currentTime) - } - }, [player, updateCurrentTime]) + useEffect( + () => { + if (player) + player.ontimeupdate = () => { + updateCurrentTime(player.currentTime) + } + }, + [player, updateCurrentTime] + ) // 播放视频时自动隐藏ui useControlHide(type, videoViewIsShow) @@ -230,70 +247,76 @@ const Player = () => { } // 获取 metadata - useEffect(() => { - if (type === 'audio' && playQueue !== null) { - const path = playQueue.filter(item => item.index === currentIndex)[0].filePath - console.log('开始获取 metadata', path) - if (metaDataList.some(item => filePathConvert(item.path) === filePathConvert(path))) { - console.log('跳过获取 metadata') - } else { - try { - mm.fetchFromUrl(url).then(metadata => { - if (metadata) { - if (metadata.common.title !== undefined) { - console.log('获取 metadata') - const metaData = { - path: path, - title: metadata.common.title, - artist: metadata.common.artist, - albumArtist: metadata.common.albumartist, - album: metadata.common.album, - year: metadata.common.year, - genre: metadata.common.genre, - cover: metadata.common.picture, + useEffect( + () => { + if (type === 'audio' && playQueue !== null) { + const path = playQueue.filter(item => item.index === currentIndex)[0].filePath + console.log('开始获取 metadata', path) + if (metaDataList.some(item => filePathConvert(item.path) === filePathConvert(path))) { + console.log('跳过获取 metadata') + } else { + try { + mm.fetchFromUrl(url).then(metadata => { + if (metadata) { + if (metadata.common.title !== undefined) { + console.log('获取 metadata') + const metaData = { + path: path, + title: metadata.common.title, + artist: metadata.common.artist, + albumArtist: metadata.common.albumartist, + album: metadata.common.album, + year: metadata.common.year, + genre: metadata.common.genre, + cover: metadata.common.picture, + } + insertMetaDataList(metaData) } - insertMetaDataList(metaData) } - } - }) - } catch (error) { - console.log('未能获取 metadata', error) + }) + } catch (error) { + console.log('未能获取 metadata', error) + } } } - } + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [url]) + [url] + ) // 更新当前 metadata - useEffect(() => { - if (playQueue && playQueue.length !== 0) { - const test = metaDataList - .filter(metaData => - filePathConvert(metaData.path) === filePathConvert(playQueue.filter(item => item.index === currentIndex)[0].filePath)) - console.log('设定当前 metadata', test) - if (test.length !== 0) { - setMetaData({ - ...test[0], - size: playQueue.filter(item => item.index === currentIndex)[0].fileSize - }) - if (test[0].cover) - if (test[0].cover[0].data) - updateCover(URL.createObjectURL(new Blob([new Uint8Array(test[0].cover[0].data)], { type: 'image/png' }))) + useEffect( + () => { + if (playQueue && playQueue.length !== 0) { + const test = metaDataList + .filter(metaData => + filePathConvert(metaData.path) === filePathConvert(playQueue.filter(item => item.index === currentIndex)[0].filePath)) + console.log('设定当前 metadata', test) + if (test.length !== 0) { + setMetaData({ + ...test[0], + size: playQueue.filter(item => item.index === currentIndex)[0].fileSize + }) + if (test[0].cover) + if (test[0].cover[0].data) + updateCover(URL.createObjectURL(new Blob([new Uint8Array(test[0].cover[0].data)], { type: 'image/png' }))) + else + updateCover('./cover.png') else updateCover('./cover.png') - else + } else { + setMetaData({ + title: playQueue.filter(item => item.index === currentIndex)[0].fileName, + artist: '', + path: playQueue.filter(item => item.index === currentIndex)[0].filePath, + }) updateCover('./cover.png') - } else { - setMetaData({ - title: playQueue.filter(item => item.index === currentIndex)[0].fileName, - artist: '', - path: playQueue.filter(item => item.index === currentIndex)[0].filePath, - }) - updateCover('./cover.png') + } } - } + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [playQueue?.find(item => item.index === currentIndex)?.filePath, metaDataList]) + [playQueue?.find(item => item.index === currentIndex)?.filePath, metaDataList] + ) // 向 mediaSession 发送当前播放进度 useMediaSession(player, cover, metaData?.album, metaData?.artist, metaData?.title, From 6a1479b1aeae22d77434099e65d5179bae7969b3 Mon Sep 17 00:00:00 2001 From: 22 <60903333+nini22P@users.noreply.github.com> Date: Sat, 28 Oct 2023 23:50:45 +0800 Subject: [PATCH 3/5] Fix some error --- src/components/CommonList/CommonList.tsx | 10 ++++++++-- src/index.css | 1 + src/pages/Player/Audio.tsx | 10 +++++----- webpack.config.cjs | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/components/CommonList/CommonList.tsx b/src/components/CommonList/CommonList.tsx index 90dd3b5..46f9c86 100644 --- a/src/components/CommonList/CommonList.tsx +++ b/src/components/CommonList/CommonList.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next' import { IconButton, ListItem, ListItemButton, ListItemIcon, ListItemText } from '@mui/material' import Grid from '@mui/material/Unstable_Grid2' @@ -39,7 +39,13 @@ const CommonList = ( const isPlayQueueView = listData?.some((item) => typeof (item as PlayQueueItem).index === 'number') - isPlayQueueView && document.getElementById('playing-item')?.scrollIntoView({behavior: 'auto', block: 'center'}) + // 打开播放队列时滚动到当前播放文件 + useEffect(() => { + isPlayQueueView && document.getElementById('playing-item')?.scrollIntoView({behavior: 'auto', block: 'center'}) + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ) const handleClickMenu = (event: React.MouseEvent, currentFile: File) => { setMenuOpen(true) diff --git a/src/index.css b/src/index.css index 6e3b05e..a08355f 100644 --- a/src/index.css +++ b/src/index.css @@ -10,6 +10,7 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-text-size-adjust: 100%; + text-size-adjust: 100% } a { diff --git a/src/pages/Player/Audio.tsx b/src/pages/Player/Audio.tsx index b1d99c4..48e62ed 100644 --- a/src/pages/Player/Audio.tsx +++ b/src/pages/Player/Audio.tsx @@ -59,7 +59,7 @@ const Audio = ( const [playStatu, cover, currentTime, duration, shuffle, repeat, updateShuffle] = usePlayerStore( (state) => [state.playStatu, state.cover, state.currentTime, state.duration, state.shuffle, state.repeat, state.updateShuffle]) - const [noBackgound, setNoBackground] = useState(false) + const [noBackground, setNoBackground] = useState(false) const [color, setColor] = useState('#ffffff') useMemo( @@ -78,7 +78,7 @@ const Audio = ( transition: 'top 0.35s ease-in-out', transform: 'translateZ(0)', background: - (noBackgound || cover === './cover.png') + (noBackground || cover === './cover.png') ? `linear-gradient(rgba(50, 50, 50, 0.6), ${color}bb), #000` : `linear-gradient(rgba(50, 50, 50, 0.3), rgba(50, 50, 50, 0.3) ), url(${cover}) no-repeat center, #000`, backgroundSize: 'cover', @@ -87,7 +87,7 @@ const Audio = ( }} style={(audioViewIsShow) ? { top: 0 } : { top: '100vh' }} > - + updatePlayQueueIsShow(true)} > - setNoBackground(!noBackgound)} > - + setNoBackground(!noBackground)} > + handleClickFullscreen()}> { diff --git a/webpack.config.cjs b/webpack.config.cjs index 8001d91..296a848 100644 --- a/webpack.config.cjs +++ b/webpack.config.cjs @@ -15,7 +15,7 @@ const config = { path: path.resolve(__dirname, 'dist'), }, devServer: { - open: true, + // open: true, host: 'localhost', port: 8760, }, From 280290d36c897a075d579ad79f6fd0b49e25287e Mon Sep 17 00:00:00 2001 From: 22 <60903333+nini22P@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:39:13 +0800 Subject: [PATCH 4/5] Update ci --- .github/workflows/ci.yml | 49 ++++++++++++++++------------------ .github/workflows/pr-check.yml | 2 +- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index edf246c..b2202b9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,54 +1,51 @@ -# Simple workflow for deploying static content to GitHub Pages name: Deploy on: - # Runs on pushes targeting the default branch push: branches: ['main'] - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# Sets the GITHUB_TOKEN permissions to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow one concurrent deployment concurrency: group: 'pages' cancel-in-progress: true jobs: - # Single deploy job since we're just deploying + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + - name: Install dependencies + run: npm install + - name: Build + env: + CLIENT_ID: ${{ secrets.CLIENT_ID }} + REDIRECT_URI: ${{ secrets.REDIRECT_URI }} + run: npm run build + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: './dist' deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest + needs: build steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Set up Node - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'npm' - - name: Install dependencies - run: npm install - - name: Build - env: - CLIENT_ID: ${{ secrets.CLIENT_ID }} - REDIRECT_URI: ${{ secrets.REDIRECT_URI }} - run: npm run build - name: Setup Pages uses: actions/configure-pages@v3 - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - # Upload dist repository - path: './dist' - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 \ No newline at end of file + uses: actions/deploy-pages@v2 \ No newline at end of file diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index 1b161ea..c6cae7d 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -7,7 +7,7 @@ on: - synchronize jobs: - Build-Check: + build: runs-on: ubuntu-latest steps: - name: Checkout From c855f98cccb28754d271b9804b30815609b96527 Mon Sep 17 00:00:00 2001 From: 22 <60903333+nini22P@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:48:59 +0800 Subject: [PATCH 5/5] 1.2.3 --- package.json | 2 +- src/components/CommonList/CommonList.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cd4f0dc..fd16382 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "omp", "description": "OneDrive Media Player", "private": true, - "version": "1.2.2", + "version": "1.2.3", "scripts": { "dev": "webpack serve", "build": "webpack --mode=production --node-env=production", diff --git a/src/components/CommonList/CommonList.tsx b/src/components/CommonList/CommonList.tsx index 46f9c86..a89fe06 100644 --- a/src/components/CommonList/CommonList.tsx +++ b/src/components/CommonList/CommonList.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { IconButton, ListItem, ListItemButton, ListItemIcon, ListItemText } from '@mui/material' import Grid from '@mui/material/Unstable_Grid2'