Skip to content

Commit 1b7f1b8

Browse files
authored
Merge pull request #11 from okteto/rlamana/release-0.30.0
Proper update to okteto version of components
2 parents 5fe688d + 69f4c44 commit 1b7f1b8

File tree

2 files changed

+71
-16
lines changed

2 files changed

+71
-16
lines changed

frontend/src/components/features/chat/chat-interface-okteto.tsx

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { useDispatch, useSelector } from "react-redux";
22
import React from "react";
33
import posthog from "posthog-js";
4+
import { useParams } from "react-router";
45
import { convertImageToBase64 } from "#/utils/convert-image-to-base-64";
6+
import { TrajectoryActions } from "../trajectory/trajectory-actions";
57
import { createChatMessage } from "#/services/chat-service";
6-
import { InteractiveChatBox } from "./interactive-chat-box-okteto";
8+
import { InteractiveChatBox } from "./interactive-chat-box";
79
import { addUserMessage } from "#/state/chat-slice";
810
import { RootState } from "#/store";
911
import { AgentState } from "#/types/agent-state";
@@ -14,15 +16,15 @@ import { useWsClient } from "#/context/ws-client-provider";
1416
import { Messages } from "./messages";
1517
import { ChatSuggestionsOkteto } from "./chat-suggestions-okteto";
1618
import { ActionSuggestions } from "./action-suggestions";
19+
1720
import { ScrollToBottomButton } from "#/components/shared/buttons/scroll-to-bottom-button";
1821
import { LoadingSpinner } from "#/components/shared/loading-spinner";
22+
import { useGetTrajectory } from "#/hooks/mutation/use-get-trajectory";
23+
import { downloadTrajectory } from "#/utils/download-trajectory";
24+
import { displayErrorToast } from "#/utils/custom-toast-handlers";
1925

20-
function getEntryPoint(
21-
hasRepository: boolean | null,
22-
hasImportedProjectZip: boolean | null,
23-
): string {
26+
function getEntryPoint(hasRepository: boolean | null): string {
2427
if (hasRepository) return "github";
25-
if (hasImportedProjectZip) return "zip";
2628
return "direct";
2729
}
2830

@@ -35,20 +37,23 @@ export function ChatInterfaceOkteto() {
3537

3638
const { messages } = useSelector((state: RootState) => state.chat);
3739
const { curAgentState } = useSelector((state: RootState) => state.agent);
40+
41+
const [, setFeedbackPolarity] = React.useState<"positive" | "negative">(
42+
"positive",
43+
);
44+
const [, setFeedbackModalIsOpen] = React.useState(false);
3845
const [messageToSend, setMessageToSend] = React.useState<string | null>(null);
39-
const { selectedRepository, importedProjectZip } = useSelector(
46+
const { selectedRepository } = useSelector(
4047
(state: RootState) => state.initialQuery,
4148
);
49+
const params = useParams();
50+
const { mutate: getTrajectory } = useGetTrajectory();
4251

4352
const handleSendMessage = async (content: string, files: File[]) => {
4453
if (messages.length === 0) {
4554
posthog.capture("initial_query_submitted", {
46-
entry_point: getEntryPoint(
47-
selectedRepository !== null,
48-
importedProjectZip !== null,
49-
),
55+
entry_point: getEntryPoint(selectedRepository !== null),
5056
query_character_length: content.length,
51-
uploaded_zip_size: importedProjectZip?.length,
5257
});
5358
} else {
5459
posthog.capture("user_message_sent", {
@@ -71,6 +76,32 @@ export function ChatInterfaceOkteto() {
7176
send(generateAgentStateChangeEvent(AgentState.STOPPED));
7277
};
7378

79+
const onClickShareFeedbackActionButton = async (
80+
polarity: "positive" | "negative",
81+
) => {
82+
setFeedbackModalIsOpen(true);
83+
setFeedbackPolarity(polarity);
84+
};
85+
86+
const onClickExportTrajectoryButton = () => {
87+
if (!params.conversationId) {
88+
displayErrorToast("ConversationId unknown, cannot download trajectory");
89+
return;
90+
}
91+
92+
getTrajectory(params.conversationId, {
93+
onSuccess: async (data) => {
94+
await downloadTrajectory(
95+
params.conversationId ?? "unknown",
96+
data.trajectory,
97+
);
98+
},
99+
onError: (error) => {
100+
displayErrorToast(error.message);
101+
},
102+
});
103+
};
104+
74105
const isWaitingForUserInput =
75106
curAgentState === AgentState.AWAITING_USER_INPUT ||
76107
curAgentState === AgentState.FINISHED;
@@ -112,6 +143,16 @@ export function ChatInterfaceOkteto() {
112143

113144
<div className="flex flex-col gap-[6px] px-4 pb-4">
114145
<div className="flex justify-between relative">
146+
<TrajectoryActions
147+
onPositiveFeedback={() =>
148+
onClickShareFeedbackActionButton("positive")
149+
}
150+
onNegativeFeedback={() =>
151+
onClickShareFeedbackActionButton("negative")
152+
}
153+
onExportTrajectory={() => onClickExportTrajectoryButton()}
154+
/>
155+
115156
<div className="absolute left-1/2 transform -translate-x-1/2 bottom-0">
116157
{curAgentState === AgentState.RUNNING && <TypingIndicator />}
117158
</div>

frontend/src/entry.client.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,27 @@ import { HydratedRouter } from "react-router/dom";
99
import React, { startTransition, StrictMode } from "react";
1010
import { hydrateRoot } from "react-dom/client";
1111
import { Provider } from "react-redux";
12+
// import posthog from "posthog-js";
1213
import "./i18n";
1314
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
1415
import store from "./store";
1516
import { AuthProvider } from "./context/auth-context";
1617
import { queryClientConfig } from "./query-client-config";
17-
import { SettingsProvider } from "./context/settings-context";
18+
19+
// function PosthogInit() {
20+
// const { data: config } = useConfig();
21+
22+
// React.useEffect(() => {
23+
// if (config?.POSTHOG_CLIENT_KEY) {
24+
// posthog.init(config.POSTHOG_CLIENT_KEY, {
25+
// api_host: "https://us.i.posthog.com",
26+
// person_profiles: "identified_only",
27+
// });
28+
// }
29+
// }, [config]);
30+
31+
// return null;
32+
// }
1833

1934
async function prepareApp() {
2035
if (
@@ -39,9 +54,8 @@ prepareApp().then(() =>
3954
<Provider store={store}>
4055
<AuthProvider>
4156
<QueryClientProvider client={queryClient}>
42-
<SettingsProvider>
43-
<HydratedRouter />
44-
</SettingsProvider>
57+
<HydratedRouter />
58+
{/* <PosthogInit /> */}
4559
</QueryClientProvider>
4660
</AuthProvider>
4761
</Provider>

0 commit comments

Comments
 (0)