Skip to content

Commit

Permalink
add new work app to react tools b00tc4mp#79
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabián Romero authored and Fabián Romero committed Jul 4, 2024
1 parent 69bb386 commit 785f6ba
Show file tree
Hide file tree
Showing 75 changed files with 2,233 additions and 45 deletions.
Binary file modified staff/fabian-romero/playground/ponies/app/.DS_Store
Binary file not shown.
4 changes: 3 additions & 1 deletion staff/fabian-romero/playground/ponies/app/data/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import findUser from './findUser.mjs'
import insertPost from './insertPost.mjs'
import insertUser from './insertUser.mjs'
import updatePost from './updatePost.mjs'
import updateUser from './updateUser.mjs'

const data = {
deletePost,
Expand All @@ -13,7 +14,8 @@ const data = {
findUser,
insertPost,
insertUser,
updatePost
updatePost,
updateUser
}

export default data
13 changes: 13 additions & 0 deletions staff/fabian-romero/playground/ponies/app/data/updateUser.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
function updateUser(condition, user) {
const users = localStorage.user !== undefined ? JSON.parse(localStorage.users) : []

const index = users.findIndex(condition)

if (index > -1) {
user.splice(index, 1, user)

localStorage.users = JSON.stringify(users)
}
}

export default updateUser
20 changes: 20 additions & 0 deletions staff/fabian-romero/playground/ponies/app/logic/getAllFavPosts.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import data from '../data/index.mjs'

const getAllFavPosts = () => {
const user = data.findUser(user => user.username === sessionStorage.username)

if (user === null)
throw new Error('user not found')

const posts = data.findPosts(post => user.favs.includes(post.id))

posts.forEach(post => {
post.fav = user.favs.includes(post.id)
post.like = post.likes.includes(sessionStorage.username)
})

return posts.reverse()

}

export default getAllFavPosts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import data from '../data/index.mjs'

const getAllFollowingUserPosts = () => {
const user = data.findUser(user => user.username === sessionStorage.username)

if (user === null)
throw new Error('User not found')

const posts = data.findPosts(post => user.following.includes(post.author))

posts.forEach((post) => {
post.fav = user.favs.includes(post.id)
post.like = post.likes.includes(sessionStorage.username)
post.author = {
username: post.author,
following: user.following.includes(post.author)
}
})

return posts.reverse()
}

export default getAllFollowingUserPosts
16 changes: 15 additions & 1 deletion staff/fabian-romero/playground/ponies/app/logic/getAllPosts.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
import data from '../data/index.mjs'

const getAllPosts = () => {
const posts = data.findPosts(post => true)
const user = data.findUser(user => user.username === sessionStorage.username)

if (user === null)
throw new Error('user not found')

const posts = data.findPosts(() => true)

posts.forEach(post => {
post.fav = user.favs.includes(post.id)
post.like = post.likes.includes(sessionStorage.username)
post.author = {
username: post.author,
following: user.includes(post.author)
}
})

return posts.reverse()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import getAllFavPosts from './getAllFavPosts.mjs'

console.info('TEST getAllFavPosts')
console.info('CASE get all fav posts from fabito ')

sessionStorage.username = 'fabito'

const favs = getAllFavPosts()

console.log(favs)
8 changes: 7 additions & 1 deletion staff/fabian-romero/playground/ponies/app/logic/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import toggleLikePost from './toggleLikePost.mjs'
import updatePostCaption from './updatePostCaption.mjs'
import createPost from './creatPost.mjs'
import deletePost from './deletePost.mjs'
import toggleFavPost from './toggleFavPost.mjs'
import getAllFavPosts from './getAllFavPosts.mjs'
import toggleFollowUser from './toggleFollowUser.mjs'

const logic = {
getAllPosts,
Expand All @@ -19,7 +22,10 @@ const logic = {
toggleLikePost,
updatePostCaption,
createPost,
deletePost
deletePost,
toggleFavPost,
getAllFavPosts,
toggleFollowUser
}

export default logic
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ const registerUser = (name, surname, email, username, password, passwordRepeat)
surname: surname,
email: email,
username: username,
password: password
password: password,
favs: []
}

data.insertUser(user)
Expand Down
17 changes: 17 additions & 0 deletions staff/fabian-romero/playground/ponies/app/logic/test.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TEST logic</title>
</head>

<body>
<h1>TEST logic</h1>

<script src="getAllFavPosts.test.mjs" type="module"></script>

</body>

</html>
26 changes: 26 additions & 0 deletions staff/fabian-romero/playground/ponies/app/logic/toggleFavPost.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import data from '../data/index.mjs'

function toggleFavPost(postId) {
if (postId.trim().length === 0) throw new Error('invalid postId')

const user = data.findUser(user => user.username === sessionStorage.username)

if (user === null)
throw new Error('user not found')

const post = data.findPost(post => post.id === postId)

if (post === null)
throw new Error('post not found')

const index = user.fav.indexOf(postId)

if (index < 0)
user.favs.push(postId)
else
user.favs.splice(index, 1)

data.updateUser(user => user.username === sessionStorage.username, user)
}

export default toggleFavPost
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import data from '../data/index.mjs'

function toggleFollowUser(username) {

if (!username.trim().length) throw new Error('Invalid username')

const user = data.findUser(user => user.username === sessionStorage.username)

if (!user)
throw new Error('User not found')

const following = data.findUser(user => user.username === username)

if (!following)
throw new Error('Following user not found')

const index = user.following.indexOf(username)

if (index < 0)
user.following.push(username)
else
user.following.splice(index, 1)

data.updateUser(user => user.username === sessionStorage.username, user)
}

export default toggleFollowUser
14 changes: 14 additions & 0 deletions staff/fabian-romero/playground/ponies/app/view/Component.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,20 @@ class Component {
this.container.removeChild(child.container)
}

has(child) {
if (!(child instanceof Component))
throw new TypeError('child is not a Component')

const children = this.container.children
for (let i = 0; i < children.length; i++) {
const childrenContainer = children[i]

if (childrenContainer === child.container) return true
}

return false
}

setText(text) {
if (typeof text !== 'string')
throw new TypeError('text is not a string')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import Component from '../../Component.mjs'
import Post from './Post.mjs'

import logic from '../../../logic/index.mjs'

class FavPostList extends Component {
constructor() {
super(document.createElement('section'))

this.setClassName('post-list')
}

clearPosts() {
for (let i = this.container.children.length - 1; i > -1; i--) {
const child = this.container.children[i]

this.container.removeChild(child)
}
}

listPosts() {
try {
const posts = logic.getAllFavPosts()

const self = this

posts.forEach(_post => {
const post = new Post(_post)

post.onPostDeleted(() => {
self.clearPosts()
self.listPosts()
})

post.onPostCaptionEdited(() => {
self.clearPosts()
self.listPosts()
})

post.onPostLikeToggled(() => {
self.clearPosts()
self.listPosts()
})

post.onPostFavToggled(() => {
self.clearPosts()
self.listPosts()
})

post.onUserFollowToggled(() => {
self.clearPosts()
self.listPosts()
})

self.add(post)
})
} catch (error) {
console.error(error)

alert(error.message)
}
}
}

export default FavPostList
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import Component from '../../Component.mjs'
import Post from './Post.mjs'

import logic from '../../../logic/index.mjs'

class FollowingUserPostList extends Component {
constructor() {
super(document.createElement('section'))

this.setClassName('post-list')
}

clearPosts() {
for (let i = this.container.children.length - 1; i > -1; i--) {
const child = this.container.children[i]

this.container.removeChild(child)
}
}

listPosts() {
try {
const posts = logic.getAllFollowingUserPosts()

const self = this

posts.forEach(_post => {
const post = new Post(_post)

post.onPostDeleted(() => {
self.clearPosts()
self.listPosts()
})

post.onPostCaptionEdited(() => {
self.clearPosts()
self.listPosts()
})

post.onPostLikeToggled(() => {
self.clearPosts()
self.listPosts()
})

post.onPostFavToggled(() => {
self.clearPosts()
self.listPosts()
})

post.onFollowUserToggled(() => {
self.clearPosts()
self.listPosts()
})

self.add(post)
})
} catch (error) {
console.error(error)

alert(error.message)
}
}
}

export default FollowingUserPostList
Loading

0 comments on commit 785f6ba

Please sign in to comment.