<commit_before>export function genData (data) {
  return data.days.map(day => {
    let topicTimeMap = {}
    day.rooms.forEach(room => {
      room.topics.forEach(topic => {
        if (!topicTimeMap[topic.start_at]) {
          topicTimeMap[topic.start_at] = []
        }
        if (!(topic.rest && topicTimeMap[topic.start_at].length === 1)) {
          topic.room = room
          topic.isSubscribed = false
          topicTimeMap[topic.start_at].push(topic)
        }
      })
    })
    day.topics = topicTimeMap
    delete day.rooms
    return day
  })
}

/*
 * 潜在Bug: 组合数据时，一定要返回一个新的对象。(days是一个不可变的源数据)
 * 否则，第一次调用，ListView接收到的是被修改了的原始数据。后期则是一直使用对原始数据的修改。
 * 因此，在每次调用的时候，一定要返回一个新的对象，以供ListView的WillReceiveProps做对比<commit_msg>using cycle data-structure will crash in persist-storage<commit_after>export function genData (data) {
  return data.days.map(day => {
    let topicTimeMap = {}
    day.rooms.forEach(room => {
      const {topics, ...others} = room
      topics.forEach(topic => {
        if (!topicTimeMap[topic.start_at]) {
          topicTimeMap[topic.start_at] = []
        }
        if (!(topic.rest && topicTimeMap[topic.start_at].length === 1)) {
          topic.room = {...others}
          topic.isSubscribed = false
          topicTimeMap[topic.start_at].push(topic)
        }
      })
    })
    day.topics = topicTimeMap
    delete day.rooms
    return day
  })
}

/*
 * 潜在Bug: 组合数据时，一定要返回一个新的对象。(days是一个不可变的源数据)
 * 否则，第一次调用，ListView接收到的是被修改了的原始数据。后期则是一直使用对原始数据的修改。
 * 因此，在每次调用的时候，一定要返回一个新的对象，以供ListView的WillReceiveProps做对比
{'fraction_non_alphanumeric': 0.13079896907216496, 'fraction_numerical': 0.001288659793814433, 'mean_word_length': 2.778588807785888, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7640748', 'n_tokens_mistral': 632, 'n_tokens_neox': 643, 'n_words': 73}