Skip to content

Commit b32da31

Browse files
authored
Fixed Link media functionality (#2377)
1 parent 3e2d250 commit b32da31

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

src/admin/media/mediaModal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ interface MediaModalState {
2222
showImageDetailsModal: boolean,
2323
showNonImageDetailsModal: boolean,
2424
showDeleteConfirmation: boolean,
25+
isLinking: boolean,
2526
isLoading: boolean
2627
}
2728

@@ -56,6 +57,7 @@ export class MediaModal extends React.Component<MediaModalProps, MediaModalState
5657
showImageDetailsModal: false,
5758
showNonImageDetailsModal: false,
5859
showDeleteConfirmation: false,
60+
isLinking: false,
5961
isLoading: false
6062
}
6163
}
@@ -98,7 +100,7 @@ export class MediaModal extends React.Component<MediaModalProps, MediaModalState
98100

99101
linkMedia = async (): Promise<void> => {
100102
const newMediaFile = await this.mediaService.createMediaUrl('media.svg', 'https://cdn.paperbits.io/images/logo.svg');
101-
this.setState({ selectedMediaFile: newMediaFile, showNonImageDetailsModal: true });
103+
this.setState({ selectedMediaFile: newMediaFile, showNonImageDetailsModal: true, isLinking: true });
102104
}
103105

104106
deleteMedia = async (): Promise<void> => {
@@ -235,8 +237,9 @@ export class MediaModal extends React.Component<MediaModalProps, MediaModalState
235237
{this.state.showNonImageDetailsModal &&
236238
<NonImageDetailsModal
237239
mediaItem={this.state.selectedMediaFile}
240+
isLinking={this.state.isLinking}
238241
onDismiss={() => {
239-
this.setState({ showNonImageDetailsModal: false });
242+
this.setState({ showNonImageDetailsModal: false, isLinking: false });
240243
this.searchMedia();
241244
}}
242245
/>

src/admin/media/nonImageDetailsModal.tsx

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ interface NonImageDetailsModalState {
1616

1717
interface NonImageDetailsModalProps {
1818
mediaItem: MediaContract,
19+
isLinking?: boolean,
1920
onDismiss: () => void
2021
}
2122

@@ -65,6 +66,19 @@ export class NonImageDetailsModal extends React.Component<NonImageDetailsModalPr
6566
});
6667
}
6768

69+
onReferenceUrlChange = (): void => {
70+
if (!this.state.errors['downloadUrl'] && this.state.mediaItem.fileName === 'media.svg') {
71+
const newName = this.state.mediaItem.downloadUrl.split("/").pop();
72+
this.setState({
73+
mediaItem: {
74+
...this.state.mediaItem,
75+
fileName: newName,
76+
permalink: '/content/' + newName
77+
}
78+
})
79+
}
80+
}
81+
6882
validatePermalink = async (permalink: string): Promise<string> => {
6983
if (permalink === this.props.mediaItem?.permalink) return '';
7084

@@ -84,8 +98,6 @@ export class NonImageDetailsModal extends React.Component<NonImageDetailsModalPr
8498
return;
8599
}
86100

87-
return;
88-
89101
await this.mediaService.updateMedia(this.state.mediaItem);
90102
this.eventManager.dispatchEvent('onSaveChanges');
91103
this.props.onDismiss();
@@ -108,7 +120,13 @@ export class NonImageDetailsModal extends React.Component<NonImageDetailsModalPr
108120
/>
109121
<DefaultButton
110122
text="Discard"
111-
onClick={this.props.onDismiss}
123+
onClick={async () => {
124+
if (this.props.isLinking) {
125+
await this.mediaService.deleteMedia(this.state.mediaItem);
126+
this.eventManager.dispatchEvent('onSaveChanges');
127+
}
128+
this.props.onDismiss();
129+
}}
112130
/>
113131
</Stack>
114132
</Stack>
@@ -129,11 +147,22 @@ export class NonImageDetailsModal extends React.Component<NonImageDetailsModalPr
129147
styles={textFieldStyles}
130148
required
131149
/>
132-
<CopyableTextField
133-
fieldLabel="Reference URL"
134-
showLabel={true}
135-
copyableValue={this.state.mediaItem.downloadUrl}
136-
/>
150+
{this.props.isLinking
151+
? <TextField
152+
label="Reference URL"
153+
value={this.state.mediaItem.downloadUrl}
154+
onChange={(event, newValue) => this.onInputChange('downloadUrl', newValue, URL_REQUIRED)}
155+
errorMessage={this.state.errors['downloadUrl'] ?? ''}
156+
styles={textFieldStyles}
157+
required
158+
onBlur={() => this.onReferenceUrlChange()}
159+
/>
160+
: <CopyableTextField
161+
fieldLabel="Reference URL"
162+
showLabel={true}
163+
copyableValue={this.state.mediaItem.downloadUrl}
164+
/>
165+
}
137166
<TextField
138167
label="Description"
139168
multiline

0 commit comments

Comments
 (0)