5180 fichiers 38.5 Mo 0 téléchargements 358 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / components / wired / views / extras / WiredExtraExecutionLimitView.tsx
WiredExtraExecutionLimitView.tsx 3.7 Ko Télécharger le fichier
import { FC, useEffect, useState } from 'react';
import { LocalizeText, WiredFurniType } from '../../../../api';
import { Slider, Text } from '../../../../common';
import { NativeTextTree } from '../../../../common/native-text/NativeTextTree';
import { useWired } from '../../../../hooks';
import { WiredExtraBaseView } from './WiredExtraBaseView';

const MIN_EXECUTIONS = 1;
const MAX_EXECUTIONS = 100;
const DEFAULT_EXECUTIONS = 1;
const MIN_TIME_WINDOW_MS = 500;
const MAX_TIME_WINDOW_MS = 10000;
const DEFAULT_TIME_WINDOW_MS = 500;
const TIME_WINDOW_STEP_MS = 500;

const normalizeExecutions = (value: number) => {
    if (isNaN(value)) return DEFAULT_EXECUTIONS;

    return Math.max(MIN_EXECUTIONS, Math.min(MAX_EXECUTIONS, Math.round(value)));
};

const normalizeTimeWindow = (value: number) => {
    if (isNaN(value)) return DEFAULT_TIME_WINDOW_MS;

    const clampedValue = Math.max(MIN_TIME_WINDOW_MS, Math.min(MAX_TIME_WINDOW_MS, value));

    return Math.round(clampedValue / TIME_WINDOW_STEP_MS) * TIME_WINDOW_STEP_MS;
};

const formatTimeWindow = (value: number) => {
    const seconds = value / 1000;

    return Number.isInteger(seconds) ? seconds.toString() : seconds.toFixed(1);
};

export const WiredExtraExecutionLimitView: FC<{}> = () => {
    const { trigger = null, setIntParams = null, setStringParam = null } = useWired();
    const [executions, setExecutions] = useState(DEFAULT_EXECUTIONS);
    const [timeWindowMs, setTimeWindowMs] = useState(DEFAULT_TIME_WINDOW_MS);

    useEffect(() => {
        if (!trigger) return;

        setExecutions(normalizeExecutions(trigger.intData.length > 0 ? trigger.intData[0] : DEFAULT_EXECUTIONS));
        // Official layout: [max executions, window in half-second pulses].
        setTimeWindowMs(normalizeTimeWindow(trigger.intData.length > 1 ? trigger.intData[1] * TIME_WINDOW_STEP_MS : DEFAULT_TIME_WINDOW_MS));
    }, [trigger]);

    const save = () => {
        setIntParams([normalizeExecutions(executions), normalizeTimeWindow(timeWindowMs) / TIME_WINDOW_STEP_MS]);
        setStringParam('');
    };

    return (
        <NativeTextTree>
            <WiredExtraBaseView hasSpecialInput={true} requiresFurni={WiredFurniType.STUFF_SELECTION_OPTION_NONE} save={save} cardStyle={{ width: 380 }}>
                <div className="flex flex-col gap-2">
                    <div className="flex flex-col gap-2">
                        <Text>{LocalizeText('wiredfurni.params.setexecutions', ['amount'], [executions.toString()])}</Text>
                        <Slider
                            min={MIN_EXECUTIONS}
                            max={MAX_EXECUTIONS}
                            step={1}
                            value={executions}
                            onChange={(value) => setExecutions(normalizeExecutions(Array.isArray(value) ? value[0] : Number(value)))}
                        />
                        <Text small>{executions}</Text>
                    </div>
                    <div className="flex flex-col gap-2">
                        <Text>{LocalizeText('wiredfurni.params.settimewindow', ['timewindow'], [formatTimeWindow(timeWindowMs)])}</Text>
                        <Slider
                            min={MIN_TIME_WINDOW_MS}
                            max={MAX_TIME_WINDOW_MS}
                            step={TIME_WINDOW_STEP_MS}
                            value={timeWindowMs}
                            onChange={(value) => setTimeWindowMs(normalizeTimeWindow(Array.isArray(value) ? value[0] : Number(value)))}
                        />
                        <Text small>{formatTimeWindow(timeWindowMs)}s</Text>
                    </div>
                </div>
            </WiredExtraBaseView>
        </NativeTextTree>
    );
};
15Sujets
1Dépôts
20Membres
3En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser