feat: search

This commit is contained in:
Joel 2025-07-02 14:56:57 +08:00
parent d6fe22b19e
commit 0337b857ff
2 changed files with 78 additions and 2 deletions

View File

@ -1,12 +1,48 @@
'use client'
import Sort from '@/app/components/base/sort'
import Header from './components/header'
// TODO: Filter
import List from './components/list'
import useLegacyList from './use-legacy-list'
import Chip from '@/app/components/base/chip'
import { RiFile3Line } from '@remixicon/react'
const Page = () => {
const {
sort_by,
setOrderBy,
published,
setPublished,
clearPublished,
} = useLegacyList()
return (
<div>
<div className='h-full rounded-t-2xl border-t border-effects-highlight bg-background-default-subtle px-6 pt-4'>
<Header appNum={5} publishedNum={3}/>
{/* Filter */}
<div className='mb-2 mt-4 flex flex-row flex-wrap items-center gap-2'>
<Chip
className='min-w-[150px]'
panelClassName='w-[270px]'
leftIcon={<RiFile3Line className='h-4 w-4 text-text-secondary' />}
value={published}
onSelect={setPublished}
onClear={clearPublished}
items={[
{ value: 1, name: 'Yes' },
{ value: 0, name: 'No' },
]}
/>
<div className='h-3.5 w-px bg-divider-regular'></div>
<Sort
// '-' means descending order
order={sort_by?.startsWith('-') ? '-' : ''}
value={sort_by?.replace('-', '') || 'created_at'}
items={[
{ value: 'created_at', name: 'Created At' },
{ value: 'last_request', name: 'Last request' },
]}
onSelect={setOrderBy}
/>
</div>
<div>
<List list={[]} />
</div>

View File

@ -0,0 +1,40 @@
import produce from 'immer'
import { useCallback, useState } from 'react'
const useLegacyList = () => {
const [queryParams, setQueryParams] = useState<Record<string, any>>({})
const {
sort_by,
published,
} = queryParams
const setOrderBy = useCallback((sortBy: string) => {
const nextValue = produce(queryParams, (draft) => {
draft.sort_by = sortBy
})
setQueryParams(nextValue)
}, [queryParams])
const setPublished = useCallback((value: number) => {
const nextValue = produce(queryParams, (draft) => {
draft.published = value
})
setQueryParams(nextValue)
}, [queryParams])
const clearPublished = useCallback(() => {
const nextValue = produce(queryParams, (draft) => {
draft.published = undefined
})
setQueryParams(nextValue)
}, [queryParams])
return {
sort_by,
setOrderBy,
published,
setPublished,
clearPublished,
}
}
export default useLegacyList