import * as React from "react"; import * as SDK from "azure-devops-extension-sdk"; import { CommonServiceIds, IExtensionDataManager, IExtensionDataService } from "azure-devops-extension-api"; import { Button } from "azure-devops-ui/Button"; import { TextField } from "azure-devops-ui/TextField"; export interface IExtensionDataState { dataText?: string; persistedText?: string; ready?: boolean; } export class ExtensionDataTab extends React.Component<{}, IExtensionDataState> { private _dataManager?: IExtensionDataManager; constructor(props: {}) { super(props); this.state = {}; } public componentDidMount() { this.initializeState(); } private async initializeState(): Promise { await SDK.ready(); const accessToken = await SDK.getAccessToken(); const extDataService = await SDK.getService(CommonServiceIds.ExtensionDataService); this._dataManager = await extDataService.getExtensionDataManager(SDK.getExtensionContext().id, accessToken); this._dataManager.getValue("test-id").then((data) => { this.setState({ dataText: data, persistedText: data, ready: true }); }, () => { this.setState({ dataText: "", ready: true }); }); } public render(): JSX.Element { const { dataText, ready, persistedText } = this.state; return (
); } private onTextValueChanged = (event: React.ChangeEvent, value: string): void => { this.setState({ dataText: value }); } private onSaveData = (): void => { const { dataText } = this.state; this.setState({ ready: false }); this._dataManager!.setValue("test-id", dataText || "").then(() => { this.setState({ ready: true, persistedText: dataText }); }); } }