Skip to content

Commit fb8cd98

Browse files
committed
welcome screen: added open workspace button
1 parent fd6205b commit fb8cd98

File tree

5 files changed

+65
-7
lines changed

5 files changed

+65
-7
lines changed

src/extension/codemic.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,6 @@ class CodeMic {
173173
await this.openScreen({ screen, session, load: true });
174174
} else if (screen === t.Screen.Recorder) {
175175
await this.openScreen({ screen, session, clock: recorder!.clock });
176-
} else {
177-
throw new Error('Why did vscode restart?');
178176
}
179177

180178
return true;
@@ -379,6 +377,26 @@ class CodeMic {
379377
// await this.updateFrontend();
380378
return ok;
381379
}
380+
case 'welcome/openWorkspace': {
381+
const uris = await vscode.window.showOpenDialog({
382+
canSelectFiles: false,
383+
canSelectFolders: true,
384+
canSelectMany: false,
385+
title: 'Open a directory with a .CodeMic session',
386+
});
387+
388+
const workspace = uris?.[0]?.fsPath;
389+
if (!workspace) return ok;
390+
391+
await VscWorkspace.setUpWorkspace_MAY_RESTART_VSCODE(this.context, {
392+
screen: t.Screen.Welcome,
393+
workspace,
394+
searchQuery: this.searchQuery,
395+
userMetadata: this.userMetadata,
396+
});
397+
398+
return ok;
399+
}
382400
case 'welcome/deleteSession': {
383401
assert(this.welcome);
384402
const listing = this.welcome?.sessions.find(s => s.head.id === req.sessionId);

src/lib/lib.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -719,9 +719,12 @@ export function searchSessions(sessions: t.SessionUIListing[], searchQuery: stri
719719
return sessions.filter(listing => doFieldsIncludeTokens(getFields(listing.head)));
720720

721721
function getFields(head: t.SessionHead): string[] {
722-
return [head.handle, head.title, head.author ?? '', head.description, ...head.toc.map(item => item.title)].map(
723-
str => str?.toLowerCase(),
724-
);
722+
return [
723+
`@${head.author ?? ''}/${head.handle}`,
724+
head.title,
725+
head.description,
726+
...head.toc.map(item => item.title),
727+
].map(str => str?.toLowerCase());
725728
}
726729

727730
function doFieldsIncludeTokens(fields: string[]) {

src/lib/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export type FrontendToBackendReqRes =
2222
response: OKResponse;
2323
}
2424
| { request: { type: 'welcome/openNewSessionInRecorder' }; response: OKResponse }
25+
| { request: { type: 'welcome/openWorkspace' }; response: OKResponse }
2526
| { request: { type: 'welcome/deleteSession'; sessionId: string }; response: OKResponse }
2627
| { request: { type: 'welcome/likeSession'; sessionId: string; value: boolean }; response: OKResponse }
2728
| { request: { type: 'welcome/search'; searchQuery: string }; response: OKResponse }

src/view/welcome.css

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
}
6363

6464
& vscode-button {
65-
margin-left: var(--spacing-medium);
65+
margin-left: var(--spacing-x-small);
6666
}
6767
}
6868

@@ -112,5 +112,20 @@
112112
/* flex-direction: column; */
113113
/* } */
114114
/* } */
115+
116+
.empty-listings {
117+
display: grid;
118+
justify-items: center;
119+
align-items: center;
120+
margin: 2rem 1rem 2rem;
121+
gap: 0.5rem;
122+
123+
& p {
124+
font-size: 0.9rem;
125+
color: var(--text-weak);
126+
text-align: center;
127+
letter-spacing: 2px;
128+
}
129+
}
115130
}
116131
}

src/view/welcome.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Section from './section.jsx';
99
import postMessage from './api.js';
1010
import _ from 'lodash';
1111
import { VSCodeButton, VSCodeLink, VSCodeTextField } from '@vscode/webview-ui-toolkit/react';
12+
import { Link } from '@vscode/webview-ui-toolkit';
1213

1314
type Props = { user?: t.UserUI; welcome: t.WelcomeUIState; earlyAccessEmail?: string };
1415

@@ -107,6 +108,14 @@ function WelcomeSessions(props: Props) {
107108
value={welcome.searchQuery}
108109
onInput={search}
109110
></VSCodeTextField>
111+
112+
<VSCodeButton
113+
onClick={() => postMessage({ type: 'welcome/openWorkspace' })}
114+
title="Open session"
115+
appearance="secondary"
116+
>
117+
<span className="codicon codicon-folder-opened" />
118+
</VSCodeButton>
110119
<VSCodeButton
111120
onClick={() => postMessage({ type: 'welcome/openNewSessionInRecorder' })}
112121
title="Record a new session"
@@ -165,7 +174,19 @@ function SessionsSection(props: SessionsSectionProps) {
165174
onShare={share}
166175
/>
167176
)}
168-
{props.listings.length === 0 && !props.loading && <Section.Message>Empty</Section.Message>}
177+
{props.listings.length === 0 && !props.loading && (
178+
<div className="empty-listings">
179+
<p>No session found in workspace</p>
180+
{/*
181+
<VSCodeButton
182+
appearance="secondary"
183+
onClick={() => postMessage({ type: 'welcome/openWorkspace' })}
184+
title="Pick a workspace with a session"
185+
>
186+
Open session
187+
</VSCodeButton>*/}
188+
</div>
189+
)}
169190
</Section.Body>
170191
</Section>
171192
);

0 commit comments

Comments
 (0)