nitro-web 0.0.133 → 0.0.135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/index.ts CHANGED
@@ -34,7 +34,7 @@ export { Modal } from '../components/partials/element/modal'
34
34
  export { Sidebar, type SidebarProps } from '../components/partials/element/sidebar'
35
35
  export { Tooltip } from '../components/partials/element/tooltip'
36
36
  export { Topbar } from '../components/partials/element/topbar'
37
- export { Table, type TableColumn, type TableProps, type TableRow } from '../components/partials/element/table'
37
+ export { Table, type TableColumn, type TableProps, type TableRow, type TableRowType } from '../components/partials/element/table'
38
38
 
39
39
  // Component Form Elements
40
40
  export { Checkbox } from '../components/partials/form/checkbox'
@@ -2,6 +2,8 @@ import { JSX, useState, useCallback, Fragment } from 'react'
2
2
  import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'
3
3
  import { Checkbox, queryObject, queryString, twMerge } from 'nitro-web'
4
4
 
5
+ export type TableRowType = 'row' | 'loading' | 'empty' | 'thead'
6
+
5
7
  export interface TableColumn {
6
8
  label: string
7
9
  value: string
@@ -20,7 +22,6 @@ export interface TableColumn {
20
22
  export type TableRow = {
21
23
  _id?: string
22
24
  }
23
-
24
25
  export type TableProps<T> = {
25
26
  columns: TableColumn[]
26
27
  rows: T[]
@@ -30,7 +31,7 @@ export type TableProps<T> = {
30
31
  rowHeightMin?: number
31
32
  rowContentHeightMax?: number
32
33
  rowLinesMax?: number
33
- rowSideColor?: (row?: T) => { className: string, width: number }
34
+ rowSideColor?: (row: T|undefined, type: TableRowType) => { className: string, width: number }
34
35
  rowGap?: number
35
36
  rowOnClick?: (row: T) => void
36
37
  columnGap?: number
@@ -123,6 +124,14 @@ export function Table<T extends TableRow>({
123
124
  navigate(location.pathname + queryStr, { replace: true })
124
125
  }, [location.pathname, query, sort, sortBy])
125
126
 
127
+ const getColumnPadding = useCallback((j: number, row: T|undefined, type: TableRowType) => {
128
+ const sideColor = j == 0 && rowSideColor ? rowSideColor(row, type) : undefined
129
+ const sideColorPadding = sideColor /*&& rows.length > 0*/ ? sideColor.width + 5 : 0
130
+ const pl = sideColorPadding + (j == 0 ? columnPaddingX : columnGap)
131
+ const pr = j == columns.length - 1 ? columnPaddingX : columnGap
132
+ return { pl, pr, sideColor }
133
+ }, [rowSideColor, columnPaddingX, columnGap])
134
+
126
135
  return (
127
136
  <div
128
137
  style={{ marginTop: -rowGap }}
@@ -137,10 +146,7 @@ export function Table<T extends TableRow>({
137
146
  {
138
147
  columns.map((col, j) => {
139
148
  const disableSort = col.disableSort || selectedRowIds.length
140
- const sideColor = j == 0 && rowSideColor ? rowSideColor(undefined) : undefined
141
- const sideColorPadding = sideColor && rows.length > 0 ? sideColor.width + 5 : 0
142
- const pl = sideColorPadding + (j == 0 ? columnPaddingX : columnGap)
143
- const pr = j == columns.length - 1 ? columnPaddingX : columnGap
149
+ const { pl, pr } = getColumnPadding(j, undefined, 'thead')
144
150
 
145
151
  if (col.isHidden) return <Fragment key={j} />
146
152
  return (
@@ -208,7 +214,7 @@ export function Table<T extends TableRow>({
208
214
  </div>
209
215
  {/* Tbody rows */}
210
216
  {
211
- rows.map((row: T, i: number) => {
217
+ !isLoading && rows.map((row: T, i: number) => {
212
218
  const isSelected = selectedRowIds.includes(row?._id||'')
213
219
  return (
214
220
  <div
@@ -221,10 +227,7 @@ export function Table<T extends TableRow>({
221
227
  >
222
228
  {
223
229
  columns.map((col, j) => {
224
- const sideColor = j == 0 && rowSideColor ? rowSideColor(row) : undefined
225
- const pl = j == 0 ? columnPaddingX : columnGap
226
- const pr = j == columns.length - 1 ? columnPaddingX : columnGap
227
-
230
+ const { pl, pr, sideColor } = getColumnPadding(j, row, 'row')
228
231
  if (col.isHidden) return <Fragment key={j} />
229
232
  return (
230
233
  <div
@@ -239,10 +242,8 @@ export function Table<T extends TableRow>({
239
242
  )}
240
243
  >
241
244
  <div
242
- style={{
243
- maxHeight: rowContentHeightMax,
244
- paddingLeft: sideColor ? sideColor.width + 5 : 0,
245
- }}
245
+ // pl:sideColorPadding was originally here
246
+ style={{ maxHeight: rowContentHeightMax }}
246
247
  className={twMerge(
247
248
  rowContentHeightMax ? 'overflow-hidden' : '',
248
249
  getLineClampClassName(col.rowLinesMax),
@@ -282,22 +283,27 @@ export function Table<T extends TableRow>({
282
283
  })
283
284
  }
284
285
  {
285
- rows.length == 0 &&
286
+ (isLoading || rows.length == 0) &&
286
287
  <div className='table-row relative'>
287
288
  {
288
289
  columns.map((col, j) => {
289
- const pl = j == 0 ? columnPaddingX : columnGap
290
- const pr = j == columns.length - 1 ? columnPaddingX : columnGap
290
+ const { pl, pr, sideColor } = getColumnPadding(j, undefined, isLoading ? 'loading' : 'empty')
291
291
  return (
292
292
  <div
293
293
  key={j}
294
294
  style={{ height: rowHeightMin, paddingLeft: pl, paddingRight: pr }}
295
295
  className={twMerge(_columnClassName, columnClassName, col.className)}
296
296
  >
297
+ {
298
+ sideColor &&
299
+ <div
300
+ className={`absolute top-0 left-0 h-full ${sideColor?.className||''}`}
301
+ style={{ width: sideColor.width }}
302
+ />
303
+ }
297
304
  <div
298
305
  className={twMerge(
299
- 'absolute top-0 h-full flex items-center justify-center text-sm',
300
- isLoading ? '' : 'text-gray-500',
306
+ 'absolute top-0 h-full flex items-center justify-center text-sm text-gray-500',
301
307
  col.innerClassName
302
308
  )}
303
309
  >
@@ -322,4 +328,4 @@ function getLineClampClassName(num?: number) {
322
328
  else if (num == 4) return 'line-clamp-4'
323
329
  else if (num == 5) return 'line-clamp-5'
324
330
  else if (num == 6) return 'line-clamp-6'
325
- }
331
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nitro-web",
3
- "version": "0.0.133",
3
+ "version": "0.0.135",
4
4
  "repository": "github:boycce/nitro-web",
5
5
  "homepage": "https://boycce.github.io/nitro-web/",
6
6
  "description": "Nitro is a battle-tested, modular base project to turbocharge your projects, styled using Tailwind 🚀",