2020-08-24 13:32:34 +08:00

63 lines
2.0 KiB
TypeScript

import * as React from "react"
import { RSSSource, SourceOpenTarget } from "../../scripts/models/source"
import { RSSItem } from "../../scripts/models/item"
import { platformCtrl } from "../../scripts/utils"
import { FeedFilter } from "../../scripts/models/feed"
import { ViewConfigs } from "../../schema-types"
export namespace Card {
export type Props = {
feedId: string
item: RSSItem
source: RSSSource
filter: FeedFilter
viewConfigs?: ViewConfigs
shortcuts: (item: RSSItem, e: KeyboardEvent) => void
markRead: (item: RSSItem) => void
contextMenu: (feedId: string, item: RSSItem, e) => void
showItem: (fid: string, item: RSSItem) => void
}
const openInBrowser = (props: Props, e: React.MouseEvent) => {
props.markRead(props.item)
window.utils.openExternal(props.item.link, platformCtrl(e))
}
export const bindEventsToProps = (props: Props) => ({
onClick: (e: React.MouseEvent) => onClick(props, e),
onMouseUp: (e: React.MouseEvent) => onMouseUp(props, e),
onKeyDown: (e: React.KeyboardEvent) => onKeyDown(props, e),
})
const onClick = (props: Props, e: React.MouseEvent) => {
e.preventDefault()
e.stopPropagation()
switch (props.source.openTarget) {
case SourceOpenTarget.External: {
openInBrowser(props, e)
break
}
default: {
props.markRead(props.item)
props.showItem(props.feedId, props.item)
break
}
}
}
const onMouseUp = (props: Props, e: React.MouseEvent) => {
e.preventDefault()
e.stopPropagation()
switch (e.button) {
case 1:
openInBrowser(props, e)
break
case 2:
props.contextMenu(props.feedId, props.item, e)
}
}
const onKeyDown = (props: Props, e: React.KeyboardEvent) => {
props.shortcuts(props.item, e.nativeEvent)
}
}