Service filters

This commit is contained in:
Eden Kirin
2024-01-28 21:11:30 +01:00
parent b4e0f1a7f8
commit 5a43ce875f
4 changed files with 39 additions and 18 deletions

View File

@ -25,7 +25,6 @@ export default function Dashboard() {
};
const loadEnv = (envTab: EnvTab) => {
console.log("loading env:", envTab);
setLoadingErr(null);
setLoadingEnv(true);

View File

@ -1,17 +1,41 @@
import React from "react";
import { Environment } from "types";
import TenantList from "components/dashboard/TenantList";
import TenantList, { tenantHasServices } from "components/dashboard/TenantList";
import Typography from "@mui/material/Typography";
import Box from "@mui/material/Box";
import Container from "@mui/material/Container";
import { useGlobalState } from "GlobalStateProvider";
function environmentHasTenants(env: Environment): boolean {
return env.tenants.filter((tenant) => tenantHasServices(tenant)).length > 0;
}
interface EnvironmentListProps {
environments: Environment[];
}
export default function EnvironmentList({ environments }: EnvironmentListProps) {
const envItems = environments.map((env) => {
let filteredEnvironments: Environment[] = [];
const { state } = useGlobalState();
// deep clone array
filteredEnvironments = JSON.parse(JSON.stringify(environments));
// filter services
filteredEnvironments.forEach((env) => {
env.tenants.forEach((tenant) => {
tenant.services = tenant.services.filter(
(service) =>
!state.searchFilter ||
service.name.toLocaleLowerCase().includes(state.searchFilter.toLocaleLowerCase())
);
});
});
// remove empty environments
filteredEnvironments = filteredEnvironments.filter((env) => environmentHasTenants(env));
const envItems = filteredEnvironments.map((env) => {
return (
<Box className="environment" key={env.name} sx={{ marginBottom: "2rem" }}>
<Container maxWidth={false} className="main-container">

View File

@ -2,21 +2,13 @@ import React from "react";
import { Service } from "types";
import Grid from "@mui/material/Unstable_Grid2";
import ServiceCard from "./ServiceCard";
import { useGlobalState } from "GlobalStateProvider";
interface ServiceListProps {
services: Service[];
}
export default function ServiceList({ services }: ServiceListProps) {
const { state } = useGlobalState();
const serviceItems = services
.filter(
(service) =>
!state.searchFilter || service.name.toLocaleLowerCase().includes(state.searchFilter.toLocaleLowerCase())
)
.map((service) => {
const serviceItems = services.map((service) => {
return (
<Grid key={service.name} sx={{ display: "flex" }}>
<ServiceCard service={service} />

View File

@ -8,8 +8,14 @@ interface TenantListProps {
tenants: Tenant[];
}
export function tenantHasServices(tenant: Tenant): boolean {
return tenant.services.length > 0;
}
export default function TenantList({ tenants }: TenantListProps) {
const tenantItems = tenants.map((tenant) => {
if (!tenantHasServices(tenant)) return null;
const tenantName = tenant.name !== "default" ? `Tenant: ${tenant.name}` : "Multitenant";
return (
<Box key={tenant.name} className="tenant">