Skip to content

Commit b5b8480

Browse files
committed
Integrated new wrapper class of settings api to our codebase and refactored our codebase
1 parent ff98a83 commit b5b8480

File tree

6 files changed

+157
-63
lines changed

6 files changed

+157
-63
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
"eslint-config-prettier": "^6.10.1",
9595
"eslint-plugin-prettier": "^3.1.2",
9696
"eslint-plugin-react": "^7.20.4",
97-
"husky": "^4.2.5",
97+
"husky": "^5.1.1",
9898
"jest": "^26.6.3",
9999
"jest-fetch-mock": "^3.0.3",
100100
"lint-staged": "^10.2.13",

src/CodeSnippetDisplay.tsx

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ interface ICodeSnippetDisplayProps {
154154
getCurrentWidget: () => Widget;
155155
openCodeSnippetEditor: (args: any) => void;
156156
editorServices: IEditorServices;
157+
updateCodeSnippetWidget: () => void;
157158
}
158159

159160
/**
@@ -179,7 +180,7 @@ export class CodeSnippetDisplay extends React.Component<
179180
constructor(props: ICodeSnippetDisplayProps) {
180181
super(props);
181182
this.state = {
182-
codeSnippets: this.props.codeSnippets,
183+
codeSnippets: props.codeSnippets,
183184
matchIndices: [],
184185
searchValue: '',
185186
filterTags: []
@@ -398,10 +399,13 @@ export class CodeSnippetDisplay extends React.Component<
398399
new_element.onblur = async (): Promise<void> => {
399400
if (target.innerHTML !== new_element.value) {
400401
const newName = new_element.value;
401-
try {
402-
await this.props.codeSnippetManager.renameSnippet(oldName, newName);
403-
} catch (error) {
404-
if (error.message === 'Duplicate Name of Code Snippet'){
402+
this.props.codeSnippetManager.renameSnippet(oldName, newName).then(async (res:boolean) => {
403+
if (res){
404+
console.log(target);
405+
console.log(new_element);
406+
target.innerHTML = new_element.value;
407+
}
408+
else{
405409
new_element.replaceWith(target);
406410

407411
await showDialog({
@@ -411,8 +415,7 @@ export class CodeSnippetDisplay extends React.Component<
411415
});
412416
return;
413417
}
414-
}
415-
target.innerHTML = new_element.value;
418+
});
416419
}
417420
new_element.replaceWith(target);
418421
};
@@ -1217,19 +1220,24 @@ export class CodeSnippetDisplay extends React.Component<
12171220
};
12181221

12191222
static getDerivedStateFromProps(
1220-
props: ICodeSnippetDisplayProps,
1221-
state: ICodeSnippetDisplayState
1223+
nextProps: ICodeSnippetDisplayProps,
1224+
prevState: ICodeSnippetDisplayState
12221225
): ICodeSnippetDisplayState {
1223-
if (state.searchValue === '' && state.filterTags.length === 0) {
1226+
console.log('getDerivedStateFromProps');
1227+
console.log(prevState);
1228+
console.log(nextProps);
1229+
1230+
// this is why state doesn't change
1231+
if (prevState.searchValue === '' && prevState.filterTags.length === 0) {
12241232
return {
1225-
codeSnippets: props.codeSnippets,
1233+
codeSnippets: nextProps.codeSnippetManager.snippets,
12261234
matchIndices: [],
12271235
searchValue: '',
12281236
filterTags: []
12291237
};
12301238
}
12311239

1232-
if (state.searchValue !== '' || state.filterTags.length !== 0) {
1240+
if (prevState.searchValue !== '' || prevState.filterTags.length !== 0) {
12331241
// const newSnippets = props.codeSnippets.filter(codeSnippet => {
12341242
// return (
12351243
// state.matchIndices[codeSnippet.id] !== null ||
@@ -1242,10 +1250,10 @@ export class CodeSnippetDisplay extends React.Component<
12421250
// );
12431251
// });
12441252
return {
1245-
codeSnippets: state.codeSnippets,
1246-
matchIndices: state.matchIndices,
1247-
searchValue: state.searchValue,
1248-
filterTags: state.filterTags
1253+
codeSnippets: prevState.codeSnippets,
1254+
matchIndices: prevState.matchIndices,
1255+
searchValue: prevState.searchValue,
1256+
filterTags: prevState.filterTags
12491257
};
12501258
}
12511259
return null;
@@ -1360,22 +1368,24 @@ export class CodeSnippetDisplay extends React.Component<
13601368
if (editor) {
13611369
editor.dispose();
13621370
}
1363-
13641371
// deleting snippets when there is one snippet active
1365-
this.props.codeSnippetManager.deleteSnippet(codeSnippet.id).then(snippets => {
1366-
1367-
console.log('delete');
1368-
console.log(snippets);
1369-
console.log(this.props.codeSnippetManager.snippets);
1372+
this.props.codeSnippetManager.deleteSnippet(codeSnippet.id).then((result: boolean) => {
1373+
if (result){
1374+
this.props.updateCodeSnippetWidget();
1375+
}
1376+
else{
1377+
console.log('Error in deleting the snippet');
1378+
return;
1379+
}
13701380

13711381
// active tags after delete
1372-
const activeTags = this.getActiveTags();
1382+
// const activeTags = this.getActiveTags();
13731383

13741384
// filterTags: only the tags that are still being used
1375-
this.setState(state => ({
1376-
codeSnippets: snippets,
1377-
filterTags: state.filterTags.filter(tag => activeTags.includes(tag))
1378-
}), () => console.log(this.state));
1385+
// this.setState(state => ({
1386+
// codeSnippets: snippets,
1387+
// filterTags: state.filterTags.filter(tag => activeTags.includes(tag))
1388+
// }), () => console.log(this.state));
13791389
});
13801390
// this.props._codeSnippetWidgetModel.deleteSnippet(codeSnippet.id);
13811391
// this.props._codeSnippetWidgetModel.reorderSnippet();
@@ -1467,7 +1477,7 @@ export class CodeSnippetDisplay extends React.Component<
14671477
description: '',
14681478
language: 'Python',
14691479
code: [],
1470-
id: -1,
1480+
id: 0,
14711481
allTags: this.getActiveTags(),
14721482
fromScratch: true
14731483
});

src/CodeSnippetEditor.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,11 +436,24 @@ export class CodeSnippetEditor extends ReactWidget {
436436

437437
// add new snippet
438438
if(this._codeSnippetEditorMetaData.fromScratch){
439-
await this.contentsService.addSnippet(newSnippet);
439+
this.contentsService.addSnippet(newSnippet).then((res: boolean) => {
440+
if (!res){
441+
console.log("Error in adding snippet");
442+
return false;
443+
}
444+
});
440445
}
441446
// modify existing snippet
442447
else{
443-
await this.contentsService.modifyExistingSnippet(oldName, newSnippet);
448+
console.log('modify existing snippet');
449+
console.log(oldName);
450+
console.log(newSnippet);
451+
this.contentsService.modifyExistingSnippet(oldName, newSnippet).then((res: boolean) => {
452+
if (!res){
453+
console.log("Error in modifying snippet");
454+
return false;
455+
}
456+
});
444457
}
445458

446459
this.saved = true;

src/CodeSnippetInputDialog.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ export function CodeSnippetInputDialog(
8484
return null;
8585
}
8686

87+
console.log(idx);
88+
8789
if (validateForm(result) === false) {
8890
return CodeSnippetInputDialog(codeSnippetWidget, code, idx); // This works but it wipes out all the data they entered previously...
8991
} else {
@@ -129,7 +131,12 @@ function createNewSnippet(
129131
newSnippet: ICodeSnippet,
130132
codeSnippetManager: CodeSnippetService
131133
): void {
132-
codeSnippetManager.addSnippet(newSnippet);
134+
codeSnippetManager.addSnippet(newSnippet).then((res: boolean) => {
135+
if (!res) {
136+
console.log('Error in adding snippet');
137+
return;
138+
}
139+
});
133140

134141
console.log('add');
135142
console.log(codeSnippetManager.snippets);
@@ -173,11 +180,21 @@ async function saveOverWriteFile(
173180
if (value) {
174181
newSnippet.id = oldSnippet.id;
175182

176-
codeSnippetManager.deleteSnippet(oldSnippet.id);
177-
codeSnippetManager.addSnippet(newSnippet);
183+
codeSnippetManager.deleteSnippet(oldSnippet.id).then((res: boolean) => {
184+
if (!res) {
185+
console.log('Error in overwriting a snippet (delete)');
186+
return;
187+
}
188+
});
189+
codeSnippetManager.addSnippet(newSnippet).then((res: boolean) => {
190+
if (!res) {
191+
console.log('Error in overwriting a snippet (add)');
192+
return;
193+
}
194+
});
178195
return codeSnippetManager.snippets;
179196
}
180-
return Promise.reject('File not renamed');
197+
return null;
181198
});
182199
}
183200

src/CodeSnippetService.ts

Lines changed: 56 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -86,25 +86,33 @@ export class CodeSnippetService {
8686

8787
// }
8888

89-
async addSnippet(snippet: ICodeSnippet): Promise<void> {
90-
const numSnippets = this.codeSnippetList.length;
89+
async addSnippet(snippet: ICodeSnippet): Promise<boolean> {
9190
const id = snippet.id;
91+
console.log(id);
9292
this.codeSnippetList.splice(id, 0, snippet);
9393

94-
let i = id;
94+
console.log(this.codeSnippetList);
95+
96+
const numSnippets = this.codeSnippetList.length;
97+
98+
// update id's of snippets.
99+
let i = id + 1;
95100
for (; i < numSnippets; i++) {
96101
this.codeSnippetList[i].id += 1;
97102
}
98103

104+
console.log(this.codeSnippetList);
105+
99106
console.log(this.codeSnippetList);
100107
await this.settingManager
101108
.set('snippets', (this.codeSnippetList as unknown) as PartialJSONValue)
102-
.catch(e => {
103-
throw e;
109+
.catch(_ => {
110+
return false;
104111
});
112+
return true;
105113
}
106114

107-
async deleteSnippet(id: number): Promise<ICodeSnippet[]> {
115+
async deleteSnippet(id: number): Promise<boolean> {
108116
let numSnippets = this.codeSnippetList.length;
109117

110118
// should never satisfy this condition
@@ -126,18 +134,19 @@ export class CodeSnippetService {
126134

127135
await this.settingManager
128136
.set('snippets', (this.codeSnippetList as unknown) as PartialJSONValue)
129-
.catch(e => {
130-
throw e;
137+
.catch(_ => {
138+
return false;
131139
});
132140

133-
return this.codeSnippetList;
141+
return true;
134142
}
135143

136-
async renameSnippet(oldName: string, newName: string): Promise<void> {
144+
async renameSnippet(oldName: string, newName: string): Promise<boolean> {
145+
console.log('renaming');
137146
try {
138147
this.duplicateNameExists(newName);
139148
} catch (e) {
140-
throw e;
149+
return false;
141150
}
142151

143152
for (const snippet of this.codeSnippetList) {
@@ -148,9 +157,10 @@ export class CodeSnippetService {
148157
}
149158
await this.settingManager
150159
.set('snippets', (this.codeSnippetList as unknown) as PartialJSONValue)
151-
.catch(e => {
152-
throw e;
160+
.catch(_ => {
161+
return false;
153162
});
163+
return true;
154164
}
155165

156166
duplicateNameExists(newName: string): void {
@@ -164,22 +174,28 @@ export class CodeSnippetService {
164174
async modifyExistingSnippet(
165175
oldName: string,
166176
newSnippet: ICodeSnippet
167-
): Promise<void> {
177+
): Promise<boolean> {
178+
console.log(this.codeSnippetList);
168179
for (let snippet of this.codeSnippetList) {
169180
if (snippet.name == oldName) {
170-
snippet = newSnippet;
181+
this.codeSnippetList.splice(snippet.id, 1, newSnippet);
171182
break;
172183
}
173184
}
174185

186+
console.log(this.codeSnippetList);
187+
175188
await this.settingManager
176189
.set('snippets', (this.codeSnippetList as unknown) as PartialJSONValue)
177-
.catch(e => {
178-
throw e;
190+
.catch(_ => {
191+
return false;
179192
});
193+
return true;
180194
}
181195

182-
async moveSnippet(fromIdx: number, toIdx: number): Promise<void> {
196+
async moveSnippet(fromIdx: number, toIdx: number): Promise<boolean> {
197+
console.log(fromIdx);
198+
console.log(toIdx);
183199
if (toIdx > fromIdx) {
184200
toIdx = toIdx - 1;
185201
}
@@ -188,26 +204,43 @@ export class CodeSnippetService {
188204
return;
189205
}
190206

207+
const snippetToMove = this.codeSnippetList[fromIdx];
208+
this.deleteSnippet(fromIdx).then((res: boolean) => {
209+
if (!res) {
210+
console.log('Error in moving snippet(delete)');
211+
return false;
212+
}
213+
});
214+
snippetToMove.id = toIdx;
215+
this.addSnippet(snippetToMove).then((res: boolean) => {
216+
if (!res) {
217+
console.log('Error in moving snippet(add)');
218+
return false;
219+
}
220+
});
221+
191222
await this.settingManager
192223
.set('snippets', (this.codeSnippetList as unknown) as PartialJSONValue)
193-
.catch(e => {
194-
throw e;
224+
.catch(_ => {
225+
return false;
195226
});
227+
return true;
196228
}
197229

198230
private sortSnippets(): void {
199231
this.codeSnippetList.sort((a, b) => a.id - b.id);
200232
}
201233

202234
// order snippets just in case when it gets shared between users
203-
async orderSnippets(): Promise<void> {
235+
async orderSnippets(): Promise<boolean> {
204236
this.sortSnippets();
205237
this.codeSnippetList.forEach((snippet, i) => (snippet.id = i));
206238

207239
await this.settingManager
208240
.set('snippets', (this.codeSnippetList as unknown) as PartialJSONValue)
209-
.catch(e => {
210-
throw e;
241+
.catch(_ => {
242+
return false;
211243
});
244+
return true;
212245
}
213246
}

0 commit comments

Comments
 (0)