diff --git a/src/common/utils/sort-function.ts b/src/common/utils/sort-function.ts new file mode 100644 index 0000000000..4eeab57746 --- /dev/null +++ b/src/common/utils/sort-function.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +/** + * Get an ordering function based on the function getter + */ +export function byValue(getOrderValue: (src: T) => number): (left: T, right: T) => number { + return (left, right) => { + const leftValue = getOrderValue(left); + const rightValue = getOrderValue(right); + + return leftValue - rightValue; + }; +} diff --git a/src/renderer/components/kube-object-details/current-kube-object-in-details.injectable.ts b/src/renderer/components/kube-object-details/current-kube-object-in-details.injectable.ts index 72f534d4ae..a68e1672b0 100644 --- a/src/renderer/components/kube-object-details/current-kube-object-in-details.injectable.ts +++ b/src/renderer/components/kube-object-details/current-kube-object-in-details.injectable.ts @@ -20,21 +20,23 @@ const currentKubeObjectInDetailsInjectable = getInjectable({ const urlParam = di.inject(kubeDetailsUrlParamInjectable); const apiManager = di.inject(apiManagerInjectable); - return asyncComputed(async (): Promise => { - const path = urlParam.get(); - const store = apiManager.getStore(path); + return asyncComputed({ + getValueFromObservedPromise: async (): Promise => { + const path = urlParam.get(); + const store = apiManager.getStore(path); - if (!store) { - return undefined; - } + if (!store) { + return undefined; + } - try { - const object = await store.loadFromPath(path); + try { + const object = await store.loadFromPath(path); - return { object }; - } catch (error) { - return { error: String(error) }; - } + return { object }; + } catch (error) { + return { error: String(error) }; + } + }, }); }, }); diff --git a/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts b/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts index 1fa11b6826..4d312eb30b 100644 --- a/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts +++ b/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts @@ -6,9 +6,8 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; -import { filter, map, sortBy } from "lodash/fp"; -import { pipeline } from "@ogre-tools/fp"; import { kubeObjectDetailItemInjectionToken } from "./kube-object-detail-item-injection-token"; +import { byValue } from "../../../../common/utils/sort-function"; const kubeObjectDetailItemsInjectable = getInjectable({ id: "kube-object-detail-items", @@ -17,14 +16,12 @@ const kubeObjectDetailItemsInjectable = getInjectable({ const computedInjectMany = di.inject(computedInjectManyInjectable); const items = computedInjectMany(kubeObjectDetailItemInjectionToken); - return computed(() => { - return pipeline( - items.get(), - filter((item) => item.enabled.get()), - sortBy((item) => item.orderNumber), - map((item) => item.Component), - ); - }); + return computed(() => ( + items.get() + .filter(item => item.enabled.get()) + .sort(byValue(item => item.orderNumber)) + .map(item => item.Component) + )); }, });