@nova-design-system/nova-react 3.20.0 → 3.21.1-beta.0
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/dist/cjs/generated/components.server.js +106 -2
- package/dist/cjs/grow.animation-24ad5cf8-LUp_ITEx.js +111 -0
- package/dist/cjs/{index-BObVnP12.js → index-CEKdYnmK.js} +1794 -463
- package/dist/cjs/index.js +12 -1
- package/dist/cjs/{nv-accordion-item.entry-BBAGkmLI.js → nv-accordion-item.entry-zvp8yDql.js} +1 -1
- package/dist/cjs/{nv-accordion.entry-CvvtdLIz.js → nv-accordion.entry-D6gckOF4.js} +1 -1
- package/dist/cjs/{nv-alert.entry-w5XeFsrC.js → nv-alert.entry-Df8-nQ-R.js} +1 -1
- package/dist/cjs/{nv-avatar.entry-BxUZg-8h.js → nv-avatar.entry-ZOnVWP9L.js} +1 -1
- package/dist/cjs/{nv-badge_2.entry-DdSIFlJf.js → nv-badge_2.entry-DgiVv_Yf.js} +2 -2
- package/dist/cjs/{nv-breadcrumb.entry-CmbqGw3C.js → nv-breadcrumb.entry-IqtE1JL0.js} +1 -1
- package/dist/cjs/{nv-breadcrumbs.entry-DFHxtPKv.js → nv-breadcrumbs.entry-Be6dz7zI.js} +1 -1
- package/dist/cjs/nv-button.entry-CmswF3Si.js +164 -0
- package/dist/cjs/{nv-buttongroup.entry-wn9zFd_M.js → nv-buttongroup.entry-Cfe6rFSs.js} +1 -1
- package/dist/cjs/{nv-calendar.entry-Dldsa6dz.js → nv-calendar.entry-q83sS_dN.js} +1 -1
- package/dist/cjs/{nv-col.entry-DnG79KM1.js → nv-col.entry-Cu-Qi1bi.js} +1 -1
- package/dist/cjs/{nv-datagrid.entry-C2ML-e47.js → nv-datagrid.entry-Cx7SvD5S.js} +3 -3
- package/dist/cjs/{nv-datagridcolumn.entry-DcMPUtQS.js → nv-datagridcolumn.entry-B_uXKFLg.js} +1 -1
- package/dist/cjs/{nv-dialog.entry-C0Vx7dQc.js → nv-dialog.entry-J6Xwi6z1.js} +54 -20
- package/dist/cjs/{nv-dialogfooter_2.entry-BGq8Jiib.js → nv-dialogfooter_2.entry-DOlhqDTh.js} +3 -3
- package/dist/cjs/{nv-fieldcheckbox.entry-CAPwYnSU.js → nv-fieldcheckbox.entry-C23dGGX7.js} +5 -5
- package/dist/cjs/{nv-fielddate.entry-Byt5cmQi.js → nv-fielddate.entry-xWi3GpLl.js} +15 -18
- package/dist/cjs/{nv-fielddaterange.entry-CCFeFP2q.js → nv-fielddaterange.entry-BwFtpw9X.js} +8 -10
- package/dist/cjs/{nv-fielddropdown.entry-BFp_2vBC.js → nv-fielddropdown.entry-mnl7mSaK.js} +15 -6
- package/dist/cjs/{nv-fielddropdownitem.entry-D_4KdBY1.js → nv-fielddropdownitem.entry-DjyFlVXw.js} +3 -3
- package/dist/cjs/{nv-fieldmultiselect.entry-BaUD7Dcr.js → nv-fieldmultiselect.entry-BtLTG7nM.js} +2 -2
- package/dist/cjs/{nv-fieldnumber.entry-DOmhBrDv.js → nv-fieldnumber.entry-C00Hg70B.js} +4 -4
- package/dist/cjs/{nv-fieldpassword.entry-hogiPC5z.js → nv-fieldpassword.entry-BLg8tCN0.js} +4 -4
- package/dist/cjs/{nv-fieldradio.entry-CKbyWpIK.js → nv-fieldradio.entry-2hb1Ur40.js} +4 -4
- package/dist/cjs/{nv-fieldselect.entry-tpURNUEP.js → nv-fieldselect.entry-D-eYQpAv.js} +6 -6
- package/dist/cjs/{nv-fieldslider.entry-v0d92XEY.js → nv-fieldslider.entry-BGle1RZR.js} +4 -4
- package/dist/cjs/{nv-fieldtext.entry-DNYrOAhj.js → nv-fieldtext.entry-Djg8cqOa.js} +4 -4
- package/dist/cjs/{nv-fieldtextarea.entry-cRsjPwwR.js → nv-fieldtextarea.entry-Z32-s901.js} +4 -4
- package/dist/cjs/{nv-fieldtime.entry-BpGBUfKr.js → nv-fieldtime.entry-CDFGdfFL.js} +4 -4
- package/dist/cjs/nv-icon.entry-BDq7DKRt.js +80 -0
- package/dist/cjs/{nv-iconbutton_2.entry-DOv1RrkS.js → nv-iconbutton_2.entry-DdgEkFLK.js} +8 -3
- package/dist/cjs/{nv-menu.entry-C2L8F-nG.js → nv-menu.entry-iob0Kve8.js} +2 -2
- package/dist/cjs/{nv-menuitem.entry-DuDZTlJ1.js → nv-menuitem.entry-C989Ui60.js} +2 -2
- package/dist/cjs/nv-notification-bullet.entry-J8OkAZtU.js +77 -0
- package/dist/cjs/{nv-notification.entry-DxAj-mc7.js → nv-notification.entry-BxvJMKxH.js} +2 -2
- package/dist/cjs/{nv-notificationcontainer.entry-CUnTicXF.js → nv-notificationcontainer.entry-CxGCIb96.js} +2 -2
- package/dist/cjs/{nv-popover.entry-DVwa4DvW.js → nv-popover.entry-1KsO_KQm.js} +14 -98
- package/dist/cjs/{nv-row.entry-iLk2UglX.js → nv-row.entry-PBLq_BzJ.js} +2 -2
- package/dist/cjs/nv-sidebar.entry-CjLbvLqw.js +177 -0
- package/dist/cjs/nv-sidebarcontent.entry-Cv76IH4W.js +22 -0
- package/dist/cjs/nv-sidebardivider.entry-DYPJ_k73.js +22 -0
- package/dist/cjs/nv-sidebarfooter.entry-mGcMBRmv.js +22 -0
- package/dist/cjs/nv-sidebargroup.entry-DtwFliHZ.js +23 -0
- package/dist/cjs/nv-sidebarheader.entry-BdOYIXCA.js +22 -0
- package/dist/cjs/nv-sidebarlogo.entry-Da0kGsfw.js +32 -0
- package/dist/cjs/nv-sidebarnavitem.entry-D5xLfpwn.js +297 -0
- package/dist/cjs/nv-sidebarnavsubitem.entry-CkeJfHH4.js +35 -0
- package/dist/cjs/{nv-split.entry-BrMHK6TS.js → nv-split.entry-y66NBf88.js} +2 -2
- package/dist/cjs/{nv-stack.entry-C8jLJ5Ki.js → nv-stack.entry-CXjpkpbW.js} +2 -2
- package/dist/cjs/{nv-table.entry-D6o4g9Vo.js → nv-table.entry-quaVnLru.js} +2 -2
- package/dist/cjs/nv-tableheader.entry-DTBE2XQO.js +75 -0
- package/dist/cjs/{nv-toggle.entry-9iwmu7qi.js → nv-toggle.entry-CxUwF0pb.js} +3 -3
- package/dist/cjs/nv-togglebutton.entry-w-WEAmE6.js +56 -0
- package/dist/cjs/{nv-togglebuttongroup.entry-DWCytOhV.js → nv-togglebuttongroup.entry-UbrE8y7a.js} +2 -2
- package/dist/cjs/{nv-tooltip.entry-BMxnZVYA.js → nv-tooltip.entry-Dq2bkV33.js} +2 -2
- package/dist/components/{NvDatatable.js → NvDatatable/NvDatatable.js} +88 -46
- package/dist/components/NvDatatable/index.js +3 -0
- package/dist/components/NvDatatable/types.js +1 -0
- package/dist/components/NvDatatable/utils.js +5 -0
- package/dist/generated/components.js +88 -0
- package/dist/generated/components.server.js +95 -2
- package/dist/providers/NotificationProvider.js +27 -0
- package/dist/types/components/NvDatatable/NvDatatable.d.ts +7 -0
- package/dist/types/components/NvDatatable/index.d.ts +3 -0
- package/dist/types/components/{NvDatatable.d.ts → NvDatatable/types.d.ts} +18 -8
- package/dist/types/components/NvDatatable/utils.d.ts +2 -0
- package/dist/types/generated/components.d.ts +37 -0
- package/dist/types/generated/components.server.d.ts +37 -0
- package/dist/types/providers/NotificationProvider.d.ts +1 -0
- package/package.json +1 -1
- package/dist/cjs/events.utils-fe1d907f-01N__3wY.js +0 -23
- package/dist/cjs/nv-button.entry-Dyks6_mF.js +0 -159
- package/dist/cjs/nv-icon.entry-BfmyacWA.js +0 -80
- package/dist/cjs/nv-togglebutton.entry-N7_CSvzS.js +0 -56
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-CEKdYnmK.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('react-dom');
|
|
6
|
+
|
|
7
|
+
const nvTogglebuttonCss = "nv-togglebutton{display:inline-flex;justify-content:center;align-items:center}nv-togglebutton:focus-visible,nv-togglebutton:has(:focus-visible){z-index:1}nv-togglebutton[size=xs]{padding:var(--button-xs-padding-y) var(--button-xs-padding-x);gap:var(--button-xs-gap);border-radius:var(--button-xs-border-radius);line-height:var(--button-xs-line-height);height:var(--button-xs-height);font-size:var(--button-xs-font-size);padding-top:calc(var(--togglegroup-xs-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-xs-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-xs-button-radius));border-width:0}nv-togglebutton[size=xs] nv-icon>svg{width:var(--spacing-3);height:var(--spacing-3);stroke-width:1.2px}nv-togglebutton[size=sm]{padding:var(--button-sm-padding-y) var(--button-sm-padding-x);gap:var(--button-sm-gap);border-radius:var(--button-sm-border-radius);line-height:var(--button-sm-line-height);height:var(--button-sm-height);font-size:var(--button-sm-font-size);padding-top:calc(var(--togglegroup-sm-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-sm-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-sm-button-radius));border-width:0}nv-togglebutton[size=sm] nv-icon>svg{width:var(--spacing-4);height:var(--spacing-4);stroke-width:1.5px}nv-togglebutton[size=md]{padding:var(--button-md-padding-y) var(--button-md-padding-x);gap:var(--button-md-gap);border-radius:var(--button-md-border-radius);line-height:var(--button-md-line-height);height:var(--button-md-height);font-size:var(--button-md-font-size);padding-top:calc(var(--togglegroup-md-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-md-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-md-button-radius));border-width:0}nv-togglebutton[size=md] nv-icon>svg{width:var(--spacing-5);height:var(--spacing-5);stroke-width:1.6px}nv-togglebutton[size=lg]{padding:var(--button-lg-padding-y) var(--button-lg-padding-x);gap:var(--button-lg-gap);border-radius:var(--button-lg-border-radius);line-height:var(--button-lg-line-height);height:var(--button-lg-height);font-size:var(--button-lg-font-size);padding-top:calc(var(--togglegroup-lg-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-lg-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-lg-button-radius));border-width:0}nv-togglebutton[size=lg] nv-icon>svg{width:var(--spacing-6);height:var(--spacing-6);stroke-width:1.8px}nv-togglebutton[emphasis=high]{background:var(--components-button-low-background);border:1px solid var(--components-button-low-border);color:var(--components-button-low-text)}nv-togglebutton[emphasis=high]:hover{background:var(--components-button-low-background-hover);border:1px solid var(--components-button-low-border);color:var(--components-button-low-text-hover)}nv-togglebutton[emphasis=high]:active{background:var(--components-button-low-background-active);border:1px solid var(--components-button-low-border-active);color:var(--components-button-low-text-active)}nv-togglebutton[emphasis=high]:focus,nv-togglebutton[emphasis=high]:focus-within{outline:none}nv-togglebutton[emphasis=high]:focus-visible,nv-togglebutton[emphasis=high]:has(:focus-visible){outline:calc(var(--focus-outline-stroke) * 1) solid var(--color-focus-brand);outline-offset:calc(var(--focus-outline-offset) * 1)}nv-togglebutton[emphasis=high]:disabled:not([disabled=false]){opacity:0.5;cursor:not-allowed;box-shadow:none}nv-togglebutton[emphasis=high][active]:not([active=false]){background:var(--components-button-low-background-active);border:1px solid var(--components-button-low-border-active);color:var(--components-button-low-text-active)}nv-togglebutton[emphasis=low]{background:var(--components-button-lower-background);border:1px solid var(--components-button-lower-border);color:var(--components-button-lower-text)}nv-togglebutton[emphasis=low]:hover{background:var(--components-button-lower-background-hover);border:1px solid var(--components-button-lower-border);color:var(--components-button-lower-text-hover)}nv-togglebutton[emphasis=low]:active{background:var(--components-button-lower-background-active);border:1px solid var(--components-button-lower-border-active);color:var(--components-button-lower-text-active)}nv-togglebutton[emphasis=low]:focus,nv-togglebutton[emphasis=low]:focus-within{outline:none}nv-togglebutton[emphasis=low]:focus-visible,nv-togglebutton[emphasis=low]:has(:focus-visible){outline:calc(var(--focus-outline-stroke) * 1) solid var(--color-focus-brand);outline-offset:calc(var(--focus-outline-offset) * 1)}nv-togglebutton[emphasis=low]:disabled:not([disabled=false]){opacity:0.5;cursor:not-allowed;box-shadow:none}nv-togglebutton[emphasis=low][active]:not([active=false]),nv-togglebutton[emphasis=low]:active{background:var(--components-button-lower-background-hover);border:1px solid var(--components-button-lower-border);color:var(--components-button-lower-text-hover)}";
|
|
8
|
+
const NvTogglebuttonStyle0 = nvTogglebuttonCss;
|
|
9
|
+
|
|
10
|
+
const NvTogglebutton = class {
|
|
11
|
+
constructor(hostRef) {
|
|
12
|
+
index.registerInstance(this, hostRef);
|
|
13
|
+
this.toggled = index.createEvent(this, "toggled");
|
|
14
|
+
/****************************************************************************/
|
|
15
|
+
//#region PROPERTIES
|
|
16
|
+
/**
|
|
17
|
+
* Determines how large or small the togglebutton appears, allowing for
|
|
18
|
+
* customization of the togglebutton's dimensions to fit different design
|
|
19
|
+
* specifications and user needs.
|
|
20
|
+
*/
|
|
21
|
+
this.size = 'md';
|
|
22
|
+
/**
|
|
23
|
+
* Prevents all interaction, rendering the toggle in a non-interactive state.
|
|
24
|
+
*/
|
|
25
|
+
this.disabled = false;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the button is active or not. Will not toggle automatically but
|
|
28
|
+
* needs to be controlled externally.
|
|
29
|
+
*/
|
|
30
|
+
this.active = false;
|
|
31
|
+
/**
|
|
32
|
+
* Make it more or less visually prominent to users.
|
|
33
|
+
*/
|
|
34
|
+
this.emphasis = 'high';
|
|
35
|
+
//#endregion PROPERTIES
|
|
36
|
+
/****************************************************************************/
|
|
37
|
+
//#region METHODS
|
|
38
|
+
this.handleClick = () => {
|
|
39
|
+
if (this.disabled)
|
|
40
|
+
return;
|
|
41
|
+
this.toggled.emit({
|
|
42
|
+
value: this.value,
|
|
43
|
+
active: this.active,
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//#endregion EVENTS
|
|
48
|
+
/****************************************************************************/
|
|
49
|
+
//#region RENDER
|
|
50
|
+
render() {
|
|
51
|
+
return (index.h(index.Host, { key: '35199476bd724fe4a6b4dde51b7822bed5c374ff', role: "button", tabindex: "0", "aria-pressed": String(this.active), onClick: this.handleClick }, index.h("slot", { key: '864cf0f2550b66b0b34c4f779086d4b4847732e6' })));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
NvTogglebutton.style = NvTogglebuttonStyle0;
|
|
55
|
+
|
|
56
|
+
exports.nv_togglebutton = NvTogglebutton;
|
package/dist/cjs/{nv-togglebuttongroup.entry-DWCytOhV.js → nv-togglebuttongroup.entry-UbrE8y7a.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-CEKdYnmK.js');
|
|
4
4
|
require('react');
|
|
5
5
|
require('react-dom');
|
|
6
6
|
|
|
@@ -156,7 +156,7 @@ const NvTogglebuttongroup = class {
|
|
|
156
156
|
/****************************************************************************/
|
|
157
157
|
//#region RENDER
|
|
158
158
|
render() {
|
|
159
|
-
return (index.h(index.Host, { key: '
|
|
159
|
+
return (index.h(index.Host, { key: 'b7c5cb46244f10a93330dc601d0347e3cb53c276' }, index.h("slot", { key: '0808ec94f479f52f60b50ac14ce1a4eb989e5778' })));
|
|
160
160
|
}
|
|
161
161
|
get el() { return index.getElement(this); }
|
|
162
162
|
static get watchers() { return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-CEKdYnmK.js');
|
|
4
4
|
require('react');
|
|
5
5
|
require('react-dom');
|
|
6
6
|
|
|
@@ -46,7 +46,7 @@ const NvTooltip = class {
|
|
|
46
46
|
/****************************************************************************/
|
|
47
47
|
//#region RENDER
|
|
48
48
|
render() {
|
|
49
|
-
return (index.h(index.Host, { key: '
|
|
49
|
+
return (index.h(index.Host, { key: 'ff1ca24735ec78d279cdc2f98cb54c0d6a7b4103' }, index.h("slot", { key: '3e0676a49b957ecb6eb3e0e6bfc1d8d8f0d2e02a' }), index.h("nv-popover", { key: '063fb414e47a1a6b722ee8b61f3dd68a61c5b7df', triggerMode: "hover", hasArrow: true, placement: this.placement, strategy: this.strategy, triggerElement: this.triggerElement, groupName: 'tooltip', enterDelay: this.enterDelay }, index.h("p", { key: 'a8714211a3a5c723d187acdcb23484610bd91a36', slot: "content" }, this.message), index.h("slot", { key: 'edae83eb3c0f5c57b9b7263ccc139463b044f68e', name: "content" }))));
|
|
50
50
|
}
|
|
51
51
|
get el() { return index.getElement(this); }
|
|
52
52
|
};
|
|
@@ -1,49 +1,88 @@
|
|
|
1
|
-
import React, { useMemo, useState, useEffect, useRef
|
|
2
|
-
import { flexRender, getCoreRowModel, getPaginationRowModel, useReactTable, } from '@tanstack/react-table';
|
|
3
|
-
import { NvTable } from '
|
|
4
|
-
function NvDatatable({ columns, rows, pagination, renderPagination, stickyHeader, ...htmlProps }) {
|
|
1
|
+
import React, { useMemo, useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { flexRender, getCoreRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table';
|
|
3
|
+
import { NvTable, NvTableheader } from '../../generated/components';
|
|
4
|
+
function NvDatatable({ columns, rows, pagination, sorting, renderPagination, stickyHeader, ...htmlProps }) {
|
|
5
5
|
const [paginationState, setPaginationState] = useState({
|
|
6
6
|
pageIndex: 0,
|
|
7
7
|
pageSize: pagination?.initialPageSize || 10,
|
|
8
8
|
});
|
|
9
|
+
const [sortingState, setSortingState] = useState(sorting?.sortState || []);
|
|
9
10
|
const lastRowRef = useRef(null);
|
|
10
11
|
const tableColumns = useMemo(() => columns
|
|
11
12
|
.filter((col) => !col.hidden)
|
|
12
|
-
.map((col) =>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
13
|
+
.map((col) => {
|
|
14
|
+
const columnDef = {
|
|
15
|
+
accessorKey: col.field,
|
|
16
|
+
accessorFn: col.valueFormatter
|
|
17
|
+
? (row) => {
|
|
18
|
+
const rawValue = row[col.field];
|
|
19
|
+
return col.valueFormatter({
|
|
20
|
+
value: rawValue,
|
|
21
|
+
row,
|
|
22
|
+
field: col.field,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
: undefined,
|
|
26
|
+
header: col.headerName || String(col.field),
|
|
27
|
+
size: col.width,
|
|
28
|
+
enableResizing: col.resizable ?? true,
|
|
29
|
+
enableSorting: sorting ? col.sortable ?? true : false,
|
|
30
|
+
cell: (context) => {
|
|
31
|
+
const value = context.getValue();
|
|
32
|
+
const row = context.row.original;
|
|
33
|
+
const rowIndex = context.row.index;
|
|
34
|
+
if (col.renderCell) {
|
|
35
|
+
return col.renderCell({
|
|
36
|
+
value,
|
|
37
|
+
row,
|
|
38
|
+
field: col.field,
|
|
39
|
+
rowIndex,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
if (col.sortingFn !== undefined) {
|
|
46
|
+
columnDef.sortingFn = col.sortingFn;
|
|
47
|
+
}
|
|
48
|
+
if (col.sortDescFirst !== undefined) {
|
|
49
|
+
columnDef.sortDescFirst = col.sortDescFirst;
|
|
50
|
+
}
|
|
51
|
+
if (col.invertSorting !== undefined) {
|
|
52
|
+
columnDef.invertSorting = col.invertSorting;
|
|
53
|
+
}
|
|
54
|
+
if (col.sortUndefined !== undefined) {
|
|
55
|
+
columnDef.sortUndefined = col.sortUndefined;
|
|
56
|
+
}
|
|
57
|
+
return columnDef;
|
|
58
|
+
}), [columns, sorting]);
|
|
42
59
|
const tableConfig = useMemo(() => {
|
|
43
60
|
const baseConfig = {
|
|
44
61
|
data: rows,
|
|
45
62
|
columns: tableColumns,
|
|
46
63
|
getCoreRowModel: getCoreRowModel(),
|
|
64
|
+
...(sorting && {
|
|
65
|
+
state: {
|
|
66
|
+
sorting: sorting.sortState || sortingState,
|
|
67
|
+
},
|
|
68
|
+
onSortingChange: sorting.mode === 'server'
|
|
69
|
+
? (updater) => {
|
|
70
|
+
const newSort = typeof updater === 'function'
|
|
71
|
+
? updater(sortingState)
|
|
72
|
+
: updater;
|
|
73
|
+
setSortingState(newSort);
|
|
74
|
+
sorting.onSortingChange?.(newSort);
|
|
75
|
+
}
|
|
76
|
+
: setSortingState,
|
|
77
|
+
manualSorting: sorting.mode === 'server',
|
|
78
|
+
enableSorting: true,
|
|
79
|
+
enableMultiSort: sorting.enableMultiSort ?? false,
|
|
80
|
+
enableSortingRemoval: sorting.enableSortingRemoval ?? true,
|
|
81
|
+
maxMultiSortColCount: sorting.maxMultiSortColCount,
|
|
82
|
+
sortDescFirst: sorting.sortDescFirst ?? false,
|
|
83
|
+
isMultiSortEvent: sorting.enableMultiSort ? () => true : undefined,
|
|
84
|
+
getSortedRowModel: sorting.mode === 'client' ? getSortedRowModel() : undefined,
|
|
85
|
+
}),
|
|
47
86
|
};
|
|
48
87
|
if (!pagination) {
|
|
49
88
|
return baseConfig;
|
|
@@ -74,13 +113,14 @@ function NvDatatable({ columns, rows, pagination, renderPagination, stickyHeader
|
|
|
74
113
|
manualPagination: true,
|
|
75
114
|
pageCount,
|
|
76
115
|
state: {
|
|
116
|
+
...baseConfig.state,
|
|
77
117
|
pagination: paginationState,
|
|
78
118
|
},
|
|
79
119
|
onPaginationChange: setPaginationState,
|
|
80
120
|
};
|
|
81
121
|
}
|
|
82
122
|
return baseConfig;
|
|
83
|
-
}, [rows, tableColumns, pagination, paginationState]);
|
|
123
|
+
}, [rows, tableColumns, pagination, paginationState, sorting, sortingState]);
|
|
84
124
|
const table = useReactTable(tableConfig);
|
|
85
125
|
useEffect(() => {
|
|
86
126
|
if (pagination?.mode === 'server' && pagination.onPaginationChange) {
|
|
@@ -143,21 +183,23 @@ function NvDatatable({ columns, rows, pagination, renderPagination, stickyHeader
|
|
|
143
183
|
return (React.createElement(React.Fragment, null,
|
|
144
184
|
React.createElement(NvTable, { ...htmlProps },
|
|
145
185
|
React.createElement("table", null,
|
|
146
|
-
React.createElement("thead", { "data-sticky-top": stickyHeader ? 'true' : undefined }, table.getHeaderGroups().map((headerGroup) => (React.createElement("tr", { key: headerGroup.id }, headerGroup.headers.map((header) =>
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
186
|
+
React.createElement("thead", { "data-sticky-top": stickyHeader ? 'true' : undefined }, table.getHeaderGroups().map((headerGroup) => (React.createElement("tr", { key: headerGroup.id }, headerGroup.headers.map((header) => {
|
|
187
|
+
const canSort = header.column.getCanSort();
|
|
188
|
+
const sortDirection = header.column.getIsSorted();
|
|
189
|
+
return (React.createElement("th", { key: header.id, "data-testid": `datatable-header-${header.id}`, style: {
|
|
190
|
+
width: header.column.columnDef.size + 'px',
|
|
191
|
+
}, "data-no-resize": header.column.columnDef.enableResizing ? null : true },
|
|
192
|
+
React.createElement(NvTableheader, { sortable: canSort ? true : undefined, sortDirection: sortDirection || (canSort ? 'none' : undefined), onSortDirectionChanged: canSort
|
|
193
|
+
? header.column.getToggleSortingHandler()
|
|
194
|
+
: undefined }, header.isPlaceholder
|
|
195
|
+
? null
|
|
196
|
+
: flexRender(header.column.columnDef.header, header.getContext()))));
|
|
197
|
+
}))))),
|
|
151
198
|
React.createElement("tbody", null, tableRows.map((row, index) => {
|
|
152
199
|
const isLastRow = isInfiniteScroll && index === tableRows.length - 1;
|
|
153
|
-
return (React.createElement("tr", { key: row.id, "data-testid": `datatable-row-${
|
|
200
|
+
return (React.createElement("tr", { key: row.id, "data-testid": `datatable-row-${index}`, ref: isLastRow ? lastRowRef : undefined }, row.getVisibleCells().map((cell) => (React.createElement("td", { key: cell.id, "data-testid": `datatable-cell-${cell.column.id}` }, flexRender(cell.column.columnDef.cell, cell.getContext()))))));
|
|
154
201
|
})))),
|
|
155
202
|
paginationAPI && renderPagination && renderPagination(paginationAPI)));
|
|
156
203
|
}
|
|
157
204
|
NvDatatable.displayName = 'NvDatatable';
|
|
158
205
|
export { NvDatatable };
|
|
159
|
-
export function makeColumn() {
|
|
160
|
-
return function define(col) {
|
|
161
|
-
return col;
|
|
162
|
-
};
|
|
163
|
-
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -35,13 +35,24 @@ import { NvIconbutton as NvIconbuttonElement, defineCustomElement as defineNvIco
|
|
|
35
35
|
import { NvLoader as NvLoaderElement, defineCustomElement as defineNvLoader } from "@nova-design-system/nova-webcomponents/dist/components/nv-loader.js";
|
|
36
36
|
import { NvMenu as NvMenuElement, defineCustomElement as defineNvMenu } from "@nova-design-system/nova-webcomponents/dist/components/nv-menu.js";
|
|
37
37
|
import { NvMenuitem as NvMenuitemElement, defineCustomElement as defineNvMenuitem } from "@nova-design-system/nova-webcomponents/dist/components/nv-menuitem.js";
|
|
38
|
+
import { NvNotificationBullet as NvNotificationBulletElement, defineCustomElement as defineNvNotificationBullet } from "@nova-design-system/nova-webcomponents/dist/components/nv-notification-bullet.js";
|
|
38
39
|
import { NvNotification as NvNotificationElement, defineCustomElement as defineNvNotification } from "@nova-design-system/nova-webcomponents/dist/components/nv-notification.js";
|
|
39
40
|
import { NvNotificationcontainer as NvNotificationcontainerElement, defineCustomElement as defineNvNotificationcontainer } from "@nova-design-system/nova-webcomponents/dist/components/nv-notificationcontainer.js";
|
|
40
41
|
import { NvPopover as NvPopoverElement, defineCustomElement as defineNvPopover } from "@nova-design-system/nova-webcomponents/dist/components/nv-popover.js";
|
|
41
42
|
import { NvRow as NvRowElement, defineCustomElement as defineNvRow } from "@nova-design-system/nova-webcomponents/dist/components/nv-row.js";
|
|
43
|
+
import { NvSidebar as NvSidebarElement, defineCustomElement as defineNvSidebar } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebar.js";
|
|
44
|
+
import { NvSidebarcontent as NvSidebarcontentElement, defineCustomElement as defineNvSidebarcontent } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebarcontent.js";
|
|
45
|
+
import { NvSidebardivider as NvSidebardividerElement, defineCustomElement as defineNvSidebardivider } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebardivider.js";
|
|
46
|
+
import { NvSidebarfooter as NvSidebarfooterElement, defineCustomElement as defineNvSidebarfooter } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebarfooter.js";
|
|
47
|
+
import { NvSidebargroup as NvSidebargroupElement, defineCustomElement as defineNvSidebargroup } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebargroup.js";
|
|
48
|
+
import { NvSidebarheader as NvSidebarheaderElement, defineCustomElement as defineNvSidebarheader } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebarheader.js";
|
|
49
|
+
import { NvSidebarlogo as NvSidebarlogoElement, defineCustomElement as defineNvSidebarlogo } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebarlogo.js";
|
|
50
|
+
import { NvSidebarnavitem as NvSidebarnavitemElement, defineCustomElement as defineNvSidebarnavitem } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebarnavitem.js";
|
|
51
|
+
import { NvSidebarnavsubitem as NvSidebarnavsubitemElement, defineCustomElement as defineNvSidebarnavsubitem } from "@nova-design-system/nova-webcomponents/dist/components/nv-sidebarnavsubitem.js";
|
|
42
52
|
import { NvSplit as NvSplitElement, defineCustomElement as defineNvSplit } from "@nova-design-system/nova-webcomponents/dist/components/nv-split.js";
|
|
43
53
|
import { NvStack as NvStackElement, defineCustomElement as defineNvStack } from "@nova-design-system/nova-webcomponents/dist/components/nv-stack.js";
|
|
44
54
|
import { NvTable as NvTableElement, defineCustomElement as defineNvTable } from "@nova-design-system/nova-webcomponents/dist/components/nv-table.js";
|
|
55
|
+
import { NvTableheader as NvTableheaderElement, defineCustomElement as defineNvTableheader } from "@nova-design-system/nova-webcomponents/dist/components/nv-tableheader.js";
|
|
45
56
|
import { NvToggle as NvToggleElement, defineCustomElement as defineNvToggle } from "@nova-design-system/nova-webcomponents/dist/components/nv-toggle.js";
|
|
46
57
|
import { NvTogglebutton as NvTogglebuttonElement, defineCustomElement as defineNvTogglebutton } from "@nova-design-system/nova-webcomponents/dist/components/nv-togglebutton.js";
|
|
47
58
|
import { NvTogglebuttongroup as NvTogglebuttongroupElement, defineCustomElement as defineNvTogglebuttongroup } from "@nova-design-system/nova-webcomponents/dist/components/nv-togglebuttongroup.js";
|
|
@@ -337,6 +348,13 @@ export const NvNotification = createComponent({
|
|
|
337
348
|
events: { onHiddenChanged: 'hiddenChanged' },
|
|
338
349
|
defineCustomElement: defineNvNotification
|
|
339
350
|
});
|
|
351
|
+
export const NvNotificationBullet = createComponent({
|
|
352
|
+
tagName: 'nv-notification-bullet',
|
|
353
|
+
elementClass: NvNotificationBulletElement,
|
|
354
|
+
react: React,
|
|
355
|
+
events: {},
|
|
356
|
+
defineCustomElement: defineNvNotificationBullet
|
|
357
|
+
});
|
|
340
358
|
export const NvNotificationcontainer = createComponent({
|
|
341
359
|
tagName: 'nv-notificationcontainer',
|
|
342
360
|
elementClass: NvNotificationcontainerElement,
|
|
@@ -358,6 +376,69 @@ export const NvRow = createComponent({
|
|
|
358
376
|
events: {},
|
|
359
377
|
defineCustomElement: defineNvRow
|
|
360
378
|
});
|
|
379
|
+
export const NvSidebar = createComponent({
|
|
380
|
+
tagName: 'nv-sidebar',
|
|
381
|
+
elementClass: NvSidebarElement,
|
|
382
|
+
react: React,
|
|
383
|
+
events: { onOpenChanged: 'openChanged' },
|
|
384
|
+
defineCustomElement: defineNvSidebar
|
|
385
|
+
});
|
|
386
|
+
export const NvSidebarcontent = createComponent({
|
|
387
|
+
tagName: 'nv-sidebarcontent',
|
|
388
|
+
elementClass: NvSidebarcontentElement,
|
|
389
|
+
react: React,
|
|
390
|
+
events: {},
|
|
391
|
+
defineCustomElement: defineNvSidebarcontent
|
|
392
|
+
});
|
|
393
|
+
export const NvSidebardivider = createComponent({
|
|
394
|
+
tagName: 'nv-sidebardivider',
|
|
395
|
+
elementClass: NvSidebardividerElement,
|
|
396
|
+
react: React,
|
|
397
|
+
events: {},
|
|
398
|
+
defineCustomElement: defineNvSidebardivider
|
|
399
|
+
});
|
|
400
|
+
export const NvSidebarfooter = createComponent({
|
|
401
|
+
tagName: 'nv-sidebarfooter',
|
|
402
|
+
elementClass: NvSidebarfooterElement,
|
|
403
|
+
react: React,
|
|
404
|
+
events: {},
|
|
405
|
+
defineCustomElement: defineNvSidebarfooter
|
|
406
|
+
});
|
|
407
|
+
export const NvSidebargroup = createComponent({
|
|
408
|
+
tagName: 'nv-sidebargroup',
|
|
409
|
+
elementClass: NvSidebargroupElement,
|
|
410
|
+
react: React,
|
|
411
|
+
events: {},
|
|
412
|
+
defineCustomElement: defineNvSidebargroup
|
|
413
|
+
});
|
|
414
|
+
export const NvSidebarheader = createComponent({
|
|
415
|
+
tagName: 'nv-sidebarheader',
|
|
416
|
+
elementClass: NvSidebarheaderElement,
|
|
417
|
+
react: React,
|
|
418
|
+
events: {},
|
|
419
|
+
defineCustomElement: defineNvSidebarheader
|
|
420
|
+
});
|
|
421
|
+
export const NvSidebarlogo = createComponent({
|
|
422
|
+
tagName: 'nv-sidebarlogo',
|
|
423
|
+
elementClass: NvSidebarlogoElement,
|
|
424
|
+
react: React,
|
|
425
|
+
events: {},
|
|
426
|
+
defineCustomElement: defineNvSidebarlogo
|
|
427
|
+
});
|
|
428
|
+
export const NvSidebarnavitem = createComponent({
|
|
429
|
+
tagName: 'nv-sidebarnavitem',
|
|
430
|
+
elementClass: NvSidebarnavitemElement,
|
|
431
|
+
react: React,
|
|
432
|
+
events: {},
|
|
433
|
+
defineCustomElement: defineNvSidebarnavitem
|
|
434
|
+
});
|
|
435
|
+
export const NvSidebarnavsubitem = createComponent({
|
|
436
|
+
tagName: 'nv-sidebarnavsubitem',
|
|
437
|
+
elementClass: NvSidebarnavsubitemElement,
|
|
438
|
+
react: React,
|
|
439
|
+
events: {},
|
|
440
|
+
defineCustomElement: defineNvSidebarnavsubitem
|
|
441
|
+
});
|
|
361
442
|
export const NvSplit = createComponent({
|
|
362
443
|
tagName: 'nv-split',
|
|
363
444
|
elementClass: NvSplitElement,
|
|
@@ -379,6 +460,13 @@ export const NvTable = createComponent({
|
|
|
379
460
|
events: {},
|
|
380
461
|
defineCustomElement: defineNvTable
|
|
381
462
|
});
|
|
463
|
+
export const NvTableheader = createComponent({
|
|
464
|
+
tagName: 'nv-tableheader',
|
|
465
|
+
elementClass: NvTableheaderElement,
|
|
466
|
+
react: React,
|
|
467
|
+
events: { onSortDirectionChanged: 'sortDirectionChanged' },
|
|
468
|
+
defineCustomElement: defineNvTableheader
|
|
469
|
+
});
|
|
382
470
|
export const NvToggle = createComponent({
|
|
383
471
|
tagName: 'nv-toggle',
|
|
384
472
|
elementClass: NvToggleElement,
|
|
@@ -98,7 +98,8 @@ export const NvButton = createComponent({
|
|
|
98
98
|
disabled: 'disabled',
|
|
99
99
|
fluid: 'fluid',
|
|
100
100
|
type: 'type',
|
|
101
|
-
form: 'form'
|
|
101
|
+
form: 'form',
|
|
102
|
+
disableTabindex: 'disable-tabindex'
|
|
102
103
|
},
|
|
103
104
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
104
105
|
serializeShadowRoot
|
|
@@ -612,7 +613,8 @@ export const NvIconbutton = createComponent({
|
|
|
612
613
|
active: 'active',
|
|
613
614
|
name: 'name',
|
|
614
615
|
type: 'type',
|
|
615
|
-
shape: 'shape'
|
|
616
|
+
shape: 'shape',
|
|
617
|
+
disableTabindex: 'disable-tabindex'
|
|
616
618
|
},
|
|
617
619
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
618
620
|
serializeShadowRoot
|
|
@@ -666,6 +668,18 @@ export const NvNotification = createComponent({
|
|
|
666
668
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
667
669
|
serializeShadowRoot
|
|
668
670
|
});
|
|
671
|
+
export const NvNotificationBullet = createComponent({
|
|
672
|
+
tagName: 'nv-notification-bullet',
|
|
673
|
+
properties: {
|
|
674
|
+
count: 'count',
|
|
675
|
+
intention: 'intention',
|
|
676
|
+
emphasis: 'emphasis',
|
|
677
|
+
size: 'size',
|
|
678
|
+
contrastingBorder: 'contrasting-border'
|
|
679
|
+
},
|
|
680
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
681
|
+
serializeShadowRoot
|
|
682
|
+
});
|
|
669
683
|
export const NvNotificationcontainer = createComponent({
|
|
670
684
|
tagName: 'nv-notificationcontainer',
|
|
671
685
|
properties: { position: 'position' },
|
|
@@ -696,6 +710,76 @@ export const NvRow = createComponent({
|
|
|
696
710
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
697
711
|
serializeShadowRoot
|
|
698
712
|
});
|
|
713
|
+
export const NvSidebar = createComponent({
|
|
714
|
+
tagName: 'nv-sidebar',
|
|
715
|
+
properties: {
|
|
716
|
+
type: 'type',
|
|
717
|
+
open: 'open',
|
|
718
|
+
activePath: 'active-path',
|
|
719
|
+
notificationIntention: 'notification-intention',
|
|
720
|
+
notificationEmphasis: 'notification-emphasis'
|
|
721
|
+
},
|
|
722
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
723
|
+
serializeShadowRoot
|
|
724
|
+
});
|
|
725
|
+
export const NvSidebarcontent = createComponent({
|
|
726
|
+
tagName: 'nv-sidebarcontent',
|
|
727
|
+
properties: {},
|
|
728
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
729
|
+
serializeShadowRoot
|
|
730
|
+
});
|
|
731
|
+
export const NvSidebardivider = createComponent({
|
|
732
|
+
tagName: 'nv-sidebardivider',
|
|
733
|
+
properties: {},
|
|
734
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
735
|
+
serializeShadowRoot
|
|
736
|
+
});
|
|
737
|
+
export const NvSidebarfooter = createComponent({
|
|
738
|
+
tagName: 'nv-sidebarfooter',
|
|
739
|
+
properties: {},
|
|
740
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
741
|
+
serializeShadowRoot
|
|
742
|
+
});
|
|
743
|
+
export const NvSidebargroup = createComponent({
|
|
744
|
+
tagName: 'nv-sidebargroup',
|
|
745
|
+
properties: { label: 'label' },
|
|
746
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
747
|
+
serializeShadowRoot
|
|
748
|
+
});
|
|
749
|
+
export const NvSidebarheader = createComponent({
|
|
750
|
+
tagName: 'nv-sidebarheader',
|
|
751
|
+
properties: {},
|
|
752
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
753
|
+
serializeShadowRoot
|
|
754
|
+
});
|
|
755
|
+
export const NvSidebarlogo = createComponent({
|
|
756
|
+
tagName: 'nv-sidebarlogo',
|
|
757
|
+
properties: {
|
|
758
|
+
label: 'label',
|
|
759
|
+
logo: 'logo',
|
|
760
|
+
collapsedLogo: 'collapsed-logo'
|
|
761
|
+
},
|
|
762
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
763
|
+
serializeShadowRoot
|
|
764
|
+
});
|
|
765
|
+
export const NvSidebarnavitem = createComponent({
|
|
766
|
+
tagName: 'nv-sidebarnavitem',
|
|
767
|
+
properties: {
|
|
768
|
+
icon: 'icon',
|
|
769
|
+
active: 'active',
|
|
770
|
+
collapsible: 'collapsible',
|
|
771
|
+
open: 'open',
|
|
772
|
+
notificationCount: 'notification-count'
|
|
773
|
+
},
|
|
774
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
775
|
+
serializeShadowRoot
|
|
776
|
+
});
|
|
777
|
+
export const NvSidebarnavsubitem = createComponent({
|
|
778
|
+
tagName: 'nv-sidebarnavsubitem',
|
|
779
|
+
properties: { active: 'active' },
|
|
780
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
781
|
+
serializeShadowRoot
|
|
782
|
+
});
|
|
699
783
|
export const NvSplit = createComponent({
|
|
700
784
|
tagName: 'nv-split',
|
|
701
785
|
properties: {
|
|
@@ -723,6 +807,15 @@ export const NvTable = createComponent({
|
|
|
723
807
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
724
808
|
serializeShadowRoot
|
|
725
809
|
});
|
|
810
|
+
export const NvTableheader = createComponent({
|
|
811
|
+
tagName: 'nv-tableheader',
|
|
812
|
+
properties: {
|
|
813
|
+
sortable: 'sortable',
|
|
814
|
+
sortDirection: 'sort-direction'
|
|
815
|
+
},
|
|
816
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
817
|
+
serializeShadowRoot
|
|
818
|
+
});
|
|
726
819
|
export const NvToggle = createComponent({
|
|
727
820
|
tagName: 'nv-toggle',
|
|
728
821
|
properties: {
|
|
@@ -12,9 +12,16 @@ const generateId = () => {
|
|
|
12
12
|
export const NotificationProvider = ({ children, position = DEFAULT_POSITION, maxNotifications = DEFAULT_MAX_NOTIFICATIONS, className, }) => {
|
|
13
13
|
const [notifications, setNotifications] = useState([]);
|
|
14
14
|
const notificationsRef = useRef([]);
|
|
15
|
+
const timersRef = useRef(new Map());
|
|
15
16
|
useEffect(() => {
|
|
16
17
|
notificationsRef.current = notifications;
|
|
17
18
|
}, [notifications]);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
return () => {
|
|
21
|
+
timersRef.current.forEach((timer) => clearTimeout(timer));
|
|
22
|
+
timersRef.current.clear();
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
18
25
|
const show = useCallback((options) => {
|
|
19
26
|
const id = options.id || generateId();
|
|
20
27
|
const ref = createRef();
|
|
@@ -28,6 +35,7 @@ export const NotificationProvider = ({ children, position = DEFAULT_POSITION, ma
|
|
|
28
35
|
icon: options.icon,
|
|
29
36
|
actions: options.actions ?? [],
|
|
30
37
|
actionSlot: options.actionSlot,
|
|
38
|
+
duration: options.duration ?? 0,
|
|
31
39
|
createdAt: Date.now(),
|
|
32
40
|
ref,
|
|
33
41
|
};
|
|
@@ -40,17 +48,36 @@ export const NotificationProvider = ({ children, position = DEFAULT_POSITION, ma
|
|
|
40
48
|
});
|
|
41
49
|
setTimeout(() => {
|
|
42
50
|
notification.ref.current?.show();
|
|
51
|
+
if (notification.duration && notification.duration > 0) {
|
|
52
|
+
const timer = setTimeout(() => {
|
|
53
|
+
const n = notificationsRef.current.find((item) => item.id === id);
|
|
54
|
+
n?.ref.current?.dismiss();
|
|
55
|
+
}, notification.duration);
|
|
56
|
+
timersRef.current.set(id, timer);
|
|
57
|
+
}
|
|
43
58
|
}, 0);
|
|
44
59
|
return id;
|
|
45
60
|
}, [maxNotifications]);
|
|
46
61
|
const dismiss = useCallback((id) => {
|
|
62
|
+
const timer = timersRef.current.get(id);
|
|
63
|
+
if (timer) {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
timersRef.current.delete(id);
|
|
66
|
+
}
|
|
47
67
|
const n = notificationsRef.current.find((item) => item.id === id);
|
|
48
68
|
n?.ref.current?.dismiss();
|
|
49
69
|
}, []);
|
|
50
70
|
const remove = useCallback((id) => {
|
|
71
|
+
const timer = timersRef.current.get(id);
|
|
72
|
+
if (timer) {
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
timersRef.current.delete(id);
|
|
75
|
+
}
|
|
51
76
|
setNotifications((prev) => prev.filter((notification) => notification.id !== id));
|
|
52
77
|
}, []);
|
|
53
78
|
const removeAll = useCallback(() => {
|
|
79
|
+
timersRef.current.forEach((timer) => clearTimeout(timer));
|
|
80
|
+
timersRef.current.clear();
|
|
54
81
|
setNotifications([]);
|
|
55
82
|
}, []);
|
|
56
83
|
const handleNotificationClose = useCallback((id) => {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { NvDatatableProps } from './types';
|
|
3
|
+
declare function NvDatatable<T>({ columns, rows, pagination, sorting, renderPagination, stickyHeader, ...htmlProps }: NvDatatableProps<T>): React.JSX.Element;
|
|
4
|
+
declare namespace NvDatatable {
|
|
5
|
+
var displayName: string;
|
|
6
|
+
}
|
|
7
|
+
export { NvDatatable };
|