webview-ui/src/ClusterProperties/state.ts (52 lines of code) (raw):
import { ClusterInfo, InitialState } from "../../../src/webview-contract/webviewDefinitions/clusterProperties";
import { Lazy, newLoaded, newLoading, newNotLoaded } from "../utilities/lazy";
import { WebviewStateUpdater } from "../utilities/state";
import { getWebviewMessageContext } from "../utilities/vscode";
export type CreateClusterState = InitialState & {
clusterInfo: Lazy<ClusterInfo>;
clusterOperationRequested: boolean;
errorMessage: string | null;
selectedUpgradeVersion: string | null;
};
export type EventDef = {
setPropertiesLoading: void;
setClusterOperationRequested: void;
upgradeVersionSelected: string;
};
export const stateUpdater: WebviewStateUpdater<"clusterProperties", EventDef, CreateClusterState> = {
createState: (initialState) => ({
...initialState,
clusterInfo: newNotLoaded(),
clusterOperationRequested: false,
errorMessage: null,
selectedUpgradeVersion: null,
}),
vscodeMessageHandler: {
getPropertiesResponse: (state, clusterInfo) => ({
...state,
clusterInfo: newLoaded(clusterInfo),
clusterOperationRequested: false,
}),
upgradeClusterVersionResponse: (state) => ({
...state,
clusterOperationRequested: false,
}),
errorNotification: (state, err) => ({ ...state, errorMessage: err }),
},
eventHandler: {
setPropertiesLoading: (state) => ({ ...state, clusterInfo: newLoading() }),
setClusterOperationRequested: (state) => ({ ...state, clusterOperationRequested: true }),
upgradeVersionSelected: (state, version) => ({ ...state, selectedUpgradeVersion: version }),
},
};
export const vscode = getWebviewMessageContext<"clusterProperties">({
getPropertiesRequest: null,
stopClusterRequest: null,
startClusterRequest: null,
abortAgentPoolOperation: null,
abortClusterOperation: null,
reconcileClusterRequest: null,
refreshRequest: null,
upgradeClusterVersionRequest: null,
detectorCRUDRequest: null,
});