From 04131bec301084070595a545920886f63eca161f Mon Sep 17 00:00:00 2001 From: Mohammad Amoush Date: Wed, 10 Jul 2019 19:50:19 -0400 Subject: Most bugs fixed. More testing needed. Refactoring needed. --- .../views/presentationview/PresentationElement.tsx | 80 +++++++++++++++++++--- .../views/presentationview/PresentationView.tsx | 34 ++++++--- 2 files changed, 96 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/client/views/presentationview/PresentationElement.tsx b/src/client/views/presentationview/PresentationElement.tsx index a38288109..2b9b73e45 100644 --- a/src/client/views/presentationview/PresentationElement.tsx +++ b/src/client/views/presentationview/PresentationElement.tsx @@ -104,9 +104,9 @@ export default class PresentationElement extends React.Component { + + let droppedDocIndex = this.props.allListElements.indexOf(droppedDoc); + + let dropIndexDiff = Math.abs(this.props.index - droppedDocIndex); + + if (dropIndexDiff <= 1) { + return; + } + + + + let p = this.props; let droppedDocSelectedButtons: boolean[] = await this.getSelectedButtonsOfDoc(droppedDoc); let curDocGuid = StrCast(droppedDoc.presentId, null); @@ -572,13 +587,47 @@ export default class PresentationElement extends React.Component 1) { + let selectedButtonsOrigBelow: boolean[] = await this.getSelectedButtonsOfDoc(this.props.allListElements[indexOfBelow]); + let aboveBelowDoc: Doc = this.props.allListElements[droppedDocIndex - 1]; + let aboveBelowDocSelectedButtons: boolean[] = await this.getSelectedButtonsOfDoc(aboveBelowDoc); + let belowDoc: Doc = this.props.allListElements[indexOfBelow]; + let belowDocPresId = StrCast(belowDoc.presentId); + if (selectedButtonsOrigBelow[buttonIndex.Group]) { + let belowDocGroup: Doc[] = this.props.groupMappings.get(belowDocPresId)!; + if (aboveBelowDocSelectedButtons[buttonIndex.Group]) { + let aboveBelowDocPresId = StrCast(aboveBelowDoc.presentId); + if (this.props.groupMappings.has(aboveBelowDocPresId)) { + let aboveBelowDocGroup: Doc[] = this.props.groupMappings.get(aboveBelowDocPresId)!; + aboveBelowDocGroup.unshift(...belowDocGroup); + this.props.groupMappings.delete(belowDocPresId); + belowDocGroup.forEach((doc: Doc) => doc.presentId = aboveBelowDocPresId); + } + } else { + belowDocGroup.unshift(aboveBelowDoc); + aboveBelowDoc.presentId = belowDocPresId; + } + + + } + } + } + if (droppedDocSelectedButtons[buttonIndex.Group]) { if (before) { @@ -592,6 +641,7 @@ export default class PresentationElement extends React.Component doc.presentId = firstPartNewGuid); let secondPart = aboveGroupArray.slice(targetIndex + 1); + secondPart.unshift(droppedDoc); + droppedDoc.presentId = StrCast(this.props.document.presentId); p.groupMappings.set(StrCast(aboveDoc.presentId, Utils.GenerateGuid()), firstPart); p.groupMappings.set(StrCast(this.props.document.presentId, Utils.GenerateGuid()), secondPart); @@ -655,22 +708,26 @@ export default class PresentationElement extends React.Component doc.presentId = firstPartNewGuid); let secondPart = propsGroupArray.slice(targetIndex + 1); + secondPart.unshift(droppedDoc); + droppedDoc.presentId = StrCast(this.props.document.presentId); p.groupMappings.set(firstPartNewGuid, firstPart); p.groupMappings.set(StrCast(belowDocGuid, Utils.GenerateGuid()), secondPart); } else { - belowGroupArray.push(droppedDoc); + belowGroupArray.splice(belowGroupArray.indexOf(this.props.document), 1); + this.props.document.presentId = Utils.GenerateGuid(); + belowGroupArray.unshift(droppedDoc); droppedDoc.presentId = belowDocGuid; } } - - } } } + this.autoSaveGroupChanges(); + } getSelectedButtonsOfDoc = async (paramDoc: Doc) => { diff --git a/src/client/views/presentationview/PresentationView.tsx b/src/client/views/presentationview/PresentationView.tsx index 5db87a692..1a73f70cb 100644 --- a/src/client/views/presentationview/PresentationView.tsx +++ b/src/client/views/presentationview/PresentationView.tsx @@ -423,19 +423,33 @@ export class PresentationView extends React.Component { } //removing it from the backUp of selected Buttons + // let castedList = Cast(this.presButtonBackUp.selectedButtonDocs, listSpec(Doc)); + // if (castedList) { + // castedList.forEach(async (doc, indexOfDoc) => { + // let curDoc = await doc; + // let curDocId = StrCast(curDoc.docId); + // if (curDocId === removedDoc[Id]) { + // if (castedList) { + // castedList.splice(indexOfDoc, 1); + // return; + // } + // } + // }); + + // } + //removing it from the backUp of selected Buttons + let castedList = Cast(this.presButtonBackUp.selectedButtonDocs, listSpec(Doc)); if (castedList) { - castedList.forEach(async (doc, indexOfDoc) => { + for (let doc of castedList) { let curDoc = await doc; let curDocId = StrCast(curDoc.docId); if (curDocId === removedDoc[Id]) { - if (castedList) { - castedList.splice(indexOfDoc, 1); - return; - } - } - }); + castedList.splice(castedList.indexOf(curDoc), 1); + break; + } + } } //removing it from the backup of groups @@ -463,7 +477,11 @@ export class PresentationView extends React.Component { public removeDocByRef = (doc: Doc) => { let indexOfDoc = this.childrenDocs.indexOf(doc); - this.RemoveDoc(indexOfDoc); + const value = FieldValue(Cast(this.curPresentation.data, listSpec(Doc))); + if (value) { + value.splice(indexOfDoc, 1)[0]; + } + //this.RemoveDoc(indexOfDoc, true); if (indexOfDoc !== - 1) { return true; } -- cgit v1.2.3-70-g09d2