Skip to content

Commit e186f8c

Browse files
committed
feat: Updated all flows to use the new atom system for the default renderer
1 parent 84dbe86 commit e186f8c

File tree

3 files changed

+22
-101
lines changed

3 files changed

+22
-101
lines changed

src/ui/components/default-component.tsx

Lines changed: 7 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -20,101 +20,27 @@ export function DefaultComponent(props: {
2020
emitter: EventEmitter
2121
}) {
2222
const { emitter } = props;
23-
24-
const [state, setState] = useState(RenderState.GENERATING_PLAN);
25-
// const [progressState, setProgressState] = useState(null as ProgressState | null);
26-
const [hideProgress, setHideProgress] = useState(false);
27-
const [plan, setPlan] = useState(null as Plan | null);
28-
const [showSudoPrompt, setShowPromptSudo] = useState(false);
29-
const [requiredParametersForImport, setRequiredParametersForImport] = useState<RequiredParameters | null>(null);
30-
const [showImportParametersPrompt, setShowImportParametersPrompt] = useState(false);
31-
const [importResult, setImportResult] = useState<ImportResult | null>(null);
32-
const [sudoAttemptCount, setSudoAttemptCount] = useState(0);
33-
const [confirmationMessage, setConfirmationMessage] = useState('');
3423
const [disableSudoPrompt, setDisableSudoPrompt] = useState(false);
3524

3625
const [{ status: renderStatus, data: renderData }] = useAtom(store.renderState);
37-
const [progressState] = useAtom(store.progressState);
26+
// const [progressState] = useAtom(store.progressState);
3827

3928
// Use layoutEffect runs before the first render, whereas useEffect runs after
4029
useLayoutEffect(() => {
41-
emitter.on(RenderEvent.STATE_TRANSITION, (obj) => {
42-
switch (obj.nextState) {
43-
case RenderState.DISPLAY_PLAN: {
44-
// setProgressState(null);
45-
setPlan(obj.plan);
46-
break;
47-
}
48-
49-
case RenderState.DISPLAY_IMPORT_RESULT: {
50-
// setProgressState(null);
51-
setImportResult(obj.importResult);
52-
break;
53-
}
54-
55-
case RenderState.PROMPT_CONFIRMATION: {
56-
setConfirmationMessage(obj.message)
57-
break;
58-
}
59-
}
60-
61-
setState(obj.nextState);
62-
})
63-
6430
emitter.on(RenderEvent.LOG, (log: string) => {
6531
console.log(chalk.cyan(log));
6632
spinnerEmitter.emit('data');
6733
});
68-
69-
emitter.on(RenderEvent.PROGRESS_UPDATE, (state: ProgressState) => {
70-
// setProgressState(structuredClone(state));
71-
});
72-
73-
emitter.on(RenderEvent.PROMPT_SUDO, (attemptCount) => {
74-
setShowPromptSudo(true);
75-
setHideProgress(true)
76-
setSudoAttemptCount(attemptCount ?? 0);
77-
});
78-
79-
emitter.on(RenderEvent.PROMPT_SUDO_GRANTED, () => {
80-
setShowPromptSudo(false);
81-
setHideProgress(false)
82-
setSudoAttemptCount(0);
83-
});
84-
85-
emitter.on(RenderEvent.PROMPT_SUDO_ERROR, () => {
86-
setShowPromptSudo(false);
87-
setSudoAttemptCount(0);
88-
});
89-
90-
emitter.on(RenderEvent.PROMPT_IMPORT_PARAMETERS, (requiredParameters) => {
91-
setHideProgress(true);
92-
setRequiredParametersForImport(requiredParameters);
93-
setShowImportParametersPrompt(true);
94-
})
95-
96-
emitter.on(RenderEvent.PROMPT_IMPORT_PARAMETERS_RESULT, () => {
97-
setHideProgress(false);
98-
setRequiredParametersForImport(null);
99-
setShowImportParametersPrompt(false);
100-
})
10134

10235
emitter.on(RenderEvent.DISABLE_SUDO_PROMPT, (isDisabled) => {
10336
setDisableSudoPrompt(isDisabled);
10437
})
10538
}, []);
10639

107-
console.log(renderStatus);
108-
// console.log(renderData);
109-
//
110-
// console.log(renderStatus);
111-
// console.log(progressState);
112-
// console.log(renderData);
113-
11440
return <Box flexDirection="column">
11541
{
116-
renderStatus === RenderStatus.PROGRESS && progressState && !hideProgress && (
117-
<ProgressDisplay emitter={spinnerEmitter} eventType="data" progress={progressState}/>
42+
renderStatus === RenderStatus.PROGRESS && (
43+
<ProgressDisplay emitter={spinnerEmitter} eventType="data"/>
11844
)
11945
}
12046
{
@@ -154,15 +80,15 @@ export function DefaultComponent(props: {
15480
)
15581
}
15682
{
157-
showImportParametersPrompt && requiredParametersForImport && (
83+
renderStatus === RenderStatus.IMPORT_PROMPT && (
15884
<ImportParametersForm onSubmit={(result) => {
15985
emitter.emit(RenderEvent.PROMPT_IMPORT_PARAMETERS_RESULT, result)
160-
}} requiredParameters={requiredParametersForImport}/>
86+
}} requiredParameters={renderData as RequiredParameters}/>
16187
)
16288
}
16389
{
164-
state === RenderState.DISPLAY_IMPORT_RESULT && importResult && (
165-
<Static items={[importResult]}>{
90+
renderStatus === RenderStatus.DISPLAY_IMPORT_RESULT && (
91+
<Static items={[renderData as ImportResult]}>{
16692
(importResult, idx) => <ImportResultComponent importResult={importResult} key={idx} />
16793
}</Static>
16894
)

src/ui/components/progress/progress-display.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import EventEmitter from 'node:events';
44
import React from 'react';
55

66
import Spinner from './spinner.js';
7+
import { store } from '../../store/index.js';
8+
import { useAtom } from 'jotai';
79

810
export enum ProgressStatus {
911
IN_PROGRESS,
@@ -23,12 +25,17 @@ export interface ProgressState {
2325

2426
export function ProgressDisplay(
2527
props: {
26-
progress: ProgressState,
28+
// progress: ProgressState,
2729
emitter: EventEmitter,
2830
eventType: string,
2931
}
3032
) {
31-
const { label, status, subProgresses } = props.progress;
33+
const [progress] = useAtom(store.progressState);
34+
if (!progress) {
35+
return;
36+
}
37+
38+
const { label, status, subProgresses } = progress;
3239

3340
return <Box flexDirection="column">
3441
{

src/ui/reporters/default-reporter.tsx

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,16 @@ export class DefaultReporter implements Reporter {
4949
return new Map();
5050
}
5151

52-
this.renderEmitter.emit(RenderEvent.PROMPT_IMPORT_PARAMETERS, requiredParameters);
52+
const userInput = await this.updateStateAndAwaitEvent<object>(() => {
53+
this.updateRenderState(RenderStatus.IMPORT_PROMPT, requiredParameters);
54+
}, RenderEvent.PROMPT_IMPORT_PARAMETERS_RESULT);
5355

54-
return new Promise((resolve) => {
55-
this.renderEmitter.once(RenderEvent.PROMPT_IMPORT_PARAMETERS_RESULT, (result: object) => {
56-
const userSuppliedParameters = this.extractUserSuppliedParametersFromResult(result);
57-
resolve(userSuppliedParameters);
58-
});
59-
})
56+
this.updateRenderState(RenderStatus.PROGRESS);
57+
return this.extractUserSuppliedParametersFromResult(userInput);
6058
}
6159

6260
displayImportResult(importResult: ImportResult): void {
63-
this.renderEmitter.emit(RenderEvent.STATE_TRANSITION, {
64-
nextState: RenderState.DISPLAY_IMPORT_RESULT,
65-
importResult,
66-
})
61+
this.updateRenderState(RenderStatus.DISPLAY_IMPORT_RESULT, importResult);
6762
}
6863

6964
async promptSudo(pluginName: string, data: SudoRequestData, secureMode: boolean): Promise<SudoRequestResponseData> {
@@ -92,10 +87,6 @@ export class DefaultReporter implements Reporter {
9287
)
9388

9489
if (continueApply) {
95-
// this.renderEmitter.emit(RenderEvent.STATE_TRANSITION, {
96-
// nextState: RenderState.APPLYING,
97-
// });
98-
9990
this.updateRenderState(RenderStatus.PROGRESS)
10091
this.log(`${message} -> "Yes"`)
10192
}
@@ -132,7 +123,6 @@ export class DefaultReporter implements Reporter {
132123

133124
this.progressState!.status = ProgressStatus.FINISHED;
134125
store.set(store.progressState, structuredClone(this.progressState));
135-
// this.renderEmitter.emit(RenderEvent.PROGRESS_UPDATE, this.progressState);
136126
}
137127

138128
private onSubprocessStartEvent(name: SubProcessName, additionalName?: string): void {
@@ -145,7 +135,6 @@ export class DefaultReporter implements Reporter {
145135
status: ProgressStatus.IN_PROGRESS,
146136
});
147137
store.set(store.progressState, structuredClone(this.progressState));
148-
// this.renderEmitter.emit(RenderEvent.PROGRESS_UPDATE, this.progressState);
149138
}
150139

151140
private onSubprocessFinishEvent(name: SubProcessName, additionalName?: string): void {
@@ -163,7 +152,6 @@ export class DefaultReporter implements Reporter {
163152

164153
this.log(`${label} finished successfully`)
165154
store.set(store.progressState, structuredClone(this.progressState));
166-
// this.renderEmitter.emit(RenderEvent.PROGRESS_UPDATE, this.progressState);
167155
}
168156

169157
private async getUserPassword(): Promise<string> {

0 commit comments

Comments
 (0)