112 lines
2.4 KiB
JavaScript
112 lines
2.4 KiB
JavaScript
import { loadSettings, saveSettings } from "./storage.js";
|
|
|
|
const initialSettings = loadSettings();
|
|
|
|
const state = {
|
|
settings: initialSettings,
|
|
selectedRepoPath: initialSettings.lastSelectedRepoPath || "",
|
|
selectedRepoName: initialSettings.lastSelectedRepoPath ? initialSettings.lastSelectedRepoPath.split(/[/\\]/).filter(Boolean).pop() || "" : "",
|
|
repoSearch: "",
|
|
changesFilter: "",
|
|
historyFilter: "",
|
|
commitSummary: "",
|
|
commitDescription: "",
|
|
localRepoPathInput: "",
|
|
localRepoScanRootInput: "",
|
|
localRepoScanResults: [],
|
|
localRepoScanLoading: false,
|
|
localRepoScanError: "",
|
|
cloneUrlInput: "",
|
|
cloneDestinationInput: "",
|
|
commitMessage: "",
|
|
workingTree: {
|
|
loading: false,
|
|
error: "",
|
|
branch: "",
|
|
upstream: "",
|
|
ahead: 0,
|
|
behind: 0,
|
|
files: [],
|
|
selectedPaths: new Set(),
|
|
selectedPath: "",
|
|
selectedDiff: null,
|
|
diffLoading: false,
|
|
diffError: "",
|
|
},
|
|
sync: {
|
|
loading: false,
|
|
error: "",
|
|
operation: "",
|
|
branch: "",
|
|
upstream: "",
|
|
upstreamRemote: "",
|
|
defaultRemote: "",
|
|
ahead: 0,
|
|
behind: 0,
|
|
hasRemote: false,
|
|
isDetached: false,
|
|
isUnpublished: false,
|
|
lastUpdated: 0,
|
|
},
|
|
branches: {
|
|
loading: false,
|
|
error: "",
|
|
items: [],
|
|
createName: "",
|
|
menuOpen: false,
|
|
dialog: {
|
|
mode: "",
|
|
target: "",
|
|
value: "",
|
|
error: "",
|
|
},
|
|
},
|
|
history: {
|
|
loading: false,
|
|
error: "",
|
|
commits: [],
|
|
selectedHash: "",
|
|
selectedCommit: null,
|
|
},
|
|
viewer: {
|
|
source: "",
|
|
repoName: "",
|
|
repoPath: "",
|
|
cloneUrl: "",
|
|
defaultBranch: "",
|
|
branch: "",
|
|
branches: [],
|
|
path: "",
|
|
entries: [],
|
|
selectedFile: null,
|
|
readmeFile: null,
|
|
loading: false,
|
|
error: "",
|
|
},
|
|
};
|
|
|
|
export function getState() {
|
|
return state;
|
|
}
|
|
|
|
export function setSettings(nextSettings) {
|
|
state.settings = nextSettings;
|
|
saveSettings(state.settings);
|
|
}
|
|
|
|
export function updateSettings(patch) {
|
|
setSettings({ ...state.settings, ...patch });
|
|
}
|
|
|
|
export function addRecentRepo(path) {
|
|
if (!path) return;
|
|
const current = state.settings.recentRepositories.filter((item) => item !== path);
|
|
const next = [path, ...current].slice(0, 15);
|
|
updateSettings({ recentRepositories: next, lastSelectedRepoPath: path });
|
|
}
|
|
|
|
export function getActiveServer() {
|
|
const { activeServerId, servers } = state.settings;
|
|
return servers.find((server) => server.id === activeServerId) ?? null;
|
|
}
|