[Refactor] Tidy up utils' files and functions.
This commit is contained in:
67
src-ui/utils.js
Normal file
67
src-ui/utils.js
Normal file
@@ -0,0 +1,67 @@
|
||||
export const arrayToObject = (array) => {
|
||||
return array.reduce((obj, item) => {
|
||||
obj[item] = item;
|
||||
return obj;
|
||||
}, {});
|
||||
};
|
||||
|
||||
export const chunkArray = (array, size) => {
|
||||
const chunked = [];
|
||||
for (let i = 0; i < array.length; i += size) {
|
||||
chunked.push(array.slice(i, i + size));
|
||||
}
|
||||
return chunked;
|
||||
};
|
||||
|
||||
export const clampMinMax = (value, min, max) => {
|
||||
return Math.min(Math.max(value, min), max);
|
||||
};
|
||||
// console.log(clamp(5, 1, 10)); // 5 (範囲内)
|
||||
// console.log(clamp(-3, 0, 10)); // 0 (minより小さい)
|
||||
// console.log(clamp(15, 1, 10)); // 10 (maxより大きい)
|
||||
// console.log(clamp(7.5, 1, 10)); // 7.5 (範囲内、少数)
|
||||
|
||||
export const randomIntMinMax = (min, max) => {
|
||||
if (min === max) return min;
|
||||
if (max === undefined) {
|
||||
max = min;
|
||||
min = 0;
|
||||
}
|
||||
const int = Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
return int;
|
||||
};
|
||||
|
||||
export const scrollToBottom = (ref, smooth = false) => {
|
||||
const element = ref.current;
|
||||
const scroll_height = element.scrollHeight - element.clientHeight;
|
||||
|
||||
if (smooth) {
|
||||
const duration = 300; // スクロールにかける時間(ミリ秒)
|
||||
const start_time = performance.now();
|
||||
const scroll_top = element.scrollTop;
|
||||
|
||||
const scroll = (current_time) => {
|
||||
const elapsed = current_time - start_time;
|
||||
const progress = Math.min(elapsed / duration, 1);
|
||||
const ease_in_out_quad = (t) => t < 0.5
|
||||
? 2 * t * t
|
||||
: -1 + (4 - 2 * t) * t;
|
||||
element.scrollTop = scroll_top + (scroll_height - scroll_top) * ease_in_out_quad(progress);
|
||||
|
||||
if (progress < 1) {
|
||||
requestAnimationFrame(scroll);
|
||||
}
|
||||
};
|
||||
|
||||
requestAnimationFrame(scroll);
|
||||
} else {
|
||||
element.scrollTop = scroll_height;
|
||||
}
|
||||
};
|
||||
|
||||
export const updateLabelsById = (data_array, updates) => {
|
||||
return data_array.map(item => {
|
||||
const update = updates.find(update_item => update_item.id === item.id);
|
||||
return update ? { ...item, label: update.label } : item;
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user