nntc-ui 0.0.28 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +10 -1
- package/index.js +17 -6
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -225,7 +225,16 @@ interface Props$8<T> {
|
|
|
225
225
|
disableBorder?: boolean;
|
|
226
226
|
allowDeselect?: boolean;
|
|
227
227
|
showTooltips?: boolean;
|
|
228
|
-
|
|
228
|
+
/** Использовать внешнее состояние вместо внутреннего.
|
|
229
|
+
* При включении компонент не управляет состоянием самостоятельно, а использует переданные value и onChange
|
|
230
|
+
* */
|
|
231
|
+
useExternalState?: boolean;
|
|
232
|
+
/** Текущее значение выбранной вкладки. Используется только при useExternalState=true */
|
|
233
|
+
value?: T;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Компонент вкладок с поддержкой как внутреннего, так и внешнего состояния
|
|
237
|
+
* */
|
|
229
238
|
declare function Tabs<T>(props: UiProps<Props$8<T>>): react_jsx_runtime.JSX.Element;
|
|
230
239
|
|
|
231
240
|
interface TableCell {
|
package/index.js
CHANGED
|
@@ -2314,10 +2314,13 @@ function Tabs(props) {
|
|
|
2314
2314
|
disableBorder: disableBorder2 = false,
|
|
2315
2315
|
allowDeselect = false,
|
|
2316
2316
|
showTooltips = false,
|
|
2317
|
+
useExternalState = false,
|
|
2318
|
+
value,
|
|
2317
2319
|
classes
|
|
2318
2320
|
} = props;
|
|
2319
2321
|
const [isMounted, setIsMounted] = useState10(false);
|
|
2320
2322
|
const [selectedTab, setSelectedTab] = useState10(defaultSelected);
|
|
2323
|
+
const currentValue = useExternalState ? value : selectedTab;
|
|
2321
2324
|
const handleClick = (item3) => () => {
|
|
2322
2325
|
if (item3.isDisabled) {
|
|
2323
2326
|
return;
|
|
@@ -2326,20 +2329,28 @@ function Tabs(props) {
|
|
|
2326
2329
|
item3.onClick();
|
|
2327
2330
|
return;
|
|
2328
2331
|
}
|
|
2329
|
-
if (
|
|
2330
|
-
|
|
2332
|
+
if (useExternalState) {
|
|
2333
|
+
if (allowDeselect && currentValue === item3.value) {
|
|
2334
|
+
onChange?.(void 0);
|
|
2335
|
+
} else {
|
|
2336
|
+
onChange?.(item3.value);
|
|
2337
|
+
}
|
|
2331
2338
|
} else {
|
|
2332
|
-
|
|
2339
|
+
if (allowDeselect && selectedTab === item3.value) {
|
|
2340
|
+
setSelectedTab(void 0);
|
|
2341
|
+
} else {
|
|
2342
|
+
setSelectedTab(item3.value);
|
|
2343
|
+
}
|
|
2333
2344
|
}
|
|
2334
2345
|
};
|
|
2335
2346
|
useEffect5(() => {
|
|
2336
|
-
if (isMounted) {
|
|
2347
|
+
if (isMounted && !useExternalState) {
|
|
2337
2348
|
onChange?.(selectedTab);
|
|
2338
2349
|
}
|
|
2339
2350
|
if (!isMounted) {
|
|
2340
2351
|
setIsMounted(true);
|
|
2341
2352
|
}
|
|
2342
|
-
}, [selectedTab]);
|
|
2353
|
+
}, [selectedTab, useExternalState]);
|
|
2343
2354
|
return /* @__PURE__ */ jsx28(
|
|
2344
2355
|
"div",
|
|
2345
2356
|
{
|
|
@@ -2353,7 +2364,7 @@ function Tabs(props) {
|
|
|
2353
2364
|
),
|
|
2354
2365
|
children: items2.map((item3) => {
|
|
2355
2366
|
const isButton = !!item3.onClick;
|
|
2356
|
-
const isSelected = !isButton &&
|
|
2367
|
+
const isSelected = !isButton && currentValue === item3.value;
|
|
2357
2368
|
const tabContent = /* @__PURE__ */ jsxs15(
|
|
2358
2369
|
"div",
|
|
2359
2370
|
{
|