mirror of
https://github.com/yang991178/fluent-reader.git
synced 2025-03-13 01:40:14 +01:00
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
import { connect } from "react-redux"
|
|
import { createSelector } from "reselect"
|
|
import { RootState } from "../scripts/reducer"
|
|
import { RSSItem, markUnread, markRead, toggleStarred, toggleHidden, itemShortcuts } from "../scripts/models/item"
|
|
import { AppDispatch } from "../scripts/utils"
|
|
import { dismissItem, showOffsetItem } from "../scripts/models/page"
|
|
import Article from "../components/article"
|
|
import { openTextMenu } from "../scripts/models/app"
|
|
|
|
type ArticleContainerProps = {
|
|
itemId: string
|
|
}
|
|
|
|
const getItem = (state: RootState, props: ArticleContainerProps) => state.items[props.itemId]
|
|
const getSource = (state: RootState, props: ArticleContainerProps) => state.sources[state.items[props.itemId].source]
|
|
const getLocale = (state: RootState) => state.app.locale
|
|
|
|
const makeMapStateToProps = () => {
|
|
return createSelector(
|
|
[getItem, getSource, getLocale],
|
|
(item, source, locale) => ({
|
|
item: item,
|
|
source: source,
|
|
locale: locale
|
|
})
|
|
)
|
|
}
|
|
|
|
const mapDispatchToProps = (dispatch: AppDispatch) => {
|
|
return {
|
|
shortcuts: (item: RSSItem, key: string) => dispatch(itemShortcuts(item, key)),
|
|
dismiss: () => dispatch(dismissItem()),
|
|
offsetItem: (offset: number) => dispatch(showOffsetItem(offset)),
|
|
toggleHasRead: (item: RSSItem) => dispatch(item.hasRead ? markUnread(item) : markRead(item)),
|
|
toggleStarred: (item: RSSItem) => dispatch(toggleStarred(item)),
|
|
toggleHidden: (item: RSSItem) => dispatch(toggleHidden(item)),
|
|
textMenu: (text: string, position: [number, number]) => dispatch(openTextMenu(text, position))
|
|
}
|
|
}
|
|
|
|
const ArticleContainer = connect(makeMapStateToProps, mapDispatchToProps)(Article)
|
|
export default ArticleContainer |