1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Replace setup-time asynchronicity with spinner when actually showing the data

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen 2022-01-31 11:25:36 +02:00 committed by Sebastian Malton
parent d42a546514
commit 175add91fc
3 changed files with 16 additions and 12 deletions

View File

@ -5,14 +5,14 @@
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
import { computed } from "mobx"; import { computed } from "mobx";
import type { GroupSelectOption, SelectOption } from "../../select"; import type { GroupSelectOption, SelectOption } from "../../select";
import lensCreateResourceTemplatesInjectable from "./lens-templates.injectable";
import userCreateResourceTemplatesInjectable from "./user-templates.injectable"; import userCreateResourceTemplatesInjectable from "./user-templates.injectable";
import lensCreateResourceTemplatesInjectable from "./lens-templates.injectable";
export type RawTemplates = [group: string, items: [file: string, contents: string][]]; export type RawTemplates = [group: string, items: [file: string, contents: string][]];
const createResourceTemplatesInjectable = getInjectable({ const createResourceTemplatesInjectable = getInjectable({
instantiate: (di) => { instantiate: async (di) => {
const lensResourceTemplates = di.inject(lensCreateResourceTemplatesInjectable); const lensResourceTemplates = await di.inject(lensCreateResourceTemplatesInjectable);
const userResourceTemplates = di.inject(userCreateResourceTemplatesInjectable); const userResourceTemplates = di.inject(userCreateResourceTemplatesInjectable);
return computed(() => { return computed(() => {
@ -27,6 +27,7 @@ const createResourceTemplatesInjectable = getInjectable({
}) as GroupSelectOption<SelectOption<string>>); }) as GroupSelectOption<SelectOption<string>>);
}); });
}, },
lifecycle: lifecycleEnum.singleton, lifecycle: lifecycleEnum.singleton,
}); });

View File

@ -5,10 +5,10 @@
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
import path from "path"; import path from "path";
import { hasCorrectExtension } from "./has-correct-extension"; import { hasCorrectExtension } from "./has-correct-extension";
import type { RawTemplates } from "./create-resource-templates.injectable";
import "../../../../common/vars"; import "../../../../common/vars";
import readFileInjectable from "../../../../common/fs/read-file.injectable"; import readFileInjectable from "../../../../common/fs/read-file.injectable";
import readDirInjectable from "../../../../common/fs/read-dir.injectable"; import readDirInjectable from "../../../../common/fs/read-dir.injectable";
import type { RawTemplates } from "./create-resource-templates.injectable";
interface Dependencies { interface Dependencies {
readDir: (dirPath: string) => Promise<string[]>; readDir: (dirPath: string) => Promise<string[]>;
@ -32,16 +32,16 @@ async function getTemplates({ readDir, readFile }: Dependencies) {
return templates; return templates;
} }
let lensTemplatePaths: RawTemplates;
const lensCreateResourceTemplatesInjectable = getInjectable({ const lensCreateResourceTemplatesInjectable = getInjectable({
setup: async (di) => { instantiate: async (di): Promise<RawTemplates> => {
lensTemplatePaths = ["lens", await getTemplates({ const templates = await getTemplates({
readFile: di.inject(readFileInjectable), readFile: di.inject(readFileInjectable),
readDir: di.inject(readDirInjectable), readDir: di.inject(readDirInjectable),
})]; });
return ["lens", templates];
}, },
instantiate: () => lensTemplatePaths,
lifecycle: lifecycleEnum.singleton, lifecycle: lifecycleEnum.singleton,
}); });

View File

@ -23,6 +23,7 @@ import { navigate } from "../../../navigation";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import createResourceTabStoreInjectable from "./store.injectable"; import createResourceTabStoreInjectable from "./store.injectable";
import createResourceTemplatesInjectable from "./create-resource-templates.injectable"; import createResourceTemplatesInjectable from "./create-resource-templates.injectable";
import { Spinner } from "../../spinner";
interface Props { interface Props {
tab: DockTab; tab: DockTab;
@ -143,9 +144,11 @@ class NonInjectedCreateResource extends React.Component<Props & Dependencies> {
} }
export const CreateResource = withInjectables<Dependencies, Props>(NonInjectedCreateResource, { export const CreateResource = withInjectables<Dependencies, Props>(NonInjectedCreateResource, {
getProps: (di, props) => ({ getPlaceholder: () => <Spinner center />,
getProps: async (di, props) => ({
createResourceTabStore: di.inject(createResourceTabStoreInjectable), createResourceTabStore: di.inject(createResourceTabStoreInjectable),
createResourceTemplates: di.inject(createResourceTemplatesInjectable), createResourceTemplates: await di.inject(createResourceTemplatesInjectable),
...props, ...props,
}), }),
}); });