first commit

This commit is contained in:
2024-11-05 12:22:50 +01:00
commit e5682a3912
19641 changed files with 2948548 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/OSL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to https://devdocs.prestashop.com/ for more information.
*
* @author PrestaShop SA and Contributors <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
*/
/**
* Encapsulates selectors for multi store restriction component
*/
export default {
multiStoreRestrictionCheckbox: '.js-multi-store-restriction-checkbox',
multiStoreRestrictionSwitch: '.js-multi-store-restriction-switch',
};

View File

@@ -0,0 +1,96 @@
/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/OSL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to https://devdocs.prestashop.com/ for more information.
*
* @author PrestaShop SA and Contributors <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
*/
import multiStoreRestrictionFieldMap from './multi-store-restriction-field-map';
const {$} = window;
/**
* Enables multi store functionality for the page. It includes switch functionality and checkboxes
*/
export default class MultiStoreRestrictionField {
constructor() {
$(document).on(
'change',
multiStoreRestrictionFieldMap.multiStoreRestrictionCheckbox,
(e) => this.multiStoreRestrictionCheckboxFieldChangeEvent(e),
);
$(document).on(
'change',
multiStoreRestrictionFieldMap.multiStoreRestrictionSwitch,
(e) => this.multiStoreRestrictionSwitchFieldChangeEvent(e),
);
}
/**
* Toggles the checkbox field and enables or disables its related field.
*
* @param {Event} e
* @private
*/
multiStoreRestrictionCheckboxFieldChangeEvent(e) {
const $currentItem = $(e.currentTarget);
this.toggleSourceFieldByTargetElement($currentItem, !$currentItem.is(':checked'));
}
/**
* Mass updates multi-store checkbox fields - it enables or disabled the switch and after that
* it calls the function
* which handles the toggle update related form field by its current state.
* @param {Event} e
* @private
*/
multiStoreRestrictionSwitchFieldChangeEvent(e) {
const $currentItem = $(e.currentTarget);
const isSelected = parseInt($currentItem.val(), 10) === 1;
const targetFormName = $currentItem.data('targetFormName');
$(`form[name="${targetFormName}"]`)
.find(multiStoreRestrictionFieldMap.multiStoreRestrictionCheckbox)
.each((index, el) => {
const $el = $(el);
$el.prop('checked', isSelected);
this.toggleSourceFieldByTargetElement($el, !isSelected);
});
}
/**
* Changes related form fields state to disabled or enabled.
* It also toggles class disabled since for some fields
* this class is used instead of the native disabled attribute.
*
* @param {jquery} $targetElement
* @param {boolean} isDisabled
* @private
*/
toggleSourceFieldByTargetElement($targetElement, isDisabled) {
const targetValue = $targetElement.data('shopRestrictionTarget');
const $sourceFieldSelector = $(`[data-shop-restriction-source="${targetValue}"]`);
$sourceFieldSelector.prop('disabled', isDisabled);
$sourceFieldSelector.toggleClass('disabled', isDisabled);
}
}