38 lines
1017 B
TypeScript
38 lines
1017 B
TypeScript
|
|
import type { SftpStateApi } from "../../../application/state/useSftpState";
|
||
|
|
import { sftpTreeSelectionStore } from "../../../application/state/sftp/sftpTreeSelectionStore";
|
||
|
|
|
||
|
|
export interface SftpSelectionTarget {
|
||
|
|
side: "left" | "right";
|
||
|
|
tabId: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const keepOnlyPaneSelections = (
|
||
|
|
sftp: SftpStateApi,
|
||
|
|
target: SftpSelectionTarget | null,
|
||
|
|
) => {
|
||
|
|
sftp.clearSelectionsExcept(target);
|
||
|
|
const paneIds = [
|
||
|
|
...sftp.leftTabs.tabs.map((tab) => tab.id),
|
||
|
|
...sftp.rightTabs.tabs.map((tab) => tab.id),
|
||
|
|
];
|
||
|
|
for (const paneId of paneIds) {
|
||
|
|
if (target?.tabId === paneId) continue;
|
||
|
|
sftpTreeSelectionStore.clearSelection(paneId);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
export const keepOnlyActivePaneSelections = (
|
||
|
|
sftp: SftpStateApi,
|
||
|
|
side: "left" | "right",
|
||
|
|
): SftpSelectionTarget | null => {
|
||
|
|
const tabId = sftp.getActiveTabId(side);
|
||
|
|
if (!tabId) {
|
||
|
|
keepOnlyPaneSelections(sftp, null);
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
const target = { side, tabId } as const;
|
||
|
|
keepOnlyPaneSelections(sftp, target);
|
||
|
|
return target;
|
||
|
|
};
|