From fa9eaebde1b4cd0d49a2e72731629a923f091946 Mon Sep 17 00:00:00 2001 From: Ryan Gaus Date: Wed, 23 Oct 2024 15:47:48 -0400 Subject: [PATCH] feat: always listen for deps:status messages and keep the usePackageJson context up to date --- .../src/components/apps/use-package-json.tsx | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/web/src/components/apps/use-package-json.tsx b/packages/web/src/components/apps/use-package-json.tsx index dd430b2e..3f2b08cb 100644 --- a/packages/web/src/components/apps/use-package-json.tsx +++ b/packages/web/src/components/apps/use-package-json.tsx @@ -53,8 +53,8 @@ export function PackageJsonProvider({ channel, children }: ProviderPropsType) { }, [channel]); useEffect(() => { - const callback = ({ status }: DepsInstallStatusPayloadType) => { - setStatus(status); + const callback = (payload: DepsInstallStatusPayloadType) => { + setStatus(payload.status); }; channel.on('deps:install:status', callback); @@ -82,20 +82,27 @@ export function PackageJsonProvider({ channel, children }: ProviderPropsType) { }; channel.on('deps:install:log', logCallback); - const statusCallback = ({ status, code }: DepsInstallStatusPayloadType) => { - channel.off('deps:install:log', logCallback); - channel.off('deps:install:status', statusCallback); - - addLog( - 'info', - 'srcbook', - `${!packages ? 'npm install' : `npm install ${packages.join(' ')}`} exited with status code ${code}`, - ); - - if (status === 'complete') { - resolve(); - } else { - reject(new Error(`Error running npm install: ${contents}`)); + const statusCallback = (payload: DepsInstallStatusPayloadType) => { + switch (payload.status) { + case "installing": + break; + case "failed": + case "complete": + channel.off('deps:install:log', logCallback); + channel.off('deps:install:status', statusCallback); + + addLog( + 'info', + 'srcbook', + `${!packages ? 'npm install' : `npm install ${packages.join(' ')}`} exited with status code ${payload.code}`, + ); + + if (payload.status === 'complete') { + resolve(); + } else { + reject(new Error(`Error running npm install: ${contents}`)); + } + break; } }; channel.on('deps:install:status', statusCallback);