mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 04:26:43 +00:00
fix: include imports in secret pagination, and rectify tag/value search not working for secrets
This commit is contained in:
@@ -227,7 +227,14 @@ export const SecretMainPage = () => {
|
|||||||
const rows = useMemo(() => {
|
const rows = useMemo(() => {
|
||||||
const filteredSecrets =
|
const filteredSecrets =
|
||||||
secrets
|
secrets
|
||||||
?.filter(({ key }) => key.toUpperCase().includes(debouncedSearchFilter.toUpperCase()))
|
?.filter(({ key, tags: secretTags, value }) => {
|
||||||
|
const isTagFilterActive = Boolean(Object.keys(filter.tags).length);
|
||||||
|
return (
|
||||||
|
(!isTagFilterActive || secretTags?.some(({ id }) => filter.tags?.[id])) &&
|
||||||
|
(key.toUpperCase().includes(debouncedSearchFilter.toUpperCase()) ||
|
||||||
|
value?.toLowerCase().includes(debouncedSearchFilter.toLowerCase()))
|
||||||
|
);
|
||||||
|
})
|
||||||
.sort((a, b) =>
|
.sort((a, b) =>
|
||||||
sortDir === SortDir.ASC ? a.key.localeCompare(b.key) : b.key.localeCompare(a.key)
|
sortDir === SortDir.ASC ? a.key.localeCompare(b.key) : b.key.localeCompare(a.key)
|
||||||
) ?? [];
|
) ?? [];
|
||||||
@@ -243,13 +250,36 @@ export const SecretMainPage = () => {
|
|||||||
.sort((a, b) =>
|
.sort((a, b) =>
|
||||||
sortDir === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name)
|
sortDir === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name)
|
||||||
) ?? [];
|
) ?? [];
|
||||||
|
const filteredSecretImports =
|
||||||
|
secretImports
|
||||||
|
?.filter(({ importPath }) =>
|
||||||
|
importPath.toLowerCase().includes(debouncedSearchFilter.toLowerCase())
|
||||||
|
)
|
||||||
|
.sort((a, b) =>
|
||||||
|
sortDir === "asc"
|
||||||
|
? a.importPath.localeCompare(b.importPath)
|
||||||
|
: b.importPath.localeCompare(a.importPath)
|
||||||
|
) ?? [];
|
||||||
|
|
||||||
const totalRows =
|
const totalRows =
|
||||||
filteredFolders.length + filteredDynamicSecrets.length + filteredSecrets.length;
|
filteredSecretImports.length +
|
||||||
|
filteredFolders.length +
|
||||||
|
filteredDynamicSecrets.length +
|
||||||
|
filteredSecrets.length;
|
||||||
|
|
||||||
const paginatedFolders = filteredFolders.slice(paginationOffset, paginationOffset + perPage);
|
const paginatedImports = filteredSecretImports.slice(
|
||||||
|
paginationOffset,
|
||||||
|
paginationOffset + perPage
|
||||||
|
);
|
||||||
|
|
||||||
let remainingRows = perPage - paginatedFolders.length;
|
let remainingRows = perPage - paginatedImports.length;
|
||||||
|
const foldersStartIndex = Math.max(0, paginationOffset - filteredSecretImports.length);
|
||||||
|
const paginatedFolders =
|
||||||
|
remainingRows > 0
|
||||||
|
? filteredFolders.slice(foldersStartIndex, foldersStartIndex + remainingRows)
|
||||||
|
: [];
|
||||||
|
|
||||||
|
remainingRows -= paginatedFolders.length;
|
||||||
const dynamicSecretStartIndex = Math.max(0, paginationOffset - filteredFolders.length);
|
const dynamicSecretStartIndex = Math.max(0, paginationOffset - filteredFolders.length);
|
||||||
const paginatiedDynamicSecrets =
|
const paginatiedDynamicSecrets =
|
||||||
remainingRows > 0
|
remainingRows > 0
|
||||||
@@ -271,12 +301,23 @@ export const SecretMainPage = () => {
|
|||||||
: [];
|
: [];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
imports: paginatedImports,
|
||||||
folders: paginatedFolders,
|
folders: paginatedFolders,
|
||||||
secrets: paginatiedSecrets,
|
secrets: paginatiedSecrets,
|
||||||
dynamicSecrets: paginatiedDynamicSecrets,
|
dynamicSecrets: paginatiedDynamicSecrets,
|
||||||
totalRows
|
totalRows
|
||||||
};
|
};
|
||||||
}, [sortDir, debouncedSearchFilter, folders, secrets, dynamicSecrets, paginationOffset, perPage]);
|
}, [
|
||||||
|
sortDir,
|
||||||
|
debouncedSearchFilter,
|
||||||
|
folders,
|
||||||
|
secrets,
|
||||||
|
dynamicSecrets,
|
||||||
|
paginationOffset,
|
||||||
|
perPage,
|
||||||
|
filter.tags,
|
||||||
|
importedSecrets
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// reset page if no longer valid
|
// reset page if no longer valid
|
||||||
@@ -350,7 +391,7 @@ export const SecretMainPage = () => {
|
|||||||
{canReadSecret && (
|
{canReadSecret && (
|
||||||
<SecretImportListView
|
<SecretImportListView
|
||||||
searchTerm={filter.searchFilter}
|
searchTerm={filter.searchFilter}
|
||||||
secretImports={secretImports}
|
secretImports={rows.imports}
|
||||||
isFetching={isSecretImportsLoading || isSecretImportsFetching}
|
isFetching={isSecretImportsLoading || isSecretImportsFetching}
|
||||||
environment={environment}
|
environment={environment}
|
||||||
workspaceId={workspaceId}
|
workspaceId={workspaceId}
|
||||||
|
|||||||
+1
-1
@@ -123,7 +123,7 @@ export const SecretImportListView = ({
|
|||||||
if (!isFetching) {
|
if (!isFetching) {
|
||||||
setItems(secretImports);
|
setItems(secretImports);
|
||||||
}
|
}
|
||||||
}, [isFetching]);
|
}, [isFetching, secretImports]);
|
||||||
|
|
||||||
const { mutateAsync: deleteSecretImport } = useDeleteSecretImport();
|
const { mutateAsync: deleteSecretImport } = useDeleteSecretImport();
|
||||||
const { mutate: updateSecretImport } = useUpdateSecretImport();
|
const { mutate: updateSecretImport } = useUpdateSecretImport();
|
||||||
|
|||||||
Reference in New Issue
Block a user