@undermuz/react-json-form
Version:
Generate JSON-based forms with react
67 lines (66 loc) • 1.77 kB
JavaScript
// src/utils/useTabs.ts
import { useState } from "react";
import { arrayMoveImmutable } from "./arrayMove.mjs";
var useTabs = (props) => {
const { value, defValue, onChange, onTabRemove } = props;
const [tab, setTab] = useState(() => {
if (value.length > 0)
return value[0].id;
return 1;
});
const addTab = () => {
let maxId = Math.max(...value.map((item) => item.id));
if (isNaN(maxId) || !isFinite(maxId) || maxId < 0) {
maxId = 0;
}
const def_value = {
...defValue,
id: maxId + 1
};
const newList = [...value, def_value];
onChange(newList);
setTab(newList[newList.length - 1].id);
};
const removeTab = (tab_id) => {
if (!window.confirm("\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C?")) {
return;
}
const new_value = value.filter((tab2) => tab2.id !== tab_id);
onChange(new_value);
onTabRemove(tab_id);
if (tab === tab_id) {
if (new_value[0]) {
setTab(new_value[0].id);
} else {
setTab(1);
}
}
};
const sortTabs = (event) => {
const { active, over } = event;
if (active && over && active.id !== over.id) {
if (over.id === "trash") {
removeTab(active.id);
return;
}
const oldIndex = value.findIndex(
(_i) => _i.id === active.id
);
const newIndex = value.findIndex(
(_i) => _i.id === over.id
);
onChange(arrayMoveImmutable(value, oldIndex, newIndex));
}
};
return {
tab,
setTab,
addTab,
removeTab,
sortTabs
};
};
var useTabs_default = useTabs;
export {
useTabs_default as default
};