Files
Gitpub-Desktop/frontend/js/state.js
T
2026-05-10 20:33:03 +12:00

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;
}