Change Area layout rendering with dataview table
This commit is contained in:
		
							parent
							
								
									eb2a93642b
								
							
						
					
					
						commit
						df293b86c6
					
				| 
						 | 
				
			
			@ -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<Area> {
 | 
			
		||||
	constructor(private ctx: ExoContext, private dvRender: DvRenderer) {
 | 
			
		||||
	}
 | 
			
		||||
    constructor(private ctx: ExoContext, private dvRender: DvRenderer) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	async render(ko: Area, el: HTMLElement): Promise<void> {
 | 
			
		||||
		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<void> {
 | 
			
		||||
        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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue