(tab: SQLEditorTab | undefined)
| 915 | }; |
| 916 | |
| 917 | const onCurrentTabChanged = (tab: SQLEditorTab | undefined) => { |
| 918 | useSheetContextStore.getState().setSelectedKeys([]); |
| 919 | if (!tab) return; |
| 920 | |
| 921 | let view: SheetViewMode = "draft"; |
| 922 | let worksheetLikeItem: WorksheetLikeItem | undefined; |
| 923 | const tabId = tab.id; |
| 924 | const worksheetName = tab.worksheet; |
| 925 | |
| 926 | if (worksheetName) { |
| 927 | const worksheet = useAppStore.getState().getWorksheetByName(worksheetName); |
| 928 | if (!worksheet) return; |
| 929 | worksheetLikeItem = { |
| 930 | name: worksheet.name, |
| 931 | title: worksheet.title, |
| 932 | folders: worksheet.folders, |
| 933 | type: "worksheet", |
| 934 | }; |
| 935 | view = isWorksheetCreator(worksheet) ? "my" : "shared"; |
| 936 | } else { |
| 937 | worksheetLikeItem = { |
| 938 | name: tabId, |
| 939 | folders: [], |
| 940 | title: "", |
| 941 | type: "draft", |
| 942 | }; |
| 943 | } |
| 944 | |
| 945 | const viewCtx = getViewContext(view); |
| 946 | const key = viewCtx.getKeyForWorksheet(worksheetLikeItem); |
| 947 | useSheetContextStore.getState().setSelectedKeys([key]); |
| 948 | |
| 949 | const expanded = new Set(useSheetContextStore.getState().expandedKeys); |
| 950 | for (const path of viewCtx.getPathesForWorksheet(worksheetLikeItem)) { |
| 951 | expanded.add(path); |
| 952 | } |
| 953 | useSheetContextStore.getState().setExpandedKeys(expanded); |
| 954 | |
| 955 | // Defer DOM scroll until after React paints. |
| 956 | queueMicrotask(() => { |
| 957 | const dom = document.querySelector(`[data-item-key="${key}"]`); |
| 958 | if (dom) { |
| 959 | scrollIntoView(dom, { |
| 960 | scrollMode: "if-needed", |
| 961 | block: "nearest", |
| 962 | }); |
| 963 | } |
| 964 | }); |
| 965 | }; |
| 966 | |
| 967 | // ---- public hook API ------------------------------------------------------- |
| 968 |
no test coverage detected