mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-02-06 11:40:28 -05:00
🐛 fix: Update minimum ratio value to 0 in protocol fields and adjust related schemas; enhance unit conversion in ServerConfig
This commit is contained in:
parent
3d778e5e36
commit
3b6ef177ba
@ -1,5 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import useGlobalStore from '@/config/use-global';
|
||||
import { useNode } from '@/store/node';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import {
|
||||
@ -78,6 +79,9 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
||||
trigger,
|
||||
title,
|
||||
}: Readonly<SubscribeFormProps<T>>) {
|
||||
const { common } = useGlobalStore();
|
||||
const { currency } = common;
|
||||
|
||||
const t = useTranslations('product');
|
||||
const [open, setOpen] = useState(false);
|
||||
const updateTimeoutRef = useRef<NodeJS.Timeout | null>(null);
|
||||
@ -213,7 +217,11 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
||||
form?.reset(
|
||||
assign(defaultValues, shake(initialValues, (value) => value === null) as Record<string, any>),
|
||||
);
|
||||
}, [form, initialValues]);
|
||||
const discount = form.getValues('discount') || [];
|
||||
if (discount.length > 0) {
|
||||
debouncedCalculateDiscount(discount, 'discount');
|
||||
}
|
||||
}, [form, initialValues, open]);
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
@ -228,7 +236,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
||||
if (bool) setOpen(false);
|
||||
}
|
||||
|
||||
const { nodes, getAllAvailableTags, getNodesByTag, getNodesWithoutTags } = useNode();
|
||||
const { getAllAvailableTags, getNodesByTag, getNodesWithoutTags } = useNode();
|
||||
|
||||
const tagGroups = getAllAvailableTags();
|
||||
|
||||
@ -630,9 +638,9 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
||||
{
|
||||
name: 'discount',
|
||||
type: 'number',
|
||||
min: 0.01,
|
||||
min: 1,
|
||||
max: 100,
|
||||
step: 0.01,
|
||||
step: 1,
|
||||
placeholder: t('form.discountPercent'),
|
||||
suffix: '%',
|
||||
},
|
||||
@ -642,6 +650,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
||||
type: 'number',
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
prefix: currency.currency_symbol,
|
||||
formatInput: (value) => unitConversion('centsToDollars', value),
|
||||
formatOutput: (value) =>
|
||||
unitConversion('dollarsToCents', value).toString(),
|
||||
|
||||
@ -27,7 +27,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -134,7 +134,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -242,7 +242,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -500,7 +500,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -608,7 +608,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -716,7 +716,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -789,7 +789,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -809,7 +809,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -886,7 +886,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -963,7 +963,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
@ -999,7 +999,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
|
||||
name: 'ratio',
|
||||
type: 'number',
|
||||
label: 'traffic_ratio',
|
||||
min: 1,
|
||||
min: 0,
|
||||
step: 0.01,
|
||||
defaultValue: 1,
|
||||
group: 'basic',
|
||||
|
||||
@ -17,7 +17,7 @@ import {
|
||||
const nullableString = z.string().nullish();
|
||||
const nullableBool = z.boolean().nullish();
|
||||
const nullablePort = z.number().int().min(0).max(65535).nullish();
|
||||
const nullableRatio = z.number().min(1).nullish();
|
||||
const nullableRatio = z.number().min(0).nullish();
|
||||
|
||||
const ss = z.object({
|
||||
ratio: nullableRatio,
|
||||
|
||||
@ -35,6 +35,7 @@ import { Textarea } from '@workspace/ui/components/textarea';
|
||||
import { ArrayInput } from '@workspace/ui/custom-components/dynamic-Inputs';
|
||||
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||
import { Icon } from '@workspace/ui/custom-components/icon';
|
||||
import { unitConversion } from '@workspace/ui/utils';
|
||||
import { DicesIcon } from 'lucide-react';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { uid } from 'radash';
|
||||
@ -275,8 +276,10 @@ export default function ServerConfig() {
|
||||
type='number'
|
||||
min={0}
|
||||
suffix='MB'
|
||||
value={field.value as any}
|
||||
onValueChange={field.onChange}
|
||||
value={unitConversion('bitsToMb', field.value as number | undefined)}
|
||||
onValueChange={(value) => {
|
||||
field.onChange(unitConversion('mbToBits', value));
|
||||
}}
|
||||
placeholder='1'
|
||||
/>
|
||||
</FormControl>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user