diff --git a/apps/heureka/package.json b/apps/heureka/package.json index dac0ceb50e..b794d59e9c 100644 --- a/apps/heureka/package.json +++ b/apps/heureka/package.json @@ -33,7 +33,6 @@ "@cloudoperators/juno-url-state-provider": "workspace:*", "@tanstack/react-query": "5.89.0", "@tanstack/react-router": "1.133.22", - "lodash": "4.17.21", "react": "19.1.0", "react-dom": "19.1.0" }, @@ -49,7 +48,6 @@ "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@testing-library/user-event": "14.6.1", - "@types/lodash": "4.17.19", "@types/node": "24.3.2", "@types/react": "19.1.8", "@types/react-dom": "19.1.6", diff --git a/apps/heureka/src/components/Services/utils.ts b/apps/heureka/src/components/Services/utils.ts index a93489f83d..3f8e0b53d8 100644 --- a/apps/heureka/src/components/Services/utils.ts +++ b/apps/heureka/src/components/Services/utils.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { isEmpty, isNil, map, omit } from "lodash" +import { isEmpty, isNil, omit } from "../../utils" import { ApolloError } from "@apollo/client" import { Edge, @@ -298,9 +298,9 @@ export const getFiltersForUrl = (filterSettings: FilterSettings): Record - isEmpty(data) || isEmpty(data.ServiceFilterValues) + isEmpty(data) || isEmpty(data?.ServiceFilterValues) ? [] - : map(omit(data.ServiceFilterValues, ["__typename"]), (filter) => ({ + : Object.values(omit(data!.ServiceFilterValues!, ["__typename"])).map((filter) => ({ displayName: filter?.displayName || "", filterName: filter?.filterName || "", values: filter?.values?.filter((value) => value !== null) || [], diff --git a/apps/heureka/src/components/common/Filters/FilterSelect.tsx b/apps/heureka/src/components/common/Filters/FilterSelect.tsx index 3f3d574050..a0425c3861 100644 --- a/apps/heureka/src/components/common/Filters/FilterSelect.tsx +++ b/apps/heureka/src/components/common/Filters/FilterSelect.tsx @@ -4,7 +4,7 @@ */ import React, { useCallback, useState } from "react" -import { isEmpty } from "lodash" +import { isEmpty } from "../../../utils" import { InputGroup, ComboBox, ComboBoxOption, SelectOption, Select, Stack } from "@cloudoperators/juno-ui-components" import { Filter, SelectedFilter } from "./types" diff --git a/apps/heureka/src/utils.ts b/apps/heureka/src/utils.ts index 3bc6521de2..10ae355c9d 100644 --- a/apps/heureka/src/utils.ts +++ b/apps/heureka/src/utils.ts @@ -59,3 +59,38 @@ export const useTextOverflow = (text: string | null) => { return { needsExpansion, textRef } } + +/** + * Utility functions to replace lodash dependencies + */ + +// Replace _.isEmpty() +export const isEmpty = (value: any): boolean => { + if (value == null) return true + if (typeof value === "string" || Array.isArray(value)) return value.length === 0 + if (typeof value === "object") return Object.keys(value).length === 0 + return false +} + +// Replace _.isNil() +export const isNil = (value: any): value is null | undefined => { + return value == null +} + +// Replace _.omit() +export const omit = , K extends keyof T>(obj: T, keys: K[]): Omit => { + const result = { ...obj } + keys.forEach((key) => { + delete result[key] + }) + return result +} + +// Replace _.map() for objects - transforms object values +export const mapObject = (obj: Record, iteratee: (value: T, key: string) => U): Record => { + const result: Record = {} + Object.entries(obj).forEach(([key, value]) => { + result[key] = iteratee(value, key) + }) + return result +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffc4d18fae..9bda9c78d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -415,9 +415,6 @@ importers: '@tanstack/react-router': specifier: 1.133.22 version: 1.133.22(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - lodash: - specifier: 4.17.21 - version: 4.17.21 react: specifier: 19.1.0 version: 19.1.0 @@ -458,9 +455,6 @@ importers: '@testing-library/user-event': specifier: 14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) - '@types/lodash': - specifier: 4.17.19 - version: 4.17.19 '@types/node': specifier: 24.3.2 version: 24.3.2