From 9c28626f24cab8be4b219983dc66ba34d9cc5efc Mon Sep 17 00:00:00 2001 From: Smartsheet-JB-Brown Date: Wed, 16 Apr 2025 16:31:24 -0700 Subject: [PATCH] refactor: remove package manager state files --- .roo/package-lock.json | 62 ---------- .roo/package.json | 21 ---- .../state/PackageManagerViewStateManager.ts | 113 ------------------ .../PackageManagerViewStateManager.test.ts | 98 --------------- .../src/components/ui/select-dropdown.tsx | 3 +- 5 files changed, 1 insertion(+), 296 deletions(-) delete mode 100644 .roo/package-lock.json delete mode 100644 .roo/package.json delete mode 100644 webview-ui/src/components/package-manager/state/PackageManagerViewStateManager.ts delete mode 100644 webview-ui/src/components/package-manager/state/__tests__/PackageManagerViewStateManager.test.ts diff --git a/.roo/package-lock.json b/.roo/package-lock.json deleted file mode 100644 index 40b73f9bf9..0000000000 --- a/.roo/package-lock.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "roo-prepare", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "roo-prepare", - "version": "1.0.0", - "dependencies": { - "commander": "^11.1.0" - }, - "bin": { - "prepare": "dist/prepare-cli.js" - }, - "devDependencies": { - "@types/node": "^20.11.0", - "typescript": "^5.3.3" - } - }, - "node_modules/@types/node": { - "version": "20.17.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", - "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - } - } -} diff --git a/.roo/package.json b/.roo/package.json deleted file mode 100644 index a7aac6ec3e..0000000000 --- a/.roo/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "roo-iterate", - "version": "1.0.0", - "description": "Iteration task management system", - "private": true, - "bin": { - "iterate": "./dist/iterate-cli.js" - }, - "scripts": { - "build": "tsc", - "prepare": "npm run build", - "start": "node ./dist/iterate-cli.js" - }, - "dependencies": { - "commander": "^11.1.0" - }, - "devDependencies": { - "@types/node": "^20.11.0", - "typescript": "^5.3.3" - } -} diff --git a/webview-ui/src/components/package-manager/state/PackageManagerViewStateManager.ts b/webview-ui/src/components/package-manager/state/PackageManagerViewStateManager.ts deleted file mode 100644 index 360d168e78..0000000000 --- a/webview-ui/src/components/package-manager/state/PackageManagerViewStateManager.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { ComponentMetadata, PackageManagerItem } from "@/types/package-manager" - -interface Filters { - type: string - search: string - tags: string[] -} - -type Subcomponent = { - type: string - path: string - metadata?: ComponentMetadata - lastUpdated?: string -} - -export class PackageManagerViewStateManager { - private items: PackageManagerItem[] = [] - private sortBy: "name" | "lastUpdated" = "name" - private sortOrder: "asc" | "desc" = "asc" - private filters: Filters = { type: "", search: "", tags: [] } - - setItems(items: PackageManagerItem[]) { - this.items = items - } - - setSortBy(sortBy: "name" | "lastUpdated") { - this.sortBy = sortBy - } - - setSortOrder(sortOrder: "asc" | "desc") { - this.sortOrder = sortOrder - } - - setFilters(filters: Partial) { - this.filters = { ...this.filters, ...filters } - } - - private isParentItem(item: PackageManagerItem | Subcomponent): item is PackageManagerItem { - return "name" in item && "description" in item - } - - private isSubcomponent(item: PackageManagerItem | Subcomponent): item is Subcomponent { - return "metadata" in item - } - - private itemMatchesFilters(item: PackageManagerItem | Subcomponent): boolean { - // Helper function to check if text matches search term - const matchesSearch = (text: string) => { - if (!this.filters.search) return true - return text.toLowerCase().includes(this.filters.search.toLowerCase()) - } - - // Helper function to check if tags match - const matchesTags = (tags?: string[]) => { - if (!this.filters.tags.length) return true - return tags?.some((tag) => this.filters.tags.includes(tag)) ?? false - } - - // Helper function to check if type matches - const matchesType = (type: string) => { - if (!this.filters.type) return true - return type === this.filters.type - } - - // For parent items - if (this.isParentItem(item)) { - // For packages, check if any subcomponent matches the type filter - if (this.filters.type && item.type === "package" && item.items?.length) { - const hasMatchingSubcomponent = item.items.some((subItem) => subItem.type === this.filters.type) - if (hasMatchingSubcomponent) { - // If a subcomponent matches the type, only check other filters on the parent - return ( - (!this.filters.search || matchesSearch(item.name) || matchesSearch(item.description)) && - (!this.filters.tags.length || matchesTags(item.tags)) - ) - } - } - - // For non-packages or if no subcomponent matches, check all filters - return ( - matchesType(item.type) && - (!this.filters.search || matchesSearch(item.name) || matchesSearch(item.description)) && - (!this.filters.tags.length || matchesTags(item.tags)) - ) - } - - // For subcomponents - if (this.isSubcomponent(item)) { - if (!item.metadata) return false - return ( - matchesType(item.type) && - (!this.filters.search || - matchesSearch(item.metadata.name) || - matchesSearch(item.metadata.description)) && - (!this.filters.tags.length || matchesTags(item.metadata.tags)) - ) - } - - return false - } - - getFilteredAndSortedItems(): PackageManagerItem[] { - return [...this.items] - .filter((item) => this.itemMatchesFilters(item)) - .sort((a, b) => { - const aValue = this.sortBy === "name" ? a.name : a.lastUpdated || "" - const bValue = this.sortBy === "name" ? b.name : b.lastUpdated || "" - - const comparison = aValue.localeCompare(bValue) - return this.sortOrder === "asc" ? comparison : -comparison - }) - } -} diff --git a/webview-ui/src/components/package-manager/state/__tests__/PackageManagerViewStateManager.test.ts b/webview-ui/src/components/package-manager/state/__tests__/PackageManagerViewStateManager.test.ts deleted file mode 100644 index 12157ecea7..0000000000 --- a/webview-ui/src/components/package-manager/state/__tests__/PackageManagerViewStateManager.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { PackageManagerViewStateManager } from "../PackageManagerViewStateManager" -import { PackageManagerItem } from "@/types/package-manager" - -describe("PackageManagerViewStateManager", () => { - let stateManager: PackageManagerViewStateManager - - const mockItems: PackageManagerItem[] = [ - { - name: "B Component", - description: "Second component", - type: "mcp server", - version: "1.0.0", - lastUpdated: "2025-04-13T09:00:00-07:00", - url: "https://example.com/b", - repoUrl: "https://example.com", - path: "b", - items: [], - }, - { - name: "A Component", - description: "First component", - type: "mcp server", - version: "1.0.0", - lastUpdated: "2025-04-14T09:00:00-07:00", - url: "https://example.com/a", - repoUrl: "https://example.com", - path: "a", - items: [], - }, - ] - - beforeEach(() => { - stateManager = new PackageManagerViewStateManager() - stateManager.setItems(mockItems) - }) - - describe("sorting", () => { - it("should sort items by name in ascending order", () => { - stateManager.setSortBy("name") - stateManager.setSortOrder("asc") - - const sortedItems = stateManager.getFilteredAndSortedItems() - expect(sortedItems[0].name).toBe("A Component") - expect(sortedItems[1].name).toBe("B Component") - }) - - it("should sort items by name in descending order", () => { - stateManager.setSortBy("name") - stateManager.setSortOrder("desc") - - const sortedItems = stateManager.getFilteredAndSortedItems() - expect(sortedItems[0].name).toBe("B Component") - expect(sortedItems[1].name).toBe("A Component") - }) - - it("should sort items by lastUpdated in ascending order", () => { - stateManager.setSortBy("lastUpdated") - stateManager.setSortOrder("asc") - - const sortedItems = stateManager.getFilteredAndSortedItems() - expect(sortedItems[0].lastUpdated).toBe("2025-04-13T09:00:00-07:00") - expect(sortedItems[1].lastUpdated).toBe("2025-04-14T09:00:00-07:00") - }) - - it("should sort items by lastUpdated in descending order", () => { - stateManager.setSortBy("lastUpdated") - stateManager.setSortOrder("desc") - - const sortedItems = stateManager.getFilteredAndSortedItems() - expect(sortedItems[0].lastUpdated).toBe("2025-04-14T09:00:00-07:00") - expect(sortedItems[1].lastUpdated).toBe("2025-04-13T09:00:00-07:00") - }) - - it("should maintain sort order when items are updated", () => { - stateManager.setSortBy("name") - stateManager.setSortOrder("asc") - - const newItem: PackageManagerItem = { - name: "C Component", - description: "Third component", - type: "mcp server", - version: "1.0.0", - lastUpdated: "2025-04-15T09:00:00-07:00", - url: "https://example.com/c", - repoUrl: "https://example.com", - path: "c", - items: [], - } - - stateManager.setItems([...mockItems, newItem]) - - const sortedItems = stateManager.getFilteredAndSortedItems() - expect(sortedItems[0].name).toBe("A Component") - expect(sortedItems[1].name).toBe("B Component") - expect(sortedItems[2].name).toBe("C Component") - }) - }) -}) diff --git a/webview-ui/src/components/ui/select-dropdown.tsx b/webview-ui/src/components/ui/select-dropdown.tsx index 1641ec1ca7..8b2ed01a78 100644 --- a/webview-ui/src/components/ui/select-dropdown.tsx +++ b/webview-ui/src/components/ui/select-dropdown.tsx @@ -210,8 +210,7 @@ export const SelectDropdown = React.memo(
{/* Search input */}
- setSearchValue(e.target.value)}