2022-11-10 01:35:41 +00:00
/ * *
2022-11-18 07:13:53 +00:00
* Creates a new review to storage and performs related meta tasks
* @ param { Object } review to store
* @ return { number } ID of the newly added review
2022-11-10 01:35:41 +00:00
* /
2022-11-18 07:13:53 +00:00
export function newReviewToStorage ( review ) {
//grabbing the nextID, and putting our review object in storage associated with the ID
let nextReviewId = JSON . parse ( localStorage . getItem ( "nextID" ) ) ;
review [ "reviewID" ] = nextReviewId ;
// set the review entry to the review object
localStorage . setItem ( ` review ${ nextReviewId } ` , JSON . stringify ( review ) ) ;
2022-11-27 23:48:00 +00:00
// adding to the tag keys
addTagsToStorage ( nextReviewId , review [ "tags" ] ) ;
2022-11-18 07:13:53 +00:00
//updating our activeIDS list
let tempIdArr = JSON . parse ( localStorage . getItem ( "activeIDS" ) ) ;
tempIdArr . push ( nextReviewId ) ;
localStorage . setItem ( "activeIDS" , JSON . stringify ( tempIdArr ) ) ;
//increment nextID for next review creation
2022-11-21 00:27:27 +00:00
localStorage . setItem ( "nextID" , JSON . stringify ( nextReviewId + 1 ) ) ;
2022-11-18 07:13:53 +00:00
return nextReviewId ;
}
/ * *
* Gets a single review by ID from storage
* @ param { string } ID of the review to get
* @ returns { Object } review object corresponding to param ID
* /
export function getReviewFromStorage ( ID ) {
return JSON . parse ( localStorage . getItem ( ` review ${ ID } ` ) ) ;
}
/ * *
* Updates a single review by ID to storage
* @ param { string } ID of review to update
* @ param { Object } review to store
* /
export function updateReviewToStorage ( ID , review ) {
2022-11-28 01:31:13 +00:00
let oldReview = JSON . parse ( localStorage . getItem ( ` review ${ ID } ` ) ) ;
//Get diff of tags and update storage
let deletedTags = oldReview [ "tags" ] . filter ( x => ! review [ "tags" ] . includes ( x ) ) ;
let addedTags = review [ "tags" ] . filter ( x => ! oldReview [ "tags" ] . includes ( x ) ) ;
deleteTagsFromStorage ( currID , deletedTags ) ;
addTagsToStorage ( currID , addedTags ) ;
2022-11-18 07:13:53 +00:00
// set the review entry with ID to the review object
localStorage . setItem ( ` review ${ ID } ` , JSON . stringify ( review ) ) ;
}
/ * *
* Deletes a review by ID from storage
* @ param { string } ID of the review to delete
* /
export function deleteReviewFromStorage ( ID ) {
let activeIDS = JSON . parse ( localStorage . getItem ( "activeIDS" ) ) ;
for ( let i in activeIDS ) {
if ( activeIDS [ i ] == ID ) {
activeIDS . splice ( i , 1 ) ;
2022-11-18 07:56:07 +00:00
localStorage . setItem ( "activeIDS" , JSON . stringify ( activeIDS ) ) ;
2022-11-27 23:48:00 +00:00
//get review to delete all the tags(may wanna just add ID to a different list that will delete review and tag list in background)(also don't wanna linear search)
let currReview = JSON . parse ( localStorage . getItem ( ` review ${ ID } ` ) ) ;
deleteTagsFromStorage ( ID , currReview [ "tags" ] ) ;
2022-11-18 07:56:07 +00:00
localStorage . removeItem ( ` review ${ ID } ` ) ;
2022-11-18 07:13:53 +00:00
return ;
}
}
console . error ( ` could not find review ${ ID } in localStorage ` ) ;
}
2022-11-27 23:48:00 +00:00
/ * *
* Delete ID from the specified tags ' storage
* @ param { string } ID to delete from lists
* @ param { string [ ] } deletedTags to modify storage of
* /
export function deleteTagsFromStorage ( ID , deletedTags ) {
for ( let i in deletedTags ) {
//get local storage of each tag and remove id from tag list
let tagArr = JSON . parse ( localStorage . getItem ( "!" + deletedTags [ i ] ) ) ;
for ( let j in tagArr ) {
if ( tagArr [ j ] == ID ) {
tagArr . splice ( j , 1 ) ;
}
break ;
}
if ( tagArr . length != 0 ) {
localStorage . setItem ( "!" + deletedTags [ i ] , JSON . stringify ( tagArr ) ) ;
} else {
localStorage . removeItem ( "!" + deletedTags [ i ] ) ;
}
}
}
/ * *
* Add ID from the specified tags ' storage
* @ param { string } ID to add to lists
* @ param { string [ ] } addedTags to modify storage of
* /
export function addTagsToStorage ( ID , addedTags ) {
for ( let i in addedTags ) {
let tagArr = JSON . parse ( localStorage . getItem ( "!" + addedTags [ i ] ) ) ;
if ( ! tagArr ) {
tagArr = [ ] ;
}
tagArr . push ( ID ) ;
localStorage . setItem ( "!" + addedTags [ i ] , JSON . stringify ( tagArr ) ) ;
}
}
2022-11-18 07:13:53 +00:00
// legacy function
export function getAllReviewsFromStorage ( ) {
2022-11-18 02:45:53 +00:00
if ( ! ( localStorage . getItem ( "activeIDS" ) ) ) {
// we wanna init the active ID array and start the nextID count
localStorage . setItem ( "activeIDS" , JSON . stringify ( [ ] ) ) ;
localStorage . setItem ( "nextID" , JSON . stringify ( 0 ) ) ;
2022-11-10 01:35:41 +00:00
}
2022-11-18 02:45:53 +00:00
//iterate thru activeIDS
let activeIDS = JSON . parse ( localStorage . getItem ( "activeIDS" ) ) ;
2022-11-18 07:56:07 +00:00
let reviews = [ ] ;
2022-11-18 02:45:53 +00:00
for ( let i = 0 ; i < activeIDS . length ; i ++ ) {
2022-11-18 07:13:53 +00:00
let currReview = JSON . parse ( localStorage . getItem ( ` review ${ activeIDS [ i ] } ` ) ) ;
2022-11-18 02:45:53 +00:00
reviews . push ( currReview ) ;
}
return reviews ;
2022-11-18 07:13:53 +00:00
}