ui - instantly show new ui keys

This commit is contained in:
Ishaan Jaff
2025-03-14 09:18:22 -07:00
parent 04662c653f
commit 43b7460968
3 changed files with 40 additions and 12 deletions
@@ -260,17 +260,25 @@ const CreateKey: React.FC<CreateKeyProps> = ({
const response = await keyCreateCall(accessToken, userID, formValues);
console.log("key create Response:", response);
setData((prevData) => (prevData ? [...prevData, response] : [response])); // Check if prevData is null
// Update the data state in this component
setData((prevData) => (prevData ? [...prevData, response] : [response]));
// Also directly update the keys list in AllKeysTable without an API call
if (window.addNewKeyToList) {
window.addNewKeyToList(response);
}
setApiKey(response["key"]);
setSoftBudget(response["soft_budget"]);
message.success("API Key Created");
form.resetFields();
localStorage.removeItem("userData" + userID);
// Add this line to refresh the keys list immediately
if (window.refreshKeysList) {
window.refreshKeysList();
}
// We don't need to call refresh anymore since we're directly updating the state
// if (window.refreshKeysList) {
// window.refreshKeysList();
// }
} catch (error) {
console.log("error in create key:", error);
message.error(`Error creating the key: ${error}`);
@@ -100,6 +100,7 @@ isLoading: boolean;
error: Error | null;
pagination: PaginationData;
refresh: (params?: Record<string, unknown>) => Promise<void>;
setKeys: (newKeysOrUpdater: KeyResponse[] | ((prevKeys: KeyResponse[]) => KeyResponse[])) => void;
}
const useKeyList = ({
@@ -149,16 +150,30 @@ const useKeyList = ({
console.log("selectedTeam", selectedTeam, "currentOrg", currentOrg, "accessToken", accessToken);
}, [selectedTeam, currentOrg, accessToken]);
const setKeys = (newKeysOrUpdater: KeyResponse[] | ((prevKeys: KeyResponse[]) => KeyResponse[])) => {
setKeyData(prevData => {
const newKeys = typeof newKeysOrUpdater === 'function'
? newKeysOrUpdater(prevData.keys)
: newKeysOrUpdater;
return {
...prevData,
keys: newKeys
};
});
};
return {
keys: keyData.keys,
isLoading,
error,
pagination: {
currentPage: keyData.current_page,
totalPages: keyData.total_pages,
totalCount: keyData.total_count
currentPage: keyData.current_page,
totalPages: keyData.total_pages,
totalCount: keyData.total_count
},
refresh: fetchKeys
refresh: fetchKeys,
setKeys
};
};
@@ -176,15 +176,19 @@ const ViewKeyTable: React.FC<ViewKeyTableProps> = ({
// Build a memoized filters object for the backend call.
// Pass filters into the hook so the API call includes these query parameters.
const { keys, isLoading, error, pagination, refresh } = useKeyList({
const { keys, isLoading, error, pagination, refresh, setKeys } = useKeyList({
selectedTeam,
currentOrg,
accessToken,
});
// Make refresh function available globally so CreateKey can access it
// Make both refresh and addKey functions available globally
if (typeof window !== 'undefined') {
window.refreshKeysList = refresh;
window.addNewKeyToList = (newKey) => {
// Add the new key to the keys list without making an API call
setKeys((prevKeys) => [newKey, ...prevKeys]);
};
}
const handlePageChange = (newPage: number) => {
@@ -625,10 +629,11 @@ const ViewKeyTable: React.FC<ViewKeyTableProps> = ({
);
};
// Add this type declaration at the top of the file to avoid TypeScript errors
// Update the type declaration to include the new function
declare global {
interface Window {
refreshKeysList?: () => void;
addNewKeyToList?: (newKey: any) => void;
}
}