vscode-appwrite/src/tree/database/DocumentsTreeItem.ts
Alex Weininger 354b635701
Refresh tree after adding or removing project (#7)
* refresh tree after adding or removing project

* Always check if client is defined

* fix lint errors

* remove extra nodejs versions from pipeline
2021-04-30 02:53:24 -07:00

37 lines
1.4 KiB
TypeScript

import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode";
import { DocumentsList } from "../../appwrite";
import { client } from "../../client";
import { AppwriteSDK } from "../../constants";
import { ext } from "../../extensionVariables";
import { AppwriteTreeItemBase } from "../../ui/AppwriteTreeItemBase";
import AppwriteCall from "../../utils/AppwriteCall";
import { CollectionTreeItem } from "./CollectionTreeItem";
import { DocumentTreeItem } from "./DocumentTreeItem";
export class DocumentsTreeItem extends AppwriteTreeItemBase<CollectionTreeItem> {
constructor(parent: CollectionTreeItem) {
super(parent, "Documents");
}
public async getChildren(): Promise<TreeItem[]> {
const databaseSdk = new AppwriteSDK.Database(client);
const documentList = await AppwriteCall<DocumentsList>(databaseSdk.listDocuments(this.parent.collection.$id));
if (documentList === undefined) {
return [];
}
ext.outputChannel?.append(JSON.stringify(documentList, null, 4));
const documentTreeItems = documentList.documents.map((document) => new DocumentTreeItem(this, document));
const headerItem: TreeItem = {
label: `Total documents: ${documentTreeItems.length}`,
};
return [headerItem, ...documentTreeItems];
}
collapsibleState = TreeItemCollapsibleState.Collapsed;
contextValue = "documents";
iconPath = new ThemeIcon("database");
}