fix(automate): improve search for test automations (#4515)

This commit is contained in:
Chuck Driesler
2025-04-22 14:33:46 +01:00
committed by GitHub
parent 14310faa6d
commit 3e0f609bb2
13 changed files with 44 additions and 208 deletions
@@ -68,6 +68,7 @@
v-model:selected-function="selectedFunction"
:preselected-function="validatedPreselectedFunction"
:page-size="2"
:is-test-automation="true"
:workspace-id="workspaceId"
/>
</template>
@@ -45,11 +45,11 @@ import { usePaginatedQuery } from '~/lib/common/composables/graphql'
const searchQuery = graphql(`
query AutomationCreateDialogFunctionsSearch(
$workspaceId: String!
$search: String
$filter: AutomateFunctionsFilter
$cursor: String = null
) {
workspace(id: $workspaceId) {
automateFunctions(limit: 20, filter: { search: $search }, cursor: $cursor) {
automateFunctions(limit: 20, cursor: $cursor, filter: $filter) {
cursor
totalCount
items {
@@ -68,10 +68,12 @@ const props = withDefaults(
pageSize?: Optional<number>
showLabel?: Optional<boolean>
showRequired?: Optional<boolean>
isTestAutomation?: Optional<boolean>
}>(),
{
showLabel: true,
showRequired: true
showRequired: true,
isTestAutomation: false
}
)
const selectedFunction = defineModel<Optional<CreateAutomationSelectableFunction>>(
@@ -91,10 +93,14 @@ const {
query: searchQuery,
baseVariables: computed(() => ({
workspaceId: props.workspaceId ?? '',
search: search.value?.length ? search.value : '',
cursor: null as Nullable<string>
cursor: null as Nullable<string>,
filter: {
search: search.value?.length ? search.value : undefined,
includeFeatured: props.isTestAutomation ? false : true,
requireRelease: props.isTestAutomation ? false : true
}
})),
resolveKey: (vars) => [vars.search || ''],
resolveKey: (vars) => [vars.filter.search || ''],
resolveCurrentResult: (res) => res?.workspace?.automateFunctions,
resolveNextPageVariables: (baseVars, cursor) => ({
...baseVars,
@@ -17,7 +17,6 @@
</div>
</template>
<script setup lang="ts">
import { graphql } from '~/lib/common/generated/gql'
import type {
AutomateAutomationCreateDialog_AutomateFunctionFragment,
AutomationsFunctionsCard_AutomateFunctionFragment
@@ -29,20 +28,6 @@ defineEmits<{
clearSearch: []
}>()
graphql(`
fragment AutomateFunctionsPageItems_Query on Query {
automateFunctions(limit: 6, filter: { search: $search }, cursor: $cursor) {
totalCount
items {
id
...AutomationsFunctionsCard_AutomateFunction
...AutomateAutomationCreateDialog_AutomateFunction
}
cursor
}
}
`)
const props = defineProps<{
functions?: (AutomationsFunctionsCard_AutomateFunctionFragment &
AutomateAutomationCreateDialog_AutomateFunctionFragment)[]
@@ -42,22 +42,3 @@ export const projectAutomationCreationPublicKeysQuery = graphql(`
}
}
`)
export const automateFunctionsPagePaginationQuery = graphql(`
query AutomateFunctionsPagePagination($search: String, $cursor: String) {
...AutomateFunctionsPageItems_Query
}
`)
export const activeUserFunctionsQuery = graphql(`
query ActiveUserFunctions {
activeUser {
automateFunctions(limit: 2) {
items {
id
...AutomationsFunctionsCard_AutomateFunction
}
}
}
}
`)
@@ -23,7 +23,7 @@ type Documents = {
"\n fragment AuthThirdPartyLoginButtonOIDC_ServerInfo on ServerInfo {\n authStrategies {\n id\n name\n }\n }\n": typeof types.AuthThirdPartyLoginButtonOidc_ServerInfoFragmentDoc,
"\n fragment AutomateAutomationCreateDialog_AutomateFunction on AutomateFunction {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunction\n }\n": typeof types.AutomateAutomationCreateDialog_AutomateFunctionFragmentDoc,
"\n fragment AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunction on AutomateFunction {\n id\n releases(limit: 1) {\n items {\n id\n inputSchema\n }\n }\n }\n": typeof types.AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunctionFragmentDoc,
"\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $search: String\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, filter: { search: $search }, cursor: $cursor) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n": typeof types.AutomationCreateDialogFunctionsSearchDocument,
"\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $filter: AutomateFunctionsFilter\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, cursor: $cursor, filter: $filter) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n": typeof types.AutomationCreateDialogFunctionsSearchDocument,
"\n fragment AutomationsFunctionsCard_AutomateFunction on AutomateFunction {\n id\n name\n isFeatured\n description\n logo\n repo {\n id\n url\n owner\n name\n }\n }\n": typeof types.AutomationsFunctionsCard_AutomateFunctionFragmentDoc,
"\n fragment AutomateFunctionCreateDialog_Workspace on Workspace {\n id\n name\n slug\n }\n": typeof types.AutomateFunctionCreateDialog_WorkspaceFragmentDoc,
"\n fragment AutomateFunctionEditDialog_Workspace on Workspace {\n id\n name\n }\n": typeof types.AutomateFunctionEditDialog_WorkspaceFragmentDoc,
@@ -33,7 +33,6 @@ type Documents = {
"\n fragment AutomateFunctionPageInfo_AutomateFunction on AutomateFunction {\n id\n repo {\n id\n url\n owner\n name\n }\n description\n releases(limit: 1) {\n items {\n id\n inputSchema\n createdAt\n commitId\n ...AutomateFunctionPageParametersDialog_AutomateFunctionRelease\n }\n }\n }\n": typeof types.AutomateFunctionPageInfo_AutomateFunctionFragmentDoc,
"\n fragment AutomateFunctionPageParametersDialog_AutomateFunctionRelease on AutomateFunctionRelease {\n id\n inputSchema\n }\n": typeof types.AutomateFunctionPageParametersDialog_AutomateFunctionReleaseFragmentDoc,
"\n fragment AutomateFunctionsPageHeader_Query on Query {\n activeUser {\n id\n role\n automateInfo {\n hasAutomateGithubApp\n availableGithubOrgs\n }\n }\n serverInfo {\n automate {\n availableFunctionTemplates {\n ...AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplate\n }\n }\n }\n }\n": typeof types.AutomateFunctionsPageHeader_QueryFragmentDoc,
"\n fragment AutomateFunctionsPageItems_Query on Query {\n automateFunctions(limit: 6, filter: { search: $search }, cursor: $cursor) {\n totalCount\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n cursor\n }\n }\n": typeof types.AutomateFunctionsPageItems_QueryFragmentDoc,
"\n fragment AutomateRunsTriggerStatus_TriggeredAutomationsStatus on TriggeredAutomationsStatus {\n id\n ...TriggeredAutomationsStatusSummary\n ...AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus\n }\n": typeof types.AutomateRunsTriggerStatus_TriggeredAutomationsStatusFragmentDoc,
"\n fragment AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus on TriggeredAutomationsStatus {\n id\n automationRuns {\n id\n ...AutomateRunsTriggerStatusDialogRunsRows_AutomateRun\n }\n }\n": typeof types.AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatusFragmentDoc,
"\n fragment AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRun on AutomateFunctionRun {\n id\n results\n status\n statusMessage\n contextView\n function {\n id\n logo\n name\n }\n createdAt\n updatedAt\n }\n": typeof types.AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRunFragmentDoc,
@@ -172,8 +171,6 @@ type Documents = {
"\n query SearchAutomateFunctionReleases(\n $functionId: ID!\n $cursor: String\n $limit: Int\n $filter: AutomateFunctionReleasesFilter\n ) {\n automateFunction(id: $functionId) {\n id\n releases(cursor: $cursor, limit: $limit, filter: $filter) {\n cursor\n totalCount\n items {\n ...SearchAutomateFunctionReleaseItem\n }\n }\n }\n }\n": typeof types.SearchAutomateFunctionReleasesDocument,
"\n query FunctionAccessCheck($id: ID!) {\n automateFunction(id: $id) {\n id\n }\n }\n": typeof types.FunctionAccessCheckDocument,
"\n query ProjectAutomationCreationPublicKeys(\n $projectId: String!\n $automationId: String!\n ) {\n project(id: $projectId) {\n id\n automation(id: $automationId) {\n id\n creationPublicKeys\n }\n }\n }\n": typeof types.ProjectAutomationCreationPublicKeysDocument,
"\n query AutomateFunctionsPagePagination($search: String, $cursor: String) {\n ...AutomateFunctionsPageItems_Query\n }\n": typeof types.AutomateFunctionsPagePaginationDocument,
"\n query ActiveUserFunctions {\n activeUser {\n automateFunctions(limit: 2) {\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n }\n }\n }\n }\n": typeof types.ActiveUserFunctionsDocument,
"\n fragment BillingActions_Workspace on Workspace {\n id\n name\n invitedTeam(filter: $invitesFilter) {\n id\n }\n plan {\n name\n status\n }\n subscription {\n billingInterval\n }\n team {\n totalCount\n }\n defaultRegion {\n name\n }\n }\n": typeof types.BillingActions_WorkspaceFragmentDoc,
"\n fragment PricesPrice on Price {\n amount\n currencySymbol\n currency\n }\n": typeof types.PricesPriceFragmentDoc,
"\n fragment PricesWorkspacePlanPrice on WorkspacePlanPrice {\n monthly {\n ...PricesPrice\n }\n yearly {\n ...PricesPrice\n }\n }\n": typeof types.PricesWorkspacePlanPriceFragmentDoc,
@@ -439,7 +436,7 @@ const documents: Documents = {
"\n fragment AuthThirdPartyLoginButtonOIDC_ServerInfo on ServerInfo {\n authStrategies {\n id\n name\n }\n }\n": types.AuthThirdPartyLoginButtonOidc_ServerInfoFragmentDoc,
"\n fragment AutomateAutomationCreateDialog_AutomateFunction on AutomateFunction {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunction\n }\n": types.AutomateAutomationCreateDialog_AutomateFunctionFragmentDoc,
"\n fragment AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunction on AutomateFunction {\n id\n releases(limit: 1) {\n items {\n id\n inputSchema\n }\n }\n }\n": types.AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunctionFragmentDoc,
"\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $search: String\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, filter: { search: $search }, cursor: $cursor) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n": types.AutomationCreateDialogFunctionsSearchDocument,
"\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $filter: AutomateFunctionsFilter\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, cursor: $cursor, filter: $filter) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n": types.AutomationCreateDialogFunctionsSearchDocument,
"\n fragment AutomationsFunctionsCard_AutomateFunction on AutomateFunction {\n id\n name\n isFeatured\n description\n logo\n repo {\n id\n url\n owner\n name\n }\n }\n": types.AutomationsFunctionsCard_AutomateFunctionFragmentDoc,
"\n fragment AutomateFunctionCreateDialog_Workspace on Workspace {\n id\n name\n slug\n }\n": types.AutomateFunctionCreateDialog_WorkspaceFragmentDoc,
"\n fragment AutomateFunctionEditDialog_Workspace on Workspace {\n id\n name\n }\n": types.AutomateFunctionEditDialog_WorkspaceFragmentDoc,
@@ -449,7 +446,6 @@ const documents: Documents = {
"\n fragment AutomateFunctionPageInfo_AutomateFunction on AutomateFunction {\n id\n repo {\n id\n url\n owner\n name\n }\n description\n releases(limit: 1) {\n items {\n id\n inputSchema\n createdAt\n commitId\n ...AutomateFunctionPageParametersDialog_AutomateFunctionRelease\n }\n }\n }\n": types.AutomateFunctionPageInfo_AutomateFunctionFragmentDoc,
"\n fragment AutomateFunctionPageParametersDialog_AutomateFunctionRelease on AutomateFunctionRelease {\n id\n inputSchema\n }\n": types.AutomateFunctionPageParametersDialog_AutomateFunctionReleaseFragmentDoc,
"\n fragment AutomateFunctionsPageHeader_Query on Query {\n activeUser {\n id\n role\n automateInfo {\n hasAutomateGithubApp\n availableGithubOrgs\n }\n }\n serverInfo {\n automate {\n availableFunctionTemplates {\n ...AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplate\n }\n }\n }\n }\n": types.AutomateFunctionsPageHeader_QueryFragmentDoc,
"\n fragment AutomateFunctionsPageItems_Query on Query {\n automateFunctions(limit: 6, filter: { search: $search }, cursor: $cursor) {\n totalCount\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n cursor\n }\n }\n": types.AutomateFunctionsPageItems_QueryFragmentDoc,
"\n fragment AutomateRunsTriggerStatus_TriggeredAutomationsStatus on TriggeredAutomationsStatus {\n id\n ...TriggeredAutomationsStatusSummary\n ...AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus\n }\n": types.AutomateRunsTriggerStatus_TriggeredAutomationsStatusFragmentDoc,
"\n fragment AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus on TriggeredAutomationsStatus {\n id\n automationRuns {\n id\n ...AutomateRunsTriggerStatusDialogRunsRows_AutomateRun\n }\n }\n": types.AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatusFragmentDoc,
"\n fragment AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRun on AutomateFunctionRun {\n id\n results\n status\n statusMessage\n contextView\n function {\n id\n logo\n name\n }\n createdAt\n updatedAt\n }\n": types.AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRunFragmentDoc,
@@ -588,8 +584,6 @@ const documents: Documents = {
"\n query SearchAutomateFunctionReleases(\n $functionId: ID!\n $cursor: String\n $limit: Int\n $filter: AutomateFunctionReleasesFilter\n ) {\n automateFunction(id: $functionId) {\n id\n releases(cursor: $cursor, limit: $limit, filter: $filter) {\n cursor\n totalCount\n items {\n ...SearchAutomateFunctionReleaseItem\n }\n }\n }\n }\n": types.SearchAutomateFunctionReleasesDocument,
"\n query FunctionAccessCheck($id: ID!) {\n automateFunction(id: $id) {\n id\n }\n }\n": types.FunctionAccessCheckDocument,
"\n query ProjectAutomationCreationPublicKeys(\n $projectId: String!\n $automationId: String!\n ) {\n project(id: $projectId) {\n id\n automation(id: $automationId) {\n id\n creationPublicKeys\n }\n }\n }\n": types.ProjectAutomationCreationPublicKeysDocument,
"\n query AutomateFunctionsPagePagination($search: String, $cursor: String) {\n ...AutomateFunctionsPageItems_Query\n }\n": types.AutomateFunctionsPagePaginationDocument,
"\n query ActiveUserFunctions {\n activeUser {\n automateFunctions(limit: 2) {\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n }\n }\n }\n }\n": types.ActiveUserFunctionsDocument,
"\n fragment BillingActions_Workspace on Workspace {\n id\n name\n invitedTeam(filter: $invitesFilter) {\n id\n }\n plan {\n name\n status\n }\n subscription {\n billingInterval\n }\n team {\n totalCount\n }\n defaultRegion {\n name\n }\n }\n": types.BillingActions_WorkspaceFragmentDoc,
"\n fragment PricesPrice on Price {\n amount\n currencySymbol\n currency\n }\n": types.PricesPriceFragmentDoc,
"\n fragment PricesWorkspacePlanPrice on WorkspacePlanPrice {\n monthly {\n ...PricesPrice\n }\n yearly {\n ...PricesPrice\n }\n }\n": types.PricesWorkspacePlanPriceFragmentDoc,
@@ -899,7 +893,7 @@ export function graphql(source: "\n fragment AutomateAutomationCreateDialogFunc
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $search: String\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, filter: { search: $search }, cursor: $cursor) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n"): (typeof documents)["\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $search: String\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, filter: { search: $search }, cursor: $cursor) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n"];
export function graphql(source: "\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $filter: AutomateFunctionsFilter\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, cursor: $cursor, filter: $filter) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n"): (typeof documents)["\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $filter: AutomateFunctionsFilter\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, cursor: $cursor, filter: $filter) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -936,10 +930,6 @@ export function graphql(source: "\n fragment AutomateFunctionPageParametersDial
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n fragment AutomateFunctionsPageHeader_Query on Query {\n activeUser {\n id\n role\n automateInfo {\n hasAutomateGithubApp\n availableGithubOrgs\n }\n }\n serverInfo {\n automate {\n availableFunctionTemplates {\n ...AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplate\n }\n }\n }\n }\n"): (typeof documents)["\n fragment AutomateFunctionsPageHeader_Query on Query {\n activeUser {\n id\n role\n automateInfo {\n hasAutomateGithubApp\n availableGithubOrgs\n }\n }\n serverInfo {\n automate {\n availableFunctionTemplates {\n ...AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplate\n }\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n fragment AutomateFunctionsPageItems_Query on Query {\n automateFunctions(limit: 6, filter: { search: $search }, cursor: $cursor) {\n totalCount\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n cursor\n }\n }\n"): (typeof documents)["\n fragment AutomateFunctionsPageItems_Query on Query {\n automateFunctions(limit: 6, filter: { search: $search }, cursor: $cursor) {\n totalCount\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n cursor\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -1492,14 +1482,6 @@ export function graphql(source: "\n query FunctionAccessCheck($id: ID!) {\n
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query ProjectAutomationCreationPublicKeys(\n $projectId: String!\n $automationId: String!\n ) {\n project(id: $projectId) {\n id\n automation(id: $automationId) {\n id\n creationPublicKeys\n }\n }\n }\n"): (typeof documents)["\n query ProjectAutomationCreationPublicKeys(\n $projectId: String!\n $automationId: String!\n ) {\n project(id: $projectId) {\n id\n automation(id: $automationId) {\n id\n creationPublicKeys\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query AutomateFunctionsPagePagination($search: String, $cursor: String) {\n ...AutomateFunctionsPageItems_Query\n }\n"): (typeof documents)["\n query AutomateFunctionsPagePagination($search: String, $cursor: String) {\n ...AutomateFunctionsPageItems_Query\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query ActiveUserFunctions {\n activeUser {\n automateFunctions(limit: 2) {\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n }\n }\n }\n }\n"): (typeof documents)["\n query ActiveUserFunctions {\n activeUser {\n automateFunctions(limit: 2) {\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n }\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
File diff suppressed because one or more lines are too long
@@ -215,9 +215,13 @@ input ProjectTestAutomationCreateInput {
input AutomateFunctionsFilter {
search: String
"""
By default we skip functions without releases. Set this to true to include them.
By default, we include featured ("public") functions. Set this to false to exclude them.
"""
functionsWithoutReleases: Boolean
includeFeatured: Boolean
"""
By default, we exclude functions without releases. Set this to false to include them.
"""
requireRelease: Boolean
}
input AutomateFunctionRunStatusReportInput {
@@ -539,40 +539,6 @@ export const getFunctionsFactory =
})
}
export type GetPublicFunctionsResponse = {
totalCount: number
cursor: Nullable<string>
items: FunctionWithVersionsSchemaType[]
}
export const getPublicFunctionsFactory =
(deps: { logger: Logger }) =>
async (params: {
query?: {
query?: string
cursor?: string
limit?: number
functionsWithoutVersions?: boolean
}
}) => {
const { logger } = deps
const { query } = params
const url = getApiUrl(`/api/v1/functions`, {
query: {
...query,
featuredFunctionsOnly: true
},
logger
})
return await invokeSafeJsonRequestFactory<GetFunctionsResponse>({
logger
})({
url,
method: 'get'
})
}
type GetUserFunctionsResponse = {
functions: FunctionWithVersionsSchemaType[]
}
@@ -604,40 +570,6 @@ export const getUserFunctionsFactory =
})
}
type GetWorkspaceFunctionsResponse = {
functions: FunctionWithVersionsSchemaType[]
}
export const getWorkspaceFunctionsFactory =
(deps: { logger: Logger }) =>
async (params: {
workspaceId: string
query?: {
query?: string
cursor?: string
limit?: number
}
body: {
speckleServerAuthenticationPayload: AuthCodePayloadWithOrigin
}
}) => {
const { logger } = deps
const { workspaceId, query, body } = params
const url = getApiUrl(`/api/v2/workspaces/${workspaceId}/functions`, {
query,
logger
})
return await invokeSafeJsonRequestFactory<GetWorkspaceFunctionsResponse>({
logger
})({
url,
method: 'POST',
body,
retry: false
})
}
type UserGithubAuthStateResponse = {
userHasAuthorizedGitHubApp: boolean
}
@@ -5,7 +5,6 @@ import {
updateFunction as execEngineUpdateFunction,
getFunctionFactory,
getFunctionReleaseFactory,
getPublicFunctionsFactory,
getFunctionReleasesFactory,
getUserGithubAuthState,
getUserGithubOrganizations,
@@ -912,50 +911,6 @@ export = (FF_AUTOMATE_MODULE_ENABLED
}
return convertFunctionToGraphQLReturn(fn)
},
async automateFunctions(_parent, args, ctx) {
try {
const res = await getPublicFunctionsFactory({
logger: ctx.log
})({
query: {
query: args.filter?.search || undefined,
cursor: args.cursor || undefined,
limit: isNullOrUndefined(args.limit) ? undefined : args.limit,
functionsWithoutVersions:
args.filter?.functionsWithoutReleases || undefined
}
})
if (!res) {
return {
cursor: null,
totalCount: 0,
items: []
}
}
const items = res.items.map(convertFunctionToGraphQLReturn)
return {
cursor: res.cursor,
totalCount: res.totalCount,
items
}
} catch (e) {
const isNotFound =
e instanceof ExecutionEngineFailedResponseError &&
e.response.statusMessage === 'FunctionNotFound'
if (e instanceof ExecutionEngineNetworkError || isNotFound) {
return {
cursor: null,
totalCount: 0,
items: []
}
}
throw e
}
}
},
User: {
@@ -381,8 +381,10 @@ export type AutomateFunctionToken = {
};
export type AutomateFunctionsFilter = {
/** By default we skip functions without releases. Set this to true to include them. */
functionsWithoutReleases?: InputMaybe<Scalars['Boolean']['input']>;
/** By default, we include featured ("public") functions. Set this to false to exclude them. */
includeFeatured?: InputMaybe<Scalars['Boolean']['input']>;
/** By default, we exclude functions without releases. Set this to false to include them. */
requireRelease?: InputMaybe<Scalars['Boolean']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
};
@@ -361,8 +361,10 @@ export type AutomateFunctionToken = {
};
export type AutomateFunctionsFilter = {
/** By default we skip functions without releases. Set this to true to include them. */
functionsWithoutReleases?: InputMaybe<Scalars['Boolean']['input']>;
/** By default, we include featured ("public") functions. Set this to false to exclude them. */
includeFeatured?: InputMaybe<Scalars['Boolean']['input']>;
/** By default, we exclude functions without releases. Set this to false to include them. */
requireRelease?: InputMaybe<Scalars['Boolean']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
};
@@ -1600,8 +1600,8 @@ export = FF_WORKSPACES_MODULE_ENABLED
query: args.filter?.search ?? undefined,
cursor: args.cursor ?? undefined,
limit: args.limit,
requireRelease: true,
includeFeatured: true,
requireRelease: args.filter?.requireRelease ?? true,
includeFeatured: args.filter?.includeFeatured ?? true,
includeWorkspaces: [parent.id],
includeUsers: []
}
@@ -362,8 +362,10 @@ export type AutomateFunctionToken = {
};
export type AutomateFunctionsFilter = {
/** By default we skip functions without releases. Set this to true to include them. */
functionsWithoutReleases?: InputMaybe<Scalars['Boolean']['input']>;
/** By default, we include featured ("public") functions. Set this to false to exclude them. */
includeFeatured?: InputMaybe<Scalars['Boolean']['input']>;
/** By default, we exclude functions without releases. Set this to false to include them. */
requireRelease?: InputMaybe<Scalars['Boolean']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
};