feat: support search at n level depth
This commit is contained in:
@@ -623,8 +623,8 @@ const treeAdapter = markRaw(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
const searchTreeAdapter = new WorkspaceRESTSearchCollectionTreeAdapter(
|
const searchTreeAdapter = markRaw(
|
||||||
filteredCollections
|
new WorkspaceRESTSearchCollectionTreeAdapter(filteredCollections)
|
||||||
)
|
)
|
||||||
|
|
||||||
const isSelected = ({
|
const isSelected = ({
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user