diff --git a/src/renderer/components/dock/create-resource.store.ts b/src/renderer/components/dock/create-resource.store.ts index 13fb242678..be66d9743e 100644 --- a/src/renderer/components/dock/create-resource.store.ts +++ b/src/renderer/components/dock/create-resource.store.ts @@ -31,17 +31,21 @@ export class CreateResourceStore extends DockTabStore { getTemplates(templatesPath: string, defaultGroup: string) { const templates = filehound.create().path(templatesPath).ext("yaml").depth(1).findSync(); - return templates ? (groupBy(templates,(v:string) => path.relative(templatesPath,v).split(path.sep).length>1 - ? path.parse(path.relative(templatesPath,v)).dir - : defaultGroup)) : {}; + 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() { return {...this.getTemplates(this.userTemplatesFolder, "ungrouped"),...this.lensTemplates}; } - async watchUserTemplates(calback: ()=> void){ - calback(); + async watchUserTemplates(callback: ()=> void){ watch(this.userTemplatesFolder, { depth: 1, ignoreInitial: true, @@ -49,7 +53,7 @@ export class CreateResourceStore extends DockTabStore { stabilityThreshold: 500 } }).on("all", () => { - calback(); + callback(); }); } } diff --git a/src/renderer/components/dock/create-resource.tsx b/src/renderer/components/dock/create-resource.tsx index 44210c2c7f..873c5dcdca 100644 --- a/src/renderer/components/dock/create-resource.tsx +++ b/src/renderer/components/dock/create-resource.tsx @@ -26,19 +26,20 @@ export class CreateResource extends React.Component { @observable error = ""; @observable templates:GroupSelectOption[] = []; - async componentDidMount(){ - createResourceStore.watchUserTemplates(()=> { - this.templates = []; - createResourceStore.getMergedTemplates().then( - templatesDictionary => { - Object.keys(templatesDictionary).forEach(group => { - this.templates.push(this.convertEntryToGroup(group, templatesDictionary[group])); - }); - }); + componentDidMount() { + createResourceStore.getMergedTemplates().then(v => this.updateGroupSelecOptions(v)); + createResourceStore.watchUserTemplates(() => createResourceStore.getMergedTemplates().then(v => this.updateGroupSelecOptions(v))); + } + + updateGroupSelecOptions(templates :{[x:string]: string[]}) { + this.templates = []; + + Object.keys(templates).forEach(group => { + this.templates.push(this.convertToGroup(group, templates[group])); }); } - convertEntryToGroup(group:string, items:string[]):GroupSelectOption { + convertToGroup(group:string, items:string[]):GroupSelectOption { const options = items.map(v => ({label: path.parse(v).name, value: v})); return {label: group, options};