108 lines
3.0 KiB
JavaScript
108 lines
3.0 KiB
JavaScript
import {fromJS} from 'immutable'
|
|
|
|
const categoriesFromState = (fn) => {
|
|
return (state, ...args) => {
|
|
const categories = state.getIn(['appState', 'sidebar', 'categories']).toJS()
|
|
return fromJS(fn(categories, ...args))
|
|
}
|
|
}
|
|
|
|
const walkCategories = (fn) => {
|
|
return (categories, ...args) => {
|
|
const walker = (array) => {
|
|
return array.map((category) => {
|
|
category.childes = walker(category.childes)
|
|
fn(category, ...args)
|
|
return category
|
|
})
|
|
}
|
|
return walker(categories)
|
|
}
|
|
}
|
|
|
|
const feedHelper = (fn) => categoriesFromState(walkCategories(fn))
|
|
|
|
//return categories without deleted feed
|
|
export const deleteFeed = feedHelper((category, feedCategoryId, feedId) => {
|
|
if (category.id === feedCategoryId) {
|
|
category.feeds = category.feeds.filter((feed) => feed.id !== feedId)
|
|
}
|
|
})
|
|
|
|
export const addFeed = feedHelper((category, feedCategoryId, feed) => {
|
|
if (category.id === feedCategoryId) {
|
|
category.feeds.push(feed)
|
|
}
|
|
})
|
|
|
|
export const renameFeed = feedHelper((category, feedId, newFeedName, feedCategoryId) => {
|
|
if (category.id === feedCategoryId) {
|
|
category.feeds = category.feeds.map((feed) => {
|
|
if (feed.id === feedId) {
|
|
feed.name = newFeedName
|
|
}
|
|
return feed
|
|
})
|
|
}
|
|
})
|
|
|
|
const _deleteCategory = (categories, categoryId) => {
|
|
return categories.map((category) => {
|
|
if (category.childes.length > 0) {
|
|
const initChildesLength = category.childes.length
|
|
category.childes = category.childes.filter((childCategory) => {
|
|
return childCategory.id !== categoryId
|
|
})
|
|
const childesLengthAfterFilter = category.childes.length
|
|
// if there wasn't deletion continue to search
|
|
if (childesLengthAfterFilter === initChildesLength) {
|
|
category.childes = _deleteCategory(category.childes, categoryId)
|
|
}
|
|
}
|
|
return category
|
|
})
|
|
}
|
|
|
|
//return categories without deleted category
|
|
export const deleteCategory = categoriesFromState(_deleteCategory)
|
|
|
|
export const addCategory = feedHelper((category, parentId, newCategory) => {
|
|
if (category.id === parentId) {
|
|
category.childes.push(newCategory)
|
|
}
|
|
})
|
|
|
|
export const renameCategory = feedHelper((category, categoryId, newCategoryName) => {
|
|
if (category.id === categoryId) {
|
|
category.name = newCategoryName
|
|
}
|
|
})
|
|
|
|
export const checkIfDraggedCategoryDragToItsChild = (categories, newCategoryId) => {
|
|
return categories.find((category) => {
|
|
if (category.childes.length > 0) {
|
|
checkIfDraggedCategoryDragToItsChild(category.childes, newCategoryId)
|
|
}
|
|
|
|
return category.id === newCategoryId
|
|
})
|
|
}
|
|
|
|
export const findFeedById = (categories, feedId) => {
|
|
let feed = null
|
|
categories.forEach((category) => {
|
|
if (!feed && category.feeds.length > 0) {
|
|
const findResult = category.feeds.filter(feed => feed.id === feedId)
|
|
feed = findResult[0] || null
|
|
if (feed) {
|
|
feed.category = category.id
|
|
}
|
|
|
|
if (!feed && category.childes.length > 0) {
|
|
feed = findFeedById(category.childes, feedId)
|
|
}
|
|
}
|
|
})
|
|
return feed
|
|
}
|