[Refactor] Unify and encapsulate slider UI logic into useSliderLogic hook. Part 1.
This commit is contained in:
@@ -200,4 +200,66 @@ export const useConfigFunctions = (Category) => {
|
|||||||
default:
|
default:
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
import { useState, useEffect, useCallback, useMemo } from "react";
|
||||||
|
|
||||||
|
export const useSliderLogic = ({
|
||||||
|
current_value,
|
||||||
|
setterFunction,
|
||||||
|
postUpdateAction,
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
step = 1,
|
||||||
|
hidden_label_values
|
||||||
|
}) => {
|
||||||
|
const [ui_value, setUiValue] = useState(current_value.data);
|
||||||
|
|
||||||
|
const labelFormatter = useCallback((value) => {
|
||||||
|
if (hidden_label_values && hidden_label_values.includes(value)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}, [hidden_label_values]);
|
||||||
|
|
||||||
|
const marks = useMemo(() => {
|
||||||
|
return createMarks(min, max, step, labelFormatter);
|
||||||
|
}, [min, max, step, labelFormatter]);
|
||||||
|
|
||||||
|
const onchangeFunction = useCallback((value) => {
|
||||||
|
setUiValue(value);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const onchangeCommittedFunction = useCallback((value) => {
|
||||||
|
setterFunction(value);
|
||||||
|
}, [setterFunction]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (current_value.data !== ui_value) {
|
||||||
|
setUiValue(current_value.data);
|
||||||
|
}
|
||||||
|
if (postUpdateAction) {
|
||||||
|
postUpdateAction();
|
||||||
|
}
|
||||||
|
}, [current_value.data]);
|
||||||
|
|
||||||
|
return {
|
||||||
|
ui_value,
|
||||||
|
onchangeFunction,
|
||||||
|
onchangeCommittedFunction,
|
||||||
|
marks,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const createMarks = (min, max, step = 1, labelFormatter = (value) => value) => {
|
||||||
|
const marks = [];
|
||||||
|
let current_value = min;
|
||||||
|
while (current_value <= max) {
|
||||||
|
const fixedValue = parseFloat(current_value.toFixed(1));
|
||||||
|
const label = labelFormatter(fixedValue);
|
||||||
|
marks.push({ value: fixedValue, label: `${label}` });
|
||||||
|
current_value += step;
|
||||||
|
}
|
||||||
|
return marks;
|
||||||
};
|
};
|
||||||
@@ -13,4 +13,9 @@ export { useHotkeys } from "./config_page_setter/hotkeys/useHotkeys.js";
|
|||||||
export { useSupporters } from "./config_page_setter/supporters/useSupporters.js";
|
export { useSupporters } from "./config_page_setter/supporters/useSupporters.js";
|
||||||
export { usePlugins } from "./config_page_setter/plugins/usePlugins.js";
|
export { usePlugins } from "./config_page_setter/plugins/usePlugins.js";
|
||||||
|
|
||||||
export { useSettingBoxScrollPosition } from "./config_page_setter/_aux/useSettingBoxScrollPosition.js";
|
export { useSettingBoxScrollPosition } from "./config_page_setter/_aux/useSettingBoxScrollPosition.js";
|
||||||
|
|
||||||
|
|
||||||
|
export {
|
||||||
|
useSliderLogic,
|
||||||
|
} from "./config_page_setter/useSettingsLogics.js";
|
||||||
@@ -11,6 +11,8 @@ import {
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
useAppearance,
|
useAppearance,
|
||||||
|
|
||||||
|
useSliderLogic,
|
||||||
} from "@logics_configs";
|
} from "@logics_configs";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -56,30 +58,20 @@ const UiScalingContainer = () => {
|
|||||||
const { currentUiScaling, setUiScaling } = useAppearance();
|
const { currentUiScaling, setUiScaling } = useAppearance();
|
||||||
const { asyncUpdateBreakPoint } = useWindow();
|
const { asyncUpdateBreakPoint } = useWindow();
|
||||||
|
|
||||||
const [ui_ui_scaling, setUiUiScaling] = useState(currentUiScaling.data);
|
const {
|
||||||
|
ui_value,
|
||||||
const onchangeFunction = (value) => {
|
onchangeFunction,
|
||||||
setUiUiScaling(value);
|
onchangeCommittedFunction,
|
||||||
};
|
marks
|
||||||
const onchangeCommittedFunction = (value) => {
|
} = useSliderLogic({
|
||||||
setUiScaling(value);
|
current_value: currentUiScaling,
|
||||||
};
|
setterFunction: setUiScaling,
|
||||||
useEffect(() => {
|
postUpdateAction: asyncUpdateBreakPoint,
|
||||||
setUiUiScaling(currentUiScaling.data);
|
min: 40,
|
||||||
asyncUpdateBreakPoint();
|
max: 200,
|
||||||
}, [currentUiScaling.data]);
|
step: 10,
|
||||||
|
hidden_label_values: [50, 70, 90, 110, 130, 150, 170, 190],
|
||||||
// [Duplicated]
|
});
|
||||||
const createMarks = (min, max) => {
|
|
||||||
const marks = [];
|
|
||||||
for (let value = min; value <= max; value += 10) {
|
|
||||||
const label = ([50,70,90,110,130,150,170,190].includes(value)) ? "" : value;
|
|
||||||
marks.push({ value, label: `${label}` });
|
|
||||||
}
|
|
||||||
return marks;
|
|
||||||
};
|
|
||||||
|
|
||||||
const marks = createMarks(40, 200);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SliderContainer
|
<SliderContainer
|
||||||
@@ -88,7 +80,7 @@ const UiScalingContainer = () => {
|
|||||||
max="200"
|
max="200"
|
||||||
onchangeCommittedFunction={onchangeCommittedFunction}
|
onchangeCommittedFunction={onchangeCommittedFunction}
|
||||||
onchangeFunction={onchangeFunction}
|
onchangeFunction={onchangeFunction}
|
||||||
variable={ui_ui_scaling}
|
variable={ui_value}
|
||||||
marks={marks}
|
marks={marks}
|
||||||
step={null}
|
step={null}
|
||||||
track={false}
|
track={false}
|
||||||
@@ -100,29 +92,20 @@ const UiScalingContainer = () => {
|
|||||||
export const MessageLogUiScalingContainer = () => {
|
export const MessageLogUiScalingContainer = () => {
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const { currentMessageLogUiScaling, setMessageLogUiScaling } = useAppearance();
|
const { currentMessageLogUiScaling, setMessageLogUiScaling } = useAppearance();
|
||||||
const [ui_message_log_ui_scaling, setUiMessageLogUiScaling] = useState(currentMessageLogUiScaling.data);
|
|
||||||
|
|
||||||
const onchangeFunction = (value) => {
|
const {
|
||||||
setUiMessageLogUiScaling(value);
|
ui_value,
|
||||||
};
|
onchangeFunction,
|
||||||
const onchangeCommittedFunction = (value) => {
|
onchangeCommittedFunction,
|
||||||
setMessageLogUiScaling(value);
|
marks
|
||||||
};
|
} = useSliderLogic({
|
||||||
useEffect(() => {
|
current_value: currentMessageLogUiScaling,
|
||||||
setUiMessageLogUiScaling(currentMessageLogUiScaling.data);
|
setterFunction: setMessageLogUiScaling,
|
||||||
}, [currentMessageLogUiScaling.data]);
|
min: 40,
|
||||||
|
max: 200,
|
||||||
// [Duplicated]
|
step: 10,
|
||||||
const createMarks = (min, max) => {
|
hidden_label_values: [50, 70, 90, 110, 130, 150, 170, 190],
|
||||||
const marks = [];
|
});
|
||||||
for (let value = min; value <= max; value += 10) {
|
|
||||||
const label = ([50,70,90,110,130,150,170,190].includes(value)) ? "" : value;
|
|
||||||
marks.push({ value, label: `${label}` });
|
|
||||||
}
|
|
||||||
return marks;
|
|
||||||
};
|
|
||||||
|
|
||||||
const marks = createMarks(40, 200);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SliderContainer
|
<SliderContainer
|
||||||
@@ -131,7 +114,7 @@ export const MessageLogUiScalingContainer = () => {
|
|||||||
max="200"
|
max="200"
|
||||||
onchangeCommittedFunction={onchangeCommittedFunction}
|
onchangeCommittedFunction={onchangeCommittedFunction}
|
||||||
onchangeFunction={onchangeFunction}
|
onchangeFunction={onchangeFunction}
|
||||||
variable={ui_message_log_ui_scaling}
|
variable={ui_value}
|
||||||
marks={marks}
|
marks={marks}
|
||||||
step={null}
|
step={null}
|
||||||
track={false}
|
track={false}
|
||||||
|
|||||||
Reference in New Issue
Block a user