2023-11-30 17:26:17 +08:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
export const data = window.shop_data;
|
|
|
|
export const itemsUnfoldedList = Array.from(data.columns.backlog.categories.map(groupId => groupId.itemIds).flat());
|
|
|
|
|
|
|
|
export const productStyle = (style, snapshot, removeAnim, hovered, selected, cart=false) => {
|
|
|
|
const custom = {
|
|
|
|
opacity: snapshot.isDragging ? .7 : 1,
|
|
|
|
backgroundColor: (hovered || selected) ? '#eae7f7' : 'initial',
|
|
|
|
};
|
|
|
|
|
|
|
|
if (!cart && snapshot.draggingOver == null && // hack for backlog
|
|
|
|
((!snapshot.isDragging) // prevent next elements from animation
|
|
|
|
|| (snapshot.isDragging && snapshot.isDropAnimating))) { // prevent dragged element from weird animation
|
|
|
|
style.transform = "none";
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!snapshot.isDropAnimating) {
|
|
|
|
return { ...style, ...custom};
|
|
|
|
}
|
|
|
|
|
|
|
|
if (removeAnim) {
|
|
|
|
// cannot be 0, but make it super tiny
|
|
|
|
custom.transitionDuration = '0.001s';
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
...style,
|
|
|
|
...custom,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export const cartStyle = (style, snapshot) => {
|
|
|
|
const isDraggingOver = snapshot.isDraggingOver;
|
|
|
|
return {
|
|
|
|
...style,
|
|
|
|
...{
|
|
|
|
backgroundColor: isDraggingOver ? '#f2f2f2' : '#f9f9f9',
|
|
|
|
border: isDraggingOver ? '1px dashed #ccc' : '0',
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function formatMoney(amount, decimalCount = 2, decimal = ".", thousands = ",") {
|
|
|
|
// https://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-currency-string-in-javascript
|
|
|
|
// changes: return amount if error in order to avoid empty value
|
|
|
|
try {
|
|
|
|
decimalCount = Math.abs(decimalCount);
|
|
|
|
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;
|
|
|
|
|
|
|
|
const negativeSign = amount < 0 ? "-" : "";
|
|
|
|
|
|
|
|
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
|
|
|
|
let j = (i.length > 3) ? i.length % 3 : 0;
|
|
|
|
|
|
|
|
return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
|
|
|
|
} catch (e) {
|
|
|
|
return amount;
|
|
|
|
}
|
2023-12-14 17:45:54 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
export const range = (start, end) => {
|
|
|
|
const length = end - start;
|
|
|
|
return Array.from({ length }, (_, i) => start + i);
|
|
|
|
}
|
2023-12-15 13:49:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
export const move = (source, destination, droppableSource, droppableDestination) => {
|
|
|
|
console.log('==> move', source, destination);
|
|
|
|
const sourceClone = Array.from(source);
|
|
|
|
const destClone = Array.from(destination);
|
|
|
|
const [removed] = sourceClone.splice(droppableSource.index, 1);
|
|
|
|
|
|
|
|
destClone.splice(droppableDestination.index, 0, removed);
|
|
|
|
|
|
|
|
const result = {columns: {}};
|
|
|
|
result.columns[droppableSource.droppableId] = sourceClone;
|
|
|
|
result.columns[droppableDestination.droppableId] = destClone;
|
|
|
|
|
|
|
|
return result;
|
|
|
|
};
|
|
|
|
|
|
|
|
export const compareArraysWithIds = (a, b) =>
|
|
|
|
a.length === b.length &&
|
|
|
|
a.every((element, index) => element.id === b[index].id);
|
|
|
|
|
|
|
|
export const compareArraysLevelOne = (a, b) =>
|
|
|
|
a.length === b.length &&
|
|
|
|
a.every((element, index) => element === b[index]);
|
|
|
|
|
|
|
|
export function compareObjectsEmptiness(a, b) {
|
|
|
|
return (!a && !b) || (!(!a !== !b) && Object.getPrototypeOf(a) === Object.getPrototypeOf(b) &&
|
|
|
|
(Object.getPrototypeOf(a) !== Object.getPrototypeOf([]) || !!Object.keys(a).length === !!Object.keys(b).length))
|
|
|
|
}
|