From f093ca62c3ae5ed956bcd4cd0a3dadf7419765bf Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Mon, 17 Sep 2018 08:32:52 -0700 Subject: [PATCH] Type playlist action creators --- .../{playlist.js => playlist.ts} | 36 ++++++++----------- js/utils.ts | 14 +++++++- 2 files changed, 27 insertions(+), 23 deletions(-) rename js/actionCreators/{playlist.js => playlist.ts} (79%) diff --git a/js/actionCreators/playlist.js b/js/actionCreators/playlist.ts similarity index 79% rename from js/actionCreators/playlist.js rename to js/actionCreators/playlist.ts index 57fac8f7..b5185fac 100644 --- a/js/actionCreators/playlist.js +++ b/js/actionCreators/playlist.ts @@ -5,7 +5,7 @@ import { getSelectedTrackObjects } from "../selectors"; -import { clamp, sort } from "../utils"; +import { clamp, sort, findLastIndex } from "../utils"; import { REMOVE_TRACKS, REMOVE_ALL_TRACKS, @@ -15,8 +15,9 @@ import { SET_PLAYLIST_SCROLL_POSITION, DRAG_SELECTED } from "../actionTypes"; +import { Dispatchable } from "../types"; -export function cropPlaylist() { +export function cropPlaylist(): Dispatchable { return (dispatch, getState) => { const state = getState(); if (getSelectedTrackObjects(state).length === 0) { @@ -32,7 +33,7 @@ export function cropPlaylist() { }; } -export function removeSelectedTracks() { +export function removeSelectedTracks(): Dispatchable { return (dispatch, getState) => { const { playlist: { tracks } @@ -44,19 +45,19 @@ export function removeSelectedTracks() { }; } -export function removeAllTracks() { +export function removeAllTracks(): Dispatchable { return { type: REMOVE_ALL_TRACKS }; } -export function reverseList() { +export function reverseList(): Dispatchable { return { type: REVERSE_LIST }; } -export function randomizeList() { +export function randomizeList(): Dispatchable { return { type: RANDOMIZE_LIST }; } -export function sortListByTitle() { +export function sortListByTitle(): Dispatchable { return (dispatch, getState) => { const state = getState(); const trackOrder = sort(state.playlist.trackOrder, i => @@ -66,11 +67,11 @@ export function sortListByTitle() { }; } -export function setPlaylistScrollPosition(position) { +export function setPlaylistScrollPosition(position: number): Dispatchable { return { type: SET_PLAYLIST_SCROLL_POSITION, position }; } -export function scrollNTracks(n) { +export function scrollNTracks(n: number): Dispatchable { return (dispatch, getState) => { const state = getState(); const overflow = getOverflowTrackCount(state); @@ -83,7 +84,7 @@ export function scrollNTracks(n) { }; } -export function scrollPlaylistByDelta(e) { +export function scrollPlaylistByDelta(e: MouseWheelEvent): Dispatchable { e.preventDefault(); return (dispatch, getState) => { const state = getState(); @@ -103,24 +104,15 @@ export function scrollPlaylistByDelta(e) { }; } -export function scrollUpFourTracks() { +export function scrollUpFourTracks(): Dispatchable { return scrollNTracks(-4); } -export function scrollDownFourTracks() { +export function scrollDownFourTracks(): Dispatchable { return scrollNTracks(4); } -function findLastIndex(arr, cb) { - for (let i = arr.length - 1; i >= 0; i--) { - if (cb(arr[i])) { - return i; - } - } - return -1; -} - -export function dragSelected(offset) { +export function dragSelected(offset: number): Dispatchable { return (dispatch, getState) => { const { playlist: { trackOrder, tracks } diff --git a/js/utils.ts b/js/utils.ts index 3abc6bec..5e4ceb39 100644 --- a/js/utils.ts +++ b/js/utils.ts @@ -209,7 +209,10 @@ export function shuffle(array: T[]): T[] { return sorted; } -export function sort(array: T[], iteratee: (value: T) => number): T[] { +export function sort( + array: T[], + iteratee: (value: T) => number | string +): T[] { return [...array].sort((a, b) => { const aKey = iteratee(a); const bKey = iteratee(b); @@ -318,3 +321,12 @@ export const calculateBoundingBox = (windows: Window[]) => }), { top: 0, bottom: 0, left: 0, right: 0 } ); + +export function findLastIndex(arr: T[], cb: (val: T) => boolean) { + for (let i = arr.length - 1; i >= 0; i--) { + if (cb(arr[i])) { + return i; + } + } + return -1; +}