Files
speckle-server/packages/frontend-2/components/settings/workspaces/automation/Functions/TableRowActions.vue
T
Chuck Driesler d2f2d7bcfd feat(automate): allow function authors to regenerate function tokens (#5057)
* feat(automate): expose function regeneration endpoint

* chore(automate): remember to call the function

* fix(automate): use correct auth code action

* fix(automate): token regenerate policy

* fix(automate): expose function regen token policy

* feat(automate): workspace automation settings tab

* feat(automate): function token regeneration dialog

* fix(automate): improve gql usage in vue components

* chore(authz): tests for automate function policies

* fix(automate): use paginated query

* fix(automate): resolve initial result
2025-07-17 11:24:58 +02:00

81 lines
2.3 KiB
Vue

<template>
<LayoutMenu
v-model:open="isOpen"
:items="actionItems"
mount-menu-on-body
:menu-position="HorizontalDirection.Left"
@chosen="({ item }) => handleAction(item)"
>
<FormButton
:color="isOpen ? 'outline' : 'subtle'"
hide-text
:icon-right="isOpen ? XMarkIcon : EllipsisHorizontalIcon"
@click.stop="isOpen = true"
/>
<SettingsWorkspacesAutomationFunctionsRegenerateTokenDialog
v-model:open="showRegenerateTokenDialog"
:workspace-function="workspaceFunction"
/>
</LayoutMenu>
</template>
<script setup lang="ts">
import type { LayoutMenuItem } from '@speckle/ui-components'
import { HorizontalDirection } from '@speckle/ui-components'
import { EllipsisHorizontalIcon, XMarkIcon } from '@heroicons/vue/24/outline'
import type { SettingsWorkspacesAutomationTableRowActions_AutomateFunctionFragment } from '~/lib/common/generated/gql/graphql'
import { graphql } from '~/lib/common/generated/gql'
graphql(`
fragment SettingsWorkspacesAutomationTableRowActions_AutomateFunction on AutomateFunction {
id
permissions {
...SettingsWorkspacesAutomationTableRowActions_AutomateFunctionPermissionChecks
}
...SettingsWorkspacesAutomationRegenerateTokenDialog_AutomateFunction
}
`)
graphql(`
fragment SettingsWorkspacesAutomationTableRowActions_AutomateFunctionPermissionChecks on AutomateFunctionPermissionChecks {
canRegenerateToken {
...FullPermissionCheckResult
}
}
`)
const props = defineProps<{
workspaceFunction: SettingsWorkspacesAutomationTableRowActions_AutomateFunctionFragment
}>()
const isOpen = defineModel<boolean>('open', { default: false })
const showRegenerateTokenDialog = ref(false)
enum ActionTypes {
RegenerateToken = 'regenerate-token'
}
const actionItems = computed<LayoutMenuItem[][]>(() => {
return [
[
{
title: 'Regenerate token...',
id: ActionTypes.RegenerateToken,
disabled: !props.workspaceFunction.permissions.canRegenerateToken.authorized,
disabledTooltip: props.workspaceFunction.permissions.canRegenerateToken.message
}
]
]
})
const handleAction = (actionItem: LayoutMenuItem) => {
switch (actionItem.id) {
case ActionTypes.RegenerateToken: {
showRegenerateTokenDialog.value = true
break
}
}
}
</script>