From f46e0dfaf1542d5e20cf4df0afa0ea0882763def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Ruz=CC=8Cevic=CC=81?= Date: Mon, 13 Jan 2025 09:23:52 +0100 Subject: [PATCH] adding multiple fixes --- CHANGELOG.md | 1 + .../components/form/assets/enrichment.js | 86 +++++++++++++++---- .../components/form/assets/state-init.js | 2 + src/Blocks/components/form/assets/state.js | 6 ++ src/Blocks/components/form/assets/utils.js | 12 +-- src/Enqueue/Blocks/EnqueueBlocks.php | 1 + src/Enrichment/SettingsEnrichment.php | 29 ++++++- src/Hooks/FiltersOuputMock.php | 4 +- 8 files changed, 117 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01bf0a343..aa8c8f6c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ This projects adheres to [Semantic Versioning](https://semver.org/) and [Keep a - `phone` field now supports initial selected value both for country picker and number. - `field` now support additional `suffix` content that will be displayed after the field input. - `radio and checkbox` fields now support one `input` field that can be used as `other` option and this value will be sent with the main values. +- new `enrichment` prefill option to save all fields defined as `smart` and prefilled all forms that have that field. ### Removed diff --git a/src/Blocks/components/form/assets/enrichment.js b/src/Blocks/components/form/assets/enrichment.js index 8dccad59b..2e00736b0 100644 --- a/src/Blocks/components/form/assets/enrichment.js +++ b/src/Blocks/components/form/assets/enrichment.js @@ -68,7 +68,7 @@ export class Enrichment { */ setLocalStorageFormPrefill(formId) { // Check if enrichment is used. - if (!this.state.getStateEnrichmentIsUsed() || !this.state.getStateEnrichmentIsPrefillUsed()) { + if (!this.state.getStateEnrichmentIsUsed() || !this.state.getStateEnrichmentIsLocalStorageUsed()) { return; } @@ -100,13 +100,27 @@ export class Enrichment { * * @returns {void} */ - setLocalStorageFormPrefillItem(formId, name) { + setLocalStorageFormPrefillField(formId, name) { + this.setLocalStorageFormPrefillFieldItem(formId, name); + this.setLocalStorageFormPrefillFieldSmart(formId, name); + } + + /** + * Set localStorage value for every field - general. + * + * @returns {void} + */ + setLocalStorageFormPrefillFieldItem(formId, name) { // Check if enrichment is used. - if (!this.state.getStateEnrichmentIsUsed() || !this.state.getStateEnrichmentIsPrefillUsed() || !this.state.getStateEnrichmentIsLocalStorageUsed()) { + if (!this.state.getStateEnrichmentIsUsed() || !this.state.getStateEnrichmentIsLocalStorageUsed()) { + return; + } + + if (!this.state.getStateEnrichmentIsPrefillUsed()) { return; } - let valueData = this.state.getStateElementValue(name, formId); + const valueData = this.state.getStateElementValue(name, formId); const newStorage = { [name]: typeof valueData === 'undefined' ? '' : valueData, @@ -119,6 +133,36 @@ export class Enrichment { ); } + /** + * Set localStorage value for every field - smart. + * + * @returns {void} + */ + setLocalStorageFormPrefillFieldSmart(formId, name) { + // Check if enrichment is used. + if (!this.state.getStateEnrichmentIsUsed() || !this.state.getStateEnrichmentIsLocalStorageUsed()) { + return; + } + + const allowedSmartTags = this.state.getStateEnrichmentAllowedSmart(); + + if (!allowedSmartTags) { + return; + } + + if (!allowedSmartTags.includes(name)) { + return; + } + + const valueData = this.state.getStateElementValue(name, formId); + + const newStorage = { + [name]: typeof valueData === 'undefined' ? '' : valueData, + }; + + this.setLocalStorage(newStorage, this.state.getStateEnrichmentSmartStorageName()); + } + /** * Set localStorage value. * @@ -536,19 +580,25 @@ export class Enrichment { onLocalstoragePrefillEvent = (event) => { const { formId } = event.detail; - let data = {}; - try { - data = JSON.parse(this.getLocalStorage(this.state.getStateEnrichmentFormPrefillStorageName(formId))); - } catch { - return; - } + if (this.state.getStateEnrichmentAllowedSmart().length) { + const smartData = JSON.parse(this.getLocalStorage(this.state.getStateEnrichmentSmartStorageName())); + + if (smartData) { + this.prefillByLocalstorageData(formId, smartData); + } + } + + if (this.state.getStateEnrichmentIsPrefillUsed()) { + const formData = JSON.parse(this.getLocalStorage(this.state.getStateEnrichmentFormPrefillStorageName(formId))); - if (!data) { + if (formData) { + this.prefillByLocalstorageData(formId, formData); + } + } + } catch { return; } - - this.prefillByLocalstorageData(formId, data); }; //////////////////////////////////////////////////////////////// @@ -580,8 +630,14 @@ export class Enrichment { setUrlParamsFormPrefill: (formId) => { this.setUrlParamsFormPrefill(formId); }, - setLocalStorageFormPrefillItem: (formId, name) => { - this.setLocalStorageFormPrefillItem(formId, name); + setLocalStorageFormPrefillField: (formId, name) => { + this.setLocalStorageFormPrefillField(formId, name); + }, + setLocalStorageFormPrefillFieldItem: (formId, name) => { + this.setLocalStorageFormPrefillFieldItem(formId, name); + }, + setLocalStorageFormPrefillFieldSmart: (formId, name) => { + this.setLocalStorageFormPrefillFieldSmart(formId, name); }, setLocalStorage: (newStorage, storageName, expiration) => { this.setLocalStorage(newStorage, storageName, expiration); diff --git a/src/Blocks/components/form/assets/state-init.js b/src/Blocks/components/form/assets/state-init.js index df7e8b72d..6036af657 100644 --- a/src/Blocks/components/form/assets/state-init.js +++ b/src/Blocks/components/form/assets/state-init.js @@ -105,6 +105,7 @@ export const StateEnum = { ENRICHMENT_EXPIRATION: 'expiration', ENRICHMENT_EXPIRATION_PREFILL: 'expirationPrefill', ENRICHMENT_ALLOWED: 'allowed', + ENRICHMENT_ALLOWED_SMART: 'allowedSmart', GEOLOCATION: 'geolocation', @@ -275,6 +276,7 @@ export function setStateInitial() { setState([StateEnum.ENRICHMENT_EXPIRATION], enrichment.expiration, StateEnum.ENRICHMENT); setState([StateEnum.ENRICHMENT_EXPIRATION_PREFILL], enrichment.expirationPrefill, StateEnum.ENRICHMENT); setState([StateEnum.ENRICHMENT_ALLOWED], Object.values(enrichment.allowed), StateEnum.ENRICHMENT); + setState([StateEnum.ENRICHMENT_ALLOWED_SMART], Object.values(enrichment.allowedSmart), StateEnum.ENRICHMENT); setState([StateEnum.NAME], 'es-storage', StateEnum.ENRICHMENT); } } diff --git a/src/Blocks/components/form/assets/state.js b/src/Blocks/components/form/assets/state.js index d116746f6..d9dcd7400 100644 --- a/src/Blocks/components/form/assets/state.js +++ b/src/Blocks/components/form/assets/state.js @@ -459,9 +459,15 @@ export class State { getStateEnrichmentAllowed = () => { return getState([StateEnum.ENRICHMENT_ALLOWED], StateEnum.ENRICHMENT); }; + getStateEnrichmentAllowedSmart = () => { + return getState([StateEnum.ENRICHMENT_ALLOWED_SMART], StateEnum.ENRICHMENT); + }; getStateEnrichmentStorageName = () => { return getState([StateEnum.NAME], StateEnum.ENRICHMENT); }; + getStateEnrichmentSmartStorageName = () => { + return `${getState([StateEnum.NAME], StateEnum.ENRICHMENT)}-smart`; + }; getStateEnrichmentFormPrefillStorageName = (formId) => { return `${getState([StateEnum.NAME], StateEnum.ENRICHMENT)}-${this.getStateFormFid(formId)}`; }; diff --git a/src/Blocks/components/form/assets/utils.js b/src/Blocks/components/form/assets/utils.js index 850682037..c50b371dd 100644 --- a/src/Blocks/components/form/assets/utils.js +++ b/src/Blocks/components/form/assets/utils.js @@ -911,7 +911,7 @@ export class Utils { setStateValues(name, value, formId); this.setFieldFilledState(formId, name); - this.enrichment.setLocalStorageFormPrefillItem(formId, name); + this.enrichment.setLocalStorageFormPrefillField(formId, name); this.conditionalTags.setField(formId, name); } @@ -950,7 +950,7 @@ export class Utils { setStateValues(name, value, formId); - this.enrichment.setLocalStorageFormPrefillItem(formId, name); + this.enrichment.setLocalStorageFormPrefillField(formId, name); this.conditionalTags.setField(formId, name); @@ -999,7 +999,7 @@ export class Utils { this.setFieldFilledState(formId, name); - this.enrichment.setLocalStorageFormPrefillItem(formId, name); + this.enrichment.setLocalStorageFormPrefillField(formId, name); this.conditionalTags.setField(formId, name); } @@ -1064,7 +1064,7 @@ export class Utils { setStateValues(name, { ...newValue, ...value }, formId); this.setFieldFilledState(formId, name); - this.enrichment.setLocalStorageFormPrefillItem(formId, name); + this.enrichment.setLocalStorageFormPrefillField(formId, name); this.conditionalTags.setField(formId, name); } @@ -1126,7 +1126,7 @@ export class Utils { } } - this.enrichment.setLocalStorageFormPrefillItem(formId, name); + this.enrichment.setLocalStorageFormPrefillField(formId, name); this.conditionalTags.setField(formId, name); } @@ -1175,7 +1175,7 @@ export class Utils { } } - this.enrichment.setLocalStorageFormPrefillItem(formId, name); + this.enrichment.setLocalStorageFormPrefillField(formId, name); this.conditionalTags.setField(formId, name); diff --git a/src/Enqueue/Blocks/EnqueueBlocks.php b/src/Enqueue/Blocks/EnqueueBlocks.php index 3c92f1b58..3f65e69ea 100644 --- a/src/Enqueue/Blocks/EnqueueBlocks.php +++ b/src/Enqueue/Blocks/EnqueueBlocks.php @@ -318,6 +318,7 @@ public function enqueueBlockFrontendScript(string $hook): void 'isUsed' => true, 'isUsedPrefill' => UtilsSettingsHelper::isOptionCheckboxChecked(SettingsEnrichment::SETTINGS_ENRICHMENT_PREFILL_USE_KEY, SettingsEnrichment::SETTINGS_ENRICHMENT_PREFILL_USE_KEY), 'isUsedPrefillUrl' => UtilsSettingsHelper::isOptionCheckboxChecked(SettingsEnrichment::SETTINGS_ENRICHMENT_PREFILL_URL_USE_KEY, SettingsEnrichment::SETTINGS_ENRICHMENT_PREFILL_URL_USE_KEY), + 'allowedSmart' => \array_values(\array_filter(\explode(\PHP_EOL, UtilsSettingsHelper::getOptionValueAsJson(SettingsEnrichment::SETTINGS_ENRICHMENT_ALLOWED_SMART_TAGS_KEY, 1)))), ], FiltersOuputMock::getEnrichmentManualMapFilterValue($this->enrichment->getEnrichmentConfig())['config'] ?? [], ); diff --git a/src/Enrichment/SettingsEnrichment.php b/src/Enrichment/SettingsEnrichment.php index 276f16ece..4aac0dbce 100644 --- a/src/Enrichment/SettingsEnrichment.php +++ b/src/Enrichment/SettingsEnrichment.php @@ -56,6 +56,11 @@ class SettingsEnrichment implements UtilsSettingGlobalInterface, ServiceInterfac */ public const SETTINGS_ENRICHMENT_ALLOWED_TAGS_KEY = 'enrichment-allowed-tags'; + /** + * Allowed smart tags key. + */ + public const SETTINGS_ENRICHMENT_ALLOWED_SMART_TAGS_KEY = 'enrichment-allowed-smart-tags'; + /** * Allowed tags map key. */ @@ -166,7 +171,7 @@ public function getSettingsGlobalData(): array 'textareaSaveAsJson' => true, // translators: %s will be replaced with local validation patterns. 'textareaFieldHelp' => \sprintf(\__(' - Enter one URL parameter per line. + Enter one parameter per line.

Parameters are stored in browser storage for optional additional processing later.
Some commonly used parameters are included by default.%s', 'eightshift-forms'), $enrichment['settings']), @@ -271,7 +276,27 @@ function ($item) { ], ], ], - ] + [ + 'component' => 'tab', + 'tabLabel' => \__('Prefill smart', 'eightshift-forms'), + 'tabContent' => [ + [ + 'component' => 'textarea', + 'textareaName' => UtilsSettingsHelper::getOptionName(self::SETTINGS_ENRICHMENT_ALLOWED_SMART_TAGS_KEY), + 'textareaFieldLabel' => \__('Add custom enrichment smart parameters', 'eightshift-forms'), + 'textareaIsMonospace' => true, + 'textareaSaveAsJson' => true, + // translators: %s will be replaced with local validation patterns. + 'textareaFieldHelp' => \sprintf(\__(' + Enter one parameter per line. +

+ Parameters are stored in browser storage for optional additional processing later.
+ These parameters will be automatically set on every form you have.', 'eightshift-forms'), $enrichment['settings']), + 'textareaValue' => UtilsSettingsHelper::getOptionValueAsJson(self::SETTINGS_ENRICHMENT_ALLOWED_SMART_TAGS_KEY, 1), + ], + ], + ], + ], ], ]; } diff --git a/src/Hooks/FiltersOuputMock.php b/src/Hooks/FiltersOuputMock.php index b97635a46..6310d1e40 100644 --- a/src/Hooks/FiltersOuputMock.php +++ b/src/Hooks/FiltersOuputMock.php @@ -32,7 +32,7 @@ public static function getEnrichmentManualMapFilterValue(array $config): array { $settings = ''; $filterUsed = false; - $settingsFields = []; + $settingsFields = $config['allowed'] ?? []; $filterName = UtilsHooksHelper::getFilterName(['enrichment', 'manualMap']); @@ -53,6 +53,8 @@ public static function getEnrichmentManualMapFilterValue(array $config): array } } + $settingsFields = \array_unique($settingsFields); + $settings .= \__('Additional parameters were provided through code', 'eightshift-forms'); $settings .= '