@visactor/vtable-sheet 1.23.3-alpha.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/sheet-tab-event-handler.js +2 -5
- package/cjs/components/sheet-tab-event-handler.js.map +1 -1
- package/cjs/components/vtable-sheet.d.ts +14 -0
- package/cjs/components/vtable-sheet.js +77 -55
- package/cjs/components/vtable-sheet.js.map +1 -1
- package/cjs/core/WorkSheet.js +3 -46
- package/cjs/core/WorkSheet.js.map +1 -1
- package/cjs/core/table-plugins.js +30 -2
- package/cjs/core/table-plugins.js.map +1 -1
- package/cjs/formula/formula-editor.d.ts +1 -1
- package/cjs/formula/formula-editor.js +22 -5
- package/cjs/formula/formula-editor.js.map +1 -1
- package/cjs/formula/formula-engine.d.ts +1 -0
- package/cjs/formula/formula-engine.js +47 -16
- package/cjs/formula/formula-engine.js.map +1 -1
- package/cjs/formula/formula-range-selector.js +1 -5
- package/cjs/formula/formula-range-selector.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/managers/formula-manager.d.ts +3 -1
- package/cjs/managers/formula-manager.js +7 -5
- package/cjs/managers/formula-manager.js.map +1 -1
- package/cjs/managers/menu-manager.d.ts +7 -1
- package/cjs/managers/menu-manager.js +37 -4
- package/cjs/managers/menu-manager.js.map +1 -1
- package/cjs/managers/tab-drag-manager.d.ts +2 -2
- package/cjs/managers/tab-drag-manager.js +1 -2
- package/cjs/managers/tab-drag-manager.js.map +1 -1
- package/cjs/managers/workbook-history-manager.d.ts +53 -0
- package/cjs/managers/workbook-history-manager.js +294 -0
- package/cjs/managers/workbook-history-manager.js.map +1 -0
- package/cjs/styles/menu.js +1 -1
- package/cjs/styles/menu.js.map +1 -1
- package/cjs/test-shims/vtable-plugins.d.ts +5 -0
- package/cjs/test-shims/vtable-plugins.js +34 -0
- package/cjs/test-shims/vtable-plugins.js.map +1 -0
- package/cjs/ts-types/base.js +1 -2
- package/cjs/ts-types/formula.js +2 -1
- package/cjs/ts-types/index.d.ts +4 -0
- package/cjs/ts-types/index.js.map +1 -1
- package/dist/vtable-sheet.js +2559 -336
- package/dist/vtable-sheet.min.js +1 -1
- package/es/components/sheet-tab-event-handler.js +1 -4
- package/es/components/sheet-tab-event-handler.js.map +1 -1
- package/es/components/vtable-sheet.d.ts +14 -0
- package/es/components/vtable-sheet.js +76 -33
- package/es/components/vtable-sheet.js.map +1 -1
- package/es/core/WorkSheet.js +3 -46
- package/es/core/WorkSheet.js.map +1 -1
- package/es/core/table-plugins.js +31 -1
- package/es/core/table-plugins.js.map +1 -1
- package/es/formula/formula-editor.d.ts +1 -1
- package/es/formula/formula-editor.js +19 -4
- package/es/formula/formula-editor.js.map +1 -1
- package/es/formula/formula-engine.d.ts +1 -0
- package/es/formula/formula-engine.js +47 -16
- package/es/formula/formula-engine.js.map +1 -1
- package/es/formula/formula-range-selector.js +1 -5
- package/es/formula/formula-range-selector.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/managers/formula-manager.d.ts +3 -1
- package/es/managers/formula-manager.js +7 -5
- package/es/managers/formula-manager.js.map +1 -1
- package/es/managers/menu-manager.d.ts +7 -1
- package/es/managers/menu-manager.js +37 -4
- package/es/managers/menu-manager.js.map +1 -1
- package/es/managers/tab-drag-manager.d.ts +2 -2
- package/es/managers/tab-drag-manager.js +1 -2
- package/es/managers/tab-drag-manager.js.map +1 -1
- package/es/managers/workbook-history-manager.d.ts +53 -0
- package/es/managers/workbook-history-manager.js +286 -0
- package/es/managers/workbook-history-manager.js.map +1 -0
- package/es/styles/menu.js +1 -1
- package/es/styles/menu.js.map +1 -1
- package/es/test-shims/vtable-plugins.d.ts +5 -0
- package/es/test-shims/vtable-plugins.js +6 -0
- package/es/test-shims/vtable-plugins.js.map +1 -0
- package/es/ts-types/base.js +1 -2
- package/es/ts-types/formula.js +2 -1
- package/es/ts-types/index.d.ts +4 -0
- package/es/ts-types/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -38,15 +38,12 @@ class SheetTabEventHandler {
|
|
|
38
38
|
targetTab.addEventListener("blur", onBlur), targetTab.addEventListener("keydown", onKeyDown);
|
|
39
39
|
}
|
|
40
40
|
renameSheet(sheetKey, newTitle) {
|
|
41
|
-
var _a;
|
|
42
41
|
if (!this.vTableSheet.getSheetManager().getSheet(sheetKey)) return !1;
|
|
43
42
|
const error = (0, tools_1.checkTabTitle)(newTitle);
|
|
44
43
|
if (error) return (0, snackbar_1.showSnackbar)(error, 1300), !1;
|
|
45
44
|
return this.vTableSheet.getSheetManager().getAllSheets().find((s => s.sheetKey !== sheetKey && s.sheetTitle.toLowerCase() === newTitle.toLowerCase())) ? ((0,
|
|
46
|
-
snackbar_1.showSnackbar)("工作表名称已存在,请重新输入", 1300), !1) : (this.vTableSheet.
|
|
47
|
-
|
|
48
|
-
this.vTableSheet.getFormulaManager().updateSheetTitle(sheetKey, newTitle), this.vTableSheet.updateSheetTabs(),
|
|
49
|
-
this.vTableSheet.updateSheetMenu(), !0);
|
|
45
|
+
snackbar_1.showSnackbar)("工作表名称已存在,请重新输入", 1300), !1) : (this.vTableSheet.renameSheet(sheetKey, newTitle),
|
|
46
|
+
!0);
|
|
50
47
|
}
|
|
51
48
|
getSheetTabElementByKey(sheetKey) {
|
|
52
49
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/sheet-tab-event-handler.ts"],"names":[],"mappings":"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","file":"sheet-tab-event-handler.js","sourcesContent":["import type VTableSheet from './vtable-sheet';\nimport { showSnackbar } from '../tools/ui/snackbar';\nimport { checkTabTitle } from '../tools';\n\n/**\n * Sheet Tab Event Handler\n * 专门处理sheet标签页相关的事件逻辑\n */\nexport class SheetTabEventHandler {\n private vTableSheet: VTableSheet;\n\n constructor(vTableSheet: VTableSheet) {\n this.vTableSheet = vTableSheet;\n }\n\n /**\n * 处理sheet标签双击事件\n * 双击sheet标签后,将标签设为可编辑状态。输入完成后进行重命名。\n * @param sheetKey 工作表key\n * @param originalTitle 原始名称\n */\n handleSheetTabDblClick(sheetKey: string, originalTitle: string): void {\n const targetTab = this.getSheetTabElementByKey(sheetKey);\n if (!targetTab) {\n return;\n }\n // 将原文本节点设为可编辑\n targetTab.setAttribute('contenteditable', 'true');\n targetTab.setAttribute('spellcheck', 'false');\n targetTab.classList.add('editing'); // 添加编辑状态样式\n // 选中所有文本\n const range = document.createRange();\n range.selectNodeContents(targetTab);\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n\n const onBlur = () => {\n finishInput(true);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n e.stopPropagation();\n if (e.key === 'Enter') {\n e.preventDefault();\n finishInput(true);\n } else if (e.key === 'Escape') {\n finishInput(false);\n }\n };\n const finishInput = (commit: boolean) => {\n targetTab.removeEventListener('blur', onBlur);\n targetTab.removeEventListener('keydown', onKeyDown);\n targetTab.classList.remove('editing');\n targetTab.setAttribute('contenteditable', 'false');\n const newTitle = targetTab.textContent?.trim();\n if (!commit || newTitle === originalTitle || !this.renameSheet(sheetKey, newTitle)) {\n targetTab.textContent = originalTitle;\n return;\n }\n };\n targetTab.addEventListener('blur', onBlur);\n targetTab.addEventListener('keydown', onKeyDown);\n }\n\n /**\n * 重命名sheet\n * @param sheetKey 工作表key\n * @param newTitle 新名称\n * @returns 是否成功\n */\n private renameSheet(sheetKey: string, newTitle: string): boolean {\n const sheet = this.vTableSheet.getSheetManager().getSheet(sheetKey);\n if (!sheet) {\n return false;\n }\n const error = checkTabTitle(newTitle);\n if (error) {\n showSnackbar(error, 1300);\n return false;\n }\n const isExist = this.vTableSheet\n .getSheetManager()\n .getAllSheets()\n .find(s => s.sheetKey !== sheetKey && s.sheetTitle.toLowerCase() === newTitle.toLowerCase());\n if (isExist) {\n showSnackbar('工作表名称已存在,请重新输入', 1300);\n return false;\n }\n\n this.vTableSheet.getSheetManager().renameSheet(sheetKey, newTitle);\n this.vTableSheet.workSheetInstances.get(sheetKey)?.setTitle(newTitle);\n\n // 更新公式引擎中的工作表标题映射\n this.vTableSheet.getFormulaManager().updateSheetTitle(sheetKey, newTitle);\n\n this.vTableSheet.updateSheetTabs();\n this.vTableSheet.updateSheetMenu();\n return true;\n }\n\n /**\n * 获取指定sheetKey的标签元素\n */\n private getSheetTabElementByKey(sheetKey: string): HTMLElement | null {\n const tabsContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-tabs-container') as HTMLElement;\n return tabsContainer?.querySelector(`.vtable-sheet-tab[data-key=\"${sheetKey}\"]`) as HTMLElement;\n }\n\n /**\n * 激活sheet标签并滚动到可见区域\n */\n activeSheetTab(): void {\n const tabs = this.vTableSheet\n .getSheetTabElement()\n ?.querySelectorAll('.vtable-sheet-tab') as NodeListOf<HTMLElement>;\n let activeTab: HTMLElement | null = null;\n tabs.forEach(tab => {\n tab.classList.remove('active');\n if (tab.dataset.key === this.vTableSheet.getActiveSheet()?.getKey()) {\n tab.classList.add('active');\n activeTab = tab;\n }\n });\n // 确保激活的标签可见\n setTimeout(() => {\n if (activeTab) {\n activeTab.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 100);\n }\n\n /**\n * 更新渐变效果\n * @param tabsContainer 标签容器\n * @param fadeLeft 左侧渐变效果\n * @param fadeRight 右侧渐变效果\n */\n updateFadeEffects(tabsContainer: HTMLElement, fadeLeft: HTMLElement, fadeRight: HTMLElement): void {\n // 显示/隐藏左侧渐变\n if (tabsContainer.scrollLeft > 10) {\n fadeLeft.style.display = 'block';\n } else {\n fadeLeft.style.display = 'none';\n }\n\n // 显示/隐藏右侧渐变\n const maxScroll = tabsContainer.scrollWidth - tabsContainer.clientWidth;\n if (tabsContainer.scrollLeft < maxScroll - 10) {\n fadeRight.style.display = 'block';\n } else {\n fadeRight.style.display = 'none';\n }\n }\n\n /**\n * 滚动sheet标签\n * @param direction 滚动方向\n * @param tabsContainer 标签容器\n */\n scrollSheetTabs(direction: 'left' | 'right', tabsContainer: HTMLElement): void {\n const scrollAmount = 200; // 每次滚动的像素数\n const currentScroll = tabsContainer.scrollLeft;\n\n if (direction === 'left') {\n tabsContainer.scrollTo({\n left: Math.max(0, currentScroll - scrollAmount),\n behavior: 'smooth'\n });\n } else {\n tabsContainer.scrollTo({\n left: currentScroll + scrollAmount,\n behavior: 'smooth'\n });\n }\n }\n\n /**\n * 滚动以确保标签可见\n * @param tab 标签\n * @param container 容器\n */\n scrollTabIntoView(tab: HTMLElement, container: HTMLElement): void {\n const tabRect = tab.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n if (tabRect.left < containerRect.left) {\n // 标签在可见区域左侧\n container.scrollLeft += tabRect.left - containerRect.left - 10;\n } else if (tabRect.right > containerRect.right) {\n // 标签在可见区域右侧\n container.scrollLeft += tabRect.right - containerRect.right + 10;\n }\n }\n\n /**\n * 显示工作表菜单\n */\n toggleSheetMenu(event: MouseEvent): void {\n const menuContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-menu-list') as HTMLElement;\n menuContainer.classList.toggle('active');\n\n // 如果菜单被打开,添加点击外部关闭的监听器\n if (menuContainer.classList.contains('active')) {\n this.addClickOutsideListener();\n } else {\n this.removeClickOutsideListener();\n }\n }\n\n /**\n * 添加点击外部关闭菜单的监听器\n */\n private clickOutsideHandler = (event: MouseEvent): void => {\n const menuContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-menu-list') as HTMLElement;\n const menuButton = this.vTableSheet.getSheetTabElement()?.querySelector('.vtable-sheet-menu-button') as HTMLElement;\n\n // 如果点击的不是菜单容器和菜单按钮,则关闭菜单\n if (\n menuContainer &&\n menuButton &&\n !menuContainer.contains(event.target as Node) &&\n !menuButton.contains(event.target as Node)\n ) {\n menuContainer.classList.remove('active');\n this.removeClickOutsideListener();\n }\n };\n\n /**\n * 添加点击外部监听器\n */\n addClickOutsideListener(): void {\n document.addEventListener('click', this.clickOutsideHandler);\n }\n\n /**\n * 移除点击外部监听器\n */\n removeClickOutsideListener(): void {\n document.removeEventListener('click', this.clickOutsideHandler);\n }\n\n /**\n * 更新sheet列表\n */\n updateSheetMenu(): void {\n const menuContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-menu-list') as HTMLElement;\n menuContainer.innerHTML = '';\n const sheets = this.vTableSheet.getSheetManager().getAllSheets();\n sheets.forEach(sheet => {\n // li\n const li = document.createElement('li');\n li.className = 'vtable-sheet-menu-item';\n li.dataset.key = sheet.sheetKey;\n // title\n const title = document.createElement('span');\n title.className = 'vtable-sheet-menu-item-title';\n title.innerText = sheet.sheetTitle;\n li.appendChild(title);\n // delete button\n const div = document.createElement('div');\n div.className = 'vtable-sheet-menu-delete-button';\n div.innerHTML =\n '<svg class=\"x-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">' +\n '<path d=\"M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\n '<path d=\"M6 6L18 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\n '</svg>';\n div.addEventListener('click', e => {\n this.vTableSheet.removeSheet(sheet.sheetKey);\n e.stopPropagation();\n });\n li.addEventListener('click', () => this.vTableSheet.activateSheet(sheet.sheetKey));\n li.appendChild(div);\n menuContainer.appendChild(li);\n });\n this.activeSheetMenuItem();\n // 确保激活的标签可见\n setTimeout(() => {\n const activeItem = menuContainer.querySelector('.vtable-sheet-main-menu-item.active');\n if (activeItem) {\n activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 100);\n }\n\n /**\n * 激活sheet菜单项并滚动到可见区域\n */\n activeSheetMenuItem(): void {\n if (this.vTableSheet.getOptions()?.showSheetTab === false) {\n return;\n }\n const menuItems = this.vTableSheet\n .getSheetTabElement()\n ?.querySelectorAll('.vtable-sheet-main-menu-item') as NodeListOf<HTMLElement>;\n let activeItem: HTMLElement | null = null;\n menuItems.forEach(item => {\n item.classList.remove('active');\n if (item.dataset.key === this.vTableSheet.getActiveSheet()?.getKey()) {\n item.classList.add('active');\n activeItem = item;\n }\n });\n setTimeout(() => {\n if (activeItem) {\n activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 100);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/sheet-tab-event-handler.ts"],"names":[],"mappings":"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","file":"sheet-tab-event-handler.js","sourcesContent":["import type VTableSheet from './vtable-sheet';\nimport { showSnackbar } from '../tools/ui/snackbar';\nimport { checkTabTitle } from '../tools';\n\n/**\n * Sheet Tab Event Handler\n * 专门处理sheet标签页相关的事件逻辑\n */\nexport class SheetTabEventHandler {\n private vTableSheet: VTableSheet;\n\n constructor(vTableSheet: VTableSheet) {\n this.vTableSheet = vTableSheet;\n }\n\n /**\n * 处理sheet标签双击事件\n * 双击sheet标签后,将标签设为可编辑状态。输入完成后进行重命名。\n * @param sheetKey 工作表key\n * @param originalTitle 原始名称\n */\n handleSheetTabDblClick(sheetKey: string, originalTitle: string): void {\n const targetTab = this.getSheetTabElementByKey(sheetKey);\n if (!targetTab) {\n return;\n }\n // 将原文本节点设为可编辑\n targetTab.setAttribute('contenteditable', 'true');\n targetTab.setAttribute('spellcheck', 'false');\n targetTab.classList.add('editing'); // 添加编辑状态样式\n // 选中所有文本\n const range = document.createRange();\n range.selectNodeContents(targetTab);\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n\n const onBlur = () => {\n finishInput(true);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n e.stopPropagation();\n if (e.key === 'Enter') {\n e.preventDefault();\n finishInput(true);\n } else if (e.key === 'Escape') {\n finishInput(false);\n }\n };\n const finishInput = (commit: boolean) => {\n targetTab.removeEventListener('blur', onBlur);\n targetTab.removeEventListener('keydown', onKeyDown);\n targetTab.classList.remove('editing');\n targetTab.setAttribute('contenteditable', 'false');\n const newTitle = targetTab.textContent?.trim();\n if (!commit || newTitle === originalTitle || !this.renameSheet(sheetKey, newTitle)) {\n targetTab.textContent = originalTitle;\n return;\n }\n };\n targetTab.addEventListener('blur', onBlur);\n targetTab.addEventListener('keydown', onKeyDown);\n }\n\n /**\n * 重命名sheet\n * @param sheetKey 工作表key\n * @param newTitle 新名称\n * @returns 是否成功\n */\n private renameSheet(sheetKey: string, newTitle: string): boolean {\n const sheet = this.vTableSheet.getSheetManager().getSheet(sheetKey);\n if (!sheet) {\n return false;\n }\n const error = checkTabTitle(newTitle);\n if (error) {\n showSnackbar(error, 1300);\n return false;\n }\n const isExist = this.vTableSheet\n .getSheetManager()\n .getAllSheets()\n .find(s => s.sheetKey !== sheetKey && s.sheetTitle.toLowerCase() === newTitle.toLowerCase());\n if (isExist) {\n showSnackbar('工作表名称已存在,请重新输入', 1300);\n return false;\n }\n\n this.vTableSheet.renameSheet(sheetKey, newTitle);\n return true;\n }\n\n /**\n * 获取指定sheetKey的标签元素\n */\n private getSheetTabElementByKey(sheetKey: string): HTMLElement | null {\n const tabsContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-tabs-container') as HTMLElement;\n return tabsContainer?.querySelector(`.vtable-sheet-tab[data-key=\"${sheetKey}\"]`) as HTMLElement;\n }\n\n /**\n * 激活sheet标签并滚动到可见区域\n */\n activeSheetTab(): void {\n const tabs = this.vTableSheet\n .getSheetTabElement()\n ?.querySelectorAll('.vtable-sheet-tab') as NodeListOf<HTMLElement>;\n let activeTab: HTMLElement | null = null;\n tabs.forEach(tab => {\n tab.classList.remove('active');\n if (tab.dataset.key === this.vTableSheet.getActiveSheet()?.getKey()) {\n tab.classList.add('active');\n activeTab = tab;\n }\n });\n // 确保激活的标签可见\n setTimeout(() => {\n if (activeTab) {\n activeTab.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 100);\n }\n\n /**\n * 更新渐变效果\n * @param tabsContainer 标签容器\n * @param fadeLeft 左侧渐变效果\n * @param fadeRight 右侧渐变效果\n */\n updateFadeEffects(tabsContainer: HTMLElement, fadeLeft: HTMLElement, fadeRight: HTMLElement): void {\n // 显示/隐藏左侧渐变\n if (tabsContainer.scrollLeft > 10) {\n fadeLeft.style.display = 'block';\n } else {\n fadeLeft.style.display = 'none';\n }\n\n // 显示/隐藏右侧渐变\n const maxScroll = tabsContainer.scrollWidth - tabsContainer.clientWidth;\n if (tabsContainer.scrollLeft < maxScroll - 10) {\n fadeRight.style.display = 'block';\n } else {\n fadeRight.style.display = 'none';\n }\n }\n\n /**\n * 滚动sheet标签\n * @param direction 滚动方向\n * @param tabsContainer 标签容器\n */\n scrollSheetTabs(direction: 'left' | 'right', tabsContainer: HTMLElement): void {\n const scrollAmount = 200; // 每次滚动的像素数\n const currentScroll = tabsContainer.scrollLeft;\n\n if (direction === 'left') {\n tabsContainer.scrollTo({\n left: Math.max(0, currentScroll - scrollAmount),\n behavior: 'smooth'\n });\n } else {\n tabsContainer.scrollTo({\n left: currentScroll + scrollAmount,\n behavior: 'smooth'\n });\n }\n }\n\n /**\n * 滚动以确保标签可见\n * @param tab 标签\n * @param container 容器\n */\n scrollTabIntoView(tab: HTMLElement, container: HTMLElement): void {\n const tabRect = tab.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n if (tabRect.left < containerRect.left) {\n // 标签在可见区域左侧\n container.scrollLeft += tabRect.left - containerRect.left - 10;\n } else if (tabRect.right > containerRect.right) {\n // 标签在可见区域右侧\n container.scrollLeft += tabRect.right - containerRect.right + 10;\n }\n }\n\n /**\n * 显示工作表菜单\n */\n toggleSheetMenu(event: MouseEvent): void {\n const menuContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-menu-list') as HTMLElement;\n menuContainer.classList.toggle('active');\n\n // 如果菜单被打开,添加点击外部关闭的监听器\n if (menuContainer.classList.contains('active')) {\n this.addClickOutsideListener();\n } else {\n this.removeClickOutsideListener();\n }\n }\n\n /**\n * 添加点击外部关闭菜单的监听器\n */\n private clickOutsideHandler = (event: MouseEvent): void => {\n const menuContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-menu-list') as HTMLElement;\n const menuButton = this.vTableSheet.getSheetTabElement()?.querySelector('.vtable-sheet-menu-button') as HTMLElement;\n\n // 如果点击的不是菜单容器和菜单按钮,则关闭菜单\n if (\n menuContainer &&\n menuButton &&\n !menuContainer.contains(event.target as Node) &&\n !menuButton.contains(event.target as Node)\n ) {\n menuContainer.classList.remove('active');\n this.removeClickOutsideListener();\n }\n };\n\n /**\n * 添加点击外部监听器\n */\n addClickOutsideListener(): void {\n document.addEventListener('click', this.clickOutsideHandler);\n }\n\n /**\n * 移除点击外部监听器\n */\n removeClickOutsideListener(): void {\n document.removeEventListener('click', this.clickOutsideHandler);\n }\n\n /**\n * 更新sheet列表\n */\n updateSheetMenu(): void {\n const menuContainer = this.vTableSheet\n .getSheetTabElement()\n ?.querySelector('.vtable-sheet-menu-list') as HTMLElement;\n menuContainer.innerHTML = '';\n const sheets = this.vTableSheet.getSheetManager().getAllSheets();\n sheets.forEach(sheet => {\n // li\n const li = document.createElement('li');\n li.className = 'vtable-sheet-menu-item';\n li.dataset.key = sheet.sheetKey;\n // title\n const title = document.createElement('span');\n title.className = 'vtable-sheet-menu-item-title';\n title.innerText = sheet.sheetTitle;\n li.appendChild(title);\n // delete button\n const div = document.createElement('div');\n div.className = 'vtable-sheet-menu-delete-button';\n div.innerHTML =\n '<svg class=\"x-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">' +\n '<path d=\"M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\n '<path d=\"M6 6L18 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\n '</svg>';\n div.addEventListener('click', e => {\n this.vTableSheet.removeSheet(sheet.sheetKey);\n e.stopPropagation();\n });\n li.addEventListener('click', () => this.vTableSheet.activateSheet(sheet.sheetKey));\n li.appendChild(div);\n menuContainer.appendChild(li);\n });\n this.activeSheetMenuItem();\n // 确保激活的标签可见\n setTimeout(() => {\n const activeItem = menuContainer.querySelector('.vtable-sheet-main-menu-item.active');\n if (activeItem) {\n activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 100);\n }\n\n /**\n * 激活sheet菜单项并滚动到可见区域\n */\n activeSheetMenuItem(): void {\n if (this.vTableSheet.getOptions()?.showSheetTab === false) {\n return;\n }\n const menuItems = this.vTableSheet\n .getSheetTabElement()\n ?.querySelectorAll('.vtable-sheet-main-menu-item') as NodeListOf<HTMLElement>;\n let activeItem: HTMLElement | null = null;\n menuItems.forEach(item => {\n item.classList.remove('active');\n if (item.dataset.key === this.vTableSheet.getActiveSheet()?.getKey()) {\n item.classList.add('active');\n activeItem = item;\n }\n });\n setTimeout(() => {\n if (activeItem) {\n activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 100);\n }\n}\n"]}
|
|
@@ -8,6 +8,7 @@ import { FormulaUIManager } from '../formula/formula-ui-manager';
|
|
|
8
8
|
import type { VTableSheetEventType } from '../ts-types/spreadsheet-events';
|
|
9
9
|
import { SpreadSheetEventManager } from '../event/spreadsheet-event-manager';
|
|
10
10
|
import { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';
|
|
11
|
+
import { WorkbookHistoryManager } from '../managers/workbook-history-manager';
|
|
11
12
|
export default class VTableSheet {
|
|
12
13
|
private container;
|
|
13
14
|
private options;
|
|
@@ -26,13 +27,16 @@ export default class VTableSheet {
|
|
|
26
27
|
private formulaBarElement;
|
|
27
28
|
private sheetTabElement;
|
|
28
29
|
private mainMenuElement;
|
|
30
|
+
private undoRedoElement;
|
|
29
31
|
private contentElement;
|
|
30
32
|
private dragManager;
|
|
31
33
|
private sheetTabEventHandler;
|
|
34
|
+
private workbookHistoryManager;
|
|
32
35
|
constructor(container: HTMLElement, options: IVTableSheetOptions);
|
|
33
36
|
private mergeDefaultOptions;
|
|
34
37
|
private initFormulaAutocomplete;
|
|
35
38
|
private initUI;
|
|
39
|
+
private renderTopLeftControls;
|
|
36
40
|
private createSheetTab;
|
|
37
41
|
private _activeSheetTab;
|
|
38
42
|
updateSheetTabs(tabsContainer?: HTMLElement): void;
|
|
@@ -55,7 +59,17 @@ export default class VTableSheet {
|
|
|
55
59
|
getSpreadSheetEventManager(): SpreadSheetEventManager;
|
|
56
60
|
getEventBus(): VTableSheetEventBus;
|
|
57
61
|
getSheetManager(): SheetManager;
|
|
62
|
+
getWorkbookHistoryManager(): WorkbookHistoryManager;
|
|
58
63
|
getActiveSheet(): WorkSheet | null;
|
|
64
|
+
getWorkSheetInstance(sheetKey: string): WorkSheet | undefined;
|
|
65
|
+
setWorkSheetInstance(sheetKey: string, instance: WorkSheet): void;
|
|
66
|
+
deleteWorkSheetInstance(sheetKey: string): void;
|
|
67
|
+
renameSheet(sheetKey: string, newTitle: string): void;
|
|
68
|
+
reorderSheet(sourceKey: string, targetKey: string, position: 'left' | 'right'): void;
|
|
69
|
+
undo(): void;
|
|
70
|
+
redo(): void;
|
|
71
|
+
startHistoryTransaction(): void;
|
|
72
|
+
endHistoryTransaction(): void;
|
|
59
73
|
onTableEvent<K extends keyof TableEventHandlersEventArgumentMap>(type: K, callback: (event: TableEventHandlersEventArgumentMap[K] & {
|
|
60
74
|
sheetKey: string;
|
|
61
75
|
}) => void): void;
|
|
@@ -1,29 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
void 0 === k2 && (k2 = k);
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
-
enumerable: !0,
|
|
8
|
-
get: function() {
|
|
9
|
-
return m[k];
|
|
10
|
-
}
|
|
11
|
-
}), Object.defineProperty(o, k2, desc);
|
|
12
|
-
} : function(o, m, k, k2) {
|
|
13
|
-
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
-
}), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", {
|
|
16
|
-
enumerable: !0,
|
|
17
|
-
value: v
|
|
18
|
-
});
|
|
19
|
-
} : function(o, v) {
|
|
20
|
-
o.default = v;
|
|
21
|
-
}), __importStar = this && this.__importStar || function(mod) {
|
|
22
|
-
if (mod && mod.__esModule) return mod;
|
|
23
|
-
var result = {};
|
|
24
|
-
if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
|
|
25
|
-
return __setModuleDefault(result, mod), result;
|
|
26
|
-
}, __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
3
|
+
var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
27
4
|
return new (P || (P = Promise))((function(resolve, reject) {
|
|
28
5
|
function fulfilled(value) {
|
|
29
6
|
try {
|
|
@@ -65,21 +42,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
65
42
|
value: !0
|
|
66
43
|
});
|
|
67
44
|
|
|
68
|
-
const formula_manager_1 = require("../managers/formula-manager"), sheet_manager_1 = __importDefault(require("../managers/sheet-manager")), WorkSheet_1 = require("../core/WorkSheet"),
|
|
69
|
-
|
|
70
|
-
VTable.register.editor("formula", formula_editor_1.formulaEditor);
|
|
45
|
+
const formula_manager_1 = require("../managers/formula-manager"), sheet_manager_1 = __importDefault(require("../managers/sheet-manager")), WorkSheet_1 = require("../core/WorkSheet"), table_plugins_1 = require("../core/table-plugins"), dom_event_manager_1 = require("../event/dom-event-manager"), snackbar_1 = require("../tools/ui/snackbar"), tab_drag_manager_1 = __importDefault(require("../managers/tab-drag-manager")), formula_autocomplete_1 = require("../formula/formula-autocomplete"), formula_editor_1 = require("../formula/formula-editor"), menu_manager_1 = require("../managers/menu-manager"), formula_ui_manager_1 = require("../formula/formula-ui-manager"), sheet_tab_event_handler_1 = require("./sheet-tab-event-handler"), table_event_relay_1 = require("../event/table-event-relay"), spreadsheet_event_manager_1 = require("../event/spreadsheet-event-manager"), vtable_sheet_event_bus_1 = require("../event/vtable-sheet-event-bus"), sheet_helper_1 = require("../sheet-helper"), themes_1 = require("@visactor/vtable/es/themes"), workbook_history_manager_1 = require("../managers/workbook-history-manager");
|
|
71
46
|
|
|
72
47
|
class VTableSheet {
|
|
73
48
|
constructor(container, options) {
|
|
74
49
|
this.activeWorkSheet = null, this.workSheetInstances = new Map, this.formulaAutocomplete = null,
|
|
75
50
|
this.formulaBarElement = null, this.sheetTabElement = null, this.mainMenuElement = null,
|
|
76
|
-
this.container = container, this.options = this.mergeDefaultOptions(options),
|
|
77
|
-
this.
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
51
|
+
this.undoRedoElement = null, this.container = container, this.options = this.mergeDefaultOptions(options),
|
|
52
|
+
this.eventBus = new vtable_sheet_event_bus_1.VTableSheetEventBus, this.sheetManager = new sheet_manager_1.default(this.eventBus),
|
|
53
|
+
this.formulaManager = new formula_manager_1.FormulaManager(this), this.tableEventRelay = new table_event_relay_1.TableEventRelay(this),
|
|
54
|
+
this.eventManager = new dom_event_manager_1.DomEventManager(this), this.dragManager = new tab_drag_manager_1.default(this),
|
|
80
55
|
this.formulaUIManager = new formula_ui_manager_1.FormulaUIManager(this), this.sheetTabEventHandler = new sheet_tab_event_handler_1.SheetTabEventHandler(this),
|
|
81
56
|
this.spreadsheetEventManager = new spreadsheet_event_manager_1.SpreadSheetEventManager(this),
|
|
82
|
-
this.
|
|
57
|
+
this.workbookHistoryManager = new workbook_history_manager_1.WorkbookHistoryManager(this),
|
|
58
|
+
this.menuManager = new menu_manager_1.MenuManager(this), this.initUI(), this.workbookHistoryManager.suspend(),
|
|
59
|
+
this.initSheets(), this.workbookHistoryManager.resume(), this.resize();
|
|
83
60
|
}
|
|
84
61
|
mergeDefaultOptions(options) {
|
|
85
62
|
return Object.assign({
|
|
@@ -96,18 +73,26 @@ class VTableSheet {
|
|
|
96
73
|
this.formulaAutocomplete.attachTo(formulaInput));
|
|
97
74
|
}
|
|
98
75
|
initUI() {
|
|
99
|
-
var _a;
|
|
100
76
|
this.rootElement = document.createElement("div"), this.rootElement.className = "vtable-sheet-container",
|
|
101
77
|
this.container.appendChild(this.rootElement);
|
|
102
78
|
const topContainer = document.createElement("div");
|
|
103
79
|
topContainer.className = "vtable-sheet-top-container", this.rootElement.appendChild(topContainer),
|
|
104
|
-
(
|
|
105
|
-
topContainer.appendChild(this.mainMenuElement)), this.options.showFormulaBar && (this.formulaBarElement = this.formulaUIManager.createFormulaBar(),
|
|
80
|
+
this.renderTopLeftControls(topContainer), this.options.showFormulaBar && (this.formulaBarElement = this.formulaUIManager.createFormulaBar(),
|
|
106
81
|
topContainer.appendChild(this.formulaBarElement), this.initFormulaAutocomplete()),
|
|
107
82
|
this.contentElement = document.createElement("div"), this.contentElement.className = "vtable-sheet-content",
|
|
108
83
|
this.rootElement.appendChild(this.contentElement), this.options.showSheetTab && (this.sheetTabElement = this.createSheetTab(),
|
|
109
84
|
this.rootElement.appendChild(this.sheetTabElement));
|
|
110
85
|
}
|
|
86
|
+
renderTopLeftControls(topContainer) {
|
|
87
|
+
var _a, _b, _c, _d, _e;
|
|
88
|
+
(null === (_a = this.mainMenuElement) || void 0 === _a ? void 0 : _a.parentElement) && (this.mainMenuElement.parentElement.removeChild(this.mainMenuElement),
|
|
89
|
+
this.mainMenuElement = null), (null === (_b = this.undoRedoElement) || void 0 === _b ? void 0 : _b.parentElement) && (this.undoRedoElement.parentElement.removeChild(this.undoRedoElement),
|
|
90
|
+
this.undoRedoElement = null), this.menuManager.release();
|
|
91
|
+
const showMainMenu = !!(null === (_c = this.options.mainMenu) || void 0 === _c ? void 0 : _c.show), showUndoRedo = null === (_e = null === (_d = this.options.undoRedo) || void 0 === _d ? void 0 : _d.show) || void 0 === _e || _e;
|
|
92
|
+
if (showMainMenu) return this.mainMenuElement = this.menuManager.createMainMenu(),
|
|
93
|
+
void (topContainer.firstChild ? topContainer.insertBefore(this.mainMenuElement, topContainer.firstChild) : topContainer.appendChild(this.mainMenuElement));
|
|
94
|
+
showUndoRedo && (this.undoRedoElement = this.menuManager.createUndoRedoOnly(), topContainer.firstChild ? topContainer.insertBefore(this.undoRedoElement, topContainer.firstChild) : topContainer.appendChild(this.undoRedoElement));
|
|
95
|
+
}
|
|
111
96
|
createSheetTab() {
|
|
112
97
|
const sheetTab = document.createElement("div");
|
|
113
98
|
sheetTab.className = "vtable-sheet-tab-bar";
|
|
@@ -205,15 +190,13 @@ class VTableSheet {
|
|
|
205
190
|
}
|
|
206
191
|
}
|
|
207
192
|
addSheet(sheet) {
|
|
208
|
-
this.
|
|
193
|
+
this.workbookHistoryManager.addSheet({
|
|
194
|
+
sheet: sheet,
|
|
195
|
+
activate: !1
|
|
196
|
+
});
|
|
209
197
|
}
|
|
210
198
|
removeSheet(sheetKey) {
|
|
211
|
-
|
|
212
|
-
const instance = this.workSheetInstances.get(sheetKey);
|
|
213
|
-
instance && (instance.release(), this.workSheetInstances.delete(sheetKey));
|
|
214
|
-
const newActiveSheetKey = this.sheetManager.removeSheet(sheetKey);
|
|
215
|
-
newActiveSheetKey && this.activateSheet(newActiveSheetKey), this.updateSheetTabs(),
|
|
216
|
-
this.updateSheetMenu();
|
|
199
|
+
this.sheetManager.getSheetCount() <= 1 ? (0, snackbar_1.showSnackbar)("至少保留一个工作表", 1300) : this.workbookHistoryManager.removeSheet(sheetKey);
|
|
217
200
|
}
|
|
218
201
|
getSheetCount() {
|
|
219
202
|
return this.sheetManager.getSheetCount();
|
|
@@ -226,10 +209,9 @@ class VTableSheet {
|
|
|
226
209
|
}
|
|
227
210
|
createWorkSheetInstance(sheetDefine) {
|
|
228
211
|
var _a, _b, _c;
|
|
229
|
-
formula_editor_1.formulaEditor.setSheet(this);
|
|
230
212
|
const contentWidth = this.contentElement.clientWidth, contentHeight = this.contentElement.clientHeight;
|
|
231
213
|
sheetDefine.dragOrder = null !== (_a = sheetDefine.dragOrder) && void 0 !== _a ? _a : this.options.dragOrder;
|
|
232
|
-
const sheet = new WorkSheet_1.WorkSheet(this, Object.assign(Object.assign({}, sheetDefine), {
|
|
214
|
+
const formulaEditor = (0, formula_editor_1.createFormulaEditor)(), sheet = new WorkSheet_1.WorkSheet(this, Object.assign(Object.assign({}, sheetDefine), {
|
|
233
215
|
container: this.contentElement,
|
|
234
216
|
width: contentWidth,
|
|
235
217
|
height: contentHeight,
|
|
@@ -237,8 +219,8 @@ class VTableSheet {
|
|
|
237
219
|
defaultColWidth: this.options.defaultColWidth,
|
|
238
220
|
dragOrder: sheetDefine.dragOrder,
|
|
239
221
|
plugins: (0, table_plugins_1.getTablePlugins)(sheetDefine, this.options, this),
|
|
240
|
-
headerEditor:
|
|
241
|
-
editor:
|
|
222
|
+
headerEditor: formulaEditor,
|
|
223
|
+
editor: formulaEditor,
|
|
242
224
|
select: {
|
|
243
225
|
makeSelectCellVisible: !1
|
|
244
226
|
},
|
|
@@ -246,6 +228,7 @@ class VTableSheet {
|
|
|
246
228
|
customMergeCell: sheetDefine.cellMerge,
|
|
247
229
|
theme: (null === (_b = sheetDefine.theme) || void 0 === _b ? void 0 : _b.tableTheme) || (null === (_c = this.options.theme) || void 0 === _c ? void 0 : _c.tableTheme)
|
|
248
230
|
}));
|
|
231
|
+
formulaEditor.setSheet(this);
|
|
249
232
|
try {
|
|
250
233
|
const normalizedData = sheetDefine.data ? this.formulaManager.normalizeSheetData(sheetDefine.data, sheet.tableInstance) : [];
|
|
251
234
|
this.formulaManager.addSheet(sheetDefine.sheetKey, normalizedData, sheetDefine.sheetTitle),
|
|
@@ -300,7 +283,10 @@ class VTableSheet {
|
|
|
300
283
|
rowCount: 100,
|
|
301
284
|
data: []
|
|
302
285
|
};
|
|
303
|
-
this.
|
|
286
|
+
this.workbookHistoryManager.addSheet({
|
|
287
|
+
sheet: newSheet,
|
|
288
|
+
activate: !0
|
|
289
|
+
});
|
|
304
290
|
}
|
|
305
291
|
updateFormulaBar() {
|
|
306
292
|
this.formulaUIManager.updateFormulaBar();
|
|
@@ -317,9 +303,39 @@ class VTableSheet {
|
|
|
317
303
|
getSheetManager() {
|
|
318
304
|
return this.sheetManager;
|
|
319
305
|
}
|
|
306
|
+
getWorkbookHistoryManager() {
|
|
307
|
+
return this.workbookHistoryManager;
|
|
308
|
+
}
|
|
320
309
|
getActiveSheet() {
|
|
321
310
|
return this.activeWorkSheet;
|
|
322
311
|
}
|
|
312
|
+
getWorkSheetInstance(sheetKey) {
|
|
313
|
+
return this.workSheetInstances.get(sheetKey);
|
|
314
|
+
}
|
|
315
|
+
setWorkSheetInstance(sheetKey, instance) {
|
|
316
|
+
this.workSheetInstances.set(sheetKey, instance);
|
|
317
|
+
}
|
|
318
|
+
deleteWorkSheetInstance(sheetKey) {
|
|
319
|
+
this.workSheetInstances.delete(sheetKey);
|
|
320
|
+
}
|
|
321
|
+
renameSheet(sheetKey, newTitle) {
|
|
322
|
+
this.workbookHistoryManager.renameSheet(sheetKey, newTitle);
|
|
323
|
+
}
|
|
324
|
+
reorderSheet(sourceKey, targetKey, position) {
|
|
325
|
+
this.workbookHistoryManager.reorderSheet(sourceKey, targetKey, position);
|
|
326
|
+
}
|
|
327
|
+
undo() {
|
|
328
|
+
this.workbookHistoryManager.undo();
|
|
329
|
+
}
|
|
330
|
+
redo() {
|
|
331
|
+
this.workbookHistoryManager.redo();
|
|
332
|
+
}
|
|
333
|
+
startHistoryTransaction() {
|
|
334
|
+
this.workbookHistoryManager.startTransaction();
|
|
335
|
+
}
|
|
336
|
+
endHistoryTransaction() {
|
|
337
|
+
this.workbookHistoryManager.endTransaction();
|
|
338
|
+
}
|
|
323
339
|
onTableEvent(type, callback) {
|
|
324
340
|
this.tableEventRelay.onTableEvent(type, callback);
|
|
325
341
|
}
|
|
@@ -398,16 +414,22 @@ class VTableSheet {
|
|
|
398
414
|
});
|
|
399
415
|
}
|
|
400
416
|
updateMainMenu(mainMenu) {
|
|
401
|
-
this.options.mainMenu = mainMenu
|
|
417
|
+
this.options.mainMenu = mainMenu;
|
|
418
|
+
const topContainer = this.rootElement.querySelector(".vtable-sheet-top-container");
|
|
419
|
+
topContainer && this.renderTopLeftControls(topContainer);
|
|
402
420
|
}
|
|
403
421
|
updateOption(options) {
|
|
404
422
|
var _a, _b;
|
|
405
423
|
if (!options) return;
|
|
406
|
-
void 0 !== options.mainMenu
|
|
407
|
-
|
|
424
|
+
const hasMainMenu = void 0 !== options.mainMenu, hasUndoRedo = void 0 !== options.undoRedo, pluginModulesChanged = (0,
|
|
425
|
+
sheet_helper_1.pluginIsChanged)(this.options.VTablePluginModules, options.VTablePluginModules), tableThemeChanged = (0,
|
|
408
426
|
themes_1.tableThemeIsChanged)(null === (_a = this.options.theme) || void 0 === _a ? void 0 : _a.tableTheme, null === (_b = options.theme) || void 0 === _b ? void 0 : _b.tableTheme), {sheets: sheets} = options;
|
|
409
427
|
__rest(options, [ "sheets" ]);
|
|
410
|
-
this.options = Object.assign(Object.assign({}, this.options), options),
|
|
428
|
+
if (this.options = Object.assign(Object.assign({}, this.options), options), hasMainMenu || hasUndoRedo) {
|
|
429
|
+
const topContainer = this.rootElement.querySelector(".vtable-sheet-top-container");
|
|
430
|
+
topContainer && this.renderTopLeftControls(topContainer);
|
|
431
|
+
}
|
|
432
|
+
(Array.isArray(options.sheets) || pluginModulesChanged || tableThemeChanged) && this.updateSheets(options);
|
|
411
433
|
}
|
|
412
434
|
updateSheets(options) {
|
|
413
435
|
const nextSheets = options.sheets || [], prevSheets = this.sheetManager.getAllSheets(), prevMap = new Map;
|
|
@@ -439,7 +461,7 @@ class VTableSheet {
|
|
|
439
461
|
const newInstance = this.createWorkSheetInstance(next_sheetDefine);
|
|
440
462
|
return void this.workSheetInstances.set(next_sheetDefine.sheetKey, newInstance);
|
|
441
463
|
}
|
|
442
|
-
const sheetOption = {
|
|
464
|
+
const formulaEditor = (0, formula_editor_1.createFormulaEditor)(), sheetOption = {
|
|
443
465
|
sheetTitle: next_sheetDefine.sheetTitle,
|
|
444
466
|
sheetKey: next_sheetDefine.sheetKey,
|
|
445
467
|
showHeader: next_sheetDefine.showHeader,
|
|
@@ -454,8 +476,8 @@ class VTableSheet {
|
|
|
454
476
|
defaultColWidth: this.options.defaultColWidth,
|
|
455
477
|
dragOrder: next_sheetDefine.dragOrder,
|
|
456
478
|
plugins: (0, table_plugins_1.getTablePlugins)(next_sheetDefine, this.options, this),
|
|
457
|
-
headerEditor:
|
|
458
|
-
editor:
|
|
479
|
+
headerEditor: formulaEditor,
|
|
480
|
+
editor: formulaEditor,
|
|
459
481
|
select: {
|
|
460
482
|
makeSelectCellVisible: !1
|
|
461
483
|
},
|
|
@@ -465,7 +487,7 @@ class VTableSheet {
|
|
|
465
487
|
data: next_sheetDefine.data,
|
|
466
488
|
columns: next_sheetDefine.columns
|
|
467
489
|
};
|
|
468
|
-
instance.updateSheetOption(sheetOption);
|
|
490
|
+
formulaEditor.setSheet(this), instance.updateSheetOption(sheetOption);
|
|
469
491
|
}));
|
|
470
492
|
try {
|
|
471
493
|
this.formulaManager.rebuildFormulas(nextSheets), nextSheets.forEach((sheetDefine => {
|