All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.js.utilities.index.js Maven / Gradle / Ivy

There is a newer version: 1.0.97
Show newest version
/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

import {
	getProductMinQuantity,
	isProductPurchasable,
} from 'commerce-frontend-js';

import {DIAGRAM_LABELS_MAX_LENGTH, DRAG_AND_DROP_THRESHOLD} from './constants';

export const TOOLTIP_DISTANCE_FROM_TARGET = 10;

export function calculateTooltipStyleFromTarget(target) {
	const {
		height: targetHeight,
		left: targetLeft,
		top: targetTop,
		width: targetWidth,
	} = target.getBoundingClientRect();

	const distanceFromTop = window.pageYOffset + targetTop;
	const targetRight = window.innerWidth - targetLeft - targetWidth;
	const style = {};

	style.top = distanceFromTop + targetHeight / 2;

	if (targetLeft + targetWidth / 2 < window.innerWidth / 2) {
		style.left = targetLeft + targetWidth + TOOLTIP_DISTANCE_FROM_TARGET;
	}
	else {
		style.right = targetRight + targetWidth + TOOLTIP_DISTANCE_FROM_TARGET;
	}

	return style;
}

export function formatMappedProduct(type, quantity, sequence, selectedProduct) {
	const definition = {
		sequence,
		type,
	};

	switch (type) {
		case 'sku':
			return {
				...definition,
				productId: selectedProduct.productId,
				quantity,
				sku: selectedProduct.sku,
				skuId: selectedProduct.id,
			};
		case 'external':
			return {
				...definition,
				quantity,
				sku: selectedProduct.sku,
			};
		case 'diagram':
			return {
				...definition,
				productId: selectedProduct.productId,
			};
		default:
			throw new Error(`Type ${type} not supported`);
	}
}

export function getAbsolutePositions(x, y, image, scale) {
	const {height, width} = image.getBoundingClientRect();

	return [(x / 100) * (width / scale), (y / 100) * (height / scale)];
}

export function getPercentagePositions(x, y, image) {
	const {
		height: imageHeight,
		width: imageWidth,
		x: imageX,
		y: imageY,
	} = image.getBoundingClientRect();

	const percentagePositions = [
		((x - imageX) / imageWidth) * 100,
		((y - imageY) / imageHeight) * 100,
	];

	return percentagePositions;
}

export function isPinMoving(startX, startY, currentX, currentY) {
	if (
		Math.abs(startX - currentX) > DRAG_AND_DROP_THRESHOLD ||
		Math.abs(startY - currentY) > DRAG_AND_DROP_THRESHOLD
	) {
		return true;
	}

	return false;
}

export function formatLabel(label) {
	if (label.length > DIAGRAM_LABELS_MAX_LENGTH) {
		return label.slice(0, 6) + '…';
	}

	return label;
}

export function formatMappedProductForTable(mappedProducts, isAdmin) {
	return mappedProducts.map((mappedProduct) => {
		const firstAvailableProduct =
			mappedProduct.firstAvailableReplacementMappedProduct ||
			mappedProduct;

		return {
			...firstAvailableProduct,
			initialQuantity:
				isAdmin || firstAvailableProduct.type !== 'sku'
					? 0
					: getProductMinQuantity(
							firstAvailableProduct.productConfiguration
						),
			selectable:
				isAdmin || firstAvailableProduct.type !== 'sku'
					? false
					: isProductPurchasable(
							firstAvailableProduct.availability,
							firstAvailableProduct.productConfiguration,
							firstAvailableProduct.purchasable
						),
		};
	});
}

export function formatProductOptions(skuOptions, productOptions) {
	return skuOptions.map(({key: optionId, value: optionValueId}) => {
		const option = productOptions.find(
			(productOption) => String(productOption.id) === String(optionId)
		);

		const optionValue =
			option &&
			option.productOptionValues.find(
				(productOptionValue) =>
					String(productOptionValue.id) === String(optionValueId)
			);

		return {key: option.key, value: [optionValue.key]};
	});
}

export function getProductURL(productBaseURL, productURLs) {
	const productShortLink =
		productURLs[Liferay.ThemeDisplay.getLanguageId()] ||
		productURLs[Liferay.ThemeDisplay.getDefaultLanguageId()];

	return productBaseURL + productShortLink;
}

export function getProductName(product) {
	return (
		product.productName[Liferay.ThemeDisplay.getLanguageId()] ||
		product.productName[Liferay.ThemeDisplay.getDefaultLanguageId()]
	);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy