Skip to content

Commit d14ace1

Browse files
committed
Updates Launchpad when Launchpad actions are taken
1 parent cdf398f commit d14ace1

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

src/webviews/apps/plus/home/components/launchpad.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { consume } from '@lit/context';
2-
import { SignalWatcher } from '@lit-labs/signals';
2+
import { signal, SignalWatcher } from '@lit-labs/signals';
33
import type { TemplateResult } from 'lit';
44
import { css, html, LitElement, nothing } from 'lit';
55
import { customElement, state } from 'lit/decorators.js';
66
import type { LaunchpadCommandArgs } from '../../../../../plus/launchpad/launchpad';
77
import { createCommandLink } from '../../../../../system/commands';
88
import { pluralize } from '../../../../../system/string';
99
import type { GetLaunchpadSummaryResponse, State } from '../../../../home/protocol';
10-
import { GetLaunchpadSummary } from '../../../../home/protocol';
10+
import { DidChangeLaunchpad, GetLaunchpadSummary } from '../../../../home/protocol';
1111
import { stateContext } from '../../../home/context';
1212
import { AsyncComputedState } from '../../../shared/components/signal-utils';
1313
import { ipcContext } from '../../../shared/context';
@@ -102,7 +102,9 @@ export class GlLaunchpad extends SignalWatcher(LitElement) {
102102

103103
@consume({ context: ipcContext })
104104
private _ipc!: HostIpc;
105-
private _disposable: Disposable | undefined;
105+
private _disposable: Disposable[] = [];
106+
107+
private _summary = signal<GetLaunchpadSummaryResponse | undefined>(undefined);
106108

107109
private _summaryState = new AsyncComputedState<LaunchpadSummary>(async _abortSignal => {
108110
const rsp = await this._ipc.sendRequest(GetLaunchpadSummary, {});
@@ -120,18 +122,28 @@ export class GlLaunchpad extends SignalWatcher(LitElement) {
120122
override connectedCallback() {
121123
super.connectedCallback();
122124

125+
this._disposable.push(
126+
this._ipc.onReceiveMessage(msg => {
127+
switch (true) {
128+
case DidChangeLaunchpad.is(msg):
129+
this._summaryState.run(true);
130+
break;
131+
}
132+
}),
133+
);
134+
123135
this._summaryState.run();
124136
}
125137

126138
override disconnectedCallback() {
127139
super.disconnectedCallback();
128140

129-
this._disposable?.dispose();
141+
this._disposable.forEach(d => d.dispose());
130142
}
131143

132144
override render() {
133145
return html`
134-
<gl-section>
146+
<gl-section ?loading=${this._summaryState.computed.status === 'pending'}>
135147
<span slot="heading">GitLens Launchpad</span>
136148
<div class="summary">${this.renderSummaryResult()}</div>
137149
<button-container gap="wide">

src/webviews/home/homeWebview.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import {
5959
ChangeOverviewRepository,
6060
CollapseSectionCommand,
6161
DidChangeIntegrationsConnections,
62+
DidChangeLaunchpad,
6263
DidChangeOrgSettings,
6364
DidChangeOverviewFilter,
6465
DidChangePreviewEnabled,
@@ -112,6 +113,7 @@ export class HomeWebviewProvider implements WebviewProvider<State, State, HomeWe
112113
this.container.integrations.onDidChangeConnectionState(this.onChangeConnectionState, this),
113114
this.container.walkthrough.onProgressChanged(this.onWalkthroughChanged, this),
114115
configuration.onDidChange(this.onDidChangeConfig, this),
116+
this.container.launchpad.onDidChange(this.onDidLaunchpadChange, this),
115117
);
116118
}
117119

@@ -222,6 +224,10 @@ export class HomeWebviewProvider implements WebviewProvider<State, State, HomeWe
222224
}
223225
}
224226

227+
private onDidLaunchpadChange() {
228+
this.notifyDidChangeLaunchpad();
229+
}
230+
225231
private async push(force = false) {
226232
const repo = this.getSelectedRepository();
227233
if (repo) {
@@ -794,6 +800,10 @@ export class HomeWebviewProvider implements WebviewProvider<State, State, HomeWe
794800
});
795801
}
796802

803+
private notifyDidChangeLaunchpad() {
804+
void this.host.notify(DidChangeLaunchpad, undefined);
805+
}
806+
797807
private notifyDidChangeOnboardingIntegration() {
798808
// force rechecking
799809
const isConnected = this.isAnyIntegrationConnected(true);

src/webviews/home/protocol.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ export const DidChangeIntegrationsConnections = new IpcNotification<DidChangeInt
208208
'integrations/didChange',
209209
);
210210

211+
export const DidChangeLaunchpad = new IpcNotification<undefined>(scope, 'launchpad/didChange');
212+
211213
export interface DidChangeSubscriptionParams {
212214
subscription: Subscription;
213215
avatar: string;

0 commit comments

Comments
 (0)