diff --git a/addons/isl/src/CommandHistoryAndProgress.tsx b/addons/isl/src/CommandHistoryAndProgress.tsx
index 603241f8a1dbd..51d948f0119c5 100644
--- a/addons/isl/src/CommandHistoryAndProgress.tsx
+++ b/addons/isl/src/CommandHistoryAndProgress.tsx
@@ -14,8 +14,8 @@ import {Tooltip} from './Tooltip';
import {codeReviewProvider} from './codeReview/CodeReviewInfo';
import {T, t} from './i18n';
import {
- operationListJotai,
- queuedOperationsJotai,
+ operationList,
+ queuedOperations,
repositoryInfo,
useAbortRunningOperation,
} from './serverAPIState';
@@ -87,8 +87,8 @@ function OperationDescription(props: {
}
export function CommandHistoryAndProgress() {
- const list = useAtomValue(operationListJotai);
- const queued = useAtomValue(queuedOperationsJotai);
+ const list = useAtomValue(operationList);
+ const queued = useAtomValue(queuedOperations);
const abortRunningOperation = useAbortRunningOperation();
const info = useAtomValue(repositoryInfo);
diff --git a/addons/isl/src/Commit.tsx b/addons/isl/src/Commit.tsx
index b657dc72df27f..8e459925adec9 100644
--- a/addons/isl/src/Commit.tsx
+++ b/addons/isl/src/Commit.tsx
@@ -45,7 +45,7 @@ import {
isFetchingUncommittedChanges,
latestDag,
latestUncommittedChanges,
- operationBeingPreviewedJotai,
+ operationBeingPreviewed,
useRunOperation,
useRunPreviewedOperation,
} from './serverAPIState';
@@ -260,7 +260,7 @@ export const Commit = memo(
label: hasChildren ? Hide Commit and Descendants : Hide Commit,
onClick: () =>
writeAtom(
- operationBeingPreviewedJotai,
+ operationBeingPreviewed,
new HideOperation(latestSuccessorUnlessExplicitlyObsolete(commit)),
),
});
@@ -672,7 +672,7 @@ function DraggableCommit({
commit.remoteBookmarks.length > 0
? succeedableRevset(commit.remoteBookmarks[0])
: latestSuccessorUnlessExplicitlyObsolete(commit);
- writeAtom(operationBeingPreviewedJotai, op => {
+ writeAtom(operationBeingPreviewed, op => {
const newRebase = new RebaseOperation(
latestSuccessorUnlessExplicitlyObsolete(beingDragged),
destination,
diff --git a/addons/isl/src/CommitTreeList.tsx b/addons/isl/src/CommitTreeList.tsx
index f5bf8a8226cb7..6639dc5a475f0 100644
--- a/addons/isl/src/CommitTreeList.tsx
+++ b/addons/isl/src/CommitTreeList.tsx
@@ -32,7 +32,7 @@ import {
commitFetchError,
commitsShownRange,
isFetchingAdditionalCommits,
- latestUncommittedChangesDataJotai,
+ latestUncommittedChangesData,
useRunOperation,
} from './serverAPIState';
import {MaybeEditStackModal} from './stackEdit/ui/EditStackModal';
@@ -181,7 +181,7 @@ export function CommitTreeList() {
// so we don't miss the first returned uncommitted changes message.
// TODO: This is a little ugly, is there a better way to tell recoil to start the subscription immediately?
// Or should we queue/cache messages?
- useAtomValue(latestUncommittedChangesDataJotai);
+ useAtomValue(latestUncommittedChangesData);
const renderer = useAtomValue(configGraphRenderer);
useMarkOperationsCompleted();
diff --git a/addons/isl/src/StackActions.tsx b/addons/isl/src/StackActions.tsx
index b1bcd8f96881a..ee600862c85e8 100644
--- a/addons/isl/src/StackActions.tsx
+++ b/addons/isl/src/StackActions.tsx
@@ -20,7 +20,7 @@ import {SyncStatus, syncStatusAtom} from './codeReview/syncStatus';
import {T, t} from './i18n';
import {IconStack} from './icons/IconStack';
import {dagWithPreviews} from './previews';
-import {useRunOperation, latestUncommittedChangesDataJotai} from './serverAPIState';
+import {useRunOperation, latestUncommittedChangesData} from './serverAPIState';
import {useConfirmUnsavedEditsBeforeSplit} from './stackEdit/ui/ConfirmUnsavedEditsBeforeSplit';
import {StackEditIcon} from './stackEdit/ui/StackEditIcon';
import {editingStackIntentionHashes, loadingStackState} from './stackEdit/ui/stackEditState';
@@ -249,7 +249,7 @@ export function StackActions({hash}: {hash: Hash}): React.ReactElement | null {
}
function StackEditButton({info}: {info: DagCommitInfo}): React.ReactElement | null {
- const uncommitted = useAtomValue(latestUncommittedChangesDataJotai);
+ const uncommitted = useAtomValue(latestUncommittedChangesData);
const dag = useAtomValue(dagWithPreviews);
const [[, stackHashes], setStackIntentionHashes] = useAtom(editingStackIntentionHashes);
const loadingState = useAtomValue(loadingStackState);
diff --git a/addons/isl/src/UncommittedChanges.tsx b/addons/isl/src/UncommittedChanges.tsx
index 5b4196c70d7da..2d0109b7e65b2 100644
--- a/addons/isl/src/UncommittedChanges.tsx
+++ b/addons/isl/src/UncommittedChanges.tsx
@@ -59,7 +59,7 @@ import {
import {selectedCommits} from './selection';
import {
latestHeadCommit,
- operationListJotai,
+ operationList,
uncommittedChangesFetchError,
useRunOperation,
} from './serverAPIState';
@@ -745,7 +745,7 @@ function MergeConflictButtons({
// But only if the abort/continue command succeeded.
// TODO: is this reliable? Is it possible to get stuck with buttons disabled because
// we think it's still running?
- const lastRunOperation = useAtomValue(operationListJotai).currentOperation;
+ const lastRunOperation = useAtomValue(operationList).currentOperation;
const justFinishedContinue =
lastRunOperation?.operation instanceof ContinueOperation && lastRunOperation.exitCode === 0;
const justFinishedAbort =
diff --git a/addons/isl/src/debug/DebugToolsMenu.tsx b/addons/isl/src/debug/DebugToolsMenu.tsx
index 13627e67411a4..1cfd7a5c04b5b 100644
--- a/addons/isl/src/debug/DebugToolsMenu.tsx
+++ b/addons/isl/src/debug/DebugToolsMenu.tsx
@@ -23,8 +23,8 @@ import {dagWithPreviews} from '../previews';
import {RelativeDate} from '../relativeDate';
import {
latestCommitsData,
- latestUncommittedChangesDataJotai,
- mergeConflictsJotai,
+ latestUncommittedChangesData,
+ mergeConflicts,
repositoryInfo,
} from '../serverAPIState';
import {ComponentExplorerButton} from './ComponentExplorer';
@@ -115,9 +115,9 @@ function ServerClientMessageLogging() {
}
function DebugPerfInfo() {
- const latestStatus = useAtomValue(latestUncommittedChangesDataJotai);
+ const latestStatus = useAtomValue(latestUncommittedChangesData);
const latestLog = useAtomValue(latestCommitsData);
- const latestConflicts = useAtomValue(mergeConflictsJotai);
+ const latestConflicts = useAtomValue(mergeConflicts);
const heartbeat = useHeartbeat();
const repoInfo = useAtomValue(repositoryInfo);
let commandName = 'sl';
diff --git a/addons/isl/src/debug/getInterestingAtoms.ts b/addons/isl/src/debug/getInterestingAtoms.ts
index 62d4284acdf4b..5c3ccff5d1ca0 100644
--- a/addons/isl/src/debug/getInterestingAtoms.ts
+++ b/addons/isl/src/debug/getInterestingAtoms.ts
@@ -14,13 +14,13 @@ import {readAtom} from '../jotaiUtils';
import {uncommittedSelection} from '../partialSelection';
import {selectedCommits} from '../selection';
import {
- operationBeingPreviewedJotai,
- jotaiRepositoryData,
+ operationBeingPreviewed,
+ repositoryData,
latestCommitsData,
- latestUncommittedChangesDataJotai,
- mergeConflictsJotai,
- operationListJotai,
- queuedOperationsJotai,
+ latestUncommittedChangesData,
+ mergeConflicts,
+ operationList,
+ queuedOperations,
} from '../serverAPIState';
import {SelfUpdate} from 'shared/immutableExt';
@@ -31,14 +31,14 @@ function listInterestingAtoms(): Array> {
return [
allDiffSummaries,
codeReviewProvider,
- jotaiRepositoryData,
+ repositoryData,
latestCommitsData,
latestSuccessorsMapAtom,
- latestUncommittedChangesDataJotai,
- mergeConflictsJotai,
- operationBeingPreviewedJotai,
- operationListJotai,
- queuedOperationsJotai,
+ latestUncommittedChangesData,
+ mergeConflicts,
+ operationBeingPreviewed,
+ operationList,
+ queuedOperations,
selectedCommits,
uncommittedSelection,
// This is an atomFamily. Need extra work to read it.
diff --git a/addons/isl/src/fold.tsx b/addons/isl/src/fold.tsx
index 40ed810e4bac7..920efe01f1cf3 100644
--- a/addons/isl/src/fold.tsx
+++ b/addons/isl/src/fold.tsx
@@ -25,7 +25,7 @@ import {
} from './operations/FoldOperation';
import {type Dag, dagWithPreviews} from './previews';
import {selectedCommits} from './selection';
-import {operationBeingPreviewedJotai, useRunPreviewedOperation} from './serverAPIState';
+import {operationBeingPreviewed, useRunPreviewedOperation} from './serverAPIState';
import {firstOfIterable} from './utils';
import {VSCodeButton} from '@vscode/webview-ui-toolkit/react';
import {atom, useAtomValue} from 'jotai';
@@ -87,7 +87,7 @@ export function FoldButton({commit}: {commit?: CommitInfo}) {
foldable.map(commit => parseCommitMessageFields(schema, commit.title, commit.description)),
);
const message = commitMessageFieldsToString(schema, messageFields);
- writeAtom(operationBeingPreviewedJotai, new FoldOperation(foldable, message));
+ writeAtom(operationBeingPreviewed, new FoldOperation(foldable, message));
writeAtom(selectedCommits, new Set([getFoldRangeCommitHash(foldable, /* isPreview */ true)]));
}, [foldable]);
if (foldable == null || (commit != null && foldable?.[0]?.hash !== commit.hash)) {
@@ -108,7 +108,7 @@ export function FoldButton({commit}: {commit?: CommitInfo}) {
* This allows running the fold operation to use the newly typed message.
*/
export function updateFoldedMessageWithEditedMessage(): FoldOperation | undefined {
- const beingPreviewed = readAtom(operationBeingPreviewedJotai);
+ const beingPreviewed = readAtom(operationBeingPreviewed);
if (beingPreviewed != null && beingPreviewed instanceof FoldOperation) {
const range = beingPreviewed.getFoldRange();
const combinedHash = getFoldRangeCommitHash(range, /* isPreview */ true);
diff --git a/addons/isl/src/previews.ts b/addons/isl/src/previews.ts
index 3751b38480491..30da41e364912 100644
--- a/addons/isl/src/previews.ts
+++ b/addons/isl/src/previews.ts
@@ -19,12 +19,12 @@ import {
latestUncommittedChanges,
latestCommits,
latestDag,
- operationBeingPreviewedJotai,
+ operationBeingPreviewed,
latestHeadCommit,
- queuedOperationsJotai,
- operationListJotai,
- mergeConflictsJotai,
- latestUncommittedChangesDataJotai,
+ queuedOperations,
+ operationList,
+ mergeConflicts,
+ latestUncommittedChangesData,
latestCommitsData,
} from './serverAPIState';
import {atom, useAtom, useAtomValue} from 'jotai';
@@ -207,17 +207,17 @@ function applyPreviewsToMergeConflicts(
}
export const uncommittedChangesWithPreviews = atom>(get => {
- const list = get(operationListJotai);
- const queued = get(queuedOperationsJotai);
+ const list = get(operationList);
+ const queued = get(queuedOperations);
const uncommittedChanges = get(latestUncommittedChanges);
return applyPreviewsToChangedFiles(uncommittedChanges, list, queued);
});
export const optimisticMergeConflicts = atom(get => {
- const list = get(operationListJotai);
- const queued = get(queuedOperationsJotai);
- const conflicts = get(mergeConflictsJotai);
+ const list = get(operationList);
+ const queued = get(queuedOperations);
+ const conflicts = get(mergeConflicts);
if (conflicts?.files == null) {
return conflicts;
}
@@ -246,11 +246,11 @@ export type {Dag};
export const dagWithPreviews = atom(get => {
const originalDag = get(latestDag);
- const list = get(operationListJotai);
- const queued = get(queuedOperationsJotai);
+ const list = get(operationList);
+ const queued = get(queuedOperations);
const currentOperation = list.currentOperation;
const history = list.operationHistory;
- const currentPreview = get(operationBeingPreviewedJotai);
+ const currentPreview = get(operationBeingPreviewed);
let dag = originalDag;
for (const op of optimisticOperations({history, queued, currentOperation})) {
dag = op.optimisticDag(dag);
@@ -322,11 +322,11 @@ function* optimisticOperations(props: {
export function useMarkOperationsCompleted(): void {
const fetchedCommits = useAtomValue(latestCommitsData);
const commits = useAtomValue(latestCommits);
- const uncommittedChanges = useAtomValue(latestUncommittedChangesDataJotai);
- const conflicts = useAtomValue(mergeConflictsJotai);
+ const uncommittedChanges = useAtomValue(latestUncommittedChangesData);
+ const conflicts = useAtomValue(mergeConflicts);
const successorMap = useAtomValue(latestSuccessorsMapAtom);
- const [list, setOperationList] = useAtom(operationListJotai);
+ const [list, setOperationList] = useAtom(operationList);
// Mark operations as completed when their optimistic applier is no longer needed
// n.b. this must be a useEffect since React doesn't like setCurrentOperation getting called during render
@@ -480,8 +480,8 @@ type Class = new (...args: any[]) => T;
export function useIsOperationRunningOrQueued(
cls: Class,
): 'running' | 'queued' | undefined {
- const list = useAtomValue(operationListJotai);
- const queued = useAtomValue(queuedOperationsJotai);
+ const list = useAtomValue(operationList);
+ const queued = useAtomValue(queuedOperations);
if (list.currentOperation?.operation instanceof cls && list.currentOperation?.exitCode == null) {
return 'running';
} else if (queued.some(op => op instanceof cls)) {
@@ -491,8 +491,8 @@ export function useIsOperationRunningOrQueued(
}
export function useMostRecentPendingOperation(): Operation | undefined {
- const list = useAtomValue(operationListJotai);
- const queued = useAtomValue(queuedOperationsJotai);
+ const list = useAtomValue(operationList);
+ const queued = useAtomValue(queuedOperations);
if (queued.length > 0) {
return queued.at(-1);
}
diff --git a/addons/isl/src/selection.ts b/addons/isl/src/selection.ts
index 83bc581edbbad..7752974c8eff7 100644
--- a/addons/isl/src/selection.ts
+++ b/addons/isl/src/selection.ts
@@ -16,7 +16,7 @@ import {islDrawerState} from './drawerState';
import {atomFamilyWeak, readAtom, writeAtom} from './jotaiUtils';
import {HideOperation} from './operations/HideOperation';
import {dagWithPreviews} from './previews';
-import {latestDag, operationBeingPreviewedJotai} from './serverAPIState';
+import {latestDag, operationBeingPreviewed} from './serverAPIState';
import {firstOfIterable, registerCleanup} from './utils';
import {atom, useAtomValue} from 'jotai';
import {useCallback} from 'react';
@@ -287,7 +287,7 @@ export function useBackspaceToHideSelected(): void {
}
writeAtom(
- operationBeingPreviewedJotai,
+ operationBeingPreviewed,
new HideOperation(latestSuccessorUnlessExplicitlyObsolete(commitToHide)),
);
}, []);
diff --git a/addons/isl/src/serverAPIState.ts b/addons/isl/src/serverAPIState.ts
index 3b85f85896d32..a9a1884f9f440 100644
--- a/addons/isl/src/serverAPIState.ts
+++ b/addons/isl/src/serverAPIState.ts
@@ -37,22 +37,22 @@ import {
import {initialParams} from './urlParams';
import {registerCleanup, registerDisposable, short} from './utils';
import {DEFAULT_DAYS_OF_COMMITS_TO_LOAD} from 'isl-server/src/constants';
-import {atom as jotaiAtom} from 'jotai';
+import {atom} from 'jotai';
import {useCallback} from 'react';
import {reuseEqualObjects} from 'shared/deepEqualExt';
import {defer, randomId} from 'shared/utils';
-export const jotaiRepositoryData = jotaiAtom<{info?: RepoInfo; cwd?: string}>({});
+export const repositoryData = atom<{info?: RepoInfo; cwd?: string}>({});
registerDisposable(
- jotaiRepositoryData,
+ repositoryData,
serverAPI.onMessageOfType('repoInfo', event => {
- writeAtom(jotaiRepositoryData, {info: event.info, cwd: event.cwd});
+ writeAtom(repositoryData, {info: event.info, cwd: event.cwd});
}),
import.meta.hot,
);
registerCleanup(
- jotaiRepositoryData,
+ repositoryData,
serverAPI.onSetup(() =>
serverAPI.postMessage({
type: 'requestRepoInfo',
@@ -61,9 +61,9 @@ registerCleanup(
import.meta.hot,
);
-export const repositoryInfo = jotaiAtom(
+export const repositoryInfo = atom(
get => {
- const data = get(jotaiRepositoryData);
+ const data = get(repositoryData);
return data?.info;
},
(
@@ -71,15 +71,15 @@ export const repositoryInfo = jotaiAtom(
set,
update: RepoInfo | undefined | ((_prev: RepoInfo | undefined) => RepoInfo | undefined),
) => {
- const value = typeof update === 'function' ? update(get(jotaiRepositoryData)?.info) : update;
- set(jotaiRepositoryData, last => ({
+ const value = typeof update === 'function' ? update(get(repositoryData)?.info) : update;
+ set(repositoryData, last => ({
...last,
info: value,
}));
},
);
-export const applicationinfo = jotaiAtom(undefined);
+export const applicationinfo = atom(undefined);
registerDisposable(
applicationinfo,
serverAPI.onMessageOfType('applicationInfo', event => {
@@ -97,7 +97,7 @@ registerCleanup(
import.meta.hot,
);
-export const reconnectingStatus = jotaiAtom({type: 'initializing'});
+export const reconnectingStatus = atom({type: 'initializing'});
registerDisposable(
reconnectingStatus,
messageBus.onChangeStatus(status => {
@@ -106,8 +106,8 @@ registerDisposable(
import.meta.hot,
);
-export const serverCwd = jotaiAtom(get => {
- const data = get(jotaiRepositoryData);
+export const serverCwd = atom(get => {
+ const data = get(repositoryData);
if (data.info?.type === 'cwdNotARepository') {
return data.info.cwd;
}
@@ -174,7 +174,7 @@ function subscriptionEffect(
};
}
-export const latestUncommittedChangesDataJotai = jotaiAtom<{
+export const latestUncommittedChangesData = atom<{
fetchStartTimestamp: number;
fetchCompletedTimestamp: number;
files: UncommittedChanges;
@@ -182,12 +182,12 @@ export const latestUncommittedChangesDataJotai = jotaiAtom<{
}>({fetchStartTimestamp: 0, fetchCompletedTimestamp: 0, files: []});
// This is used by a test. Tests do not go through babel to rewrite source
// to insert debugLabel.
-latestUncommittedChangesDataJotai.debugLabel = 'latestUncommittedChangesData';
+latestUncommittedChangesData.debugLabel = 'latestUncommittedChangesData';
registerCleanup(
- latestUncommittedChangesDataJotai,
+ latestUncommittedChangesData,
subscriptionEffect('uncommittedChanges', data => {
- writeAtom(latestUncommittedChangesDataJotai, last => ({
+ writeAtom(latestUncommittedChangesData, last => ({
...data,
files:
data.files.value ??
@@ -205,23 +205,23 @@ registerCleanup(
* Prefer using `uncommittedChangesWithPreviews`, since it includes optimistic state
* and previews.
*/
-export const latestUncommittedChanges = jotaiAtom>(
- get => get(latestUncommittedChangesDataJotai).files,
+export const latestUncommittedChanges = atom>(
+ get => get(latestUncommittedChangesData).files,
);
-export const uncommittedChangesFetchError = jotaiAtom(get => {
- return get(latestUncommittedChangesDataJotai).error;
+export const uncommittedChangesFetchError = atom(get => {
+ return get(latestUncommittedChangesData).error;
});
-export const mergeConflictsJotai = jotaiAtom(undefined);
+export const mergeConflicts = atom(undefined);
registerCleanup(
- mergeConflictsJotai,
+ mergeConflicts,
subscriptionEffect('mergeConflicts', data => {
- writeAtom(mergeConflictsJotai, data);
+ writeAtom(mergeConflicts, data);
}),
);
-export const latestCommitsData = jotaiAtom<{
+export const latestCommitsData = atom<{
fetchStartTimestamp: number;
fetchCompletedTimestamp: number;
commits: SmartlogCommits;
@@ -250,24 +250,22 @@ registerCleanup(
}),
);
-export const latestUncommittedChangesTimestamp = jotaiAtom(get => {
- return get(latestUncommittedChangesDataJotai).fetchCompletedTimestamp;
+export const latestUncommittedChangesTimestamp = atom(get => {
+ return get(latestUncommittedChangesData).fetchCompletedTimestamp;
});
/**
* Lookup a commit by hash, *WITHOUT PREVIEWS*.
* Generally, you'd want to look up WITH previews, which you can use dagWithPreviews for.
*/
-export const commitByHash = atomFamilyWeak((hash: string) =>
- jotaiAtom(get => get(latestDag).get(hash)),
-);
+export const commitByHash = atomFamilyWeak((hash: string) => atom(get => get(latestDag).get(hash)));
-export const latestCommits = jotaiAtom(get => {
+export const latestCommits = atom(get => {
return get(latestCommitsData).commits;
});
/** The dag also includes a mutationDag to answer successor queries. */
-export const latestDag = jotaiAtom(get => {
+export const latestDag = atom(get => {
const commits = get(latestCommits);
const successorMap = get(latestSuccessorsMapAtom);
const commitDag = undefined; // will be populated from `commits`
@@ -277,7 +275,7 @@ export const latestDag = jotaiAtom(get => {
return dag;
});
-export const commitFetchError = jotaiAtom(get => {
+export const commitFetchError = atom(get => {
return get(latestCommitsData).error;
});
@@ -287,7 +285,7 @@ export const hasExperimentalFeatures = configBackedAtom(
true /* read-only */,
);
-export const isFetchingCommits = jotaiAtom(false);
+export const isFetchingCommits = atom(false);
registerDisposable(
isFetchingCommits,
serverAPI.onMessageOfType('subscriptionResult', () => {
@@ -303,7 +301,7 @@ registerDisposable(
import.meta.hot,
);
-export const isFetchingAdditionalCommits = jotaiAtom(false);
+export const isFetchingAdditionalCommits = atom(false);
registerDisposable(
isFetchingAdditionalCommits,
serverAPI.onMessageOfType('subscriptionResult', e => {
@@ -330,7 +328,7 @@ registerDisposable(
import.meta.hot,
);
-export const isFetchingUncommittedChanges = jotaiAtom(false);
+export const isFetchingUncommittedChanges = atom(false);
registerDisposable(
isFetchingUncommittedChanges,
serverAPI.onMessageOfType('subscriptionResult', e => {
@@ -348,7 +346,7 @@ registerDisposable(
import.meta.hot,
);
-export const commitsShownRange = jotaiAtom(DEFAULT_DAYS_OF_COMMITS_TO_LOAD);
+export const commitsShownRange = atom(DEFAULT_DAYS_OF_COMMITS_TO_LOAD);
registerCleanup(
commitsShownRange,
resetOnCwdChange(commitsShownRange, DEFAULT_DAYS_OF_COMMITS_TO_LOAD),
@@ -367,7 +365,7 @@ registerDisposable(
* Prefer using `dagWithPreviews.resolve('.')`, since it includes optimistic state
* and previews.
*/
-export const latestHeadCommit = jotaiAtom(get => {
+export const latestHeadCommit = atom(get => {
const commits = get(latestCommits);
return commits.find(commit => commit.isHead);
});
@@ -377,15 +375,15 @@ export const latestHeadCommit = jotaiAtom(get => {
* - Either the list of commits has successfully loaded
* - or there was an error during the fetch
*/
-export const haveCommitsLoadedYet = jotaiAtom(get => {
+export const haveCommitsLoadedYet = atom(get => {
const data = get(latestCommitsData);
return data.commits.length > 0 || data.error != null;
});
-export const operationBeingPreviewedJotai = jotaiAtom(undefined);
-resetOnCwdChange(operationBeingPreviewedJotai, undefined);
+export const operationBeingPreviewed = atom(undefined);
+resetOnCwdChange(operationBeingPreviewed, undefined);
-export const haveRemotePath = jotaiAtom(get => {
+export const haveRemotePath = atom(get => {
const info = get(repositoryInfo);
// codeReviewSystem.type is 'unknown' or other values if paths.default is present.
return info?.type === 'success' && info.codeReviewSystem.type !== 'none';
@@ -445,14 +443,14 @@ function startNewOperation(newOperation: Operation, list: OperationList): Operat
}
}
-export const operationListJotai = jotaiAtom(defaultOperationList());
-resetOnCwdChange(operationListJotai, defaultOperationList());
+export const operationList = atom(defaultOperationList());
+resetOnCwdChange(operationList, defaultOperationList());
registerDisposable(
- operationListJotai,
+ operationList,
serverAPI.onMessageOfType('operationProgress', progress => {
switch (progress.kind) {
case 'spawn':
- writeAtom(operationListJotai, list => {
+ writeAtom(operationList, list => {
const operation = operationsById.get(progress.id);
if (operation == null) {
return list;
@@ -463,7 +461,7 @@ registerDisposable(
break;
case 'stdout':
case 'stderr':
- writeAtom(operationListJotai, current => {
+ writeAtom(operationList, current => {
const currentOperation = current.currentOperation;
if (currentOperation == null) {
return current;
@@ -480,7 +478,7 @@ registerDisposable(
});
break;
case 'inlineProgress':
- writeAtom(operationListJotai, current => {
+ writeAtom(operationList, current => {
const currentOperation = current.currentOperation;
if (currentOperation == null) {
return current;
@@ -515,7 +513,7 @@ registerDisposable(
});
break;
case 'progress':
- writeAtom(operationListJotai, current => {
+ writeAtom(operationList, current => {
const currentOperation = current.currentOperation;
if (currentOperation == null) {
return current;
@@ -540,7 +538,7 @@ registerDisposable(
});
break;
case 'exit':
- writeAtom(operationListJotai, current => {
+ writeAtom(operationList, current => {
const currentOperation = current.currentOperation;
if (currentOperation == null) {
return current;
@@ -570,8 +568,8 @@ registerDisposable(
);
export const inlineProgressByHash = atomFamilyWeak((hash: Hash) =>
- jotaiAtom(get => {
- const info = get(operationListJotai);
+ atom(get => {
+ const info = get(operationList);
const inlineProgress = info.currentOperation?.inlineProgress;
if (inlineProgress == null) {
return undefined;
@@ -589,26 +587,26 @@ const operationsById = new Map();
/** Store callbacks to run when an operation completes. This is stored outside of the operation since Operations are typically Immutable. */
const operationCompletionCallbacks = new Map void>();
-export const queuedOperationsJotai = jotaiAtom>([]);
-resetOnCwdChange(queuedOperationsJotai, []);
+export const queuedOperations = atom>([]);
+resetOnCwdChange(queuedOperations, []);
registerDisposable(
- queuedOperationsJotai,
+ queuedOperations,
serverAPI.onMessageOfType('operationProgress', progress => {
switch (progress.kind) {
case 'queue':
case 'spawn': // spawning doubles as our notification to dequeue the next operation, and includes the new queue state.
// Update with the latest queue state. We expect this to be sent whenever we try to run a command but it gets queued.
- writeAtom(queuedOperationsJotai, () => {
+ writeAtom(queuedOperations, () => {
return progress.queue
.map(opId => operationsById.get(opId))
.filter((op): op is Operation => op != null);
});
break;
case 'error':
- writeAtom(queuedOperationsJotai, () => []); // empty queue when a command hits an error
+ writeAtom(queuedOperations, () => []); // empty queue when a command hits an error
break;
case 'exit':
- writeAtom(queuedOperationsJotai, current => {
+ writeAtom(queuedOperations, current => {
operationsById.delete(progress.id); // we don't need to care about this operation anymore
if (progress.exitCode != null && progress.exitCode !== 0) {
// if any process in the queue exits with an error, the entire queue is cleared.
@@ -641,15 +639,15 @@ function runOperationImpl(operation: Operation): Promise {
});
operationsById.set(operation.id, operation);
- const ongoing = readAtom(operationListJotai);
+ const ongoing = readAtom(operationList);
if (ongoing?.currentOperation != null && ongoing.currentOperation.exitCode == null) {
- const queue = readAtom(queuedOperationsJotai);
+ const queue = readAtom(queuedOperations);
// Add to the queue optimistically. The server will tell us the real state of the queue when it gets our run request.
- writeAtom(queuedOperationsJotai, [...(queue || []), operation]);
+ writeAtom(queuedOperations, [...(queue || []), operation]);
} else {
// start a new operation. We need to manage the previous operations
- writeAtom(operationListJotai, list => startNewOperation(operation, list));
+ writeAtom(operationList, list => startNewOperation(operation, list));
}
return defered.promise;
@@ -683,10 +681,10 @@ export function useAbortRunningOperation() {
type: 'abortRunningOperation',
operationId,
});
- const ongoing = readAtom(operationListJotai);
+ const ongoing = readAtom(operationList);
if (ongoing?.currentOperation?.operation?.id === operationId) {
// Mark 'aborting' as true.
- writeAtom(operationListJotai, list => {
+ writeAtom(operationList, list => {
const currentOperation = list.currentOperation;
if (currentOperation != null) {
return {...list, currentOperation: {aborting: true, ...currentOperation}};
@@ -704,12 +702,12 @@ export function useAbortRunningOperation() {
export function useRunPreviewedOperation() {
return useCallback((isCancel: boolean, operation?: Operation) => {
if (isCancel) {
- writeAtom(operationBeingPreviewedJotai, undefined);
+ writeAtom(operationBeingPreviewed, undefined);
return;
}
- const operationToRun = operation ?? readAtom(operationBeingPreviewedJotai);
- writeAtom(operationBeingPreviewedJotai, undefined);
+ const operationToRun = operation ?? readAtom(operationBeingPreviewed);
+ writeAtom(operationBeingPreviewed, undefined);
if (operationToRun) {
runOperationImpl(operationToRun);
}
@@ -723,7 +721,7 @@ export function useRunPreviewedOperation() {
*/
export function useClearAllOptimisticState() {
return useCallback(() => {
- writeAtom(operationListJotai, list => {
+ writeAtom(operationList, list => {
const operationHistory = [...list.operationHistory];
for (let i = 0; i < operationHistory.length; i++) {
if (operationHistory[i].exitCode != null) {