From 1d362c7343129dd165bb21d4f2da7f7b713dca94 Mon Sep 17 00:00:00 2001 From: Martin Duong Date: Mon, 15 Apr 2024 19:20:30 -0400 Subject: [PATCH 1/6] testing --- receiptifyv1/app.js | 4 +-- receiptifyv1/public/server.js | 52 ++++++++++++++++++++++++++++++----- receiptifyv1/test.js | 5 ---- receiptifyv1/users.csv | 7 +++++ 4 files changed, 54 insertions(+), 14 deletions(-) delete mode 100644 receiptifyv1/test.js diff --git a/receiptifyv1/app.js b/receiptifyv1/app.js index 7bbc795..b6135fd 100644 --- a/receiptifyv1/app.js +++ b/receiptifyv1/app.js @@ -27,8 +27,8 @@ const cors = require('cors'); require('dotenv').config(); -const client_id = '792207d6524f4255a1730e478d8b66f6'; -const client_secret = 'fd5c90696d984ca7a65a54853f340c70'; +const client_id = '035844db2ccb4d0698ab8e14bb12f27a'; +const client_secret = '8bfd5a9fa7a44aedbf8bf8f513236b4f'; //const privateKey = fs.readFileSync('AuthKey_A8FKGGUQP3.p8').toString(); const teamId = process.env.teamId; const keyId = process.env.keyId; diff --git a/receiptifyv1/public/server.js b/receiptifyv1/public/server.js index 65a8957..d9bab2b 100644 --- a/receiptifyv1/public/server.js +++ b/receiptifyv1/public/server.js @@ -148,9 +148,11 @@ const getNameUpper = (item) => { return wrapNonAlphanumericChars(item?.name?.toUpperCase() ?? ''); }; const getArtists = (item) => - item.artists.map((artist) => - wrapNonAlphanumericChars(artist.name.trim().toUpperCase()) - ); + item.artists.map((artist) => { + const processedName = wrapNonAlphanumericChars(artist.name.trim().toUpperCase()); + console.log("Processed Artist Name:", processedName); // Log inside the callback + return processedName; + }); const getDurationUnformatted = (item) => parseFloat(`${item.duration_ms}`); const getDuration = (item) => { const duration_ms = getDurationUnformatted(item); @@ -653,9 +655,27 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) displayReceipt(response, stats, state, users_checkbox); ;} +function getArtistsTest(access_tokens) { + const timeRangeSlug = "short_term"; + const limit = 50; + for (var i=0; i < access_tokens.length; i++) { + $.ajax({ + url: `${SPOTIFY_ROOT}/me/top/artists?limit=${limit}&time_range=${timeRangeSlug}`, + headers: {Authorization: 'Bearer ' + access_tokens[i],}, + success: (response) => { + const artists = response?.items; + console.log("Top Artists: ", artists); + }, + error: function(error) { + console.error("Error: ", error); + } + }) + } +} + const displayReceipt = (response, stats, state, users_checkbox = []) => { const scrollPosition = window.scrollY; - console.log(state, users_checkbox); + console.log('statae & checkbox',state, users_checkbox); const type = getType(); const font = getFont(); const timeRange = getPeriod(); @@ -666,9 +686,15 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { let params = getHashParams(); + console.log('response: ', response); + + const fns = TYPE_FUNCTIONS[type]; const { getResponseItems, itemFns, totalIncrement } = fns; + console.log(response, stats); + console.log(getResponseItems, itemFns, totalIncrement); + if (type === 'build-receipt') { $('#track-edit').show(); const trackHTML = customReceipt @@ -719,6 +745,7 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { const date = TODAY.toLocaleDateString('en-US', DATE_OPTIONS).toUpperCase(); const tracksFormatted = responseItems.map((item, i) => { total += totalIncrement(item); + console.log(item); return { id: (i + 1 < 10 ? '0' : '') + (i + 1), url: item.external_urls?.spotify, @@ -735,6 +762,7 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { console.log("No Previous users_checkbox"); users_checkbox = [...users]; const userCheckbox = document.getElementById('user-checkbox'); + userCheckbox.innerHTML = ""; const userCheckboxTitle = document.createElement('p'); userCheckboxTitle.textContent = "Select Users"; userCheckbox.appendChild(userCheckboxTitle); @@ -797,11 +825,13 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { logoutBtn().addEventListener('click', logout); if (type === 'tracks') { + console.log('tracks') $('#save-playlist').show(); document .getElementById('save-playlist') ?.addEventListener('click', () => saveAsPlaylist(response)); } else { + console.log('other types'); $('#save-playlist').hide(); } console.log(responseItems); @@ -953,7 +983,7 @@ function retrieveItems() { initSearch(); return; } - if (type === 'stats') { + if (type === 'stats') { // shows stats retrieveStats(); return; } @@ -962,6 +992,7 @@ function retrieveItems() { if (type === 'artists' || type === 'tracks') { $('#num-options').show(); $('#num-header').show(); + console.log('artists & tracks add headers'); if (getNum() === 'fifty') { num = 50; } @@ -973,7 +1004,12 @@ function retrieveItems() { const timeRangeSlug = getPeriod(); const limit = num; + if (type === 'artists') { + console.log('artists here'); + } + if (type === 'genres') { + console.log("genres") $.ajax({ url: `${SPOTIFY_ROOT}/me/top/artists?limit=49&time_range=${timeRangeSlug}`, headers: { @@ -987,6 +1023,7 @@ function retrieveItems() { Authorization: 'Bearer ' + access_token, }, success: (response2) => { + console.log('here'); displayReceipt({ ...response, items: [...response.items, ...response2.items] @@ -996,8 +1033,8 @@ function retrieveItems() { } }, }); - console.log(item); - } else { + //console.log(item); + } else { // shows tracks $.ajax({ url: `${SPOTIFY_ROOT}/me/top/${ selectedType ?? 'tracks' @@ -1153,6 +1190,7 @@ if (error) { document .getElementById('type-select-dropdown') .addEventListener('change', retrieveItems); + console.log('111'); } document diff --git a/receiptifyv1/test.js b/receiptifyv1/test.js deleted file mode 100644 index 6a2aa90..0000000 --- a/receiptifyv1/test.js +++ /dev/null @@ -1,5 +0,0 @@ -const test = (param1, param2, param3) => { - console.log(param1, param2, param3); -} -var param1="womp"; -test(param1, "stomp"); \ No newline at end of file diff --git a/receiptifyv1/users.csv b/receiptifyv1/users.csv index cd7f945..9764501 100644 --- a/receiptifyv1/users.csv +++ b/receiptifyv1/users.csv @@ -1,3 +1,10 @@ display_name, access_token, sessionID + +Martin Duong,BQC0wydNX0_rczFFTNs2a5MLrKISO5725IkB1E6UZUQ8opm7_qi8Y3gIH2329PaSR-bQyT1M6dqQIUVTbhpbwkY0zGCv9MXTm3uIdjus0qYBWQs3anCFfzIWD6P2DERFUIe05GZjpfXnGQORXg9NyIEHDk5DblFLz7SnAmv-uiN2rapel2gEL8JN5Iac8lpqvjAulKRsfp78LZiHEthot_N4rcMh26leJtRZCGo,860215,2024-4-15 15:29:14, +Martin Duong,BQDjadPgpwwp6pm46F_ovEThRdoG6vtKHBX8cziQ2oXihp1L0VONTblHXPkNDgyv4W7nStoF7HKbTs9rIr8994mBXWjA_mKowdGT1GcuHy2H_mNuiocfLNrWz9jfYlPf6lYtw4RrUqp_fIvYXxnkiXn7ozBr3UACCbVkKoZSlEW4qE1DqJHijHS3B-Op5XuhGU-29m6b8DZi9X2l-F0tCQuhgEA1ejjSWl-ugME,500016,2024-4-15 16:15:16, +Martin Duong,BQDfsbEVE5zbxKAvA2uM-IPuuCWGub5o67cDiAe0beP22Qwxb5Qg1bwPHWhGIUv_Pqnublao1hxqNjrESaprd0B9NlOZ1tuxcFz7eptYTZcAuH91ypXU-1FVEXmYsm3trjpnBGGp5JwhzOW5LJQPku49uQt525Ckhgsaz6gjt1nAnd3pctRVWSJktizk-HDshAxZxsTSOHeWH9klGTzw3M11XQek7K2ui8Btxmg,008186,2024-4-15 16:23:44, +Martin Duong,BQA--H88JayD5iiGyyeqGp9izEQ8g32xOtcQtmmSZ5XnjAMqoLTCDfqILPPQ5po4NJ1E9Hdc6OP8lrY7yQJrzLBNiZ20H35b50Nqw_1k7_VHYiugryjDY3aruDLSMMk24WNnlLdqmmY0vwLlPSEWqAsDQh7f_7MhxxSjDkTS5DrnIv58Xy6GUj2Q9qtRg8PuCDtwHU0S4i0YAPbqBV363zOV-ZjLwVr4S29NL1g,395278,2024-4-15 17:18:52, +Martin Duong,BQAyEcdTu9vGhfmr0tBygFWjooO52J1IUsDQVkqmAXDTZ_pO-50oNauz5vi74GAbJ6tntKTgVQcK9aw-lzxZ8ZFwSswWHnoWANcpx4mXK4ZWUkNnn0aEKChbQ2wI8pBejgiDiwrmGimEqauFRqXwjBF6p381ztmu5qYYLSCjZca3zCegY1nm7fn-XVcO6kveuTYrIAkTrH8422feH9v-wdeKgebGCSKKPCuJKQM,812989,2024-4-15 17:25:10, +Martin Duong,BQCfiZuFOHEBwUA0WhepErVGvOWX8qd2yqRS1RxWgv0RIXTQk6EilkaJaJrbdlUJ7cKl5u2WYA2s5jSSLZpsjec1nZCs7zFuDDM00DYmEBeuSAREBKygzQZKn_w6XeBtbUGrEfmuLPyRPVVbPjB_mN5GshU7L9xBymfXC1d1QIGNRxAlCV44eg8AM-oKTU-kQ_eKH37uwvAhEFNIPKbXe2_ZTk5zOcsm1pTrdIE,812989,2024-4-15 17:25:10, \ No newline at end of file From 2ddf409a74a19c0e28dd78809c67ea873d160b3c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 Apr 2024 23:20:01 -0400 Subject: [PATCH 2/6] Reactive Artists --- receiptifyv1/public/server.js | 266 ++++++++++++++++++++-------------- receiptifyv1/users.csv | 10 +- 2 files changed, 163 insertions(+), 113 deletions(-) diff --git a/receiptifyv1/public/server.js b/receiptifyv1/public/server.js index d9bab2b..2aa8308 100644 --- a/receiptifyv1/public/server.js +++ b/receiptifyv1/public/server.js @@ -150,7 +150,7 @@ const getNameUpper = (item) => { const getArtists = (item) => item.artists.map((artist) => { const processedName = wrapNonAlphanumericChars(artist.name.trim().toUpperCase()); - console.log("Processed Artist Name:", processedName); // Log inside the callback + //console.log("Processed Artist Name:", processedName); // Log inside the callback return processedName; }); const getDurationUnformatted = (item) => parseFloat(`${item.duration_ms}`); @@ -337,6 +337,10 @@ const getPeriod = () => { ); }; +const getUsersCheckbox = () => { + return document.querySelectorAll('input[name="user-select-checkbox"]:checked'); +} + const getNum = () => { return ( document.querySelector('input[name="num-select"]:checked')?.value ?? 'ten' @@ -652,30 +656,14 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) users_checkbox.push(null); console.log(users_checkbox); } - displayReceipt(response, stats, state, users_checkbox); + retrieveItems(stats, state); ;} -function getArtistsTest(access_tokens) { - const timeRangeSlug = "short_term"; - const limit = 50; - for (var i=0; i < access_tokens.length; i++) { - $.ajax({ - url: `${SPOTIFY_ROOT}/me/top/artists?limit=${limit}&time_range=${timeRangeSlug}`, - headers: {Authorization: 'Bearer ' + access_tokens[i],}, - success: (response) => { - const artists = response?.items; - console.log("Top Artists: ", artists); - }, - error: function(error) { - console.error("Error: ", error); - } - }) - } -} const displayReceipt = (response, stats, state, users_checkbox = []) => { + console.log(response, stats, state, users_checkbox); const scrollPosition = window.scrollY; - console.log('statae & checkbox',state, users_checkbox); + //console.log('state & checkbox',state, users_checkbox); const type = getType(); const font = getFont(); const timeRange = getPeriod(); @@ -686,14 +674,14 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { let params = getHashParams(); - console.log('response: ', response); + //console.log('response: ', response); const fns = TYPE_FUNCTIONS[type]; const { getResponseItems, itemFns, totalIncrement } = fns; - console.log(response, stats); - console.log(getResponseItems, itemFns, totalIncrement); + //console.log(response, stats); + //console.log(getResponseItems, itemFns, totalIncrement); if (type === 'build-receipt') { $('#track-edit').show(); @@ -728,7 +716,10 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { $('#explanation').hide(); } + const responseItems = getResponseItems(response, stats); + console.log('responses & stats: ', response, stats); + console.log('Response Items DisplayReceipt(): ', responseItems); const sessionID = params.sessionID; const name = showSearch && response.label ? response.label : displayName; @@ -736,16 +727,16 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { (async () => { try { users = await fetchUsers(sessionID, 'display_name'); - console.log('Fetched Users'); + //console.log('Fetched Users', users); tokens = await fetchUsers(sessionID, 'access_token'); - console.log(`Fetched Tokens: ${tokens}`); + //console.log(`Fetched Tokens: ${tokens}`); - console.log(tokens); + //console.log(tokens); let total = 0; const date = TODAY.toLocaleDateString('en-US', DATE_OPTIONS).toUpperCase(); const tracksFormatted = responseItems.map((item, i) => { total += totalIncrement(item); - console.log(item); + //console.log(item); return { id: (i + 1 < 10 ? '0' : '') + (i + 1), url: item.external_urls?.spotify, @@ -768,10 +759,11 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { userCheckbox.appendChild(userCheckboxTitle); for (let i = 0; i < users.length; i++) { const user = users[i]; - console.log(user); + //console.log(user); const checkbox = document.createElement('input'); + checkbox.name = 'user-select-checkbox'; checkbox.type = 'checkbox'; - checkbox.id = `user${i}`; + checkbox.id = tokens[i]; checkbox.checked = (users_checkbox.includes(users[i])); checkbox.onclick = (event) =>{ const isChecked = event.target.checked; @@ -790,6 +782,8 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { console.log("Previous users_checkbox"); } + + userProfilePlaceholder.innerHTML = userProfileTemplate({ tracks: tracksFormatted, @@ -834,10 +828,9 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { console.log('other types'); $('#save-playlist').hide(); } - console.log(responseItems); - } catch (error) { - console.error('Error: ', error); - } + } catch (error) { + console.error('Error: ', error); + } window.scrollTo(0, scrollPosition); })(); }; @@ -904,7 +897,6 @@ function displayStats(response, artists, tracks) { duration_ms: stats[key], }; }); - console.log("1"); displayReceipt(response, statsArr); }, }); @@ -972,79 +964,141 @@ async function nRecentlyPlayed(n, music) { return recentlyPlayedSongs.flat(); } -function retrieveItems() { - $('#search-form').hide(); - $('#custom-name').hide(); - $('#options').show(); - $('#options-header').show(); +function shuffleArray(array){ + return [...array].sort(() => Math.random() - 0.5); +} - const type = getType(); - if (type === 'show-search' || type === 'build-receipt') { - initSearch(); - return; - } - if (type === 'stats') { // shows stats - retrieveStats(); - return; - } - let num = 10; - - if (type === 'artists' || type === 'tracks') { - $('#num-options').show(); - $('#num-header').show(); - console.log('artists & tracks add headers'); - if (getNum() === 'fifty') { - num = 50; - } - } else { - $('#num-options').hide(); - $('#num-header').hide(); - } - const selectedType = type === 'genres' ? 'artists' : type; - const timeRangeSlug = getPeriod(); - const limit = num; +function retrieveItems(stats, state) { - if (type === 'artists') { - console.log('artists here'); - } - - if (type === 'genres') { - console.log("genres") - $.ajax({ - url: `${SPOTIFY_ROOT}/me/top/artists?limit=49&time_range=${timeRangeSlug}`, - headers: { - Authorization: 'Bearer ' + access_token, - }, - success: (response) => { - if (response.next != null) { - $.ajax({ - url: response.next, - headers: { - Authorization: 'Bearer ' + access_token, - }, - success: (response2) => { - console.log('here'); - displayReceipt({ - ...response, - items: [...response.items, ...response2.items] - }); - }, - }); + console.log(getUsersCheckbox()); + users_checkbox = getUsersCheckbox(); + + (async () => { + try { + tokens = await fetchUsers(sessionID, 'access_token'); + console.log('Fetched Tokens', tokens); + $('#search-form').hide(); + $('#custom-name').hide(); + $('#options').show(); + $('#options-header').show(); + + const type = getType(); + if (type === 'show-search' || type === 'build-receipt') { + initSearch(); + return; + } + if (type === 'stats') { // shows stats + retrieveStats(); + return; + } + let num = 10; + + if (type === 'artists' || type === 'tracks') { + $('#num-options').show(); + $('#num-header').show(); + console.log('artists & tracks add headers'); + if (getNum() === 'fifty') { + num = 50; } - }, - }); - //console.log(item); - } else { // shows tracks - $.ajax({ - url: `${SPOTIFY_ROOT}/me/top/${ - selectedType ?? 'tracks' - }?limit=${limit}&time_range=${timeRangeSlug}`, - headers: { - Authorization: 'Bearer ' + access_token, - }, - success: displayReceipt, - }); - } + } else { + $('#num-options').hide(); + $('#num-header').hide(); + } + const selectedType = type === 'genres' ? 'artists' : type; + const timeRangeSlug = getPeriod(); + const limit = num; + + if ( type === 'artists') { + const promises = []; + let combined = []; + const timeRangeSlug = "short_term"; + for (var i = 0; i < users_checkbox.length; i++) { + const promise = new Promise((resolve, reject) => { + $.ajax({ + url: `${SPOTIFY_ROOT}/me/top/artists?limit=${limit}&time_range=${timeRangeSlug}`, + headers: { + Authorization: 'Bearer ' + users_checkbox[i].id, + }, + success: (response) => { + resolve(response?.items); + + const artists = response?.items; + console.log("Top Artists: ", artists); + combined = combined.concat(artists); + console.log('Concat: ', combined); + }, + error: function(error) { + reject(error); + console.error("Error: ", error); + } + }) + }) + promises.push(promise); + } + Promise.all(promises).then((artistData) => { + const combined = [].concat(...artistData); // Combine all artists data + console.log('concat final: ', combined); + const shuffledCombined = shuffleArray(combined); + console.log('shuffled: ', shuffledCombined) + // Shuffle the combined data + shuffledCombined.splice(num); + console.log('spliced: ', shuffledCombined); + response_edited = { + items: shuffledCombined + } + displayReceipt(response_edited, stats, state, users_checkbox); + //return response_edited; + }) + .catch((errors) => { + console.error('Errors:', errors); // Handle any errors + }); + } + + if (type === 'genres') { + $.ajax({ + url: `${SPOTIFY_ROOT}/me/top/artists?limit=49&time_range=${timeRangeSlug}`, + headers: { + Authorization: 'Bearer ' + access_token, + }, + success: (response) => { + if (response.next != null) { + $.ajax({ + url: response.next, + headers: { + Authorization: 'Bearer ' + access_token, + }, + success: (response2) => { + console.log('GENRE'); + displayReceipt({ + ...response, + items: [...response.items, ...response2.items] + }); + }, + }); + } + }, + }); + //console.log(item); + } //else { // shows tracks + else if(type === 'tracks'){ + console.log('ajax call else'); + $.ajax({ + url: `${SPOTIFY_ROOT}/me/top/${ + selectedType ?? 'tracks' + }?limit=${limit}&time_range=${timeRangeSlug}`, + headers: { + Authorization: 'Bearer ' + access_token, + }, + success: displayReceipt, + }); + } + } catch (error) { + console.error('Error: ', error); + } + })(); + + + } function retrieveStats() { @@ -1132,6 +1186,8 @@ let access_token = params.access_token, error = params.error; sessionID = params.sessionID; + + if (error) { alert('There was an error during the authentication'); } else { @@ -1147,6 +1203,7 @@ if (error) { username = response.id; showReceipt(); retrieveItems(); + }, }); } else if (client === 'applemusic' && dev_token) { @@ -1190,7 +1247,6 @@ if (error) { document .getElementById('type-select-dropdown') .addEventListener('change', retrieveItems); - console.log('111'); } document diff --git a/receiptifyv1/users.csv b/receiptifyv1/users.csv index 9764501..2a07f01 100644 --- a/receiptifyv1/users.csv +++ b/receiptifyv1/users.csv @@ -1,10 +1,4 @@ display_name, access_token, sessionID - - -Martin Duong,BQC0wydNX0_rczFFTNs2a5MLrKISO5725IkB1E6UZUQ8opm7_qi8Y3gIH2329PaSR-bQyT1M6dqQIUVTbhpbwkY0zGCv9MXTm3uIdjus0qYBWQs3anCFfzIWD6P2DERFUIe05GZjpfXnGQORXg9NyIEHDk5DblFLz7SnAmv-uiN2rapel2gEL8JN5Iac8lpqvjAulKRsfp78LZiHEthot_N4rcMh26leJtRZCGo,860215,2024-4-15 15:29:14, -Martin Duong,BQDjadPgpwwp6pm46F_ovEThRdoG6vtKHBX8cziQ2oXihp1L0VONTblHXPkNDgyv4W7nStoF7HKbTs9rIr8994mBXWjA_mKowdGT1GcuHy2H_mNuiocfLNrWz9jfYlPf6lYtw4RrUqp_fIvYXxnkiXn7ozBr3UACCbVkKoZSlEW4qE1DqJHijHS3B-Op5XuhGU-29m6b8DZi9X2l-F0tCQuhgEA1ejjSWl-ugME,500016,2024-4-15 16:15:16, -Martin Duong,BQDfsbEVE5zbxKAvA2uM-IPuuCWGub5o67cDiAe0beP22Qwxb5Qg1bwPHWhGIUv_Pqnublao1hxqNjrESaprd0B9NlOZ1tuxcFz7eptYTZcAuH91ypXU-1FVEXmYsm3trjpnBGGp5JwhzOW5LJQPku49uQt525Ckhgsaz6gjt1nAnd3pctRVWSJktizk-HDshAxZxsTSOHeWH9klGTzw3M11XQek7K2ui8Btxmg,008186,2024-4-15 16:23:44, -Martin Duong,BQA--H88JayD5iiGyyeqGp9izEQ8g32xOtcQtmmSZ5XnjAMqoLTCDfqILPPQ5po4NJ1E9Hdc6OP8lrY7yQJrzLBNiZ20H35b50Nqw_1k7_VHYiugryjDY3aruDLSMMk24WNnlLdqmmY0vwLlPSEWqAsDQh7f_7MhxxSjDkTS5DrnIv58Xy6GUj2Q9qtRg8PuCDtwHU0S4i0YAPbqBV363zOV-ZjLwVr4S29NL1g,395278,2024-4-15 17:18:52, -Martin Duong,BQAyEcdTu9vGhfmr0tBygFWjooO52J1IUsDQVkqmAXDTZ_pO-50oNauz5vi74GAbJ6tntKTgVQcK9aw-lzxZ8ZFwSswWHnoWANcpx4mXK4ZWUkNnn0aEKChbQ2wI8pBejgiDiwrmGimEqauFRqXwjBF6p381ztmu5qYYLSCjZca3zCegY1nm7fn-XVcO6kveuTYrIAkTrH8422feH9v-wdeKgebGCSKKPCuJKQM,812989,2024-4-15 17:25:10, -Martin Duong,BQCfiZuFOHEBwUA0WhepErVGvOWX8qd2yqRS1RxWgv0RIXTQk6EilkaJaJrbdlUJ7cKl5u2WYA2s5jSSLZpsjec1nZCs7zFuDDM00DYmEBeuSAREBKygzQZKn_w6XeBtbUGrEfmuLPyRPVVbPjB_mN5GshU7L9xBymfXC1d1QIGNRxAlCV44eg8AM-oKTU-kQ_eKH37uwvAhEFNIPKbXe2_ZTk5zOcsm1pTrdIE,812989,2024-4-15 17:25:10, \ No newline at end of file +✧ jizzica ✧,BQBzBIeYxo31EEsTB6_6geZZ1lUZm2SQKZ9R0Ybhkzt1v4L4kNkBQDIS8IhIrfkkA9WsB2cqExGoGN1tuH-bBEFnyFBuRYSpmWcFYrE4mvd_avgtaUinB0yWCLej5OLgsHK5v4SgIBeVXHMMhn7N2W2bCZhxDPWK8NKOxS7KZ-AdSxUAgmQLLJGgnYZV0y2EKbSYVB2OhExjk8gRITt_SpbI9oWrJuNTEgpS-1Q,039313,2024-4-15 21:40:15, +Martin Duong,BQArRWWm3Y7S9DonwXBEtATWhxXx42wl2DCllMRhAjtn6QHDaXYEYiphRHfuIeDuSv-AMv8yE_9gZMZX8dcbdYpMZJixr9OzhetlrHvJp4kf25wLbiw28koDOXzcaGGp_R1-W-ja2X3pNOfPUA_2P3BaCXlgra48zveukd52tNzup-sMPx8jEjiqayub_hVAjsu2-MvU1fEHmEKABKj3YNj_kJMYwoaptZGFxLE,039313,2024-4-15 21:40:43, \ No newline at end of file From a12db8915cb9e4bc81e55901e7506e2f2d92a45a Mon Sep 17 00:00:00 2001 From: Martin Duong Date: Tue, 16 Apr 2024 13:41:32 -0400 Subject: [PATCH 3/6] Testing with objects --- receiptifyv1/public/server.js | 2 +- receiptifyv1/test.js | 7 +++++++ receiptifyv1/users.csv | 11 +++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 receiptifyv1/test.js diff --git a/receiptifyv1/public/server.js b/receiptifyv1/public/server.js index 2aa8308..352af5b 100644 --- a/receiptifyv1/public/server.js +++ b/receiptifyv1/public/server.js @@ -784,7 +784,7 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { - + console.log(sessionID); userProfilePlaceholder.innerHTML = userProfileTemplate({ tracks: tracksFormatted, total: totalFormatted, diff --git a/receiptifyv1/test.js b/receiptifyv1/test.js new file mode 100644 index 0000000..b6b3b18 --- /dev/null +++ b/receiptifyv1/test.js @@ -0,0 +1,7 @@ +var users = ['users1', 'users2', 'users3']; +var tokens = ['token1', 'token2', 'token3']; +var objectsArray = users.map((user, index) => ({ user, token: tokens[index]})); + + +console.log(objectsArray); +console.log(objectsArray.map(obj => obj.token)); \ No newline at end of file diff --git a/receiptifyv1/users.csv b/receiptifyv1/users.csv index 2a07f01..10bee2b 100644 --- a/receiptifyv1/users.csv +++ b/receiptifyv1/users.csv @@ -1,4 +1,11 @@ display_name, access_token, sessionID -✧ jizzica ✧,BQBzBIeYxo31EEsTB6_6geZZ1lUZm2SQKZ9R0Ybhkzt1v4L4kNkBQDIS8IhIrfkkA9WsB2cqExGoGN1tuH-bBEFnyFBuRYSpmWcFYrE4mvd_avgtaUinB0yWCLej5OLgsHK5v4SgIBeVXHMMhn7N2W2bCZhxDPWK8NKOxS7KZ-AdSxUAgmQLLJGgnYZV0y2EKbSYVB2OhExjk8gRITt_SpbI9oWrJuNTEgpS-1Q,039313,2024-4-15 21:40:15, -Martin Duong,BQArRWWm3Y7S9DonwXBEtATWhxXx42wl2DCllMRhAjtn6QHDaXYEYiphRHfuIeDuSv-AMv8yE_9gZMZX8dcbdYpMZJixr9OzhetlrHvJp4kf25wLbiw28koDOXzcaGGp_R1-W-ja2X3pNOfPUA_2P3BaCXlgra48zveukd52tNzup-sMPx8jEjiqayub_hVAjsu2-MvU1fEHmEKABKj3YNj_kJMYwoaptZGFxLE,039313,2024-4-15 21:40:43, \ No newline at end of file + +Martin Duong,BQDE0nwqibaeUx4MT5uWl6Q2gh9ZRSjfcGOEm4q3C5R0KTHYnGUrn7MCPSCNtQubMVr3jlYDPq7qn1F1nttMRuhZ7_LSdUv8yrQGETovz18CSa5vSTIlA_q-B1b4ljMbxmHQ_PTZiW-QF-FYSHTFSKBhHU0nb4fKzmdZn_AcJ-P_Lp3HqLm443kbKgewnqSv434H1E4Xqzx8RHUYzgQXW6ouOBbIi4f0rYsQZzk,575591,2024-4-16 1:2:32, +✧ jizzica ✧,BQCHqTBcjw3ToKlw_T6LEy2LCU-jd6l4yHTBGCz3adSDxhW1GWT0Q7_5ysQMSmzR3i3xFL7z2PRpKfJmpV9_cBpoUj4iw1NqktLwyWsiOaprvgPKAJskNrZn0nQCiJe7LAf6ung3LkavXaQBLNVN5Xgy5yv4QoQj3ImQ-9NeKWxoydpoQevVC108UrCSLRn6qZET10WX0m-QoFg5mmVcQCsBK61xpYB5Cr5rTYM,575591,2024-4-16 1:2:49, +Martin Duong,BQDnFh-04he1mpbKo9Jt7xL11x_cHdxFJwrW3x5CH0FlK8lAFLJJAZlMO_pVam7yfn2hQpusV_Mft6-wdiRGr_a0Tc1j-m9LvAi1wXlSWrsoyvsjlKwp8maW6PXMM8SGRl70pHENX4WCP9f-vartmlb2BSyv1_xgYuJYPf0mWeocYV7jkBLTXJ-kvIEtUsxqR1fxGNO-kWRZHr8gl6uWLkW3fuHEBNrbSebYYS4,676895,2024-4-16 11:5:8, +✧ jizzica ✧,BQDoj-oO0pn1wT3QDJ4N32lTzxllO6CUqqh-NaBft-BRmZHI5jZuIYu6CwzE3vYNOLBDzitWHnSsBBXPbeevVek_8eQ5t0WpoEhZcsyLKiAQFoqiKQAGRMYHFmIPHN_CsxUQ5qM4yl3-fv43fGDNxx-V_z4YYnzuQ9iKbJJEz02AdaRmtMsi7sU5oM95AQ3SuaOpKUBsT5XWKYvRaXSx9sXnbAFqYHQjJ1KOk6E,676895,2024-4-16 11:5:43, +Martin Duong,BQAK8OkYwCE0w4qMJ4cjMcYwDgQSG1aUfg5tTDJptgKaWsKe2UpxjngrUfUrd5W_0qU8vs3nsUQ9QKBucVHL0egnlwcxcNRix1wci55BnztwfENEHMO8Zny5uUmV4foks8pGHiUD_M-j2esOa082kW_SQpJTFKkM27ijFzVJLqqTEpJ9Ua-KCBxdkf6M9CM77e6MjlunvpBErzMQGsWgE3hPv2cSSnUB17sXd-o,659642,2024-4-16 11:59:59, +✧ jizzica ✧,BQAjg6TgSsiW7jDD6EAnDLwJntEBMaxcFTCYES1YZ-mM3c3EarJ75vizU-3yxk-AcwlkkG3m15fD9cVSnNnbVNPCKMfnsdxuXCErzJJkJJVN6bKbZ1au82OMF3ReFLTQWbbhIJlA8V3i-n-OmwuUyIwPpPq4PQFxwFpFJ6UAQLfxGF7ioXAUHYSXH6QwVNsAlahHGdl1GVEQB8KaDmHGW9DbTQFAtTldvQ084sE,659642,2024-4-16 12:0:17, +Ari,BQDeOJDLrgeNZxrn6acT_LavDPFNoQIz2_XjhrR8NjBHR--YNny7wWHGtYjFtrL04bXdwWoH3RCU6QTpghBCIU628hCtJ8zCi5LxxRNrYHwtv8Pa_bovDGkSMD_sji0CwSzYXINZT0GLH5GU6QQ8E6v89RP320Iwy4T-gChJlKp_Vws7OGMkBA54GgACJrxMMlmrWt2l1LhNV6gAqzUf6A80U6YYPqelsrbWAU5aIT9yAgy7tmvtuZFu,659642,2024-4-16 12:0:35, +Nina Perone,BQCqGJBDqS2qcgQx8r_FANGro0Y95S8qPFtA4yvbS2Q6KLC_U5vP3WCbkIj5YcefepTU88Nv9vq_u_DXh4Yq2c-FlwVgPcmjXCsXf4LIxC1t8oo1f7ZyKbDXPvykVgcWF0Mtl1xwzEoMxVYds2bpSsAHwsg70Y6E6v2BwWDuT3xab_ZTChZyJ2t0Na7yH1f7BFZpTYkSKODgPHAW-cvvZAstAa8IzlvWaFXKfex5GAvZCJvgCfRKLOmQ,659642,2024-4-16 12:0:43, \ No newline at end of file From 04d94c3cf54810dcbcab5fb57c85ffafde1d4981 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 16 Apr 2024 14:08:50 -0400 Subject: [PATCH 4/6] Testing with objs in the code --- receiptifyv1/public/server.js | 17 ++++++++++------- receiptifyv1/test.js | 2 +- receiptifyv1/users.csv | 4 +++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/receiptifyv1/public/server.js b/receiptifyv1/public/server.js index 352af5b..41a4c25 100644 --- a/receiptifyv1/public/server.js +++ b/receiptifyv1/public/server.js @@ -634,7 +634,7 @@ async function fetchUsers(sessionID, type) { function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) { - if (users_checkbox.includes(null)){ + if (users_checkbox.map(obj => obj.user).includes(null) || users_checkbox.map(obj => obj.token.includes(null))){ console.log('true null'); users_checkbox.shift(); } @@ -642,7 +642,7 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) if (!isChecked){ console.log(`Before: ${users_checkbox}`); for (let i = 0; i < users_checkbox.length; i++) { - if (users_checkbox[i] == user){ + if (users_checkbox.map(obj => obj.user)[i] == user){ users_checkbox.splice(i, 1); } } @@ -653,8 +653,8 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) console.log(`After: ${users_checkbox}`); } if (users_checkbox.length == 0){ - users_checkbox.push(null); - console.log(users_checkbox); + users_checkbox.push({user: null, token: null}); + console.log('pushed null: ', users_checkbox); } retrieveItems(stats, state); ;} @@ -752,6 +752,7 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { if (users_checkbox.length == 0){ console.log("No Previous users_checkbox"); users_checkbox = [...users]; + // users_checkbox = users.map((user, index) => ({ user, token: tokens[index]})); const userCheckbox = document.getElementById('user-checkbox'); userCheckbox.innerHTML = ""; const userCheckboxTitle = document.createElement('p'); @@ -765,6 +766,7 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { checkbox.type = 'checkbox'; checkbox.id = tokens[i]; checkbox.checked = (users_checkbox.includes(users[i])); + // checkbox.checked = users_checkbox.map(obj => obj.user).includes(users[i]) checkbox.onclick = (event) =>{ const isChecked = event.target.checked; checkboxUpdate(response, stats, state, users_checkbox, users[i], isChecked); @@ -791,6 +793,7 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { time: date, sessionID: sessionID, users: users_checkbox, + // users: users_checkbox.map(obj => obj.token), num: showSearch ? 1 : TIME_RANGE_OPTIONS[timeRange].num, name: name, period: showSearch @@ -976,7 +979,7 @@ function retrieveItems(stats, state) { (async () => { try { tokens = await fetchUsers(sessionID, 'access_token'); - console.log('Fetched Tokens', tokens); + //console.log('Fetched Tokens', tokens); $('#search-form').hide(); $('#custom-name').hide(); $('#options').show(); @@ -996,7 +999,7 @@ function retrieveItems(stats, state) { if (type === 'artists' || type === 'tracks') { $('#num-options').show(); $('#num-header').show(); - console.log('artists & tracks add headers'); + //console.log('artists & tracks add headers'); if (getNum() === 'fifty') { num = 50; } @@ -1081,7 +1084,7 @@ function retrieveItems(stats, state) { //console.log(item); } //else { // shows tracks else if(type === 'tracks'){ - console.log('ajax call else'); + //console.log('ajax call else'); $.ajax({ url: `${SPOTIFY_ROOT}/me/top/${ selectedType ?? 'tracks' diff --git a/receiptifyv1/test.js b/receiptifyv1/test.js index b6b3b18..08024e2 100644 --- a/receiptifyv1/test.js +++ b/receiptifyv1/test.js @@ -4,4 +4,4 @@ var objectsArray = users.map((user, index) => ({ user, token: tokens[index]})); console.log(objectsArray); -console.log(objectsArray.map(obj => obj.token)); \ No newline at end of file +console.log(objectsArray.map(obj => obj.token).includes('token3')); \ No newline at end of file diff --git a/receiptifyv1/users.csv b/receiptifyv1/users.csv index 10bee2b..3e96c5a 100644 --- a/receiptifyv1/users.csv +++ b/receiptifyv1/users.csv @@ -8,4 +8,6 @@ Martin Duong,BQDnFh-04he1mpbKo9Jt7xL11x_cHdxFJwrW3x5CH0FlK8lAFLJJAZlMO_pVam7yfn2 Martin Duong,BQAK8OkYwCE0w4qMJ4cjMcYwDgQSG1aUfg5tTDJptgKaWsKe2UpxjngrUfUrd5W_0qU8vs3nsUQ9QKBucVHL0egnlwcxcNRix1wci55BnztwfENEHMO8Zny5uUmV4foks8pGHiUD_M-j2esOa082kW_SQpJTFKkM27ijFzVJLqqTEpJ9Ua-KCBxdkf6M9CM77e6MjlunvpBErzMQGsWgE3hPv2cSSnUB17sXd-o,659642,2024-4-16 11:59:59, ✧ jizzica ✧,BQAjg6TgSsiW7jDD6EAnDLwJntEBMaxcFTCYES1YZ-mM3c3EarJ75vizU-3yxk-AcwlkkG3m15fD9cVSnNnbVNPCKMfnsdxuXCErzJJkJJVN6bKbZ1au82OMF3ReFLTQWbbhIJlA8V3i-n-OmwuUyIwPpPq4PQFxwFpFJ6UAQLfxGF7ioXAUHYSXH6QwVNsAlahHGdl1GVEQB8KaDmHGW9DbTQFAtTldvQ084sE,659642,2024-4-16 12:0:17, Ari,BQDeOJDLrgeNZxrn6acT_LavDPFNoQIz2_XjhrR8NjBHR--YNny7wWHGtYjFtrL04bXdwWoH3RCU6QTpghBCIU628hCtJ8zCi5LxxRNrYHwtv8Pa_bovDGkSMD_sji0CwSzYXINZT0GLH5GU6QQ8E6v89RP320Iwy4T-gChJlKp_Vws7OGMkBA54GgACJrxMMlmrWt2l1LhNV6gAqzUf6A80U6YYPqelsrbWAU5aIT9yAgy7tmvtuZFu,659642,2024-4-16 12:0:35, -Nina Perone,BQCqGJBDqS2qcgQx8r_FANGro0Y95S8qPFtA4yvbS2Q6KLC_U5vP3WCbkIj5YcefepTU88Nv9vq_u_DXh4Yq2c-FlwVgPcmjXCsXf4LIxC1t8oo1f7ZyKbDXPvykVgcWF0Mtl1xwzEoMxVYds2bpSsAHwsg70Y6E6v2BwWDuT3xab_ZTChZyJ2t0Na7yH1f7BFZpTYkSKODgPHAW-cvvZAstAa8IzlvWaFXKfex5GAvZCJvgCfRKLOmQ,659642,2024-4-16 12:0:43, \ No newline at end of file +Nina Perone,BQCqGJBDqS2qcgQx8r_FANGro0Y95S8qPFtA4yvbS2Q6KLC_U5vP3WCbkIj5YcefepTU88Nv9vq_u_DXh4Yq2c-FlwVgPcmjXCsXf4LIxC1t8oo1f7ZyKbDXPvykVgcWF0Mtl1xwzEoMxVYds2bpSsAHwsg70Y6E6v2BwWDuT3xab_ZTChZyJ2t0Na7yH1f7BFZpTYkSKODgPHAW-cvvZAstAa8IzlvWaFXKfex5GAvZCJvgCfRKLOmQ,659642,2024-4-16 12:0:43, +Martin Duong,BQCYuWuIdKga8vK4Z-IT0s7zDXNOTebfIiCyM0DnsfeqkBZgta0xdbDzcCWONBRh2XmmZOq7x5BzMmPD-0LUEruWxg3kHnk-FTpaJ9-SJcpVZrEkohtDOTYb59VyoyeeFF50GxVh9ngy-JCl5Y1psDfUEvrIBg1yhifGgpb8-bX8Ttwu60oKbVF-tGvSEmFEttu_1VxIOMmyUnCVln9EcWSR2Y_B2uXu-uy9FyY,416228,2024-4-16 13:55:56, +✧ jizzica ✧,BQAbkRhycHgX_9D0jsW9SFk8ZjqWympizHFFt03jvFm2Cv2jrcAdx6qHX9GWgvYS5kVNWMgovJiWfxe2vjEoNtx_uz5OkpuXSgzHg2w-vDYmCRGDv8_n996MMtlw7pXqAoivVBcVP0DvhgNcBaO0xbrqcoYwaINRuoTSXldIqOmcLPsSkYlG9JFuA59NZKypfLi5bZbLYqCBWPeKiw6JiCjvZQJzoWMv48N3YMU,416228,2024-4-16 13:56:19, \ No newline at end of file From 6bdb397678ee8150e09b003f10607420092ad468 Mon Sep 17 00:00:00 2001 From: Martin Duong Date: Tue, 16 Apr 2024 17:12:51 -0400 Subject: [PATCH 5/6] Changing array to array of objects --- receiptifyv1/public/server.js | 133 +++++++++++++++++++++++++--------- receiptifyv1/test.js | 3 +- receiptifyv1/users.csv | 12 +-- 3 files changed, 102 insertions(+), 46 deletions(-) diff --git a/receiptifyv1/public/server.js b/receiptifyv1/public/server.js index 41a4c25..e13ef4f 100644 --- a/receiptifyv1/public/server.js +++ b/receiptifyv1/public/server.js @@ -338,7 +338,29 @@ const getPeriod = () => { }; const getUsersCheckbox = () => { - return document.querySelectorAll('input[name="user-select-checkbox"]:checked'); + console.log('getUsersCheckbox'); + console.log(document.querySelectorAll('input[name="user-select-checkbox"]:checked')); + var checkboxes = Array.from(document.querySelectorAll('input[name="user-select-checkbox"]:checked')); + console.log(checkboxes); + checkboxes = Array.from(checkboxes); + console.log('checkboxes: ', checkboxes); + var tokens = checkboxes.map(token => token.id); + console.log('tokens: ',tokens); + var users = []; + for (const token of tokens){ + const label = document.querySelector(`label[for="${token}"]`); + if (label){ + user = label.textContent.trim(); + users.push(user); + } + } + console.log('users: ', users); + + var users_checkbox = users.map((user, index) =>({ user, token: tokens[index]})); + console.log('getUsersCheckbox Updated List: ', users_checkbox); + + // return list of objects. list of user object with name and token. + return users_checkbox; } const getNum = () => { @@ -634,7 +656,8 @@ async function fetchUsers(sessionID, type) { function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) { - if (users_checkbox.map(obj => obj.user).includes(null) || users_checkbox.map(obj => obj.token.includes(null))){ + if (users_checkbox.map(obj => obj.user).includes(null) || users_checkbox.map(obj => obj.token).includes(null)) { + //if (users_checkbox.includes(null)) { console.log('true null'); users_checkbox.shift(); } @@ -642,7 +665,8 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) if (!isChecked){ console.log(`Before: ${users_checkbox}`); for (let i = 0; i < users_checkbox.length; i++) { - if (users_checkbox.map(obj => obj.user)[i] == user){ + if (users_checkbox[i].user == user){ + //if (users_checkbox[i] == user) { users_checkbox.splice(i, 1); } } @@ -654,6 +678,7 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) } if (users_checkbox.length == 0){ users_checkbox.push({user: null, token: null}); + //users_checkbox.push(null); console.log('pushed null: ', users_checkbox); } retrieveItems(stats, state); @@ -751,29 +776,30 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { if (users_checkbox.length == 0){ console.log("No Previous users_checkbox"); - users_checkbox = [...users]; - // users_checkbox = users.map((user, index) => ({ user, token: tokens[index]})); + //users_checkbox = [...users]; + users_checkbox = users.map((user, index) => ({ user, token: tokens[index]})); + const userCheckbox = document.getElementById('user-checkbox'); userCheckbox.innerHTML = ""; const userCheckboxTitle = document.createElement('p'); userCheckboxTitle.textContent = "Select Users"; userCheckbox.appendChild(userCheckboxTitle); for (let i = 0; i < users.length; i++) { - const user = users[i]; + //const user = users[i]; //console.log(user); const checkbox = document.createElement('input'); checkbox.name = 'user-select-checkbox'; checkbox.type = 'checkbox'; checkbox.id = tokens[i]; - checkbox.checked = (users_checkbox.includes(users[i])); - // checkbox.checked = users_checkbox.map(obj => obj.user).includes(users[i]) + //checkbox.checked = (users_checkbox.includes(users[i])); + checkbox.checked = users_checkbox.map(obj => obj.user).includes(users[i]) checkbox.onclick = (event) =>{ const isChecked = event.target.checked; checkboxUpdate(response, stats, state, users_checkbox, users[i], isChecked); } const label = document.createElement('label'); - label.textContent = user; + label.textContent = users[i]; label.htmlFor = checkbox.id; userCheckbox.appendChild(checkbox); @@ -783,29 +809,52 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { } else { console.log("Previous users_checkbox"); } - - - - console.log(sessionID); - userProfilePlaceholder.innerHTML = userProfileTemplate({ - tracks: tracksFormatted, - total: totalFormatted, - time: date, - sessionID: sessionID, - users: users_checkbox, - // users: users_checkbox.map(obj => obj.token), - num: showSearch ? 1 : TIME_RANGE_OPTIONS[timeRange].num, - name: name, - period: showSearch - ? response.artists?.map((artist) => artist.name.trim()).join(', ') ?? - undefined - : TIME_RANGE_OPTIONS[timeRange].period, - receiptTitle: - showSearch && response.name ? response.name.toUpperCase() : 'receiptify', - itemCount: tracksFormatted.length, - isStats: type === 'stats', - isInternational: font === 'international', - }); + console.log(users_checkbox); + if (users_checkbox[0].token == null || users_checkbox[0].user == null) { + console.log('before html: ',users_checkbox); + console.log(sessionID); + userProfilePlaceholder.innerHTML = userProfileTemplate({ + tracks: tracksFormatted, + total: totalFormatted, + time: date, + sessionID: sessionID, + //users: users_checkbox, + users: [], // when null + num: showSearch ? 1 : TIME_RANGE_OPTIONS[timeRange].num, + name: name, + period: showSearch + ? response.artists?.map((artist) => artist.name.trim()).join(', ') ?? + undefined + : TIME_RANGE_OPTIONS[timeRange].period, + receiptTitle: + showSearch && response.name ? response.name.toUpperCase() : 'receiptify', + itemCount: tracksFormatted.length, + isStats: type === 'stats', + isInternational: font === 'international', + }); + } else { + console.log('before html: ',users_checkbox); + console.log(sessionID); + userProfilePlaceholder.innerHTML = userProfileTemplate({ + tracks: tracksFormatted, + total: totalFormatted, + time: date, + sessionID: sessionID, + //users: users_checkbox, + users: users_checkbox.map(obj => obj.user), // when null + num: showSearch ? 1 : TIME_RANGE_OPTIONS[timeRange].num, + name: name, + period: showSearch + ? response.artists?.map((artist) => artist.name.trim()).join(', ') ?? + undefined + : TIME_RANGE_OPTIONS[timeRange].period, + receiptTitle: + showSearch && response.name ? response.name.toUpperCase() : 'receiptify', + itemCount: tracksFormatted.length, + isStats: type === 'stats', + isInternational: font === 'international', + }); + } if (type === 'build-receipt') { $('.logo').html( @@ -973,8 +1022,18 @@ function shuffleArray(array){ function retrieveItems(stats, state) { - console.log(getUsersCheckbox()); - users_checkbox = getUsersCheckbox(); + console.log('getUsers: ', getUsersCheckbox()); + users_checkbox = getUsersCheckbox(); //needs to be a an array of obj + console.log('getUsers: ', [users_checkbox]); + + if (users_checkbox.length == 0){ + users_checkbox.push({user: null, token: null}); + console.log('push null retrieveItems'); + response_edited = { + items: [] + } + displayReceipt(response_edited, stats, state, users_checkbox); + } (async () => { try { @@ -1015,12 +1074,16 @@ function retrieveItems(stats, state) { const promises = []; let combined = []; const timeRangeSlug = "short_term"; + if (users_checkbox[0].token == null || users_checkbox[0].user == null) { + displayReceipt([], stats, state, users_checkbox); + } for (var i = 0; i < users_checkbox.length; i++) { const promise = new Promise((resolve, reject) => { $.ajax({ url: `${SPOTIFY_ROOT}/me/top/artists?limit=${limit}&time_range=${timeRangeSlug}`, headers: { - Authorization: 'Bearer ' + users_checkbox[i].id, + //Authorization: 'Bearer ' + users_checkbox[i].id, + Authorization: 'Bearer ' + users_checkbox[i].token //null }, success: (response) => { resolve(response?.items); diff --git a/receiptifyv1/test.js b/receiptifyv1/test.js index 08024e2..cdaac31 100644 --- a/receiptifyv1/test.js +++ b/receiptifyv1/test.js @@ -4,4 +4,5 @@ var objectsArray = users.map((user, index) => ({ user, token: tokens[index]})); console.log(objectsArray); -console.log(objectsArray.map(obj => obj.token).includes('token3')); \ No newline at end of file +console.log(objectsArray.map(obj => obj.token).includes('token3')); +console.log(objectsArray[0].user); \ No newline at end of file diff --git a/receiptifyv1/users.csv b/receiptifyv1/users.csv index 3e96c5a..a7ad22b 100644 --- a/receiptifyv1/users.csv +++ b/receiptifyv1/users.csv @@ -1,13 +1,5 @@ display_name, access_token, sessionID -Martin Duong,BQDE0nwqibaeUx4MT5uWl6Q2gh9ZRSjfcGOEm4q3C5R0KTHYnGUrn7MCPSCNtQubMVr3jlYDPq7qn1F1nttMRuhZ7_LSdUv8yrQGETovz18CSa5vSTIlA_q-B1b4ljMbxmHQ_PTZiW-QF-FYSHTFSKBhHU0nb4fKzmdZn_AcJ-P_Lp3HqLm443kbKgewnqSv434H1E4Xqzx8RHUYzgQXW6ouOBbIi4f0rYsQZzk,575591,2024-4-16 1:2:32, -✧ jizzica ✧,BQCHqTBcjw3ToKlw_T6LEy2LCU-jd6l4yHTBGCz3adSDxhW1GWT0Q7_5ysQMSmzR3i3xFL7z2PRpKfJmpV9_cBpoUj4iw1NqktLwyWsiOaprvgPKAJskNrZn0nQCiJe7LAf6ung3LkavXaQBLNVN5Xgy5yv4QoQj3ImQ-9NeKWxoydpoQevVC108UrCSLRn6qZET10WX0m-QoFg5mmVcQCsBK61xpYB5Cr5rTYM,575591,2024-4-16 1:2:49, -Martin Duong,BQDnFh-04he1mpbKo9Jt7xL11x_cHdxFJwrW3x5CH0FlK8lAFLJJAZlMO_pVam7yfn2hQpusV_Mft6-wdiRGr_a0Tc1j-m9LvAi1wXlSWrsoyvsjlKwp8maW6PXMM8SGRl70pHENX4WCP9f-vartmlb2BSyv1_xgYuJYPf0mWeocYV7jkBLTXJ-kvIEtUsxqR1fxGNO-kWRZHr8gl6uWLkW3fuHEBNrbSebYYS4,676895,2024-4-16 11:5:8, -✧ jizzica ✧,BQDoj-oO0pn1wT3QDJ4N32lTzxllO6CUqqh-NaBft-BRmZHI5jZuIYu6CwzE3vYNOLBDzitWHnSsBBXPbeevVek_8eQ5t0WpoEhZcsyLKiAQFoqiKQAGRMYHFmIPHN_CsxUQ5qM4yl3-fv43fGDNxx-V_z4YYnzuQ9iKbJJEz02AdaRmtMsi7sU5oM95AQ3SuaOpKUBsT5XWKYvRaXSx9sXnbAFqYHQjJ1KOk6E,676895,2024-4-16 11:5:43, -Martin Duong,BQAK8OkYwCE0w4qMJ4cjMcYwDgQSG1aUfg5tTDJptgKaWsKe2UpxjngrUfUrd5W_0qU8vs3nsUQ9QKBucVHL0egnlwcxcNRix1wci55BnztwfENEHMO8Zny5uUmV4foks8pGHiUD_M-j2esOa082kW_SQpJTFKkM27ijFzVJLqqTEpJ9Ua-KCBxdkf6M9CM77e6MjlunvpBErzMQGsWgE3hPv2cSSnUB17sXd-o,659642,2024-4-16 11:59:59, -✧ jizzica ✧,BQAjg6TgSsiW7jDD6EAnDLwJntEBMaxcFTCYES1YZ-mM3c3EarJ75vizU-3yxk-AcwlkkG3m15fD9cVSnNnbVNPCKMfnsdxuXCErzJJkJJVN6bKbZ1au82OMF3ReFLTQWbbhIJlA8V3i-n-OmwuUyIwPpPq4PQFxwFpFJ6UAQLfxGF7ioXAUHYSXH6QwVNsAlahHGdl1GVEQB8KaDmHGW9DbTQFAtTldvQ084sE,659642,2024-4-16 12:0:17, -Ari,BQDeOJDLrgeNZxrn6acT_LavDPFNoQIz2_XjhrR8NjBHR--YNny7wWHGtYjFtrL04bXdwWoH3RCU6QTpghBCIU628hCtJ8zCi5LxxRNrYHwtv8Pa_bovDGkSMD_sji0CwSzYXINZT0GLH5GU6QQ8E6v89RP320Iwy4T-gChJlKp_Vws7OGMkBA54GgACJrxMMlmrWt2l1LhNV6gAqzUf6A80U6YYPqelsrbWAU5aIT9yAgy7tmvtuZFu,659642,2024-4-16 12:0:35, -Nina Perone,BQCqGJBDqS2qcgQx8r_FANGro0Y95S8qPFtA4yvbS2Q6KLC_U5vP3WCbkIj5YcefepTU88Nv9vq_u_DXh4Yq2c-FlwVgPcmjXCsXf4LIxC1t8oo1f7ZyKbDXPvykVgcWF0Mtl1xwzEoMxVYds2bpSsAHwsg70Y6E6v2BwWDuT3xab_ZTChZyJ2t0Na7yH1f7BFZpTYkSKODgPHAW-cvvZAstAa8IzlvWaFXKfex5GAvZCJvgCfRKLOmQ,659642,2024-4-16 12:0:43, -Martin Duong,BQCYuWuIdKga8vK4Z-IT0s7zDXNOTebfIiCyM0DnsfeqkBZgta0xdbDzcCWONBRh2XmmZOq7x5BzMmPD-0LUEruWxg3kHnk-FTpaJ9-SJcpVZrEkohtDOTYb59VyoyeeFF50GxVh9ngy-JCl5Y1psDfUEvrIBg1yhifGgpb8-bX8Ttwu60oKbVF-tGvSEmFEttu_1VxIOMmyUnCVln9EcWSR2Y_B2uXu-uy9FyY,416228,2024-4-16 13:55:56, -✧ jizzica ✧,BQAbkRhycHgX_9D0jsW9SFk8ZjqWympizHFFt03jvFm2Cv2jrcAdx6qHX9GWgvYS5kVNWMgovJiWfxe2vjEoNtx_uz5OkpuXSgzHg2w-vDYmCRGDv8_n996MMtlw7pXqAoivVBcVP0DvhgNcBaO0xbrqcoYwaINRuoTSXldIqOmcLPsSkYlG9JFuA59NZKypfLi5bZbLYqCBWPeKiw6JiCjvZQJzoWMv48N3YMU,416228,2024-4-16 13:56:19, \ No newline at end of file +✧ jizzica ✧,BQDOu_IKh4t2B3HudFgMzrUaasUKAjFaePHr-Wg1CSTMXjbqA6gj5mfQcnnC_osq6R7eL2cYdNr3nj48Hky7Q1EPuZiAnzolrFSzjEDMMJoRXv4gRDpaVowDFXzoLuYER681GYPlQp9nNf36ya-zPYuS7uDr_4D7A5HyZZtNzC8vvIyZvcSScCmUv7HXzdWp2s4EXu669JPphLIGqlhIn3wTBypE-hESHEB-3fA,219722,2024-4-16 16:38:58, +Martin Duong,BQCo5AEgHl-JB2eOSxirUd5x9WZgBENY-uj343mK-lCAVstI0bFiXrt6uOVNLf3qOnyEPugAGCadV5qJUlRA2eG_vWvIQjNkFj6UF0ULcpXqOZLJE6uk2IvAaw3VnxE-Px_6e6wZAageZdfEQrj-gNciq5Nta_Gg_UmGo4n_6R5WCcaXtWHw9bDqe3RlPWTQ3-4P6f3LtYBnmtqegHgthqJgnh-xhO0ZWbMc7vY,219722,2024-4-16 16:39:27, \ No newline at end of file From 86dbb2f7f66194740989f619a207e24f4c951df6 Mon Sep 17 00:00:00 2001 From: Martin Duong Date: Tue, 16 Apr 2024 17:52:14 -0400 Subject: [PATCH 6/6] Cleaned Code --- receiptifyv1/public/server.js | 32 ++------------------------------ receiptifyv1/users.csv | 6 ++---- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/receiptifyv1/public/server.js b/receiptifyv1/public/server.js index e13ef4f..40ff1a3 100644 --- a/receiptifyv1/public/server.js +++ b/receiptifyv1/public/server.js @@ -338,14 +338,9 @@ const getPeriod = () => { }; const getUsersCheckbox = () => { - console.log('getUsersCheckbox'); - console.log(document.querySelectorAll('input[name="user-select-checkbox"]:checked')); var checkboxes = Array.from(document.querySelectorAll('input[name="user-select-checkbox"]:checked')); - console.log(checkboxes); checkboxes = Array.from(checkboxes); - console.log('checkboxes: ', checkboxes); var tokens = checkboxes.map(token => token.id); - console.log('tokens: ',tokens); var users = []; for (const token of tokens){ const label = document.querySelector(`label[for="${token}"]`); @@ -354,10 +349,8 @@ const getUsersCheckbox = () => { users.push(user); } } - console.log('users: ', users); var users_checkbox = users.map((user, index) =>({ user, token: tokens[index]})); - console.log('getUsersCheckbox Updated List: ', users_checkbox); // return list of objects. list of user object with name and token. return users_checkbox; @@ -655,18 +648,14 @@ async function fetchUsers(sessionID, type) { ;} -function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) { +function checkboxUpdate(stats, state, users_checkbox, user, isChecked) { if (users_checkbox.map(obj => obj.user).includes(null) || users_checkbox.map(obj => obj.token).includes(null)) { - //if (users_checkbox.includes(null)) { - console.log('true null'); users_checkbox.shift(); } - console.log("onclick redisplay"); if (!isChecked){ console.log(`Before: ${users_checkbox}`); for (let i = 0; i < users_checkbox.length; i++) { if (users_checkbox[i].user == user){ - //if (users_checkbox[i] == user) { users_checkbox.splice(i, 1); } } @@ -678,8 +667,6 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) } if (users_checkbox.length == 0){ users_checkbox.push({user: null, token: null}); - //users_checkbox.push(null); - console.log('pushed null: ', users_checkbox); } retrieveItems(stats, state); ;} @@ -688,7 +675,6 @@ function checkboxUpdate(response, stats, state, users_checkbox, user, isChecked) const displayReceipt = (response, stats, state, users_checkbox = []) => { console.log(response, stats, state, users_checkbox); const scrollPosition = window.scrollY; - //console.log('state & checkbox',state, users_checkbox); const type = getType(); const font = getFont(); const timeRange = getPeriod(); @@ -699,14 +685,10 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { let params = getHashParams(); - //console.log('response: ', response); - const fns = TYPE_FUNCTIONS[type]; const { getResponseItems, itemFns, totalIncrement } = fns; - //console.log(response, stats); - //console.log(getResponseItems, itemFns, totalIncrement); if (type === 'build-receipt') { $('#track-edit').show(); @@ -743,8 +725,6 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { const responseItems = getResponseItems(response, stats); - console.log('responses & stats: ', response, stats); - console.log('Response Items DisplayReceipt(): ', responseItems); const sessionID = params.sessionID; const name = showSearch && response.label ? response.label : displayName; @@ -752,16 +732,12 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { (async () => { try { users = await fetchUsers(sessionID, 'display_name'); - //console.log('Fetched Users', users); tokens = await fetchUsers(sessionID, 'access_token'); - //console.log(`Fetched Tokens: ${tokens}`); - //console.log(tokens); let total = 0; const date = TODAY.toLocaleDateString('en-US', DATE_OPTIONS).toUpperCase(); const tracksFormatted = responseItems.map((item, i) => { total += totalIncrement(item); - //console.log(item); return { id: (i + 1 < 10 ? '0' : '') + (i + 1), url: item.external_urls?.spotify, @@ -776,7 +752,6 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { if (users_checkbox.length == 0){ console.log("No Previous users_checkbox"); - //users_checkbox = [...users]; users_checkbox = users.map((user, index) => ({ user, token: tokens[index]})); const userCheckbox = document.getElementById('user-checkbox'); @@ -785,17 +760,14 @@ const displayReceipt = (response, stats, state, users_checkbox = []) => { userCheckboxTitle.textContent = "Select Users"; userCheckbox.appendChild(userCheckboxTitle); for (let i = 0; i < users.length; i++) { - //const user = users[i]; - //console.log(user); const checkbox = document.createElement('input'); checkbox.name = 'user-select-checkbox'; checkbox.type = 'checkbox'; checkbox.id = tokens[i]; - //checkbox.checked = (users_checkbox.includes(users[i])); checkbox.checked = users_checkbox.map(obj => obj.user).includes(users[i]) checkbox.onclick = (event) =>{ const isChecked = event.target.checked; - checkboxUpdate(response, stats, state, users_checkbox, users[i], isChecked); + checkboxUpdate(stats, state, users_checkbox, users[i], isChecked); } const label = document.createElement('label'); diff --git a/receiptifyv1/users.csv b/receiptifyv1/users.csv index a7ad22b..13e134d 100644 --- a/receiptifyv1/users.csv +++ b/receiptifyv1/users.csv @@ -1,5 +1,3 @@ display_name, access_token, sessionID - - -✧ jizzica ✧,BQDOu_IKh4t2B3HudFgMzrUaasUKAjFaePHr-Wg1CSTMXjbqA6gj5mfQcnnC_osq6R7eL2cYdNr3nj48Hky7Q1EPuZiAnzolrFSzjEDMMJoRXv4gRDpaVowDFXzoLuYER681GYPlQp9nNf36ya-zPYuS7uDr_4D7A5HyZZtNzC8vvIyZvcSScCmUv7HXzdWp2s4EXu669JPphLIGqlhIn3wTBypE-hESHEB-3fA,219722,2024-4-16 16:38:58, -Martin Duong,BQCo5AEgHl-JB2eOSxirUd5x9WZgBENY-uj343mK-lCAVstI0bFiXrt6uOVNLf3qOnyEPugAGCadV5qJUlRA2eG_vWvIQjNkFj6UF0ULcpXqOZLJE6uk2IvAaw3VnxE-Px_6e6wZAageZdfEQrj-gNciq5Nta_Gg_UmGo4n_6R5WCcaXtWHw9bDqe3RlPWTQ3-4P6f3LtYBnmtqegHgthqJgnh-xhO0ZWbMc7vY,219722,2024-4-16 16:39:27, \ No newline at end of file +✧ jizzica ✧,BQChAka6mlOzw7MQ9TRXVMCt-TMXc9ygokAOtVMJcLA_Wf7VEX_9NXEJajpVc_Eji3CefksLbHDAnX9fvpLtx7NgcFt7DbS_WwffqnUBOR539JxEVgsqMkmfg97UL_y4zLW4u7GEoHtDymtBxMxnvD7LaaoXL9P63M2UxLRwyxyLH0hI2QIOwyvLEQ0yW53UnQk9XEhdLuyK-tMJtfp3HCldxjtKCSGYFC0PoLY,219722,2024-4-16 17:40:40, +Martin Duong,BQCRfDHLTb6f6sX806cJalJSajBhq6-TB3veC6GRXb3AZ8uHMO6HEOvloqLeLc7xlTx-ZhgOfs22ONj2VWQz5n__xdk7C546UUy7In5MHgg7gYGix7457c0r7gXakCZcaee-brL3qqE3WC1N0U_5KEomJSOBKp39Lr389po2OMTGsnJ8uyOUmnWt2H5EbtvBH9xm1F9T9yOv6n0e9aAfKGfY_-K05xQ4j0-Hvyk,219722,2024-4-16 17:40:56, \ No newline at end of file