From 6bb7ea94447a41957a8fbfa87bbdf85c9b147894 Mon Sep 17 00:00:00 2001 From: Rishi Mehta Date: Fri, 6 Sep 2024 16:02:58 +0530 Subject: [PATCH] Adding support for custom form container component --- .../.content.xml | 2 +- .../components/container/.content.xml | 3 + .../components/container/v1/.content.xml | 5 + .../container/v1/container/.content.xml | 9 + .../container/v1/container/README.md | 19 ++ .../v1/container/_cq_template/.content.xml | 8 + .../v1/container/clientlibs/.content.xml | 3 + .../v1/container/clientlibs/site/.content.xml | 7 + .../v1/container/clientlibs/site/css.txt | 18 ++ .../clientlibs/site/css/formcontainerview.css | 22 +++ .../v1/container/clientlibs/site/js.txt | 18 ++ .../clientlibs/site/js/formcontainerview.js | 167 ++++++++++++++++++ .../clientlibs/site/resources/busy-state.gif | Bin 0 -> 19570 bytes .../v1/textinput/clientlibs/site/.content.xml | 2 +- .../samples/container/.content.xml | 5 + .../samples/container/custom/.content.xml | 73 ++++++++ .../v1/accordion/clientlibs/site/.content.xml | 2 +- .../v1/button/clientlibs/site/.content.xml | 2 +- .../v1/checkbox/clientlibs/site/.content.xml | 2 +- .../clientlibs/site/.content.xml | 2 +- .../datepicker/clientlibs/site/.content.xml | 2 +- .../v1/dropdown/clientlibs/site/.content.xml | 2 +- .../emailinput/clientlibs/site/.content.xml | 2 +- .../v1/fileinput/clientlibs/site/.content.xml | 2 +- .../v2/fileinput/clientlibs/site/.content.xml | 2 +- .../v3/fileinput/clientlibs/site/.content.xml | 2 +- .../v1/fragment/clientlibs/site/.content.xml | 2 +- .../v1/hcaptcha/clientlibs/site/.content.xml | 2 +- .../v1/image/clientlibs/site/.content.xml | 2 +- .../numberinput/clientlibs/site/.content.xml | 2 +- .../clientlibs/site/.content.xml | 2 +- .../radiobutton/clientlibs/site/.content.xml | 2 +- .../v1/recaptcha/clientlibs/site/.content.xml | 2 +- .../v1/switch/clientlibs/site/.content.xml | 2 +- .../v1/tabsontop/clientlibs/site/.content.xml | 2 +- .../clientlibs/site/.content.xml | 2 +- .../clientlibs/site/.content.xml | 2 +- .../text/v1/text/clientlibs/site/.content.xml | 3 +- .../v1/textinput/clientlibs/site/.content.xml | 2 +- .../verticaltabs/clientlibs/site/.content.xml | 2 +- .../v1/wizard/clientlibs/site/.content.xml | 2 +- ui.tests/test-module/package-lock.json | 9 +- .../customformcontainer.spec.js | 38 ++++ 43 files changed, 428 insertions(+), 31 deletions(-) create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/.content.xml create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/.content.xml create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/.content.xml create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/README.md create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/_cq_template/.content.xml create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/.content.xml create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/.content.xml create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css.txt create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css/formcontainerview.css create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js.txt create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js/formcontainerview.js create mode 100644 it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/resources/busy-state.gif create mode 100644 it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/container/.content.xml create mode 100644 it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/container/custom/.content.xml create mode 100644 ui.tests/test-module/specs/customformcontainer/customformcontainer.spec.js diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/clientlibs/custom-forms-components-runtime-all/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/clientlibs/custom-forms-components-runtime-all/.content.xml index 157dfad222..c862537b53 100644 --- a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/clientlibs/custom-forms-components-runtime-all/.content.xml +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/clientlibs/custom-forms-components-runtime-all/.content.xml @@ -5,4 +5,4 @@ cssProcessor="[default:none,min:none]" jsProcessor="[default:none,min:none]" categories="[core.forms.components.it.runtime.all]" - embed="[core.forms.components.runtime.base,core.forms.components.container.v2.runtime,core.forms.components.datePicker.v1.runtime,core.forms.components.textinput.v1.runtime,core.forms.components.numberinput.v1.runtime,core.forms.components.panelcontainer.v1.runtime,core.forms.components.radiobutton.v1.runtime,core.forms.components.text.v1.runtime,core.forms.components.checkboxgroup.v1.runtime,core.forms.components.button.v1.runtime,core.forms.components.image.v1.runtime,core.forms.components.dropdown.v1.runtime,core.forms.components.fileinput.v2.runtime,core.forms.components.accordion.v1.runtime,core.forms.components.tabs.v1.runtime,core.forms.components.wizard.v1.runtime,core.forms.components.verticaltabs.v1.runtime,core.forms.components.recaptcha.v1.runtime,core.forms.components.checkbox.v1.runtime,core.forms.components.fragment.v1.runtime,core.forms.components.switch.v1.runtime,core.forms.components.termsandconditions.v1.runtime, core.forms.components.it.textinput.v1.runtime, core.forms.components.hcaptcha.v1.runtime]"/> + embed="[core.forms.components.runtime.base,core.forms.components.it.container.v1.runtime,core.forms.components.datePicker.v1.runtime,core.forms.components.textinput.v1.runtime,core.forms.components.numberinput.v1.runtime,core.forms.components.panelcontainer.v1.runtime,core.forms.components.radiobutton.v1.runtime,core.forms.components.text.v1.runtime,core.forms.components.checkboxgroup.v1.runtime,core.forms.components.button.v1.runtime,core.forms.components.image.v1.runtime,core.forms.components.dropdown.v1.runtime,core.forms.components.fileinput.v2.runtime,core.forms.components.accordion.v1.runtime,core.forms.components.tabs.v1.runtime,core.forms.components.wizard.v1.runtime,core.forms.components.verticaltabs.v1.runtime,core.forms.components.recaptcha.v1.runtime,core.forms.components.checkbox.v1.runtime,core.forms.components.fragment.v1.runtime,core.forms.components.switch.v1.runtime,core.forms.components.termsandconditions.v1.runtime, core.forms.components.it.textinput.v1.runtime, core.forms.components.hcaptcha.v1.runtime]"/> diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/.content.xml new file mode 100644 index 0000000000..491392d539 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/.content.xml @@ -0,0 +1,3 @@ + + diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/.content.xml new file mode 100644 index 0000000000..2b3b612037 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/.content.xml @@ -0,0 +1,5 @@ + + + + diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/.content.xml new file mode 100644 index 0000000000..de9d9c936b --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/.content.xml @@ -0,0 +1,9 @@ + + diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/README.md b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/README.md new file mode 100644 index 0000000000..025dfc7cd1 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/README.md @@ -0,0 +1,19 @@ + +Adaptive Form Container (loader) +==== +Adaptive Form container extending OOTB form container +and additionally added support for loader icon during submit \ No newline at end of file diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/_cq_template/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/_cq_template/.content.xml new file mode 100644 index 0000000000..e7d2c5f64c --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/_cq_template/.content.xml @@ -0,0 +1,8 @@ + + + + diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/.content.xml new file mode 100644 index 0000000000..491392d539 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/.content.xml @@ -0,0 +1,3 @@ + + diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/.content.xml b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/.content.xml new file mode 100644 index 0000000000..1c67f20890 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/.content.xml @@ -0,0 +1,7 @@ + + diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css.txt b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css.txt new file mode 100644 index 0000000000..bf43e90391 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css.txt @@ -0,0 +1,18 @@ +############################################################################### +# Copyright 2022 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. +############################################################################### + +#base=css +formcontainerview.css \ No newline at end of file diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css/formcontainerview.css b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css/formcontainerview.css new file mode 100644 index 0000000000..b8972351c9 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/css/formcontainerview.css @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright 2022 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. + ******************************************************************************/ + +form:not(.cmp-adaptiveform-container--edit) [data-cmp-visible="false"] { + display: none !important; +} +.cmp-adaptiveform-container--loading{ + +} \ No newline at end of file diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js.txt b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js.txt new file mode 100644 index 0000000000..270bfbdbaf --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js.txt @@ -0,0 +1,18 @@ +############################################################################### +# Copyright 2022 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. +############################################################################### + +#base=js +formcontainerview.js \ No newline at end of file diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js/formcontainerview.js b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js/formcontainerview.js new file mode 100644 index 0000000000..d0c75703c2 --- /dev/null +++ b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/js/formcontainerview.js @@ -0,0 +1,167 @@ +/******************************************************************************* + * Copyright 2022 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. + ******************************************************************************/ + +(function() { + + "use strict"; + class FormContainerV2 extends FormView.FormContainer { + static NS = FormView.Constants.NS; + static IS = "adaptiveFormContainer"; + static bemBlock = 'cmp-adaptiveform-container'; + static selectors = { + self: "[data-" + this.NS + '-is="' + this.IS + '"]', + }; + static loadingClass = `${FormContainerV2.bemBlock}--loading`; + constructor(params) { + super(params); + let self = this; + // Function to add the loading class + const addLoadingClass = (formId) => { + const formContainer = document.querySelector(`[data-cmp-adaptiveform-container-loader='${formId}']`); + if (formContainer) { + formContainer.classList.add('cmp-adaptiveform-container--loading'); + } + }; + // Function to remove the loading class + const removeLoadingClass = (formId) => { + const formContainer = document.querySelector(`[data-cmp-adaptiveform-container-loader='${formId}']`); + if (formContainer) { + formContainer.classList.remove('cmp-adaptiveform-container--loading'); + } + }; + this._model.subscribe((action) => { + addLoadingClass(action.target.id); + }, "submit"); + this._model.subscribe((action) => { + removeLoadingClass(self.getModel().id); + let state = action.target.getState(); + // execute the handler only if there are no rules configured on submitSuccess event. + if (!state.events.submitSuccess || state.events.submitSuccess.length === 0) { + const globals = { + form: self.getModel().getRuleNode(), + event: { + type: action.type, + payload: action.payload, + } + }; + FormView.customFunctions.defaultSubmitSuccessHandler(globals); + } + }, "submitSuccess"); + this._model.subscribe((action) => { + removeLoadingClass(self.getModel().id); + let state = action.target.getState(); + // execute the handler only if there are no rules configured on submitError event. + if (!state.events.submitError || state.events.submitError.length === 0) { + let defaultSubmissionError = FormView.LanguageUtils.getTranslatedString(self.getLang(), "InternalFormSubmissionError"); + const globals = { + form: self.getModel().getRuleNode(), + event: { + type: action.type, + payload: action.payload, + } + }; + FormView.customFunctions.defaultSubmitErrorHandler(defaultSubmissionError, globals); + } + }, "submitError"); + this._model.subscribe((action) => { + let state = action.target.getState(); + // execute the handler only if there are no rules configured on custom:saveSuccess event. + if (!state.events['custom:saveSuccess'] || state.events['custom:saveSuccess'].length === 0) { + console.log("Draft id = " + action?.payload?.body?.draftId); + window.alert("Draft has been saved successfully"); + } + }, "saveSuccess"); + this._model.subscribe((action) => { + let state = action.target.getState(); + // execute the handler only if there are no rules configured on custom:saveError event. + if (!state.events['custom:saveError'] || state.events['custom:saveError'].length === 0) { + window.alert("Issue while saving draft"); + } + }, "saveError"); + this.#setupAutoSave(self.getModel()); + } + + /** + * Register time based auto save + * @param formModel. + */ + #setupAutoSave(formModel) { + const autoSaveProperties = formModel?.properties?.['fd:autoSave']; + const enableAutoSave = autoSaveProperties?.['fd:enableAutoSave']; + if (enableAutoSave) { + const autoSaveStrategyType = autoSaveProperties['fd:autoSaveStrategyType']; + const autoSaveInterval = autoSaveProperties['fd:autoSaveInterval']; + const saveEndPoint = FormView.Utils.getContextPath() + '/adobe/forms/af/save/' + formModel.id; + if (autoSaveStrategyType === 'time' && autoSaveInterval) { + console.log("Registering time based auto save"); + setInterval(() => { + formModel.dispatch(new FormView.Actions.Save({ + 'action': saveEndPoint + })); + }, parseInt(autoSaveInterval) * 1000); + } + } + } + } + + async function onDocumentReady() { + const startTime = new Date().getTime(); + let elements = document.querySelectorAll(FormContainerV2.selectors.self); + for (let i = 0; i < elements.length; i++) { + let loaderToAdd = document.querySelector("[data-cmp-adaptiveform-container-loader='"+ elements[i].id + "']"); + if(loaderToAdd){ + loaderToAdd.classList.add(FormContainerV2.loadingClass); + } + console.debug("Form loading started", elements[i].id); + } + function onInit(e) { + let formContainer = e.detail; + let formEl = formContainer.getFormElement(); + setTimeout(() => { + let loaderToRemove = document.querySelector("[data-cmp-adaptiveform-container-loader='"+ formEl.id + "']"); + if(loaderToRemove){ + loaderToRemove.classList.remove(FormContainerV2.loadingClass); + } + const timeTaken = new Date().getTime() - startTime; + console.debug("Form loading complete", formEl.id, timeTaken); + }, 10); + } + document.addEventListener(FormView.Constants.FORM_CONTAINER_INITIALISED, onInit); + await FormView.Utils.setupFormContainer(async ({ + _formJson, _prefillData, _path, _element + }) => { + let formContainer = new FormContainerV2({_formJson, _prefillData, _path, _element}); + // before initializing the form container load all the locale specific json resources + // for runtime + const formLanguage = formContainer.getLang(); + const aemLangUrl = `/etc.clientlibs/core/fd/af-clientlibs/core-forms-components-runtime-all/resources/i18n/${formLanguage}.json`; + await FormView.LanguageUtils.loadLang(formLanguage, aemLangUrl, true); + formContainer.subscribe(); + return formContainer; + }, FormContainerV2.selectors.self, FormContainerV2.IS); + } + + // This is to ensure that the there is no WCM Mode cookie when Form Container is rendered. + // max-age=0 ensures that the cookie is deleted. + document.cookie="wcmmode=disabled; max-age=0; path=/"; + + if (document.readyState !== "loading") { + onDocumentReady(); + } else { + document.addEventListener("DOMContentLoaded", onDocumentReady); + } + +})(); diff --git a/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/resources/busy-state.gif b/it/apps/src/main/content/jcr_root/apps/forms-core-components-it/components/container/v1/container/clientlibs/site/resources/busy-state.gif new file mode 100644 index 0000000000000000000000000000000000000000..16544649ec9ccd3d19e721bc34bf2e8228900756 GIT binary patch literal 19570 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 h=YIEz4sd`G8GKfjJ3k7zO9L+^SP9 + dependencies="[core.forms.components.runtime.base, core.forms.components.textinput.v1.runtime]"/> diff --git a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/container/.content.xml b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/container/.content.xml new file mode 100644 index 0000000000..3edadd6c63 --- /dev/null +++ b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/container/.content.xml @@ -0,0 +1,5 @@ + +