Skip to content

Commit f7aeb71

Browse files
committed
fix: Lock down status check and file instance actions a bit more
https://harperdb.atlassian.net/browse/STUDIO-467
1 parent 28799b7 commit f7aeb71

File tree

3 files changed

+30
-18
lines changed

3 files changed

+30
-18
lines changed

src/features/instance/applications/components/ApplicationsSidebar/FileTreeExplorer/FileMenuActionButtons.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { useUpdateComponentFile } from '@/features/instance/operations/mutations
99
import { getComponentsQueryOptions } from '@/features/instance/operations/queries/getComponents';
1010
import { useQueryClient, useSuspenseQuery } from '@tanstack/react-query';
1111
import { Minus, Plus, RefreshCwIcon } from 'lucide-react';
12-
import { useCallback, useState } from 'react';
12+
import { useCallback, useMemo, useState } from 'react';
1313
import { toast } from 'sonner';
1414
import { RedeployApplicationModal } from '@/features/instance/applications/modals/RedeployApplicationModal';
1515

@@ -98,6 +98,11 @@ export function FileMenuActionButtons() {
9898
}
9999
});
100100
}, [reDeployApplication, selectedFolderFile, instanceParams, queryClient]);
101+
const restrictPackageModification = useMemo(() => {
102+
return selectedFolderFile.pkg?.includes('github.com/HarperDB/status-check-fabric')
103+
|| selectedFolderFile.pkg?.includes('github.com/HarperFast/status-check-fabric');
104+
}, [selectedFolderFile.pkg]);
105+
101106

102107
const toggleDeleting = useCallback(() => {
103108
setIsDeleteFolderOrFileClicked(!isDeleteFolderOrFileClicked);
@@ -106,7 +111,7 @@ export function FileMenuActionButtons() {
106111
return (
107112
<div className="p-2 border-b border-gray-700 mb-2 min-h-12">
108113
<div className='flex flex-wrap gap-2'>
109-
{selectedFolderFile.pkg && (
114+
{selectedFolderFile.pkg && !restrictPackageModification && (
110115
<Button
111116
onClick={() => setIsRedeployApplicationClicked(true)}
112117
disabled={isDeployComponentPending}
@@ -151,7 +156,7 @@ export function FileMenuActionButtons() {
151156
) : (
152157
''
153158
)}
154-
{selectedFolderFile.filePath ? (
159+
{selectedFolderFile.filePath && !restrictPackageModification ? (
155160
<Button
156161
onClick={toggleDeleting}
157162
disabled={isDeployComponentPending}

src/features/instance/applications/components/ApplicationsSidebar/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { GetComponentsResponse } from '@/features/instance/operations/queries/getComponents';
2+
import { useInstanceBrowseManagePermission } from '@/hooks/usePermissions';
23
import { FileTreeExplorer } from './FileTreeExplorer';
34
import { FileMenuActionButtons } from './FileTreeExplorer/FileMenuActionButtons';
45

56
export function ApplicationsSidebar({ fileTreeQueryData }: { fileTreeQueryData: GetComponentsResponse }) {
7+
const canManageBrowseInstance = useInstanceBrowseManagePermission();
68
return (
79
<>
8-
<FileMenuActionButtons />
10+
{canManageBrowseInstance && (<FileMenuActionButtons />)}
911
<FileTreeExplorer files={fileTreeQueryData} />
1012
</>
1113
);

src/features/instance/applications/components/TextEditorView/index.tsx

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Button } from '@/components/ui/button';
33
import { isLocalStudio } from '@/config/constants';
44
import { useInstanceClientParams } from '@/config/useInstanceClient';
55
import { useEffectedState } from '@/hooks/useEffectedState';
6+
import { useInstanceBrowseManagePermission } from '@/hooks/usePermissions';
67
import { Editor } from '@monaco-editor/react';
78
import { useParams } from '@tanstack/react-router';
89
import { ImportIcon, PlusIcon, Save } from 'lucide-react';
@@ -51,11 +52,13 @@ export function TextEditorView() {
5152
setLanguage(updatedLanguage);
5253
}, [selectedFolderFile]);
5354

55+
const canManageBrowseInstance = useInstanceBrowseManagePermission();
56+
5457
return (
5558
<div className="h-[calc(100vh-theme(spacing.52))]">
5659
<div className="flex items-center justify-between py-1 border-b border-gray-700">
5760
<span className="p-2">{selectedFolderFile.filePath ? crumbPath : 'Select a file'}</span>
58-
{!selectedFolderFile.pkg && (
61+
{!selectedFolderFile.pkg && canManageBrowseInstance && (
5962
<div className="flex flex-col justify-end space-y-2 md:justify-normal md:flex-row">
6063
<Button
6164
variant="positiveOutline"
@@ -98,20 +101,22 @@ export function TextEditorView() {
98101
{!selectedFolderFile.filePath || isFolder(selectedFolderFile.entries) ? (
99102
<div className="flex flex-col items-center justify-center h-full space-y-4">
100103
<span className="text-white">No file selected</span>
101-
<div className="flex flex-col space-y-4 md:flex-row md:space-y-0 md:space-x-4">
102-
<Button variant="positiveOutline" className="ms-4" size="lg" onClick={() => {
103-
setIsNewApplicationModalOpen(true);
104-
setAppType('create');
104+
{canManageBrowseInstance && (
105+
<div className="flex flex-col space-y-4 md:flex-row md:space-y-0 md:space-x-4">
106+
<Button variant="positiveOutline" className="ms-4" size="lg" onClick={() => {
107+
setIsNewApplicationModalOpen(true);
108+
setAppType('create');
105109
}}>
106-
<PlusIcon /> Create New Application
107-
</Button>
108-
<Button variant="defaultOutline" className="ms-4" size="lg" onClick={() => {
109-
setIsNewApplicationModalOpen(true);
110-
setAppType('import');
111-
}}>
112-
<ImportIcon /> Import Application
113-
</Button>
114-
</div>
110+
<PlusIcon /> Create New Application
111+
</Button>
112+
<Button variant="defaultOutline" className="ms-4" size="lg" onClick={() => {
113+
setIsNewApplicationModalOpen(true);
114+
setAppType('import');
115+
}}>
116+
<ImportIcon /> Import Application
117+
</Button>
118+
</div>
119+
)}
115120
</div>
116121
) : (
117122
<Editor

0 commit comments

Comments
 (0)