Compare commits
	
		
			5 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 353881dead | |||
| 6238d1e8b7 | |||
| 47a9829d9b | |||
| 04d28f880f | |||
| 6b96a85554 | 
					 7 changed files with 864 additions and 729 deletions
				
			
		| 
						 | 
					@ -90,6 +90,6 @@ export function RemoveDemoTable()
 | 
				
			||||||
					)
 | 
										)
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}))} />
 | 
							}))} disableFilter={true} disableSort={true} />
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
import "@kernelui/core/lib/style.css";
 | 
					import "@kernelui/core/lib/index.css";
 | 
				
			||||||
import "../src/styles/smartable.less";
 | 
					import "../src/styles/smartable.less";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import React from "react";
 | 
					import React from "react";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								package.json
									
										
									
									
									
								
							| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"version": "1.0.6",
 | 
						"version": "1.1.2",
 | 
				
			||||||
	"name": "@kernelui/smartable",
 | 
						"name": "@kernelui/smartable",
 | 
				
			||||||
	"description": "Kernel UI Smartable.",
 | 
						"description": "Kernel UI Smartable.",
 | 
				
			||||||
	"scripts": {
 | 
						"scripts": {
 | 
				
			||||||
| 
						 | 
					@ -17,22 +17,22 @@
 | 
				
			||||||
		"@kernelui:registry": "https://code.zeptotech.net/api/packages/UIKernel/npm/"
 | 
							"@kernelui:registry": "https://code.zeptotech.net/api/packages/UIKernel/npm/"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"devDependencies": {
 | 
						"devDependencies": {
 | 
				
			||||||
		"@kernelui/core": "^1.5.0",
 | 
							"@kernelui/core": "^1.8.2",
 | 
				
			||||||
		"@phosphor-icons/react": "^2.1.7",
 | 
							"@phosphor-icons/react": "^2.1.7",
 | 
				
			||||||
		"@types/node": "^22.0.0",
 | 
							"@types/node": "^22.0.0",
 | 
				
			||||||
		"@types/react": "^18.3.3",
 | 
							"@types/react": "^18.3.12",
 | 
				
			||||||
		"@types/react-dom": "^18.3.0",
 | 
							"@types/react-dom": "^18.3.1",
 | 
				
			||||||
		"@vitejs/plugin-react": "^4.3.0",
 | 
							"@vitejs/plugin-react": "^4.3.4",
 | 
				
			||||||
		"less": "^4.2.0",
 | 
							"less": "^4.2.0",
 | 
				
			||||||
		"react": "^18.3.1",
 | 
							"react": "^18.3.1",
 | 
				
			||||||
		"react-dom": "^18.3.1",
 | 
							"react-dom": "^18.3.1",
 | 
				
			||||||
		"react-router-dom": "^6.26.2",
 | 
							"react-router-dom": "^7.0.1",
 | 
				
			||||||
		"typescript": "^5.4.5",
 | 
							"typescript": "^5.4.5",
 | 
				
			||||||
		"vite": "^5.2.11",
 | 
							"vite": "^6.0.1",
 | 
				
			||||||
		"vite-plugin-dts": "^3.9.1"
 | 
							"vite-plugin-dts": "^4.3.0"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"peerDependencies": {
 | 
						"peerDependencies": {
 | 
				
			||||||
		"@kernelui/core": "^1.1.2"
 | 
							"@kernelui/core": "^1.8.2"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"packageManager": "yarn@4.5.0"
 | 
						"packageManager": "yarn@4.5.0"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ import {RowInstance, RowLoader} from "./Row";
 | 
				
			||||||
import {useAsyncManager} from "./AsyncManager";
 | 
					import {useAsyncManager} from "./AsyncManager";
 | 
				
			||||||
import {ColumnHeading} from "./Columns/ColumnHeading";
 | 
					import {ColumnHeading} from "./Columns/ColumnHeading";
 | 
				
			||||||
import {sortRows} from "./Sort";
 | 
					import {sortRows} from "./Sort";
 | 
				
			||||||
import {AutoPaginate} from "@kernelui/core";
 | 
					import {AutoPaginate, classes} from "@kernelui/core";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Smartable instance component properties.
 | 
					 * Smartable instance component properties.
 | 
				
			||||||
| 
						 | 
					@ -66,10 +66,10 @@ export function PaginatedInstance<CK extends ColumnKey>(props: InstancePropertie
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Base component for a Smartable table.
 | 
					 * Base component for a Smartable table.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function Table<CK extends ColumnKey>({columns, children}: React.PropsWithChildren<InstanceProperties<CK>>)
 | 
					export function Table<CK extends ColumnKey>({className, columns, children}: React.PropsWithChildren<InstanceProperties<CK>>)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (
 | 
						return (
 | 
				
			||||||
		<table className={"smartable"}>
 | 
							<table className={classes("smartable", className)}>
 | 
				
			||||||
			<thead>
 | 
								<thead>
 | 
				
			||||||
			<ColumnsHeadings columns={columns} />
 | 
								<ColumnsHeadings columns={columns} />
 | 
				
			||||||
			</thead>
 | 
								</thead>
 | 
				
			||||||
| 
						 | 
					@ -85,9 +85,12 @@ export function Table<CK extends ColumnKey>({columns, children}: React.PropsWith
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function ColumnsHeadings<CK extends ColumnKey>({columns}: {columns: Columns<CK>})
 | 
					export function ColumnsHeadings<CK extends ColumnKey>({columns}: {columns: Columns<CK>})
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						// Get feature disable options.
 | 
				
			||||||
 | 
						const {disableSort, disableFilter} = useTable<CK>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return (
 | 
						return (
 | 
				
			||||||
		<>
 | 
							<>
 | 
				
			||||||
			<tr className={"headings"}>
 | 
								<tr className={classes("headings", disableSort === true ? "disable-sort" : undefined)}>
 | 
				
			||||||
				{ // Showing title of each column.
 | 
									{ // Showing title of each column.
 | 
				
			||||||
					Object.keys(columns).map((key) => (
 | 
										Object.keys(columns).map((key) => (
 | 
				
			||||||
						<AutoColumnContextProvider key={key} columnKey={key}>
 | 
											<AutoColumnContextProvider key={key} columnKey={key}>
 | 
				
			||||||
| 
						 | 
					@ -96,6 +99,8 @@ export function ColumnsHeadings<CK extends ColumnKey>({columns}: {columns: Colum
 | 
				
			||||||
					))
 | 
										))
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			</tr>
 | 
								</tr>
 | 
				
			||||||
 | 
								{ // Add filters if filter feature is not disabled.
 | 
				
			||||||
 | 
									disableFilter !== true && (
 | 
				
			||||||
					<tr className={"filters"}>
 | 
										<tr className={"filters"}>
 | 
				
			||||||
						{ // Add columns filters, if there are some.
 | 
											{ // Add columns filters, if there are some.
 | 
				
			||||||
							(Object.entries(columns) as [CK, Column][]).map(([columnKey, column]) => (
 | 
												(Object.entries(columns) as [CK, Column][]).map(([columnKey, column]) => (
 | 
				
			||||||
| 
						 | 
					@ -107,6 +112,8 @@ export function ColumnsHeadings<CK extends ColumnKey>({columns}: {columns: Colum
 | 
				
			||||||
							))
 | 
												))
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					</tr>
 | 
										</tr>
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		</>
 | 
							</>
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,11 @@ export type SmartableData<CK extends ColumnKey> = Promisable<(Promisable<RowDefi
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export interface SmartableProperties<CK extends ColumnKey>
 | 
					export interface SmartableProperties<CK extends ColumnKey>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Table custom class name.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						className?: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Table data.
 | 
						 * Table data.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
| 
						 | 
					@ -44,6 +49,16 @@ export interface SmartableProperties<CK extends ColumnKey>
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		pageSize: number;
 | 
							pageSize: number;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Disable sort feature.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						disableSort?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Disable filter feature.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						disableFilter?: boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,12 @@
 | 
				
			||||||
tr.headings
 | 
					tr.headings
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						&.disable-sort
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							th { pointer-events: none; }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						&:not(.disable-sort)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		th
 | 
							th
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			position: relative;
 | 
								position: relative;
 | 
				
			||||||
| 
						 | 
					@ -78,4 +85,5 @@ tr.headings
 | 
				
			||||||
				float: right;
 | 
									float: right;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue