Fix: columns positions are saved correctly into local storage
This commit is contained in:
parent
8246466f7d
commit
5d02801e6c
@ -3,9 +3,8 @@ import TableHeader from "@docspace/components/table-container/TableHeader";
|
|||||||
import { inject, observer } from "mobx-react";
|
import { inject, observer } from "mobx-react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
const TABLE_VERSION = "6";
|
const TABLE_VERSION = "5";
|
||||||
const TABLE_COLUMNS = `webhooksHistoryTableColumns_ver-${TABLE_VERSION}`;
|
const TABLE_COLUMNS = `webhooksHistoryColumns_ver-${TABLE_VERSION}`;
|
||||||
const COLUMNS_SIZE = `webhooksHistoryColumnsSize_ver-${TABLE_VERSION}`;
|
|
||||||
|
|
||||||
const getColumns = (defaultColumns, userId) => {
|
const getColumns = (defaultColumns, userId) => {
|
||||||
const storageColumns = localStorage.getItem(`${TABLE_COLUMNS}=${userId}`);
|
const storageColumns = localStorage.getItem(`${TABLE_COLUMNS}=${userId}`);
|
||||||
@ -27,7 +26,14 @@ const getColumns = (defaultColumns, userId) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const HistoryTableHeader = (props) => {
|
const HistoryTableHeader = (props) => {
|
||||||
const { userId, sectionWidth, tableRef } = props;
|
const {
|
||||||
|
userId,
|
||||||
|
sectionWidth,
|
||||||
|
tableRef,
|
||||||
|
columnStorageName,
|
||||||
|
columnInfoPanelStorageName,
|
||||||
|
setHideColumns,
|
||||||
|
} = props;
|
||||||
const { t, ready } = useTranslation(["Webhooks", "People"]);
|
const { t, ready } = useTranslation(["Webhooks", "People"]);
|
||||||
|
|
||||||
const defaultColumns = [
|
const defaultColumns = [
|
||||||
@ -59,11 +65,7 @@ const HistoryTableHeader = (props) => {
|
|||||||
|
|
||||||
const [columns, setColumns] = useState(getColumns(defaultColumns, userId));
|
const [columns, setColumns] = useState(getColumns(defaultColumns, userId));
|
||||||
|
|
||||||
useEffect(() => {
|
function onColumnChange(key, e) {
|
||||||
ready && setColumns(getColumns(defaultColumns, userId));
|
|
||||||
}, [ready]);
|
|
||||||
|
|
||||||
const onColumnChange = (key, e, userId) => {
|
|
||||||
const columnIndex = columns.findIndex((c) => c.key === key);
|
const columnIndex = columns.findIndex((c) => c.key === key);
|
||||||
|
|
||||||
if (columnIndex === -1) return;
|
if (columnIndex === -1) return;
|
||||||
@ -76,19 +78,25 @@ const HistoryTableHeader = (props) => {
|
|||||||
|
|
||||||
const tableColumns = columns.map((c) => c.enable && c.key);
|
const tableColumns = columns.map((c) => c.enable && c.key);
|
||||||
localStorage.setItem(`${TABLE_COLUMNS}=${userId}`, tableColumns);
|
localStorage.setItem(`${TABLE_COLUMNS}=${userId}`, tableColumns);
|
||||||
};
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
ready && setColumns(getColumns(defaultColumns, userId));
|
||||||
|
}, [ready]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TableHeader
|
<TableHeader
|
||||||
columns={columns}
|
|
||||||
checkboxSize="32px"
|
checkboxSize="32px"
|
||||||
containerRef={tableRef}
|
containerRef={tableRef}
|
||||||
|
columns={columns}
|
||||||
|
columnStorageName={columnStorageName}
|
||||||
|
columnInfoPanelStorageName={columnInfoPanelStorageName}
|
||||||
sectionWidth={sectionWidth}
|
sectionWidth={sectionWidth}
|
||||||
|
checkboxMargin="12px"
|
||||||
showSettings={false}
|
showSettings={false}
|
||||||
useReactWindow
|
useReactWindow
|
||||||
setHideColumns={() => {}}
|
setHideColumns={setHideColumns}
|
||||||
infoPanelVisible={true}
|
infoPanelVisible={false}
|
||||||
columnStorageName={`${COLUMNS_SIZE}=${userId}`}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -39,7 +39,7 @@ const StyledWrapper = styled.div`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const HistoryTableRow = (props) => {
|
const HistoryTableRow = (props) => {
|
||||||
const { item, toggleEventId, isIdChecked, retryWebhookEvent } = props;
|
const { item, toggleEventId, isIdChecked, retryWebhookEvent, hideColumns } = props;
|
||||||
const { t } = useTranslation(["Webhooks", "Common"]);
|
const { t } = useTranslation(["Webhooks", "Common"]);
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ const HistoryTableRow = (props) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledWrapper className={isChecked ? "selected-table-row" : ""} onClick={onChange}>
|
<StyledWrapper className={isChecked ? "selected-table-row" : ""} onClick={onChange}>
|
||||||
<StyledTableRow contextOptions={contextOptions} checked={isChecked}>
|
<StyledTableRow contextOptions={contextOptions} checked={isChecked} hideColumns={hideColumns}>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<TableCell checked={isChecked} className="noPadding">
|
<TableCell checked={isChecked} className="noPadding">
|
||||||
<Checkbox onChange={onChange} isChecked={isChecked} />
|
<Checkbox onChange={onChange} isChecked={isChecked} />
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useRef, useEffect } from "react";
|
import React, { useState, useRef, useEffect } from "react";
|
||||||
|
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ import { Base } from "@docspace/components/themes";
|
|||||||
const TableWrapper = styled(TableContainer)`
|
const TableWrapper = styled(TableContainer)`
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
|
||||||
.table-container_header{
|
.table-container_header {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,6 +44,10 @@ const TableWrapper = styled(TableContainer)`
|
|||||||
|
|
||||||
TableWrapper.defaultProps = { theme: Base };
|
TableWrapper.defaultProps = { theme: Base };
|
||||||
|
|
||||||
|
const TABLE_VERSION = "5";
|
||||||
|
const COLUMNS_SIZE = `webhooksHistoryColumnsSize_ver-${TABLE_VERSION}`;
|
||||||
|
const INFO_PANEL_COLUMNS_SIZE = `infoPanelWebhooksHistoryColumnsSize_ver-${TABLE_VERSION}`;
|
||||||
|
|
||||||
const HistoryTableView = (props) => {
|
const HistoryTableView = (props) => {
|
||||||
const {
|
const {
|
||||||
sectionWidth,
|
sectionWidth,
|
||||||
@ -55,9 +59,11 @@ const HistoryTableView = (props) => {
|
|||||||
fetchMoreItems,
|
fetchMoreItems,
|
||||||
formatFilters,
|
formatFilters,
|
||||||
historyFilters,
|
historyFilters,
|
||||||
|
userId,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const tableRef = useRef(null);
|
const tableRef = useRef(null);
|
||||||
|
const [hideColumns, setHideColumns] = useState(false);
|
||||||
|
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
|
|
||||||
@ -75,6 +81,9 @@ const HistoryTableView = (props) => {
|
|||||||
fetchMoreItems({ ...params, configId: id, count: 10 });
|
fetchMoreItems({ ...params, configId: id, count: 10 });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const columnStorageName = `${COLUMNS_SIZE}=${userId}`;
|
||||||
|
const columnInfoPanelStorageName = `${INFO_PANEL_COLUMNS_SIZE}=${userId}`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TableWrapper
|
<TableWrapper
|
||||||
forwardedRef={tableRef}
|
forwardedRef={tableRef}
|
||||||
@ -82,26 +91,41 @@ const HistoryTableView = (props) => {
|
|||||||
gridTemplateColumns: "300px 100px 400px 24px",
|
gridTemplateColumns: "300px 100px 400px 24px",
|
||||||
}}
|
}}
|
||||||
useReactWindow>
|
useReactWindow>
|
||||||
<HistoryTableHeader sectionWidth={sectionWidth} tableRef={tableRef} />
|
<HistoryTableHeader
|
||||||
|
sectionWidth={sectionWidth}
|
||||||
|
tableRef={tableRef}
|
||||||
|
columnStorageName={columnStorageName}
|
||||||
|
columnInfoPanelStorageName={columnInfoPanelStorageName}
|
||||||
|
setHideColumns={setHideColumns}
|
||||||
|
/>
|
||||||
<TableBody
|
<TableBody
|
||||||
itemHeight={49}
|
itemHeight={49}
|
||||||
useReactWindow
|
useReactWindow
|
||||||
|
infoPanelVisible={false}
|
||||||
|
columnStorageName={columnStorageName}
|
||||||
|
columnInfoPanelStorageName={columnInfoPanelStorageName}
|
||||||
filesLength={historyItems.length}
|
filesLength={historyItems.length}
|
||||||
fetchMoreFiles={fetchMoreFiles}
|
fetchMoreFiles={fetchMoreFiles}
|
||||||
hasMoreFiles={hasMoreItems}
|
hasMoreFiles={hasMoreItems}
|
||||||
itemCount={totalItems}>
|
itemCount={totalItems}>
|
||||||
{historyItems.map((item) => (
|
{historyItems.map((item) => (
|
||||||
<HistoryTableRow key={item.id} item={{ ...item, title: item.id }} />
|
<HistoryTableRow
|
||||||
|
key={item.id}
|
||||||
|
item={{ ...item, title: item.id }}
|
||||||
|
hideColumns={hideColumns}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</TableBody>
|
</TableBody>
|
||||||
</TableWrapper>
|
</TableWrapper>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default inject(({ setup, webhooksStore }) => {
|
export default inject(({ setup, webhooksStore, auth }) => {
|
||||||
const { viewAs, setViewAs } = setup;
|
const { viewAs, setViewAs } = setup;
|
||||||
const { historyItems, fetchMoreItems, hasMoreItems, totalItems, formatFilters, historyFilters } =
|
const { historyItems, fetchMoreItems, hasMoreItems, totalItems, formatFilters, historyFilters } =
|
||||||
webhooksStore;
|
webhooksStore;
|
||||||
|
const { id: userId } = auth.userStore.user;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
viewAs,
|
viewAs,
|
||||||
setViewAs,
|
setViewAs,
|
||||||
@ -111,5 +135,6 @@ export default inject(({ setup, webhooksStore }) => {
|
|||||||
totalItems,
|
totalItems,
|
||||||
formatFilters,
|
formatFilters,
|
||||||
historyFilters,
|
historyFilters,
|
||||||
|
userId,
|
||||||
};
|
};
|
||||||
})(observer(HistoryTableView));
|
})(observer(HistoryTableView));
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
import React, { useState, useRef } from "react";
|
import React, { useState } from "react";
|
||||||
import TableHeader from "@docspace/components/table-container/TableHeader";
|
import TableHeader from "@docspace/components/table-container/TableHeader";
|
||||||
|
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { inject, observer } from "mobx-react";
|
import { inject, observer } from "mobx-react";
|
||||||
|
|
||||||
const TABLE_VERSION = "5";
|
const TABLE_VERSION = "5";
|
||||||
const TABLE_COLUMNS = `webhooksConfigTableColumns_ver-${TABLE_VERSION}`;
|
const TABLE_COLUMNS = `webhooksConfigColumns_ver-${TABLE_VERSION}`;
|
||||||
const COLUMNS_SIZE = `webhooksConfigColumnsSize_ver-${TABLE_VERSION}`;
|
|
||||||
|
|
||||||
const getColumns = (defaultColumns, userId) => {
|
const getColumns = (defaultColumns, userId) => {
|
||||||
const storageColumns = localStorage.getItem(`${TABLE_COLUMNS}=${userId}`);
|
const storageColumns = localStorage.getItem(`${TABLE_COLUMNS}=${userId}`);
|
||||||
@ -28,10 +27,17 @@ const getColumns = (defaultColumns, userId) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const WebhookTableHeader = (props) => {
|
const WebhookTableHeader = (props) => {
|
||||||
const { userId, sectionWidth, tableRef } = props;
|
const {
|
||||||
|
userId,
|
||||||
|
sectionWidth,
|
||||||
|
tableRef,
|
||||||
|
columnStorageName,
|
||||||
|
columnInfoPanelStorageName,
|
||||||
|
setHideColumns,
|
||||||
|
} = props;
|
||||||
const { t } = useTranslation(["Webhooks", "Common"]);
|
const { t } = useTranslation(["Webhooks", "Common"]);
|
||||||
|
|
||||||
const defaultColumns = useRef([
|
const defaultColumns = [
|
||||||
{
|
{
|
||||||
key: "Name",
|
key: "Name",
|
||||||
title: t("Common:Name"),
|
title: t("Common:Name"),
|
||||||
@ -56,11 +62,11 @@ const WebhookTableHeader = (props) => {
|
|||||||
resizable: true,
|
resizable: true,
|
||||||
onChange: onColumnChange,
|
onChange: onColumnChange,
|
||||||
},
|
},
|
||||||
]);
|
];
|
||||||
|
|
||||||
const [columns, setColumns] = useState(getColumns(defaultColumns.current, userId));
|
const [columns, setColumns] = useState(getColumns(defaultColumns, userId));
|
||||||
|
|
||||||
const onColumnChange = (key, e) => {
|
function onColumnChange(key, e) {
|
||||||
const columnIndex = columns.findIndex((c) => c.key === key);
|
const columnIndex = columns.findIndex((c) => c.key === key);
|
||||||
|
|
||||||
if (columnIndex === -1) return;
|
if (columnIndex === -1) return;
|
||||||
@ -73,18 +79,21 @@ const WebhookTableHeader = (props) => {
|
|||||||
|
|
||||||
const tableColumns = columns.map((c) => c.enable && c.key);
|
const tableColumns = columns.map((c) => c.enable && c.key);
|
||||||
localStorage.setItem(`${TABLE_COLUMNS}=${userId}`, tableColumns);
|
localStorage.setItem(`${TABLE_COLUMNS}=${userId}`, tableColumns);
|
||||||
};
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TableHeader
|
<TableHeader
|
||||||
columns={columns}
|
checkboxSize="48px"
|
||||||
containerRef={tableRef}
|
containerRef={tableRef}
|
||||||
|
columns={columns}
|
||||||
|
columnStorageName={columnStorageName}
|
||||||
|
columnInfoPanelStorageName={columnInfoPanelStorageName}
|
||||||
sectionWidth={sectionWidth}
|
sectionWidth={sectionWidth}
|
||||||
|
checkboxMargin="12px"
|
||||||
showSettings={false}
|
showSettings={false}
|
||||||
useReactWindow
|
useReactWindow
|
||||||
setHideColumns={() => {}}
|
setHideColumns={setHideColumns}
|
||||||
infoPanelVisible={true}
|
infoPanelVisible={false}
|
||||||
columnStorageName={`${COLUMNS_SIZE}=${userId}`}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -43,6 +43,7 @@ const WebhooksTableRow = (props) => {
|
|||||||
openSettingsModal,
|
openSettingsModal,
|
||||||
openDeleteModal,
|
openDeleteModal,
|
||||||
setCurrentWebhook,
|
setCurrentWebhook,
|
||||||
|
hideColumns,
|
||||||
} = props;
|
} = props;
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
@ -111,7 +112,7 @@ const WebhooksTableRow = (props) => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<StyledWrapper onClick={handleRowClick}>
|
<StyledWrapper onClick={handleRowClick}>
|
||||||
<StyledTableRow contextOptions={contextOptions}>
|
<StyledTableRow contextOptions={contextOptions} hideColumns={hideColumns}>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Text as="span" fontWeight={600} className="mr-8 textOverflow">
|
<Text as="span" fontWeight={600} className="mr-8 textOverflow">
|
||||||
{webhook.name}{" "}
|
{webhook.name}{" "}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useRef, useEffect } from "react";
|
import React, { useState, useRef, useEffect } from "react";
|
||||||
import { inject, observer } from "mobx-react";
|
import { inject, observer } from "mobx-react";
|
||||||
import { isMobile } from "react-device-detect";
|
import { isMobile } from "react-device-detect";
|
||||||
|
|
||||||
@ -30,6 +30,10 @@ const TableWrapper = styled(TableContainer)`
|
|||||||
|
|
||||||
TableWrapper.defaultProps = { theme: Base };
|
TableWrapper.defaultProps = { theme: Base };
|
||||||
|
|
||||||
|
const TABLE_VERSION = "5";
|
||||||
|
const COLUMNS_SIZE = `webhooksConfigColumnsSize_ver-${TABLE_VERSION}`;
|
||||||
|
const INFO_PANEL_COLUMNS_SIZE = `infoPanelWebhooksConfigColumnsSize_ver-${TABLE_VERSION}`;
|
||||||
|
|
||||||
const WebhooksTableView = (props) => {
|
const WebhooksTableView = (props) => {
|
||||||
const {
|
const {
|
||||||
webhooks,
|
webhooks,
|
||||||
@ -39,9 +43,11 @@ const WebhooksTableView = (props) => {
|
|||||||
setViewAs,
|
setViewAs,
|
||||||
openSettingsModal,
|
openSettingsModal,
|
||||||
openDeleteModal,
|
openDeleteModal,
|
||||||
|
userId,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const tableRef = useRef(null);
|
const tableRef = useRef(null);
|
||||||
|
const [hideColumns, setHideColumns] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!sectionWidth) return;
|
if (!sectionWidth) return;
|
||||||
@ -52,17 +58,24 @@ const WebhooksTableView = (props) => {
|
|||||||
}
|
}
|
||||||
}, [sectionWidth]);
|
}, [sectionWidth]);
|
||||||
|
|
||||||
|
const columnStorageName = `${COLUMNS_SIZE}=${userId}`;
|
||||||
|
const columnInfoPanelStorageName = `${INFO_PANEL_COLUMNS_SIZE}=${userId}`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TableWrapper
|
<TableWrapper forwardedRef={tableRef} useReactWindow>
|
||||||
forwardedRef={tableRef}
|
<WebhookTableHeader
|
||||||
style={{
|
sectionWidth={sectionWidth}
|
||||||
gridTemplateColumns: "200px 500px 110px 24px",
|
tableRef={tableRef}
|
||||||
}}
|
columnStorageName={columnStorageName}
|
||||||
useReactWindow>
|
columnInfoPanelStorageName={columnInfoPanelStorageName}
|
||||||
<WebhookTableHeader sectionWidth={sectionWidth} tableRef={tableRef} />
|
setHideColumns={setHideColumns}
|
||||||
|
/>
|
||||||
<TableBody
|
<TableBody
|
||||||
itemHeight={49}
|
itemHeight={49}
|
||||||
useReactWindow
|
useReactWindow
|
||||||
|
infoPanelVisible={false}
|
||||||
|
columnStorageName={columnStorageName}
|
||||||
|
columnInfoPanelStorageName={columnInfoPanelStorageName}
|
||||||
filesLength={webhooks.length}
|
filesLength={webhooks.length}
|
||||||
fetchMoreFiles={loadWebhooks}
|
fetchMoreFiles={loadWebhooks}
|
||||||
hasMoreFiles={false}
|
hasMoreFiles={false}
|
||||||
@ -74,6 +87,7 @@ const WebhooksTableView = (props) => {
|
|||||||
index={index}
|
index={index}
|
||||||
openSettingsModal={openSettingsModal}
|
openSettingsModal={openSettingsModal}
|
||||||
openDeleteModal={openDeleteModal}
|
openDeleteModal={openDeleteModal}
|
||||||
|
hideColumns={hideColumns}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</TableBody>
|
</TableBody>
|
||||||
@ -81,15 +95,17 @@ const WebhooksTableView = (props) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default inject(({ webhooksStore, setup }) => {
|
export default inject(({ webhooksStore, setup, auth }) => {
|
||||||
const { webhooks, loadWebhooks } = webhooksStore;
|
const { webhooks, loadWebhooks } = webhooksStore;
|
||||||
|
|
||||||
const { viewAs, setViewAs } = setup;
|
const { viewAs, setViewAs } = setup;
|
||||||
|
const { id: userId } = auth.userStore.user;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
webhooks,
|
webhooks,
|
||||||
viewAs,
|
viewAs,
|
||||||
setViewAs,
|
setViewAs,
|
||||||
loadWebhooks,
|
loadWebhooks,
|
||||||
|
userId,
|
||||||
};
|
};
|
||||||
})(observer(WebhooksTableView));
|
})(observer(WebhooksTableView));
|
||||||
|
Loading…
Reference in New Issue
Block a user