mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add failure to load display on ItemListLayout
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
f0707dd873
commit
83e6fce18e
@ -14,8 +14,18 @@ export interface IChartVersion {
|
|||||||
export class HelmChartStore extends ItemStore<HelmChart> {
|
export class HelmChartStore extends ItemStore<HelmChart> {
|
||||||
@observable versions = observable.map<string, IChartVersion[]>();
|
@observable versions = observable.map<string, IChartVersion[]>();
|
||||||
|
|
||||||
loadAll() {
|
async loadAll() {
|
||||||
return this.loadItems(() => helmChartsApi.list());
|
try {
|
||||||
|
const res = await this.loadItems(() => helmChartsApi.list());
|
||||||
|
|
||||||
|
this.failedLoading = false;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
} catch (error) {
|
||||||
|
this.failedLoading = true;
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getByName(name: string, repo: string) {
|
getByName(name: string, repo: string) {
|
||||||
|
|||||||
@ -66,7 +66,9 @@ export class ReleaseStore extends ItemStore<HelmRelease> {
|
|||||||
|
|
||||||
this.items.replace(this.sortItems(items));
|
this.items.replace(this.sortItems(items));
|
||||||
this.isLoaded = true;
|
this.isLoaded = true;
|
||||||
|
this.failedLoading = false;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
this.failedLoading = true;
|
||||||
console.error("Loading Helm Chart releases has failed", error);
|
console.error("Loading Helm Chart releases has failed", error);
|
||||||
|
|
||||||
if (error.error) {
|
if (error.error) {
|
||||||
|
|||||||
@ -65,8 +65,18 @@ export class WorkspaceClusterStore extends ItemStore<ClusterItem> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
loadAll() {
|
async loadAll() {
|
||||||
return this.loadItems(() => this.clusters);
|
try {
|
||||||
|
const res = await this.loadItems(() => this.clusters);
|
||||||
|
|
||||||
|
this.failedLoading = false;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
} catch (error) {
|
||||||
|
this.failedLoading = true;
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async remove(clusterItem: ClusterItem) {
|
async remove(clusterItem: ClusterItem) {
|
||||||
|
|||||||
@ -172,6 +172,10 @@ export class ItemListLayout extends React.Component<ItemListLayoutProps> {
|
|||||||
return this.props.isReady ?? this.props.store.isLoaded;
|
return this.props.isReady ?? this.props.store.isLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@computed get failedToLoad() {
|
||||||
|
return this.props.store.failedLoading;
|
||||||
|
}
|
||||||
|
|
||||||
@computed get filters() {
|
@computed get filters() {
|
||||||
let { activeFilters } = pageFilters;
|
let { activeFilters } = pageFilters;
|
||||||
const { isSearchable, searchFilters } = this.props;
|
const { isSearchable, searchFilters } = this.props;
|
||||||
@ -293,6 +297,10 @@ export class ItemListLayout extends React.Component<ItemListLayoutProps> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderNoItems() {
|
renderNoItems() {
|
||||||
|
if (this.failedToLoad) {
|
||||||
|
return <NoItems>Failed to load items.</NoItems>;
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.isReady) {
|
if (!this.isReady) {
|
||||||
return <Spinner center />;
|
return <Spinner center />;
|
||||||
}
|
}
|
||||||
@ -424,12 +432,13 @@ export class ItemListLayout extends React.Component<ItemListLayoutProps> {
|
|||||||
|
|
||||||
renderList() {
|
renderList() {
|
||||||
const {
|
const {
|
||||||
store, hasDetailsView, addRemoveButtons = {}, virtual, sortingCallbacks, detailsItem,
|
store, hasDetailsView, addRemoveButtons = {}, virtual, sortingCallbacks,
|
||||||
tableProps = {}, tableId
|
detailsItem, className, tableProps = {}, tableId,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const { removeItemsDialog, items } = this;
|
const { removeItemsDialog, items } = this;
|
||||||
const { selectedItems } = store;
|
const { selectedItems } = store;
|
||||||
const selectedItemId = detailsItem && detailsItem.getId();
|
const selectedItemId = detailsItem && detailsItem.getId();
|
||||||
|
const classNames = cssNames(className, "box", "grow", themeStore.activeTheme.type);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="items box grow flex column">
|
<div className="items box grow flex column">
|
||||||
@ -442,10 +451,8 @@ export class ItemListLayout extends React.Component<ItemListLayoutProps> {
|
|||||||
items={items}
|
items={items}
|
||||||
selectedItemId={selectedItemId}
|
selectedItemId={selectedItemId}
|
||||||
noItems={this.renderNoItems()}
|
noItems={this.renderNoItems()}
|
||||||
{...({
|
className={classNames}
|
||||||
...tableProps,
|
{...tableProps}
|
||||||
className: cssNames("box grow", tableProps.className, themeStore.activeTheme.type),
|
|
||||||
})}
|
|
||||||
>
|
>
|
||||||
{this.renderTableHeader()}
|
{this.renderTableHeader()}
|
||||||
{this.renderItems()}
|
{this.renderItems()}
|
||||||
|
|||||||
@ -13,6 +13,7 @@ export abstract class ItemStore<T extends ItemObject = ItemObject> {
|
|||||||
|
|
||||||
protected defaultSorting = (item: T) => item.getName();
|
protected defaultSorting = (item: T) => item.getName();
|
||||||
|
|
||||||
|
@observable failedLoading = false;
|
||||||
@observable isLoading = false;
|
@observable isLoading = false;
|
||||||
@observable isLoaded = false;
|
@observable isLoaded = false;
|
||||||
@observable items = observable.array<T>([], { deep: false });
|
@observable items = observable.array<T>([], { deep: false });
|
||||||
|
|||||||
@ -146,18 +146,20 @@ export abstract class KubeObjectStore<T extends KubeObject = any> extends ItemSt
|
|||||||
|
|
||||||
const items = await this.loadItems({ namespaces, api: this.api });
|
const items = await this.loadItems({ namespaces, api: this.api });
|
||||||
|
|
||||||
this.isLoaded = true;
|
|
||||||
|
|
||||||
if (merge) {
|
if (merge) {
|
||||||
this.mergeItems(items, { replace: false });
|
this.mergeItems(items, { replace: false });
|
||||||
} else {
|
} else {
|
||||||
this.mergeItems(items, { replace: true });
|
this.mergeItems(items, { replace: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.isLoaded = true;
|
||||||
|
this.failedLoading = false;
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Loading store items failed", { error, store: this });
|
console.error("Loading store items failed", { error, store: this });
|
||||||
this.resetOnError(error);
|
this.resetOnError(error);
|
||||||
|
this.failedLoading = true;
|
||||||
} finally {
|
} finally {
|
||||||
this.isLoading = false;
|
this.isLoading = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user