From 2ca34ee79af3fc4bcf8e3c431c11c1ac25464130 Mon Sep 17 00:00:00 2001 From: dmaurya929 Date: Wed, 15 May 2024 03:05:39 +0530 Subject: [PATCH 1/5] Fix adding items in loop --- ui.frontend/src/view/InstanceManager.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ui.frontend/src/view/InstanceManager.js b/ui.frontend/src/view/InstanceManager.js index b65df09bc9..7cae509a19 100644 --- a/ui.frontend/src/view/InstanceManager.js +++ b/ui.frontend/src/view/InstanceManager.js @@ -282,13 +282,29 @@ class InstanceManager { let afterElement = this.children[0].element.parentElement; this.parentElement.insertBefore(htmlElement, afterElement); } else { - let beforeViewElement = (beforeElement != null) ? beforeElement : this.children[instanceIndex - 1].element.parentElement; + let beforeViewElement = this.#getElementAt(instanceIndex - 1); beforeViewElement.after(htmlElement); } } return htmlElement; } + /** + * Gets the HTML element at the given index + * @param index {number} The index of the element + * @returns {Element} + */ + #getElementAt(index) { + let childModel = this._model.items.find((model) => model.index === index); + let viewElement = this.parentElement.querySelector(`#${childModel.id}`); + if (viewElement) { + while (viewElement.parentElement !== this.parentElement) { + viewElement = viewElement.parentElement; + } + } + return viewElement; + } + /** * Removes HTML for the removed instance * @param removedInstanceView {object} The view of the removed instance From 92366c5e788f3ed1a6db8de52a9269910ed6d50d Mon Sep 17 00:00:00 2001 From: dmaurya929 Date: Wed, 15 May 2024 03:05:39 +0530 Subject: [PATCH 2/5] Fix adding items in loop --- ui.frontend/src/view/InstanceManager.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ui.frontend/src/view/InstanceManager.js b/ui.frontend/src/view/InstanceManager.js index b65df09bc9..7cae509a19 100644 --- a/ui.frontend/src/view/InstanceManager.js +++ b/ui.frontend/src/view/InstanceManager.js @@ -282,13 +282,29 @@ class InstanceManager { let afterElement = this.children[0].element.parentElement; this.parentElement.insertBefore(htmlElement, afterElement); } else { - let beforeViewElement = (beforeElement != null) ? beforeElement : this.children[instanceIndex - 1].element.parentElement; + let beforeViewElement = this.#getElementAt(instanceIndex - 1); beforeViewElement.after(htmlElement); } } return htmlElement; } + /** + * Gets the HTML element at the given index + * @param index {number} The index of the element + * @returns {Element} + */ + #getElementAt(index) { + let childModel = this._model.items.find((model) => model.index === index); + let viewElement = this.parentElement.querySelector(`#${childModel.id}`); + if (viewElement) { + while (viewElement.parentElement !== this.parentElement) { + viewElement = viewElement.parentElement; + } + } + return viewElement; + } + /** * Removes HTML for the removed instance * @param removedInstanceView {object} The view of the removed instance From 0d6ad56e2f81819f399aed9e12699b615cbad9fb Mon Sep 17 00:00:00 2001 From: dmaurya929 Date: Thu, 20 Jun 2024 16:37:34 +0530 Subject: [PATCH 3/5] FORMS-14419 Adding fix for complex layouts --- .../clientlibs/site/js/accordionview.js | 10 +++-- .../clientlibs/site/js/checkboxgroupview.js | 6 +++ .../clientlibs/site/js/panelcontainerview.js | 3 +- .../wizard/clientlibs/site/js/wizardview.js | 36 +++++++++------- ui.frontend/src/view/FormTabs.js | 41 +++++++++++-------- ui.frontend/src/view/InstanceManager.js | 4 +- .../accordion.repeatability.runtime.spec.js | 16 ++++++++ .../tabsontop.runtime.repeatability.spec.js | 13 ++++++ .../wizard.runtime.repeatability.spec.js | 14 ++++++- 9 files changed, 103 insertions(+), 40 deletions(-) diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js index 0b9df2d561..eb6197bbd7 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js @@ -509,13 +509,17 @@ result.parentElement = this.element; } } else { - var previousInstanceElement = instanceManager.children[instanceIndex - 1].element; - var previousInstanceItemDiv = this.#getItemById(previousInstanceElement.id + Accordion.idSuffixes.item); - result.beforeViewElement = previousInstanceItemDiv; + var previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1); + result.beforeViewElement = previousInstanceElement; } return result; } + #getRepeatableElementAt(instanceManager, index) { + let childId = instanceManager._model.items.find((model) => model.index === index)?.id; + return this.element.querySelector(`#${childId}${Accordion.idSuffixes.item}`); + } + #prepareAccordionMarkupToBeAdded(instanceManager, addedModel, htmlElement) { var accordionItemDivToBeRepeated = this._templateHTML[instanceManager.getId()]['accordionItemDiv'].cloneNode(true); var itemDivId = accordionItemDivToBeRepeated.id; diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/checkboxgroup/v1/checkboxgroup/clientlibs/site/js/checkboxgroupview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/checkboxgroup/v1/checkboxgroup/clientlibs/site/js/checkboxgroupview.js index ed7347927a..00f6751843 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/checkboxgroup/v1/checkboxgroup/clientlibs/site/js/checkboxgroupview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/checkboxgroup/v1/checkboxgroup/clientlibs/site/js/checkboxgroupview.js @@ -191,6 +191,12 @@ this.element.setAttribute("data-cmp-required", required); } } + + syncMarkupWithModel() { + super.syncMarkupWithModel(); + this.updateEnum(this._model.enum); + this.updateEnumNames(this._model.enumNames); + } } FormView.Utils.setupField(({element, formContainer}) => { diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js index e2922ef795..da1d1ce77b 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js @@ -173,8 +173,7 @@ result.parentElement = this._templateHTML['divToAppendChild']; } } else { - var previousInstanceElement = instanceManager.children[instanceIndex - 1].element; - var previousInstanceItemDiv = this.#getCachedElementById(previousInstanceElement.id).parentElement; + var previousInstanceItemDiv = instanceManager.getElementAt(instanceIndex - 1); result.beforeViewElement = previousInstanceItemDiv; } return result; diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/wizard/v1/wizard/clientlibs/site/js/wizardview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/wizard/v1/wizard/clientlibs/site/js/wizardview.js index c86095258a..815bd476fa 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/wizard/v1/wizard/clientlibs/site/js/wizardview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/wizard/v1/wizard/clientlibs/site/js/wizardview.js @@ -256,18 +256,20 @@ const tabs = this.#getCachedTabs(); if (wizardPanels) { for (let i = 0; i < wizardPanels.length; i++) { - if (i === parseInt(this.#_active)) { - wizardPanels[i].classList.add(Wizard.selectors.active.wizardpanel); - wizardPanels[i].removeAttribute(FormView.Constants.ARIA_HIDDEN); - tabs[i].classList.add(Wizard.selectors.active.tab); - tabs[i].setAttribute(FormView.Constants.ARIA_SELECTED, true); - tabs[i].setAttribute(FormView.Constants.TABINDEX, "0"); - } else { - wizardPanels[i].classList.remove(Wizard.selectors.active.wizardpanel); - wizardPanels[i].setAttribute(FormView.Constants.ARIA_HIDDEN, true); - tabs[i].classList.remove(Wizard.selectors.active.tab); - tabs[i].setAttribute(FormView.Constants.ARIA_SELECTED, false); - tabs[i].setAttribute(FormView.Constants.TABINDEX, "-1"); + if(tabs[i]) { + if (i === parseInt(this.#_active)) { + wizardPanels[i].classList.add(Wizard.selectors.active.wizardpanel); + wizardPanels[i].removeAttribute(FormView.Constants.ARIA_HIDDEN); + tabs[i].classList.add(Wizard.selectors.active.tab); + tabs[i].setAttribute(FormView.Constants.ARIA_SELECTED, true); + tabs[i].setAttribute(FormView.Constants.TABINDEX, "0"); + } else { + wizardPanels[i].classList.remove(Wizard.selectors.active.wizardpanel); + wizardPanels[i].setAttribute(FormView.Constants.ARIA_HIDDEN, true); + tabs[i].classList.remove(Wizard.selectors.active.tab); + tabs[i].setAttribute(FormView.Constants.ARIA_SELECTED, false); + tabs[i].setAttribute(FormView.Constants.TABINDEX, "-1"); + } } } } @@ -617,13 +619,17 @@ result.beforeViewElement = this.getPreviousButtonDiv(); } } else { - let previousInstanceElement = instanceManager.children[instanceIndex - 1].element; - let previousInstanceWizardPanelIndex = this.#getTabIndexById(previousInstanceElement.id + Wizard.#tabIdSuffix); - result.beforeViewElement = this.#getCachedWizardPanels()[previousInstanceWizardPanelIndex]; + let previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1) + result.beforeViewElement = previousInstanceElement; } return result; } + #getRepeatableElementAt(instanceManager, index) { + let childId = instanceManager._model.items.find((model) => model.index === index)?.id; + return this.element.querySelector(`#${childId}${Wizard.#wizardPanelIdSuffix}`); + } + updateChildVisibility(visible, state) { this.updateVisibilityOfNavigationElement(this.#getTabNavElementById(state.id + Wizard.#tabIdSuffix), visible); let activeTabNavElement = this.#getCachedTabs()[this.#_active]; diff --git a/ui.frontend/src/view/FormTabs.js b/ui.frontend/src/view/FormTabs.js index 650133ea9e..a69c50110f 100644 --- a/ui.frontend/src/view/FormTabs.js +++ b/ui.frontend/src/view/FormTabs.js @@ -106,20 +106,23 @@ class FormTabs extends FormPanel { var tabs = this.#getCachedTabs(); if (tabpanels) { for (var i = 0; i < tabpanels.length; i++) { - if (tabs[i].id === this.#_active) { - tabpanels[i].classList.add(this.#_selectors.active.tabpanel); - tabpanels[i].removeAttribute(Constants.ARIA_HIDDEN); - tabs[i].classList.add(this.#_selectors.active.tab); - tabs[i].setAttribute(Constants.ARIA_SELECTED, true); - tabs[i].setAttribute(Constants.TABINDEX, "0"); - tabs[i].setAttribute(Constants.ARIA_CURRENT, "true"); - } else { - tabpanels[i].classList.remove(this.#_selectors.active.tabpanel); - tabpanels[i].setAttribute(Constants.ARIA_HIDDEN, true); - tabs[i].classList.remove(this.#_selectors.active.tab); - tabs[i].setAttribute(Constants.ARIA_SELECTED, false); - tabs[i].setAttribute(Constants.TABINDEX, "-1"); - tabs[i].setAttribute(Constants.ARIA_CURRENT, "false"); + // In case of repeatability ( adding instance via loop) tabs and tabpanels may be out of sync, it will sync in future + if(tabs[i]) { + if (tabs[i].id === this.#_active) { + tabpanels[i].classList.add(this.#_selectors.active.tabpanel); + tabpanels[i].removeAttribute(Constants.ARIA_HIDDEN); + tabs[i].classList.add(this.#_selectors.active.tab); + tabs[i].setAttribute(Constants.ARIA_SELECTED, true); + tabs[i].setAttribute(Constants.TABINDEX, "0"); + tabs[i].setAttribute(Constants.ARIA_CURRENT, "true"); + } else { + tabpanels[i].classList.remove(this.#_selectors.active.tabpanel); + tabpanels[i].setAttribute(Constants.ARIA_HIDDEN, true); + tabs[i].classList.remove(this.#_selectors.active.tab); + tabs[i].setAttribute(Constants.ARIA_SELECTED, false); + tabs[i].setAttribute(Constants.TABINDEX, "-1"); + tabs[i].setAttribute(Constants.ARIA_CURRENT, "false"); + } } } } @@ -532,13 +535,17 @@ class FormTabs extends FormPanel { result.beforeViewElement = this.#getTabListElement(); } } else { - var previousInstanceElement = instanceManager.children[instanceIndex - 1].element; - var previousInstanceTabPanelIndex = this.#getTabIndexById(previousInstanceElement.id + this.#tabIdSuffix); - result.beforeViewElement = this.#getCachedTabPanels()[previousInstanceTabPanelIndex]; + var previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1); + result.beforeViewElement = previousInstanceElement; } return result; } + #getRepeatableElementAt(instanceManager, index) { + let childId = instanceManager._model.items.find((model) => model.index === index)?.id; + return this.element.querySelector(`#${childId}${this.#tabPanelIdSuffix}`); + } + /** * Gets the child view at the specified index. * @param {number} index - The index of the child view. diff --git a/ui.frontend/src/view/InstanceManager.js b/ui.frontend/src/view/InstanceManager.js index 7cae509a19..28a69fe11e 100644 --- a/ui.frontend/src/view/InstanceManager.js +++ b/ui.frontend/src/view/InstanceManager.js @@ -282,7 +282,7 @@ class InstanceManager { let afterElement = this.children[0].element.parentElement; this.parentElement.insertBefore(htmlElement, afterElement); } else { - let beforeViewElement = this.#getElementAt(instanceIndex - 1); + let beforeViewElement = this.getElementAt(instanceIndex - 1); beforeViewElement.after(htmlElement); } } @@ -294,7 +294,7 @@ class InstanceManager { * @param index {number} The index of the element * @returns {Element} */ - #getElementAt(index) { + getElementAt(index) { let childModel = this._model.items.find((model) => model.index === index); let viewElement = this.parentElement.querySelector(`#${childModel.id}`); if (viewElement) { diff --git a/ui.tests/test-module/specs/accordion/accordion.repeatability.runtime.spec.js b/ui.tests/test-module/specs/accordion/accordion.repeatability.runtime.spec.js index 5dbc6c925f..2b0f4993fc 100644 --- a/ui.tests/test-module/specs/accordion/accordion.repeatability.runtime.spec.js +++ b/ui.tests/test-module/specs/accordion/accordion.repeatability.runtime.spec.js @@ -196,6 +196,22 @@ describe("Form with Accordion Container with repeatable elements", () => { }) cy.expectNoConsoleErrors(); }) + + it('test adding panel programmatically', () => { + getItemDivs().should('have.length', 5); + getAccordionPanels().should('have.length', 5); + getAccordionButtons().should('have.length', 5); + cy.wrap(null).then(() => { + const instanceManager = formContainer._model.items[0].items[0]; + for(let i=0; i<4; i++){ + instanceManager.dispatch({type: "addItem"}) + } + }).then(() => { + getItemDivs().should('have.length', 8); + getAccordionPanels().should('have.length', 8); + getAccordionButtons().should('have.length', 8); + }) + }); }) describe("Form with Accordion Container with nested repeatable elements", () => { diff --git a/ui.tests/test-module/specs/tabsontop/tabsontop.runtime.repeatability.spec.js b/ui.tests/test-module/specs/tabsontop/tabsontop.runtime.repeatability.spec.js index 3c440ae07e..68b9332bfa 100644 --- a/ui.tests/test-module/specs/tabsontop/tabsontop.runtime.repeatability.spec.js +++ b/ui.tests/test-module/specs/tabsontop/tabsontop.runtime.repeatability.spec.js @@ -131,5 +131,18 @@ describe("Form with TabsOnTop Container", () => { }) }) + it('test adding panel programmatically', () => { + getTabs().should('have.length', 4); + getTabPanels().should('have.length', 4); + cy.wrap(null).then(() => { + const instanceManager = formContainer._model.items[0].items[0]; + for(let i=0; i<5; i++){ + instanceManager.dispatch({type: "addItem"}) + } + }).then(() => { + getTabs().should('have.length', 7); + getTabPanels().should('have.length', 7); + }) + }); }) diff --git a/ui.tests/test-module/specs/wizard/wizard.runtime.repeatability.spec.js b/ui.tests/test-module/specs/wizard/wizard.runtime.repeatability.spec.js index 68d0250ef2..f749a1829b 100644 --- a/ui.tests/test-module/specs/wizard/wizard.runtime.repeatability.spec.js +++ b/ui.tests/test-module/specs/wizard/wizard.runtime.repeatability.spec.js @@ -138,7 +138,19 @@ describe("Form with Wizard Container", () => { cy.expectNoConsoleErrors(); }) - + it('test adding panel programmatically', () => { + getTabs().should('have.length', 4); + getWizardPanels().should('have.length', 4); + cy.wrap(null).then(() => { + const instanceManager = formContainer._model.items[0].items[0]; + for(let i=0; i<5; i++){ + instanceManager.dispatch({type: "addItem"}) + } + }).then(() => { + getTabs().should('have.length', 6); + getWizardPanels().should('have.length', 6); + }) + }); }) describe('visibility of navigation buttons', function () { From 787b747032e916e1e3a73fe934c06c322e48f5a8 Mon Sep 17 00:00:00 2001 From: dmaurya929 Date: Sun, 28 Jul 2024 16:34:49 +0530 Subject: [PATCH 4/5] FORMS-14419 add test --- .../add-instances-via-loop/.content.xml | 23 +++++++ .../renditions/cq5dam.thumbnail.140.100.png | Bin 0 -> 1000 bytes .../.content.xml | 7 ++ .../renditions/cq5dam.thumbnail.319.319.png | Bin 0 -> 3181 bytes .../.content.xml | 7 ++ .../renditions/cq5dam.thumbnail.48.48.png | Bin 0 -> 387 bytes .../.content.xml | 7 ++ .../add-instances-via-loop/.content.xml | 64 ++++++++++++++++++ ...r.repeatability.addinstancevialoop.spec.js | 62 +++++++++++++++++ 9 files changed, 170 insertions(+) create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png.dir/.content.xml create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png create mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml create mode 100644 it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml create mode 100644 ui.tests/test-module/specs/panelcontainer/panelcontainer.repeatability.addinstancevialoop.spec.js diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml new file mode 100644 index 0000000000..1507a3f6cc --- /dev/null +++ b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png new file mode 100644 index 0000000000000000000000000000000000000000..7e350c86b0063bb03eccfb24fab8636bb2b1c534 GIT binary patch literal 1000 zcmeAS@N?(olHy`uVBq!ia0vp^6+oQI!3HGTbkwIaFfgz8ba4!+hH6!^l~=PCK0e{Yx^LgUY2Dr2FTYkT+!**lcE{B$&y^uu z|4NTfO42IOn?8BxPRo-iMsZ5NdG6$GPtDHuzIOfk(u)}_$0jFfZE(AKV)Eq4MI|LB zpHA#!vbV80@#)hhA75Y3r9qs%>L)`UG)|r@JagvEiOtQ;6aNKWd0E2r?qgz1T->Qw zuU4&Dvxa5i-H%IV@~n9u^EYzamMtPRZ(bgs|GQpi$IhJ-TU%Ly#wgb+_Dwo@fO-4& z?UT+wfBN&MrAgYs%a-A+%PuJO&+*!4e^H1e= zz20XT|MmJ7Uwn0P`P{1i=6^rTaOIH^WUfAR;G;o-3(p%)=HrJC2pVos=aJ!Oc0Y1p zoBo;B5C65bdh`9F1l#NNw(Q@lCr_wI*lUrVo*twj5;u3=ytceE(R_E_ zmN}ny++P;I#M8rOLs9(SvuVa9g*xolimw)z&2Rp_*V91oM|}iejwH-hn3Fk~e{@ohO9vXC2)0LcTRj>D%vq+l{f4=Rcn#{?_&3D&>{`T<@J!bC$P0Kb1G7 z^X7qFN$-FBu!uPLyf1Qrw%pfk3$CUvW>#Z^Js`XNK*)ovty-5aU*5E1 zheV7`c};}fw-*=6*S%9;^t + + + diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d97cde70adf169f1018ad4fc83bc39e52e5540 GIT binary patch literal 3181 zcmd^CX;70%8V*v6GpL}jDiR^cAIXhwq|NlZ|VELS3+94bV^kqH<+LV#Rf!bWG^TL15lshS^MZ*})u-CghT zJWuBz4h>jgZflM}AXWq(^gn_?nD`mT*I$_#S0p(ONCaZ}jzIrCM>C@3!<~gk2k1=- zc%5~GkWiG!>H-}VB?!|$wOgG)d}o>6o_Kb*?KC8>Uou6F1$))^-vpINhO2P(D~_cV)Zt)Mw{8Z+r8^hz_6Z z7y*q813;RT`BxE23UaH!v*r3UY+HQb#=;A6@reHwIF+iG8Ryh?y(07kzFV49xQ;S8>} zv1f$xb$#*L(t%_moT#GDF`42(KXG$khq6qXPDrNsY!?B%ERo6hD!w^46Yqv;m?C6? zD*4YYLG&w(1XT}2`Dl4)+MWnwlAC(>W8;Z&QEyd+m z#3?Pz3<>s0P6~!5h6-u(cB4Z&{lkYsl8B*sanpbld}FMWWZgAEf#TPa4OZDnhuW1D zQZJFJK8!qg-B_B$g|_CozMHLOYsXN&9O;on+898VvjnAFfG6te%7Sb<9KqEY7bl8T zjr4{-B`3Kigkm2=Y4q-isFWs$&R(BIPiVT7T6p>m9T0NlBk8+=7Uq)X(LNcGVk`e} z=n0@n#(O)<96ce2&hXcICm-PN$Q6CCm!BLHodxstx-xvsw*+6M$B)&z`@Io z#7R9kc_r?+Dhrfv<;IO0wQbu^2 z?%bKZ-oWgScDOycxw*a7Ar)+CYR~QcvKP1Zkw@bhMlPgUqN?u%6cPyLtb*9)+!b`X zKQtIQR&z(gi!}^o)#6pt!$Gdh&xq zrr?z`lom$!e$|NW&#E=^nuPd^psI30*D%$8Kj@=|h&e}9Ki=eind_7>YjtkXpr_k? z4-LK^>(oR%6`W6l)e0f@bgW2GzB8fs=JvQxWSS6YAvQ`0P8gm=6q6e|I-B?|hhQTu zZN@$zL4m2f^#)ieGCs*ok+6qXT1rH)3eJpo+@Ra-g`Sk}&llGkQ?oJ2s2{R~rCX!Q zeYL;b@jwx>55l%3#3f@b6!-IR>^Sr3 z7{9$w=iR-^FLD(ItPA@>SA8kCT3ZX&_R0EceEhOLsj>bsN;O}#GyZR%x$;Zq{N2p- a?iK~w9WQRr)EU1Kh`{}!{txz^{^8$8%x~`i literal 0 HcmV?d00001 diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml new file mode 100644 index 0000000000..34d9f64840 --- /dev/null +++ b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml @@ -0,0 +1,7 @@ + + + + diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png new file mode 100644 index 0000000000000000000000000000000000000000..8aae24bb92b1711271888ec23749bf45aead9024 GIT binary patch literal 387 zcmV-}0et?6P)Nkl2Wd5Qg*r|4@67RzX_)13lD3dXaiiV|8tJy-a-rLfM7vhk-TC9G=TeX7Dkv`+At? znQobbUbr<_AT}%z8y1KS3&e&6E-_6L2_cO7H3 z3aabc=(!Li0Gg(uBuS|2I-|EDr97k8S0JC~IhAE;^jrxR0C>BnzNe2y((Cct3(WjT zb^ZtRy*_Lb0G&|u_$KJHmtH(9Gnm!)`EnJ3=l98|+jv@LSYW#TbRQOKp;dg)O)T32_X6+0^5R^ElxuokvvUP8iv8>yAUMc%5Fbs_5=&Wh6Q57 h0)nYrp^i002ovPDHLkV1iRkr)mHI literal 0 HcmV?d00001 diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml new file mode 100644 index 0000000000..34d9f64840 --- /dev/null +++ b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml @@ -0,0 +1,7 @@ + + + + diff --git a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml new file mode 100644 index 0000000000..92cbdbac87 --- /dev/null +++ b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/.content.xml @@ -0,0 +1,64 @@ + + + + + + + + + + diff --git a/ui.tests/test-module/specs/panelcontainer/panelcontainer.repeatability.addinstancevialoop.spec.js b/ui.tests/test-module/specs/panelcontainer/panelcontainer.repeatability.addinstancevialoop.spec.js new file mode 100644 index 0000000000..61d1b24fea --- /dev/null +++ b/ui.tests/test-module/specs/panelcontainer/panelcontainer.repeatability.addinstancevialoop.spec.js @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright 2024 Adobe + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ + +describe("Repeatability Tests in Panel Container", () => { + const pagePath = "content/forms/af/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop.html"; + + let formContainer = null; + + beforeEach(() => { + cy.previewFormWithPanel(pagePath).then(p => { + formContainer = p; + }); + }); + + it("add instance using loop and change checkbox enums", () => { + const instanceManager = formContainer._model.items[0]; + const initialNoOfChild = instanceManager.items.length; + expect(initialNoOfChild).to.equal(1); + cy.get(".cmp-adaptiveform-container__wrapper") + .children() + .should("have.length", 1); + + cy.wrap(null).then(() => { + for(let i=0; i < 4; i++) { + if(i !== 0) { + instanceManager.dispatch({type: "addItem"}); + } + const chbx = instanceManager.items[i].items[0]; + chbx.enum = [ "item1" + i, "item2" + i]; + chbx.enumNames = [ "Item1" + i, "Item2" + i]; + } + }) + + cy.get(".cmp-adaptiveform-container__wrapper > div") + .should("have.length", 4); + + cy.wrap(null).then(() => { + for(let i=0; i < 4; i++) { + const chbx = instanceManager.items[i].items[0]; + expect(chbx.enum).to.deep.equal([ "item1" + i, "item2" + i]); + expect(chbx.enumNames).to.deep.equal([ "Item1" + i, "Item2" + i]); + cy.get("#" + chbx.id + " [value='item1" + i + "']") + .should("be.visible"); + cy.get("#" + chbx.id + " [value='item2" + i + "']") + .should("be.visible"); + } + }) + }) +}) \ No newline at end of file From fe38983d6023075eff154581fc1ff107a9eeb18a Mon Sep 17 00:00:00 2001 From: dmaurya929 Date: Sun, 28 Jul 2024 16:39:17 +0530 Subject: [PATCH 5/5] FORMS-14419 review comment --- .../renditions/cq5dam.thumbnail.140.100.png | Bin 1000 -> 0 bytes .../.content.xml | 7 ------- .../renditions/cq5dam.thumbnail.319.319.png | Bin 3181 -> 0 bytes .../.content.xml | 7 ------- .../renditions/cq5dam.thumbnail.48.48.png | Bin 387 -> 0 bytes .../cq5dam.thumbnail.48.48.png.dir/.content.xml | 7 ------- .../clientlibs/site/js/accordionview.js | 2 +- .../clientlibs/site/js/panelcontainerview.js | 2 +- ui.frontend/src/view/FormTabs.js | 2 +- 9 files changed, 3 insertions(+), 24 deletions(-) delete mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png delete mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png.dir/.content.xml delete mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png delete mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml delete mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png delete mode 100644 it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.140.100.png deleted file mode 100644 index 7e350c86b0063bb03eccfb24fab8636bb2b1c534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 zcmeAS@N?(olHy`uVBq!ia0vp^6+oQI!3HGTbkwIaFfgz8ba4!+hH6!^l~=PCK0e{Yx^LgUY2Dr2FTYkT+!**lcE{B$&y^uu z|4NTfO42IOn?8BxPRo-iMsZ5NdG6$GPtDHuzIOfk(u)}_$0jFfZE(AKV)Eq4MI|LB zpHA#!vbV80@#)hhA75Y3r9qs%>L)`UG)|r@JagvEiOtQ;6aNKWd0E2r?qgz1T->Qw zuU4&Dvxa5i-H%IV@~n9u^EYzamMtPRZ(bgs|GQpi$IhJ-TU%Ly#wgb+_Dwo@fO-4& z?UT+wfBN&MrAgYs%a-A+%PuJO&+*!4e^H1e= zz20XT|MmJ7Uwn0P`P{1i=6^rTaOIH^WUfAR;G;o-3(p%)=HrJC2pVos=aJ!Oc0Y1p zoBo;B5C65bdh`9F1l#NNw(Q@lCr_wI*lUrVo*twj5;u3=ytceE(R_E_ zmN}ny++P;I#M8rOLs9(SvuVa9g*xolimw)z&2Rp_*V91oM|}iejwH-hn3Fk~e{@ohO9vXC2)0LcTRj>D%vq+l{f4=Rcn#{?_&3D&>{`T<@J!bC$P0Kb1G7 z^X7qFN$-FBu!uPLyf1Qrw%pfk3$CUvW>#Z^Js`XNK*)ovty-5aU*5E1 zheV7`c};}fw-*=6*S%9;^t - - - diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png deleted file mode 100644 index c3d97cde70adf169f1018ad4fc83bc39e52e5540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3181 zcmd^CX;70%8V*v6GpL}jDiR^cAIXhwq|NlZ|VELS3+94bV^kqH<+LV#Rf!bWG^TL15lshS^MZ*})u-CghT zJWuBz4h>jgZflM}AXWq(^gn_?nD`mT*I$_#S0p(ONCaZ}jzIrCM>C@3!<~gk2k1=- zc%5~GkWiG!>H-}VB?!|$wOgG)d}o>6o_Kb*?KC8>Uou6F1$))^-vpINhO2P(D~_cV)Zt)Mw{8Z+r8^hz_6Z z7y*q813;RT`BxE23UaH!v*r3UY+HQb#=;A6@reHwIF+iG8Ryh?y(07kzFV49xQ;S8>} zv1f$xb$#*L(t%_moT#GDF`42(KXG$khq6qXPDrNsY!?B%ERo6hD!w^46Yqv;m?C6? zD*4YYLG&w(1XT}2`Dl4)+MWnwlAC(>W8;Z&QEyd+m z#3?Pz3<>s0P6~!5h6-u(cB4Z&{lkYsl8B*sanpbld}FMWWZgAEf#TPa4OZDnhuW1D zQZJFJK8!qg-B_B$g|_CozMHLOYsXN&9O;on+898VvjnAFfG6te%7Sb<9KqEY7bl8T zjr4{-B`3Kigkm2=Y4q-isFWs$&R(BIPiVT7T6p>m9T0NlBk8+=7Uq)X(LNcGVk`e} z=n0@n#(O)<96ce2&hXcICm-PN$Q6CCm!BLHodxstx-xvsw*+6M$B)&z`@Io z#7R9kc_r?+Dhrfv<;IO0wQbu^2 z?%bKZ-oWgScDOycxw*a7Ar)+CYR~QcvKP1Zkw@bhMlPgUqN?u%6cPyLtb*9)+!b`X zKQtIQR&z(gi!}^o)#6pt!$Gdh&xq zrr?z`lom$!e$|NW&#E=^nuPd^psI30*D%$8Kj@=|h&e}9Ki=eind_7>YjtkXpr_k? z4-LK^>(oR%6`W6l)e0f@bgW2GzB8fs=JvQxWSS6YAvQ`0P8gm=6q6e|I-B?|hhQTu zZN@$zL4m2f^#)ieGCs*ok+6qXT1rH)3eJpo+@Ra-g`Sk}&llGkQ?oJ2s2{R~rCX!Q zeYL;b@jwx>55l%3#3f@b6!-IR>^Sr3 z7{9$w=iR-^FLD(ItPA@>SA8kCT3ZX&_R0EceEhOLsj>bsN;O}#GyZR%x$;Zq{N2p- a?iK~w9WQRr)EU1Kh`{}!{txz^{^8$8%x~`i diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml deleted file mode 100644 index 34d9f64840..0000000000 --- a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.319.319.png.dir/.content.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png deleted file mode 100644 index 8aae24bb92b1711271888ec23749bf45aead9024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et?6P)Nkl2Wd5Qg*r|4@67RzX_)13lD3dXaiiV|8tJy-a-rLfM7vhk-TC9G=TeX7Dkv`+At? znQobbUbr<_AT}%z8y1KS3&e&6E-_6L2_cO7H3 z3aabc=(!Li0Gg(uBuS|2I-|EDr97k8S0JC~IhAE;^jrxR0C>BnzNe2y((Cct3(WjT zb^ZtRy*_Lb0G&|u_$KJHmtH(9Gnm!)`EnJ3=l98|+jv@LSYW#TbRQOKp;dg)O)T32_X6+0^5R^ElxuokvvUP8iv8>yAUMc%5Fbs_5=&Wh6Q57 h0)nYrp^i002ovPDHLkV1iRkr)mHI diff --git a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml b/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml deleted file mode 100644 index 34d9f64840..0000000000 --- a/it/content/src/main/content/jcr_root/content/dam/formsanddocuments/core-components-it/samples/panelcontainer/repeatability-tests/add-instances-via-loop/_jcr_content/renditions/cq5dam.thumbnail.48.48.png.dir/.content.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js index eb6197bbd7..c624dea2a6 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/accordion/v1/accordion/clientlibs/site/js/accordionview.js @@ -509,7 +509,7 @@ result.parentElement = this.element; } } else { - var previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1); + let previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1); result.beforeViewElement = previousInstanceElement; } return result; diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js index da1d1ce77b..8e2f5016a5 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/clientlibs/site/js/panelcontainerview.js @@ -173,7 +173,7 @@ result.parentElement = this._templateHTML['divToAppendChild']; } } else { - var previousInstanceItemDiv = instanceManager.getElementAt(instanceIndex - 1); + let previousInstanceItemDiv = instanceManager.getElementAt(instanceIndex - 1); result.beforeViewElement = previousInstanceItemDiv; } return result; diff --git a/ui.frontend/src/view/FormTabs.js b/ui.frontend/src/view/FormTabs.js index 80943007ea..e432c30ca4 100644 --- a/ui.frontend/src/view/FormTabs.js +++ b/ui.frontend/src/view/FormTabs.js @@ -547,7 +547,7 @@ class FormTabs extends FormPanel { result.beforeViewElement = this.#getTabListElement(); } } else { - var previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1); + let previousInstanceElement = this.#getRepeatableElementAt(instanceManager, instanceIndex - 1); result.beforeViewElement = previousInstanceElement; } return result;