Skip to content

Commit 3a17e21

Browse files
committed
feat: added url state
1 parent c80fc64 commit 3a17e21

9 files changed

Lines changed: 6711 additions & 5013 deletions

File tree

web/src/components/data-table.tsx

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,33 +59,78 @@ const getColumnVis = () => {
5959
}
6060
}
6161

62+
const initialFilters = {
63+
column: "name",
64+
columnVisibility: getColumnVis(),
65+
page: "bin",
66+
search: '',
67+
}
68+
69+
const getUrlParams = () => {
70+
const params = new URLSearchParams(window.location.search);
71+
return {
72+
column: params.get('searchBy') || initialFilters.column,
73+
page: params.get('repo') || initialFilters.page,
74+
search: params.get('search') || initialFilters.search,
75+
};
76+
};
77+
78+
const updateUrlParams = (params: typeof initialFilters) => {
79+
const urlParams = new URLSearchParams();
80+
if (params.column !== initialFilters.column) urlParams.set('searchBy', params.column);
81+
if (params.page !== initialFilters.page) urlParams.set('repo', params.page);
82+
if (params.search) urlParams.set('search', params.search);
83+
84+
const newUrl = `${window.location.pathname}${urlParams.toString() ? '?' + urlParams.toString() : ''}`;
85+
window.history.replaceState({}, '', newUrl);
86+
};
87+
6288
export function DataTable<TData, TValue>({
6389
columns,
6490
}: DataTableProps<TData, TValue>) {
91+
const urlParams = getUrlParams();
6592
const [sorting, setSorting] = React.useState<SortingState>([])
66-
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(
67-
[]
68-
)
69-
const [column, setColumn] = React.useState("name");
70-
const [columnVisibility, setColumnVisibility] =
71-
React.useState<VisibilityState>(getColumnVis());
72-
const [page, setPage] = React.useState("bin");
93+
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])
94+
const [column, setColumn] = React.useState(urlParams.column);
95+
const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>(getColumnVis());
96+
const [page, setPage] = React.useState(urlParams.page);
7397
const [data, setData] = React.useState<TData[] | "loading">(binX86 as unknown as TData[]);
7498

99+
100+
React.useEffect(() => {
101+
updateUrlParams(
102+
{
103+
column,
104+
page,
105+
search: (table?.getColumn(column)?.getFilterValue() as string) || '',
106+
columnVisibility,
107+
},
108+
);
109+
}, [column, page, columnFilters, columnVisibility]);
110+
111+
React.useEffect(() => {
112+
if (urlParams.search) {
113+
table?.getColumn(urlParams.column)?.setFilterValue(urlParams.search);
114+
if (input.current) {
115+
input.current.value = urlParams.search;
116+
}
117+
}
118+
}, []);
119+
75120
React.useEffect(() => {
76121
localStorage.visiv = JSON.stringify(columnVisibility);
77122
}, [columnVisibility]);
78123

79124
React.useEffect(() => {
80125
(async () => {
81126
switch (page) {
82-
case "s":
127+
case "soar":
83128
setData((await soarPkgs).default as unknown as TData[]);
84129
break;
85130
case "bin":
86131
setData(binX86 as unknown as TData[]);
87132
break;
88-
case "bina":
133+
case "bin_arm":
89134
setData((await binArm64).default as unknown as TData[]);
90135
break;
91136
}
@@ -159,9 +204,9 @@ export function DataTable<TData, TValue>({
159204
<SelectGroup>
160205
<SelectLabel>bincache</SelectLabel>
161206
<SelectItem value="bin">bincache (x86_64)</SelectItem>
162-
<SelectItem value="bina">bincache (aarch64)</SelectItem>
207+
<SelectItem value="bin_arm">bincache (aarch64)</SelectItem>
208+
<SelectItem value="soar">soarpkgs</SelectItem>
163209
</SelectGroup>
164-
<SelectItem value="s">soarpkgs</SelectItem>
165210
</SelectContent>
166211
</Select>
167212
<Select

web/src/metadata_bincache_aarch64-linux.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

web/src/metadata_bincache_x86_64-linux.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

web/src/metadata_soarpkgs_[category].json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)