From a721c16c85afe2331780eda2c98e0f56466a3c65 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:03:21 +0200 Subject: [PATCH] [feature-107] Add loading/empty state texts for lists in playlist creation + minor fixes --- .../edit-playlist-modal.component.tsx | 128 ++++++++++++------ 1 file changed, 85 insertions(+), 43 deletions(-) diff --git a/src/renderer/components/modal/modal-types/playlist/edit-playlist-modal/edit-playlist-modal.component.tsx b/src/renderer/components/modal/modal-types/playlist/edit-playlist-modal/edit-playlist-modal.component.tsx index 705dc2f2..64df7c0a 100644 --- a/src/renderer/components/modal/modal-types/playlist/edit-playlist-modal/edit-playlist-modal.component.tsx +++ b/src/renderer/components/modal/modal-types/playlist/edit-playlist-modal/edit-playlist-modal.component.tsx @@ -34,7 +34,9 @@ import { BPList, BPListDifficulty, PlaylistSong } from "shared/models/playlists/ import { EditPlaylistInfosModal } from "./edit-playlist-infos-modal.component"; import { CrossIcon } from "renderer/components/svgs/icons/cross-icon.component"; import { DraggableVirtualScroll } from "renderer/components/shared/virtual-scroll/draggable-virtual-scroll.component"; -import { swapElements } from "shared/helpers/array.helpers"; +import { BsmImage } from "renderer/components/shared/bsm-image.component"; +import BeatWaiting from "../../../../../../../assets/images/apngs/beat-waiting.png"; +import BeatConflict from "../../../../../../../assets/images/apngs/beat-conflict.png"; type Props = { version?: BSVersion; @@ -95,9 +97,7 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt acc.push(playlistMap); return acc; }, []); - }, [playlistMaps]); - - console.log(displayablePlaylistMaps); + }, [playlistMaps, playlistMapsFilter, playlistMapsSearch]); useOnUpdate(() => { const keyDown = (e: KeyboardEvent) => keyPressed$.next(e.key); @@ -153,7 +153,7 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt availabledHashsSelected$.next([]); setAvailableMapsFilter({}); setAvailableMapsSearch(""); - bsvMaps$.next([]); + bsvMaps$.next(undefined); setBsvSearchParams({ sortOrder: bsvSearchOrder, filter: availableMapsFilter, page: 0, q: availableMapsSearch }); }, [availableMapsSource]) @@ -254,7 +254,7 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt map: bsvMap, mapsSource$: bsvMaps$, selectedHashs$: availabledHashsSelected$, - noKeyPressedFallBack: () => playlistMaps$.next(Object.assign({[mapHash]: bsvMap}, playlistMaps$.value)) + noKeyPressedFallBack: () => playlistMaps$.next({...playlistMaps$.value, [mapHash]: { map: bsvMap }}) }), isSelected$, isOwned$ @@ -283,19 +283,17 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt const renderList = (maps: T[], render: (item: T) => JSX.Element, scrollEndHandler?: VirtualScrollEndHandler) => { return ( -
- -
+ ) } @@ -326,7 +324,7 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt const handleSortChange = (newSort: BsvSearchOrder) => { setBsvSortOrder(() => newSort); - bsvMaps$.next([]); + bsvMaps$.next(undefined); setBsvSearchParams(() => ({ ...bsvSearchParams, sortOrder: newSort })); }; @@ -337,7 +335,7 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt const handleNewSearch = () => { if(availableMapsSource === 0){ return; } - bsvMaps$.next([]); + bsvMaps$.next(undefined); setBsvSearchParams(() => ({ page: 0, filter: availableMapsFilter, q: availableMapsSearch, sortOrder: bsvSearchOrder})); } @@ -483,14 +481,38 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt )} - {availableMapsSource === 0 ? ( - renderList(localMaps.filter(map => { - if(playlistMaps?.[map.hash]){ return false; } - return isMapFitFilter({ map, filter: availableMapsFilter, search: availableMapsSearch }); - }), renderAvailableMapItem) - ) : ( - renderList(bsvMaps, renderBsvMapItem, { onScrollEnd: loadMoreBsvMaps }) - )} +
+ {(() => { + + if((availableMapsSource === 1 && !Array.isArray(bsvMaps)) || (availableMapsSource === 0 && !Array.isArray(localMaps))){ + return ( +
+ + Loading... +
+ ); + } + + if((availableMapsSource === 1 && bsvMaps.length === 0) || (availableMapsSource === 0 && localMaps.length === 0)){ + return ( +
+ + Aucune map trouvée +
+ ); + } + + if(availableMapsSource === 0){ + return renderList(localMaps.filter(map => { + if(playlistMaps?.[map.hash]){ return false; } + return isMapFitFilter({ map, filter: availableMapsFilter, search: availableMapsSearch }); + }), renderAvailableMapItem); + } + + return renderList(bsvMaps, renderBsvMapItem, { onScrollEnd: loadMoreBsvMaps }); + })()} +
+
Hold shift or ctrl to select multiples maps
@@ -514,20 +536,40 @@ export const EditPlaylistModal: ModalComponent = ({ resolver, opt -
- ( - isMapFitFilter({ map: playlistMap.map, filter: playlistMapsFilter, search: playlistMapsSearch }) - ))} - isDragDisabled={!!Object.keys(playlistMapsFilter).length || !!playlistMapsSearch} - renderItem={renderPlaylistMapItem} - onDragEnd={handlePlaylistMapDragEnd} - /> +
+ {(() => { + if(!playlistMaps){ + return( +
+ + Loading... +
+ ); + } + if(Object.keys(playlistMaps).length === 0){ + return ( +
+ + La playlist est vide +
+ ); + } + + return ( + + ); + + })()}