Skip to content

Commit 49e8847

Browse files
committed
Remove jQuery and replace $.ajax with Axios
1 parent 5bdfe02 commit 49e8847

File tree

7 files changed

+39
-30
lines changed

7 files changed

+39
-30
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
"@types/react": "^16.9.53",
2020
"@types/react-bootstrap": "^0.32.24",
2121
"@types/react-dom": "^16.9.8",
22+
"axios": "^0.21.0",
2223
"bootstrap": "3.3.7",
2324
"bottleneck": "^2.19.5",
2425
"file-saver": "^2.0.2",
25-
"jquery": "2.1.4",
2626
"jszip": "^3.5.0",
2727
"node-sass": "4.14.1",
2828
"react": "^17.0.1",

src/App.scss

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,17 @@ table {
1919
float: left;
2020
}
2121

22+
@keyframes fadeIn {
23+
0% {
24+
opacity: 0;
25+
}
26+
100% {
27+
opacity: 1;
28+
}
29+
}
30+
2231
#playlists {
23-
display: none;
32+
animation: fadeIn 1s;
2433
}
2534

2635
#playlistsHeader {

src/components/PlaylistExporter.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var PlaylistExporter = {
2525
})
2626

2727
let tracks = (await Promise.all(promises)).flatMap(response => {
28-
return response.items.map(item => {
28+
return response.data.items.map(item => {
2929
return item.track && [
3030
item.track.uri,
3131
item.track.name,

src/components/PlaylistTable.jsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import React from "react"
2-
import $ from "jquery" // TODO: Remove jQuery dependency
32
import { ProgressBar } from "react-bootstrap"
43

54
import PlaylistRow from "./PlaylistRow"
@@ -29,7 +28,7 @@ class PlaylistTable extends React.Component {
2928
var firstPage = typeof url === 'undefined' || url.indexOf('offset=0') > -1;
3029

3130
apiCall("https://api.spotify.com/v1/me", this.props.accessToken).then((response) => {
32-
userId = response.id;
31+
userId = response.data.id;
3332

3433
// Show liked tracks playlist if viewing first page
3534
if (firstPage) {
@@ -47,10 +46,13 @@ class PlaylistTable extends React.Component {
4746
return Promise.all([apiCall(url, this.props.accessToken)])
4847
}
4948
}).then(([playlistsResponse, likedTracksResponse]) => {
50-
let playlists = playlistsResponse.items;
49+
const playlistsData = playlistsResponse.data
50+
const playlists = playlistsData.items
5151

5252
// Show library of saved tracks if viewing first page
5353
if (firstPage) {
54+
const likedTracksData = likedTracksResponse.data
55+
5456
playlists.unshift({
5557
"id": "liked",
5658
"name": "Liked",
@@ -63,31 +65,32 @@ class PlaylistTable extends React.Component {
6365
},
6466
"tracks": {
6567
"href": "https://api.spotify.com/v1/me/tracks",
66-
"limit": likedTracksResponse.limit,
67-
"total": likedTracksResponse.total
68+
"limit": likedTracksData.limit,
69+
"total": likedTracksData.total
6870
},
6971
"uri": "spotify:user:" + userId + ":saved"
7072
});
7173

7274
// FIXME: Handle unmounting
7375
this.setState({
7476
likedSongs: {
75-
limit: likedTracksResponse.limit,
76-
count: likedTracksResponse.total
77+
limit: likedTracksData.limit,
78+
count: likedTracksData.total
7779
}
7880
})
7981
}
8082

8183
// FIXME: Handle unmounting
8284
this.setState({
8385
playlists: playlists,
84-
playlistCount: playlistsResponse.total,
85-
nextURL: playlistsResponse.next,
86-
prevURL: playlistsResponse.previous
86+
playlistCount: playlistsData.total,
87+
nextURL: playlistsData.next,
88+
prevURL: playlistsData.previous
8789
});
8890

89-
$('#playlists').fadeIn();
90-
$('#subtitle').text((playlistsResponse.offset + 1) + '-' + (playlistsResponse.offset + playlistsResponse.items.length) + ' of ' + playlistsResponse.total + ' playlists for ' + userId)
91+
if (document.getElementById("subtitle") !== null) {
92+
document.getElementById("subtitle").textContent = `${playlistsData.offset + 1}-${playlistsData.offset + playlistsData.items.length} of ${playlistsData.total} playlists for ${userId}`
93+
}
9194
})
9295
}
9396

src/components/PlaylistsExporter.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class PlaylistsExporter extends React.Component {
1414

1515
apiCall("https://api.spotify.com/v1/me", accessToken).then(async (response) => {
1616
var limit = 20;
17-
var userId = response.id;
17+
var userId = response.data.id;
1818
var requests = [];
1919

2020
// Add playlists
@@ -30,7 +30,7 @@ class PlaylistsExporter extends React.Component {
3030
})
3131
})
3232

33-
let playlists = (await Promise.all(playlistPromises)).flatMap(response => response.items)
33+
let playlists = (await Promise.all(playlistPromises)).flatMap(response => response.data.items)
3434

3535
// Add library of saved tracks
3636
playlists.unshift({

src/helpers.jsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import $ from "jquery" // TODO: Remove jQuery dependency
1+
import axios from "axios"
22
import Bottleneck from "bottleneck"
33

44
export function authorize() {
@@ -43,10 +43,5 @@ limiter.on("failed", async (error, jobInfo) => {
4343
})
4444

4545
export const apiCall = limiter.wrap(function(url, accessToken) {
46-
return $.ajax({
47-
url: url,
48-
headers: {
49-
'Authorization': 'Bearer ' + accessToken
50-
}
51-
})
46+
return axios.get(url, { headers: { 'Authorization': 'Bearer ' + accessToken } })
5247
})

yarn.lock

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2542,6 +2542,13 @@ axe-core@^3.5.4:
25422542
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227"
25432543
integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==
25442544

2545+
axios@^0.21.0:
2546+
version "0.21.0"
2547+
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.0.tgz#26df088803a2350dff2c27f96fef99fe49442aca"
2548+
integrity sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==
2549+
dependencies:
2550+
follow-redirects "^1.10.0"
2551+
25452552
axobject-query@^2.1.2:
25462553
version "2.2.0"
25472554
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
@@ -5230,7 +5237,7 @@ flush-write-stream@^1.0.0:
52305237
inherits "^2.0.3"
52315238
readable-stream "^2.3.6"
52325239

5233-
follow-redirects@^1.0.0:
5240+
follow-redirects@^1.0.0, follow-redirects@^1.10.0:
52345241
version "1.13.0"
52355242
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
52365243
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
@@ -6947,11 +6954,6 @@ jest@26.6.0:
69476954
import-local "^3.0.2"
69486955
jest-cli "^26.6.0"
69496956

6950-
jquery@2.1.4:
6951-
version "2.1.4"
6952-
resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.1.4.tgz#228bde698a0c61431dc2630a6a154f15890d2317"
6953-
integrity sha1-IoveaYoMYUMdwmMKahVPFYkNIxc=
6954-
69556957
js-base64@^2.1.8:
69566958
version "2.6.4"
69576959
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"

0 commit comments

Comments
 (0)