mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-24 04:04:13 +00:00
Container Copy Job implementation for SQL accounts (#2241)
* Initial dev for container copy * remove padding from label * Added Copy Job prerequisites screen * Added hooks to evaluate reader role access * added copyjob pre-requsite screen along with it's validations * Added monitor copy job list screen * added copy job list refresh and reset functionality * remove arm token dependency * fetch account details from account id instead of context * Fix lint & typescript checks * show copyjob screen from portal navigation * adding copy job details screen * remove duplicate code & show sql accounts only * ui fixes for list job page * pending icon * copy job details screen ui * reset .vscode/settings.json * Fixed existing UTs * disabling action buttons until it's in progress * fixed formatting * Adding loader on submit button and show job creation errors in the panel itself * updating disabling action menu item logic * added custom pager * fix lint and ts errors * updating file names and removing comments * remove comments * modularize the arom common code * Adding content and removing tooltip * updating job details screen * updating online copy enabled screen * Adding below changes - Don't show permission screen for same account in offline mode - Don't show identity permissions for same account in online mode - Show error message if selected containers are identical - Update abort signal messages * added feedback code from explorer * Add tooltips and long polling - Added tooltips to permission sections - Implemented long polling for PITR and online copy enabled sections - Long polling automatically stops after 15 minutes - After polling ends, a refresh button will be displayed --------- Co-authored-by: nishthaAhujaa <nishtha17354@iiittd.ac.in>
This commit is contained in:
65
src/hooks/useDatabases.tsx
Normal file
65
src/hooks/useDatabases.tsx
Normal file
@@ -0,0 +1,65 @@
|
||||
import { DatabaseModel } from "Contracts/DataModels";
|
||||
import useSWR from "swr";
|
||||
import { getDatabaseEndpoint } from "../Common/DatabaseAccountUtility";
|
||||
import { configContext } from "../ConfigContext";
|
||||
import { ApiType } from "../UserContext";
|
||||
import { getCopyJobAuthorizationHeader } from "../Utils/CopyJobAuthUtils";
|
||||
|
||||
const apiVersion = "2023-09-15";
|
||||
export interface FetchDatabasesListParams {
|
||||
subscriptionId: string;
|
||||
resourceGroupName: string;
|
||||
accountName: string;
|
||||
apiType?: ApiType;
|
||||
}
|
||||
|
||||
const buildReadDatabasesListUrl = (params: FetchDatabasesListParams): string => {
|
||||
const { subscriptionId, resourceGroupName, accountName, apiType } = params;
|
||||
const databaseEndpoint = getDatabaseEndpoint(apiType);
|
||||
|
||||
let armEndpoint = configContext.ARM_ENDPOINT;
|
||||
if (armEndpoint.endsWith("/")) {
|
||||
armEndpoint = armEndpoint.slice(0, -1);
|
||||
}
|
||||
return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/${databaseEndpoint}?api-version=${apiVersion}`;
|
||||
};
|
||||
|
||||
const fetchDatabasesList = async (
|
||||
subscriptionId: string,
|
||||
resourceGroupName: string,
|
||||
accountName: string,
|
||||
apiType: ApiType,
|
||||
): Promise<DatabaseModel[]> => {
|
||||
const uri = buildReadDatabasesListUrl({ subscriptionId, resourceGroupName, accountName, apiType });
|
||||
const headers = getCopyJobAuthorizationHeader();
|
||||
|
||||
const response = await fetch(uri, {
|
||||
method: "GET",
|
||||
headers: headers,
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Failed to fetch databases");
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data.value;
|
||||
};
|
||||
|
||||
export function useDatabases(
|
||||
subscriptionId: string,
|
||||
resourceGroupName: string,
|
||||
accountName: string,
|
||||
apiType: ApiType,
|
||||
): DatabaseModel[] | undefined {
|
||||
const { data } = useSWR(
|
||||
() =>
|
||||
subscriptionId && resourceGroupName && accountName && apiType
|
||||
? ["fetchDatabasesLinkedToResource", subscriptionId, resourceGroupName, accountName, apiType]
|
||||
: undefined,
|
||||
(_, subscriptionId, resourceGroupName, accountName, apiType) =>
|
||||
fetchDatabasesList(subscriptionId, resourceGroupName, accountName, apiType),
|
||||
);
|
||||
|
||||
return data;
|
||||
}
|
||||
Reference in New Issue
Block a user