Skip to content

Commit c3c97b3

Browse files
committed
add deploy modal tabs config to perm groups
1 parent 59e9264 commit c3c97b3

File tree

5 files changed

+92
-29
lines changed

5 files changed

+92
-29
lines changed

apps/sim/app/api/permission-groups/[id]/route.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ const configSchema = z.object({
2525
disableMcpTools: z.boolean().optional(),
2626
disableCustomTools: z.boolean().optional(),
2727
hideTemplates: z.boolean().optional(),
28+
disableInvitations: z.boolean().optional(),
29+
hideDeployApi: z.boolean().optional(),
30+
hideDeployMcp: z.boolean().optional(),
31+
hideDeployA2a: z.boolean().optional(),
32+
hideDeployChatbot: z.boolean().optional(),
33+
hideDeployTemplate: z.boolean().optional(),
2834
})
2935

3036
const updateSchema = z.object({

apps/sim/app/api/permission-groups/route.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ const configSchema = z.object({
2626
disableMcpTools: z.boolean().optional(),
2727
disableCustomTools: z.boolean().optional(),
2828
hideTemplates: z.boolean().optional(),
29+
disableInvitations: z.boolean().optional(),
30+
hideDeployApi: z.boolean().optional(),
31+
hideDeployMcp: z.boolean().optional(),
32+
hideDeployA2a: z.boolean().optional(),
33+
hideDeployChatbot: z.boolean().optional(),
34+
hideDeployTemplate: z.boolean().optional(),
2935
})
3036

3137
const createSchema = z.object({

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/deploy-modal.tsx

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { CreateApiKeyModal } from '@/app/workspace/[workspaceId]/w/components/si
2323
import { startsWithUuid } from '@/executor/constants'
2424
import { useApiKeys } from '@/hooks/queries/api-keys'
2525
import { useWorkspaceSettings } from '@/hooks/queries/workspace'
26+
import { usePermissionConfig } from '@/hooks/use-permission-config'
2627
import { useSettingsModalStore } from '@/stores/modals/settings/store'
2728
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
2829
import { useWorkflowStore } from '@/stores/workflows/workflow/store'
@@ -113,16 +114,12 @@ export function DeployModal({
113114
const [existingChat, setExistingChat] = useState<ExistingChat | null>(null)
114115
const [isLoadingChat, setIsLoadingChat] = useState(false)
115116

116-
const [formSubmitting, setFormSubmitting] = useState(false)
117-
const [formExists, setFormExists] = useState(false)
118-
const [isFormValid, setIsFormValid] = useState(false)
119-
120117
const [chatSuccess, setChatSuccess] = useState(false)
121-
const [formSuccess, setFormSuccess] = useState(false)
122118

123119
const [isCreateKeyModalOpen, setIsCreateKeyModalOpen] = useState(false)
124120
const userPermissions = useUserPermissionsContext()
125121
const canManageWorkspaceKeys = userPermissions.canAdmin
122+
const { config: permissionConfig } = usePermissionConfig()
126123
const { data: apiKeysData, isLoading: isLoadingKeys } = useApiKeys(workflowWorkspaceId || '')
127124
const { data: workspaceSettingsData, isLoading: isLoadingSettings } = useWorkspaceSettings(
128125
workflowWorkspaceId || ''
@@ -516,12 +513,6 @@ export function DeployModal({
516513
setTimeout(() => setChatSuccess(false), 2000)
517514
}
518515

519-
const handleFormDeployed = async () => {
520-
await handlePostDeploymentUpdate()
521-
setFormSuccess(true)
522-
setTimeout(() => setFormSuccess(false), 2000)
523-
}
524-
525516
const handlePostDeploymentUpdate = async () => {
526517
if (!workflowId) return
527518

@@ -630,17 +621,6 @@ export function DeployModal({
630621
deleteTrigger?.click()
631622
}, [])
632623

633-
const handleFormFormSubmit = useCallback(() => {
634-
const form = document.getElementById('form-deploy-form') as HTMLFormElement
635-
form?.requestSubmit()
636-
}, [])
637-
638-
const handleFormDelete = useCallback(() => {
639-
const form = document.getElementById('form-deploy-form')
640-
const deleteTrigger = form?.querySelector('[data-delete-trigger]') as HTMLButtonElement
641-
deleteTrigger?.click()
642-
}, [])
643-
644624
return (
645625
<>
646626
<Modal open={open} onOpenChange={handleCloseModal}>
@@ -654,12 +634,22 @@ export function DeployModal({
654634
>
655635
<ModalTabsList activeValue={activeTab}>
656636
<ModalTabsTrigger value='general'>General</ModalTabsTrigger>
657-
<ModalTabsTrigger value='api'>API</ModalTabsTrigger>
658-
<ModalTabsTrigger value='mcp'>MCP</ModalTabsTrigger>
659-
<ModalTabsTrigger value='a2a'>A2A</ModalTabsTrigger>
660-
<ModalTabsTrigger value='chat'>Chat</ModalTabsTrigger>
637+
{!permissionConfig.hideDeployApi && (
638+
<ModalTabsTrigger value='api'>API</ModalTabsTrigger>
639+
)}
640+
{!permissionConfig.hideDeployMcp && (
641+
<ModalTabsTrigger value='mcp'>MCP</ModalTabsTrigger>
642+
)}
643+
{!permissionConfig.hideDeployA2a && (
644+
<ModalTabsTrigger value='a2a'>A2A</ModalTabsTrigger>
645+
)}
646+
{!permissionConfig.hideDeployChatbot && (
647+
<ModalTabsTrigger value='chat'>Chat</ModalTabsTrigger>
648+
)}
661649
{/* <ModalTabsTrigger value='form'>Form</ModalTabsTrigger> */}
662-
<ModalTabsTrigger value='template'>Template</ModalTabsTrigger>
650+
{!permissionConfig.hideDeployTemplate && (
651+
<ModalTabsTrigger value='template'>Template</ModalTabsTrigger>
652+
)}
663653
</ModalTabsList>
664654

665655
<ModalBody className='min-h-0 flex-1'>

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/access-control/access-control.tsx

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,36 @@ export function AccessControl() {
350350
category: 'Collaboration',
351351
configKey: 'disableInvitations' as const,
352352
},
353+
{
354+
id: 'hide-deploy-api',
355+
label: 'API',
356+
category: 'Deploy Tabs',
357+
configKey: 'hideDeployApi' as const,
358+
},
359+
{
360+
id: 'hide-deploy-mcp',
361+
label: 'MCP',
362+
category: 'Deploy Tabs',
363+
configKey: 'hideDeployMcp' as const,
364+
},
365+
{
366+
id: 'hide-deploy-a2a',
367+
label: 'A2A',
368+
category: 'Deploy Tabs',
369+
configKey: 'hideDeployA2a' as const,
370+
},
371+
{
372+
id: 'hide-deploy-chatbot',
373+
label: 'Chat',
374+
category: 'Deploy Tabs',
375+
configKey: 'hideDeployChatbot' as const,
376+
},
377+
{
378+
id: 'hide-deploy-template',
379+
label: 'Template',
380+
category: 'Deploy Tabs',
381+
configKey: 'hideDeployTemplate' as const,
382+
},
353383
],
354384
[]
355385
)
@@ -926,7 +956,12 @@ export function AccessControl() {
926956
!editingConfig?.disableMcpTools &&
927957
!editingConfig?.disableCustomTools &&
928958
!editingConfig?.hideTraceSpans &&
929-
!editingConfig?.disableInvitations
959+
!editingConfig?.disableInvitations &&
960+
!editingConfig?.hideDeployApi &&
961+
!editingConfig?.hideDeployMcp &&
962+
!editingConfig?.hideDeployA2a &&
963+
!editingConfig?.hideDeployChatbot &&
964+
!editingConfig?.hideDeployTemplate
930965
setEditingConfig((prev) =>
931966
prev
932967
? {
@@ -941,6 +976,11 @@ export function AccessControl() {
941976
disableCustomTools: allVisible,
942977
hideTraceSpans: allVisible,
943978
disableInvitations: allVisible,
979+
hideDeployApi: allVisible,
980+
hideDeployMcp: allVisible,
981+
hideDeployA2a: allVisible,
982+
hideDeployChatbot: allVisible,
983+
hideDeployTemplate: allVisible,
944984
}
945985
: prev
946986
)
@@ -955,7 +995,12 @@ export function AccessControl() {
955995
!editingConfig?.disableMcpTools &&
956996
!editingConfig?.disableCustomTools &&
957997
!editingConfig?.hideTraceSpans &&
958-
!editingConfig?.disableInvitations
998+
!editingConfig?.disableInvitations &&
999+
!editingConfig?.hideDeployApi &&
1000+
!editingConfig?.hideDeployMcp &&
1001+
!editingConfig?.hideDeployA2a &&
1002+
!editingConfig?.hideDeployChatbot &&
1003+
!editingConfig?.hideDeployTemplate
9591004
? 'Deselect All'
9601005
: 'Select All'}
9611006
</Button>

apps/sim/lib/permission-groups/types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ export interface PermissionGroupConfig {
1212
disableCustomTools: boolean
1313
hideTemplates: boolean
1414
disableInvitations: boolean
15+
// Deploy Modal Tabs
16+
hideDeployApi: boolean
17+
hideDeployMcp: boolean
18+
hideDeployA2a: boolean
19+
hideDeployChatbot: boolean
20+
hideDeployTemplate: boolean
1521
}
1622

1723
export const DEFAULT_PERMISSION_GROUP_CONFIG: PermissionGroupConfig = {
@@ -27,6 +33,11 @@ export const DEFAULT_PERMISSION_GROUP_CONFIG: PermissionGroupConfig = {
2733
disableCustomTools: false,
2834
hideTemplates: false,
2935
disableInvitations: false,
36+
hideDeployApi: false,
37+
hideDeployMcp: false,
38+
hideDeployA2a: false,
39+
hideDeployChatbot: false,
40+
hideDeployTemplate: false,
3041
}
3142

3243
export function parsePermissionGroupConfig(config: unknown): PermissionGroupConfig {
@@ -50,5 +61,10 @@ export function parsePermissionGroupConfig(config: unknown): PermissionGroupConf
5061
disableCustomTools: typeof c.disableCustomTools === 'boolean' ? c.disableCustomTools : false,
5162
hideTemplates: typeof c.hideTemplates === 'boolean' ? c.hideTemplates : false,
5263
disableInvitations: typeof c.disableInvitations === 'boolean' ? c.disableInvitations : false,
64+
hideDeployApi: typeof c.hideDeployApi === 'boolean' ? c.hideDeployApi : false,
65+
hideDeployMcp: typeof c.hideDeployMcp === 'boolean' ? c.hideDeployMcp : false,
66+
hideDeployA2a: typeof c.hideDeployA2a === 'boolean' ? c.hideDeployA2a : false,
67+
hideDeployChatbot: typeof c.hideDeployChatbot === 'boolean' ? c.hideDeployChatbot : false,
68+
hideDeployTemplate: typeof c.hideDeployTemplate === 'boolean' ? c.hideDeployTemplate : false,
5369
}
5470
}

0 commit comments

Comments
 (0)