diff --git a/packages/web/components/elements/Button.tsx b/packages/web/components/elements/Button.tsx index 69eb8ac72..e0a999ce3 100644 --- a/packages/web/components/elements/Button.tsx +++ b/packages/web/components/elements/Button.tsx @@ -428,6 +428,16 @@ export const Button = styled('button', { opacity: 0.8, }, }, + homeAction: { + display: 'flex', + color: 'transparent', + border: 'none', + bg: 'transparent', + cursor: 'pointer', + p: '5px', + borderRadius: '5px', + '&:hover': { bg: '$readerHoverBg', opacity: '1' }, + }, themeSwitch: { p: '0px', m: '0px', diff --git a/packages/web/components/elements/Pagination.tsx b/packages/web/components/elements/Pagination.tsx index 595f130ec..2d36cdb59 100644 --- a/packages/web/components/elements/Pagination.tsx +++ b/packages/web/components/elements/Pagination.tsx @@ -1,45 +1,60 @@ -import React, { useState } from 'react' +import React, { useCallback, useMemo, useState } from 'react' import { Button } from './Button' import { HStack, VStack } from './LayoutPrimitives' type PaginationProps = { items: T[] itemsPerPage: number + loadMoreButtonText?: string render: (item: T) => React.ReactNode } const Pagination = ({ items, itemsPerPage, + loadMoreButtonText, render, }: PaginationProps) => { const [currentPage, setCurrentPage] = useState(1) const maxPage = Math.ceil(items.length / itemsPerPage) - function createChangePageHandler(page: number) { - return function handlePageChange() { - setCurrentPage(page) - } - } + const incrementCurrentPage = useCallback(() => { + setCurrentPage(currentPage + 1) + }, [currentPage, setCurrentPage]) - const itemsToShow = items.slice( - (currentPage - 1) * itemsPerPage, - currentPage * itemsPerPage - ) + const itemsToShow = useMemo(() => { + const count = currentPage * itemsPerPage + return items.slice(0, count) + }, [items, currentPage, itemsPerPage]) return ( - + {itemsToShow.map(render)} - - {Array.from({ length: maxPage }, (_, i) => i + 1).map((pageNum) => ( + + {currentPage < maxPage && ( - ))} + )} ) diff --git a/packages/web/components/elements/icons/home/AddToLibraryActionIcon.tsx b/packages/web/components/elements/icons/home/AddToLibraryActionIcon.tsx index e42a1bb8a..b2db19fe2 100644 --- a/packages/web/components/elements/icons/home/AddToLibraryActionIcon.tsx +++ b/packages/web/components/elements/icons/home/AddToLibraryActionIcon.tsx @@ -11,16 +11,15 @@ export class AddToLibraryActionIcon extends React.Component { return ( - { render() { const strokeColor = (this.props.color || '#D9D9D9').toString() - const backgroundColor = (this.props.color || '#3D3D3D').toString() return ( - { return ( - { render() { const strokeColor = (this.props.color || '#D9D9D9').toString() - const backgroundColor = (this.props.color || '#3D3D3D').toString() return ( - { render() { const strokeColor = (this.props.color || '#D9D9D9').toString() - const backgroundColor = (this.props.color || '#3D3D3D').toString() return ( - - - + + ) } + +// const SiteSourceHoverContent = ( +// props: SourceHoverContentProps +// ): JSX.Element => { +// const sendHomeFeedback = useCallback( +// async (feedbackType: SendHomeFeedbackType) => { +// const feedback: SendHomeFeedbackInput = { +// feedbackType, +// } +// feedback.site = props.source.name +// const result = await sendHomeFeedbackMutation(feedback) +// if (result) { +// showSuccessToast('Feedback sent') +// } else { +// showErrorToast('Error sending feedback') +// } +// }, +// [props] +// ) + +// return ( +// +// +// {props.source.icon && ( +// +// )} +// +// {props.source.name} +// +// +// {/* +// {subscription ? <>{subscription.description} : <>} +// */} +// +// +// ) +// } + +type FeedbackViewProps = { + sendFeedback: (type: SendHomeFeedbackType) => void +} + +const FeedbackView = (props: FeedbackViewProps): JSX.Element => { + return ( + + + + + ) +} + +type HeaderProps = { + toggleMenu: () => void +} + +const Header = (props: HeaderProps): JSX.Element => { + const small = false + + return ( + + + + + + ) +}