@ai-table/grid 0.1.35 → 0.1.36
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/angular-konva/components/shape.component.d.ts.map +1 -1
- package/components/context-menu/context-menu.component.d.ts +0 -2
- package/components/context-menu/context-menu.component.d.ts.map +1 -1
- package/components/drag/drag.component.d.ts +1 -1
- package/components/drag/drag.component.d.ts.map +1 -1
- package/core/types/ai-table.d.ts +3 -1
- package/core/types/ai-table.d.ts.map +1 -1
- package/core/utils/common.d.ts.map +1 -1
- package/dom-grid.component.d.ts.map +1 -1
- package/fesm2022/ai-table-grid.mjs +186 -227
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid-base.component.d.ts +1 -3
- package/grid-base.component.d.ts.map +1 -1
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/renderer/components/cells/cover-cell-base.d.ts.map +1 -1
- package/renderer/components/fill-handle.component.d.ts.map +1 -1
- package/renderer/components/frozen-heads.component.d.ts.map +1 -1
- package/services/event.service.d.ts +0 -1
- package/services/event.service.d.ts.map +1 -1
- package/services/index.d.ts +0 -1
- package/services/index.d.ts.map +1 -1
- package/types/cell.d.ts +6 -1
- package/types/cell.d.ts.map +1 -1
- package/types/grid.d.ts +0 -7
- package/types/grid.d.ts.map +1 -1
- package/types/row.d.ts +1 -2
- package/types/row.d.ts.map +1 -1
- package/utils/cell.d.ts +14 -5
- package/utils/cell.d.ts.map +1 -1
- package/utils/field/field.d.ts +2 -0
- package/utils/field/field.d.ts.map +1 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.d.ts.map +1 -1
- package/utils/record.d.ts +4 -0
- package/utils/record.d.ts.map +1 -0
- package/services/selection.service.d.ts +0 -26
- package/services/selection.service.d.ts.map +0 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { InjectionToken, input, EventEmitter, inject, ElementRef, effect, Output, ChangeDetectionStrategy, Component, signal, computed, output, Input, ChangeDetectorRef, ViewChild, model, untracked, Renderer2, Pipe, booleanAttribute,
|
2
|
+
import { InjectionToken, input, EventEmitter, inject, ElementRef, effect, Output, ChangeDetectionStrategy, Component, signal, computed, output, Input, ChangeDetectorRef, ViewChild, model, untracked, Renderer2, Pipe, booleanAttribute, DestroyRef, Injectable, NgZone, ViewContainerRef, viewChild, afterNextRender } from '@angular/core';
|
3
3
|
import Konva from 'konva';
|
4
4
|
import { Shape } from 'konva/lib/Shape';
|
5
5
|
import { Sprite } from 'konva/lib/shapes/Sprite';
|
@@ -61,7 +61,7 @@ import { ThyDot } from 'ngx-tethys/dot';
|
|
61
61
|
import { ThyIcon } from 'ngx-tethys/icon';
|
62
62
|
import { ThyTag } from 'ngx-tethys/tag';
|
63
63
|
import { ThySwitch } from 'ngx-tethys/switch';
|
64
|
-
import { of, Subject, fromEvent, debounceTime,
|
64
|
+
import { of, Subject, fromEvent, debounceTime, animationFrames, filter } from 'rxjs';
|
65
65
|
import { ThyDivider } from 'ngx-tethys/divider';
|
66
66
|
import * as i4 from 'ngx-tethys/avatar';
|
67
67
|
import { ThyAvatarModule } from 'ngx-tethys/avatar';
|
@@ -222,6 +222,9 @@ class KoShape {
|
|
222
222
|
if (this.config()) {
|
223
223
|
this.updateNode(this.config());
|
224
224
|
}
|
225
|
+
else {
|
226
|
+
this.updateNode({});
|
227
|
+
}
|
225
228
|
});
|
226
229
|
}
|
227
230
|
getNode() {
|
@@ -254,9 +257,6 @@ class KoShape {
|
|
254
257
|
});
|
255
258
|
}, 200);
|
256
259
|
};
|
257
|
-
if (this.config()) {
|
258
|
-
this.updateNode(this.config());
|
259
|
-
}
|
260
260
|
}
|
261
261
|
updateNode(config) {
|
262
262
|
if (!this._node)
|
@@ -1362,11 +1362,10 @@ function createAITable(records, fields, gridData) {
|
|
1362
1362
|
selectedRecords: new Set(),
|
1363
1363
|
selectedFields: new Set(),
|
1364
1364
|
selectedCells: new Set(),
|
1365
|
-
activeCell: null
|
1366
|
-
expandCell: null,
|
1367
|
-
editingCell: null,
|
1368
|
-
selectAllState: AITableSelectAllState.none
|
1365
|
+
activeCell: null
|
1369
1366
|
}),
|
1367
|
+
expendCell: signal({ path: null }),
|
1368
|
+
editingCell: signal({ path: null }),
|
1370
1369
|
keywordsMatchedCells: signal(new Set()),
|
1371
1370
|
recordsMap: computed(() => {
|
1372
1371
|
return records().reduce((object, item) => {
|
@@ -1976,19 +1975,100 @@ function getAvatarBgColor(name) {
|
|
1976
1975
|
: 0;
|
1977
1976
|
return colors[code % 9];
|
1978
1977
|
}
|
1979
|
-
function
|
1980
|
-
|
1978
|
+
function clearCoverCell(aiTable) {
|
1979
|
+
clearSelection(aiTable);
|
1980
|
+
closeEditingCell(aiTable);
|
1981
|
+
closeExpendCell(aiTable);
|
1982
|
+
}
|
1983
|
+
function clearSelection(aiTable) {
|
1981
1984
|
aiTable.selection.set({
|
1982
|
-
|
1983
|
-
|
1984
|
-
selectedCells: new Set(
|
1985
|
-
|
1985
|
+
selectedRecords: new Set(),
|
1986
|
+
selectedFields: new Set(),
|
1987
|
+
selectedCells: new Set(),
|
1988
|
+
activeCell: null
|
1989
|
+
});
|
1990
|
+
}
|
1991
|
+
function clearSelectionRecords(aiTable) {
|
1992
|
+
setSelection(aiTable, {
|
1993
|
+
selectedRecords: new Set()
|
1994
|
+
});
|
1995
|
+
}
|
1996
|
+
function clearSelectionFields(aiTable) {
|
1997
|
+
setSelection(aiTable, {
|
1998
|
+
selectedFields: new Set()
|
1999
|
+
});
|
2000
|
+
}
|
2001
|
+
function clearSelectedCells(aiTable) {
|
2002
|
+
setSelection(aiTable, {
|
2003
|
+
selectedCells: new Set()
|
1986
2004
|
});
|
1987
2005
|
}
|
1988
2006
|
function setExpandCellInfo(aiTable, expandCellInfo) {
|
2007
|
+
aiTable.expendCell.set({
|
2008
|
+
...aiTable.expendCell(),
|
2009
|
+
...expandCellInfo
|
2010
|
+
});
|
2011
|
+
}
|
2012
|
+
function expandCell(aiTable, cellPath) {
|
2013
|
+
setExpandCellInfo(aiTable, { path: cellPath });
|
2014
|
+
}
|
2015
|
+
function closeExpendCell(aiTable) {
|
2016
|
+
setExpandCellInfo(aiTable, { path: null, width: undefined, height: undefined });
|
2017
|
+
}
|
2018
|
+
function setSelection(aiTable, selection) {
|
2019
|
+
aiTable.selection.set({
|
2020
|
+
...aiTable.selection(),
|
2021
|
+
...selection
|
2022
|
+
});
|
2023
|
+
}
|
2024
|
+
function setActiveCell(aiTable, activeCell) {
|
1989
2025
|
aiTable.selection.set({
|
1990
2026
|
...aiTable.selection(),
|
1991
|
-
|
2027
|
+
...activeCell
|
2028
|
+
});
|
2029
|
+
}
|
2030
|
+
function setEditingCell(aiTable, editingCell) {
|
2031
|
+
aiTable.editingCell.set({
|
2032
|
+
...aiTable.editingCell(),
|
2033
|
+
...editingCell
|
2034
|
+
});
|
2035
|
+
}
|
2036
|
+
function closeEditingCell(aiTable) {
|
2037
|
+
setEditingCell(aiTable, { path: null });
|
2038
|
+
}
|
2039
|
+
function selectCells(aiTable, startCell, endCell, activeCell) {
|
2040
|
+
const [startRecordId, startFieldId] = startCell;
|
2041
|
+
const records = aiTable.context.linearRows();
|
2042
|
+
const fields = AITable.getVisibleFields(aiTable);
|
2043
|
+
const selectedCells = new Set();
|
2044
|
+
if (!endCell) {
|
2045
|
+
selectedCells.add(`${startRecordId}:${startFieldId}`);
|
2046
|
+
}
|
2047
|
+
else {
|
2048
|
+
// 数据的存储设计结构,决定了最后一条就是endCell
|
2049
|
+
const lastItem = Array.from(aiTable.selection().selectedCells).pop();
|
2050
|
+
if (endCell.join(':') === lastItem) {
|
2051
|
+
return;
|
2052
|
+
}
|
2053
|
+
const [endRecordId, endFieldId] = endCell;
|
2054
|
+
const startRowIndex = aiTable.context.visibleRowsIndexMap().get(startRecordId);
|
2055
|
+
const endRowIndex = aiTable.context.visibleRowsIndexMap().get(endRecordId);
|
2056
|
+
const startColIndex = aiTable.context.visibleColumnsIndexMap().get(startFieldId);
|
2057
|
+
const endColIndex = aiTable.context.visibleColumnsIndexMap().get(endFieldId);
|
2058
|
+
const minRowIndex = Math.min(startRowIndex, endRowIndex);
|
2059
|
+
const maxRowIndex = Math.max(startRowIndex, endRowIndex);
|
2060
|
+
const minColIndex = Math.min(startColIndex, endColIndex);
|
2061
|
+
const maxColIndex = Math.max(startColIndex, endColIndex);
|
2062
|
+
for (let i = minRowIndex; i <= maxRowIndex; i++) {
|
2063
|
+
for (let j = minColIndex; j <= maxColIndex; j++) {
|
2064
|
+
selectedCells.add(`${records[i]._id}:${fields[j]._id}`);
|
2065
|
+
}
|
2066
|
+
}
|
2067
|
+
}
|
2068
|
+
clearSelection(aiTable);
|
2069
|
+
setSelection(aiTable, {
|
2070
|
+
activeCell: activeCell || startCell,
|
2071
|
+
selectedCells: selectedCells
|
1992
2072
|
});
|
1993
2073
|
}
|
1994
2074
|
|
@@ -3227,6 +3307,17 @@ const FieldModelMap = {
|
|
3227
3307
|
[AITableFieldType.attachment]: new AttachmentField(),
|
3228
3308
|
[AITableFieldType.checkbox]: new CheckboxField()
|
3229
3309
|
};
|
3310
|
+
function selectField(aiTable, fieldId) {
|
3311
|
+
if (aiTable.selection().selectedFields.has(fieldId)) {
|
3312
|
+
return;
|
3313
|
+
}
|
3314
|
+
aiTable.selection.set({
|
3315
|
+
selectedRecords: new Set(),
|
3316
|
+
selectedFields: new Set([fieldId]),
|
3317
|
+
selectedCells: new Set(),
|
3318
|
+
activeCell: null
|
3319
|
+
});
|
3320
|
+
}
|
3230
3321
|
|
3231
3322
|
const aiTableFragmentAttribute = 'ai-table-fragment';
|
3232
3323
|
const buildClipboardData = (aiTable) => {
|
@@ -5196,7 +5287,7 @@ const createActiveCellBorder = (config) => {
|
|
5196
5287
|
!!activeCell.length &&
|
5197
5288
|
aiTable.context.visibleRowsIndexMap().has(activeCell[0]) &&
|
5198
5289
|
aiTable.context.visibleColumnsIndexMap().has(activeCell[1]) &&
|
5199
|
-
!aiTable.
|
5290
|
+
!aiTable.expendCell()?.path) {
|
5200
5291
|
const fieldId = activeCell[1];
|
5201
5292
|
const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, activeCell);
|
5202
5293
|
const checkIsVisible = (rowIndex, columnIndex) => {
|
@@ -7398,7 +7489,13 @@ class AITableFrozenColumnHeads {
|
|
7398
7489
|
const config = this.config();
|
7399
7490
|
if (!config)
|
7400
7491
|
return false;
|
7401
|
-
|
7492
|
+
const selectedRecords = config.aiTable.selection().selectedRecords;
|
7493
|
+
const selectedAllState = selectedRecords.size === config.aiTable.records().length
|
7494
|
+
? AITableSelectAllState.all
|
7495
|
+
: selectedRecords.size === 0
|
7496
|
+
? AITableSelectAllState.none
|
7497
|
+
: AITableSelectAllState.partial;
|
7498
|
+
return selectedAllState === AITableSelectAllState.all;
|
7402
7499
|
});
|
7403
7500
|
this.fieldHeadHeight = computed(() => {
|
7404
7501
|
const coord = this.coordinate();
|
@@ -8564,7 +8661,7 @@ class AITableFillHandle {
|
|
8564
8661
|
const { aiTable, readonly } = this.config();
|
8565
8662
|
const selection = aiTable.selection();
|
8566
8663
|
const hasSelectedCells = selection.selectedCells.size > 0;
|
8567
|
-
const isEditingCell =
|
8664
|
+
const isEditingCell = !!aiTable.editingCell()?.path;
|
8568
8665
|
return hasSelectedCells && !readonly && !isEditingCell;
|
8569
8666
|
});
|
8570
8667
|
this.handleConfig = computed(() => {
|
@@ -8579,8 +8676,11 @@ class AITableFillHandle {
|
|
8579
8676
|
const rowOffset = coordinate.getRowOffset(rowIndex);
|
8580
8677
|
const width = 6;
|
8581
8678
|
const height = 6;
|
8582
|
-
const
|
8583
|
-
|
8679
|
+
const [expandRecordId, expandFieldId] = aiTable.expendCell()?.path || [null, null];
|
8680
|
+
const cellHeight = expandRecordId === recordId && expandFieldId === fieldId && aiTable.expendCell()?.height
|
8681
|
+
? aiTable.expendCell()?.height
|
8682
|
+
? aiTable.expendCell().height + AI_TABLE_CELL_LINE_BORDER
|
8683
|
+
: AI_TABLE_ROW_HEIGHT
|
8584
8684
|
: AI_TABLE_ROW_HEIGHT;
|
8585
8685
|
return {
|
8586
8686
|
x: columnOffset + columnWidth - width / 2 + AI_TABLE_OFFSET,
|
@@ -9424,7 +9524,7 @@ class AITableRenderer {
|
|
9424
9524
|
let expandCellBorder = false;
|
9425
9525
|
let frozenExpandCellBorder = false;
|
9426
9526
|
const { aiTable } = this.config();
|
9427
|
-
const expandCellPath = aiTable.
|
9527
|
+
const expandCellPath = aiTable.expendCell()?.path;
|
9428
9528
|
if (expandCellPath) {
|
9429
9529
|
const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, expandCellPath);
|
9430
9530
|
const isFrozenColumn = columnIndex < aiTable.context.frozenColumnCount();
|
@@ -10185,10 +10285,10 @@ function getCoverCell(aiTable) {
|
|
10185
10285
|
const pointPosition = aiTable.context.pointPosition();
|
10186
10286
|
let fieldId;
|
10187
10287
|
let recordId;
|
10188
|
-
const
|
10189
|
-
if (
|
10190
|
-
fieldId =
|
10191
|
-
recordId =
|
10288
|
+
const expandCellPath = aiTable.expendCell()?.path;
|
10289
|
+
if (expandCellPath) {
|
10290
|
+
fieldId = expandCellPath[1];
|
10291
|
+
recordId = expandCellPath[0];
|
10192
10292
|
}
|
10193
10293
|
else {
|
10194
10294
|
const { fieldId: fieldIdDetail, recordId: recordIdDetail } = getDetailByTargetName(pointPosition.realTargetName) ?? {};
|
@@ -10215,7 +10315,7 @@ function getCoverCell(aiTable) {
|
|
10215
10315
|
field,
|
10216
10316
|
recordId,
|
10217
10317
|
fieldId,
|
10218
|
-
isExpand: !!
|
10318
|
+
isExpand: !!expandCellPath,
|
10219
10319
|
renderComponentDefinition
|
10220
10320
|
};
|
10221
10321
|
}
|
@@ -10443,6 +10543,32 @@ function getStartAndEndCell(selectedCells) {
|
|
10443
10543
|
return { startCell, endCell };
|
10444
10544
|
}
|
10445
10545
|
|
10546
|
+
function toggleSelectRecord(aiTable, recordId) {
|
10547
|
+
if (aiTable.selection().selectedRecords.has(recordId)) {
|
10548
|
+
aiTable.selection().selectedRecords.delete(recordId);
|
10549
|
+
}
|
10550
|
+
else {
|
10551
|
+
aiTable.selection().selectedRecords.add(recordId);
|
10552
|
+
}
|
10553
|
+
const selectedRecords = aiTable.selection().selectedRecords;
|
10554
|
+
aiTable.selection.set({
|
10555
|
+
selectedRecords: selectedRecords,
|
10556
|
+
selectedFields: new Set(),
|
10557
|
+
selectedCells: new Set(),
|
10558
|
+
activeCell: null
|
10559
|
+
});
|
10560
|
+
}
|
10561
|
+
function toggleSelectAllRecords(aiTable, checked) {
|
10562
|
+
if (checked) {
|
10563
|
+
setSelection(aiTable, {
|
10564
|
+
selectedRecords: new Set(aiTable.records().map((item) => item._id))
|
10565
|
+
});
|
10566
|
+
}
|
10567
|
+
else {
|
10568
|
+
clearSelection(aiTable);
|
10569
|
+
}
|
10570
|
+
}
|
10571
|
+
|
10446
10572
|
class NumberCellEditorComponent extends AbstractEditCellEditor {
|
10447
10573
|
updateValue() {
|
10448
10574
|
if (this.modelValue === '') {
|
@@ -10886,165 +11012,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
10886
11012
|
}, template: "<form thyForm name=\"createPropertyForm\" [thyFormValidatorConfig]=\"validatorConfig()\" thyLayout=\"vertical\">\n <thy-form-group thyLabelRequired [thyLabelText]=\"i18nTexts().columnName\">\n <thy-input-group>\n <input\n thyInput\n [thyAutofocus]=\"true\"\n name=\"fieldName\"\n [maxlength]=\"fieldMaxLength\"\n [(ngModel)]=\"aiEditField().name\"\n (ngModelChange)=\"nameChange($event)\"\n required\n [placeholder]=\"i18nTexts().columnNamePlaceholder\"\n [thyUniqueCheck]=\"checkUniqueName\"\n />\n <ng-template #suffix>\n <thy-input-count></thy-input-count>\n </ng-template>\n </thy-input-group>\n </thy-form-group>\n <thy-form-group [thyLabelText]=\"i18nTexts().fieldType\">\n <div class=\"thy-dropdown-menu py-0\">\n <div class=\"ml-n5 mr-n5\">\n <span thyDropdownMenuItem [thyDropdown]=\"menu\" thyTrigger=\"hover\" thyPlacement=\"right\" (click)=\"fieldTypeClick($event)\">\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"selectedFieldOption().icon\"></thy-icon>\n <span thyDropdownMenuItemName>{{ selectedFieldOption().name }}</span>\n <thy-icon thyDropdownMenuItemExtendIcon thyIconName=\"angle-right\" class=\"text-desc\"></thy-icon>\n </span>\n </div>\n </div>\n\n @if (selectedFieldOption().type === aITableFieldType.member) {\n <div class=\"d-flex justify-content-between mt-3\">\n {{ i18nTexts().allowMultipleMembers }}\n <thy-switch\n name=\"isMultipleMember\"\n [(ngModel)]=\"isMultipleMember\"\n (ngModelChange)=\"multipleMemberChange()\"\n thySize=\"sm\"\n ></thy-switch>\n </div>\n }\n </thy-form-group>\n @if (aiExternalTemplate()) {\n <ng-container *ngTemplateOutlet=\"aiExternalTemplate()\"></ng-container>\n }\n <thy-form-group-footer thyAlign=\"right\">\n <button thyButton=\"link-secondary\" (click)=\"cancel()\" thySize=\"sm\">{{ i18nTexts().cancel }}</button>\n <button thyButton=\"primary\" (thyFormSubmit)=\"editFieldProperty()\" thySize=\"sm\">{{ i18nTexts().confirm }}</button>\n </thy-form-group-footer>\n</form>\n\n<thy-dropdown-menu #menu>\n <div class=\"ai-table-field-type-menu\">\n <thy-dropdown-menu-group [thyTitle]=\"i18nTexts().base\">\n @for (item of fieldOptions().base; track $index) {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n active: (item | fieldIsSameOption: aiEditField())\n }\"\n (click)=\"selectFieldType(item)\"\n >\n <thy-icon [thyIconName]=\"item.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n </a>\n }\n </thy-dropdown-menu-group>\n <thy-dropdown-menu-group [thyTitle]=\"i18nTexts().advanced\">\n @for (item of fieldOptions().advanced; track $index) {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n active: (item | fieldIsSameOption: aiEditField())\n }\"\n (click)=\"selectFieldType(item)\"\n >\n <thy-icon [thyIconName]=\"item.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n </a>\n }\n </thy-dropdown-menu-group>\n </div>\n</thy-dropdown-menu>\n", styles: [":host{width:350px}\n"] }]
|
10887
11013
|
}] });
|
10888
11014
|
|
10889
|
-
class AITableGridSelectionService {
|
10890
|
-
constructor() {
|
10891
|
-
this.selectAllState = computed(() => {
|
10892
|
-
const selectedRecords = this.aiTable.selection().selectedRecords;
|
10893
|
-
return selectedRecords.size === this.aiTable.records().length
|
10894
|
-
? AITableSelectAllState.all
|
10895
|
-
: selectedRecords.size === 0
|
10896
|
-
? AITableSelectAllState.none
|
10897
|
-
: AITableSelectAllState.partial;
|
10898
|
-
});
|
10899
|
-
}
|
10900
|
-
initialize(aiTable) {
|
10901
|
-
this.aiTable = aiTable;
|
10902
|
-
}
|
10903
|
-
clearSelection(options) {
|
10904
|
-
this.aiTable.selection.set({
|
10905
|
-
selectedRecords: new Set(),
|
10906
|
-
selectedFields: new Set(),
|
10907
|
-
selectedCells: new Set(),
|
10908
|
-
activeCell: null,
|
10909
|
-
expandCell: null,
|
10910
|
-
editingCell: null,
|
10911
|
-
selectAllState: AITableSelectAllState.none,
|
10912
|
-
expandCellInfo: options?.retainExpandCellInfo ? this.aiTable.selection().expandCellInfo : null
|
10913
|
-
});
|
10914
|
-
}
|
10915
|
-
setActiveCell(activeCell) {
|
10916
|
-
this.aiTable.selection().activeCell = activeCell;
|
10917
|
-
}
|
10918
|
-
setExpandCell(expandCell) {
|
10919
|
-
this.aiTable.selection.set({
|
10920
|
-
...this.aiTable.selection(),
|
10921
|
-
expandCell: expandCell
|
10922
|
-
});
|
10923
|
-
}
|
10924
|
-
setEditingCell(editingCell) {
|
10925
|
-
this.aiTable.selection.set({
|
10926
|
-
...this.aiTable.selection(),
|
10927
|
-
editingCell: editingCell
|
10928
|
-
});
|
10929
|
-
}
|
10930
|
-
selectField(fieldId) {
|
10931
|
-
if (this.aiTable.selection().selectedFields.has(fieldId)) {
|
10932
|
-
return;
|
10933
|
-
}
|
10934
|
-
this.clearSelection();
|
10935
|
-
this.aiTable.selection().selectedFields.add(fieldId);
|
10936
|
-
}
|
10937
|
-
get selectedFields() {
|
10938
|
-
return this.aiTable.selection().selectedFields;
|
10939
|
-
}
|
10940
|
-
get selectedRecords() {
|
10941
|
-
return this.aiTable.selection().selectedRecords;
|
10942
|
-
}
|
10943
|
-
selectRecord(recordId) {
|
10944
|
-
if (this.aiTable.selection().selectedRecords.has(recordId)) {
|
10945
|
-
this.aiTable.selection().selectedRecords.delete(recordId);
|
10946
|
-
}
|
10947
|
-
else {
|
10948
|
-
this.aiTable.selection().selectedRecords.add(recordId);
|
10949
|
-
}
|
10950
|
-
const selectedRecords = this.aiTable.selection().selectedRecords;
|
10951
|
-
this.aiTable.selection.set({
|
10952
|
-
selectedRecords: selectedRecords,
|
10953
|
-
selectedFields: new Set(),
|
10954
|
-
selectedCells: new Set(),
|
10955
|
-
activeCell: null,
|
10956
|
-
expandCell: null,
|
10957
|
-
editingCell: null,
|
10958
|
-
selectAllState: this.selectAllState()
|
10959
|
-
});
|
10960
|
-
}
|
10961
|
-
toggleSelectAll(checked) {
|
10962
|
-
if (checked) {
|
10963
|
-
if (this.aiTable.records().length === 0) {
|
10964
|
-
this.aiTable.selection.set({
|
10965
|
-
...this.aiTable.selection(),
|
10966
|
-
selectAllState: AITableSelectAllState.all
|
10967
|
-
});
|
10968
|
-
}
|
10969
|
-
else {
|
10970
|
-
this.aiTable.records().forEach((item) => {
|
10971
|
-
this.selectRecord(item._id);
|
10972
|
-
});
|
10973
|
-
}
|
10974
|
-
}
|
10975
|
-
else {
|
10976
|
-
this.clearSelection();
|
10977
|
-
}
|
10978
|
-
}
|
10979
|
-
updateSelect(event) {
|
10980
|
-
const target = event?.target;
|
10981
|
-
if (!target) {
|
10982
|
-
return;
|
10983
|
-
}
|
10984
|
-
const cellDom = target.closest('.grid-cell');
|
10985
|
-
const colDom = target.closest('.grid-field');
|
10986
|
-
const checkbox = target.tagName === 'INPUT' && target.type === 'checkbox' && target.closest('.grid-checkbox');
|
10987
|
-
const fieldAction = target.closest('.grid-field-action');
|
10988
|
-
if (cellDom) {
|
10989
|
-
const fieldId = cellDom.getAttribute('fieldId');
|
10990
|
-
const recordId = cellDom.getAttribute('recordId');
|
10991
|
-
fieldId && recordId && this.selectCells([recordId, fieldId]);
|
10992
|
-
}
|
10993
|
-
if (colDom && !fieldAction) {
|
10994
|
-
const fieldId = colDom.getAttribute('fieldId');
|
10995
|
-
fieldId && this.selectField(fieldId);
|
10996
|
-
}
|
10997
|
-
if (!cellDom && !colDom && !checkbox) {
|
10998
|
-
this.clearSelection();
|
10999
|
-
}
|
11000
|
-
}
|
11001
|
-
selectCells(startCell, endCell, activeCell) {
|
11002
|
-
const [startRecordId, startFieldId] = startCell;
|
11003
|
-
const records = this.aiTable.context.linearRows();
|
11004
|
-
const fields = AITable.getVisibleFields(this.aiTable);
|
11005
|
-
const selectedCells = new Set();
|
11006
|
-
if (!endCell) {
|
11007
|
-
selectedCells.add(`${startRecordId}:${startFieldId}`);
|
11008
|
-
}
|
11009
|
-
else {
|
11010
|
-
// 数据的存储设计结构,决定了最后一条就是endCell
|
11011
|
-
const lastItem = Array.from(this.aiTable.selection().selectedCells).pop();
|
11012
|
-
if (endCell.join(':') === lastItem) {
|
11013
|
-
return;
|
11014
|
-
}
|
11015
|
-
const [endRecordId, endFieldId] = endCell;
|
11016
|
-
const startRowIndex = this.aiTable.context.visibleRowsIndexMap().get(startRecordId);
|
11017
|
-
const endRowIndex = this.aiTable.context.visibleRowsIndexMap().get(endRecordId);
|
11018
|
-
const startColIndex = this.aiTable.context.visibleColumnsIndexMap().get(startFieldId);
|
11019
|
-
const endColIndex = this.aiTable.context.visibleColumnsIndexMap().get(endFieldId);
|
11020
|
-
const minRowIndex = Math.min(startRowIndex, endRowIndex);
|
11021
|
-
const maxRowIndex = Math.max(startRowIndex, endRowIndex);
|
11022
|
-
const minColIndex = Math.min(startColIndex, endColIndex);
|
11023
|
-
const maxColIndex = Math.max(startColIndex, endColIndex);
|
11024
|
-
for (let i = minRowIndex; i <= maxRowIndex; i++) {
|
11025
|
-
for (let j = minColIndex; j <= maxColIndex; j++) {
|
11026
|
-
selectedCells.add(`${records[i]._id}:${fields[j]._id}`);
|
11027
|
-
}
|
11028
|
-
}
|
11029
|
-
}
|
11030
|
-
this.clearSelection();
|
11031
|
-
this.aiTable.selection.set({
|
11032
|
-
...this.aiTable.selection(),
|
11033
|
-
activeCell: activeCell || startCell,
|
11034
|
-
selectedCells: selectedCells
|
11035
|
-
});
|
11036
|
-
}
|
11037
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
11038
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridSelectionService }); }
|
11039
|
-
}
|
11040
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridSelectionService, decorators: [{
|
11041
|
-
type: Injectable
|
11042
|
-
}], ctorParameters: () => [] });
|
11043
|
-
|
11044
11015
|
class AITableContextMenu extends ThyDropdownAbstractMenu {
|
11045
11016
|
constructor() {
|
11046
11017
|
super(...arguments);
|
11047
|
-
this.aiTableGridSelectionService = inject(AITableGridSelectionService);
|
11048
11018
|
this.notifyService = inject(ThyNotifyService);
|
11049
11019
|
this.thyPopoverRef = inject(ThyPopoverRef);
|
11050
11020
|
this.aiTable = input.required();
|
@@ -11055,8 +11025,7 @@ class AITableContextMenu extends ThyDropdownAbstractMenu {
|
|
11055
11025
|
}
|
11056
11026
|
execute(menu) {
|
11057
11027
|
if ((menu.disabled && !menu.disabled(this.aiTable(), this.targetName(), this.position())) || !menu.disabled) {
|
11058
|
-
menu.exec &&
|
11059
|
-
menu.exec(this.aiTable(), this.targetName(), this.position(), this.aiTableGridSelectionService, this.notifyService, menu.count);
|
11028
|
+
menu.exec && menu.exec(this.aiTable(), this.targetName(), this.position(), this.notifyService, menu.count);
|
11060
11029
|
}
|
11061
11030
|
}
|
11062
11031
|
inputNumberFocus(e) {
|
@@ -11106,7 +11075,6 @@ class AITableGridEventService {
|
|
11106
11075
|
this.globalMousedownEvent$ = new Subject();
|
11107
11076
|
this.destroyRef = inject(DestroyRef);
|
11108
11077
|
this.thyPopover = inject(ThyPopover);
|
11109
|
-
this.selectionService = inject(AITableGridSelectionService);
|
11110
11078
|
}
|
11111
11079
|
initialize(aiTable, aiFieldRenderers) {
|
11112
11080
|
this.aiTable = aiTable;
|
@@ -11225,7 +11193,7 @@ class AITableGridEventService {
|
|
11225
11193
|
const fieldType = this.aiTable.fieldsMap()[fieldId].type;
|
11226
11194
|
const { component, isInternalComponent } = this.getEditorComponent(fieldType);
|
11227
11195
|
const offsetOriginPosition = this.getOriginPosition(aiTable, options);
|
11228
|
-
|
11196
|
+
setEditingCell(aiTable, { path: [recordId, fieldId] });
|
11229
11197
|
this.cellEditorPopoverRef = this.thyPopover.open(component, {
|
11230
11198
|
viewContainerRef: isInternalComponent ? undefined : options?.viewContainerRef,
|
11231
11199
|
origin: container,
|
@@ -11273,7 +11241,7 @@ class AITableGridEventService {
|
|
11273
11241
|
this.cellEditorPopoverRef.afterClosed().subscribe(() => {
|
11274
11242
|
wheelEvent.unsubscribe();
|
11275
11243
|
this.cellEditorPopoverRef = null;
|
11276
|
-
this.
|
11244
|
+
closeEditingCell(this.aiTable);
|
11277
11245
|
});
|
11278
11246
|
this.cellEditorPopoverRef.componentInstance.updateFieldValues.subscribe((value) => {
|
11279
11247
|
options.updateFieldValues(value);
|
@@ -11285,7 +11253,7 @@ class AITableGridEventService {
|
|
11285
11253
|
if (this.cellEditorPopoverRef) {
|
11286
11254
|
this.cellEditorPopoverRef.close();
|
11287
11255
|
this.cellEditorPopoverRef = null;
|
11288
|
-
this.
|
11256
|
+
closeEditingCell(this.aiTable);
|
11289
11257
|
}
|
11290
11258
|
}
|
11291
11259
|
getCurrentEditCell() {
|
@@ -11475,7 +11443,6 @@ class AITableGridBase {
|
|
11475
11443
|
this.destroyRef = inject(DestroyRef);
|
11476
11444
|
this.aiTableGridFieldService = inject(AITableGridFieldService);
|
11477
11445
|
this.aiTableGridEventService = inject(AITableGridEventService);
|
11478
|
-
this.aiTableGridSelectionService = inject(AITableGridSelectionService);
|
11479
11446
|
}
|
11480
11447
|
ngOnInit() {
|
11481
11448
|
this.initAITable();
|
@@ -11493,7 +11460,6 @@ class AITableGridBase {
|
|
11493
11460
|
}
|
11494
11461
|
initService() {
|
11495
11462
|
this.aiTableGridEventService.initialize(this.aiTable, this.aiFieldConfig()?.fieldRenderers);
|
11496
|
-
this.aiTableGridSelectionService.initialize(this.aiTable);
|
11497
11463
|
this.aiTableGridEventService.registerEvents(this.elementRef.nativeElement);
|
11498
11464
|
this.aiTableGridFieldService.initAIFieldConfig(this.aiFieldConfig());
|
11499
11465
|
AI_TABLE_GRID_FIELD_SERVICE_MAP.set(this.aiTable, this.aiTableGridFieldService);
|
@@ -11506,11 +11472,11 @@ class AITableGridBase {
|
|
11506
11472
|
}
|
11507
11473
|
this.aiAddRecord.emit(options || {});
|
11508
11474
|
}
|
11509
|
-
|
11510
|
-
this.
|
11475
|
+
toggleSelectRecord(recordId) {
|
11476
|
+
toggleSelectRecord(this.aiTable, recordId);
|
11511
11477
|
}
|
11512
11478
|
toggleSelectAll(checked) {
|
11513
|
-
this.
|
11479
|
+
toggleSelectAllRecords(this.aiTable, checked);
|
11514
11480
|
}
|
11515
11481
|
addField(gridColumnBlank, position) {
|
11516
11482
|
if (this.aiMaxFields() && this.aiTable.fields().length >= this.aiMaxFields()) {
|
@@ -11540,11 +11506,6 @@ class AITableGridBase {
|
|
11540
11506
|
this.aiTableGridEventService.dblClickEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
|
11541
11507
|
this.dblClick(event);
|
11542
11508
|
});
|
11543
|
-
this.aiTableGridEventService.mousedownEvent$
|
11544
|
-
.pipe(mergeWith(this.aiTableGridEventService.globalMousedownEvent$), takeUntilDestroyed(this.destroyRef))
|
11545
|
-
.subscribe((event) => {
|
11546
|
-
this.aiTableGridSelectionService.updateSelect(event);
|
11547
|
-
});
|
11548
11509
|
});
|
11549
11510
|
}
|
11550
11511
|
dblClick(event) {
|
@@ -11581,7 +11542,7 @@ class AITableDomGrid extends AITableGridBase {
|
|
11581
11542
|
});
|
11582
11543
|
}
|
11583
11544
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableDomGrid, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
11584
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableDomGrid, isStandalone: true, selector: "ai-table-dom-grid", host: { classAttribute: "ai-table-grid ai-table-dom-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], usesInheritance: true, ngImport: i0, template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <!-- [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\" -->\n <div\n #cell\n class=\"grid-cell\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SelectOptionPipe, name: "selectOption" }, { kind: "pipe", type: SelectOptionsPipe, name: "selectOptions" }, { kind: "component", type: ThyTag, selector: "thy-tag,[thyTag]", inputs: ["thyTag", "thyShape", "thyColor", "thyTheme", "thySize", "thyHoverable"] }, { kind: "ngmodule", type: ThyPopoverModule }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyRate, selector: "thy-rate", inputs: ["thyCount", "thyDisabled", "thyAllowHalf", "thyAllowClear", "thyTooltips", "thyIconTemplate"], outputs: ["thyItemHoverChange"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "pipe", type: ThyDatePickerFormatPipe, name: "thyDatePickerFormat" }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "ngmodule", type: ThyCheckboxModule }, { kind: "component", type: i3$1.ThyCheckbox, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: ThyAvatarModule }, { kind: "component", type: i4.ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError", "thySizeChange"] }, { kind: "component", type: i4.ThyAvatarList, selector: "thy-avatar-list", inputs: ["thyMode", "thyAvatarSize"] }, { kind: "pipe", type: IsSelectRecordPipe, name: "isSelectRecord" }, { kind: "component", type: SelectOptionComponent, selector: "select-option", inputs: ["field", "displayOption"] }, { kind: "pipe", type: UserPipe, name: "user" }, { kind: "pipe", type: SelectSettingPipe, name: "selectSetting" }, { kind: "pipe", type: MemberSettingPipe, name: "memberSetting" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
11545
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableDomGrid, isStandalone: true, selector: "ai-table-dom-grid", host: { classAttribute: "ai-table-grid ai-table-dom-grid" }, providers: [AITableGridEventService, AITableGridFieldService], usesInheritance: true, ngImport: i0, template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"toggleSelectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <!-- [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\" -->\n <div\n #cell\n class=\"grid-cell\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SelectOptionPipe, name: "selectOption" }, { kind: "pipe", type: SelectOptionsPipe, name: "selectOptions" }, { kind: "component", type: ThyTag, selector: "thy-tag,[thyTag]", inputs: ["thyTag", "thyShape", "thyColor", "thyTheme", "thySize", "thyHoverable"] }, { kind: "ngmodule", type: ThyPopoverModule }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyRate, selector: "thy-rate", inputs: ["thyCount", "thyDisabled", "thyAllowHalf", "thyAllowClear", "thyTooltips", "thyIconTemplate"], outputs: ["thyItemHoverChange"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "pipe", type: ThyDatePickerFormatPipe, name: "thyDatePickerFormat" }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "ngmodule", type: ThyCheckboxModule }, { kind: "component", type: i3$1.ThyCheckbox, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: ThyAvatarModule }, { kind: "component", type: i4.ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError", "thySizeChange"] }, { kind: "component", type: i4.ThyAvatarList, selector: "thy-avatar-list", inputs: ["thyMode", "thyAvatarSize"] }, { kind: "pipe", type: IsSelectRecordPipe, name: "isSelectRecord" }, { kind: "component", type: SelectOptionComponent, selector: "select-option", inputs: ["field", "displayOption"] }, { kind: "pipe", type: UserPipe, name: "user" }, { kind: "pipe", type: SelectSettingPipe, name: "selectSetting" }, { kind: "pipe", type: MemberSettingPipe, name: "memberSetting" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
11585
11546
|
}
|
11586
11547
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableDomGrid, decorators: [{
|
11587
11548
|
type: Component,
|
@@ -11609,7 +11570,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
11609
11570
|
UserPipe,
|
11610
11571
|
SelectSettingPipe,
|
11611
11572
|
MemberSettingPipe
|
11612
|
-
], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <!-- [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\" -->\n <div\n #cell\n class=\"grid-cell\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n" }]
|
11573
|
+
], providers: [AITableGridEventService, AITableGridFieldService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"toggleSelectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <!-- [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\" -->\n <div\n #cell\n class=\"grid-cell\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n" }]
|
11613
11574
|
}] });
|
11614
11575
|
|
11615
11576
|
class AITableScrollControllerService {
|
@@ -11812,7 +11773,7 @@ class AITableDragComponent {
|
|
11812
11773
|
this.horizontalBar = input();
|
11813
11774
|
this.verticalBar = input();
|
11814
11775
|
this.dragEnd = output();
|
11815
|
-
this.
|
11776
|
+
this.aiTableGridEventService = inject(AITableGridEventService);
|
11816
11777
|
this.render2 = inject(Renderer2);
|
11817
11778
|
this.scrollControllerService = inject(AITableScrollControllerService);
|
11818
11779
|
this.elementRef = inject((ElementRef));
|
@@ -11877,7 +11838,7 @@ class AITableDragComponent {
|
|
11877
11838
|
});
|
11878
11839
|
}
|
11879
11840
|
handleDragStateChange() {
|
11880
|
-
const drag = this.
|
11841
|
+
const drag = this.aiTableGridEventService.aiTable.dragState?.();
|
11881
11842
|
if (!drag) {
|
11882
11843
|
this.aiTableDrag = null;
|
11883
11844
|
return;
|
@@ -11916,7 +11877,7 @@ class AITableDragComponent {
|
|
11916
11877
|
}
|
11917
11878
|
}
|
11918
11879
|
movingColumn(drag, moveX, direction) {
|
11919
|
-
const aiTable = this.
|
11880
|
+
const aiTable = this.aiTableGridEventService.aiTable;
|
11920
11881
|
const scroll = { x: this.horizontalBarElement?.scrollLeft || 0, y: 0 };
|
11921
11882
|
const coordinate = drag.coordinate;
|
11922
11883
|
const fields = aiTable.gridData().fields;
|
@@ -12043,7 +12004,7 @@ class AITableDragComponent {
|
|
12043
12004
|
}
|
12044
12005
|
movingColumnWidth(drag, moveX) {
|
12045
12006
|
this.setCursorStyle('col-resize');
|
12046
|
-
const aiTable = this.
|
12007
|
+
const aiTable = this.aiTableGridEventService.aiTable;
|
12047
12008
|
const visibleColumnIndexMap = aiTable.context.visibleColumnsIndexMap();
|
12048
12009
|
const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value) || 0;
|
12049
12010
|
const sourceColumnStartX = drag.coordinate.getColumnOffset(sourceColumnIndex);
|
@@ -12073,7 +12034,7 @@ class AITableDragComponent {
|
|
12073
12034
|
};
|
12074
12035
|
}
|
12075
12036
|
movingRecord(drag, moveY) {
|
12076
|
-
const aiTable = this.
|
12037
|
+
const aiTable = this.aiTableGridEventService.aiTable;
|
12077
12038
|
const scroll = { x: 0, y: this.verticalBarElement?.scrollTop || 0 };
|
12078
12039
|
const coordinate = drag.coordinate;
|
12079
12040
|
const visibleRowIndexMap = aiTable.context.visibleRowsIndexMap();
|
@@ -12449,8 +12410,7 @@ class AITableGrid extends AITableGridBase {
|
|
12449
12410
|
this.aiTable.selection.update((item) => {
|
12450
12411
|
return {
|
12451
12412
|
...item,
|
12452
|
-
selectedRecords
|
12453
|
-
selectAllState: this.aiTableGridSelectionService.selectAllState()
|
12413
|
+
selectedRecords
|
12454
12414
|
};
|
12455
12415
|
});
|
12456
12416
|
});
|
@@ -12562,7 +12522,7 @@ class AITableGrid extends AITableGridBase {
|
|
12562
12522
|
endCell = [recordId, fieldId];
|
12563
12523
|
}
|
12564
12524
|
if (startCell && !!startCell.length) {
|
12565
|
-
this.
|
12525
|
+
selectCells(this.aiTable, startCell, endCell, activeCell);
|
12566
12526
|
this.scrollViewToCell(pos, startCell, endCell, this.coordinate(), this.horizontalBarRef(), this.verticalBarRef());
|
12567
12527
|
}
|
12568
12528
|
}
|
@@ -12584,7 +12544,7 @@ class AITableGrid extends AITableGridBase {
|
|
12584
12544
|
mouseEvent.preventDefault();
|
12585
12545
|
if (!fieldId)
|
12586
12546
|
return;
|
12587
|
-
this.
|
12547
|
+
selectField(this.aiTable, fieldId);
|
12588
12548
|
this.handleFieldDragStart();
|
12589
12549
|
return;
|
12590
12550
|
case AI_TABLE_FIELD_HEAD_OPACITY_LINE:
|
@@ -12598,16 +12558,15 @@ class AITableGrid extends AITableGridBase {
|
|
12598
12558
|
return;
|
12599
12559
|
const startCell = [recordId, fieldId];
|
12600
12560
|
this.updateDragSelectState(true, startCell);
|
12601
|
-
const [expandRecordId, expandFieldId] = this.aiTable.
|
12561
|
+
const [expandRecordId, expandFieldId] = this.aiTable.expendCell()?.path || [null, null];
|
12602
12562
|
if (expandRecordId !== recordId || expandFieldId !== fieldId) {
|
12603
12563
|
const field = this.aiTable.fieldsMap()[fieldId];
|
12564
|
+
closeEditingCell(this.aiTable);
|
12565
|
+
selectCells(this.aiTable, startCell);
|
12566
|
+
closeExpendCell(this.aiTable);
|
12604
12567
|
if (field.type === AITableFieldType.text) {
|
12605
|
-
this.aiTableGridSelectionService.clearSelection({ retainExpandCellInfo: true });
|
12606
12568
|
expandCell(this.aiTable, [recordId, fieldId]);
|
12607
12569
|
}
|
12608
|
-
else {
|
12609
|
-
this.aiTableGridSelectionService.selectCells(startCell);
|
12610
|
-
}
|
12611
12570
|
}
|
12612
12571
|
return;
|
12613
12572
|
case AI_TABLE_FILL_HANDLE:
|
@@ -12641,7 +12600,7 @@ class AITableGrid extends AITableGridBase {
|
|
12641
12600
|
case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX:
|
12642
12601
|
return;
|
12643
12602
|
default:
|
12644
|
-
this.
|
12603
|
+
clearCoverCell(this.aiTable);
|
12645
12604
|
}
|
12646
12605
|
}
|
12647
12606
|
stageMouseup(e) {
|
@@ -12731,23 +12690,23 @@ class AITableGrid extends AITableGridBase {
|
|
12731
12690
|
return;
|
12732
12691
|
switch (targetName) {
|
12733
12692
|
case AI_TABLE_ROW_ADD_BUTTON: {
|
12734
|
-
this.
|
12693
|
+
clearCoverCell(this.aiTable);
|
12735
12694
|
this.addRecord();
|
12736
12695
|
break;
|
12737
12696
|
}
|
12738
12697
|
case AI_TABLE_ROW_SELECT_CHECKBOX: {
|
12739
12698
|
const { rowIndex: pointRowIndex } = context.pointPosition();
|
12740
12699
|
const pointRecordId = context.linearRows()[pointRowIndex]?._id;
|
12741
|
-
this.
|
12700
|
+
this.toggleSelectRecord(pointRecordId);
|
12742
12701
|
break;
|
12743
12702
|
}
|
12744
12703
|
case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX: {
|
12745
|
-
const isChecked = this.aiTable.selection().
|
12704
|
+
const isChecked = this.aiTable.selection().selectedRecords.size === this.aiTable.records().length;
|
12746
12705
|
this.toggleSelectAll(!isChecked);
|
12747
12706
|
break;
|
12748
12707
|
}
|
12749
12708
|
case AI_TABLE_FIELD_ADD_BUTTON: {
|
12750
|
-
this.
|
12709
|
+
clearCoverCell(this.aiTable);
|
12751
12710
|
const fieldGroupRect = e.event.target.getParent()?.getClientRect();
|
12752
12711
|
const containerRect = this.containerElement().getBoundingClientRect();
|
12753
12712
|
this.addField(this.containerElement(), {
|
@@ -12848,7 +12807,7 @@ class AITableGrid extends AITableGridBase {
|
|
12848
12807
|
!e.target.closest(AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS)), takeUntilDestroyed(this.destroyRef))
|
12849
12808
|
.subscribe(() => {
|
12850
12809
|
this.updateDragSelectState(false, null);
|
12851
|
-
this.
|
12810
|
+
clearCoverCell(this.aiTable);
|
12852
12811
|
});
|
12853
12812
|
}
|
12854
12813
|
updateDragSelectState(isDragging, startCell) {
|
@@ -12968,10 +12927,10 @@ class AITableGrid extends AITableGridBase {
|
|
12968
12927
|
});
|
12969
12928
|
}
|
12970
12929
|
handleFieldDragStart() {
|
12971
|
-
if (!this.aiReadonly() && this.
|
12930
|
+
if (!this.aiReadonly() && this.aiTable.selection().selectedFields.size > 0) {
|
12972
12931
|
this.setDragState({
|
12973
12932
|
type: DragType.field,
|
12974
|
-
sourceIds: this.
|
12933
|
+
sourceIds: this.aiTable.selection().selectedFields,
|
12975
12934
|
coordinate: this.coordinate()
|
12976
12935
|
});
|
12977
12936
|
}
|
@@ -13090,7 +13049,7 @@ class AITableGrid extends AITableGridBase {
|
|
13090
13049
|
newEndCell = [nextRecord._id, nextField._id];
|
13091
13050
|
newActiveCell = null;
|
13092
13051
|
}
|
13093
|
-
this.
|
13052
|
+
selectCells(this.aiTable, newStartCell, newEndCell, newActiveCell);
|
13094
13053
|
}
|
13095
13054
|
}
|
13096
13055
|
},
|
@@ -13101,18 +13060,18 @@ class AITableGrid extends AITableGridBase {
|
|
13101
13060
|
});
|
13102
13061
|
}
|
13103
13062
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
13104
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService,
|
13063
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableScrollControllerService], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "verticalBarRef", first: true, predicate: ["verticalBar"], descendants: true, isSignal: true }, { propertyName: "horizontalBarRef", first: true, predicate: ["horizontalBar"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n (koWheel)=\"stageWheel($event)\"\n >\n @if (domToolTips().length > 0) {\n <div\n class=\"ai-table-left-background-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n @for (domToolTip of domToolTips(); track trackBy(idx, domToolTip); let idx = $index) {\n <div\n class=\"ai-table-left-background\"\n [thyTooltip]=\"i18nTexts().rowAddFilterTooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n >\n <thy-icon class=\"text-white\" thyIconName=\"filter-line\"></thy-icon>\n </div>\n }\n </div>\n }\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag [horizontalBar]=\"horizontalBarRef()\" [verticalBar]=\"verticalBarRef()\" (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n", dependencies: [{ kind: "component", type: AITableRenderer, selector: "ai-table-renderer", inputs: ["config"], outputs: ["koMousemove", "koMousedown", "koMouseup", "koContextmenu", "koWheel", "koClick", "koDblclick", "koMouseleave", "onScrollPosition"] }, { kind: "component", type: AITableDragComponent, selector: "ai-table-drag", inputs: ["horizontalBar", "verticalBar"], outputs: ["dragEnd"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
13105
13064
|
}
|
13106
13065
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGrid, decorators: [{
|
13107
13066
|
type: Component,
|
13108
13067
|
args: [{ selector: 'ai-table-grid', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
13109
13068
|
class: 'ai-table-grid'
|
13110
|
-
}, imports: [AITableRenderer, AITableDragComponent, ThyTooltipDirective, ThyIcon], providers: [AITableGridEventService, AITableGridFieldService,
|
13069
|
+
}, imports: [AITableRenderer, AITableDragComponent, ThyTooltipDirective, ThyIcon], providers: [AITableGridEventService, AITableGridFieldService, AITableScrollControllerService], template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n (koWheel)=\"stageWheel($event)\"\n >\n @if (domToolTips().length > 0) {\n <div\n class=\"ai-table-left-background-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n @for (domToolTip of domToolTips(); track trackBy(idx, domToolTip); let idx = $index) {\n <div\n class=\"ai-table-left-background\"\n [thyTooltip]=\"i18nTexts().rowAddFilterTooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n >\n <thy-icon class=\"text-white\" thyIconName=\"filter-line\"></thy-icon>\n </div>\n }\n </div>\n }\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag [horizontalBar]=\"horizontalBarRef()\" [verticalBar]=\"verticalBarRef()\" (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n" }]
|
13111
13070
|
}], ctorParameters: () => [] });
|
13112
13071
|
|
13113
13072
|
/**
|
13114
13073
|
* Generated bundle index. Do not edit.
|
13115
13074
|
*/
|
13116
13075
|
|
13117
|
-
export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellCheckbox, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCellText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenFieldShadow, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText,
|
13076
|
+
export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellCheckbox, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCellText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenFieldShadow, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableHoverRowHeads, AITableIcon, AITableMemberType, AITableMouseDownType, AITableOtherRows, AITablePlaceholderCells, AITableQueries, AITableRenderer, AITableRowType, AITableScrollableGroup, AITableSelectAllState, AITableTextComponent, AI_TABLE_ACTION_COMMON_RADIUS, AI_TABLE_ACTION_COMMON_RIGHT_PADDING, AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_AUTO_SCROLL_BOTTOM_THRESHOLD, AI_TABLE_AUTO_SCROLL_LEFT_THRESHOLD, AI_TABLE_AUTO_SCROLL_RIGHT_THRESHOLD, AI_TABLE_AUTO_SCROLL_TOP_THRESHOLD, AI_TABLE_BLANK, AI_TABLE_CELL, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_ATTACHMENT_ADD, AI_TABLE_CELL_ATTACHMENT_FILE, AI_TABLE_CELL_BORDER, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EDIT, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_CELL_FIELD_ITEM_HEIGHT, AI_TABLE_CELL_LINE_BORDER, AI_TABLE_CELL_MAX_ROW_COUNT, AI_TABLE_CELL_MEMBER_ITEM_HEIGHT, AI_TABLE_CELL_MEMBER_ITEM_PADDING, AI_TABLE_CELL_MEMBER_MAX_HEIGHT, AI_TABLE_CELL_MULTI_DOT_RADIUS, AI_TABLE_CELL_MULTI_ITEM_MARGIN_LEFT, AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH, AI_TABLE_CELL_MULTI_PADDING_LEFT, AI_TABLE_CELL_MULTI_PADDING_TOP, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DEFAULT_COLUMN_WIDTH, AI_TABLE_DOT_RADIUS, AI_TABLE_FIELD_ADD_BUTTON, AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_OPACITY_LINE, AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_FIELD_ITEM_MARGIN_RIGHT, AI_TABLE_FIELD_MAX_WIDTH, AI_TABLE_FIELD_MIDDLE_WIDTH, AI_TABLE_FIELD_MINI_WIDTH, AI_TABLE_FIELD_MIN_WIDTH, AI_TABLE_FIELD_STAT_BG, AI_TABLE_FIELD_STAT_CONTAINER_HEIGHT, AI_TABLE_FIELD_STAT_INNER_HEIGHT, AI_TABLE_FILE_ICON_ITEM_HEIGHT, AI_TABLE_FILE_ICON_SIZE, AI_TABLE_FILL_HANDLE, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_INDEX_FIELD_TEXT, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MEMBER_ITEM_PADDING_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_OPTION_MULTI_ITEM_FONT_SIZE, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_RATE_MAX, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_DRAG, AI_TABLE_ROW_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEAD_WIDTH_AND_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_SCROLL_BAR_SIZE, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AI_TABLE_TEXT_LINE_HEIGHT, AbstractEditCellEditor, AddOutlinedPath, AngleDownPath, AttachmentField, AttachmentPath, CellDrawer, Check, Colors, ColumnCalendarFilledPath, ColumnCheckboxFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnRichTextFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, CoverCellBase, DBL_CLICK_EDIT_TYPE, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_STYLE, DEFAULT_FONT_WEIGHT, DEFAULT_ICON_SHAPE, DEFAULT_ICON_SIZE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_ELLIPSIS, DEFAULT_TEXT_FILL, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_LISTENING, DEFAULT_TEXT_MAX_CACHE, DEFAULT_TEXT_MAX_HEIGHT, DEFAULT_TEXT_SCALE, DEFAULT_TEXT_TRANSFORMS_ENABLED, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, DEFAULT_TEXT_VERTICAL_ALIGN_TOP, DEFAULT_TEXT_WRAP, DEFAULT_WRAP_TEXT_MAX_ROW, DateCellEditorComponent, DateField, DepartmentOutlinedPath, Drawer, EditPath, FONT_SIZE_SM, FieldModelMap, IconPathMap, IsSelectRecordPipe, KO_CONTAINER_TOKEN, KoComponent, KoContainer, KoShape, KoShapeTypes, KoStage, LinkCellEditorComponent, LinkField, MIN_COLUMN_WIDTH, MemberField, MemberSettingPipe, MoreStandOutlinedPath, NumberCellEditorComponent, NumberField, ProgressField, RateField, RendererContext, RichTextField, RowDragPath, RowHeight, SelectCellEditorComponent, SelectField, SelectOptionComponent, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, StarFill, TextCellEditorComponent, TextField, TextMeasure, Unchecked, UserPipe, WebOutlinedPath, aiTableFragmentAttribute, aiTableImageConfigToKonvaConfig, aiTableRectConfigToKonvaConfig, aiTableTextConfigToKonvaConfig, applyNodeProps, buildClipboardData, buildGridData, buildGridLinearRows, castToString, cellDrawer, clearCells, clearCoverCell, clearSelectedCells, clearSelection, clearSelectionFields, clearSelectionRecords, closeEditingCell, closeExpendCell, compareNumber, compareOption, compareString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, createListener, dragFillHighlightArea, drawer, expandCell, extractLinkUrl, extractText, generateNewName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesSizeMap, getCoverCell, getDateFieldValues, getDefaultFieldOptions, getDefaultFieldValue, getDefaultI18nTextByKey, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldOptionByField, getFieldOptionMap, getFieldOptions, getFieldValue, getFileThumbnailSvgString, getFillDirection, getHoverEditorBoxOffset, getHoverEditorSpace, getI18nTextByKey, getMousePosition, getName, getOptionsByFieldAndRecords, getPlaceHolderCellsConfigs, getStartAndEndCell, getSystemFieldValue, getTargetName, getTextWidth, getVisibleRangeInfo, graphemeSplitter, handleMouseStyle, hasIntersect, idCreator, idsCreator, imageCache, isActiveCell, isArrayField, isCellMatchKeywords, isClipboardReadSupported, isClipboardReadTextSupported, isClipboardWriteSupported, isClipboardWriteTextSupported, isDateFiled, isEmptyOrNot, isMac, isMeetFilter, isNumberFiled, isSameFieldOption, isSelectedField, isSystemField, isVirtualKey, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, performFill, processPastedValueForSelect, readFromClipboard, scrollMax, selectCells, selectField, setActiveCell, setEditingCell, setExpandCellInfo, setMouseStyle, setSelection, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, toggleSelectAllRecords, toggleSelectRecord, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
|
13118
13077
|
//# sourceMappingURL=ai-table-grid.mjs.map
|