@ticatec/uniface-element 0.2.0 → 0.2.2
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/README.md +320 -1
- package/README_CN.md +392 -0
- package/dist/accordion/Accordion.svelte +1 -1
- package/dist/action-bar/ActionBar.svelte +7 -1
- package/dist/attachment-files/FileRender.svelte +1 -1
- package/dist/attachment-files/FileUploadBar.svelte +7 -6
- package/dist/attachment-files/FileUploadPanel.svelte +2 -2
- package/dist/base-calendar/DateContext.js +5 -4
- package/dist/base-calendar/YearPickupPanel.svelte +4 -4
- package/dist/card/Card.svelte +1 -1
- package/dist/card/Card.svelte.d.ts +1 -1
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +2 -3
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +46 -1
- package/dist/cascade-options-select/CascadePanel.svelte +1 -1
- package/dist/checkbox/CheckBox.svelte +1 -1
- package/dist/color-picker/ColorPicker.svelte +9 -9
- package/dist/color-picker/ColorPicker.svelte.d.ts +0 -2
- package/dist/color-picker/ColorPickerPanel.svelte +11 -15
- package/dist/color-picker/ColorPickerPanel.svelte.d.ts +1 -1
- package/dist/common/CommonPicker.svelte +2 -2
- package/dist/common/CommonPicker.svelte.d.ts +1 -1
- package/dist/common/MouseClickHandler.d.ts +1 -1
- package/dist/common/Popover.svelte +28 -6
- package/dist/common/Popover.svelte.d.ts +9 -3
- package/dist/common/uniface-utils.js +6 -4
- package/dist/common-editor/CommonEditor.svelte +1 -1
- package/dist/common-editor/CommonEditor.svelte.d.ts +1 -1
- package/dist/common-editor/NumberInput.svelte +1 -1
- package/dist/common-editor/NumberInput.svelte.d.ts +1 -1
- package/dist/concise-data-table/ConciseListTable.svelte +7 -2
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +1 -0
- package/dist/concise-data-table/DataRow.svelte +1 -1
- package/dist/concise-data-table/TableOptions.d.ts +1 -1
- package/dist/data-table/DataTable.svelte +1 -1
- package/dist/data-table/parts/ActionsPanel.svelte +4 -3
- package/dist/data-table/parts/ActionsRow.svelte +3 -3
- package/dist/data-table/parts/ContentPanel.svelte +3 -2
- package/dist/data-table/parts/FixedColumnsPanel.svelte +0 -1
- package/dist/data-table/parts/FixedColumnsPanel.svelte.d.ts +1 -2
- package/dist/data-table/parts/FixedHeaderPanel.svelte +2 -2
- package/dist/data-table/parts/FixedRow.svelte +2 -1
- package/dist/data-table/parts/FixedRow.svelte.d.ts +1 -1
- package/dist/data-table/parts/HrefCell.svelte +23 -2
- package/dist/data-table/parts/PopupMenu.svelte +25 -2
- package/dist/data-table/parts/PopupMenu.svelte.d.ts +8 -1
- package/dist/date-picker/DatePicker.svelte +0 -1
- package/dist/date-picker/DateTimePicker.svelte +3 -3
- package/dist/date-picker/ScrollBar.svelte +4 -7
- package/dist/date-range/DateRangeEditor.svelte +1 -1
- package/dist/dialog/CommonDialog.svelte +8 -5
- package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
- package/dist/dialog/Dialog.svelte +37 -12
- package/dist/dialog/Dialog.svelte.d.ts +4 -3
- package/dist/dialog/DialogBoard.svelte +11 -8
- package/dist/dialog/DialogWrapper.svelte +10 -0
- package/dist/{common-editor/DateInput.svelte.d.ts → dialog/DialogWrapper.svelte.d.ts} +6 -13
- package/dist/dialog/Dialogs.js +1 -1
- package/dist/dialog/ModalResult.d.ts +5 -0
- package/dist/dialog/ModalResult.js +5 -0
- package/dist/drawer/Drawer.svelte +1 -1
- package/dist/form-field/FormField.svelte +2 -1
- package/dist/form-field/FormField.svelte.d.ts +1 -0
- package/dist/form-panel/flex-row-form/FormContainer.svelte +1 -1
- package/dist/form-panel/grid-form/EmptyCell.svelte +8 -7
- package/dist/form-panel/grid-form/EmptyCell.svelte.d.ts +2 -2
- package/dist/form-panel/grid-form/GridField.svelte +1 -1
- package/dist/i18nRes/i18nRes.d.ts +2 -0
- package/dist/i18nRes/i18nRes.js +44 -0
- package/dist/i18nRes/index.d.ts +2 -0
- package/dist/i18nRes/index.js +2 -0
- package/dist/image-files/ImageFilesField.svelte +1 -1
- package/dist/indicator/IndicatorBoard.svelte +1 -1
- package/dist/inline-cell-editor/InvalidEditor.svelte +1 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +6 -6
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +1 -1
- package/dist/layout/flex/FlexBlock.svelte +1 -1
- package/dist/lookup-editor/LookupEditor.svelte +1 -1
- package/dist/memo-editor/MemoEditor.svelte +2 -2
- package/dist/message-box/IMessageBox.d.ts +2 -4
- package/dist/message-box/IMessageBox.js +4 -6
- package/dist/message-box/MessageBoxBoard.svelte +1 -3
- package/dist/options-multi-select/OptionsMultiSelect.svelte +1 -1
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +2 -2
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +1 -1
- package/dist/property-editor/PropertyEditor.svelte +3 -3
- package/dist/text-editor/PasswordEditor.svelte +1 -1
- package/dist/transfer/Transfer.svelte +17 -12
- package/dist/transfer/Transfer.svelte.d.ts +0 -1
- package/dist/unit-number-editor/UnitNumberEditor.svelte +2 -2
- package/docs/buttons/cn/ActionBar.md +459 -0
- package/docs/buttons/cn/Button.md +228 -0
- package/docs/buttons/cn/IconButton.md +294 -0
- package/docs/buttons/cn/README.md +600 -0
- package/docs/buttons/cn/TextButton.md +163 -0
- package/docs/buttons/en/ActionBar.md +459 -0
- package/docs/buttons/en/Button.md +228 -0
- package/docs/buttons/en/IconButton.md +294 -0
- package/docs/buttons/en/README.md +600 -0
- package/docs/buttons/en/TextButton.md +163 -0
- package/docs/containers/cn/accordion.md +622 -0
- package/docs/containers/cn/box.md +445 -0
- package/docs/containers/cn/card.md +404 -0
- package/docs/containers/cn/page.md +576 -0
- package/docs/containers/cn/tabs.md +686 -0
- package/docs/containers/en/accordion.md +622 -0
- package/docs/containers/en/box.md +445 -0
- package/docs/containers/en/card.md +404 -0
- package/docs/containers/en/page.md +576 -0
- package/docs/containers/en/tabs.md +686 -0
- package/docs/data-display/cn/concise-data-table.md +731 -0
- package/docs/data-display/cn/listbox.md +786 -0
- package/docs/data-display/cn/treeview.md +863 -0
- package/docs/data-display/en/concise-data-table.md +732 -0
- package/docs/data-display/en/listbox.md +786 -0
- package/docs/data-display/en/treeview.md +863 -0
- package/docs/data-table/cn/README.md +596 -0
- package/docs/data-table/en/README.md +596 -0
- package/docs/dialog/cn/README.md +767 -0
- package/docs/dialog/en/README.md +767 -0
- package/docs/form/cn/README.md +847 -0
- package/docs/form/en/README.md +847 -0
- package/docs/form-components/cn/README.md +495 -0
- package/docs/form-components/cn/attachmentfilesfield.md +757 -0
- package/docs/form-components/cn/cascade-options-select.md +374 -0
- package/docs/form-components/cn/checkbox.md +58 -0
- package/docs/form-components/cn/date-picker.md +138 -0
- package/docs/form-components/cn/datetime-picker.md +228 -0
- package/docs/form-components/cn/group-checkbox.md +405 -0
- package/docs/form-components/cn/group-radiobox.md +525 -0
- package/docs/form-components/cn/imagefilesfield.md +651 -0
- package/docs/form-components/cn/input-options-select.md +250 -0
- package/docs/form-components/cn/lookup-editor.md +406 -0
- package/docs/form-components/cn/memoeditor.md +409 -0
- package/docs/form-components/cn/number-editor.md +261 -0
- package/docs/form-components/cn/options-multi-select.md +177 -0
- package/docs/form-components/cn/options-select.md +83 -0
- package/docs/form-components/cn/passwordeditor.md +538 -0
- package/docs/form-components/cn/prompts-text-editor.md +241 -0
- package/docs/form-components/cn/radiobutton.md +84 -0
- package/docs/form-components/cn/switch.md +178 -0
- package/docs/form-components/cn/text-editor.md +142 -0
- package/docs/form-components/cn/time-editor.md +159 -0
- package/docs/form-components/cn/unit-number-editor.md +164 -0
- package/docs/form-components/en/README.md +463 -0
- package/docs/form-components/en/attachmentfilesfield.md +757 -0
- package/docs/form-components/en/cascade-options-select.md +358 -0
- package/docs/form-components/en/checkbox.md +59 -0
- package/docs/form-components/en/date-picker.md +138 -0
- package/docs/form-components/en/datetime-picker.md +228 -0
- package/docs/form-components/en/group-checkbox.md +395 -0
- package/docs/form-components/en/group-radiobox.md +498 -0
- package/docs/form-components/en/imagefilesfield.md +651 -0
- package/docs/form-components/en/input-options-select.md +239 -0
- package/docs/form-components/en/lookup-editor.md +389 -0
- package/docs/form-components/en/memoeditor.md +409 -0
- package/docs/form-components/en/number-editor.md +249 -0
- package/docs/form-components/en/options-multi-select.md +177 -0
- package/docs/form-components/en/options-select.md +83 -0
- package/docs/form-components/en/passwordeditor.md +538 -0
- package/docs/form-components/en/prompts-text-editor.md +241 -0
- package/docs/form-components/en/radiobutton.md +84 -0
- package/docs/form-components/en/switch.md +180 -0
- package/docs/form-components/en/text-editor.md +142 -0
- package/docs/form-components/en/time-editor.md +159 -0
- package/docs/form-components/en/unit-number-editor.md +164 -0
- package/docs/form-layout/cn/criteria-field.md +652 -0
- package/docs/form-layout/cn/flex-form.md +454 -0
- package/docs/form-layout/cn/flex-row-form.md +542 -0
- package/docs/form-layout/cn/form-field.md +923 -0
- package/docs/form-layout/cn/grid-form.md +676 -0
- package/docs/form-layout/en/criteria-field.md +652 -0
- package/docs/form-layout/en/flex-form.md +454 -0
- package/docs/form-layout/en/flex-row-form.md +542 -0
- package/docs/form-layout/en/form-field.md +923 -0
- package/docs/form-layout/en/grid-form.md +676 -0
- package/docs/global/cn/README.md +534 -0
- package/docs/global/en/README.md +534 -0
- package/docs/layout/cn/classiclayout.md +460 -0
- package/docs/layout/cn/headerlayout.md +524 -0
- package/docs/layout/cn/sidebarlayout.md +263 -0
- package/docs/layout/en/classiclayout.md +951 -0
- package/docs/layout/en/headerlayout.md +524 -0
- package/docs/layout/en/sidebarlayout.md +262 -0
- package/docs/misc/cn/README.md +1217 -0
- package/docs/misc/en/README.md +1217 -0
- package/docs/navigation/cn/breadcrumb.md +291 -0
- package/docs/navigation/cn/navigator.md +322 -0
- package/docs/navigation/cn/navigatormenu.md +512 -0
- package/docs/navigation/cn/progressbar.md +199 -0
- package/docs/navigation/cn/progressstepbar.md +299 -0
- package/docs/navigation/en/breadcrumb.md +291 -0
- package/docs/navigation/en/navigator.md +322 -0
- package/docs/navigation/en/navigatormenu.md +512 -0
- package/docs/navigation/en/progressbar.md +199 -0
- package/docs/navigation/en/progressstepbar.md +299 -0
- package/docs/search-filters/cn/daterange.md +1156 -0
- package/docs/search-filters/cn/numberrange.md +688 -0
- package/docs/search-filters/cn/searchbox.md +1582 -0
- package/docs/search-filters/en/daterange.md +1156 -0
- package/docs/search-filters/en/numberrange.md +688 -0
- package/docs/search-filters/en/searchbox.md +1582 -0
- package/package.json +53 -13
- package/dist/common-editor/DateInput.svelte +0 -27
- package/dist/i18n_resources/index.d.ts +0 -3
- package/dist/i18n_resources/index.js +0 -3
- /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.d.ts +0 -0
- /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.js +0 -0
- /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.d.ts +0 -0
- /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.js +0 -0
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
# Data Table Component
|
|
2
|
+
|
|
3
|
+
A powerful and flexible data table component for Uniface applications, built with Svelte and TypeScript.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Data Table component provides a comprehensive solution for displaying and managing tabular data. It supports features like frozen columns, row actions, sorting, inline editing, and custom cell formatting.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import DataTable from '@ticatec/uniface-element/DataTable';
|
|
13
|
+
import type { DataColumn, ActionsColumn, IndicatorColumn } from '@ticatec/uniface-element/DataTable';
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Basic Usage
|
|
17
|
+
|
|
18
|
+
```svelte
|
|
19
|
+
<script lang="ts">
|
|
20
|
+
import DataTable from '@ticatec/uniface-element/DataTable';
|
|
21
|
+
import type { DataColumn } from '@ticatec/uniface-element/DataTable';
|
|
22
|
+
|
|
23
|
+
let data = [
|
|
24
|
+
{ id: 1, name: 'John Doe', age: 30 },
|
|
25
|
+
{ id: 2, name: 'Jane Smith', age: 25 }
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
let columns: DataColumn[] = [
|
|
29
|
+
{ text: 'ID', field: 'id', width: 80 },
|
|
30
|
+
{ text: 'Name', field: 'name', width: 200 },
|
|
31
|
+
{ text: 'Age', field: 'age', width: 100 }
|
|
32
|
+
];
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<DataTable {columns} list={data} />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Core Components
|
|
39
|
+
|
|
40
|
+
### UniDataTable Class
|
|
41
|
+
|
|
42
|
+
The main data table class (`src/lib/data-table/UniDataTable.ts:17`) that manages table state and configuration.
|
|
43
|
+
|
|
44
|
+
**Constructor:**
|
|
45
|
+
```typescript
|
|
46
|
+
new UniDataTable(id: string, indicatorWidth?: number)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Key Methods:**
|
|
50
|
+
- `setColumns(columns: Array<DataColumn>)` - Set table columns
|
|
51
|
+
- `generateTemplateStyle(): string` - Generate CSS styles for columns
|
|
52
|
+
- Getters: `width`, `frozenWidth`, `rows`, `columns`, `frozenColumns`
|
|
53
|
+
|
|
54
|
+
### DataColumn Interface
|
|
55
|
+
|
|
56
|
+
Defines column configuration (`src/lib/data-table/lib/DataColumn.ts:5`):
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
interface DataColumn {
|
|
60
|
+
text: string; // Column header text
|
|
61
|
+
field?: string; // Data field name
|
|
62
|
+
frozen?: boolean; // Whether column is frozen
|
|
63
|
+
align?: 'left' | 'center' | 'right';
|
|
64
|
+
width: number; // Column width in pixels
|
|
65
|
+
minWidth?: number; // Minimum width
|
|
66
|
+
warp?: boolean; // Allow text wrapping
|
|
67
|
+
formatter?: FormatCell; // Cell value formatter
|
|
68
|
+
escapeHTML?: boolean; // Escape HTML in cell content
|
|
69
|
+
href?: HrefBuilder; // Hyperlink configuration
|
|
70
|
+
hint?: CellHint; // Cell tooltip function
|
|
71
|
+
render?: any; // Custom cell renderer
|
|
72
|
+
visible?: boolean; // Column visibility
|
|
73
|
+
resizable?: boolean; // Column is resizable
|
|
74
|
+
compareFunction?: CompareFunction; // Sorting function
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Properties
|
|
79
|
+
|
|
80
|
+
### DataTable Component Props
|
|
81
|
+
|
|
82
|
+
| Property | Type | Default | Description |
|
|
83
|
+
|----------|------|---------|-------------|
|
|
84
|
+
| `columns` | `Array<DataColumn>` | required | Column definitions |
|
|
85
|
+
| `list` | `Array<any>` | required | Data array |
|
|
86
|
+
| `actionsColumn` | `ActionsColumn \| null` | `null` | Row actions configuration |
|
|
87
|
+
| `indicatorColumn` | `IndicatorColumn \| null` | `null` | Indicator column configuration |
|
|
88
|
+
| `rowHeight` | `number` | `42` | Row height in pixels |
|
|
89
|
+
| `selectedRows` | `Array<any>` | `[]` | Selected rows array |
|
|
90
|
+
| `inlineRowHeight` | `number` | `80` | Height for expanded inline rows |
|
|
91
|
+
| `rowBorder` | `boolean` | `false` | Show row borders |
|
|
92
|
+
| `colBorder` | `boolean` | `false` | Show column borders |
|
|
93
|
+
| `emptyIndicator` | `string \| undefined` | `undefined` | Empty state message |
|
|
94
|
+
| `style` | `string` | `''` | Additional CSS styles |
|
|
95
|
+
|
|
96
|
+
## Advanced Features
|
|
97
|
+
|
|
98
|
+
### Frozen Columns
|
|
99
|
+
|
|
100
|
+
Columns can be frozen to the left side of the table:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
let columns: DataColumn[] = [
|
|
104
|
+
{ text: 'ID', field: 'id', width: 80, frozen: true },
|
|
105
|
+
{ text: 'Name', field: 'name', width: 200, frozen: true },
|
|
106
|
+
{ text: 'Description', field: 'desc', width: 300 }
|
|
107
|
+
];
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Actions Column
|
|
111
|
+
|
|
112
|
+
Add action buttons to each row:
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import type { ActionsColumn, RowAction } from '@ticatec/uniface-element/DataTable';
|
|
116
|
+
|
|
117
|
+
let actionsColumn: ActionsColumn = {
|
|
118
|
+
width: 120,
|
|
119
|
+
align: 'center',
|
|
120
|
+
getActions: (item) => [
|
|
121
|
+
{
|
|
122
|
+
label: 'Edit',
|
|
123
|
+
type: 'primary',
|
|
124
|
+
icon: 'edit',
|
|
125
|
+
callback: (item) => editItem(item)
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
label: 'Delete',
|
|
129
|
+
type: 'secondary',
|
|
130
|
+
icon: 'delete',
|
|
131
|
+
callback: (item) => deleteItem(item)
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
};
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Indicator Column
|
|
138
|
+
|
|
139
|
+
Add selection checkboxes, row numbers, or expandable rows:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
import type { IndicatorColumn } from '@ticatec/uniface-element/DataTable';
|
|
143
|
+
|
|
144
|
+
let indicatorColumn: IndicatorColumn = {
|
|
145
|
+
width: 60,
|
|
146
|
+
selectable: true,
|
|
147
|
+
displayNo: true,
|
|
148
|
+
buildInlineComponent: async (data) => {
|
|
149
|
+
// Return component for expanded row content
|
|
150
|
+
return SomeInlineComponent;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Cell Formatting
|
|
156
|
+
|
|
157
|
+
Custom cell formatters and hints:
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import type { FormatCell, CellHint } from '@ticatec/uniface-element/DataTable';
|
|
161
|
+
|
|
162
|
+
const dateFormatter: FormatCell = (value) => {
|
|
163
|
+
return new Date(value).toLocaleDateString();
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const tooltipHint: CellHint = (value) => {
|
|
167
|
+
return `Full value: ${value}`;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
let columns: DataColumn[] = [
|
|
171
|
+
{
|
|
172
|
+
text: 'Created Date',
|
|
173
|
+
field: 'createdAt',
|
|
174
|
+
width: 150,
|
|
175
|
+
formatter: dateFormatter,
|
|
176
|
+
hint: tooltipHint
|
|
177
|
+
}
|
|
178
|
+
];
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Sorting
|
|
182
|
+
|
|
183
|
+
Add sorting capability to columns:
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import type { CompareFunction } from '@ticatec/uniface-element/DataTable';
|
|
187
|
+
|
|
188
|
+
const nameCompare: CompareFunction = (a, b) => {
|
|
189
|
+
return a.name.localeCompare(b.name);
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
let columns: DataColumn[] = [
|
|
193
|
+
{
|
|
194
|
+
text: 'Name',
|
|
195
|
+
field: 'name',
|
|
196
|
+
width: 200,
|
|
197
|
+
compareFunction: nameCompare
|
|
198
|
+
}
|
|
199
|
+
];
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Hyperlinks
|
|
203
|
+
|
|
204
|
+
Make cells clickable links:
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
import type { HrefBuilder } from '@ticatec/uniface-element/DataTable';
|
|
208
|
+
|
|
209
|
+
const profileLink: HrefBuilder = (item) => {
|
|
210
|
+
return `/profile/${item.id}`;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
let columns: DataColumn[] = [
|
|
214
|
+
{
|
|
215
|
+
text: 'Name',
|
|
216
|
+
field: 'name',
|
|
217
|
+
width: 200,
|
|
218
|
+
href: profileLink
|
|
219
|
+
}
|
|
220
|
+
];
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Event Handling
|
|
224
|
+
|
|
225
|
+
The component supports various event handlers:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
// Event handler types
|
|
229
|
+
type RowEventHandler = (row: TableRow) => void;
|
|
230
|
+
type RowSelectEventHandler = (row: TableRow, value: boolean) => void;
|
|
231
|
+
type TableEventHandler = () => void;
|
|
232
|
+
type SelectionEventHandler = (value: boolean) => void;
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Selection Modes
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
enum SelectionMode {
|
|
239
|
+
All = 1,
|
|
240
|
+
Partial = 0,
|
|
241
|
+
None = -1
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Styling
|
|
246
|
+
|
|
247
|
+
The component uses CSS classes that can be customized:
|
|
248
|
+
|
|
249
|
+
```css
|
|
250
|
+
.uniface-data-table {
|
|
251
|
+
/* Main table container */
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.uniface-data-table.row-border {
|
|
255
|
+
/* Table with row borders */
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.uniface-data-table.cell-border {
|
|
259
|
+
/* Table with cell borders */
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Column-specific styles are generated dynamically based on column configuration.
|
|
264
|
+
|
|
265
|
+
## Examples
|
|
266
|
+
|
|
267
|
+
### Complete Example with All Features
|
|
268
|
+
|
|
269
|
+
```svelte
|
|
270
|
+
<script lang="ts">
|
|
271
|
+
import DataTable from '@ticatec/uniface-element/DataTable';
|
|
272
|
+
import type { DataColumn, ActionsColumn, IndicatorColumn } from '@ticatec/uniface-element/DataTable';
|
|
273
|
+
|
|
274
|
+
let employees = [
|
|
275
|
+
{ id: 1, name: 'John Doe', department: 'IT', salary: 75000, startDate: '2020-01-15' },
|
|
276
|
+
{ id: 2, name: 'Jane Smith', department: 'HR', salary: 68000, startDate: '2019-03-22' }
|
|
277
|
+
];
|
|
278
|
+
|
|
279
|
+
let selectedRows = [];
|
|
280
|
+
|
|
281
|
+
let columns: DataColumn[] = [
|
|
282
|
+
{
|
|
283
|
+
text: 'ID',
|
|
284
|
+
field: 'id',
|
|
285
|
+
width: 60,
|
|
286
|
+
frozen: true,
|
|
287
|
+
align: 'center'
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
text: 'Employee Name',
|
|
291
|
+
field: 'name',
|
|
292
|
+
width: 180,
|
|
293
|
+
frozen: true
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
text: 'Department',
|
|
297
|
+
field: 'department',
|
|
298
|
+
width: 120
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
text: 'Salary',
|
|
302
|
+
field: 'salary',
|
|
303
|
+
width: 100,
|
|
304
|
+
align: 'right',
|
|
305
|
+
formatter: (value) => `$${value.toLocaleString()}`
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
text: 'Start Date',
|
|
309
|
+
field: 'startDate',
|
|
310
|
+
width: 120,
|
|
311
|
+
formatter: (value) => new Date(value).toLocaleDateString()
|
|
312
|
+
}
|
|
313
|
+
];
|
|
314
|
+
|
|
315
|
+
let actionsColumn: ActionsColumn = {
|
|
316
|
+
width: 100,
|
|
317
|
+
align: 'center',
|
|
318
|
+
getActions: (employee) => [
|
|
319
|
+
{
|
|
320
|
+
label: 'Edit',
|
|
321
|
+
type: 'primary',
|
|
322
|
+
callback: (emp) => console.log('Edit', emp)
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
label: 'Delete',
|
|
326
|
+
type: 'secondary',
|
|
327
|
+
callback: (emp) => console.log('Delete', emp)
|
|
328
|
+
}
|
|
329
|
+
]
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
let indicatorColumn: IndicatorColumn = {
|
|
333
|
+
width: 50,
|
|
334
|
+
selectable: true,
|
|
335
|
+
displayNo: true
|
|
336
|
+
};
|
|
337
|
+
</script>
|
|
338
|
+
|
|
339
|
+
<DataTable
|
|
340
|
+
{columns}
|
|
341
|
+
{actionsColumn}
|
|
342
|
+
{indicatorColumn}
|
|
343
|
+
list={employees}
|
|
344
|
+
bind:selectedRows
|
|
345
|
+
rowHeight={45}
|
|
346
|
+
rowBorder={true}
|
|
347
|
+
colBorder={false}
|
|
348
|
+
/>
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## API Reference
|
|
352
|
+
|
|
353
|
+
### Main Exports
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
import DataTable from "@ticatec/uniface-element/DataTable";
|
|
357
|
+
import type {
|
|
358
|
+
ActionsColumn,
|
|
359
|
+
IndicatorColumn,
|
|
360
|
+
FormatCell,
|
|
361
|
+
CellHint,
|
|
362
|
+
DataColumn,
|
|
363
|
+
RowAction,
|
|
364
|
+
GetRowActions,
|
|
365
|
+
ActionFunction
|
|
366
|
+
} from "@ticatec/uniface-element/DataTable";
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### DataColumn Interface
|
|
370
|
+
|
|
371
|
+
```typescript
|
|
372
|
+
interface DataColumn {
|
|
373
|
+
/**
|
|
374
|
+
* Column header text
|
|
375
|
+
*/
|
|
376
|
+
text: string;
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Data field/property name
|
|
380
|
+
*/
|
|
381
|
+
field?: string;
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Whether column is frozen to left side
|
|
385
|
+
*/
|
|
386
|
+
frozen?: boolean;
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Text alignment
|
|
390
|
+
*/
|
|
391
|
+
align?: 'left' | 'center' | 'right';
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Column width in pixels
|
|
395
|
+
*/
|
|
396
|
+
width: number;
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Minimum width
|
|
400
|
+
*/
|
|
401
|
+
minWidth?: number;
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Allow text wrapping (default: false)
|
|
405
|
+
*/
|
|
406
|
+
warp?: boolean;
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Cell value formatter function
|
|
410
|
+
*/
|
|
411
|
+
formatter?: FormatCell;
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Whether to escape HTML characters
|
|
415
|
+
*/
|
|
416
|
+
escapeHTML?: boolean;
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Hyperlink configuration
|
|
420
|
+
*/
|
|
421
|
+
href?: HrefBuilder;
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Cell hint/tooltip function
|
|
425
|
+
*/
|
|
426
|
+
hint?: CellHint;
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Custom cell renderer
|
|
430
|
+
*/
|
|
431
|
+
render?: any;
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Column visibility
|
|
435
|
+
*/
|
|
436
|
+
visible?: boolean;
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Whether column is resizable
|
|
440
|
+
*/
|
|
441
|
+
resizable?: boolean;
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Sorting comparison function
|
|
445
|
+
*/
|
|
446
|
+
compareFunction?: CompareFunction;
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### ActionsColumn Interface
|
|
451
|
+
|
|
452
|
+
```typescript
|
|
453
|
+
interface ActionsColumn {
|
|
454
|
+
/**
|
|
455
|
+
* Column width in pixels
|
|
456
|
+
*/
|
|
457
|
+
width: number;
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Get row actions function
|
|
461
|
+
*/
|
|
462
|
+
getActions: GetRowActions;
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Alignment (default: left)
|
|
466
|
+
*/
|
|
467
|
+
align?: 'left' | 'center';
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### IndicatorColumn Interface
|
|
472
|
+
|
|
473
|
+
```typescript
|
|
474
|
+
interface IndicatorColumn {
|
|
475
|
+
/**
|
|
476
|
+
* Column width in pixels
|
|
477
|
+
*/
|
|
478
|
+
width: number;
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Whether rows are selectable
|
|
482
|
+
*/
|
|
483
|
+
selectable?: boolean;
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Function to build inline component for expanded rows
|
|
487
|
+
*/
|
|
488
|
+
buildInlineComponent?: (data: any) => Promise<any>;
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Whether to display row numbers
|
|
492
|
+
*/
|
|
493
|
+
displayNo?: boolean;
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### RowAction Interface
|
|
498
|
+
|
|
499
|
+
```typescript
|
|
500
|
+
interface RowAction {
|
|
501
|
+
/**
|
|
502
|
+
* Action button label
|
|
503
|
+
*/
|
|
504
|
+
label: string;
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Action button type/style
|
|
508
|
+
*/
|
|
509
|
+
type?: 'primary' | 'secondary' | 'third' | 'forth';
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* Action button icon
|
|
513
|
+
*/
|
|
514
|
+
icon?: string;
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Action callback function
|
|
518
|
+
*/
|
|
519
|
+
callback: ActionFunction;
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Type Definitions
|
|
524
|
+
|
|
525
|
+
```typescript
|
|
526
|
+
/**
|
|
527
|
+
* Cell value formatter function
|
|
528
|
+
*/
|
|
529
|
+
export type FormatCell = (value: any) => string;
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Cell hint/tooltip function
|
|
533
|
+
*/
|
|
534
|
+
export type CellHint = (value: any) => string;
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Action callback function
|
|
538
|
+
*/
|
|
539
|
+
export type ActionFunction = (item: any) => void;
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Function to get row actions
|
|
543
|
+
*/
|
|
544
|
+
export type GetRowActions = (item: any) => Array<RowAction>;
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Hyperlink builder function
|
|
548
|
+
*/
|
|
549
|
+
export type HrefBuilder = (item: any) => string;
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Comparison function for sorting
|
|
553
|
+
*/
|
|
554
|
+
export type CompareFunction = (a: any, b: any) => number;
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Row event handler
|
|
558
|
+
*/
|
|
559
|
+
export type RowEventHandler = (row: TableRow) => void;
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Row selection event handler
|
|
563
|
+
*/
|
|
564
|
+
export type RowSelectEventHandler = (row: TableRow, value: boolean) => void;
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Table event handler
|
|
568
|
+
*/
|
|
569
|
+
export type TableEventHandler = () => void;
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Selection event handler
|
|
573
|
+
*/
|
|
574
|
+
export type SelectionEventHandler = (value: boolean) => void;
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
### Enums
|
|
578
|
+
|
|
579
|
+
```typescript
|
|
580
|
+
/**
|
|
581
|
+
* Selection modes
|
|
582
|
+
*/
|
|
583
|
+
export enum SelectionMode {
|
|
584
|
+
All = 1, // All rows selected
|
|
585
|
+
Partial = 0, // Some rows selected
|
|
586
|
+
None = -1 // No rows selected
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* Sort order directions
|
|
591
|
+
*/
|
|
592
|
+
export enum OrderDirection {
|
|
593
|
+
Ascending = 'asc',
|
|
594
|
+
Descending = 'desc'
|
|
595
|
+
}
|
|
596
|
+
```
|