Skip to content

Commit

Permalink
Add firebase.selectProject command (#6725)
Browse files Browse the repository at this point in the history
  • Loading branch information
rrousselGit committed Jan 30, 2024
1 parent 8128ad3 commit a6b6237
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 39 deletions.
8 changes: 7 additions & 1 deletion firebase-vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@
],
"main": "./dist/extension.js",
"contributes": {
"commands": [
{
"command": "firebase.selectProject",
"title": "Switch project"
}
],
"configuration": {
"title": "Firebase VS Code Extension",
"properties": {
Expand Down Expand Up @@ -143,4 +149,4 @@
"webpack-cli": "^5.0.1",
"webpack-merge": "^5.8.0"
}
}
}
83 changes: 45 additions & 38 deletions firebase-vscode/src/core/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ import { updateFirebaseRCProject } from "../config-files";
import { globalSignal } from "../utils/globals";

/** Available projects */
export const projects = globalSignal<Record<string, FirebaseProjectMetadata[]>>({});
export const projects = globalSignal<Record<string, FirebaseProjectMetadata[]>>(
{}
);

/** Currently selected project ID */
export const currentProjectId = globalSignal("");
Expand Down Expand Up @@ -74,48 +76,53 @@ export function registerProject({
});
});

broker.on("selectProject", async () => {
if (process.env.MONOSPACE_ENV) {
pluginLogger.debug(
"selectProject: found MONOSPACE_ENV, " +
"prompting user using external flow"
);
/**
* Monospace case: use Monospace flow
*/
const monospaceExtension =
vscode.extensions.getExtension("google.monospace");
process.env.MONOSPACE_DAEMON_PORT =
monospaceExtension.exports.getMonospaceDaemonPort();
try {
const projectId = await selectProjectInMonospace({
projectRoot: currentOptions.value.cwd,
project: undefined,
isVSCE: true,
});
const command = vscode.commands.registerCommand(
"firebase.selectProject",
async () => {
if (process.env.MONOSPACE_ENV) {
pluginLogger.debug(
"selectProject: found MONOSPACE_ENV, " +
"prompting user using external flow"
);
/**
* Monospace case: use Monospace flow
*/
const monospaceExtension =
vscode.extensions.getExtension("google.monospace");
process.env.MONOSPACE_DAEMON_PORT =
monospaceExtension.exports.getMonospaceDaemonPort();
try {
const projectId = await selectProjectInMonospace({
projectRoot: currentOptions.value.cwd,
project: undefined,
isVSCE: true,
});

if (projectId) {
currentProjectId.value = projectId;
if (projectId) {
currentProjectId.value = projectId;
}
} catch (e) {
pluginLogger.error(e);
}
} else if (isServiceAccount.value) {
return;
} else {
try {
currentProjectId.value = await promptUserForProject(
userScopedProjects.value
);
} catch (e) {
vscode.window.showErrorMessage(e.message);
}
} catch (e) {
pluginLogger.error(e);
}
} else if (isServiceAccount.value) {
return;
} else {
try {
currentProjectId.value = await promptUserForProject(
userScopedProjects.value
);
} catch (e) {
vscode.window.showErrorMessage(e.message);
}
}
});
);

broker.on("selectProject", () =>
vscode.commands.executeCommand("firebase.selectProject")
);

return {
dispose() {},
};
return vscode.Disposable.from(command);
}

/** Get the user to select a project */
Expand Down

0 comments on commit a6b6237

Please sign in to comment.