mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 06:06:01 +00:00
85 lines
2.4 KiB
TypeScript
85 lines
2.4 KiB
TypeScript
import { getOpenedTabs, openedTabs } from '../stores';
|
|
import _ from 'lodash';
|
|
|
|
export class LoadingToken {
|
|
isCanceled = false;
|
|
|
|
cancel() {
|
|
this.isCanceled = true;
|
|
}
|
|
}
|
|
|
|
export function sleep(milliseconds) {
|
|
return new Promise(resolve => window.setTimeout(() => resolve(null), milliseconds));
|
|
}
|
|
|
|
export function changeTab(tabid, changeFunc) {
|
|
openedTabs.update(files => files.map(tab => (tab.tabid == tabid ? changeFunc(tab) : tab)));
|
|
}
|
|
|
|
export function markTabUnsaved(tabid) {
|
|
const tab = getOpenedTabs().find(x => x.tabid == tabid);
|
|
if (tab.unsaved) return;
|
|
openedTabs.update(files => files.map(tab => (tab.tabid == tabid ? { ...tab, unsaved: true } : tab)));
|
|
}
|
|
|
|
export function markTabSaved(tabid) {
|
|
openedTabs.update(files => files.map(tab => (tab.tabid == tabid ? { ...tab, unsaved: false } : tab)));
|
|
}
|
|
|
|
export function setSelectedTabFunc(files, tabid) {
|
|
return [
|
|
...(files || []).filter(x => x.tabid != tabid).map(x => ({ ...x, selected: false })),
|
|
...(files || []).filter(x => x.tabid == tabid).map(x => ({ ...x, selected: true })),
|
|
];
|
|
}
|
|
|
|
export function setSelectedTab(tabid) {
|
|
openedTabs.update(tabs => setSelectedTabFunc(tabs, tabid));
|
|
}
|
|
|
|
export function getObjectTypeFieldLabel(objectTypeField, driver?) {
|
|
if (objectTypeField == 'matviews') return 'Materialized Views';
|
|
if (objectTypeField == 'collections') return _.startCase(driver?.collectionPluralLabel) ?? 'Collections/Containers';
|
|
return _.startCase(objectTypeField);
|
|
}
|
|
|
|
export async function asyncFilter(arr, predicate) {
|
|
const results = await Promise.all(arr.map(predicate));
|
|
|
|
return arr.filter((_v, index) => results[index]);
|
|
}
|
|
|
|
export function isMac() {
|
|
// @ts-ignore
|
|
const platform = navigator?.platform || navigator?.userAgentData?.platform || 'unknown';
|
|
return platform.toUpperCase().indexOf('MAC') >= 0;
|
|
}
|
|
|
|
export function formatKeyText(keyText: string): string {
|
|
if (isMac()) {
|
|
return keyText
|
|
.replace('CtrlOrCommand+', '⌘ ')
|
|
.replace('Shift+', '⇧ ')
|
|
.replace('Alt+', '⌥ ')
|
|
.replace('Command+', '⌘ ')
|
|
.replace('Ctrl+', '⌃ ')
|
|
.replace('Backspace', '⌫ ');
|
|
}
|
|
return keyText.replace('CtrlOrCommand+', 'Ctrl+');
|
|
}
|
|
|
|
export function resolveKeyText(keyText: string): string {
|
|
if (isMac()) {
|
|
return keyText.replace('CtrlOrCommand+', 'Command+');
|
|
}
|
|
return keyText.replace('CtrlOrCommand+', 'Ctrl+');
|
|
}
|
|
|
|
export function isCtrlOrCommandKey(event) {
|
|
if (isMac()) {
|
|
return event.metaKey;
|
|
}
|
|
return event.ctrlKey;
|
|
}
|