mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-03-25 19:21:49 +00:00
124 lines
4.0 KiB
TypeScript
124 lines
4.0 KiB
TypeScript
import { StoredProcedureDefinition } from "@azure/cosmos";
|
|
import * as ko from "knockout";
|
|
import * as Constants from "../../Common/Constants";
|
|
import { deleteTrigger } from "../../Common/dataAccess/deleteTrigger";
|
|
import * as ViewModels from "../../Contracts/ViewModels";
|
|
import { useTabs } from "../../hooks/useTabs";
|
|
import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants";
|
|
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
|
|
import { useDialog } from "../Controls/Dialog";
|
|
import Explorer from "../Explorer";
|
|
import TriggerTab from "../Tabs/TriggerTab";
|
|
import { useSelectedNode } from "../useSelectedNode";
|
|
|
|
export default class Trigger {
|
|
public nodeKind: string;
|
|
public container: Explorer;
|
|
public collection: ViewModels.Collection;
|
|
public self: string;
|
|
public rid: string;
|
|
public id: ko.Observable<string>;
|
|
public body: ko.Observable<string>;
|
|
public triggerType: ko.Observable<string>;
|
|
public triggerOperation: ko.Observable<string>;
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
constructor(container: Explorer, collection: ViewModels.Collection, data: any) {
|
|
this.nodeKind = "Trigger";
|
|
this.container = container;
|
|
this.collection = collection;
|
|
this.self = data._self;
|
|
this.rid = data._rid;
|
|
this.id = ko.observable(data.id);
|
|
this.body = ko.observable(data.body);
|
|
this.triggerOperation = ko.observable(data.triggerOperation);
|
|
this.triggerType = ko.observable(data.triggerType);
|
|
}
|
|
|
|
public select(): void {
|
|
useSelectedNode.getState().setSelectedNode(this);
|
|
TelemetryProcessor.trace(Action.SelectItem, ActionModifiers.Mark, {
|
|
description: "Trigger node",
|
|
|
|
dataExplorerArea: Constants.Areas.ResourceTree,
|
|
});
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
public static create(source: ViewModels.Collection, _event: MouseEvent): void {
|
|
const id = useTabs.getState().getTabs(ViewModels.CollectionTabKind.Triggers).length + 1;
|
|
const trigger = <StoredProcedureDefinition>{
|
|
id: "",
|
|
body: "function trigger(){}",
|
|
triggerOperation: "All",
|
|
triggerType: "Pre",
|
|
};
|
|
|
|
const triggerTab: TriggerTab = new TriggerTab({
|
|
resource: trigger,
|
|
isNew: true,
|
|
tabKind: ViewModels.CollectionTabKind.Triggers,
|
|
title: `New Trigger ${id}`,
|
|
tabPath: "",
|
|
collection: source,
|
|
node: source,
|
|
});
|
|
|
|
useTabs.getState().activateNewTab(triggerTab);
|
|
}
|
|
|
|
public open = () => {
|
|
this.select();
|
|
|
|
const triggerTabs: TriggerTab[] = useTabs
|
|
.getState()
|
|
.getTabs(ViewModels.CollectionTabKind.Triggers, (tab) => tab.node && tab.node.rid === this.rid) as TriggerTab[];
|
|
let triggerTab: TriggerTab = triggerTabs && triggerTabs[0];
|
|
|
|
if (triggerTab) {
|
|
useTabs.getState().activateTab(triggerTab);
|
|
} else {
|
|
const triggerData = <StoredProcedureDefinition>{
|
|
_rid: this.rid,
|
|
_self: this.self,
|
|
id: this.id(),
|
|
body: this.body(),
|
|
triggerOperation: this.triggerOperation(),
|
|
triggerType: this.triggerType(),
|
|
};
|
|
|
|
triggerTab = new TriggerTab({
|
|
resource: triggerData,
|
|
isNew: false,
|
|
tabKind: ViewModels.CollectionTabKind.Triggers,
|
|
title: triggerData.id,
|
|
tabPath: "",
|
|
collection: this.collection,
|
|
node: this,
|
|
});
|
|
|
|
useTabs.getState().activateNewTab(triggerTab);
|
|
}
|
|
};
|
|
|
|
public delete(): void {
|
|
useDialog.getState().showOkCancelModalDialog(
|
|
"Confirm delete",
|
|
"Are you sure you want to delete the trigger?",
|
|
"Delete",
|
|
() => {
|
|
deleteTrigger(this.collection.databaseId, this.collection.id(), this.id()).then(
|
|
() => {
|
|
useTabs.getState().closeTabsByComparator((tab) => tab.node && tab.node.rid === this.rid);
|
|
this.collection.children.remove(this);
|
|
},
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
() => {}
|
|
);
|
|
},
|
|
"Cancel",
|
|
undefined
|
|
);
|
|
}
|
|
}
|