Skip to content

Commit 56d7e01

Browse files
authored
Merge pull request #750 from pnp/new-folder
Fixes for #743: no encoding, special characters, displaying error
2 parents 3b0878c + 5b89ed7 commit 56d7e01

File tree

6 files changed

+38
-8
lines changed

6 files changed

+38
-8
lines changed

src/controls/folderExplorer/NewFolder/INewFolderState.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export interface INewFolderState {
22
folderName: string;
33
showInput: boolean;
44
loading: boolean;
5+
errorMessage?: string;
56
}

src/controls/folderExplorer/NewFolder/NewFolder.module.scss

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
.libraryItem {
55
padding: 5px 0 5px 10px;
66
cursor: pointer;
7-
height: 30px;
8-
line-height: 30px;
7+
min-height: 32px;
8+
line-height: 32px;
99
border-width: 1px;
1010
display: flex;
11-
align-items: center;
11+
align-items: start;
1212
}
1313

1414
.libraryItem:hover {

src/controls/folderExplorer/NewFolder/NewFolder.tsx

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,22 @@ export class NewFolder extends React.Component<INewFolderProps, INewFolderState>
2929

3030

3131
public render(): React.ReactElement<INewFolderProps> {
32+
33+
const {
34+
folderName,
35+
errorMessage
36+
} = this.state;
37+
38+
const hasError = folderName && /["*:<>?/\\|]/gmi.test(folderName);
39+
3240
return (
3341
<div className={styles.libraryItem}>
3442
{this.state.loading &&
35-
<span className={styles.spinner}><Spinner size={SpinnerSize.xSmall} /></span>
43+
<span className={styles.spinner}><Spinner size={SpinnerSize.xSmall} styles={{
44+
root: {
45+
height: '32px'
46+
}
47+
}} /></span>
3648
}
3749
{!this.state.loading &&
3850
<Icon iconName="FabricNewFolder" className={styles.folderIcon}></Icon>
@@ -42,9 +54,18 @@ export class NewFolder extends React.Component<INewFolderProps, INewFolderState>
4254
}
4355
{this.state.showInput &&
4456
<TextField
57+
styles={{
58+
errorMessage: {
59+
paddingTop: 0
60+
},
61+
root: {
62+
width: '100%'
63+
}
64+
}}
4565
placeholder={strings.NewFolderNamePlaceholder}
46-
value={this.state.folderName}
66+
value={folderName}
4767
onChanged={this._onFolderNameChange}
68+
errorMessage={hasError ? strings.NewFolderIncorrectSymbolsError : errorMessage}
4869
// styles={{ fieldGroup: { width: 300 } }}
4970
/>
5071
}
@@ -54,15 +75,15 @@ export class NewFolder extends React.Component<INewFolderProps, INewFolderState>
5475
title="Add"
5576
ariaLabel="Add"
5677
className={styles.button}
57-
disabled={this.state.loading}
78+
disabled={this.state.loading || hasError}
5879
onClick={this._addSubFolder} />
5980
}
6081
</div>
6182
);
6283
}
6384

6485
private _onFolderNameChange = (newValue?: string) => {
65-
this.setState({ folderName: newValue || '' });
86+
this.setState({ folderName: newValue || '', errorMessage: '' });
6687
}
6788

6889
private _onShowInputChange = (event: React.MouseEvent<HTMLDivElement>) => {
@@ -94,6 +115,10 @@ export class NewFolder extends React.Component<INewFolderProps, INewFolderState>
94115

95116
} catch (error) {
96117
console.error('Error adding folder', error);
118+
this.setState({
119+
loading: false,
120+
errorMessage: strings.SomethingWentWrong
121+
});
97122
}
98123

99124
// callback

src/loc/en-us.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,8 @@ define([], () => {
336336
FolderFilterBoxPlaceholder: "Filter folders by name",
337337
FolderExplorerLoading: "Loading folders...",
338338
FolderExplorerNoItems: "This folder doesn't have any subfolders.",
339+
NewFolderIncorrectSymbolsError: "Please enter a name that doesn't include any of these characters: \" * : < > ? / \ |.",
340+
SomethingWentWrong: "Something went wrong",
339341
SelectedLabel: "Selected",
340342
SelectIcon: "Select icon",
341343

src/loc/mystrings.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ declare interface IControlStrings {
302302
FolderFilterBoxPlaceholder: string;
303303
FolderExplorerLoading: string;
304304
FolderExplorerNoItems: string;
305+
NewFolderIncorrectSymbolsError: string;
306+
SomethingWentWrong: string;
305307

306308
//Icon picker
307309
SelectedLabel: string;

src/services/FolderExplorerService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export class FolderExplorerService implements IFolderExplorerService {
102102
try {
103103
const web = Web(webAbsoluteUrl);
104104
folderRelativeUrl = folderRelativeUrl.replace(/\'/ig, "''");
105-
let folderAddResult: IFolderAddResult = await web.getFolderByServerRelativePath(folderRelativeUrl).folders.addUsingPath(encodeURIComponent(name));
105+
let folderAddResult: IFolderAddResult = await web.getFolderByServerRelativePath(folderRelativeUrl).folders.addUsingPath(name);
106106
if (folderAddResult && folderAddResult.data) {
107107
folder = {
108108
Name: folderAddResult.data.Name,

0 commit comments

Comments
 (0)