mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-01 15:22:08 +00:00
* 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>
31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import create, { UseStore } from "zustand";
|
|
|
|
export interface SidePanelState {
|
|
isOpen: boolean;
|
|
panelWidth: string;
|
|
hasConsole: boolean;
|
|
panelContent?: JSX.Element;
|
|
headerText?: string;
|
|
openSidePanel: (headerText: string, panelContent: JSX.Element, panelWidth?: string, onClose?: () => void) => void;
|
|
closeSidePanel: () => void;
|
|
setPanelHasConsole: (hasConsole: boolean) => void;
|
|
getRef?: React.RefObject<HTMLElement>; // Optional ref for focusing the last element.
|
|
}
|
|
export const useSidePanel: UseStore<SidePanelState> = create((set) => ({
|
|
isOpen: false,
|
|
panelWidth: "440px",
|
|
hasConsole: true,
|
|
setPanelHasConsole: (hasConsole: boolean) => set((state) => ({ ...state, hasConsole })),
|
|
openSidePanel: (headerText, panelContent, panelWidth = "440px") =>
|
|
set((state) => ({ ...state, headerText, panelContent, panelWidth, isOpen: true })),
|
|
closeSidePanel: () => {
|
|
const lastFocusedElement = useSidePanel.getState().getRef;
|
|
set((state) => ({ ...state, isOpen: false }));
|
|
const timeoutId = setTimeout(() => {
|
|
lastFocusedElement?.current?.focus();
|
|
set({ getRef: undefined });
|
|
}, 300);
|
|
return () => clearTimeout(timeoutId);
|
|
},
|
|
}));
|