Skip to content

Commit 87d44f4

Browse files
tsv2013tsv2013
and
tsv2013
authored
Work for surveyjs/private-tasks#437 - Page drag-n-drop issue. No need to expand page (#6675)
* Work for surveyjs/private-tasks#437 - Page drag-n-drop issue. No need to expand page * Try to fix u-tests * Fixed f-test * Removed commented code --------- Co-authored-by: tsv2013 <tsv2013@noreply.github.com>
1 parent f736b6d commit 87d44f4

File tree

5 files changed

+44
-14
lines changed

5 files changed

+44
-14
lines changed

packages/survey-creator-core/src/components/action-container-view-model.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ export class SurveyElementAdornerBase<T extends SurveyElement = SurveyElement> e
109109
onSet: (val, target: SurveyElementAdornerBase<T>) => {
110110
target.renderedCollapsed = val;
111111
if (!val) target.needToRenderContent = true;
112-
if (target.creator.designerStateManager && !target.creator.designerStateManager.isSuspended && target.surveyElement) {
113-
target.creator.designerStateManager.getElementState(target.surveyElement).collapsed = val;
112+
if (target.creator.designerStateManager && target.surveyElement) {
113+
target.creator.designerStateManager.setElementCollapsed(target.surveyElement, val);
114114
}
115115
setTimeout(() => {
116116
target.creator.survey.pages.forEach(p => p.ensureRowsVisibility());
@@ -345,8 +345,7 @@ export class SurveyElementAdornerBase<T extends SurveyElement = SurveyElement> e
345345

346346
protected restoreState(): void {
347347
if (!!this.surveyElement) {
348-
const state = this.creator.designerStateManager?.getElementState(this.surveyElement);
349-
this.collapsed = state.collapsed;
348+
this.collapsed = this.creator.designerStateManager?.getElementCollapsed(this.surveyElement);
350349
}
351350
if (!this.surveyElement || this.surveyElement.isInteractiveDesignElement) {
352351
this.needToRenderContent = !this.collapsed;

packages/survey-creator-core/src/components/tabs/designer-state-manager.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,14 @@ export class DesignerStateManager {
4141
"designerStateManager"
4242
);
4343
}
44-
getElementState(element: SurveyElement): ElementState {
44+
getElementCollapsed(element: SurveyElement): boolean {
45+
return this.getElementState(element).collapsed;
46+
}
47+
setElementCollapsed(element: SurveyElement, isCollapsed: boolean): void {
48+
if (this.isSuspended) return;
49+
this.getElementState(element).collapsed = isCollapsed;
50+
}
51+
private getElementState(element: SurveyElement): ElementState {
4552
return this.createElementState(element, true);
4653
}
4754
private createElementState(element: SurveyElement, checkIfExists: boolean): ElementState {

packages/survey-creator-core/src/expand-collapse-manager.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,17 @@ export class ExpandCollapseManager {
2525
}
2626

2727
private updateCollapsed(elements: SurveyElement[], value: boolean, reason: ElementGetExpandCollapseStateEventReason) {
28-
const canToSaveToStateManager = this.creator.designerStateManager && !this.creator.designerStateManager.isSuspended;
2928
elements.forEach(element => {
3029
if (element.isQuestion && this._lockQuestions) return;
31-
if (canToSaveToStateManager) {
32-
this.creator.designerStateManager.getElementState(element).collapsed =
33-
this.creator.getElementExpandCollapseState(element as Question | PageModel | PanelModel, reason, value);
34-
}
30+
const collapsed = this.creator.getElementExpandCollapseState(element as Question | PageModel | PanelModel, reason, value);
31+
this.creator.designerStateManager?.setElementCollapsed(element, collapsed);
3532
});
3633
for (let i = this.adorners.length - 1; i >= 0; i--) {
3734
const element = this.adorners[i].element;
3835
if (element.isQuestion && this._lockQuestions) continue;
3936
if (elements.indexOf(element) == -1) continue;
4037
if (this.adorners[i].allowExpandCollapse) {
41-
let newState = canToSaveToStateManager ?
42-
this.creator.designerStateManager.getElementState(element).collapsed :
43-
this.creator.getElementExpandCollapseState(element as Question | PageModel | PanelModel, reason, value);
38+
const newState = this.creator.getElementExpandCollapseState(element as Question | PageModel | PanelModel, reason, value);
4439
this.adorners[i].collapsed = newState;
4540
}
4641
}

packages/survey-creator-core/src/survey-elements.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -459,11 +459,13 @@ export class DragDropSurveyElements extends DragDropCore<any> {
459459
const src = this.draggedElement;
460460

461461
if (dragged.isPage && dragged instanceof PageModel) {
462-
const survey = dragged.survey;
462+
const survey = dragged.survey as SurveyModel;
463+
survey.startMovingPage();
463464
const indexOfDraggedPage = survey.pages.indexOf(dragged);
464465
survey.pages.splice(indexOfDraggedPage, 1);
465466
const indexOfDropTarget = survey.pages.indexOf(this.dropTarget) + (this.dragOverLocation === DragTypeOverMeEnum.Top ? 0 : 1);
466467
survey.pages.splice(indexOfDropTarget, 0, dragged);
468+
survey.stopMovingPage();
467469

468470
if (indexOfDraggedPage !== indexOfDropTarget) {
469471
dragged["draggedFrom"] = indexOfDraggedPage < indexOfDropTarget ? indexOfDraggedPage : indexOfDraggedPage + 1;

packages/survey-creator-core/tests/dragdrop-elements.tests.ts

+27
Original file line numberDiff line numberDiff line change
@@ -1579,4 +1579,31 @@ test("isDragInsideItself", () => {
15791579
div2.classList.add("svc-question__content--dragged");
15801580
expect(ddHelper["isDragInsideItself"]([div1, div2])).toBe(true);
15811581
expect(ddHelper["isDragInsideItself"]([div1])).toBe(false);
1582+
});
1583+
1584+
test("drag drop move page shouldn't raise survey onPageAdded", () => {
1585+
const json = {
1586+
"pages": [
1587+
{ "name": "page1", "elements": [{ "type": "text", "name": "q1" }] },
1588+
{ "name": "page2", "elements": [{ "type": "text", "name": "q2" }] },
1589+
{ "name": "page3", "elements": [{ "type": "text", "name": "q3" }] },
1590+
]
1591+
};
1592+
const survey = new SurveyModel(json);
1593+
1594+
let pageAddedCounter = 0;
1595+
survey.onPageAdded.add((s, o) => {
1596+
pageAddedCounter++;
1597+
});
1598+
1599+
const [p1, p2, p3] = survey.pages;
1600+
1601+
const ddHelper: any = new DragDropSurveyElements(survey);
1602+
1603+
expect(pageAddedCounter).toBe(0);
1604+
ddHelper.draggedElement = p3;
1605+
ddHelper.dragOverCore(p2, DragTypeOverMeEnum.Top);
1606+
ddHelper.doDrop();
1607+
expect(p3["draggedFrom"]).toStrictEqual(3);
1608+
expect(pageAddedCounter).toBe(0);
15821609
});

0 commit comments

Comments
 (0)