diff --git a/app/src/adapters/input/layouts/AreaLayout.ts b/app/src/adapters/input/layouts/AreaLayout.ts
index 8fe805d..a2a8782 100644
--- a/app/src/adapters/input/layouts/AreaLayout.ts
+++ b/app/src/adapters/input/layouts/AreaLayout.ts
@@ -2,45 +2,51 @@ import Layout from "./Layout";
import ExoContext from "../../../../../common/ExoContext";
import Area from "../../../../../core/src/domain/Area";
import DvRenderer from "../../../utils/dv/DvRenderer";
-import {Link} from "obsidian-dataview";
import Effort from "../../../../../core/src/domain/effort/Effort";
export default class AreaLayout implements Layout {
- constructor(private ctx: ExoContext, private dvRender: DvRenderer) {
- }
+ constructor(private ctx: ExoContext, private dvRender: DvRenderer) {
+ }
- async render(ko: Area, el: HTMLElement): Promise {
- const unresolvedEfforts = await this.ctx.effortRepository.find(e => {
- if (e.area === null) {
- return false;
- }
- const sameArea = e.area.id == ko.id;
- const unresolved = e.isUnresolved();
- return sameArea && unresolved;
- });
+ async render(ko: Area, el: HTMLElement): Promise {
+ const unresolvedEfforts = await this.ctx.effortRepository.find(e => {
+ if (e.area === null) {
+ return false;
+ }
+ const sameArea = e.area.id == ko.id;
+ const unresolved = e.isUnresolved();
+ return sameArea && unresolved;
+ });
- if (unresolvedEfforts.length > 0) {
- let header = this.createH1("Unresolved Efforts");
- el.appendChild(header);
+ if (unresolvedEfforts.length > 0) {
+ let header = this.createH1("Unresolved Efforts");
+ el.appendChild(header);
- const dvTable = await this.createTable(unresolvedEfforts);
- el.appendChild(dvTable)
- }
- }
+ const dvTable = await this.createTable(unresolvedEfforts);
+ el.appendChild(dvTable)
+ }
+ }
- private createH1(textContent: string) {
- const h1 = document.createElement("h1");
- h1.textContent = textContent;
- return h1;
- }
+ private createH1(textContent: string) {
+ const h1 = document.createElement("h1");
+ h1.textContent = textContent;
+ return h1;
+ }
- private async createTable(unresolvedEfforts: Effort[]) {
- let effortsLinks: Link[] = unresolvedEfforts.map(e => {
- let file = this.ctx.appUtils.getObjectFileOrThrow(e);
- return this.dvRender.dvApi.fileLink(file.path);
- });
- const dvDiv = document.createElement("div");
- await this.dvRender.list(effortsLinks, dvDiv);
- return dvDiv;
- }
+ private async createTable(unresolvedEfforts: Effort[]) {
+ const headers = ["Effort", "Area", "Status", "Votes"];
+ const rows = unresolvedEfforts.map(e => {
+ const effortLink = this.toLink(e);
+ const aresStr = e.area?.name ?? "--"; // TODO use inherited area
+ const statusStr = e.status;
+ const votesStr = "--"; // TODO implement votes
+ return [effortLink, aresStr, statusStr, votesStr];
+ });
+ return await this.dvRender.table(headers, rows);
+ }
+
+ private toLink(e: Effort) {
+ let file = this.ctx.appUtils.getObjectFileOrThrow(e);
+ return this.dvRender.dvApi.fileLink(file.path);
+ }
}
diff --git a/app/src/utils/dv/DvRenderer.ts b/app/src/utils/dv/DvRenderer.ts
index 3e73417..17394a4 100644
--- a/app/src/utils/dv/DvRenderer.ts
+++ b/app/src/utils/dv/DvRenderer.ts
@@ -19,12 +19,26 @@ export default class DvRenderer {
this.dvApi = dvApi;
}
- async list(links: Link[], el: HTMLElement) {
- await this.dvApi.list(
- links,
- el,
- this.component,
+ // noinspection JSUnusedGlobalSymbols
+ async list(links: Link[]) {
+ const div = document.createElement("div");
+ div.addClass("dv-renderer");
+
+ await this.dvApi.list(links, div, this.component,
this.mdCtx.sourcePath // TODO maybe this in unnecessary
);
+
+ return div;
+ }
+
+ async table(headers: string[], rows: any[][]) {
+ const div = document.createElement("div");
+ div.addClass("dv-renderer");
+
+ await this.dvApi.table(headers, rows, div, this.component,
+ this.mdCtx.sourcePath // TODO maybe this in unnecessary
+ );
+
+ return div;
}
}