order columns See merge request spatial/postamates_frontend!11dev
commit
55ccc8e71a
@ -0,0 +1,25 @@
|
||||
import { useState, useEffect } from "react";
|
||||
|
||||
const useLocalStorage = (key, defaultValue) => {
|
||||
const [value, setValue] = useState(() => {
|
||||
let currentValue;
|
||||
|
||||
try {
|
||||
currentValue = JSON.parse(
|
||||
localStorage.getItem(key) || String(defaultValue)
|
||||
);
|
||||
} catch (error) {
|
||||
currentValue = defaultValue;
|
||||
}
|
||||
|
||||
return currentValue;
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem(key, JSON.stringify(value));
|
||||
}, [value, key]);
|
||||
|
||||
return [value, setValue];
|
||||
};
|
||||
|
||||
export default useLocalStorage;
|
||||
@ -0,0 +1,63 @@
|
||||
import {useState} from "react";
|
||||
import {Button, Dropdown} from "antd";
|
||||
import {SettingOutlined} from "@ant-design/icons";
|
||||
import {DragDropContext, Draggable, Droppable} from "react-beautiful-dnd";
|
||||
|
||||
export const TableSettings = ({orderColumns}) => {
|
||||
const [columnsList, setColumnsList] = useState(orderColumns.order)
|
||||
|
||||
const handleDrop = (droppedItem) => {
|
||||
// Ignore drop outside droppable container
|
||||
if (!droppedItem.destination) return;
|
||||
var updatedList = [...columnsList];
|
||||
// Remove dragged item
|
||||
const [reorderedItem] = updatedList.splice(droppedItem.source.index, 1);
|
||||
// Add dropped item
|
||||
updatedList.splice(droppedItem.destination.index, 0, reorderedItem);
|
||||
// Update State
|
||||
setColumnsList(updatedList);
|
||||
orderColumns.setOrder(updatedList);
|
||||
};
|
||||
|
||||
const columnsListRender = () => {
|
||||
return (
|
||||
<div onClick={(e) => e.stopPropagation()} className='z-10 bg-white-background rounded-xl p-3 space-y-3'>
|
||||
<DragDropContext onDragEnd={handleDrop}>
|
||||
<Droppable droppableId="tableOrder">
|
||||
{(provided) => (
|
||||
<div className="flex flex-col" {...provided.droppableProps} ref={provided.innerRef}>
|
||||
{columnsList.map((item, index) => {
|
||||
return (
|
||||
<Draggable key={`list-${item}`} draggableId={`list-${item}`} index={index}>
|
||||
{(provided) => (
|
||||
<div ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>
|
||||
<p>
|
||||
{ orderColumns.defaultColumns[item].title }
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</Draggable>
|
||||
);
|
||||
})}
|
||||
{provided.placeholder}
|
||||
</div>
|
||||
)}
|
||||
</Droppable>
|
||||
</DragDropContext>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<Dropdown
|
||||
trigger="click"
|
||||
dropdownRender={() => columnsListRender()}
|
||||
>
|
||||
<Button
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
<SettingOutlined/>
|
||||
</Button>
|
||||
</Dropdown>
|
||||
);
|
||||
};
|
||||
Loading…
Reference in new issue