diff --git a/blog.config.js b/blog.config.js index 6c22adf3..15718929 100644 --- a/blog.config.js +++ b/blog.config.js @@ -14,6 +14,7 @@ const BLOG = { BEI_AN: process.env.NEXT_PUBLIC_BEI_AN || '', // 备案号 闽ICP备XXXXXXX APPEARANCE: 'auto', // ['light', 'dark', 'auto'], FONT: 'font-serif tracking-wider subpixel-antialiased', // 文章字体 ['font-sans', 'font-serif', 'font-mono'] @see https://www.tailwindcss.cn/docs/font-family + FONT_AWESOME_PATH: 'https://cdn.bootcdn.net/ajax/libs/font-awesome/5.15.4/css/all.min.css', // 图标库CDN ,国内推荐BootCDN,国外推荐 CloudFlare https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css BACKGROUND_LIGHT: '#eeeeee', // use hex value, don't forget '#' e.g #fffefc BACKGROUND_DARK: '#111827', // use hex value, don't forget '#' PATH: '', // leave this empty unless you want to deploy in a folder @@ -24,6 +25,9 @@ const BLOG = { POSTS_PER_PAGE: 6, // post counts per page POSTS_SORT_BY: 'notion', // 排序方式 'date'按时间,'notion'由notion控制 + PREVIEW_CATEGORY_COUNT: 16, // 首页最多展示的分类数量,0为不限制 + PREVIEW_TAG_COUNT: 16, // 首页最多展示的标签数量,0为不限制 + // 社交链接,不需要可留空白,例如 CONTACT_WEIBO:'' CONTACT_EMAIL: 'tlyong1992@hotmail.com', CONTACT_WEIBO: '', diff --git a/lib/notion/getAllCategories.js b/lib/notion/getAllCategories.js index 8e94e8ba..61aab49c 100644 --- a/lib/notion/getAllCategories.js +++ b/lib/notion/getAllCategories.js @@ -3,11 +3,11 @@ * @param allPosts * @returns {Promise<{}|*[]>} */ -export async function getAllCategories (allPosts) { - if (!allPosts) { +export async function getAllCategories ({ allPosts, categoryOptions, sliceCount = 0 }) { + if (!allPosts || !categoryOptions) { return [] } - + // 计数 let categories = allPosts.map(p => p.category) categories = [...categories.flat()] const categoryObj = {} @@ -18,5 +18,19 @@ export async function getAllCategories (allPosts) { categoryObj[category] = 1 } }) - return categoryObj + const list = [] + categoryOptions.forEach(c => { + const count = categoryObj[c.value] + if (count) { + list.push({ id: c.id, name: c.value, color: c.color, count }) + } + }) + + // 按照数量排序 + // list.sort((a, b) => b.count - a.count) + if (sliceCount && sliceCount > 0) { + return list.slice(0, sliceCount) + } else { + return list + } } diff --git a/lib/notion/getAllTags.js b/lib/notion/getAllTags.js index f1a9681b..3ac01f54 100644 --- a/lib/notion/getAllTags.js +++ b/lib/notion/getAllTags.js @@ -6,15 +6,13 @@ * @param tagOptions tags的下拉选项 * @returns {Promise<{}|*[]>} */ -export async function getAllTags ({ allPosts, sliceCount = 16, tagOptions }) { - if (!allPosts) { +export async function getAllTags ({ allPosts, sliceCount = 0, tagOptions }) { + if (!allPosts || !tagOptions) { return [] } - + // 计数 let tags = allPosts.map(p => p.tags) tags = [...tags.flat()] - - // 标签计数 const tagObj = {} tags.forEach(tag => { if (tag in tagObj) { @@ -23,13 +21,16 @@ export async function getAllTags ({ allPosts, sliceCount = 16, tagOptions }) { tagObj[tag] = 1 } }) - - // 按照标签数量排序 - const list = Object.keys(tagObj).map((tag) => { - const color = tagOptions.find(option => option.value === tag)?.color || 'gray' - return { name: tag, count: tagObj[tag], color } + const list = [] + tagOptions.forEach(c => { + const count = tagObj[c.value] + if (count) { + list.push({ id: c.id, name: c.value, color: c.color, count }) + } }) - list.sort((a, b) => b.count - a.count) + + // 按照数量排序 + // list.sort((a, b) => b.count - a.count) if (sliceCount && sliceCount > 0) { return list.slice(0, sliceCount) } else { diff --git a/lib/notion/getNotionData.js b/lib/notion/getNotionData.js index 7b4aebbe..dd26937e 100644 --- a/lib/notion/getNotionData.js +++ b/lib/notion/getNotionData.js @@ -11,6 +11,7 @@ import { getAllTags } from './getAllTags' * @param {*} pageId * @param {*} from * @param latestPostCount 截取最新文章数量 + * @param categoryCount * @param tagsCount 截取标签数量 * @param pageType 过滤的文章类型,数组格式 ['Page','Post'] * @returns { @@ -27,15 +28,17 @@ export async function getGlobalNotionData ({ pageId = BLOG.NOTION_PAGE_ID, from, latestPostCount = 5, - tagsCount = 16, + categoryCount = BLOG.PREVIEW_CATEGORY_COUNT, + tagsCount = BLOG.PREVIEW_TAG_COUNT, pageType = ['Post'] }) { const notionPageData = await getNotionPageData({ pageId, from }) const tagOptions = notionPageData.tagOptions + const categoryOptions = notionPageData.categoryOptions const allPosts = await getAllPosts({ notionPageData, from, pageType }) const postCount = await getAllPostCount({ notionPageData, from }) const customNav = await getCustomNav({ notionPageData }) - const categories = await getAllCategories(allPosts) + const categories = await getAllCategories({ allPosts, categoryOptions, sliceCount: categoryCount }) const tags = await getAllTags({ allPosts, tagOptions, sliceCount: tagsCount }) const latestPosts = await getLatestPosts({ notionPageData, from, latestPostCount }) return { allPosts, latestPosts, categories, postCount, customNav, tags } @@ -110,6 +113,11 @@ function getTagOptions (schema) { return tagSchema?.options || {} } +function getCategoryOptions (schema) { + const categorySchema = Object.values(schema).find(e => e.name === 'category') + return categorySchema?.options || {} +} + /** * 调用NotionAPI获取Page数据 * @returns {Promise} @@ -119,7 +127,6 @@ async function getPageRecordMapByNotionAPI ({ pageId, from }) { if (!pageRecordMap) { return [] } - pageId = idToUuid(pageId) const collection = Object.values(pageRecordMap.collection)[0]?.value const collectionQuery = pageRecordMap.collection_query @@ -127,6 +134,7 @@ async function getPageRecordMapByNotionAPI ({ pageId, from }) { const schema = collection?.schema const rawMetadata = block[pageId].value const tagOptions = getTagOptions(schema) + const categoryOptions = getCategoryOptions(schema) // Check Type Page-Database和Inline-Database if ( @@ -143,6 +151,7 @@ async function getPageRecordMapByNotionAPI ({ pageId, from }) { block, schema, tagOptions, + categoryOptions, rawMetadata } } diff --git a/pages/_app.js b/pages/_app.js index 98c5abc1..e5b63150 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -27,7 +27,8 @@ const MyApp = ({ Component, pageProps }) => { {BLOG.ANALYTICS_GOOGLE_ID && } {JSON.parse(BLOG.ANALYTICS_BUSUANZI_ENABLE) && } {BLOG.ADSENSE_GOOGLE_ID && } - + {/* FontawesomeCDN */} + ) diff --git a/pages/category/index.js b/pages/category/index.js index f9739597..7361a706 100644 --- a/pages/category/index.js +++ b/pages/category/index.js @@ -8,7 +8,7 @@ export default function Category (props) { export async function getStaticProps () { const from = 'category-index-props' - const { allPosts, categories, tags, postCount, latestPosts, customNav } = await getGlobalNotionData({ from }) + const { allPosts, categories, tags, postCount, latestPosts, customNav } = await getGlobalNotionData({ from, categoryCount: 0 }) return { props: { diff --git a/pages/search.js b/pages/search.js index 57bc57fb..ef7cae89 100644 --- a/pages/search.js +++ b/pages/search.js @@ -1,5 +1,8 @@ import { getGlobalNotionData } from '@/lib/notion/getNotionData' import { LayoutSearch } from '@/themes' +import BLOG from '@/blog.config' +import { useGlobal } from '@/lib/global' +import { useRouter } from 'next/router' export async function getStaticProps () { const { @@ -24,7 +27,36 @@ export async function getStaticProps () { } const Search = (props) => { - return + const { posts } = props + let filteredPosts + const searchKey = getSearchKey() + // 静态过滤 + if (searchKey) { + filteredPosts = posts.filter(post => { + const tagContent = post.tags ? post.tags.join(' ') : '' + const categoryContent = post.category ? post.category.join(' ') : '' + const searchContent = post.title + post.summary + tagContent + categoryContent + return searchContent.toLowerCase().includes(searchKey.toLowerCase()) + }) + } else { + filteredPosts = posts + } + + const { locale } = useGlobal() + const meta = { + title: `${searchKey || ''} | ${locale.NAV.SEARCH} | ${BLOG.TITLE} `, + description: BLOG.DESCRIPTION, + type: 'website' + } + return +} + +function getSearchKey () { + const router = useRouter() + if (router.query && router.query.s) { + return router.query.s + } + return null } export default Search diff --git a/themes/Empty/LayoutSearch.js b/themes/Empty/LayoutSearch.js index c7469a60..fb9244c3 100644 --- a/themes/Empty/LayoutSearch.js +++ b/themes/Empty/LayoutSearch.js @@ -1,31 +1,6 @@ -import { useRouter } from 'next/router' import LayoutBase from './LayoutBase' export const LayoutSearch = (props) => { - const { posts } = props - let filteredPosts - const searchKey = getSearchKey() - if (searchKey) { - filteredPosts = posts.filter(post => { - const tagContent = post.tags ? post.tags.join(' ') : '' - const searchContent = post.title + post.summary + tagContent - return searchContent.toLowerCase().includes(searchKey.toLowerCase()) - }) - } else { - filteredPosts = posts - } - - console.log(filteredPosts) - return - Search {searchKey} } - -function getSearchKey () { - const router = useRouter() - if (router.query && router.query.s) { - return router.query.s - } - return null -} diff --git a/themes/Fukasawa/LayoutCategoryIndex.js b/themes/Fukasawa/LayoutCategoryIndex.js index 0941d901..f7c8196e 100644 --- a/themes/Fukasawa/LayoutCategoryIndex.js +++ b/themes/Fukasawa/LayoutCategoryIndex.js @@ -17,11 +17,11 @@ export const LayoutCategoryIndex = (props) => { {locale.COMMON.CATEGORY}:
- {Object.keys(categories).map(category => { - return + {categories && categories.map(category => { + return
- {category}({categories[category]}) + {category.name}({category.count})
})} diff --git a/themes/Fukasawa/LayoutIndex.js b/themes/Fukasawa/LayoutIndex.js index 5a1209c5..0158a856 100644 --- a/themes/Fukasawa/LayoutIndex.js +++ b/themes/Fukasawa/LayoutIndex.js @@ -3,8 +3,6 @@ import LayoutBase from './LayoutBase' export const LayoutIndex = (props) => { return - - - + } diff --git a/themes/Fukasawa/LayoutSearch.js b/themes/Fukasawa/LayoutSearch.js index 1d77bf69..8112f850 100644 --- a/themes/Fukasawa/LayoutSearch.js +++ b/themes/Fukasawa/LayoutSearch.js @@ -1,30 +1,8 @@ -import { useRouter } from 'next/router' import LayoutBase from './LayoutBase' +import BlogListPage from './components/BlogListPage' export const LayoutSearch = (props) => { - let filteredPosts - const searchKey = getSearchKey() - if (searchKey) { - filteredPosts = props.posts.filter(post => { - const tagContent = post.tags ? post.tags.join(' ') : '' - const searchContent = post.title + post.summary + tagContent - return searchContent.toLowerCase().includes(searchKey.toLowerCase()) - }) - } else { - filteredPosts = props.posts - } - - console.log(filteredPosts) - return - Search {searchKey} + } - -function getSearchKey () { - const router = useRouter() - if (router.query && router.query.s) { - return router.query.s - } - return null -} diff --git a/themes/Fukasawa/components/AsideLeft.js b/themes/Fukasawa/components/AsideLeft.js index 2b46e616..a596ae27 100644 --- a/themes/Fukasawa/components/AsideLeft.js +++ b/themes/Fukasawa/components/AsideLeft.js @@ -9,8 +9,6 @@ import Catalog from './Catalog' function AsideLeft (props) { const { tags, currentTag, categories, currentCategory, post } = props - console.log(post) - return
diff --git a/themes/Fukasawa/components/BlogListPage.js b/themes/Fukasawa/components/BlogListPage.js index 4c6fc823..afc7f6f7 100644 --- a/themes/Fukasawa/components/BlogListPage.js +++ b/themes/Fukasawa/components/BlogListPage.js @@ -14,7 +14,7 @@ import PaginationSimple from './PaginationSimple' */ const BlogListPage = ({ page = 1, posts = [], postCount }) => { const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) - const showNext = page < totalPage && posts.length < postCount + const showNext = page < totalPage && posts.length <= BLOG.POSTS_PER_PAGE && posts.length < postCount const [colCount, changeCol] = useState(3) function updateCol () { diff --git a/themes/Fukasawa/components/GroupCategory.js b/themes/Fukasawa/components/GroupCategory.js index 3dd437d8..fabc2e57 100644 --- a/themes/Fukasawa/components/GroupCategory.js +++ b/themes/Fukasawa/components/GroupCategory.js @@ -8,14 +8,14 @@ function GroupCategory ({ currentCategory, categories }) { return <>
- {Object.keys(categories).map(category => { - const selected = currentCategory === category - return + {categories.map(category => { + const selected = currentCategory === category.name + return - {category}({categories[category]}) + {category.name}({category.count}) })} diff --git a/themes/Hexo/LayoutCategoryIndex.js b/themes/Hexo/LayoutCategoryIndex.js index 6585e290..1eadfc7d 100644 --- a/themes/Hexo/LayoutCategoryIndex.js +++ b/themes/Hexo/LayoutCategoryIndex.js @@ -20,16 +20,16 @@ export const LayoutCategoryIndex = props => { {locale.COMMON.CATEGORY}:
- {Object.keys(categories).map(category => { + {categories.map(category => { return ( - +
- {category}({categories[category]}) + {category.name}({category.count})
) diff --git a/themes/Hexo/LayoutSearch.js b/themes/Hexo/LayoutSearch.js index 77be5014..3b26ad57 100644 --- a/themes/Hexo/LayoutSearch.js +++ b/themes/Hexo/LayoutSearch.js @@ -1,38 +1,9 @@ -import BLOG from '@/blog.config' -import { useGlobal } from '@/lib/global' -import { useRouter } from 'next/router' + import BlogPostListPage from './components/BlogPostListPage' import LayoutBase from './LayoutBase' export const LayoutSearch = (props) => { - const { posts } = props - let filteredPosts - const searchKey = getSearchKey() - if (searchKey) { - filteredPosts = posts.filter(post => { - const tagContent = post.tags ? post.tags.join(' ') : '' - const searchContent = post.title + post.summary + tagContent - return searchContent.toLowerCase().includes(searchKey.toLowerCase()) - }) - } else { - filteredPosts = posts - } - - const { locale } = useGlobal() - const meta = { - title: `${searchKey || ''} | ${locale.NAV.SEARCH} | ${BLOG.TITLE} `, - description: BLOG.DESCRIPTION, - type: 'website' - } - return - + return + } - -function getSearchKey () { - const router = useRouter() - if (router.query && router.query.s) { - return router.query.s - } - return null -} diff --git a/themes/Hexo/components/CategoryGroup.js b/themes/Hexo/components/CategoryGroup.js index 69865b56..a14e15d9 100644 --- a/themes/Hexo/components/CategoryGroup.js +++ b/themes/Hexo/components/CategoryGroup.js @@ -7,14 +7,14 @@ const CategoryGroup = ({ currentCategory, categories }) => { } return <>
- {Object.keys(categories).map(category => { - const selected = currentCategory === category - return + {categories.map(category => { + const selected = currentCategory === category.name + return -
{category}({categories[category]})
+
{category.name}({category.count})
})} diff --git a/themes/Hexo/components/MenuButtonGroup.js b/themes/Hexo/components/MenuButtonGroup.js index ee93f4a7..a968b800 100644 --- a/themes/Hexo/components/MenuButtonGroup.js +++ b/themes/Hexo/components/MenuButtonGroup.js @@ -11,11 +11,11 @@ const MenuButtonGroup = (props) => { const archiveSlot =
{postCount}
let links = [ - { id: 0, icon: 'fas fa-home', name: locale.NAV.INDEX, to: '/' || '/', show: true }, - { id: 1, icon: 'fas fa-th', name: locale.COMMON.CATEGORY, to: '/category', show: CONFIG_HEXO.MENU_CATEGORY }, - { id: 2, icon: 'fas fa-tag', name: locale.COMMON.TAGS, to: '/tag', show: CONFIG_HEXO.MENU_TAG }, - { id: 3, icon: 'fas fa-archive', name: locale.NAV.ARCHIVE, to: '/archive', slot: archiveSlot, show: CONFIG_HEXO.MENU_ARCHIVE }, - { id: 4, icon: 'fas fa-user', name: locale.NAV.ABOUT, to: '/about', show: CONFIG_HEXO.MENU_ABOUT } + { icon: 'fas fa-home', name: locale.NAV.INDEX, to: '/' || '/', show: true }, + { icon: 'fas fa-th', name: locale.COMMON.CATEGORY, to: '/category', show: CONFIG_HEXO.MENU_CATEGORY }, + { icon: 'fas fa-tag', name: locale.COMMON.TAGS, to: '/tag', show: CONFIG_HEXO.MENU_TAG }, + { icon: 'fas fa-archive', name: locale.NAV.ARCHIVE, to: '/archive', slot: archiveSlot, show: CONFIG_HEXO.MENU_ARCHIVE }, + { icon: 'fas fa-user', name: locale.NAV.ABOUT, to: '/about', show: CONFIG_HEXO.MENU_ABOUT } ] if (customNav) { links = links.concat(customNav) @@ -24,11 +24,11 @@ const MenuButtonGroup = (props) => { {links.map(link => { if (link.show) { const selected = (router.pathname === link.to) || (router.asPath === link.to) - return + return
- +
{link.name}
{link.slot} diff --git a/themes/Hexo/components/SearchInput.js b/themes/Hexo/components/SearchInput.js index 5ac91ad5..d6ba0884 100644 --- a/themes/Hexo/components/SearchInput.js +++ b/themes/Hexo/components/SearchInput.js @@ -44,10 +44,10 @@ const SearchInput = ({ currentTag, currentSearch, cRef }) => { updateSearchKey(e.target.value)} - defaultValue={searchKey} + defaultValue={currentSearch} />
{ collection: Collection }} /> -
+
- + {locale.COMMON.ARTICLE_DETAIL} @@ -58,7 +58,6 @@ const BlogPostCard = ({ post, showSummary }) => {
}

-
) diff --git a/themes/Medium/components/Catalog.js b/themes/Medium/components/Catalog.js index b1dc71ba..eb715e66 100644 --- a/themes/Medium/components/Catalog.js +++ b/themes/Medium/components/Catalog.js @@ -78,7 +78,7 @@ const Catalog = ({ toc }) => { ) })} - +
} diff --git a/themes/Medium/components/CategoryGroup.js b/themes/Medium/components/CategoryGroup.js index cf6a7d38..797e3afa 100644 --- a/themes/Medium/components/CategoryGroup.js +++ b/themes/Medium/components/CategoryGroup.js @@ -8,10 +8,9 @@ const CategoryGroup = ({ currentCategory, categories }) => { return
分类
- {Object.keys(categories).map(category => { - const selected = currentCategory === category - const categoryCount = +categories[category] - return + {categories.map(category => { + const selected = currentCategory === category.name + return })}
diff --git a/themes/Medium/components/CategoryItem.js b/themes/Medium/components/CategoryItem.js index 86aef898..bb8a1841 100644 --- a/themes/Medium/components/CategoryItem.js +++ b/themes/Medium/components/CategoryItem.js @@ -6,7 +6,7 @@ export default function CategoryItem ({ selected, category, categoryCount }) { ? 'hover:text-white dark:hover:text-white bg-green-600 text-white ' : 'dark:text-green-400 text-gray-500 hover:text-white dark:hover:text-white hover:bg-green-600') + ' flex text-sm items-center duration-300 cursor-pointer py-1 font-light px-2 whitespace-nowrap'}> -
{category} {categoryCount && (categoryCount)} +
{category} {categoryCount && `(${categoryCount})`}
diff --git a/themes/NEXT/LayoutCategoryIndex.js b/themes/NEXT/LayoutCategoryIndex.js index b4a5ef51..ac443a94 100644 --- a/themes/NEXT/LayoutCategoryIndex.js +++ b/themes/NEXT/LayoutCategoryIndex.js @@ -12,16 +12,16 @@ export const LayoutCategoryIndex = (props) => { type: 'website' } return -
+
{locale.COMMON.CATEGORY}:
- {Object.keys(categories).map(category => { - return + {categories.map(category => { + return
- {category}({categories[category]}) + {category.name}({category.count})
})} diff --git a/themes/NEXT/LayoutSearch.js b/themes/NEXT/LayoutSearch.js index 21f34de0..34a48e47 100644 --- a/themes/NEXT/LayoutSearch.js +++ b/themes/NEXT/LayoutSearch.js @@ -2,52 +2,22 @@ import LayoutBase from './LayoutBase' import StickyBar from './components/StickyBar' import BlogPostListScroll from './components/BlogPostListScroll' import { useGlobal } from '@/lib/global' -import BLOG from '@/blog.config' -import { useRouter } from 'next/router' export const LayoutSearch = (props) => { - const { posts, tags } = props - let filteredPosts - const searchKey = getSearchKey() - if (searchKey) { - filteredPosts = posts.filter(post => { - const tagContent = post.tags ? post.tags.join(' ') : '' - const searchContent = post.title + post.summary + tagContent - return searchContent.toLowerCase().includes(searchKey.toLowerCase()) - }) - } else { - filteredPosts = posts - } - const { locale } = useGlobal() - const meta = { - title: `${searchKey || ''} | ${locale.NAV.SEARCH} | ${BLOG.TITLE} `, - description: BLOG.DESCRIPTION, - type: 'website' - } + const { posts } = props + return ( - +
{' '} - {filteredPosts.length} {locale.COMMON.RESULT_OF_SEARCH} + {posts?.length} {locale.COMMON.RESULT_OF_SEARCH}
- +
) } - -function getSearchKey () { - const router = useRouter() - if (router.query && router.query.s) { - return router.query.s - } - return null -} diff --git a/themes/NEXT/LayoutTagIndex.js b/themes/NEXT/LayoutTagIndex.js index 8ddd5bc4..b452874a 100644 --- a/themes/NEXT/LayoutTagIndex.js +++ b/themes/NEXT/LayoutTagIndex.js @@ -12,7 +12,7 @@ export const LayoutTagIndex = (props) => { type: 'website' } return -
+
{locale.COMMON.TAGS}:
{ tags.map(tag => { diff --git a/themes/NEXT/components/BlogPostCard.js b/themes/NEXT/components/BlogPostCard.js index 8fb3ce7e..d2f2c9be 100644 --- a/themes/NEXT/components/BlogPostCard.js +++ b/themes/NEXT/components/BlogPostCard.js @@ -59,9 +59,9 @@ const BlogPostCard = ({ post, showSummary }) => { />
} -
+
- + {locale.COMMON.ARTICLE_DETAIL} diff --git a/themes/NEXT/components/CategoryGroup.js b/themes/NEXT/components/CategoryGroup.js index a0c8eed0..1c22d04e 100644 --- a/themes/NEXT/components/CategoryGroup.js +++ b/themes/NEXT/components/CategoryGroup.js @@ -2,16 +2,17 @@ import Link from 'next/link' import React from 'react' const CategoryGroup = ({ currentCategory, categories }) => { + if (!categories) return <> return <>
- {Object.keys(categories).map(category => { - const selected = currentCategory === category - return + {categories.map(category => { + const selected = currentCategory === category.name + return - {category}({categories[category]}) + {category.name}({category.count}) })} diff --git a/themes/NEXT/components/CategoryList.js b/themes/NEXT/components/CategoryList.js index d7447424..5390a769 100644 --- a/themes/NEXT/components/CategoryList.js +++ b/themes/NEXT/components/CategoryList.js @@ -10,10 +10,10 @@ const CategoryList = ({ currentCategory, categories }) => { return
  • {locale.COMMON.CATEGORY}
  • - {Object.keys(categories).map(category => { - const selected = category === currentCategory + {categories.map(category => { + const selected = category.name === currentCategory return ( - +
  • { > - {`${category} `} + {`${category.name} (${category.count})`}
  • ) diff --git a/themes/NEXT/components/SearchInput.js b/themes/NEXT/components/SearchInput.js index 2c18732f..48399f85 100644 --- a/themes/NEXT/components/SearchInput.js +++ b/themes/NEXT/components/SearchInput.js @@ -47,7 +47,7 @@ const SearchInput = ({ currentTag, currentSearch, cRef }) => { ref={searchInputRef} type='text' placeholder={currentTag ? `${locale.SEARCH.TAGS} #${currentTag}` : `${locale.SEARCH.ARTICLES}`} - className={'w-full text-sm pl-2 transition focus:shadow-lg font-light leading-10 border-gray-300 text-black bg-gray-100 dark:bg-gray-900 dark:text-white'} + className={'w-full text-sm pl-4 transition focus:shadow-lg font-light leading-10 border-gray-300 text-black bg-gray-100 dark:bg-gray-900 dark:text-white'} onKeyUp={handleKeyUp} onChange={e => updateSearchKey(e.target.value)} defaultValue={searchKey} diff --git a/themes/NEXT/components/SideAreaRight.js b/themes/NEXT/components/SideAreaRight.js index daaa62c2..b4f03826 100644 --- a/themes/NEXT/components/SideAreaRight.js +++ b/themes/NEXT/components/SideAreaRight.js @@ -5,6 +5,7 @@ import Card from './Card' import CategoryGroup from './CategoryGroup' import TagGroups from './TagGroups' import CONFIG_NEXT from '../config_next' +import { useRouter } from 'next/router' /** * 侧边平铺 @@ -16,18 +17,13 @@ import CONFIG_NEXT from '../config_next' * @returns {JSX.Element} * @constructor */ -const SideAreaRight = ({ - tags, - currentTag, - slot, - categories, - currentCategory -}) => { +const SideAreaRight = (props) => { + const { tags, currentTag, slot, categories, currentCategory } = props const { locale } = useGlobal() if (!CONFIG_NEXT.RIGHT_BAR) { return <> } - + const router = useRouter() return (