@univerjs/sheets-table-ui 1.0.0-rc.0 → 1.0.1

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.
Files changed (96) hide show
  1. package/lib/cjs/index.js +629 -206
  2. package/lib/cjs/locale/ar-SA.js +11 -1
  3. package/lib/cjs/locale/ca-ES.js +11 -1
  4. package/lib/cjs/locale/de-DE.js +11 -1
  5. package/lib/cjs/locale/en-US.js +11 -1
  6. package/lib/cjs/locale/es-ES.js +11 -1
  7. package/lib/cjs/locale/fa-IR.js +11 -1
  8. package/lib/cjs/locale/fr-FR.js +11 -1
  9. package/lib/cjs/locale/id-ID.js +11 -1
  10. package/lib/cjs/locale/it-IT.js +11 -1
  11. package/lib/cjs/locale/ja-JP.js +11 -1
  12. package/lib/cjs/locale/ko-KR.js +11 -1
  13. package/lib/cjs/locale/pl-PL.js +11 -1
  14. package/lib/cjs/locale/pt-BR.js +11 -1
  15. package/lib/cjs/locale/ru-RU.js +11 -1
  16. package/lib/cjs/locale/sk-SK.js +11 -1
  17. package/lib/cjs/locale/vi-VN.js +11 -1
  18. package/lib/cjs/locale/zh-CN.js +11 -1
  19. package/lib/cjs/locale/zh-HK.js +11 -1
  20. package/lib/cjs/locale/zh-TW.js +11 -1
  21. package/lib/es/index.js +633 -210
  22. package/lib/es/locale/ar-SA.js +11 -0
  23. package/lib/es/locale/ca-ES.js +11 -0
  24. package/lib/es/locale/de-DE.js +11 -0
  25. package/lib/es/locale/en-US.js +11 -0
  26. package/lib/es/locale/es-ES.js +11 -0
  27. package/lib/es/locale/fa-IR.js +11 -0
  28. package/lib/es/locale/fr-FR.js +11 -0
  29. package/lib/es/locale/id-ID.js +11 -0
  30. package/lib/es/locale/it-IT.js +11 -0
  31. package/lib/es/locale/ja-JP.js +11 -0
  32. package/lib/es/locale/ko-KR.js +11 -0
  33. package/lib/es/locale/pl-PL.js +11 -0
  34. package/lib/es/locale/pt-BR.js +11 -0
  35. package/lib/es/locale/ru-RU.js +11 -0
  36. package/lib/es/locale/sk-SK.js +11 -0
  37. package/lib/es/locale/vi-VN.js +11 -0
  38. package/lib/es/locale/zh-CN.js +11 -0
  39. package/lib/es/locale/zh-HK.js +11 -0
  40. package/lib/es/locale/zh-TW.js +11 -0
  41. package/lib/index.css +9 -0
  42. package/lib/index.js +633 -210
  43. package/lib/locale/ar-SA.js +11 -0
  44. package/lib/locale/ca-ES.js +11 -0
  45. package/lib/locale/de-DE.js +11 -0
  46. package/lib/locale/en-US.js +11 -0
  47. package/lib/locale/es-ES.js +11 -0
  48. package/lib/locale/fa-IR.js +11 -0
  49. package/lib/locale/fr-FR.js +11 -0
  50. package/lib/locale/id-ID.js +11 -0
  51. package/lib/locale/it-IT.js +11 -0
  52. package/lib/locale/ja-JP.js +11 -0
  53. package/lib/locale/ko-KR.js +11 -0
  54. package/lib/locale/pl-PL.js +11 -0
  55. package/lib/locale/pt-BR.js +11 -0
  56. package/lib/locale/ru-RU.js +11 -0
  57. package/lib/locale/sk-SK.js +11 -0
  58. package/lib/locale/vi-VN.js +11 -0
  59. package/lib/locale/zh-CN.js +11 -0
  60. package/lib/locale/zh-HK.js +11 -0
  61. package/lib/locale/zh-TW.js +11 -0
  62. package/lib/types/commands/operations/mobile/open-table-filter-dialog.operation.d.ts +18 -0
  63. package/lib/types/const.d.ts +2 -0
  64. package/lib/types/controllers/sheet-table-controls-render.controller.d.ts +2 -0
  65. package/lib/types/locale/en-US.d.ts +11 -0
  66. package/lib/types/menu/mobile-schema.d.ts +17 -0
  67. package/lib/types/menu/mobile-sheet-table-menu.controller.d.ts +20 -0
  68. package/lib/types/services/sheets-table-ui.service.d.ts +3 -1
  69. package/lib/types/types.d.ts +3 -0
  70. package/lib/types/views/components/MobileSheetTableItemsFilterPanel.d.ts +2 -0
  71. package/lib/types/views/components/MobileSheetTableSettingsDialog.d.ts +17 -0
  72. package/lib/types/views/components/SheetTableCalculatedColumn.d.ts +21 -0
  73. package/lib/types/views/components/SheetTableItemsFilterPanel.d.ts +2 -0
  74. package/lib/types/views/components/SheetTableMenu.d.ts +1 -1
  75. package/lib/types/views/components/SheetTableSettingsDialog.d.ts +23 -0
  76. package/lib/umd/index.js +2 -2
  77. package/lib/umd/locale/ar-SA.js +1 -1
  78. package/lib/umd/locale/ca-ES.js +1 -1
  79. package/lib/umd/locale/de-DE.js +1 -1
  80. package/lib/umd/locale/en-US.js +1 -1
  81. package/lib/umd/locale/es-ES.js +1 -1
  82. package/lib/umd/locale/fa-IR.js +1 -1
  83. package/lib/umd/locale/fr-FR.js +1 -1
  84. package/lib/umd/locale/id-ID.js +1 -1
  85. package/lib/umd/locale/it-IT.js +1 -1
  86. package/lib/umd/locale/ja-JP.js +1 -1
  87. package/lib/umd/locale/ko-KR.js +1 -1
  88. package/lib/umd/locale/pl-PL.js +1 -1
  89. package/lib/umd/locale/pt-BR.js +1 -1
  90. package/lib/umd/locale/ru-RU.js +1 -1
  91. package/lib/umd/locale/sk-SK.js +1 -1
  92. package/lib/umd/locale/vi-VN.js +1 -1
  93. package/lib/umd/locale/zh-CN.js +1 -1
  94. package/lib/umd/locale/zh-HK.js +1 -1
  95. package/lib/umd/locale/zh-TW.js +1 -1
  96. package/package.json +15 -15
package/lib/cjs/index.js CHANGED
@@ -37,6 +37,8 @@ const UNIVER_SHEET_TABLE_FILTER_PANEL_ID = "UNIVER_SHEET_Table_FILTER_PANEL_ID";
37
37
  const TABLE_SELECTOR_DIALOG = "TABLE_SELECTOR_DIALOG";
38
38
  const SHEET_TABLE_RENAME_DIALOG = "SHEET_TABLE_RENAME_DIALOG";
39
39
  const SHEET_TABLE_RENAME_DIALOG_ID = "SHEET_TABLE_RENAME_DIALOG_ID";
40
+ const SHEET_TABLE_SETTINGS_DIALOG = "SHEET_TABLE_SETTINGS_DIALOG";
41
+ const SHEET_TABLE_SETTINGS_DIALOG_ID = "SHEET_TABLE_SETTINGS_DIALOG_ID";
40
42
  const SHEET_TABLE_THEME_PANEL_ID = "SHEET_TABLE_THEME_PANEL_ID";
41
43
  const SHEET_TABLE_THEME_PANEL = "SHEET_TABLE_THEME_PANEL";
42
44
  const SHEET_TABLE_MENU = "SHEET_TABLE_MENU";
@@ -185,7 +187,8 @@ function getSheetTableRowColOperationHidden$(accessor) {
185
187
  return sheetsSelectionsService.selectionMoveEnd$.pipe((0, rxjs.startWith)(sheetsSelectionsService.getCurrentSelections()), (0, rxjs.switchMap)((selections) => {
186
188
  if (!selections.length || selections.length > 1) return (0, rxjs.of)(true);
187
189
  const range = selections[0].range;
188
- return (0, rxjs.of)(!accessor.get(_univerjs_sheets_table.SheetsTableController).getContainerTableWithRange(workbook.getUnitId(), sheet.getSheetId(), range));
190
+ const isInTable = accessor.get(_univerjs_sheets_table.SheetsTableController).getContainerTableWithRange(workbook.getUnitId(), sheet.getSheetId(), range);
191
+ return (0, rxjs.of)(!isInTable);
189
192
  }));
190
193
  }));
191
194
  }));
@@ -251,10 +254,10 @@ const menuSchema = {
251
254
  //#endregion
252
255
  //#region package.json
253
256
  var name = "@univerjs/sheets-table-ui";
254
- var version = "1.0.0-rc.0";
257
+ var version = "1.0.1";
255
258
 
256
259
  //#endregion
257
- //#region \0@oxc-project+runtime@0.140.0/helpers/esm/typeof.js
260
+ //#region \0@oxc-project+runtime@0.149.0/helpers/esm/typeof.js
258
261
  function _typeof(o) {
259
262
  "@babel/helpers - typeof";
260
263
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -265,7 +268,7 @@ function _typeof(o) {
265
268
  }
266
269
 
267
270
  //#endregion
268
- //#region \0@oxc-project+runtime@0.140.0/helpers/esm/toPrimitive.js
271
+ //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPrimitive.js
269
272
  function toPrimitive(t, r) {
270
273
  if ("object" != _typeof(t) || !t) return t;
271
274
  var e = t[Symbol.toPrimitive];
@@ -278,14 +281,14 @@ function toPrimitive(t, r) {
278
281
  }
279
282
 
280
283
  //#endregion
281
- //#region \0@oxc-project+runtime@0.140.0/helpers/esm/toPropertyKey.js
284
+ //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPropertyKey.js
282
285
  function toPropertyKey(t) {
283
286
  var i = toPrimitive(t, "string");
284
287
  return "symbol" == _typeof(i) ? i : i + "";
285
288
  }
286
289
 
287
290
  //#endregion
288
- //#region \0@oxc-project+runtime@0.140.0/helpers/esm/defineProperty.js
291
+ //#region \0@oxc-project+runtime@0.149.0/helpers/esm/defineProperty.js
289
292
  function _defineProperty(e, r, t) {
290
293
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
291
294
  value: t,
@@ -296,7 +299,7 @@ function _defineProperty(e, r, t) {
296
299
  }
297
300
 
298
301
  //#endregion
299
- //#region \0@oxc-project+runtime@0.140.0/helpers/esm/decorateParam.js
302
+ //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorateParam.js
300
303
  function __decorateParam(paramIndex, decorator) {
301
304
  return function(target, key) {
302
305
  decorator(target, key, paramIndex);
@@ -304,7 +307,7 @@ function __decorateParam(paramIndex, decorator) {
304
307
  }
305
308
 
306
309
  //#endregion
307
- //#region \0@oxc-project+runtime@0.140.0/helpers/esm/decorate.js
310
+ //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
308
311
  function __decorate(decorators, target, key, desc) {
309
312
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
310
313
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -390,6 +393,37 @@ SheetsTableComponentController = __decorate([
390
393
  __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_ui.IDialogService))
391
394
  ], SheetsTableComponentController);
392
395
 
396
+ //#endregion
397
+ //#region src/controllers/mobile/sheet-table-component.controller.ts
398
+ /**
399
+ * Copyright 2023-present DreamNum Co., Ltd.
400
+ *
401
+ * Licensed under the Apache License, Version 2.0 (the "License");
402
+ * you may not use this file except in compliance with the License.
403
+ * You may obtain a copy of the License at
404
+ *
405
+ * http://www.apache.org/licenses/LICENSE-2.0
406
+ *
407
+ * Unless required by applicable law or agreed to in writing, software
408
+ * distributed under the License is distributed on an "AS IS" BASIS,
409
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
410
+ * See the License for the specific language governing permissions and
411
+ * limitations under the License.
412
+ */
413
+ var SheetsTableMobileComponentController = class extends SheetsTableComponentController {
414
+ _openFilterPopup() {
415
+ if (!this.getCurrentTableFilterInfo()) throw new Error("[SheetsFilterUIController]: no filter model when opening filter popup!");
416
+ this._dialogService.open({
417
+ id: UNIVER_SHEET_TABLE_FILTER_PANEL_ID,
418
+ title: { title: "sheets-table-ui.filter.title" },
419
+ children: { label: SHEETS_TABLE_FILTER_PANEL_OPENED_KEY },
420
+ onClose: () => {
421
+ this._contextService.setContextValue(SHEETS_TABLE_FILTER_PANEL_OPENED_KEY, false);
422
+ }
423
+ });
424
+ }
425
+ };
426
+
393
427
  //#endregion
394
428
  //#region src/commands/operations/open-table-filter-dialog.opration.ts
395
429
  const OpenTableFilterPanelOperation = {
@@ -412,6 +446,28 @@ const OpenTableFilterPanelOperation = {
412
446
  }
413
447
  };
414
448
 
449
+ //#endregion
450
+ //#region src/commands/operations/mobile/open-table-filter-dialog.operation.ts
451
+ const OpenTableFilterPanelMobileOperation = {
452
+ type: _univerjs_core.CommandType.OPERATION,
453
+ id: OpenTableFilterPanelOperation.id,
454
+ async handler(accessor, params) {
455
+ if (!params) return false;
456
+ const { row, col, unitId, subUnitId, tableId } = params;
457
+ const tableManager = accessor.get(_univerjs_sheets_table.TableManager);
458
+ const componentController = accessor.get(SheetsTableMobileComponentController);
459
+ if (!tableManager.getTable(unitId, tableId)) return false;
460
+ componentController.openOrToggleFilterPanel({
461
+ unitId,
462
+ subUnitId,
463
+ row,
464
+ tableId,
465
+ column: col
466
+ });
467
+ return true;
468
+ }
469
+ };
470
+
415
471
  //#endregion
416
472
  //#region src/config/config.ts
417
473
  const SHEETS_TABLE_UI_PLUGIN_CONFIG_KEY = "sheets-table-ui.config";
@@ -435,7 +491,7 @@ let SheetsTableUiService = class SheetsTableUiService extends _univerjs_core.Dis
435
491
  this._registerTableFilterChangeEvent();
436
492
  }
437
493
  _registerTableFilterChangeEvent() {
438
- this._commandService.onCommandExecuted((command) => {
494
+ this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
439
495
  if (command.id === _univerjs_sheets.SetRangeValuesMutation.id) {
440
496
  const { unitId, subUnitId, cellValue } = command.params;
441
497
  const tables = this._tableManager.getTablesBySubunitId(unitId, subUnitId);
@@ -448,20 +504,19 @@ let SheetsTableUiService = class SheetsTableUiService extends _univerjs_core.Dis
448
504
  });
449
505
  if (overlapTable) {
450
506
  const colIndex = col - overlapTable.getRange().startColumn;
451
- this._itemsCache.delete(overlapTable.getId() + colIndex);
507
+ this._itemsCache.delete(this._getItemsCacheKey(unitId, overlapTable.getId(), colIndex));
452
508
  }
453
509
  });
454
- } else if (command.id === _univerjs_sheets_table.SetSheetTableFilterCommand.id) {
510
+ } else if (command.id === _univerjs_sheets_table.SetSheetTableFilterMutation.id) {
455
511
  const { unitId, tableId } = command.params;
456
512
  const table = this._tableManager.getTable(unitId, tableId);
457
513
  if (!table) return;
458
514
  const subUnitId = table.getSubunitId();
459
515
  this._tableManager.getTablesBySubunitId(unitId, subUnitId).forEach((table) => {
460
- const range = table.getRange();
461
- for (let i = range.startColumn; i <= range.endColumn; i++) this._itemsCache.delete(table.getId() + i);
516
+ for (let columnIndex = 0; columnIndex < table.getColumnsCount(); columnIndex++) this._itemsCache.delete(this._getItemsCacheKey(unitId, table.getId(), columnIndex));
462
517
  });
463
518
  }
464
- });
519
+ }));
465
520
  }
466
521
  getTableFilterPanelInitProps(unitId, subUnitId, tableId, column) {
467
522
  const table = this._tableManager.getTable(unitId, tableId);
@@ -481,10 +536,43 @@ let SheetsTableUiService = class SheetsTableUiService extends _univerjs_core.Dis
481
536
  const checkedItems = [];
482
537
  if (table) {
483
538
  const filter = table.getTableFilterColumn(columnIndex);
484
- if (filter && (0, _univerjs_sheets_table.isManualTableFilter)(filter)) checkedItems.push(...filter.values.map((value) => value === _univerjs_sheets_table.TABLE_FILTER_EMPTY_VALUE ? this._localeService.t("sheets-table-ui.condition.empty") : value));
539
+ if ((0, _univerjs_sheets_table.isManualTableFilter)(filter)) checkedItems.push(...filter.values.map((value) => value === _univerjs_sheets_table.TABLE_FILTER_EMPTY_VALUE ? this._localeService.t("sheets-table-ui.condition.empty") : value));
540
+ else if ((0, _univerjs_sheets_table.isRecordTableFilter)(filter)) {
541
+ const accepts = (0, _univerjs_sheets_table.compileTableRecordFilter)(filter);
542
+ const items = this.getTableFilterItems(unitId, table.getSubunitId(), tableId, columnIndex);
543
+ checkedItems.push(...items.data.filter((item) => item.recordValue && accepts(item.recordValue)).map((item) => item.valueKey));
544
+ }
485
545
  }
486
546
  return checkedItems;
487
547
  }
548
+ createItemFilter(unitId, tableId, columnIndex, items, checkedItemSet, selectAllRequested) {
549
+ const table = this._tableManager.getTable(unitId, tableId);
550
+ const currentFilter = table === null || table === void 0 ? void 0 : table.getTableFilterColumn(columnIndex);
551
+ if (selectAllRequested) return;
552
+ if (!(0, _univerjs_sheets_table.isRecordTableFilter)(currentFilter)) {
553
+ const emptyLabel = this._localeService.t("sheets-table-ui.condition.empty");
554
+ const values = items.data.filter((item) => checkedItemSet.has(item.valueKey ?? item.title)).map((item) => item.title === emptyLabel ? _univerjs_sheets_table.TABLE_FILTER_EMPTY_VALUE : item.title);
555
+ return values.length === items.data.length ? void 0 : {
556
+ filterType: _univerjs_sheets_table.TableColumnFilterTypeEnum.manual,
557
+ values
558
+ };
559
+ }
560
+ const accepts = (0, _univerjs_sheets_table.compileTableRecordFilter)(currentFilter);
561
+ const recordItems = items.data.filter((item) => item.valueKey && item.recordValue);
562
+ if (recordItems.every((item) => checkedItemSet.has(item.valueKey) === accepts(item.recordValue))) return currentFilter;
563
+ const candidateKeys = new Set(recordItems.map((item) => item.valueKey));
564
+ const values = currentFilter.values.filter((value) => !candidateKeys.has((0, _univerjs_sheets_table.getTableRecordValueKey)(value))).map((value) => value.type === _univerjs_core.RecordValueType.Blank ? { type: _univerjs_core.RecordValueType.Blank } : { ...value });
565
+ recordItems.forEach((item) => {
566
+ const selected = checkedItemSet.has(item.valueKey);
567
+ if (currentFilter.mode === _univerjs_core.FilterSelectionMode.Include === selected) values.push(item.recordValue);
568
+ });
569
+ if (currentFilter.mode === _univerjs_core.FilterSelectionMode.Exclude && values.length === 0) return;
570
+ return {
571
+ filterType: _univerjs_sheets_table.TableColumnFilterTypeEnum.record,
572
+ mode: currentFilter.mode,
573
+ values
574
+ };
575
+ }
488
576
  async setTableFilter(unitId, tableId, columnIndex, tableFilter) {
489
577
  if (!this._tableManager.getTable(unitId, tableId)) return false;
490
578
  const setTableFilterParams = {
@@ -536,13 +624,14 @@ let SheetsTableUiService = class SheetsTableUiService extends _univerjs_core.Dis
536
624
  }
537
625
  getTableFilterItems(unitId, subUnitId, tableId, columnIndex) {
538
626
  var _this$_univerInstance2;
539
- if (this._itemsCache.has(tableId + columnIndex)) return this._itemsCache.get(tableId + columnIndex) || {
627
+ const table = this._tableManager.getTable(unitId, tableId);
628
+ if (!table) return {
540
629
  data: [],
541
630
  itemsCountMap: /* @__PURE__ */ new Map(),
542
631
  allItemsCount: 0
543
632
  };
544
- const table = this._tableManager.getTable(unitId, tableId);
545
- if (!table) return {
633
+ const cacheKey = this._getItemsCacheKey(unitId, tableId, columnIndex);
634
+ if (this._itemsCache.has(cacheKey)) return this._itemsCache.get(cacheKey) || {
546
635
  data: [],
547
636
  itemsCountMap: /* @__PURE__ */ new Map(),
548
637
  allItemsCount: 0
@@ -557,21 +646,29 @@ let SheetsTableUiService = class SheetsTableUiService extends _univerjs_core.Dis
557
646
  };
558
647
  const data = [];
559
648
  const map = /* @__PURE__ */ new Map();
649
+ const currentFilter = table.getTableFilterColumn(columnIndex);
650
+ const useRecordValues = (0, _univerjs_sheets_table.isRecordTableFilter)(currentFilter);
560
651
  const filteredRowsByOtherColumns = this._getFilteredRowsByOtherColumns(worksheet, tableId, unitId, columnIndex);
561
652
  let allItemsCount = 0;
562
653
  for (let row = startRow; row <= endRow; row++) {
563
654
  if (filteredRowsByOtherColumns.has(row)) continue;
564
655
  let stringItem = this._sheetTableService.getCellValueWithConditionType(worksheet, row, column);
565
656
  if (stringItem == null) stringItem = this._localeService.t("sheets-table-ui.condition.empty");
566
- if (!map.has(stringItem)) data.push({
657
+ if (useRecordValues && typeof stringItem !== "string") stringItem = String(stringItem);
658
+ const recordValue = useRecordValues ? (0, _univerjs_sheets_table.getTableRecordValue)(worksheet, row, column) : void 0;
659
+ const valueKey = recordValue ? (0, _univerjs_sheets_table.getTableRecordValueKey)(recordValue) : void 0;
660
+ const itemKey = valueKey ?? stringItem;
661
+ if (!map.has(itemKey)) data.push({
567
662
  title: stringItem,
568
- key: `${column}_${row}`,
569
- leaf: true
663
+ key: valueKey ?? `${column}_${row}`,
664
+ leaf: true,
665
+ valueKey,
666
+ recordValue
570
667
  });
571
668
  allItemsCount++;
572
- map.set(stringItem, (map.get(stringItem) || 0) + 1);
669
+ map.set(itemKey, (map.get(itemKey) || 0) + 1);
573
670
  }
574
- this._itemsCache.set(tableId + columnIndex, {
671
+ this._itemsCache.set(cacheKey, {
575
672
  data,
576
673
  itemsCountMap: map,
577
674
  allItemsCount
@@ -582,6 +679,15 @@ let SheetsTableUiService = class SheetsTableUiService extends _univerjs_core.Dis
582
679
  allItemsCount
583
680
  };
584
681
  }
682
+ _getItemsCacheKey(unitId, tableId, columnIndex) {
683
+ var _this$_tableManager$g;
684
+ const columnId = (_this$_tableManager$g = this._tableManager.getTable(unitId, tableId)) === null || _this$_tableManager$g === void 0 || (_this$_tableManager$g = _this$_tableManager$g.getTableColumnByIndex(columnIndex)) === null || _this$_tableManager$g === void 0 ? void 0 : _this$_tableManager$g.id;
685
+ return JSON.stringify([
686
+ unitId,
687
+ tableId,
688
+ columnId ?? columnIndex
689
+ ]);
690
+ }
585
691
  _getFilteredRowsByOtherColumns(worksheet, tableId, unitId, columnIndex) {
586
692
  const filteredRows = /* @__PURE__ */ new Set();
587
693
  const table = this._tableManager.getTable(unitId, tableId);
@@ -946,9 +1052,10 @@ const datePickerSet = /* @__PURE__ */ new Set([
946
1052
  function getSubComponentType(type, compare) {
947
1053
  if (!compare) return "None";
948
1054
  if (type === _univerjs_sheets_table.TableConditionTypeEnum.String) return "Input";
949
- else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Number) if (compare === _univerjs_sheets_table.TableNumberCompareTypeEnum.Between || compare === _univerjs_sheets_table.TableNumberCompareTypeEnum.NotBetween) return "Inputs";
950
- else return "Input";
951
- else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Date) {
1055
+ else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Number) {
1056
+ if (compare === _univerjs_sheets_table.TableNumberCompareTypeEnum.Between || compare === _univerjs_sheets_table.TableNumberCompareTypeEnum.NotBetween) return "Inputs";
1057
+ else return "Input";
1058
+ } else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Date) {
952
1059
  if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Between || compare === _univerjs_sheets_table.TableDateCompareTypeEnum.NotBetween) return "DateRange";
953
1060
  else if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter || compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Month) return "Select";
954
1061
  else if (datePickerSet.has(compare)) return "DatePicker";
@@ -964,56 +1071,58 @@ function getInitConditionInfo(tableFilter) {
964
1071
  };
965
1072
  const filterInfo = tableFilter.filterInfo;
966
1073
  const { conditionType, compareType } = filterInfo;
967
- if (conditionType === _univerjs_sheets_table.TableConditionTypeEnum.Date) if (compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Between || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NotBetween) {
968
- let dateRange;
969
- if (Array.isArray(filterInfo.expectedValue)) dateRange = filterInfo.expectedValue.map((i) => typeof i === "string" ? new Date(i) : i);
970
- return {
1074
+ if (conditionType === _univerjs_sheets_table.TableConditionTypeEnum.Date) {
1075
+ if (compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Between || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NotBetween) {
1076
+ let dateRange;
1077
+ if (Array.isArray(filterInfo.expectedValue)) dateRange = filterInfo.expectedValue.map((i) => typeof i === "string" ? new Date(i) : i);
1078
+ return {
1079
+ type: conditionType,
1080
+ compare: compareType,
1081
+ info: { dateRange }
1082
+ };
1083
+ } else if (compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Today || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Yesterday || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Tomorrow || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.ThisWeek || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.LastWeek || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NextWeek || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.ThisMonth || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.LastMonth || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NextMonth || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.ThisYear || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.LastYear || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NextYear) return {
971
1084
  type: conditionType,
972
1085
  compare: compareType,
973
- info: { dateRange }
1086
+ info: {}
974
1087
  };
975
- } else if (compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Today || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Yesterday || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.Tomorrow || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.ThisWeek || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.LastWeek || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NextWeek || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.ThisMonth || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.LastMonth || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NextMonth || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.ThisYear || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.LastYear || compareType === _univerjs_sheets_table.TableDateCompareTypeEnum.NextYear) return {
976
- type: conditionType,
977
- compare: compareType,
978
- info: {}
979
- };
980
- else if (datePickerSet.has(compareType)) {
981
- let date;
982
- if (typeof filterInfo.expectedValue === "string") date = new Date(filterInfo.expectedValue);
983
- else if (Array.isArray(filterInfo.expectedValue)) {
984
- for (let i = 0; i < filterInfo.expectedValue.length; i++) if (typeof filterInfo.expectedValue[i] === "string") filterInfo.expectedValue[i] = new Date(filterInfo.expectedValue[i]);
985
- }
986
- return {
1088
+ else if (datePickerSet.has(compareType)) {
1089
+ let date;
1090
+ if (typeof filterInfo.expectedValue === "string") date = new Date(filterInfo.expectedValue);
1091
+ else if (Array.isArray(filterInfo.expectedValue)) {
1092
+ for (let i = 0; i < filterInfo.expectedValue.length; i++) if (typeof filterInfo.expectedValue[i] === "string") filterInfo.expectedValue[i] = new Date(filterInfo.expectedValue[i]);
1093
+ }
1094
+ return {
1095
+ type: conditionType,
1096
+ compare: compareType,
1097
+ info: { date }
1098
+ };
1099
+ } else if ((/* @__PURE__ */ new Set([
1100
+ _univerjs_sheets_table.TableDateCompareTypeEnum.Q1,
1101
+ _univerjs_sheets_table.TableDateCompareTypeEnum.Q2,
1102
+ _univerjs_sheets_table.TableDateCompareTypeEnum.Q3,
1103
+ _univerjs_sheets_table.TableDateCompareTypeEnum.Q4
1104
+ ])).has(compareType)) return {
1105
+ type: conditionType,
1106
+ compare: _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter,
1107
+ info: { dateSelect: filterInfo.compareType }
1108
+ };
1109
+ else return {
1110
+ type: conditionType,
1111
+ compare: _univerjs_sheets_table.TableDateCompareTypeEnum.Month,
1112
+ info: { dateSelect: filterInfo.compareType }
1113
+ };
1114
+ } else if (conditionType === _univerjs_sheets_table.TableConditionTypeEnum.Number) {
1115
+ if (compareType === _univerjs_sheets_table.TableNumberCompareTypeEnum.Between || compareType === _univerjs_sheets_table.TableNumberCompareTypeEnum.NotBetween) return {
987
1116
  type: conditionType,
988
1117
  compare: compareType,
989
- info: { date }
1118
+ info: { numberRange: filterInfo.expectedValue }
990
1119
  };
991
- } else if ((/* @__PURE__ */ new Set([
992
- _univerjs_sheets_table.TableDateCompareTypeEnum.Q1,
993
- _univerjs_sheets_table.TableDateCompareTypeEnum.Q2,
994
- _univerjs_sheets_table.TableDateCompareTypeEnum.Q3,
995
- _univerjs_sheets_table.TableDateCompareTypeEnum.Q4
996
- ])).has(compareType)) return {
997
- type: conditionType,
998
- compare: _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter,
999
- info: { dateSelect: filterInfo.compareType }
1000
- };
1001
- else return {
1002
- type: conditionType,
1003
- compare: _univerjs_sheets_table.TableDateCompareTypeEnum.Month,
1004
- info: { dateSelect: filterInfo.compareType }
1005
- };
1006
- else if (conditionType === _univerjs_sheets_table.TableConditionTypeEnum.Number) if (compareType === _univerjs_sheets_table.TableNumberCompareTypeEnum.Between || compareType === _univerjs_sheets_table.TableNumberCompareTypeEnum.NotBetween) return {
1007
- type: conditionType,
1008
- compare: compareType,
1009
- info: { numberRange: filterInfo.expectedValue }
1010
- };
1011
- else return {
1012
- type: conditionType,
1013
- compare: compareType,
1014
- info: { number: filterInfo.expectedValue }
1015
- };
1016
- else if (conditionType === _univerjs_sheets_table.TableConditionTypeEnum.String) return {
1120
+ else return {
1121
+ type: conditionType,
1122
+ compare: compareType,
1123
+ info: { number: filterInfo.expectedValue }
1124
+ };
1125
+ } else if (conditionType === _univerjs_sheets_table.TableConditionTypeEnum.String) return {
1017
1126
  type: conditionType,
1018
1127
  compare: compareType,
1019
1128
  info: { string: filterInfo.expectedValue }
@@ -1047,11 +1156,12 @@ function MobileSheetTableConditionPanel(props) {
1047
1156
  const compare = value[1];
1048
1157
  if (compare) setConditionVisible(false);
1049
1158
  const info = {};
1050
- if (type === _univerjs_sheets_table.TableConditionTypeEnum.Date) if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.Q1;
1051
- else if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Month) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.M1;
1052
- else if (datePickerSet.has(compare)) info.date = /* @__PURE__ */ new Date();
1053
- else info.dateRange = [/* @__PURE__ */ new Date(), /* @__PURE__ */ new Date()];
1054
- else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Number) info.number = 0;
1159
+ if (type === _univerjs_sheets_table.TableConditionTypeEnum.Date) {
1160
+ if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.Q1;
1161
+ else if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Month) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.M1;
1162
+ else if (datePickerSet.has(compare)) info.date = /* @__PURE__ */ new Date();
1163
+ else info.dateRange = [/* @__PURE__ */ new Date(), /* @__PURE__ */ new Date()];
1164
+ } else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Number) info.number = 0;
1055
1165
  else if (type === _univerjs_sheets_table.TableConditionTypeEnum.String) info.string = "";
1056
1166
  handleConditionInfo(info, type, compare ?? _univerjs_sheets_table.TableStringCompareTypeEnum.Equal);
1057
1167
  }
@@ -1146,28 +1256,33 @@ function MobileSheetTableConditionPanel(props) {
1146
1256
  //#endregion
1147
1257
  //#region src/views/components/MobileSheetTableItemsFilterPanel.tsx
1148
1258
  function MobileSheetTableItemsFilterPanel(props) {
1149
- const { items, checkedItemSet, setCheckedItemSet } = props;
1259
+ const { items, checkedItemSet, setCheckedItemSet, onSelectAllChange, onItemChange } = props;
1150
1260
  const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
1151
1261
  const [searchText, setSearchText] = (0, react.useState)("");
1152
1262
  const displayItems = (0, react.useMemo)(() => {
1153
1263
  const normalizedSearchText = searchText.toLowerCase();
1154
1264
  return normalizedSearchText ? items.data.filter((item) => String(item.title).toLowerCase().includes(normalizedSearchText)) : items.data;
1155
1265
  }, [items.data, searchText]);
1156
- const allDisplayedChecked = displayItems.length > 0 && displayItems.every((item) => checkedItemSet.has(item.title));
1157
- const someDisplayedChecked = displayItems.some((item) => checkedItemSet.has(item.title));
1266
+ const allDisplayedChecked = displayItems.length > 0 && displayItems.every((item) => checkedItemSet.has(item.valueKey ?? item.title));
1267
+ const someDisplayedChecked = displayItems.some((item) => checkedItemSet.has(item.valueKey ?? item.title));
1158
1268
  function toggleAllDisplayed() {
1159
1269
  setCheckedItemSet((current) => {
1160
1270
  const next = new Set(current);
1161
- for (const item of displayItems) if (allDisplayedChecked) next.delete(item.title);
1162
- else next.add(item.title);
1271
+ for (const item of displayItems) {
1272
+ const itemKey = item.valueKey ?? item.title;
1273
+ if (allDisplayedChecked) next.delete(itemKey);
1274
+ else next.add(itemKey);
1275
+ }
1163
1276
  return next;
1164
1277
  });
1278
+ onSelectAllChange === null || onSelectAllChange === void 0 || onSelectAllChange(!allDisplayedChecked && searchText === "");
1165
1279
  }
1166
- function toggleItem(title) {
1280
+ function toggleItem(itemKey) {
1281
+ onItemChange === null || onItemChange === void 0 || onItemChange();
1167
1282
  setCheckedItemSet((current) => {
1168
1283
  const next = new Set(current);
1169
- if (next.has(title)) next.delete(title);
1170
- else next.add(title);
1284
+ if (next.has(itemKey)) next.delete(itemKey);
1285
+ else next.add(itemKey);
1171
1286
  return next;
1172
1287
  });
1173
1288
  }
@@ -1190,24 +1305,27 @@ function MobileSheetTableItemsFilterPanel(props) {
1190
1305
  onChange: toggleAllDisplayed,
1191
1306
  children: localeService.t("sheets-table-ui.filter.select-all")
1192
1307
  })
1193
- }), displayItems.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1194
- className: "univer-border-0 univer-border-b univer-border-solid univer-border-gray-200 univer-px-4 last:univer-border-b-0 dark:!univer-border-gray-700",
1195
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
1196
- className: "univer-flex univer-min-h-12 univer-items-center",
1197
- checked: checkedItemSet.has(item.title),
1198
- onChange: () => toggleItem(item.title),
1199
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1200
- className: "univer-flex univer-min-w-0 univer-flex-1 univer-items-center univer-gap-2",
1201
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1202
- className: "univer-min-w-0 univer-flex-1 univer-truncate",
1203
- children: item.title
1204
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1205
- className: "univer-shrink-0 univer-text-gray-400",
1206
- children: `(${items.itemsCountMap.get(item.title) ?? 0})`
1207
- })]
1308
+ }), displayItems.map((item) => {
1309
+ const itemKey = item.valueKey ?? item.title;
1310
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1311
+ className: "univer-border-0 univer-border-b univer-border-solid univer-border-gray-200 univer-px-4 last:univer-border-b-0 dark:!univer-border-gray-700",
1312
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
1313
+ className: "univer-flex univer-min-h-12 univer-items-center",
1314
+ checked: checkedItemSet.has(itemKey),
1315
+ onChange: () => toggleItem(itemKey),
1316
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1317
+ className: "univer-flex univer-min-w-0 univer-flex-1 univer-items-center univer-gap-2",
1318
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1319
+ className: "univer-min-w-0 univer-flex-1 univer-truncate",
1320
+ children: item.title
1321
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1322
+ className: "univer-shrink-0 univer-text-gray-400",
1323
+ children: `(${items.itemsCountMap.get(itemKey) ?? 0})`
1324
+ })]
1325
+ })
1208
1326
  })
1209
- })
1210
- }, item.key))]
1327
+ }, item.key);
1328
+ })]
1211
1329
  })]
1212
1330
  });
1213
1331
  }
@@ -1229,7 +1347,7 @@ const FILTER_BY_OPTIONS$1 = [
1229
1347
  }
1230
1348
  ];
1231
1349
  function MobileSheetTableFilterPanel() {
1232
- const tableFilterPanelInfo = (0, _univerjs_ui.useDependency)(SheetsTableComponentController).getCurrentTableFilterInfo();
1350
+ const tableFilterPanelInfo = (0, _univerjs_ui.useDependency)(SheetsTableMobileComponentController).getCurrentTableFilterInfo();
1233
1351
  if (!tableFilterPanelInfo) return null;
1234
1352
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MobileSheetTableFilterPanelContent, { tableFilterPanelInfo });
1235
1353
  }
@@ -1242,7 +1360,7 @@ function MobileSheetTableFilterPanelContent(props) {
1242
1360
  const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
1243
1361
  const permissionService = (0, _univerjs_ui.useDependency)(_univerjs_core.IPermissionService);
1244
1362
  const undoRedoService = (0, _univerjs_ui.useDependency)(_univerjs_core.IUndoRedoService);
1245
- const sheetsTableComponentController = (0, _univerjs_ui.useDependency)(SheetsTableComponentController);
1363
+ const sheetsTableComponentController = (0, _univerjs_ui.useDependency)(SheetsTableMobileComponentController);
1246
1364
  const [detailFilterBy, setDetailFilterBy] = (0, react.useState)(null);
1247
1365
  const [drawerSnap, setDrawerSnap] = (0, react.useState)("expanded");
1248
1366
  const layerRef = (0, react.useRef)(null);
@@ -1250,7 +1368,8 @@ function MobileSheetTableFilterPanelContent(props) {
1250
1368
  const currentTable = tableManager.getTable(unitId, tableId);
1251
1369
  const items = tableUiService.getTableFilterItems(unitId, subUnitId, tableId, columnIndex);
1252
1370
  const checkedItems = tableUiService.getTableFilterCheckedItems(unitId, tableId, columnIndex);
1253
- const [checkedItemSet, setCheckedItemSet] = (0, react.useState)(() => new Set((tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.manual ? checkedItems : items.data.map((item) => item.title)));
1371
+ const [checkedItemSet, setCheckedItemSet] = (0, react.useState)(() => new Set((tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.manual || (tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.record ? checkedItems : items.data.map((item) => item.valueKey ?? item.title)));
1372
+ const [selectAllRequested, setSelectAllRequested] = (0, react.useState)(false);
1254
1373
  const [conditionInfo, setConditionInfo] = (0, react.useState)(() => getInitConditionInfo(tableFilter));
1255
1374
  const [colors, setColors] = (0, react.useState)(() => tableUiService.getTableFilterColors(unitId, subUnitId, tableId, columnIndex));
1256
1375
  const tableRange = currentTable.getRange();
@@ -1307,14 +1426,8 @@ function MobileSheetTableFilterPanelContent(props) {
1307
1426
  }
1308
1427
  async function applyFilter() {
1309
1428
  let filter;
1310
- if (detailFilterBy === "items") {
1311
- const emptyLabel = localeService.t("sheets-table-ui.condition.empty");
1312
- const values = items.data.filter((item) => checkedItemSet.has(item.title)).map((item) => item.title === emptyLabel ? _univerjs_sheets_table.TABLE_FILTER_EMPTY_VALUE : item.title);
1313
- filter = values.length === items.data.length ? void 0 : {
1314
- filterType: _univerjs_sheets_table.TableColumnFilterTypeEnum.manual,
1315
- values
1316
- };
1317
- } else if (detailFilterBy === "color") {
1429
+ if (detailFilterBy === "items") filter = tableUiService.createItemFilter(unitId, tableId, columnIndex, items, checkedItemSet, selectAllRequested);
1430
+ else if (detailFilterBy === "color") {
1318
1431
  const cellFillColors = colors.cellFillColors.filter((item) => item.checked).map((item) => item.color);
1319
1432
  const cellTextColors = colors.cellTextColors.filter((item) => item.checked).map((item) => item.color);
1320
1433
  if (cellFillColors.length) filter = {
@@ -1342,8 +1455,10 @@ function MobileSheetTableFilterPanelContent(props) {
1342
1455
  if (await tableUiService.setTableFilter(unitId, tableId, columnIndex, void 0)) closePanel();
1343
1456
  }
1344
1457
  function openDetail(filterBy) {
1345
- if (filterBy === "items") setCheckedItemSet(new Set((tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.manual ? checkedItems : items.data.map((item) => item.title)));
1346
- else if (filterBy === "color") setColors(tableUiService.getTableFilterColors(unitId, subUnitId, tableId, columnIndex));
1458
+ if (filterBy === "items") {
1459
+ setCheckedItemSet(new Set((tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.manual || (tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.record ? checkedItems : items.data.map((item) => item.valueKey ?? item.title)));
1460
+ setSelectAllRequested(false);
1461
+ } else if (filterBy === "color") setColors(tableUiService.getTableFilterColors(unitId, subUnitId, tableId, columnIndex));
1347
1462
  else if (filterBy === "condition") setConditionInfo(getInitConditionInfo(tableFilter));
1348
1463
  setDetailFilterBy(filterBy);
1349
1464
  setDrawerSnap("expanded");
@@ -1400,7 +1515,9 @@ function MobileSheetTableFilterPanelContent(props) {
1400
1515
  detailFilterBy === "items" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MobileSheetTableItemsFilterPanel, {
1401
1516
  items,
1402
1517
  checkedItemSet,
1403
- setCheckedItemSet
1518
+ setCheckedItemSet,
1519
+ onSelectAllChange: setSelectAllRequested,
1520
+ onItemChange: () => setSelectAllRequested(false)
1404
1521
  }),
1405
1522
  detailFilterBy === "color" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MobileSheetTableColorFilterPanel, {
1406
1523
  colors,
@@ -1476,6 +1593,7 @@ const ACTIONS = [
1476
1593
  "rename",
1477
1594
  "update-range",
1478
1595
  "set-theme",
1596
+ "settings",
1479
1597
  "delete"
1480
1598
  ];
1481
1599
  function MobileSheetTableMenu({ menu }) {
@@ -1683,6 +1801,198 @@ function MobileSheetTableSelector(props) {
1683
1801
  });
1684
1802
  }
1685
1803
 
1804
+ //#endregion
1805
+ //#region src/views/components/SheetTableCalculatedColumn.tsx
1806
+ function SheetTableCalculatedColumn({ unitId, tableId }) {
1807
+ var _columns$, _columns$2, _table$getColumn2;
1808
+ const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
1809
+ const commands = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
1810
+ const table = (0, _univerjs_ui.useDependency)(_univerjs_sheets_table.TableManager).getTableById(unitId, tableId);
1811
+ const columns = (table === null || table === void 0 ? void 0 : table.getTableInfo().columns) ?? [];
1812
+ const [columnId, setColumnId] = (0, react.useState)(((_columns$ = columns[0]) === null || _columns$ === void 0 ? void 0 : _columns$.id) ?? "");
1813
+ const [formula, setFormula] = (0, react.useState)(((_columns$2 = columns[0]) === null || _columns$2 === void 0 ? void 0 : _columns$2.formula) ?? "");
1814
+ const [result, setResult] = (0, react.useState)();
1815
+ const range = table === null || table === void 0 ? void 0 : table.getTableFilterRange();
1816
+ const apply = (value) => {
1817
+ try {
1818
+ const success = commands.syncExecuteCommand(_univerjs_sheets_table.SetSheetTableCommand.id, {
1819
+ unitId,
1820
+ tableId,
1821
+ calculatedColumn: {
1822
+ columnId,
1823
+ formula: value
1824
+ }
1825
+ });
1826
+ setResult(success);
1827
+ if (success) setFormula(value);
1828
+ } catch {
1829
+ setResult(false);
1830
+ }
1831
+ };
1832
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
1833
+ className: "univer-m-0 univer-min-w-0 univer-border-0 univer-p-0",
1834
+ disabled: !table,
1835
+ children: [
1836
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
1837
+ className: "univer-mb-2 univer-text-sm",
1838
+ children: localeService.t("sheets-table-ui.calculatedColumn")
1839
+ }),
1840
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Select, {
1841
+ className: "univer-w-full",
1842
+ options: columns.map((column) => ({
1843
+ value: column.id,
1844
+ label: column.displayName
1845
+ })),
1846
+ value: columnId,
1847
+ onChange: (id) => {
1848
+ var _table$getColumn;
1849
+ setColumnId(id);
1850
+ setFormula((table === null || table === void 0 || (_table$getColumn = table.getColumn(id)) === null || _table$getColumn === void 0 ? void 0 : _table$getColumn.formula) ?? "");
1851
+ setResult(void 0);
1852
+ }
1853
+ }),
1854
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.FormLayout, {
1855
+ label: localeService.t("sheets-table-ui.columnFormula"),
1856
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Input, {
1857
+ value: formula,
1858
+ onChange: (value) => {
1859
+ setFormula(value);
1860
+ setResult(void 0);
1861
+ }
1862
+ })
1863
+ }),
1864
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1865
+ className: "univer-text-sm univer-text-gray-500",
1866
+ children: localeService.t("sheets-table-ui.columnFormulaHint", String(Math.max(0, ((range === null || range === void 0 ? void 0 : range.endRow) ?? -1) - ((range === null || range === void 0 ? void 0 : range.startRow) ?? 0) + 1)))
1867
+ }),
1868
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1869
+ className: "univer-flex univer-flex-wrap univer-gap-2",
1870
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Button, {
1871
+ disabled: !columnId || !formula.trim(),
1872
+ onClick: () => apply(formula),
1873
+ children: localeService.t("sheets-table-ui.applyColumnFormula")
1874
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Button, {
1875
+ disabled: !(table === null || table === void 0 || (_table$getColumn2 = table.getColumn(columnId)) === null || _table$getColumn2 === void 0 ? void 0 : _table$getColumn2.formula),
1876
+ onClick: () => apply(""),
1877
+ children: localeService.t("sheets-table-ui.stopColumnFormula")
1878
+ })]
1879
+ }),
1880
+ result !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1881
+ role: result ? "status" : "alert",
1882
+ className: "univer-text-sm",
1883
+ children: localeService.t(result ? "sheets-table-ui.columnFormulaApplied" : "sheets-table-ui.settingsError")
1884
+ })
1885
+ ]
1886
+ });
1887
+ }
1888
+
1889
+ //#endregion
1890
+ //#region src/views/components/SheetTableSettingsDialog.tsx
1891
+ function SheetTableSettingsDialog(props) {
1892
+ const { unitId, tableId, onClose, ActionRowComponent = _univerjs_design.ActionRow } = props;
1893
+ const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
1894
+ const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
1895
+ const tableManager = (0, _univerjs_ui.useDependency)(_univerjs_sheets_table.TableManager);
1896
+ const [initial] = (0, react.useState)(() => {
1897
+ var _tableManager$getTabl;
1898
+ return (_tableManager$getTabl = tableManager.getTableById(unitId, tableId)) === null || _tableManager$getTabl === void 0 ? void 0 : _tableManager$getTabl.getTableInfo();
1899
+ });
1900
+ const [showAutoFilter, setShowAutoFilter] = (0, react.useState)((initial === null || initial === void 0 ? void 0 : initial.showAutoFilter) ?? true);
1901
+ const [columns, setColumns] = (0, react.useState)(() => Object.fromEntries(((initial === null || initial === void 0 ? void 0 : initial.columns) ?? []).map((column) => [column.id, column.showFilterButton !== false])));
1902
+ const [saving, setSaving] = (0, react.useState)(false);
1903
+ const [error, setError] = (0, react.useState)(false);
1904
+ const handleConfirm = async () => {
1905
+ if (!initial || saving) return;
1906
+ const changedColumns = Object.fromEntries(initial.columns.filter((column) => columns[column.id] !== (column.showFilterButton !== false)).map((column) => [column.id, columns[column.id]]));
1907
+ if (showAutoFilter === initial.showAutoFilter && Object.keys(changedColumns).length === 0) {
1908
+ onClose();
1909
+ return;
1910
+ }
1911
+ setSaving(true);
1912
+ setError(false);
1913
+ try {
1914
+ if (await commandService.executeCommand(_univerjs_sheets_table.SetSheetTableCommand.id, {
1915
+ unitId,
1916
+ tableId,
1917
+ filterButtons: {
1918
+ ...showAutoFilter === initial.showAutoFilter ? {} : { showAutoFilter },
1919
+ columns: changedColumns
1920
+ }
1921
+ })) onClose();
1922
+ else setError(true);
1923
+ } catch {
1924
+ setError(true);
1925
+ } finally {
1926
+ setSaving(false);
1927
+ }
1928
+ };
1929
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1930
+ className: "univer-flex univer-flex-col univer-gap-4 univer-py-2",
1931
+ children: [
1932
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
1933
+ checked: showAutoFilter,
1934
+ disabled: saving || !initial,
1935
+ onChange: (value) => setShowAutoFilter(Boolean(value)),
1936
+ children: localeService.t("sheets-table-ui.showFilterButtons")
1937
+ }),
1938
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1939
+ className: "univer-m-0 univer-text-sm univer-text-gray-500",
1940
+ children: localeService.t("sheets-table-ui.filterButtonsHint")
1941
+ }),
1942
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
1943
+ className: "univer-m-0 univer-min-w-0 univer-border-0 univer-p-0",
1944
+ disabled: !showAutoFilter || saving,
1945
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
1946
+ className: "univer-mb-2 univer-text-sm",
1947
+ children: localeService.t("sheets-table-ui.columnFilterButtons")
1948
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1949
+ className: "univer-flex univer-max-h-64 univer-flex-col univer-gap-2 univer-overflow-y-auto",
1950
+ children: initial === null || initial === void 0 ? void 0 : initial.columns.map((column) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
1951
+ checked: columns[column.id],
1952
+ disabled: !showAutoFilter || saving,
1953
+ onChange: (value) => setColumns((previous) => ({
1954
+ ...previous,
1955
+ [column.id]: Boolean(value)
1956
+ })),
1957
+ children: column.displayName
1958
+ }, column.id))
1959
+ })]
1960
+ }),
1961
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SheetTableCalculatedColumn, {
1962
+ unitId,
1963
+ tableId
1964
+ }),
1965
+ error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1966
+ role: "alert",
1967
+ className: "univer-text-sm univer-text-red-500",
1968
+ children: localeService.t("sheets-table-ui.settingsError")
1969
+ }),
1970
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ActionRowComponent, {
1971
+ className: "univer-flex univer-justify-end univer-gap-2",
1972
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Button, {
1973
+ disabled: saving,
1974
+ onClick: onClose,
1975
+ children: localeService.t("sheets-table-ui.cancel")
1976
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Button, {
1977
+ variant: "primary",
1978
+ disabled: saving || !initial,
1979
+ onClick: handleConfirm,
1980
+ children: localeService.t("sheets-table-ui.confirm")
1981
+ })]
1982
+ })
1983
+ ]
1984
+ });
1985
+ }
1986
+
1987
+ //#endregion
1988
+ //#region src/views/components/MobileSheetTableSettingsDialog.tsx
1989
+ function MobileSheetTableSettingsDialog(props) {
1990
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SheetTableSettingsDialog, {
1991
+ ...props,
1992
+ ActionRowComponent: _univerjs_design.MobileActionRowGroup
1993
+ });
1994
+ }
1995
+
1686
1996
  //#endregion
1687
1997
  //#region src/controllers/sheet-table-theme-ui.controller.ts
1688
1998
  let SheetTableThemeUIController = class SheetTableThemeUIController extends _univerjs_core.Disposable {
@@ -1751,7 +2061,10 @@ const SheetTableThemePanel = (props) => {
1751
2061
  }
1752
2062
  const lastCustomTheme = customRangeThemes[customRangeThemes.length - 1];
1753
2063
  let newThemeName = `${TABLE_CUSTOM_NAME_PREFIX}1`;
1754
- if (lastCustomTheme) newThemeName = `${TABLE_CUSTOM_NAME_PREFIX}${Number(lastCustomTheme.split("-")[2]) + 1}`;
2064
+ if (lastCustomTheme) {
2065
+ const index = Number(lastCustomTheme.split("-")[2]);
2066
+ newThemeName = `${TABLE_CUSTOM_NAME_PREFIX}${index + 1}`;
2067
+ }
1755
2068
  const newTheme = new _univerjs_sheets.RangeThemeStyle(newThemeName, { ..._univerjs_sheets_table.customEmptyThemeWithBorderStyle });
1756
2069
  commandService.executeCommand(_univerjs_sheets_table.AddTableThemeCommand.id, {
1757
2070
  unitId,
@@ -2004,6 +2317,7 @@ let MobileComponentsController = class MobileComponentsController extends _unive
2004
2317
  [SHEETS_TABLE_FILTER_PANEL_OPENED_KEY, MobileSheetTableFilterPanel],
2005
2318
  [SHEET_TABLE_MOBILE_MENU, MobileSheetTableMenu],
2006
2319
  [SHEET_TABLE_RENAME_DIALOG, MobileSheetTableRenameDialog],
2320
+ [SHEET_TABLE_SETTINGS_DIALOG, MobileSheetTableSettingsDialog],
2007
2321
  [TABLE_SELECTOR_DIALOG, MobileSheetTableSelector],
2008
2322
  [SHEET_TABLE_THEME_PANEL, MobileSheetTableThemePanel]
2009
2323
  ].forEach(([key, component]) => {
@@ -2014,37 +2328,6 @@ let MobileComponentsController = class MobileComponentsController extends _unive
2014
2328
  };
2015
2329
  MobileComponentsController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager)), __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_ui.IconManager))], MobileComponentsController);
2016
2330
 
2017
- //#endregion
2018
- //#region src/controllers/mobile/sheet-table-component.controller.ts
2019
- /**
2020
- * Copyright 2023-present DreamNum Co., Ltd.
2021
- *
2022
- * Licensed under the Apache License, Version 2.0 (the "License");
2023
- * you may not use this file except in compliance with the License.
2024
- * You may obtain a copy of the License at
2025
- *
2026
- * http://www.apache.org/licenses/LICENSE-2.0
2027
- *
2028
- * Unless required by applicable law or agreed to in writing, software
2029
- * distributed under the License is distributed on an "AS IS" BASIS,
2030
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2031
- * See the License for the specific language governing permissions and
2032
- * limitations under the License.
2033
- */
2034
- var SheetsTableMobileComponentController = class extends SheetsTableComponentController {
2035
- _openFilterPopup() {
2036
- if (!this.getCurrentTableFilterInfo()) throw new Error("[SheetsFilterUIController]: no filter model when opening filter popup!");
2037
- this._dialogService.open({
2038
- id: UNIVER_SHEET_TABLE_FILTER_PANEL_ID,
2039
- title: { title: "sheets-table-ui.filter.title" },
2040
- children: { label: SHEETS_TABLE_FILTER_PANEL_OPENED_KEY },
2041
- onClose: () => {
2042
- this._contextService.setContextValue(SHEETS_TABLE_FILTER_PANEL_OPENED_KEY, false);
2043
- }
2044
- });
2045
- }
2046
- };
2047
-
2048
2331
  //#endregion
2049
2332
  //#region src/views/widgets/table-controls-util.ts
2050
2333
  function isPointInTableControlRegion(region, x, y) {
@@ -2162,7 +2445,7 @@ var SheetTableControlsShape = class extends _univerjs_engine_render.Shape {
2162
2445
  const left = position.startX;
2163
2446
  const rawTop = position.startY - 28 - ANCHOR_OFFSET_Y;
2164
2447
  const top = Math.max(0, rawTop);
2165
- const width = Math.max(ANCHOR_MIN_WIDTH, Math.min(ANCHOR_MAX_WIDTH, item.tableName.length * 8.5 + ANCHOR_PADDING_X * 2 + ANCHOR_TOGGLE_WIDTH));
2448
+ const width = Math.max(ANCHOR_MIN_WIDTH, Math.min(ANCHOR_MAX_WIDTH, item.tableName.length * 8.5 + 24 + ANCHOR_TOGGLE_WIDTH));
2166
2449
  const toggleRegion = {
2167
2450
  type: "anchor-menu-toggle",
2168
2451
  tableId: item.tableId,
@@ -2314,6 +2597,7 @@ let SheetTableControlsRenderController = class SheetTableControlsRenderControlle
2314
2597
  _defineProperty(this, "_shape", void 0);
2315
2598
  _defineProperty(this, "_topGapBaseBySkeleton", /* @__PURE__ */ new WeakMap());
2316
2599
  _defineProperty(this, "_menuPopup", null);
2600
+ _defineProperty(this, "_settingsDialog", null);
2317
2601
  this._shape = new SheetTableControlsShape("SheetTableControlsShape", () => this._sheetSkeletonManagerService.getCurrentSkeleton() || null);
2318
2602
  this._initShape();
2319
2603
  this._initRefresh();
@@ -2323,7 +2607,10 @@ let SheetTableControlsRenderController = class SheetTableControlsRenderControlle
2323
2607
  var _this$_context$compon;
2324
2608
  this._context.scene.addObjects([this._shape], TABLE_CONTROLS_LAYER_INDEX);
2325
2609
  this.disposeWithMe((0, _univerjs_core.toDisposable)(() => {
2610
+ var _this$_settingsDialog;
2326
2611
  this._closeFloatingControls();
2612
+ (_this$_settingsDialog = this._settingsDialog) === null || _this$_settingsDialog === void 0 || _this$_settingsDialog.dispose();
2613
+ this._settingsDialog = null;
2327
2614
  this._context.scene.removeObjects([this._shape]);
2328
2615
  }));
2329
2616
  this.disposeWithMe(this._shape.onPointerMove$.subscribeEvent((evt, state) => {
@@ -2476,6 +2763,7 @@ let SheetTableControlsRenderController = class SheetTableControlsRenderControlle
2476
2763
  rename: this._localeService.t("sheets-table-ui.rename"),
2477
2764
  "update-range": this._localeService.t("sheets-table-ui.updateRange"),
2478
2765
  "set-theme": this._localeService.t("sheets-table-ui.setTheme"),
2766
+ settings: this._localeService.t("sheets-table-ui.settings"),
2479
2767
  delete: this._localeService.t("sheets-table-ui.removeTable")
2480
2768
  },
2481
2769
  onSelect: (action) => this._handleTableMenuAction(action, unitId, subUnitId, tableId),
@@ -2501,6 +2789,9 @@ let SheetTableControlsRenderController = class SheetTableControlsRenderControlle
2501
2789
  _handleTableMenuAction(action, unitId, subUnitId, tableId) {
2502
2790
  this._closeFloatingControls();
2503
2791
  switch (action) {
2792
+ case "settings":
2793
+ this._openSettingsDialog(unitId, tableId);
2794
+ break;
2504
2795
  case "rename":
2505
2796
  this._openRenameDialog(unitId, tableId);
2506
2797
  break;
@@ -2508,15 +2799,34 @@ let SheetTableControlsRenderController = class SheetTableControlsRenderControlle
2508
2799
  case "set-theme":
2509
2800
  this._openThemePanel(unitId, subUnitId, tableId);
2510
2801
  break;
2511
- case "delete":
2512
- this._commandService.executeCommand(_univerjs_sheets_table.DeleteSheetTableCommand.id, {
2513
- tableId,
2514
- subUnitId,
2515
- unitId
2516
- });
2517
- break;
2802
+ case "delete": this._commandService.executeCommand(_univerjs_sheets_table.DeleteSheetTableCommand.id, {
2803
+ tableId,
2804
+ subUnitId,
2805
+ unitId
2806
+ });
2518
2807
  }
2519
2808
  }
2809
+ _openSettingsDialog(unitId, tableId) {
2810
+ var _this$_settingsDialog2;
2811
+ (_this$_settingsDialog2 = this._settingsDialog) === null || _this$_settingsDialog2 === void 0 || _this$_settingsDialog2.dispose();
2812
+ this._dialogService.open({
2813
+ id: SHEET_TABLE_SETTINGS_DIALOG_ID,
2814
+ title: { title: this._localeService.t("sheets-table-ui.settings") },
2815
+ draggable: true,
2816
+ mask: true,
2817
+ children: { label: {
2818
+ name: SHEET_TABLE_SETTINGS_DIALOG,
2819
+ props: {
2820
+ unitId,
2821
+ tableId,
2822
+ onClose: () => this._dialogService.close(SHEET_TABLE_SETTINGS_DIALOG_ID)
2823
+ }
2824
+ } },
2825
+ width: 400,
2826
+ onClose: () => this._dialogService.close(SHEET_TABLE_SETTINGS_DIALOG_ID)
2827
+ });
2828
+ this._settingsDialog = (0, _univerjs_core.toDisposable)(() => this._dialogService.close(SHEET_TABLE_SETTINGS_DIALOG_ID));
2829
+ }
2520
2830
  _openRenameDialog(unitId, tableId) {
2521
2831
  this._dialogService.open({
2522
2832
  id: SHEET_TABLE_RENAME_DIALOG_ID,
@@ -2695,6 +3005,7 @@ var SheetTableControlsMobileRenderController = class extends SheetTableControlsR
2695
3005
  rename: this._localeService.t("sheets-table-ui.rename"),
2696
3006
  "update-range": this._localeService.t("sheets-table-ui.updateRange"),
2697
3007
  "set-theme": this._localeService.t("sheets-table-ui.setTheme"),
3008
+ settings: this._localeService.t("sheets-table-ui.settings"),
2698
3009
  delete: this._localeService.t("sheets-table-ui.removeTable")
2699
3010
  },
2700
3011
  onSelect: (action) => this._handleTableMenuAction(action, unitId, subUnitId, tableId),
@@ -2769,16 +3080,15 @@ let SheetsTableFilterButtonShape = class SheetsTableFilterButtonShape extends _u
2769
3080
  }
2770
3081
  _drawChevron(ctx, color) {
2771
3082
  const centerX = 16 / 2;
2772
- const centerY = 16 / 2;
2773
3083
  ctx.save();
2774
3084
  ctx.beginPath();
2775
3085
  ctx.strokeStyle = color;
2776
3086
  ctx.lineWidth = 1.8;
2777
3087
  ctx.lineCap = "round";
2778
3088
  ctx.lineJoin = "round";
2779
- ctx.moveTo(centerX - 4.5, centerY - 2.5);
3089
+ ctx.moveTo(3.5, 5.5);
2780
3090
  ctx.lineTo(centerX, 10);
2781
- ctx.lineTo(12.5, centerY - 2.5);
3091
+ ctx.lineTo(12.5, 5.5);
2782
3092
  ctx.stroke();
2783
3093
  ctx.restore();
2784
3094
  }
@@ -2861,7 +3171,12 @@ let SheetsTableFilterButtonRenderController = class SheetsTableFilterButtonRende
2861
3171
  _initCommandExecuted() {
2862
3172
  this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
2863
3173
  var _workbook$getActiveSh2;
2864
- if (command.id !== _univerjs_sheets.SetVerticalTextAlignCommand.id) return;
3174
+ if (command.id !== _univerjs_sheets.SetVerticalTextAlignCommand.id && command.id !== _univerjs_sheets_table.SetSheetTableMutation.id) return;
3175
+ if (command.id === _univerjs_sheets_table.SetSheetTableMutation.id) {
3176
+ var _this$_context$unit$g;
3177
+ const params = command.params;
3178
+ if (!(params === null || params === void 0 ? void 0 : params.config.filterButtons) || params.unitId !== this._context.unitId || params.subUnitId !== ((_this$_context$unit$g = this._context.unit.getActiveSheet()) === null || _this$_context$unit$g === void 0 ? void 0 : _this$_context$unit$g.getSheetId())) return;
3179
+ }
2865
3180
  const { unit: workbook, unitId } = this._context;
2866
3181
  const worksheetId = ((_workbook$getActiveSh2 = workbook.getActiveSheet()) === null || _workbook$getActiveSh2 === void 0 ? void 0 : _workbook$getActiveSh2.getSheetId()) || "";
2867
3182
  const skeleton = this._sheetSkeletonManagerService.getCurrentSkeleton();
@@ -2889,8 +3204,14 @@ let SheetsTableFilterButtonRenderController = class SheetsTableFilterButtonRende
2889
3204
  const headerStyle = table ? (_this$_rangeThemeMode = this._rangeThemeModel.getRangeThemeStyle(unitId, table.getTableStyleId())) === null || _this$_rangeThemeMode === void 0 ? void 0 : _this$_rangeThemeMode.getHeaderRowStyle() : null;
2890
3205
  const iconColor = (headerStyle === null || headerStyle === void 0 || (_headerStyle$cl = headerStyle.cl) === null || _headerStyle$cl === void 0 ? void 0 : _headerStyle$cl.rgb) ?? "#fff";
2891
3206
  const hoverIconColor = (headerStyle === null || headerStyle === void 0 || (_headerStyle$bg = headerStyle.bg) === null || _headerStyle$bg === void 0 ? void 0 : _headerStyle$bg.rgb) ?? "#202124";
2892
- this._interceptCellContent(unitId, worksheetId, range);
3207
+ const visibleColumns = /* @__PURE__ */ new Set();
3208
+ for (let col = startColumn; col <= endColumn; col++) {
3209
+ var _table$getTableColumn;
3210
+ if ((table === null || table === void 0 || (_table$getTableColumn = table.getTableColumnByIndex(col - startColumn)) === null || _table$getTableColumn === void 0 ? void 0 : _table$getTableColumn.isShowFilterButton()) !== false) visibleColumns.add(col);
3211
+ }
3212
+ this._interceptCellContent(unitId, worksheetId, range, visibleColumns);
2893
3213
  for (let col = startColumn; col <= endColumn; col++) {
3214
+ if (!visibleColumns.has(col)) continue;
2894
3215
  const key = `sheets-table-filter-button-${startRow}-${col}`;
2895
3216
  const startPosition = (0, _univerjs_sheets_ui.getCoordByCell)(startRow, col, scene, skeleton);
2896
3217
  const cellStyle = worksheet.getCellStyle(startRow, col);
@@ -2927,13 +3248,13 @@ let SheetsTableFilterButtonRenderController = class SheetsTableFilterButtonRende
2927
3248
  scene.addObjects(this._tableFilterButtonShapes);
2928
3249
  scene.makeDirty();
2929
3250
  }
2930
- _interceptCellContent(workbookId, worksheetId, range) {
3251
+ _interceptCellContent(workbookId, worksheetId, range, visibleColumns) {
2931
3252
  const { startRow, startColumn, endColumn } = range;
2932
3253
  this._buttonRenderDisposable = this._sheetInterceptorService.intercept(_univerjs_sheets.INTERCEPTOR_POINT.CELL_CONTENT, {
2933
3254
  effect: _univerjs_core.InterceptorEffectEnum.Style,
2934
3255
  handler: (cell, pos, next) => {
2935
3256
  const { row, col, unitId, subUnitId } = pos;
2936
- if (unitId !== workbookId || subUnitId !== worksheetId || row !== startRow || col < startColumn || col > endColumn) return next(cell);
3257
+ if (unitId !== workbookId || subUnitId !== worksheetId || row !== startRow || col < startColumn || col > endColumn || !visibleColumns.has(col)) return next(cell);
2937
3258
  if (!cell || cell === pos.rawData) cell = { ...pos.rawData };
2938
3259
  cell.fontRenderExtension = {
2939
3260
  ...cell === null || cell === void 0 ? void 0 : cell.fontRenderExtension,
@@ -3076,7 +3397,42 @@ SheetTableSelectionController = __decorate([
3076
3397
  ], SheetTableSelectionController);
3077
3398
 
3078
3399
  //#endregion
3079
- //#region src/menu/sheet-table-menu.controller.ts
3400
+ //#region src/menu/mobile-schema.ts
3401
+ const mobileMenuSchema = {
3402
+ [_univerjs_ui.RibbonDataGroup.ORGANIZATION]: { [OpenTableSelectorOperation.id]: {
3403
+ order: 0,
3404
+ menuItemFactory: sheetTableToolbarInsertMenuFactory
3405
+ } },
3406
+ [_univerjs_ui.ContextMenuPosition.MAIN_AREA]: { [_univerjs_ui.ContextMenuGroup.LAYOUT]: {
3407
+ [SHEET_TABLE_CONTEXT_INSERT_MENU_ID]: {
3408
+ order: 5,
3409
+ menuItemFactory: SheetTableInsertContextMenuFactory,
3410
+ [_univerjs_sheets_table.SheetTableInsertRowCommand.id]: {
3411
+ order: 1,
3412
+ menuItemFactory: SheetTableInsertRowMenuFactory
3413
+ },
3414
+ [_univerjs_sheets_table.SheetTableInsertColCommand.id]: {
3415
+ order: 2,
3416
+ menuItemFactory: SheetTableInsertColMenuFactory
3417
+ }
3418
+ },
3419
+ [SHEET_TABLE_CONTEXT_REMOVE_MENU_ID]: {
3420
+ order: 6,
3421
+ menuItemFactory: SheetTableRemoveContextMenuFactory,
3422
+ [_univerjs_sheets_table.SheetTableRemoveRowCommand.id]: {
3423
+ order: 1,
3424
+ menuItemFactory: SheetTableRemoveRowMenuFactory
3425
+ },
3426
+ [_univerjs_sheets_table.SheetTableRemoveColCommand.id]: {
3427
+ order: 2,
3428
+ menuItemFactory: SheetTableRemoveColMenuFactory
3429
+ }
3430
+ }
3431
+ } }
3432
+ };
3433
+
3434
+ //#endregion
3435
+ //#region src/menu/mobile-sheet-table-menu.controller.ts
3080
3436
  /**
3081
3437
  * Copyright 2023-present DreamNum Co., Ltd.
3082
3438
  *
@@ -3092,17 +3448,13 @@ SheetTableSelectionController = __decorate([
3092
3448
  * See the License for the specific language governing permissions and
3093
3449
  * limitations under the License.
3094
3450
  */
3095
- let SheetTableMenuController = class SheetTableMenuController extends _univerjs_core.Disposable {
3096
- constructor(_menuManagerService) {
3451
+ let MobileSheetTableMenuController = class MobileSheetTableMenuController extends _univerjs_core.Disposable {
3452
+ constructor(menuManagerService) {
3097
3453
  super();
3098
- this._menuManagerService = _menuManagerService;
3099
- this._initMenu();
3100
- }
3101
- _initMenu() {
3102
- this._menuManagerService.mergeMenu(menuSchema);
3454
+ menuManagerService.mergeMenu(mobileMenuSchema);
3103
3455
  }
3104
3456
  };
3105
- SheetTableMenuController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.IMenuManagerService))], SheetTableMenuController);
3457
+ MobileSheetTableMenuController = __decorate([__decorateParam(0, _univerjs_ui.IMenuManagerService)], MobileSheetTableMenuController);
3106
3458
 
3107
3459
  //#endregion
3108
3460
  //#region src/mobile-plugin.ts
@@ -3124,9 +3476,8 @@ let UniverSheetsTableMobileUIPlugin = class UniverSheetsTableMobileUIPlugin exte
3124
3476
  this._injector.get(MobileComponentsController);
3125
3477
  (0, _univerjs_core.registerDependencies)(this._injector, [
3126
3478
  [SheetsTableMobileComponentController],
3127
- [SheetsTableComponentController, { useExisting: SheetsTableMobileComponentController }],
3128
3479
  [SheetsTableUiService],
3129
- [SheetTableMenuController],
3480
+ [MobileSheetTableMenuController],
3130
3481
  [SheetTableThemeUIController],
3131
3482
  [SheetTableSelectionController]
3132
3483
  ]);
@@ -3135,7 +3486,7 @@ let UniverSheetsTableMobileUIPlugin = class UniverSheetsTableMobileUIPlugin exte
3135
3486
  (0, _univerjs_core.touchDependencies)(this._injector, [
3136
3487
  [SheetsTableMobileComponentController],
3137
3488
  [SheetsTableUiService],
3138
- [SheetTableMenuController],
3489
+ [MobileSheetTableMenuController],
3139
3490
  [SheetTableThemeUIController],
3140
3491
  [SheetTableSelectionController]
3141
3492
  ]);
@@ -3152,7 +3503,7 @@ let UniverSheetsTableMobileUIPlugin = class UniverSheetsTableMobileUIPlugin exte
3152
3503
  });
3153
3504
  }
3154
3505
  _initRegisterCommand() {
3155
- [OpenTableFilterPanelOperation, OpenTableSelectorOperation].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
3506
+ [OpenTableFilterPanelMobileOperation, OpenTableSelectorOperation].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
3156
3507
  }
3157
3508
  };
3158
3509
  _defineProperty(UniverSheetsTableMobileUIPlugin, "pluginName", PLUGIN_NAME);
@@ -3264,11 +3615,12 @@ const SheetTableConditionPanel = (props) => {
3264
3615
  const compare = value[1];
3265
3616
  if (compare) setConditionVisible(false);
3266
3617
  const info = {};
3267
- if (type === _univerjs_sheets_table.TableConditionTypeEnum.Date) if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.Q1;
3268
- else if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Month) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.M1;
3269
- else if (datePickerSet.has(compare)) info.date = /* @__PURE__ */ new Date();
3270
- else info.dateRange = [/* @__PURE__ */ new Date(), /* @__PURE__ */ new Date()];
3271
- else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Number) info.number = 0;
3618
+ if (type === _univerjs_sheets_table.TableConditionTypeEnum.Date) {
3619
+ if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Quarter) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.Q1;
3620
+ else if (compare === _univerjs_sheets_table.TableDateCompareTypeEnum.Month) info.dateSelect = _univerjs_sheets_table.TableDateCompareTypeEnum.M1;
3621
+ else if (datePickerSet.has(compare)) info.date = /* @__PURE__ */ new Date();
3622
+ else info.dateRange = [/* @__PURE__ */ new Date(), /* @__PURE__ */ new Date()];
3623
+ } else if (type === _univerjs_sheets_table.TableConditionTypeEnum.Number) info.number = 0;
3272
3624
  else if (type === _univerjs_sheets_table.TableConditionTypeEnum.String) info.string = "";
3273
3625
  handleConditionInfo(info, value[0], value[1] ?? _univerjs_sheets_table.TableStringCompareTypeEnum.Equal);
3274
3626
  };
@@ -3375,7 +3727,7 @@ const getCheckedItemCount = (map, checkedItemSet) => {
3375
3727
  return count;
3376
3728
  };
3377
3729
  function SheetTableItemsFilterPanel(props) {
3378
- const { unitId, tableId, subUnitId, columnIndex, checkedItemSet, setCheckedItemSet, tableFilter } = props;
3730
+ const { unitId, tableId, subUnitId, columnIndex, checkedItemSet, setCheckedItemSet, tableFilter, onSelectAllChange, onItemChange } = props;
3379
3731
  const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
3380
3732
  const { data: items, itemsCountMap, allItemsCount } = (0, _univerjs_ui.useDependency)(SheetsTableUiService).getTableFilterItems(unitId, subUnitId, tableId, columnIndex);
3381
3733
  const [allChecked, setAllChecked] = (0, react.useState)(tableFilter === void 0 ? true : checkedItemSet.size === itemsCountMap.size);
@@ -3387,38 +3739,75 @@ function SheetTableItemsFilterPanel(props) {
3387
3739
  return String(item.title).toLowerCase().includes(searchText.toLowerCase());
3388
3740
  }) : items;
3389
3741
  }, [searchText, items]);
3390
- const onCheckAllToggled = (0, react.useCallback)(() => {
3742
+ const recordFilter = (0, _univerjs_sheets_table.isRecordTableFilter)(tableFilter);
3743
+ const allDisplayedChecked = displayItems.length > 0 && displayItems.every((item) => checkedItemSet.has(item.valueKey ?? item.title));
3744
+ const someDisplayedChecked = displayItems.some((item) => checkedItemSet.has(item.valueKey ?? item.title));
3745
+ const displayedAllChecked = recordFilter ? allDisplayedChecked : allChecked;
3746
+ const displayedIndeterminate = recordFilter ? !allDisplayedChecked && someDisplayedChecked : indeterminate;
3747
+ const onCheckAllToggled = () => {
3748
+ if (recordFilter) {
3749
+ const next = new Set(checkedItemSet);
3750
+ displayItems.forEach((item) => {
3751
+ const itemKey = item.valueKey ?? item.title;
3752
+ if (allDisplayedChecked) next.delete(itemKey);
3753
+ else next.add(itemKey);
3754
+ });
3755
+ setCheckedItemSet(next);
3756
+ setCheckedCount(getCheckedItemCount(itemsCountMap, next));
3757
+ onSelectAllChange === null || onSelectAllChange === void 0 || onSelectAllChange(!allDisplayedChecked && searchText === "");
3758
+ return;
3759
+ }
3391
3760
  if (allChecked) {
3392
3761
  checkedItemSet.clear();
3393
3762
  setCheckedItemSet(new Set(checkedItemSet));
3394
3763
  setAllChecked(false);
3764
+ onSelectAllChange === null || onSelectAllChange === void 0 || onSelectAllChange(false);
3395
3765
  } else {
3396
3766
  displayItems.forEach((item) => {
3397
- checkedItemSet.add(item.title);
3767
+ checkedItemSet.add(item.valueKey ?? item.title);
3398
3768
  });
3399
3769
  setCheckedItemSet(new Set(checkedItemSet));
3400
3770
  setAllChecked(true);
3771
+ onSelectAllChange === null || onSelectAllChange === void 0 || onSelectAllChange(items.every((item) => checkedItemSet.has(item.valueKey ?? item.title)));
3772
+ }
3773
+ };
3774
+ const onSearchValueChange = (str) => {
3775
+ if (recordFilter) {
3776
+ setSearchText(str);
3777
+ return;
3401
3778
  }
3402
- }, [allChecked]);
3403
- const onSearchValueChange = (0, react.useCallback)((str) => {
3404
3779
  if (str === "") {
3405
3780
  setAllChecked(true);
3406
3781
  items.forEach((item) => {
3407
- checkedItemSet.add(item.title);
3782
+ checkedItemSet.add(item.valueKey ?? item.title);
3408
3783
  });
3409
3784
  setCheckedCount(allItemsCount);
3785
+ onSelectAllChange === null || onSelectAllChange === void 0 || onSelectAllChange(true);
3410
3786
  } else {
3411
3787
  checkedItemSet.clear();
3412
3788
  setAllChecked(false);
3413
3789
  setCheckedCount(0);
3790
+ onSelectAllChange === null || onSelectAllChange === void 0 || onSelectAllChange(false);
3414
3791
  }
3415
3792
  setSearchText(str);
3416
- }, []);
3793
+ };
3417
3794
  const onCheckItemToggled = (key) => {
3795
+ onItemChange === null || onItemChange === void 0 || onItemChange();
3796
+ if (recordFilter) {
3797
+ const next = new Set(checkedItemSet);
3798
+ if (next.has(key)) next.delete(key);
3799
+ else next.add(key);
3800
+ setCheckedCount(getCheckedItemCount(itemsCountMap, next));
3801
+ setCheckedItemSet(next);
3802
+ return;
3803
+ }
3418
3804
  if (allChecked) {
3419
3805
  setAllChecked(false);
3420
3806
  const newSet = /* @__PURE__ */ new Set();
3421
- for (const { title } of items) if (key !== title) newSet.add(title);
3807
+ for (const item of items) {
3808
+ const itemKey = item.valueKey ?? item.title;
3809
+ if (key !== itemKey) newSet.add(itemKey);
3810
+ }
3422
3811
  setCheckedCount(allItemsCount - itemsCountMap.get(key));
3423
3812
  setCheckedItemSet(newSet);
3424
3813
  } else {
@@ -3450,9 +3839,9 @@ function SheetTableItemsFilterPanel(props) {
3450
3839
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
3451
3840
  className: "univer-min-w-0 univer-flex-1",
3452
3841
  contentClassName: "univer-flex-1 univer-min-w-0",
3453
- indeterminate,
3842
+ indeterminate: displayedIndeterminate,
3454
3843
  disabled: items.length === 0,
3455
- checked: allChecked,
3844
+ checked: displayedAllChecked,
3456
3845
  onChange: onCheckAllToggled,
3457
3846
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3458
3847
  className: "univer-flex univer-h-5 univer-flex-1 univer-items-center univer-text-sm",
@@ -3466,14 +3855,15 @@ function SheetTableItemsFilterPanel(props) {
3466
3855
  })
3467
3856
  })
3468
3857
  }), displayItems.map((item) => {
3858
+ const itemKey = item.valueKey ?? item.title;
3469
3859
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3470
3860
  className: "univer-flex univer-items-center univer-px-2 univer-py-1",
3471
3861
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
3472
3862
  className: "univer-min-w-0 univer-flex-1",
3473
3863
  contentClassName: "univer-flex-1 univer-min-w-0",
3474
- checked: allChecked || checkedItemSet.has(item.title),
3864
+ checked: displayedAllChecked || checkedItemSet.has(itemKey),
3475
3865
  onChange: () => {
3476
- onCheckItemToggled(item.title);
3866
+ onCheckItemToggled(itemKey);
3477
3867
  },
3478
3868
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3479
3869
  className: "univer-flex univer-h-5 univer-flex-1 univer-items-center univer-text-sm",
@@ -3482,7 +3872,7 @@ function SheetTableItemsFilterPanel(props) {
3482
3872
  children: item.title
3483
3873
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3484
3874
  className: "univer-ml-1 univer-inline-flex univer-h-full univer-items-center univer-text-gray-400",
3485
- children: `(${itemsCountMap.get(item.title) || 0})`
3875
+ children: `(${itemsCountMap.get(itemKey) || 0})`
3486
3876
  })]
3487
3877
  })
3488
3878
  })
@@ -3528,7 +3918,8 @@ function SheetTableFilterPanel() {
3528
3918
  const { unitId, subUnitId, tableId, tableFilter, currentFilterBy, columnIndex } = panelProps;
3529
3919
  const { data } = tableUiService.getTableFilterItems(unitId, subUnitId, tableId, columnIndex);
3530
3920
  const checkedItems = tableUiService.getTableFilterCheckedItems(unitId, tableId, columnIndex);
3531
- const [checkedItemSet, setCheckedItemSet] = (0, react.useState)(() => new Set((0, _univerjs_sheets_table.isManualTableFilter)(tableFilter) ? checkedItems : data.map((item) => item.title)));
3921
+ const [checkedItemSet, setCheckedItemSet] = (0, react.useState)(() => new Set((tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.manual || (tableFilter === null || tableFilter === void 0 ? void 0 : tableFilter.filterType) === _univerjs_sheets_table.TableColumnFilterTypeEnum.record ? checkedItems : data.map((item) => item.valueKey ?? item.title)));
3922
+ const [selectAllRequested, setSelectAllRequested] = (0, react.useState)(false);
3532
3923
  const [filterBy, setFilterBy] = (0, react.useState)(currentFilterBy || "items");
3533
3924
  const [conditionInfo, setConditionInfo] = (0, react.useState)(() => {
3534
3925
  const tableFilter = panelProps.tableFilter;
@@ -3594,23 +3985,17 @@ function SheetTableFilterPanel() {
3594
3985
  const onApply = async () => {
3595
3986
  let filter;
3596
3987
  if (filterBy === "items") {
3597
- const filteredItems = [];
3598
- const emptyLabel = localeService.t("sheets-table-ui.condition.empty");
3599
- for (const itemInfo of data) if (checkedItemSet.has(itemInfo.title)) filteredItems.push(itemInfo.title === emptyLabel ? _univerjs_sheets_table.TABLE_FILTER_EMPTY_VALUE : itemInfo.title);
3988
+ filter = tableUiService.createItemFilter(unitId, tableId, columnIndex, tableUiService.getTableFilterItems(unitId, subUnitId, tableId, columnIndex), checkedItemSet, selectAllRequested);
3600
3989
  const originFilter = table.getTableFilterColumn(columnIndex);
3601
- if ((0, _univerjs_sheets_table.isManualTableFilter)(originFilter)) {
3602
- if (originFilter.values.join(",") === filteredItems.join(",")) {
3990
+ if ((0, _univerjs_sheets_table.isManualTableFilter)(originFilter) && (0, _univerjs_sheets_table.isManualTableFilter)(filter)) {
3991
+ if (originFilter.values.join(",") === filter.values.join(",")) {
3603
3992
  closeDialog();
3604
3993
  return;
3605
3994
  }
3606
- } else if (filteredItems.length === data.length && !originFilter) {
3995
+ } else if (!filter && !originFilter) {
3607
3996
  closeDialog();
3608
3997
  return;
3609
3998
  }
3610
- filter = filteredItems.length === data.length ? void 0 : {
3611
- filterType: _univerjs_sheets_table.TableColumnFilterTypeEnum.manual,
3612
- values: filteredItems
3613
- };
3614
3999
  } else if (filterBy === "color") {
3615
4000
  const cellFillColors = colors.cellFillColors.filter((item) => item.checked).map((item) => item.color);
3616
4001
  const cellTextColors = colors.cellTextColors.filter((item) => item.checked).map((item) => item.color);
@@ -3644,10 +4029,11 @@ function SheetTableFilterPanel() {
3644
4029
  if (await tableUiService.setTableFilter(unitId, tableId, columnIndex, void 0)) closeDialog();
3645
4030
  };
3646
4031
  const workbookEditableId = new _univerjs_sheets.WorkbookEditablePermission(unitId).id;
4032
+ const editable = (_permissionService$ge = permissionService.getPermissionPoint(workbookEditableId)) === null || _permissionService$ge === void 0 ? void 0 : _permissionService$ge.value;
3647
4033
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3648
4034
  className: "univer-box-border univer-flex univer-w-[400px] univer-flex-col univer-rounded-[10px] univer-bg-gray-0 univer-p-4 univer-shadow-lg dark:!univer-border-gray-600 dark:!univer-bg-gray-700",
3649
4035
  children: [
3650
- ((_permissionService$ge = permissionService.getPermissionPoint(workbookEditableId)) === null || _permissionService$ge === void 0 ? void 0 : _permissionService$ge.value) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4036
+ editable && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3651
4037
  className: "-univer-mx-4 -univer-mt-2 univer-mb-3 univer-border-0 univer-border-b univer-border-solid univer-border-gray-200 univer-py-1",
3652
4038
  children: [
3653
4039
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
@@ -3714,7 +4100,9 @@ function SheetTableFilterPanel() {
3714
4100
  tableId,
3715
4101
  columnIndex,
3716
4102
  checkedItemSet,
3717
- setCheckedItemSet
4103
+ setCheckedItemSet,
4104
+ onSelectAllChange: setSelectAllRequested,
4105
+ onItemChange: () => setSelectAllRequested(false)
3718
4106
  }),
3719
4107
  filterBy === "color" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SheetTableColorFilterPanel, {
3720
4108
  colors,
@@ -3778,6 +4166,11 @@ function SheetTableMenu({ popup }) {
3778
4166
  children: menu.labels["set-theme"],
3779
4167
  onSelect: () => menu.onSelect("set-theme")
3780
4168
  },
4169
+ {
4170
+ type: "item",
4171
+ children: menu.labels.settings,
4172
+ onSelect: () => menu.onSelect("settings")
4173
+ },
3781
4174
  {
3782
4175
  type: "item",
3783
4176
  children: menu.labels.delete,
@@ -3829,7 +4222,8 @@ let ComponentsController = class ComponentsController extends _univerjs_core.Dis
3829
4222
  [
3830
4223
  [SHEETS_TABLE_FILTER_PANEL_OPENED_KEY, SheetTableFilterPanel],
3831
4224
  [SHEET_TABLE_MENU, SheetTableMenu],
3832
- [SHEET_TABLE_RENAME_DIALOG, SheetTableRenameDialog]
4225
+ [SHEET_TABLE_RENAME_DIALOG, SheetTableRenameDialog],
4226
+ [SHEET_TABLE_SETTINGS_DIALOG, SheetTableSettingsDialog]
3833
4227
  ].forEach(([key, comp]) => {
3834
4228
  this.disposeWithMe(this._componentManager.register(key, comp));
3835
4229
  });
@@ -3843,6 +4237,35 @@ let ComponentsController = class ComponentsController extends _univerjs_core.Dis
3843
4237
  };
3844
4238
  ComponentsController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager)), __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_ui.IconManager))], ComponentsController);
3845
4239
 
4240
+ //#endregion
4241
+ //#region src/menu/sheet-table-menu.controller.ts
4242
+ /**
4243
+ * Copyright 2023-present DreamNum Co., Ltd.
4244
+ *
4245
+ * Licensed under the Apache License, Version 2.0 (the "License");
4246
+ * you may not use this file except in compliance with the License.
4247
+ * You may obtain a copy of the License at
4248
+ *
4249
+ * http://www.apache.org/licenses/LICENSE-2.0
4250
+ *
4251
+ * Unless required by applicable law or agreed to in writing, software
4252
+ * distributed under the License is distributed on an "AS IS" BASIS,
4253
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4254
+ * See the License for the specific language governing permissions and
4255
+ * limitations under the License.
4256
+ */
4257
+ let SheetTableMenuController = class SheetTableMenuController extends _univerjs_core.Disposable {
4258
+ constructor(_menuManagerService) {
4259
+ super();
4260
+ this._menuManagerService = _menuManagerService;
4261
+ this._initMenu();
4262
+ }
4263
+ _initMenu() {
4264
+ this._menuManagerService.mergeMenu(menuSchema);
4265
+ }
4266
+ };
4267
+ SheetTableMenuController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.IMenuManagerService))], SheetTableMenuController);
4268
+
3846
4269
  //#endregion
3847
4270
  //#region src/plugin.ts
3848
4271
  let UniverSheetsTableUIPlugin = class UniverSheetsTableUIPlugin extends _univerjs_core.Plugin {