hide unmodeled apis

This commit is contained in:
Nora
2023-08-16 13:24:20 +00:00
parent 84ab602277
commit 56ecd1a84c
5 changed files with 45 additions and 17 deletions

View File

@@ -64,8 +64,9 @@ export class DataExtensionsEditorView extends AbstractWebview<
private readonly extensionPack: ExtensionPack,
private mode: Mode,
private readonly updateModelDetailsPanelState: (
externalApiUsages: ExternalApiUsage[],
databaseItem: DatabaseItem,
externalApiUsages?: ExternalApiUsage[],
databaseItem?: DatabaseItem,
hideModeledApis?: boolean,
) => Promise<void>,
private readonly revealItemInDetailsPanel: (usage: Usage) => Promise<void>,
private readonly handleViewBecameActive: (
@@ -237,7 +238,11 @@ export class DataExtensionsEditorView extends AbstractWebview<
break;
case "hideModeledApis":
// do something
await this.updateModelDetailsPanelState(
undefined,
undefined,
msg.hideModeledApis,
);
break;
default:
assertNever(msg);

View File

@@ -13,6 +13,7 @@ import { ExternalApiUsage, Usage } from "../external-api-usage";
import { DatabaseItem } from "../../databases/local-databases";
import { relative } from "path";
import { CodeQLCliServer } from "../../codeql-cli/cli";
import { INITIAL_HIDE_MODELED_APIS_VALUE } from "../shared/initial-hide-modeled-apis-value";
export class ModelDetailsDataProvider
extends DisposableObject
@@ -21,6 +22,7 @@ export class ModelDetailsDataProvider
private externalApiUsages: ExternalApiUsage[] = [];
private databaseItem: DatabaseItem | undefined = undefined;
private sourceLocationPrefix: string | undefined = undefined;
private hideModeledApis: boolean = INITIAL_HIDE_MODELED_APIS_VALUE;
private readonly onDidChangeTreeDataEmitter = this.push(
new EventEmitter<void>(),
@@ -42,19 +44,25 @@ export class ModelDetailsDataProvider
* method and instead always pass new objects/arrays.
*/
public async setState(
externalApiUsages: ExternalApiUsage[],
databaseItem: DatabaseItem,
externalApiUsages?: ExternalApiUsage[],
databaseItem?: DatabaseItem,
hideModeledApis?: boolean,
): Promise<void> {
if (
this.externalApiUsages !== externalApiUsages ||
this.databaseItem !== databaseItem
externalApiUsages &&
databaseItem &&
(this.externalApiUsages !== externalApiUsages ||
this.databaseItem !== databaseItem)
) {
this.externalApiUsages = externalApiUsages;
this.databaseItem = databaseItem;
this.sourceLocationPrefix =
await this.databaseItem.getSourceLocationPrefix(this.cliServer);
this.onDidChangeTreeDataEmitter.fire();
}
if (hideModeledApis !== undefined) {
this.hideModeledApis = hideModeledApis;
}
this.onDidChangeTreeDataEmitter.fire();
}
getTreeItem(item: ModelDetailsTreeViewItem): TreeItem {
@@ -92,7 +100,11 @@ export class ModelDetailsDataProvider
getChildren(item?: ModelDetailsTreeViewItem): ModelDetailsTreeViewItem[] {
if (item === undefined) {
return this.externalApiUsages;
if (this.hideModeledApis) {
return this.externalApiUsages.filter((api) => !api.supported);
} else {
return this.externalApiUsages;
}
} else if (isExternalApiUsage(item)) {
return item.usages;
} else {

View File

@@ -24,14 +24,21 @@ export class ModelDetailsPanel extends DisposableObject {
}
public async setState(
externalApiUsages: ExternalApiUsage[],
databaseItem: DatabaseItem,
externalApiUsages?: ExternalApiUsage[],
databaseItem?: DatabaseItem,
hideModeledApis?: boolean,
): Promise<void> {
await this.dataProvider.setState(externalApiUsages, databaseItem);
this.treeView.badge = {
value: externalApiUsages.length,
tooltip: "Number of external APIs",
};
await this.dataProvider.setState(
externalApiUsages,
databaseItem,
hideModeledApis,
);
if (externalApiUsages) {
this.treeView.badge = {
value: externalApiUsages.length,
tooltip: "Number of external APIs",
};
}
}
public async revealItem(usage: Usage): Promise<void> {

View File

@@ -0,0 +1 @@
export const INITIAL_HIDE_MODELED_APIS_VALUE = true;

View File

@@ -19,6 +19,7 @@ import { percentFormatter } from "./formatters";
import { Mode } from "../../data-extensions-editor/shared/mode";
import { InProgressMethods } from "../../data-extensions-editor/shared/in-progress-methods";
import { getLanguageDisplayName } from "../../common/query-language";
import { INITIAL_HIDE_MODELED_APIS_VALUE } from "../../data-extensions-editor/shared/initial-hide-modeled-apis-value";
const LoadingContainer = styled.div`
text-align: center;
@@ -96,7 +97,9 @@ export function DataExtensionsEditor({
new InProgressMethods(),
);
const [hideModeledApis, setHideModeledApis] = useState(true);
const [hideModeledApis, setHideModeledApis] = useState(
INITIAL_HIDE_MODELED_APIS_VALUE,
);
const [modeledMethods, setModeledMethods] = useState<
Record<string, ModeledMethod>