From f140bc5b704641bd9f986fcd58e5c50d54e3e342 Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 3 Oct 2021 15:59:22 +0300 Subject: [PATCH] refactoring dock-tab stores -- part 1 Signed-off-by: Roman --- package.json | 1 - .../components/dock/create-resource.store.ts | 49 ++---- .../components/dock/create-resource.tsx | 46 +++--- .../components/dock/dock-tab.store.ts | 108 -------------- .../components/dock/dock-tabs.store.ts | 141 ++++++++++++++++++ src/renderer/components/dock/dock.store.ts | 25 +++- .../components/dock/edit-resource.store.ts | 54 ++----- .../components/dock/install-chart.store.ts | 36 +++-- .../components/dock/install-chart.tsx | 6 +- src/renderer/components/dock/log-tab.store.ts | 29 ++-- .../components/dock/upgrade-chart.store.ts | 100 +++++-------- .../components/dock/upgrade-chart.tsx | 4 +- .../monaco-editor/monaco-editor.tsx | 20 ++- yarn.lock | 46 +----- 14 files changed, 295 insertions(+), 370 deletions(-) delete mode 100644 src/renderer/components/dock/dock-tab.store.ts create mode 100644 src/renderer/components/dock/dock-tabs.store.ts diff --git a/package.json b/package.json index 6a37700fe7..f7afc7cda6 100644 --- a/package.json +++ b/package.json @@ -199,7 +199,6 @@ "electron-devtools-installer": "^3.2.0", "electron-updater": "^4.4.3", "electron-window-state": "^5.0.3", - "filehound": "^1.17.4", "fs-extra": "^9.0.1", "glob-to-regexp": "^0.4.1", "grapheme-splitter": "^1.0.4", diff --git a/src/renderer/components/dock/create-resource.store.ts b/src/renderer/components/dock/create-resource.store.ts index f0b6b41154..28a0041bb0 100644 --- a/src/renderer/components/dock/create-resource.store.ts +++ b/src/renderer/components/dock/create-resource.store.ts @@ -22,60 +22,29 @@ import fs from "fs-extra"; import path from "path"; import os from "os"; -import groupBy from "lodash/groupBy"; -import filehound from "filehound"; -import { watch } from "chokidar"; import { autoBind } from "../../utils"; -import { DockTabStore } from "./dock-tab.store"; +import { DockTabsStore } from "./dock-tabs.store"; import { dockStore, DockTabCreateSpecific, TabKind } from "./dock.store"; -export class CreateResourceStore extends DockTabStore { +export class CreateResourceStore extends DockTabsStore { constructor() { super({ storageKey: "create_resource" }); autoBind(this); - fs.ensureDirSync(this.userTemplatesFolder); } - get lensTemplatesFolder():string { - return path.resolve(__static, "../templates/create-resource"); + protected async init() { + super.init(); + await fs.ensureDir(this.userTemplatesFolder); } - get userTemplatesFolder():string { - return path.join(os.homedir(), ".k8slens", "templates"); + get userTemplatesFolder(): string { + return path.resolve(os.homedir(), "~/.k8slens/templates"); } - 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) : {}; - } - - groupTemplates(templates: string[], templatesPath: string, defaultGroup: string) { - return groupBy(templates,(v:string) => - path.relative(templatesPath,v).split(path.sep).length>1 - ? path.parse(path.relative(templatesPath,v)).dir - : defaultGroup); - } - - async getMergedTemplates() { - const userTemplates = await this.getTemplates(this.userTemplatesFolder, "ungrouped"); - const lensTemplates = await this.getTemplates(this.lensTemplatesFolder, "lens"); - - return {...userTemplates,...lensTemplates}; - } - - async watchUserTemplates(callback: ()=> void){ - watch(this.userTemplatesFolder, { - depth: 1, - ignoreInitial: true, - awaitWriteFinish: { - stabilityThreshold: 500 - } - }).on("all", () => { - callback(); - }); + async getBundledTemplate(fileName: string, ext = "yaml") { + return import(`../../../../templates/create-resource/${fileName}.${ext}`); } } diff --git a/src/renderer/components/dock/create-resource.tsx b/src/renderer/components/dock/create-resource.tsx index e6e2176f9e..dd9da94fb4 100644 --- a/src/renderer/components/dock/create-resource.tsx +++ b/src/renderer/components/dock/create-resource.tsx @@ -20,13 +20,10 @@ */ import "./create-resource.scss"; - import React from "react"; -import path from "path"; -import fs from "fs-extra"; -import { GroupSelectOption, Select, SelectOption } from "../select"; +import { Select, SelectOption } from "../select"; import jsYaml from "js-yaml"; -import { makeObservable, observable } from "mobx"; +import { computed, makeObservable, observable } from "mobx"; import { observer } from "mobx-react"; import { cssNames } from "../../utils"; import { createResourceStore } from "./create-resource.store"; @@ -46,27 +43,16 @@ interface Props { export class CreateResource extends React.Component { @observable currentTemplates: Map = new Map(); @observable error = ""; - @observable templates: GroupSelectOption[] = []; + @observable templates = observable.map(); constructor(props: Props) { super(props); makeObservable(this); } - componentDidMount() { - createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v)); - createResourceStore.watchUserTemplates(() => createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v))); - } - - updateGroupSelectOptions(templates: Record) { - this.templates = Object.entries(templates) - .map(([name, grouping]) => this.convertToGroup(name, grouping)); - } - - convertToGroup(group: string, items: string[]): GroupSelectOption { - const options = items.map(v => ({ label: path.parse(v).name, value: v })); - - return { label: group, options }; + // TODO + @computed get selectTemplateOptions(): SelectOption[] { + return []; } get tabId() { @@ -77,7 +63,7 @@ export class CreateResource extends React.Component { return createResourceStore.getData(this.tabId); } - get currentTemplate() { + get selectedTemplate() { return this.currentTemplates.get(this.tabId) ?? null; } @@ -89,12 +75,14 @@ export class CreateResource extends React.Component { this.error = error; }; + // FIXME onSelectTemplate = (item: SelectOption) => { - this.currentTemplates.set(this.tabId, item); - - fs.readFile(item.value, "utf8").then(value => { - createResourceStore.setData(this.tabId, value); - }); + console.log(`SELECTED TEMPLATE: ${this.tabId}`, item); + // this.currentTemplates.set(this.tabId, item); + // + // fs.readFile(item.value, "utf8").then(templateFileContent => { + // createResourceStore.setData(this.tabId, templateFileContent); + // }); }; create = async () => { @@ -137,13 +125,13 @@ export class CreateResource extends React.Component {