From 9a6f39be76bb4d089c58c21216494e857929e0cb Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Tue, 19 Nov 2024 10:36:29 +0100 Subject: [PATCH] Modules/api: export constraints, filter by inventory --- pkgs/clan-cli/clan_cli/api/modules.py | 2 ++ pkgs/webview-ui/app/src/queries/index.ts | 15 +++++++++++++-- pkgs/webview-ui/app/src/routes/modules/list.tsx | 4 +++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/api/modules.py b/pkgs/clan-cli/clan_cli/api/modules.py index fd7e02415..746afc628 100644 --- a/pkgs/clan-cli/clan_cli/api/modules.py +++ b/pkgs/clan-cli/clan_cli/api/modules.py @@ -139,6 +139,7 @@ class ModuleInfo: categories: list[str] roles: list[str] | None features: list[str] = field(default_factory=list) + constraints: dict[str, Any] = field(default_factory=dict) def get_modules(base_path: str) -> dict[str, str]: @@ -208,6 +209,7 @@ def get_module_info( roles=get_roles(module_path), readme=readme_content, features=["inventory"] if has_inventory_feature(module_path) else [], + constraints=frontmatter.constraints, ) diff --git a/pkgs/webview-ui/app/src/queries/index.ts b/pkgs/webview-ui/app/src/queries/index.ts index 1c97e537b..9579a47d1 100644 --- a/pkgs/webview-ui/app/src/queries/index.ts +++ b/pkgs/webview-ui/app/src/queries/index.ts @@ -2,7 +2,13 @@ import { createQuery } from "@tanstack/solid-query"; import { callApi } from "../api"; import toast from "solid-toast"; -export const createModulesQuery = (uri: string | null) => +export interface ModulesFilter { + features: string[]; +} +export const createModulesQuery = ( + uri: string | null, + filter?: ModulesFilter, +) => createQuery(() => ({ queryKey: [uri, "list_modules"], placeholderData: [], @@ -17,7 +23,12 @@ export const createModulesQuery = (uri: string | null) => if (response.status === "error") { toast.error("Failed to fetch data"); } else { - return Object.entries(response.data); + if (!filter) { + return Object.entries(response.data); + } + return Object.entries(response.data).filter(([key, value]) => + filter.features.every((f) => (value.features || []).includes(f)), + ); } } return []; diff --git a/pkgs/webview-ui/app/src/routes/modules/list.tsx b/pkgs/webview-ui/app/src/routes/modules/list.tsx index e8f9773a0..fb10512df 100644 --- a/pkgs/webview-ui/app/src/routes/modules/list.tsx +++ b/pkgs/webview-ui/app/src/routes/modules/list.tsx @@ -28,7 +28,9 @@ const ModuleListItem = (props: { name: string; info: ModuleInfo }) => { }; export const ModuleList = () => { - const modulesQuery = createModulesQuery(activeURI()); + const modulesQuery = createModulesQuery(activeURI(), { + features: ["inventory"], + }); return ( Loading....