feat(workspaces): added GQL fitlering capabilities to activeUser workspaces
* added filtering mechanism for getWorkspaces completed or not completed workspaces * added filtering mechanism to filter workspaces of active user by string hitting on slug or name
This commit is contained in:
committed by
GitHub
parent
3d4c4395f4
commit
fa5f2eb1f5
@@ -1,11 +1,10 @@
|
||||
import { FindEmailsByUserId } from '@/modules/core/domain/userEmails/operations'
|
||||
import {
|
||||
GetUserDiscoverableWorkspaces,
|
||||
GetWorkspace,
|
||||
GetWorkspaceRolesForUser
|
||||
GetWorkspaceRolesForUser,
|
||||
GetWorkspaces
|
||||
} from '@/modules/workspaces/domain/operations'
|
||||
import { Workspace } from '@/modules/workspacesCore/domain/types'
|
||||
import { chunk, isNull } from 'lodash'
|
||||
|
||||
type GetDiscoverableWorkspaceForUserArgs = {
|
||||
userId: string
|
||||
@@ -38,32 +37,29 @@ export const getDiscoverableWorkspacesForUserFactory =
|
||||
|
||||
type GetWorkspacesForUserArgs = {
|
||||
userId: string
|
||||
completed?: boolean
|
||||
search?: string
|
||||
}
|
||||
|
||||
export const getWorkspacesForUserFactory =
|
||||
({
|
||||
getWorkspace,
|
||||
getWorkspaces,
|
||||
getWorkspaceRolesForUser
|
||||
}: {
|
||||
getWorkspace: GetWorkspace
|
||||
getWorkspaces: GetWorkspaces
|
||||
getWorkspaceRolesForUser: GetWorkspaceRolesForUser
|
||||
}) =>
|
||||
async ({ userId }: GetWorkspacesForUserArgs): Promise<Workspace[]> => {
|
||||
async ({
|
||||
userId,
|
||||
completed,
|
||||
search
|
||||
}: GetWorkspacesForUserArgs): Promise<Workspace[]> => {
|
||||
const workspaceRoles = await getWorkspaceRolesForUser({ userId })
|
||||
|
||||
const workspaces: Workspace[] = []
|
||||
|
||||
for (const workspaceRoleBatch of chunk(workspaceRoles, 20)) {
|
||||
// TODO: Use `getWorkspaces`, which I saw Fabians already wrote in another PR
|
||||
const workspacesBatch = await Promise.all(
|
||||
workspaceRoleBatch.map(({ workspaceId }) => getWorkspace({ workspaceId }))
|
||||
)
|
||||
workspaces.push(
|
||||
...workspacesBatch.filter(
|
||||
(workspace): workspace is Workspace => !isNull(workspace)
|
||||
)
|
||||
)
|
||||
}
|
||||
const workspaceIds = workspaceRoles.map((workspace) => {
|
||||
return workspace.workspaceId
|
||||
})
|
||||
const workspaces = await getWorkspaces({ workspaceIds, completed, search })
|
||||
|
||||
return workspaces
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user