Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.3/immutable.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.js"></script>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
var expect = chai.expect;
const comments = [{
  "_id":"5676ed8b9104691f3b85b687",
  "content":"Lorem",
  "creator":"Admin",
  "replies":[
    {
    "_id":"5676ede4b7a9044c3c1d9641",
    "content":"Ipsum",
    "creator":"Admin",
    "replies":[
      {
        "_id":"5676eec224ab8fe23c7ce4c6",
        "content":"Dolor",
        "creator":"Admin",
        "replies":[]
      },
      {
        "_id":"5676eeda1c0e3d093d1f90a0",
        "content":"Sit",
        "creator":"Admin",
        "replies":[]
      }
    ]
  },
  {
    "_id":"5676ee5b4b03bbac3c1f7544",
    "content":"Amet",
    "creator":"Admin",
    "replies":[]
  },
  {
    "_id":"5676ee91c43c05c63c319ace",
    "content":"Sup",
    "creator":"Admin",
    "replies":[]
  }]
}]
var state = Immutable.Map({})
state = state.set('coolPostId')
state = state.setIn(['coolPostId'], Immutable.fromJS(comments))
// Replying to post //
const replyToPostComment = {
  _id: '1234',
  content: 'Hello',
  creator: 'RandomUser',
  replies: []
}
state = replyToPost(state, {
  payload: {
    postId: 'coolPostId',
    comment: replyToPostComment
  }
})
// Test //
var jsObjState = state.toJS()
expect(
  jsObjState['coolPostId'][jsObjState['coolPostId'].length - 1] // Last comment
).to.deep.equal(
  replyToPostComment
)
// Replying to specific comment based on postId and commentId //
const replyToCommentComment = {
  _id: '5678',
  content: 'Wellcome',
  creator: 'RandomUser2',
  replies: []
}
state = replyToComment(state, {
  payload: {
    postId: 'coolPostId',
    commentId: '1234',
    comment: replyToComment
  }
})
// Test //
// This test will fail //
jsObjState = state.toJS()
expect(
  jsObjState['coolPostId'][jsObjState['coolPostId'].length - 1].replies[0] // Last comment first reply, I dont even know how to easily select it now based on postId and commentId
).to.deep.equal(
  replyToCommentComment
)
function replyToPost(state, { payload }) {
  const { postId, comment } = payload
  var newState = state.updateIn([postId], x => x.push(comment))
  return newState
}
function replyToComment(state, { payload }) {
  const { commentId, postId, comment } = payload
  var newState = state;// ??? Part I cant figure out
  return newState
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers