feat: support search at n level depth

This commit is contained in:
jamesgeorge007
2024-02-26 18:33:25 +05:30
parent 5b3986a53f
commit 240b131e06
2 changed files with 62 additions and 37 deletions

View File

@@ -623,8 +623,8 @@ const treeAdapter = markRaw(
) )
) )
const searchTreeAdapter = new WorkspaceRESTSearchCollectionTreeAdapter( const searchTreeAdapter = markRaw(
filteredCollections new WorkspaceRESTSearchCollectionTreeAdapter(filteredCollections)
) )
const isSelected = ({ const isSelected = ({

View File

@@ -961,6 +961,45 @@ export class PersonalWorkspaceProviderService
): Promise<E.Either<never, HandleRef<RESTSearchResultsView>>> { ): Promise<E.Either<never, HandleRef<RESTSearchResultsView>>> {
const results = ref<HoppCollection[]>([]) const results = ref<HoppCollection[]>([])
const isMatch = (inputText: string, textToMatch: string) =>
inputText.toLowerCase().includes(textToMatch.toLowerCase())
// Recursive function to filter requests and folders
const filterItems = (items: HoppCollection[], searchQuery: string) => {
const filteredItems = []
for (const item of items) {
if (isMatch(item.name, searchQuery)) {
filteredItems.push(item)
}
if (item.requests) {
const filteredRequests = item.requests.filter((request) =>
isMatch(request.name, searchQuery)
)
if (filteredRequests.length > 0) {
const filteredItem = { ...item, requests: filteredRequests }
filteredItems.push(filteredItem)
}
}
if (item.folders) {
const filteredFolders: HoppCollection[] = filterItems(
item.folders,
searchQuery
)
if (filteredFolders.length > 0) {
const filteredItem = { ...item, folders: filteredFolders }
filteredItems.push(filteredItem)
}
}
}
return filteredItems
}
const scopeHandle = effectScope() const scopeHandle = effectScope()
scopeHandle.run(() => { scopeHandle.run(() => {
@@ -972,43 +1011,29 @@ export class PersonalWorkspaceProviderService
return return
} }
const filterText = newSearchQuery.toLowerCase() const filteredCollections = this.restCollectionState.value.state
const filteredCollections = [] .map((collection) => {
const filteredCollection = { ...collection }
const isMatch = (text: string) => filteredCollection.requests = collection.requests.filter(
text.toLowerCase().includes(filterText) (request) => isMatch(request.name, newSearchQuery)
)
for (const collection of this.restCollectionState.value.state) { filteredCollection.folders = filterItems(
const filteredRequests = [] collection.folders,
const filteredFolders = [] newSearchQuery
for (const request of collection.requests) { )
if (isMatch(request.name)) filteredRequests.push(request)
}
for (const folder of collection.folders) {
if (isMatch(folder.name)) filteredFolders.push(folder)
const filteredFolderRequests = []
for (const request of folder.requests) {
if (isMatch(request.name)) filteredFolderRequests.push(request)
}
if (filteredFolderRequests.length > 0) {
const filteredFolder = Object.assign({}, folder)
filteredFolder.requests = filteredFolderRequests
filteredFolders.push(filteredFolder)
}
}
if ( return filteredCollection
filteredRequests.length + filteredFolders.length > 0 || })
isMatch(collection.name) .filter(
) { (collection) =>
const filteredCollection = Object.assign({}, collection) collection.requests.length > 0 ||
filteredCollection.requests = filteredRequests collection.folders.length > 0 ||
filteredCollection.folders = filteredFolders isMatch(collection.name, newSearchQuery)
filteredCollections.push(filteredCollection) )
}
results.value = filteredCollections results.value = filteredCollections
}
}, },
{ immediate: true } { immediate: true }
) )
@@ -1032,7 +1057,7 @@ export class PersonalWorkspaceProviderService
} }
} }
return { return markRaw({
type: "ok" as const, type: "ok" as const,
data: { data: {
providerID: this.providerID, providerID: this.providerID,
@@ -1043,7 +1068,7 @@ export class PersonalWorkspaceProviderService
results, results,
onSessionEnd, onSessionEnd,
}, },
} })
}) })
) )
) )