Skip to content

Commit 9671b69

Browse files
committed
change attachment file and preview load
1 parent 0f97825 commit 9671b69

File tree

2 files changed

+48
-31
lines changed

2 files changed

+48
-31
lines changed

src/controls/listItemAttachments/ListItemAttachments.tsx

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@ import { Spinner, SpinnerSize } from 'office-ui-fabric-react/lib/Spinner';
2222
import utilities from './utilities';
2323
import { Placeholder } from "../placeholder";
2424

25+
interface IPreviewImageCollection {
26+
[fileName: string]: IDocumentCardPreviewImage;
27+
}
28+
2529
export class ListItemAttachments extends React.Component<IListItemAttachmentsProps, IListItemAttachmentsState> {
2630
private _spservice: SPservice;
27-
private previewImages: IDocumentCardPreviewImage[];
31+
private previewImages: IPreviewImageCollection;
2832
private _utilities: utilities;
2933

3034
constructor(props: IListItemAttachmentsProps) {
@@ -53,45 +57,54 @@ export class ListItemAttachments extends React.Component<IListItemAttachmentsPro
5357
this.loadAttachments();
5458
}
5559

60+
private async loadAttachmentPreview(file: IListItemAttachmentFile): Promise<IDocumentCardPreviewImage> {
61+
return this._utilities.GetFileImageUrl(file).then(previewImageUrl => {
62+
return {
63+
name: file.FileName,
64+
previewImageSrc: previewImageUrl,
65+
iconSrc: '',
66+
imageFit: ImageFit.center,
67+
width: 187,
68+
height: 130,
69+
};
70+
});
71+
}
72+
5673
/**
5774
* Load Item Attachments
5875
*/
5976
private async loadAttachments() {
60-
this.previewImages = [];
61-
try {
62-
const files: IListItemAttachmentFile[] = await this._spservice.getListItemAttachments(this.props.listId, this.props.itemId);
63-
64-
for (const file of files) {
65-
const _previewImage = await this._utilities.GetFileImageUrl(file);
66-
this.previewImages.push({
67-
name: file.FileName,
68-
previewImageSrc: _previewImage,
69-
iconSrc: '',
70-
imageFit: ImageFit.center,
71-
width: 187,
72-
height: 130,
77+
this._spservice.getListItemAttachments(this.props.listId, this.props.itemId).then((files: IListItemAttachmentFile[]) => {
78+
const filePreviewImages = files.map(file => this.loadAttachmentPreview(file));
79+
return Promise.all(filePreviewImages).then(filePreviews => {
80+
this.previewImages = {};
81+
filePreviews.forEach(preview => {
82+
this.previewImages[preview.name] = preview;
7383
});
74-
}
7584

76-
this.setState({
77-
hideDialog: true,
78-
dialogMessage: '',
79-
attachments: files,
80-
showPlaceHolder: files.length === 0 ? true : false
85+
this.setState({
86+
fireUpload: false,
87+
hideDialog: true,
88+
dialogMessage: '',
89+
attachments: files,
90+
showPlaceHolder: files.length === 0 ? true : false
91+
});
8192
});
82-
} catch (error) {
93+
}).catch((error: Error) => {
8394
this.setState({
84-
hideDialog: true,
95+
fireUpload: false,
96+
hideDialog: false,
8597
dialogMessage: strings.ListItemAttachmentserrorLoadAttachments.replace('{0}', error.message)
8698
});
87-
}
99+
});
88100
}
89101

90102
/**
91103
* Close the dialog
92104
*/
93105
private _closeDialog = () => {
94106
this.setState({
107+
fireUpload: false,
95108
hideDialog: true,
96109
dialogMessage: '',
97110
file: null,
@@ -116,6 +129,7 @@ export class ListItemAttachments extends React.Component<IListItemAttachmentsPro
116129
*/
117130
private onDeleteAttachment = (file: IListItemAttachmentFile) => {
118131
this.setState({
132+
fireUpload: false,
119133
hideDialog: false,
120134
deleteAttachment: true,
121135
file: file,
@@ -131,13 +145,15 @@ export class ListItemAttachments extends React.Component<IListItemAttachmentsPro
131145
const { file } = this.state;
132146

133147
this.setState({
148+
fireUpload: false,
134149
disableButton: true,
135150
});
136151

137152
try {
138153
await this._spservice.deleteAttachment(file.FileName, this.props.listId, this.props.itemId, this.props.webUrl);
139154

140155
this.setState({
156+
fireUpload: false,
141157
hideDialog: false,
142158
deleteAttachment: false,
143159
disableButton: false,
@@ -146,6 +162,7 @@ export class ListItemAttachments extends React.Component<IListItemAttachmentsPro
146162
});
147163
} catch (error) {
148164
this.setState({
165+
fireUpload: false,
149166
hideDialog: false,
150167
file: null,
151168
deleteAttachment: false,
@@ -179,22 +196,22 @@ export class ListItemAttachments extends React.Component<IListItemAttachmentsPro
179196
onConfigure={() => this.setState({ fireUpload: true })} />
180197
:
181198

182-
this.state.attachments.map((file, i: number) => {
199+
this.state.attachments.map(file => {
200+
const fileName = file.FileName;
201+
const previewImage = this.previewImages[fileName];
183202
return (
184-
<div className={styles.documentCardWrapper}>
203+
<div key={fileName} className={styles.documentCardWrapper}>
185204
<TooltipHost
186-
content={file.FileName}
205+
content={fileName}
187206
calloutProps={{ gapSpace: 0, isBeakVisible: true }}
188207
closeDelay={200}
189208
directionalHint={DirectionalHint.rightCenter}>
190209

191210
<DocumentCard
192211
onClickHref={`${file.ServerRelativeUrl}?web=1`}
193212
className={styles.documentCard}>
194-
<DocumentCardPreview previewImages={[this.previewImages[i]]} />
195-
<Label className={styles.fileLabel}>
196-
{file.FileName}
197-
</Label>
213+
<DocumentCardPreview previewImages={[previewImage]} />
214+
<Label className={styles.fileLabel}>{fileName}</Label>
198215
<DocumentCardActions
199216
actions={
200217
[

src/services/SPService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export default class SPService implements ISPService {
7777
const data = await this._context.spHttpClient.get(apiUrl, SPHttpClient.configurations.v1);
7878
if (data.ok) {
7979
const results = await data.json();
80-
if (results && results.value && results.value.length > 0) {
80+
if (results && results.value) {
8181
return results.value;
8282
}
8383
}

0 commit comments

Comments
 (0)