A simpler way to view django projects
it works! the model tree is visible
6 files changed, +28 -46
+2-2src/context.ts
| @@ -2,7 +2,7 @@ import * as vscode from "vscode"; | ||
| 2 | 2 | import * as path from "path"; |
| 3 | 3 | import * as fs from "fs"; |
| 4 | 4 | import DjangoProject from "./project"; |
| 5 | -import { onDjangoProject } from "./listeners"; | |
| 5 | +import { djangoProjectUpdate } from "./events"; | |
| 6 | 6 | |
| 7 | 7 | export const setDjangoContext = async () => { |
| 8 | 8 | const workspaceFolders = vscode.workspace.workspaceFolders; |
| @@ -37,7 +37,7 @@ export const setDjangoContext = async () => { | ||
| 37 | 37 | "django-overview.project", |
| 38 | 38 | project |
| 39 | 39 | ); |
| 40 | - onDjangoProject.fire(project); | |
| 40 | + djangoProjectUpdate.fire(project); | |
| 41 | 41 | console.log("Django context set"); |
| 42 | 42 | } |
| 43 | 43 | }; |
+11-0src/events.ts
| @@ -0,0 +1,11 @@ | ||
| 1 | +import * as vscode from "vscode"; | |
| 2 | +import DjangoProject from "./project"; | |
| 3 | +import { projectDataProvider } from "./providers"; | |
| 4 | + | |
| 5 | +export const djangoProjectUpdate = new vscode.EventEmitter<DjangoProject>(); | |
| 6 | + | |
| 7 | +export default [ | |
| 8 | + djangoProjectUpdate.event((project) => { | |
| 9 | + projectDataProvider.update(project); | |
| 10 | + }), | |
| 11 | +]; |
+1-1src/extension.ts
| @@ -3,7 +3,7 @@ import ProjectDataProvider from "./providers/project"; | ||
| 3 | 3 | import providers from "./providers"; |
| 4 | 4 | import commands from "./commands"; |
| 5 | 5 | import { setDjangoContext } from "./context"; |
| 6 | -import listeners from "./listeners"; | |
| 6 | +import listeners from "./events"; | |
| 7 | 7 | |
| 8 | 8 | export async function activate(context: vscode.ExtensionContext) { |
| 9 | 9 | await setDjangoContext(); |
+0-10src/listeners.ts
| @@ -1,10 +0,0 @@ | ||
| 1 | -import * as vscode from "vscode"; | |
| 2 | -import DjangoProject from "./project"; | |
| 3 | - | |
| 4 | -export const onDjangoProject = new vscode.EventEmitter<DjangoProject>(); | |
| 5 | - | |
| 6 | -export default [ | |
| 7 | - onDjangoProject.event((e) => { | |
| 8 | - console.log("Django project updated", e); | |
| 9 | - }), | |
| 10 | -]; |
+3-1src/providers/index.ts
| @@ -1,9 +1,11 @@ | ||
| 1 | 1 | import * as vscode from "vscode"; |
| 2 | 2 | import ProjectDataProvider from "./project"; |
| 3 | 3 | |
| 4 | +export const projectDataProvider = new ProjectDataProvider(); | |
| 5 | + | |
| 4 | 6 | export default [ |
| 5 | 7 | vscode.window.registerTreeDataProvider( |
| 6 | 8 | "django-overview.project", |
| 7 | - new ProjectDataProvider() | |
| 9 | + projectDataProvider | |
| 8 | 10 | ), |
| 9 | 11 | ]; |
+11-32src/providers/project.ts
| @@ -4,28 +4,14 @@ import DjangoProject from "../project"; | ||
| 4 | 4 | export default class ProjectDataProvider |
| 5 | 5 | implements vscode.TreeDataProvider<vscode.TreeItem> |
| 6 | 6 | { |
| 7 | - private _onDidChangeTreeData: vscode.EventEmitter< | |
| 8 | - void | vscode.TreeItem | vscode.TreeItem[] | null | undefined | |
| 9 | - > = new vscode.EventEmitter< | |
| 10 | - void | vscode.TreeItem | vscode.TreeItem[] | null | undefined | |
| 11 | - >(); | |
| 12 | - | |
| 13 | - readonly onDidChangeTreeData: vscode.Event< | |
| 14 | - void | vscode.TreeItem | vscode.TreeItem[] | null | undefined | |
| 15 | - > = this._onDidChangeTreeData.event; | |
| 16 | - | |
| 17 | - project: DjangoProject; | |
| 18 | - | |
| 19 | - constructor() { | |
| 20 | - this.project = vscode.workspace | |
| 21 | - .getConfiguration("django-overview") | |
| 22 | - .get("project") as DjangoProject; | |
| 23 | - } | |
| 24 | - | |
| 25 | - setContext(context: DjangoProject) { | |
| 26 | - this.project = context; | |
| 27 | - console.log(`Setting project to ${context}`); | |
| 28 | - this._onDidChangeTreeData.fire(); | |
| 7 | + _update = new vscode.EventEmitter<void>(); | |
| 8 | + onDidChangeTreeData = this._update.event; | |
| 9 | + project?: DjangoProject; | |
| 10 | + | |
| 11 | + update(project: DjangoProject) { | |
| 12 | + console.log("updating the tree"); | |
| 13 | + this.project = project; | |
| 14 | + this._update.fire(); | |
| 29 | 15 | } |
| 30 | 16 | |
| 31 | 17 | getTreeItem(element: vscode.TreeItem): vscode.TreeItem { |
| @@ -33,21 +19,14 @@ export default class ProjectDataProvider | ||
| 33 | 19 | } |
| 34 | 20 | |
| 35 | 21 | getChildren(element?: vscode.TreeItem): Thenable<vscode.TreeItem[]> { |
| 36 | - console.log(this.project); | |
| 37 | - console.log(element?.contextValue); | |
| 38 | 22 | if (element === undefined) { |
| 39 | 23 | // Return the root items |
| 40 | 24 | return Promise.resolve([this.createModelsTreeItem()]); |
| 41 | 25 | } else if (element.contextValue === "models") { |
| 42 | - // const models = []; | |
| 43 | - // for (const app of this.project.apps) { | |
| 44 | - // for (const model of app.models) { | |
| 45 | - // models.push | |
| 46 | - // } | |
| 47 | - // } | |
| 26 | + if (!this.project) { | |
| 27 | + return Promise.resolve([]); | |
| 28 | + } | |
| 48 | 29 | const models = this.project.apps.flatMap((app) => app.models); |
| 49 | - console.log(models); | |
| 50 | - console.log("Adding the models"); | |
| 51 | 30 | return Promise.resolve( |
| 52 | 31 | models.map((model) => new vscode.TreeItem(model.name)) |
| 53 | 32 | ); |