Skip to content

Commit

Permalink
chore(ui): add feedback_replace to ui, update listeners w/ feedback_ref
Browse files Browse the repository at this point in the history
  • Loading branch information
gtarpenning committed Oct 28, 2024
1 parent b77df96 commit f76e316
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {
FeedbackCreateRes,
FeedbackPurgeReq,
FeedbackPurgeRes,
FeedbackReplaceReq,
FeedbackReplaceRes,
TraceCallsDeleteReq,
TraceCallUpdateReq,
TraceRefsReadBatchReq,
Expand All @@ -23,7 +25,13 @@ export class TraceServerClient extends DirectTraceServerClient {
}> = [];
private onDeleteListeners: Array<() => void>;
private onRenameListeners: Array<() => void>;
private onFeedbackListeners: Record<string, Array<() => void>>;
// weave_ref -> feedback_ref -> callback
// For feedback without a feedback_ref, (the default case)
// the key is the empty string (this.FEEDBACK_REF_DEFAULT).
private onFeedbackListeners: Record<
string,
Record<string, Array<() => void>>
>;

constructor(baseUrl: string) {
super(baseUrl);
Expand All @@ -34,6 +42,8 @@ export class TraceServerClient extends DirectTraceServerClient {
this.onFeedbackListeners = {};
}

private FEEDBACK_REF_DEFAULT = '';

/**
* Registers a callback to be called when a delete operation occurs.
* This method is purely for local notification within the client
Expand All @@ -60,20 +70,25 @@ export class TraceServerClient extends DirectTraceServerClient {
}
public registerOnFeedbackListener(
weaveRef: string,
callback: () => void
callback: () => void,
feedbackRef?: string
): () => void {
if (!(weaveRef in this.onFeedbackListeners)) {
this.onFeedbackListeners[weaveRef] = [];
const feedbackRefResolved = feedbackRef ?? this.FEEDBACK_REF_DEFAULT;
if (!(feedbackRefResolved in this.onFeedbackListeners)) {
this.onFeedbackListeners[feedbackRefResolved] = {};
}
if (!(weaveRef in this.onFeedbackListeners[feedbackRefResolved])) {
this.onFeedbackListeners[feedbackRefResolved][weaveRef] = [];
}
this.onFeedbackListeners[weaveRef].push(callback);
this.onFeedbackListeners[feedbackRefResolved][weaveRef].push(callback);
return () => {
const newListeners = this.onFeedbackListeners[weaveRef].filter(
listener => listener !== callback
);
const newListeners = this.onFeedbackListeners[feedbackRefResolved][
weaveRef
].filter(listener => listener !== callback);
if (newListeners.length) {
this.onFeedbackListeners[weaveRef] = newListeners;
this.onFeedbackListeners[feedbackRefResolved][weaveRef] = newListeners;
} else {
delete this.onFeedbackListeners[weaveRef];
delete this.onFeedbackListeners[feedbackRefResolved][weaveRef];
}
};
}
Expand All @@ -94,7 +109,10 @@ export class TraceServerClient extends DirectTraceServerClient {

public feedbackCreate(req: FeedbackCreateReq): Promise<FeedbackCreateRes> {
const res = super.feedbackCreate(req).then(createRes => {
const listeners = this.onFeedbackListeners[req.weave_ref] ?? [];
const feedbackRefResolved =
req.payload?.feedback_ref ?? this.FEEDBACK_REF_DEFAULT;
const listeners =
this.onFeedbackListeners[feedbackRefResolved][req.weave_ref] ?? [];
listeners.forEach(listener => listener());
return createRes;
});
Expand All @@ -106,13 +124,27 @@ export class TraceServerClient extends DirectTraceServerClient {
// information about the refs that were modified.
// For now, just call all registered feedback listeners.
for (const listeners of Object.values(this.onFeedbackListeners)) {
listeners.forEach(listener => listener());
for (const listenersForWeaveRef of Object.values(listeners)) {
listenersForWeaveRef.forEach(listener => listener());
}
}
return purgeRes;
});
return res;
}

public feedbackReplace(req: FeedbackReplaceReq): Promise<FeedbackReplaceRes> {
const res = super.feedbackReplace(req).then(replaceRes => {
const feedbackRefResolved =
req.payload?.feedback_ref ?? this.FEEDBACK_REF_DEFAULT;
const listeners =
this.onFeedbackListeners[feedbackRefResolved][req.weave_ref] ?? [];
listeners.forEach(listener => listener());
return replaceRes;
});
return res;
}

public readBatch(req: TraceRefsReadBatchReq): Promise<TraceRefsReadBatchRes> {
return this.requestReadBatch(req);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,16 @@ export type FeedbackPurgeError = {
detail: string;
};
export type FeedbackPurgeRes = FeedbackPurgeSuccess | FeedbackPurgeError;

export type FeedbackReplaceReq = FeedbackCreateReq & {
feedback_id: string;
};
export type FeedbackReplaceSuccess = {};
export type FeedbackReplaceError = {
detail: string;
};
export type FeedbackReplaceRes = FeedbackCreateRes;

interface TraceObjectsFilter {
base_object_classes?: string[];
object_ids?: string[];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import {
FeedbackPurgeRes,
FeedbackQueryReq,
FeedbackQueryRes,
FeedbackReplaceReq,
FeedbackReplaceRes,
TraceCallReadReq,
TraceCallReadRes,
TraceCallSchema,
Expand Down Expand Up @@ -268,6 +270,13 @@ export class DirectTraceServerClient {
);
}

public feedbackReplace(req: FeedbackReplaceReq): Promise<FeedbackReplaceRes> {
return this.makeRequest<FeedbackReplaceReq, FeedbackReplaceRes>(
'/feedback/replace',
req
);
}

public fileContent(
req: TraceFileContentReadReq
): Promise<TraceFileContentReadRes> {
Expand Down

0 comments on commit f76e316

Please sign in to comment.