@@ -27,10 +27,13 @@ import { Input } from "@/components/ui/input";
2727import type { Knowledge } from "@/api" ;
2828import { t } from "i18next" ;
2929import { DataTablePagination } from "./Pagination" ;
30+ import { Button } from "@/components/ui/button" ;
31+ import { Upload } from "lucide-react" ;
3032
3133interface DataTableProps {
3234 columns : ColumnDef < Knowledge > [ ] ;
3335 data : Knowledge [ ] ;
36+ setUploadDialogOpen : ( open : boolean ) => void ;
3437}
3538
3639const globalFilterFn : FilterFn < Knowledge > = ( row , _columnId , filterValue ) => {
@@ -58,7 +61,11 @@ const globalFilterFn: FilterFn<Knowledge> = (row, _columnId, filterValue) => {
5861 return visibleMatch || tagMatch || permissionMatch ;
5962} ;
6063
61- export default function DataTable ( { columns, data } : Readonly < DataTableProps > ) {
64+ export default function DataTable ( {
65+ columns,
66+ data,
67+ setUploadDialogOpen,
68+ } : Readonly < DataTableProps > ) {
6269 const [ sorting , setSorting ] = useState < SortingState > ( [
6370 { id : "label" , desc : false } ,
6471 ] ) ;
@@ -86,79 +93,84 @@ export default function DataTable({ columns, data }: Readonly<DataTableProps>) {
8693 } ) ;
8794
8895 return (
89- < >
90- < div >
91- { /*Search Bar*/ }
92- < div className = "flex items-center py-4" >
93- < Input
94- placeholder = { t ( "knowledgePage.table.inputPlaceholder" ) }
95- value = { globalFilter }
96- onChange = { ( event ) => {
97- setGlobalFilter ( event . target . value ) ;
98- } }
99- className = "max-w-sm"
100- />
101- </ div >
96+ < div >
97+ { /*Search Bar*/ }
98+ < div className = "flex items-center justify-between py-4" >
99+ < Input
100+ placeholder = { t ( "knowledgePage.table.inputPlaceholder" ) }
101+ value = { globalFilter }
102+ onChange = { ( event ) => {
103+ setGlobalFilter ( event . target . value ) ;
104+ } }
105+ className = "max-w-sm"
106+ />
107+ < Button
108+ onClick = { ( ) => {
109+ setUploadDialogOpen ( true ) ;
110+ } }
111+ >
112+ < Upload />
113+ { t ( "knowledgePage.table.uploadButton" ) }
114+ </ Button >
115+ </ div >
102116
103- < div className = "rounded-md border" >
104- < Table >
105- < TableHeader >
106- { table . getHeaderGroups ( ) . map ( ( headerGroup ) => (
107- < TableRow key = { headerGroup . id } >
108- { headerGroup . headers . map ( ( header ) => (
109- < TableHead key = { header . id } >
110- { header . isPlaceholder
111- ? null
112- : flexRender (
113- header . column . columnDef . header ,
114- header . getContext ( ) ,
115- ) }
116- </ TableHead >
117- ) ) }
118- </ TableRow >
119- ) ) }
120- </ TableHeader >
121- < TableBody >
122- { table . getRowModel ( ) . rows . length ? (
123- table . getRowModel ( ) . rows . map ( ( row ) => (
124- < React . Fragment key = { row . id } >
125- < TableRow >
126- { row . getVisibleCells ( ) . map ( ( cell ) => (
127- < TableCell key = { cell . id } >
128- { flexRender (
129- cell . column . columnDef . cell ,
130- cell . getContext ( ) ,
131- ) }
132- </ TableCell >
133- ) ) }
117+ < div className = "rounded-md border" >
118+ < Table >
119+ < TableHeader >
120+ { table . getHeaderGroups ( ) . map ( ( headerGroup ) => (
121+ < TableRow key = { headerGroup . id } >
122+ { headerGroup . headers . map ( ( header ) => (
123+ < TableHead key = { header . id } >
124+ { header . isPlaceholder
125+ ? null
126+ : flexRender (
127+ header . column . columnDef . header ,
128+ header . getContext ( ) ,
129+ ) }
130+ </ TableHead >
131+ ) ) }
132+ </ TableRow >
133+ ) ) }
134+ </ TableHeader >
135+ < TableBody >
136+ { table . getRowModel ( ) . rows . length ? (
137+ table . getRowModel ( ) . rows . map ( ( row ) => (
138+ < React . Fragment key = { row . id } >
139+ < TableRow >
140+ { row . getVisibleCells ( ) . map ( ( cell ) => (
141+ < TableCell key = { cell . id } >
142+ { flexRender (
143+ cell . column . columnDef . cell ,
144+ cell . getContext ( ) ,
145+ ) }
146+ </ TableCell >
147+ ) ) }
148+ </ TableRow >
149+ { row . getIsExpanded ( ) && (
150+ < TableRow className = "bg-secondary hover:bg-secondary" >
151+ < TableCell colSpan = { columns . length } >
152+ < TableAccordion knowledge = { row . original } />
153+ </ TableCell >
134154 </ TableRow >
135- { row . getIsExpanded ( ) && (
136- < TableRow className = "bg-secondary hover:bg-secondary" >
137- < TableCell colSpan = { columns . length } >
138- < TableAccordion knowledge = { row . original } />
139- </ TableCell >
140- </ TableRow >
141- ) }
142- </ React . Fragment >
143- ) )
144- ) : (
145- < TableRow >
146- < TableCell
147- colSpan = { columns . length }
148- className = "h-24 text-center"
149- >
150- { t ( "knowledgePage.table.noData" ) }
151- </ TableCell >
152- </ TableRow >
153- ) }
154- </ TableBody >
155- </ Table >
156- </ div >
155+ ) }
156+ </ React . Fragment >
157+ ) )
158+ ) : (
159+ < TableRow >
160+ < TableCell
161+ colSpan = { columns . length }
162+ className = "h-24 text-center"
163+ >
164+ { t ( "knowledgePage.table.noData" ) }
165+ </ TableCell >
166+ </ TableRow >
167+ ) }
168+ </ TableBody >
169+ </ Table >
157170 </ div >
158-
159171 < div className = "pt-2" >
160172 < DataTablePagination < Knowledge > table = { table } />
161173 </ div >
162- </ >
174+ </ div >
163175 ) ;
164176}
0 commit comments