Skip to content

Commit e759ea4

Browse files
authored
WebDav helper for deleting directories and files: deleteWebDavResource() (#108)
* update @labkey/components package version * Add demo module FileDisplayPanel link to delete a file/directory resource
1 parent e85cd7d commit e759ea4

File tree

3 files changed

+49
-131
lines changed

3 files changed

+49
-131
lines changed

demo/package-lock.json

Lines changed: 9 additions & 127 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"test": "cross-env NODE_ENV=test jest"
1313
},
1414
"dependencies": {
15-
"@labkey/components": "2.246.2"
15+
"@labkey/components": "2.261.0"
1616
},
1717
"devDependencies": {
1818
"@labkey/build": "6.4.0",

demo/src/client/FileAttachmentPage/FileDisplayPanel.tsx

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { FC, memo, useCallback, useEffect, useState } from 'react';
22
import { Draft, produce } from "immer";
3-
import { ActionURL } from "@labkey/api";
4-
import { createWebDavDirectory, LoadingSpinner } from '@labkey/components';
3+
import { ActionURL } from '@labkey/api';
4+
import { ConfirmModal, createWebDavDirectory, deleteWebDavResource, LoadingSpinner } from '@labkey/components';
55

66
import { MY_ATTACHMENTS_DIR } from "./constants";
77
import { FileAttachmentModel, SavedFileModel } from "./models";
@@ -11,6 +11,7 @@ import { CreateDirectoryModal } from './CreateDirectoryModal';
1111
export const FileDisplayPanel : FC = memo(() => {
1212
const [loading, setLoading] = useState<boolean>(true);
1313
const [showCreateDirectoryModal, setShowCreateDirectoryModal] = useState<boolean>();
14+
const [selectedDeleteResource, setSelectedDeleteResource] = useState<string>();
1415
const [fileAttachmentModel, setFileAttachmentModel] = useState<FileAttachmentModel>(new FileAttachmentModel());
1516

1617
//equivalent to componentDidMount and componentDidUpdate
@@ -46,14 +47,36 @@ export const FileDisplayPanel : FC = memo(() => {
4647
if (!name?.startsWith('/')) path = path + '/';
4748
path = path + name;
4849

50+
// Note: containerPath param can be the path (i.e. '/MyProject') or the container GUID
4951
createWebDavDirectory(ActionURL.getContainer(), path, true)
5052
.then(() => {
5153
// reset loading state to force refresh of panel savedFiles
5254
setLoading(true);
5355
});
5456

5557
closeCreateDirectory();
56-
}, [closeCreateDirectory]);
58+
}, [closeCreateDirectory, createWebDavDirectory]);
59+
60+
const onDeleteResource = useCallback((resourceName: string) => {
61+
let path = MY_ATTACHMENTS_DIR;
62+
if (!resourceName?.startsWith('/')) path = path + '/';
63+
path = path + resourceName;
64+
65+
setSelectedDeleteResource(path);
66+
}, []);
67+
68+
const onCancelDeleteResource = useCallback(() => {
69+
setSelectedDeleteResource(undefined);
70+
}, []);
71+
72+
const onConfirmDeleteResource = useCallback(() => {
73+
deleteWebDavResource(ActionURL.getContainer(), selectedDeleteResource)
74+
.then(() => {
75+
// reset loading state to force refresh of panel savedFiles
76+
setLoading(true);
77+
setSelectedDeleteResource(undefined);
78+
});
79+
}, [deleteWebDavResource, selectedDeleteResource]);
5780

5881
return (
5982
<div className='panel panel-default'>
@@ -69,6 +92,13 @@ export const FileDisplayPanel : FC = memo(() => {
6992
fileAttachmentModel?.savedFiles?.map((savedFile) => (
7093
<li key={savedFile.fileName}>
7194
<a href={savedFile.href} target='_blank'>{savedFile.fileName}</a>
95+
<a
96+
className="labkey-text-link"
97+
style={{ paddingLeft: '10px' }}
98+
onClick={() => onDeleteResource(savedFile.fileName)}
99+
>
100+
Delete
101+
</a>
72102
</li>
73103
))
74104
}
@@ -95,6 +125,12 @@ export const FileDisplayPanel : FC = memo(() => {
95125
</p>
96126
)}
97127
{showCreateDirectoryModal && <CreateDirectoryModal close={closeCreateDirectory} submit={submitCreateDirectory} />}
128+
{selectedDeleteResource && (
129+
<ConfirmModal onConfirm={onConfirmDeleteResource} onCancel={onCancelDeleteResource} show title="Delete Resource?">
130+
<p>Are you sure you want to delete the selected resource?</p>
131+
<p><b>{selectedDeleteResource}</b></p>
132+
</ConfirmModal>
133+
)}
98134
</div>
99135
</div>
100136
);

0 commit comments

Comments
 (0)