From c6b9c40fd45da6ff7e99e4d97e825e70ccafb5e0 Mon Sep 17 00:00:00 2001 From: Pavel Ashevskii Date: Mon, 12 Apr 2021 16:32:11 +0400 Subject: [PATCH] Store current template value for each tab Signed-off-by: Pavel Ashevskii --- .../components/dock/create-resource.store.ts | 15 +++++++------- .../components/dock/create-resource.tsx | 20 +++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/renderer/components/dock/create-resource.store.ts b/src/renderer/components/dock/create-resource.store.ts index be66d9743e..bdc1f4c139 100644 --- a/src/renderer/components/dock/create-resource.store.ts +++ b/src/renderer/components/dock/create-resource.store.ts @@ -1,3 +1,4 @@ +import fs from "fs-extra"; import path from "path"; import os from "os"; import groupBy from "lodash/groupBy"; @@ -14,6 +15,7 @@ export class CreateResourceStore extends DockTabStore { super({ storageKey: "create_resource" }); + fs.ensureDirSync(this.userTemplatesFolder); } get lensTemplatesFolder():string { @@ -24,12 +26,8 @@ export class CreateResourceStore extends DockTabStore { return path.join(os.homedir(), ".k8slens", "templates"); } - get lensTemplates() { - return this.getTemplates(this.lensTemplatesFolder, "lens"); - } - - getTemplates(templatesPath: string, defaultGroup: string) { - const templates = filehound.create().path(templatesPath).ext("yaml").depth(1).findSync(); + async getTemplates(templatesPath: string, defaultGroup: string) { + const templates = await filehound.create().path(templatesPath).ext(["yaml", "json"]).depth(1).find(); return templates ? this.groupTemplates(templates, templatesPath, defaultGroup) : {}; } @@ -42,7 +40,10 @@ export class CreateResourceStore extends DockTabStore { } async getMergedTemplates() { - return {...this.getTemplates(this.userTemplatesFolder, "ungrouped"),...this.lensTemplates}; + const userTemplates = await this.getTemplates(this.userTemplatesFolder, "ungrouped"); + const lensTemplates = await this.getTemplates(this.lensTemplatesFolder, "lens"); + + return {...userTemplates,...lensTemplates}; } async watchUserTemplates(callback: ()=> void){ diff --git a/src/renderer/components/dock/create-resource.tsx b/src/renderer/components/dock/create-resource.tsx index 873c5dcdca..29e2bf60e7 100644 --- a/src/renderer/components/dock/create-resource.tsx +++ b/src/renderer/components/dock/create-resource.tsx @@ -23,20 +23,18 @@ interface Props { @observer export class CreateResource extends React.Component { + @observable currentTemplates:Map = new Map(); @observable error = ""; @observable templates:GroupSelectOption[] = []; componentDidMount() { - createResourceStore.getMergedTemplates().then(v => this.updateGroupSelecOptions(v)); - createResourceStore.watchUserTemplates(() => createResourceStore.getMergedTemplates().then(v => this.updateGroupSelecOptions(v))); + createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v)); + createResourceStore.watchUserTemplates(() => createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v))); } - updateGroupSelecOptions(templates :{[x:string]: string[]}) { - this.templates = []; - - Object.keys(templates).forEach(group => { - this.templates.push(this.convertToGroup(group, templates[group])); - }); + updateGroupSelectOptions(templates :Record) { + this.templates = Object.entries(templates) + .map(([name, grouping]) => this.convertToGroup(name, grouping)); } convertToGroup(group:string, items:string[]):GroupSelectOption { @@ -53,12 +51,17 @@ export class CreateResource extends React.Component { return createResourceStore.getData(this.tabId); } + get currentTemplate() { + return this.currentTemplates.get(this.tabId) ?? null; + } + onChange = (value: string, error?: string) => { createResourceStore.setData(this.tabId, value); this.error = error; }; onSelectTemplate = (item: SelectOption) => { + this.currentTemplates.set(this.tabId, item); fs.readFile(item.value,"utf8").then(v => createResourceStore.setData(this.tabId,v)); }; @@ -105,6 +108,7 @@ export class CreateResource extends React.Component { menuPlacement="top" themeName="outlined" onChange={v => this.onSelectTemplate(v)} + value = {this.currentTemplate} /> );