From 0615fb3d8f2684880f8de7fa73d0c985bc169cd1 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Tue, 19 Dec 2017 07:29:02 -0800 Subject: [PATCH] Handle empty playlist in playlist shade --- js/components/PlaylistWindow/PlaylistShade.js | 94 +++++----- .../__snapshots__/PlaylistShade.test.js.snap | 164 +++--------------- js/selectors.js | 4 +- 3 files changed, 78 insertions(+), 184 deletions(-) diff --git a/js/components/PlaylistWindow/PlaylistShade.js b/js/components/PlaylistWindow/PlaylistShade.js index 5f622d07..bc020da2 100644 --- a/js/components/PlaylistWindow/PlaylistShade.js +++ b/js/components/PlaylistWindow/PlaylistShade.js @@ -20,57 +20,65 @@ import ResizeTarget from "./ResizeTarget"; import { getOrderedTracks, getMediaText } from "../../selectors"; -const PlaylistShade = props => { - const { - toggleShade, - close, - focusPlaylist, - playlistSize, - focused, - name, - length - } = props; +class PlaylistShade extends React.Component { + _addedWidth() { + return this.props.playlistSize[0] * PLAYLIST_RESIZE_SEGMENT_WIDTH; + } + _trimmedName() { + const { name } = this.props; + if (name == null) { + return "[No file]"; + } - const addedWidth = playlistSize[0] * PLAYLIST_RESIZE_SEGMENT_WIDTH; - const style = { - width: `${MIN_PLAYLIST_WINDOW_WIDTH + addedWidth}px` - }; - const MIN_NAME_WIDTH = 205; + const MIN_NAME_WIDTH = 205; - const nameLength = (MIN_NAME_WIDTH + addedWidth) / CHARACTER_WIDTH; - const trimmedName = - name.length > nameLength + const nameLength = (MIN_NAME_WIDTH + this._addedWidth()) / CHARACTER_WIDTH; + return name.length > nameLength ? name.slice(0, nameLength - 1) + UTF8_ELLIPSIS : name; + } - const classes = classnames("window", "draggable", { - selected: focused === WINDOWS.PLAYLIST - }); + _time() { + const { length, name } = this.props; + return name == null ? "" : getTimeStr(length); + } - return ( -
-
-
- - {trimmedName} - - {/* TODO: Ellipisize */} - - {getTimeStr(length)} - - -
-
+ render() { + const { toggleShade, close, focusPlaylist, focused } = this.props; + + const style = { + width: `${MIN_PLAYLIST_WINDOW_WIDTH + this._addedWidth()}px` + }; + + const classes = classnames("window", "draggable", { + selected: focused === WINDOWS.PLAYLIST + }); + + return ( +
+
+
+ + {this._trimmedName()} + + {/* TODO: Ellipisize */} + + {this._time()} + + +
+
+
-
- ); -}; + ); + } +} const mapDispatchToProps = dispatch => ({ focusPlaylist: () => diff --git a/js/components/PlaylistWindow/__snapshots__/PlaylistShade.test.js.snap b/js/components/PlaylistWindow/__snapshots__/PlaylistShade.test.js.snap index f2354c40..573542e2 100644 --- a/js/components/PlaylistWindow/__snapshots__/PlaylistShade.test.js.snap +++ b/js/components/PlaylistWindow/__snapshots__/PlaylistShade.test.js.snap @@ -21,44 +21,9 @@ exports[`PlaylistShade renders to snapshot 1`] = ` id="playlist-shade-track-title" >
- 1 -
-
- . -
-
- -
-
- S -
-
- o -
-
- m -
-
- e -
-
- + [
- a + o
- m + +
+
+ f +
+
+ i +
+
+ l
- -
-
- ( -
-
- 0 -
-
- 0 -
-
- : -
-
- 0 -
-
- 0 -
-
- ) -
-
- -
-
- -
-
- * -
-
- * -
-
- * -
-
- -
-
- + ]
-
- 0 -
-
- 0 -
-
- : -
-
- 0 -
-
- 0 -
-
+ />
- `${trackNumber}. ${name} (${getTimeStr(duration)}) *** ` + name == null + ? null + : `${trackNumber}. ${name} (${getTimeStr(duration)}) *** ` ); const getNumberOfTracks = state => getTrackOrder(state).length;