mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2024-11-16 19:30:12 +01:00
Hide delete workspace button on non-admin users if setting is disabled (#227)
* hide delete workspace button on non-admin users if setting is disabled --------- Co-authored-by: Timothy Carambat <timothycarambat@Timothys-MacBook-Pro.local>
This commit is contained in:
parent
8bae47b007
commit
6ea645f358
@ -16,6 +16,7 @@ export default function DocumentSettings({ workspace }) {
|
|||||||
const [originalDocuments, setOriginalDocuments] = useState([]);
|
const [originalDocuments, setOriginalDocuments] = useState([]);
|
||||||
const [selectedFiles, setSelectFiles] = useState([]);
|
const [selectedFiles, setSelectFiles] = useState([]);
|
||||||
const [hasFiles, setHasFiles] = useState(true);
|
const [hasFiles, setHasFiles] = useState(true);
|
||||||
|
const [canDelete, setCanDelete] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
async function fetchKeys() {
|
async function fetchKeys() {
|
||||||
@ -24,6 +25,9 @@ export default function DocumentSettings({ workspace }) {
|
|||||||
const hasAnyFiles = localFiles.items.some(
|
const hasAnyFiles = localFiles.items.some(
|
||||||
(folder) => folder?.items?.length > 0
|
(folder) => folder?.items?.length > 0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const canDelete = await System.getCanDeleteWorkspaces();
|
||||||
|
setCanDelete(canDelete);
|
||||||
setDirectories(localFiles);
|
setDirectories(localFiles);
|
||||||
setOriginalDocuments([...originalDocs]);
|
setOriginalDocuments([...originalDocs]);
|
||||||
setSelectFiles([...originalDocs]);
|
setSelectFiles([...originalDocs]);
|
||||||
@ -92,13 +96,6 @@ export default function DocumentSettings({ workspace }) {
|
|||||||
: selectedFiles.some((doc) => doc.includes(filepath));
|
: selectedFiles.some((doc) => doc.includes(filepath));
|
||||||
};
|
};
|
||||||
|
|
||||||
const isOriginalDoc = (filepath) => {
|
|
||||||
const isFolder = !filepath.includes("/");
|
|
||||||
return isFolder
|
|
||||||
? originalDocuments.some((doc) => doc.includes(filepath.split("/")[0]))
|
|
||||||
: originalDocuments.some((doc) => doc.includes(filepath));
|
|
||||||
};
|
|
||||||
|
|
||||||
const toggleSelection = (filepath) => {
|
const toggleSelection = (filepath) => {
|
||||||
const isFolder = !filepath.includes("/");
|
const isFolder = !filepath.includes("/");
|
||||||
const parent = isFolder ? filepath : filepath.split("/")[0];
|
const parent = isFolder ? filepath : filepath.split("/")[0];
|
||||||
@ -179,14 +176,19 @@ export default function DocumentSettings({ workspace }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-between p-4 md:p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
|
<div
|
||||||
|
className={`flex items-center ${canDelete ? "justify-between" : "justify-end"
|
||||||
|
} p-4 md:p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600`}
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
|
hidden={!canDelete}
|
||||||
onClick={deleteWorkspace}
|
onClick={deleteWorkspace}
|
||||||
type="button"
|
type="button"
|
||||||
className="border border-transparent text-gray-500 bg-white hover:bg-red-100 rounded-lg whitespace-nowrap text-sm font-medium px-5 py-2.5 hover:text-red-900 focus:z-10 dark:bg-transparent dark:text-gray-300 dark:hover:text-white dark:hover:bg-red-600"
|
className="border border-transparent text-gray-500 bg-white hover:bg-red-100 rounded-lg whitespace-nowrap text-sm font-medium px-5 py-2.5 hover:text-red-900 focus:z-10 dark:bg-transparent dark:text-gray-300 dark:hover:text-white dark:hover:bg-red-600"
|
||||||
>
|
>
|
||||||
Delete Workspace
|
Delete Workspace
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<button
|
<button
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
|
@ -188,6 +188,22 @@ const System = {
|
|||||||
return { success: false, error: e.message };
|
return { success: false, error: e.message };
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
getCanDeleteWorkspaces: async function () {
|
||||||
|
return await fetch(`${API_BASE}/system/can-delete-workspaces`, {
|
||||||
|
method: "GET",
|
||||||
|
cache: "no-cache",
|
||||||
|
headers: baseHeaders(),
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (!res.ok) throw new Error("Could not fetch can delete workspaces.");
|
||||||
|
return res.json();
|
||||||
|
})
|
||||||
|
.then((res) => res?.canDelete)
|
||||||
|
.catch((e) => {
|
||||||
|
console.error(e);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
},
|
||||||
getWelcomeMessages: async function () {
|
getWelcomeMessages: async function () {
|
||||||
return await fetch(`${API_BASE}/system/welcome-messages`, {
|
return await fetch(`${API_BASE}/system/welcome-messages`, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
|
@ -431,6 +431,34 @@ function systemEndpoints(app) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
app.get(
|
||||||
|
"/system/can-delete-workspaces",
|
||||||
|
[validatedRequest],
|
||||||
|
async function (request, response) {
|
||||||
|
try {
|
||||||
|
if (!response.locals.multiUserMode) {
|
||||||
|
return response.status(200).json({ canDelete: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.locals.user?.role === "admin") {
|
||||||
|
return response.status(200).json({ canDelete: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
const canDelete = await SystemSettings.canDeleteWorkspaces();
|
||||||
|
response.status(200).json({ canDelete });
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching can delete workspaces:", error);
|
||||||
|
response
|
||||||
|
.status(500)
|
||||||
|
.json({
|
||||||
|
success: false,
|
||||||
|
message: "Internal server error",
|
||||||
|
canDelete: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
app.get("/system/welcome-messages", async function (request, response) {
|
app.get("/system/welcome-messages", async function (request, response) {
|
||||||
try {
|
try {
|
||||||
const welcomeMessages = await WelcomeMessages.getMessages();
|
const welcomeMessages = await WelcomeMessages.getMessages();
|
||||||
|
@ -180,6 +180,12 @@ const SystemSettings = {
|
|||||||
const result = await this.get(`label = 'logo_filename'`);
|
const result = await this.get(`label = 'logo_filename'`);
|
||||||
return result ? result.value : null;
|
return result ? result.value : null;
|
||||||
},
|
},
|
||||||
|
canDeleteWorkspaces: async function () {
|
||||||
|
return (
|
||||||
|
(await this.get(`label = 'users_can_delete_workspaces'`))?.value ===
|
||||||
|
"true"
|
||||||
|
);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.SystemSettings = SystemSettings;
|
module.exports.SystemSettings = SystemSettings;
|
||||||
|
Loading…
Reference in New Issue
Block a user