<div className={`${style["pass-details__form-address"]}`}>
<FormInputText<IDataFormPassport>
controller={{
control: control,
name: "legalAddress",
}}
customClassName="pass-details__form-address-input"
value={dataFormPassport.legalAddress}
inputId="legalAddress"
placeholder=" Адрес регистрации (Область / Город/ Улица / Дом)"
minLength={2}
maxLength={100}
pattern={/^[^A-Za-z]+$/gi}
patternValid={/^[^A-Za-z]+$/gi}
error={errors}
onChange={(val) => handleLegalAddressChange(val)}
onClick={() =>
getAddress(
dataFormPassport.legalAddress,
(address) => updateDataForm({ legalAddress: address }),
{ slice: 10 },
{
idInput: "legalAddress",
idUlList: "legalAddressList",
classUl: style["pass-details__form-address-list"],
classLi: style["pass-details__form-address-item"],
}
)
}
/>
</div>
const handleLegalAddressChange = (value: string) => {
updateDataForm({ legalAddress: value });
getAddress(
value,
(address) => updateDataForm({ legalAddress: address }),
{ slice: 10 },
{
idInput: "legalAddress",
idUlList: "legalAddressList",
classUl: style["pass-details__form-address-list"],
classLi: style["pass-details__form-address-item"],
}
);
};
if (storedData) {
setDataForm(storedData);
reset(storageData)
}
with
, то там уже нет minmax()
, там только clamp и вот как описаную мною ситуация разрулить в with? Раньше делал все через @media
, но недавно наткнулся на такие функции как clamp(), min(), max()
, в голове просто не укладывается как это работает и все, не воспринимается. Все понимаю, а этого элементарного понять не могу... ap: clamp(10px, 5vw, 50px);
, но как сделать так, чтобы блок изначально имел значение приближенное к 50px, а дальше просто уменьшался. У меня есть код grid-template-columns: 355px clamp(290px, 22vw, 435px);
и нужно чтобы по дефолту размер второго столбца был 435px, а дальше только уменьнался до 290px, как подобрать середину? TooltipSlider.tsx
, немного его отредактировать и изменить немного вид отображения. Теперь мой код выглядит так:TooltipSlider.tsx
import type { SliderProps } from "rc-slider";
import Slider from "rc-slider";
import type { TooltipRef } from "rc-tooltip";
import Tooltip from "rc-tooltip";
import "rc-tooltip/assets/bootstrap.css";
import raf from "rc-util/lib/raf";
import * as React from "react";
interface HandleTooltipProps {
value: number;
children: React.ReactElement;
visible?: boolean;
tipFormatter?: (value: number) => React.ReactNode;
}
const HandleTooltip: React.FC<HandleTooltipProps> = (props) => {
const {
value,
children,
visible = true,
tipFormatter = (val) => `${val}`,
...restProps
} = props;
const tooltipRef = React.useRef<TooltipRef | null>(null);
const rafRef = React.useRef<number | null>(null);
const [isClient, setIsClient] = React.useState(false);
React.useEffect(() => {
setIsClient(true);
}, []);
function cancelKeepAlign() {
if (rafRef.current !== null) {
raf.cancel(rafRef.current);
}
}
function keepAlign() {
rafRef.current = raf(() => {
if (tooltipRef.current) {
tooltipRef.current.forceAlign();
}
});
}
React.useEffect(() => {
if (visible) {
keepAlign();
} else {
cancelKeepAlign();
}
return cancelKeepAlign;
}, [value, visible]);
if (!isClient) {
return children;
}
return (
<Tooltip
placement="top"
overlay={tipFormatter(value)}
overlayInnerStyle={{ minHeight: "auto" }}
ref={tooltipRef}
visible={visible}
{...restProps}
>
{children}
</Tooltip>
);
};
export const handleRender: SliderProps["handleRender"] = (node, props) => (
<HandleTooltip value={props.value}>{node}</HandleTooltip>
);
interface TooltipSliderProps extends SliderProps {
tipFormatter?: (value: number) => React.ReactNode;
tipProps?: any;
}
const TooltipSlider: React.FC<TooltipSliderProps> = ({
tipFormatter,
tipProps,
...props
}) => {
const tipHandleRender: SliderProps["handleRender"] = (node, handleProps) => (
<HandleTooltip
value={handleProps.value}
tipFormatter={tipFormatter}
{...tipProps}
>
{node}
</HandleTooltip>
);
return <Slider {...props} handleRender={tipHandleRender} />;
};
export default TooltipSlider;
Slider.tsx
// # CLIENT COMPONENT
"use client";
// # REACT
import React, { useState } from "react";
// # LIBRARY
import TooltipSlider, { handleRender } from "./TooltipSlider";
// # STYLE
import "rc-slider/assets/index.css";
import "rc-tooltip/assets/bootstrap.css";
// ^ COMPONENT VISION SLIDER
const CSlider: React.FC = () => {
const [value, setValue] = useState<number | number[]>();
return (
<div style={{ width: 400, margin: 50 }}>
<TooltipSlider
min={1000}
max={100000}
step={1000}
onChange={(e) => {
setValue(e);
}}
/>
</div>
);
};
export default CSlider;
похоже и правда в нем, я сразу внимания не обратил, но если с помощью клавиатуры повыбирать значение, а потом убрать курсор, то можно увидеть как за один раз сработал onBlue раз 10