@solidxai/core-ui 0.1.7-beta.8 → 0.1.7-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/common/GeneralSettings.d.ts.map +1 -1
- package/dist/components/common/GeneralSettings.js +68 -36
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/common/GeneralSettings.tsx +81 -42
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts +27 -5
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +25 -37
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +131 -52
- package/dist/components/core/chatter/SolidChatter.d.ts +2 -1
- package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatter.js +2 -2
- package/dist/components/core/chatter/SolidChatter.js.map +1 -1
- package/dist/components/core/chatter/SolidChatter.tsx +2 -1
- package/dist/components/core/chatter/SolidChatterHeader.d.ts +1 -0
- package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.js +3 -3
- package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.tsx +4 -3
- package/dist/components/core/chatter/SolidMessageComposer.d.ts +2 -1
- package/dist/components/core/chatter/SolidMessageComposer.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidMessageComposer.js +3 -1
- package/dist/components/core/chatter/SolidMessageComposer.js.map +1 -1
- package/dist/components/core/chatter/SolidMessageComposer.tsx +3 -1
- package/dist/components/core/common/SolidViewLayoutManager.d.ts +17 -0
- package/dist/components/core/common/SolidViewLayoutManager.d.ts.map +1 -1
- package/dist/components/core/common/SolidViewLayoutManager.js +58 -1
- package/dist/components/core/common/SolidViewLayoutManager.js.map +1 -1
- package/dist/components/core/common/SolidViewLayoutManager.ts +43 -2
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js +92 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx +68 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js +87 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.tsx +70 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.js +111 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.tsx +122 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.js +10 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.tsx +21 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.d.ts +8 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.js +62 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.tsx +27 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.js +8 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.tsx +15 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.d.ts +3 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js +158 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.tsx +185 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.d.ts +17 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js +52 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.tsx +83 -0
- package/dist/components/core/locales/SolidChatterLocaleTabView.d.ts.map +1 -1
- package/dist/components/core/locales/SolidChatterLocaleTabView.js +7 -5
- package/dist/components/core/locales/SolidChatterLocaleTabView.js.map +1 -1
- package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +3 -0
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.css +38 -0
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts +1 -0
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js +4 -3
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.tsx +13 -3
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts +2 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +6 -5
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +6 -7
- package/dist/components/core/users/CreateUser.d.ts.map +1 -1
- package/dist/components/core/users/CreateUser.js +89 -35
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/components/core/users/CreateUser.tsx +291 -165
- package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -1
- package/dist/components/layout/SolidAiStudioLayout.js +123 -8
- package/dist/components/layout/SolidAiStudioLayout.js.map +1 -1
- package/dist/components/layout/SolidAiStudioLayout.tsx +70 -6
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +10 -6
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +11 -7
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/index.ts +11 -0
- package/dist/redux/api/apiKeyApi.d.ts +8 -1
- package/dist/redux/api/apiKeyApi.d.ts.map +1 -1
- package/dist/redux/api/apiKeyApi.js +12 -1
- package/dist/redux/api/apiKeyApi.js.map +1 -1
- package/dist/redux/api/apiKeyApi.ts +9 -0
- package/dist/redux/store/defaultStoreConfig.d.ts +16 -1
- package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
- package/dist/redux/store/defaultStoreConfig.js +3 -1
- package/dist/redux/store/defaultStoreConfig.js.map +1 -1
- package/dist/redux/store/defaultStoreConfig.ts +3 -1
- package/dist/routes/guards/GuestGuard.d.ts +2 -0
- package/dist/routes/guards/GuestGuard.d.ts.map +1 -0
- package/dist/routes/guards/GuestGuard.js +23 -0
- package/dist/routes/guards/GuestGuard.js.map +1 -0
- package/dist/routes/guards/GuestGuard.tsx +24 -0
- package/dist/routes/solidRoutes.d.ts.map +1 -1
- package/dist/routes/solidRoutes.js +2 -1
- package/dist/routes/solidRoutes.js.map +1 -1
- package/dist/routes/solidRoutes.tsx +2 -1
- package/dist/types/solid-core.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,12 +1,50 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
1
37
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
38
|
import { useEffect, useRef, useState } from "react";
|
|
3
39
|
import { useDispatch, useSelector } from "react-redux";
|
|
4
40
|
import { useNavigate, useLocation } from "react-router-dom";
|
|
5
41
|
import { exitStudioMode, setStudioView } from "../../redux/features/solidStudioSlice";
|
|
42
|
+
import { showToast } from "../../redux/features/toastSlice";
|
|
6
43
|
import { useSession } from "../../hooks/useSession";
|
|
7
|
-
import { signOut } from "../../adapters/auth/index";
|
|
44
|
+
import { getSession, signOut } from "../../adapters/auth/index";
|
|
8
45
|
import { createPortal } from "react-dom";
|
|
9
46
|
import { env } from "../../adapters/env";
|
|
47
|
+
import { ERROR_MESSAGES } from "../../constants/error-messages";
|
|
10
48
|
// ── Icons ──────────────────────────────────────────────────────────────────────
|
|
11
49
|
var DotsIcon = function () { return (_jsxs("svg", { width: "15", height: "15", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "3", r: "1.3" }), _jsx("circle", { cx: "8", cy: "8", r: "1.3" }), _jsx("circle", { cx: "8", cy: "13", r: "1.3" })] })); };
|
|
12
50
|
var PreviewIcon = function () { return (_jsxs("svg", { width: "13", height: "13", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M1 7s2.5-5 6-5 6 5 6 5-2.5 5-6 5-6-5-6-5Z", stroke: "currentColor", strokeWidth: "1.3", strokeLinejoin: "round" }), _jsx("circle", { cx: "7", cy: "7", r: "1.8", stroke: "currentColor", strokeWidth: "1.3" })] })); };
|
|
@@ -19,6 +57,7 @@ var FrontendIcon = function () { return (_jsxs("svg", { width: "16", height: "16
|
|
|
19
57
|
// Mount this ONCE at the app root via AppEventListener.
|
|
20
58
|
// When studio mode is off it renders nothing.
|
|
21
59
|
export function SolidStudio() {
|
|
60
|
+
var _this = this;
|
|
22
61
|
var isStudioMode = useSelector(function (state) { var _a, _b; return (_b = (_a = state.solidStudio) === null || _a === void 0 ? void 0 : _a.isStudioMode) !== null && _b !== void 0 ? _b : false; });
|
|
23
62
|
var studioView = useSelector(function (state) { var _a, _b; return (_b = (_a = state.solidStudio) === null || _a === void 0 ? void 0 : _a.studioView) !== null && _b !== void 0 ? _b : null; });
|
|
24
63
|
var dispatch = useDispatch();
|
|
@@ -26,9 +65,10 @@ export function SolidStudio() {
|
|
|
26
65
|
var _a = useLocation(), pathname = _a.pathname, search = _a.search;
|
|
27
66
|
var isPreviewMode = new URLSearchParams(search).get("preview") === "true" || (typeof sessionStorage !== "undefined" && sessionStorage.getItem("solid-preview") === "true");
|
|
28
67
|
var isPreviewable = pathname !== "/studio" && pathname !== "/landing";
|
|
29
|
-
var
|
|
68
|
+
var _b = useSession(), data = _b.data, status = _b.status;
|
|
30
69
|
var isAuthenticated = status === "authenticated";
|
|
31
|
-
var
|
|
70
|
+
var _c = useState(false), isMenuOpen = _c[0], setIsMenuOpen = _c[1];
|
|
71
|
+
var _d = useState(false), isChatRedirecting = _d[0], setIsChatRedirecting = _d[1];
|
|
32
72
|
var menuRef = useRef(null);
|
|
33
73
|
// Close the 3-dot menu when clicking outside
|
|
34
74
|
useEffect(function () {
|
|
@@ -59,11 +99,86 @@ export function SolidStudio() {
|
|
|
59
99
|
dispatch(setStudioView(view));
|
|
60
100
|
navigate(view === "backend" ? "/admin" : "/landing");
|
|
61
101
|
};
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
102
|
+
var handleAiChatClick = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
103
|
+
var aiUrl, session, accessToken, apiBaseUrl, response, detail, errorPayload, _a, payload, ssoCode, redirectUrl, error_1, detail;
|
|
104
|
+
var _b, _c, _d, _e, _f, _g;
|
|
105
|
+
return __generator(this, function (_h) {
|
|
106
|
+
switch (_h.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
if (isChatRedirecting)
|
|
109
|
+
return [2 /*return*/];
|
|
110
|
+
aiUrl = env("VITE_SOLIDX_AI_URL");
|
|
111
|
+
if (!aiUrl)
|
|
112
|
+
return [2 /*return*/];
|
|
113
|
+
setIsChatRedirecting(true);
|
|
114
|
+
_h.label = 1;
|
|
115
|
+
case 1:
|
|
116
|
+
_h.trys.push([1, 10, 11, 12]);
|
|
117
|
+
return [4 /*yield*/, getSession()];
|
|
118
|
+
case 2:
|
|
119
|
+
session = _h.sent();
|
|
120
|
+
accessToken = ((_b = session === null || session === void 0 ? void 0 : session.user) === null || _b === void 0 ? void 0 : _b.accessToken) || ((_c = data === null || data === void 0 ? void 0 : data.user) === null || _c === void 0 ? void 0 : _c.accessToken);
|
|
121
|
+
if (!accessToken)
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
apiBaseUrl = env("API_URL", "http://localhost:8080").replace(/\/+$/, "");
|
|
124
|
+
return [4 /*yield*/, fetch("".concat(apiBaseUrl, "/api/iam/sso/code"), {
|
|
125
|
+
method: "POST",
|
|
126
|
+
headers: {
|
|
127
|
+
accept: "*/*",
|
|
128
|
+
Authorization: "Bearer ".concat(accessToken),
|
|
129
|
+
},
|
|
130
|
+
body: "",
|
|
131
|
+
})];
|
|
132
|
+
case 3:
|
|
133
|
+
response = _h.sent();
|
|
134
|
+
if (!!response.ok) return [3 /*break*/, 8];
|
|
135
|
+
detail = "Failed to fetch ssoCode (".concat(response.status, ")");
|
|
136
|
+
_h.label = 4;
|
|
137
|
+
case 4:
|
|
138
|
+
_h.trys.push([4, 6, , 7]);
|
|
139
|
+
return [4 /*yield*/, response.json()];
|
|
140
|
+
case 5:
|
|
141
|
+
errorPayload = _h.sent();
|
|
142
|
+
detail =
|
|
143
|
+
(errorPayload === null || errorPayload === void 0 ? void 0 : errorPayload.message) ||
|
|
144
|
+
((_d = errorPayload === null || errorPayload === void 0 ? void 0 : errorPayload.error) === null || _d === void 0 ? void 0 : _d.message) ||
|
|
145
|
+
((_e = errorPayload === null || errorPayload === void 0 ? void 0 : errorPayload.data) === null || _e === void 0 ? void 0 : _e.message) ||
|
|
146
|
+
detail;
|
|
147
|
+
return [3 /*break*/, 7];
|
|
148
|
+
case 6:
|
|
149
|
+
_a = _h.sent();
|
|
150
|
+
return [3 /*break*/, 7];
|
|
151
|
+
case 7: throw new Error(detail);
|
|
152
|
+
case 8: return [4 /*yield*/, response.json()];
|
|
153
|
+
case 9:
|
|
154
|
+
payload = _h.sent();
|
|
155
|
+
ssoCode = (_f = payload === null || payload === void 0 ? void 0 : payload.ssoCode) !== null && _f !== void 0 ? _f : (_g = payload === null || payload === void 0 ? void 0 : payload.data) === null || _g === void 0 ? void 0 : _g.ssoCode;
|
|
156
|
+
if (!ssoCode) {
|
|
157
|
+
throw new Error("ssoCode missing in response");
|
|
158
|
+
}
|
|
159
|
+
redirectUrl = new URL(aiUrl, window.location.origin);
|
|
160
|
+
redirectUrl.searchParams.set("ssoCode", String(ssoCode));
|
|
161
|
+
window.open(redirectUrl.toString(), "_blank");
|
|
162
|
+
return [3 /*break*/, 12];
|
|
163
|
+
case 10:
|
|
164
|
+
error_1 = _h.sent();
|
|
165
|
+
detail = error_1 instanceof Error ? error_1.message : ERROR_MESSAGES.SOMETHING_WRONG;
|
|
166
|
+
dispatch(showToast({
|
|
167
|
+
severity: "error",
|
|
168
|
+
summary: ERROR_MESSAGES.ERROR,
|
|
169
|
+
detail: detail,
|
|
170
|
+
life: 4000,
|
|
171
|
+
}));
|
|
172
|
+
console.error("Failed to open AI chat with ssoCode:", error_1);
|
|
173
|
+
return [3 /*break*/, 12];
|
|
174
|
+
case 11:
|
|
175
|
+
setIsChatRedirecting(false);
|
|
176
|
+
return [7 /*endfinally*/];
|
|
177
|
+
case 12: return [2 /*return*/];
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}); };
|
|
181
|
+
var studioUI = (_jsx("div", { className: "solid-studio-island", style: { zIndex: "var(--z-studio)" }, children: _jsxs("div", { className: "solid-studio-island-inner", children: [_jsx("button", { type: "button", className: "solid-studio-island-btn".concat(studioView === "backend" ? " active" : ""), onClick: function () { return handleViewSwitch("backend"); }, "aria-label": "Backend studio", children: _jsx(BackendIcon, {}) }), _jsx("button", { type: "button", className: "solid-studio-island-btn".concat(studioView === "frontend" ? " active" : ""), onClick: function () { return handleViewSwitch("frontend"); }, "aria-label": "Frontend studio", children: _jsx(FrontendIcon, {}) }), _jsx("button", { type: "button", className: "solid-studio-island-btn", onClick: handleAiChatClick, disabled: isChatRedirecting, "aria-busy": isChatRedirecting, "aria-label": "AI chat", children: _jsx(ChatIcon, {}) }), _jsxs("div", { className: "solid-studio-island-menu", ref: menuRef, children: [_jsx("button", { type: "button", className: "solid-studio-island-btn".concat(isMenuOpen ? " active" : ""), onClick: function () { return setIsMenuOpen(function (o) { return !o; }); }, "aria-label": "Studio options", children: _jsx(DotsIcon, {}) }), isMenuOpen && (_jsxs("div", { className: "solid-studio-island-dropdown", children: [isPreviewable && (_jsxs("button", { type: "button", className: "solid-studio-island-dropdown-item", onClick: function () {
|
|
67
182
|
setIsMenuOpen(false);
|
|
68
183
|
var params = new URLSearchParams(search);
|
|
69
184
|
params.set("preview", "true");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidAiStudioLayout.js","sourceRoot":"","sources":["../../../src/components/layout/SolidAiStudioLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate, useLocation } from \"react-router-dom\";\nimport { exitStudioMode, setStudioView, type StudioView } from \"../../redux/features/solidStudioSlice\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { signOut } from \"../../adapters/auth/index\";\nimport { createPortal } from \"react-dom\";\nimport { env } from \"../../adapters/env\";\n\n// ── Icons ──────────────────────────────────────────────────────────────────────\n\nconst DotsIcon = () => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"3\" r=\"1.3\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.3\" />\n <circle cx=\"8\" cy=\"13\" r=\"1.3\" />\n </svg>\n);\n\nconst PreviewIcon = () => (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 7s2.5-5 6-5 6 5 6 5-2.5 5-6 5-6-5-6-5Z\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinejoin=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"1.8\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n </svg>\n);\n\nconst LogoutIcon = () => (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 2H2.5A1.5 1.5 0 0 0 1 3.5v7A1.5 1.5 0 0 0 2.5 12H5\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n <path d=\"M9 4l3 3-3 3M12 7H5\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\nconst BackendIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.2\" y=\"3\" width=\"11.6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <rect x=\"2.2\" y=\"9\" width=\"11.6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <circle cx=\"4.5\" cy=\"5\" r=\"0.7\" fill=\"currentColor\" />\n <circle cx=\"4.5\" cy=\"11\" r=\"0.7\" fill=\"currentColor\" />\n </svg>\n);\n\nconst FrontendIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1.8\" y=\"2\" width=\"12.4\" height=\"9.5\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M6 13.5 5 15h6l-1-1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.5 5 7.5 7l-2 2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"m10.5 5 2 2-2 2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n// ── SolidStudio ────────────────────────────────────────────────────────────────\n// Single component that renders both the Studio header and the AI panel.\n// Mount this ONCE at the app root via AppEventListener.\n// When studio mode is off it renders nothing.\n\nexport function SolidStudio() {\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const studioView = useSelector((state: any) => state.solidStudio?.studioView ?? null) as StudioView;\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const isPreviewMode = new URLSearchParams(search).get(\"preview\") === \"true\" || (typeof sessionStorage !== \"undefined\" && sessionStorage.getItem(\"solid-preview\") === \"true\");\n const isPreviewable = pathname !== \"/studio\" && pathname !== \"/landing\";\n const { status } = useSession();\n const isAuthenticated = status === \"authenticated\";\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Close the 3-dot menu when clicking outside\n useEffect(() => {\n if (!isMenuOpen) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsMenuOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [isMenuOpen]);\n\n // Auto-exit studio if the user logs out\n useEffect(() => {\n if (status === \"unauthenticated\" && isStudioMode) {\n dispatch(exitStudioMode());\n }\n }, [status, isStudioMode, dispatch]);\n\n if (!isStudioMode || !isAuthenticated || isPreviewMode) return null;\n\n const handleLogout = () => {\n setIsMenuOpen(false);\n dispatch(exitStudioMode());\n signOut({ callbackUrl: \"/auth/login\" });\n };\n\n const handleViewSwitch = (view: StudioView) => {\n dispatch(setStudioView(view));\n navigate(view === \"backend\" ? \"/admin\" : \"/landing\");\n };\n\n const studioUI = (\n <div className=\"solid-studio-island\" style={{ zIndex: \"var(--z-studio)\" }}>\n <div className=\"solid-studio-island-inner\">\n <button\n type=\"button\"\n className={`solid-studio-island-btn${studioView === \"backend\" ? \" active\" : \"\"}`}\n onClick={() => handleViewSwitch(\"backend\")}\n aria-label=\"Backend studio\"\n >\n <BackendIcon />\n </button>\n <button\n type=\"button\"\n className={`solid-studio-island-btn${studioView === \"frontend\" ? \" active\" : \"\"}`}\n onClick={() => handleViewSwitch(\"frontend\")}\n aria-label=\"Frontend studio\"\n >\n <FrontendIcon />\n </button>\n <button\n type=\"button\"\n className=\"solid-studio-island-btn\"\n onClick={() => {\n const aiUrl = env(\"VITE_SOLIDX_AI_URL\");\n if (aiUrl) window.open(aiUrl, \"_blank\");\n }}\n aria-label=\"AI chat\"\n >\n <ChatIcon />\n </button>\n <div className=\"solid-studio-island-menu\" ref={menuRef}>\n <button\n type=\"button\"\n className={`solid-studio-island-btn${isMenuOpen ? \" active\" : \"\"}`}\n onClick={() => setIsMenuOpen((o) => !o)}\n aria-label=\"Studio options\"\n >\n <DotsIcon />\n </button>\n {isMenuOpen && (\n <div className=\"solid-studio-island-dropdown\">\n {isPreviewable && (\n <button\n type=\"button\"\n className=\"solid-studio-island-dropdown-item\"\n onClick={() => {\n setIsMenuOpen(false);\n const params = new URLSearchParams(search);\n params.set(\"preview\", \"true\");\n window.open(`${pathname}?${params.toString()}`, \"_blank\");\n }}\n >\n <PreviewIcon />\n Preview page\n </button>\n )}\n <button\n type=\"button\"\n className=\"solid-studio-island-dropdown-item danger\"\n onClick={handleLogout}\n >\n <LogoutIcon />\n Logout\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n\n return typeof document !== \"undefined\" ? createPortal(studioUI, document.body) : null;\n}\n\n// ── PreviewModePersist ─────────────────────────────────────────────────────────\n// Mount once at the app root alongside SolidStudio.\n// sessionStorage is tab-scoped, so preview opened in a new tab stays isolated.\n// Closing the tab is the natural way to exit preview mode.\n\nconst PREVIEW_KEY = \"solid-preview\";\n\nexport function PreviewModePersist() {\n const { pathname, search } = useLocation();\n const navigate = useNavigate();\n\n // Activate: when URL has ?preview=true, store it in sessionStorage for this tab\n useEffect(() => {\n const params = new URLSearchParams(search);\n if (params.get(\"preview\") === \"true\") {\n sessionStorage.setItem(PREVIEW_KEY, \"true\");\n }\n }, [search]);\n\n // Persist: re-inject ?preview=true on every navigation if it was set\n useEffect(() => {\n if (sessionStorage.getItem(PREVIEW_KEY) !== \"true\") return;\n const params = new URLSearchParams(search);\n if (params.get(\"preview\") === \"true\") return;\n params.set(\"preview\", \"true\");\n navigate({ pathname, search: `?${params.toString()}` }, { replace: true });\n }, [pathname, search, navigate]);\n\n return null;\n}\n\n// ── SolidStudioWrapper ─────────────────────────────────────────────────────────\n// Kept for backwards compatibility. Now a pure pass-through.\nexport function SolidStudioWrapper({ children }: { children: React.ReactNode }) {\n return <>{children}</>;\n}\n\n// Legacy aliases\nexport const SolidAiStudioLayout = SolidStudioWrapper;\nexport const SolidStudioPanel = SolidStudio;\n"]}
|
|
1
|
+
{"version":3,"file":"SolidAiStudioLayout.js","sourceRoot":"","sources":["../../../src/components/layout/SolidAiStudioLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate, useLocation } from \"react-router-dom\";\nimport { exitStudioMode, setStudioView, type StudioView } from \"../../redux/features/solidStudioSlice\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { getSession, signOut } from \"../../adapters/auth/index\";\nimport { createPortal } from \"react-dom\";\nimport { env } from \"../../adapters/env\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\n\n// ── Icons ──────────────────────────────────────────────────────────────────────\n\nconst DotsIcon = () => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"3\" r=\"1.3\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.3\" />\n <circle cx=\"8\" cy=\"13\" r=\"1.3\" />\n </svg>\n);\n\nconst PreviewIcon = () => (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 7s2.5-5 6-5 6 5 6 5-2.5 5-6 5-6-5-6-5Z\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinejoin=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"1.8\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n </svg>\n);\n\nconst LogoutIcon = () => (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 2H2.5A1.5 1.5 0 0 0 1 3.5v7A1.5 1.5 0 0 0 2.5 12H5\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n <path d=\"M9 4l3 3-3 3M12 7H5\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const ChatIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\nconst BackendIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.2\" y=\"3\" width=\"11.6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <rect x=\"2.2\" y=\"9\" width=\"11.6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <circle cx=\"4.5\" cy=\"5\" r=\"0.7\" fill=\"currentColor\" />\n <circle cx=\"4.5\" cy=\"11\" r=\"0.7\" fill=\"currentColor\" />\n </svg>\n);\n\nconst FrontendIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1.8\" y=\"2\" width=\"12.4\" height=\"9.5\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M6 13.5 5 15h6l-1-1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.5 5 7.5 7l-2 2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"m10.5 5 2 2-2 2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n// ── SolidStudio ────────────────────────────────────────────────────────────────\n// Single component that renders both the Studio header and the AI panel.\n// Mount this ONCE at the app root via AppEventListener.\n// When studio mode is off it renders nothing.\n\nexport function SolidStudio() {\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const studioView = useSelector((state: any) => state.solidStudio?.studioView ?? null) as StudioView;\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const isPreviewMode = new URLSearchParams(search).get(\"preview\") === \"true\" || (typeof sessionStorage !== \"undefined\" && sessionStorage.getItem(\"solid-preview\") === \"true\");\n const isPreviewable = pathname !== \"/studio\" && pathname !== \"/landing\";\n const { data, status } = useSession();\n const isAuthenticated = status === \"authenticated\";\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [isChatRedirecting, setIsChatRedirecting] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Close the 3-dot menu when clicking outside\n useEffect(() => {\n if (!isMenuOpen) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsMenuOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [isMenuOpen]);\n\n // Auto-exit studio if the user logs out\n useEffect(() => {\n if (status === \"unauthenticated\" && isStudioMode) {\n dispatch(exitStudioMode());\n }\n }, [status, isStudioMode, dispatch]);\n\n if (!isStudioMode || !isAuthenticated || isPreviewMode) return null;\n\n const handleLogout = () => {\n setIsMenuOpen(false);\n dispatch(exitStudioMode());\n signOut({ callbackUrl: \"/auth/login\" });\n };\n\n const handleViewSwitch = (view: StudioView) => {\n dispatch(setStudioView(view));\n navigate(view === \"backend\" ? \"/admin\" : \"/landing\");\n };\n\n const handleAiChatClick = async () => {\n if (isChatRedirecting) return;\n\n const aiUrl = env(\"VITE_SOLIDX_AI_URL\");\n if (!aiUrl) return;\n\n setIsChatRedirecting(true);\n try {\n const session = await getSession();\n const accessToken = session?.user?.accessToken || data?.user?.accessToken;\n if (!accessToken) return;\n\n const apiBaseUrl = env(\"API_URL\", \"http://localhost:8080\").replace(/\\/+$/, \"\");\n const response = await fetch(`${apiBaseUrl}/api/iam/sso/code`, {\n method: \"POST\",\n headers: {\n accept: \"*/*\",\n Authorization: `Bearer ${accessToken}`,\n },\n body: \"\",\n });\n\n if (!response.ok) {\n let detail = `Failed to fetch ssoCode (${response.status})`;\n try {\n const errorPayload = await response.json();\n detail =\n errorPayload?.message ||\n errorPayload?.error?.message ||\n errorPayload?.data?.message ||\n detail;\n } catch {\n // no-op: keep default message\n }\n throw new Error(detail);\n }\n\n const payload = await response.json();\n const ssoCode = payload?.ssoCode ?? payload?.data?.ssoCode;\n if (!ssoCode) {\n throw new Error(\"ssoCode missing in response\");\n }\n\n const redirectUrl = new URL(aiUrl, window.location.origin);\n redirectUrl.searchParams.set(\"ssoCode\", String(ssoCode));\n window.open(redirectUrl.toString(), \"_blank\");\n } catch (error) {\n const detail = error instanceof Error ? error.message : ERROR_MESSAGES.SOMETHING_WRONG;\n dispatch(\n showToast({\n severity: \"error\",\n summary: ERROR_MESSAGES.ERROR,\n detail,\n life: 4000,\n })\n );\n console.error(\"Failed to open AI chat with ssoCode:\", error);\n } finally {\n setIsChatRedirecting(false);\n }\n };\n\n const studioUI = (\n <div className=\"solid-studio-island\" style={{ zIndex: \"var(--z-studio)\" }}>\n <div className=\"solid-studio-island-inner\">\n <button\n type=\"button\"\n className={`solid-studio-island-btn${studioView === \"backend\" ? \" active\" : \"\"}`}\n onClick={() => handleViewSwitch(\"backend\")}\n aria-label=\"Backend studio\"\n >\n <BackendIcon />\n </button>\n <button\n type=\"button\"\n className={`solid-studio-island-btn${studioView === \"frontend\" ? \" active\" : \"\"}`}\n onClick={() => handleViewSwitch(\"frontend\")}\n aria-label=\"Frontend studio\"\n >\n <FrontendIcon />\n </button>\n <button\n type=\"button\"\n className=\"solid-studio-island-btn\"\n onClick={handleAiChatClick}\n disabled={isChatRedirecting}\n aria-busy={isChatRedirecting}\n aria-label=\"AI chat\"\n >\n <ChatIcon />\n </button>\n <div className=\"solid-studio-island-menu\" ref={menuRef}>\n <button\n type=\"button\"\n className={`solid-studio-island-btn${isMenuOpen ? \" active\" : \"\"}`}\n onClick={() => setIsMenuOpen((o) => !o)}\n aria-label=\"Studio options\"\n >\n <DotsIcon />\n </button>\n {isMenuOpen && (\n <div className=\"solid-studio-island-dropdown\">\n {isPreviewable && (\n <button\n type=\"button\"\n className=\"solid-studio-island-dropdown-item\"\n onClick={() => {\n setIsMenuOpen(false);\n const params = new URLSearchParams(search);\n params.set(\"preview\", \"true\");\n window.open(`${pathname}?${params.toString()}`, \"_blank\");\n }}\n >\n <PreviewIcon />\n Preview page\n </button>\n )}\n <button\n type=\"button\"\n className=\"solid-studio-island-dropdown-item danger\"\n onClick={handleLogout}\n >\n <LogoutIcon />\n Logout\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n\n return typeof document !== \"undefined\" ? createPortal(studioUI, document.body) : null;\n}\n\n// ── PreviewModePersist ─────────────────────────────────────────────────────────\n// Mount once at the app root alongside SolidStudio.\n// sessionStorage is tab-scoped, so preview opened in a new tab stays isolated.\n// Closing the tab is the natural way to exit preview mode.\n\nconst PREVIEW_KEY = \"solid-preview\";\n\nexport function PreviewModePersist() {\n const { pathname, search } = useLocation();\n const navigate = useNavigate();\n\n // Activate: when URL has ?preview=true, store it in sessionStorage for this tab\n useEffect(() => {\n const params = new URLSearchParams(search);\n if (params.get(\"preview\") === \"true\") {\n sessionStorage.setItem(PREVIEW_KEY, \"true\");\n }\n }, [search]);\n\n // Persist: re-inject ?preview=true on every navigation if it was set\n useEffect(() => {\n if (sessionStorage.getItem(PREVIEW_KEY) !== \"true\") return;\n const params = new URLSearchParams(search);\n if (params.get(\"preview\") === \"true\") return;\n params.set(\"preview\", \"true\");\n navigate({ pathname, search: `?${params.toString()}` }, { replace: true });\n }, [pathname, search, navigate]);\n\n return null;\n}\n\n// ── SolidStudioWrapper ─────────────────────────────────────────────────────────\n// Kept for backwards compatibility. Now a pure pass-through.\nexport function SolidStudioWrapper({ children }: { children: React.ReactNode }) {\n return <>{children}</>;\n}\n\n// Legacy aliases\nexport const SolidAiStudioLayout = SolidStudioWrapper;\nexport const SolidStudioPanel = SolidStudio;\n"]}
|
|
@@ -2,10 +2,12 @@ import React, { useEffect, useRef, useState } from "react";
|
|
|
2
2
|
import { useDispatch, useSelector } from "react-redux";
|
|
3
3
|
import { useNavigate, useLocation } from "react-router-dom";
|
|
4
4
|
import { exitStudioMode, setStudioView, type StudioView } from "../../redux/features/solidStudioSlice";
|
|
5
|
+
import { showToast } from "../../redux/features/toastSlice";
|
|
5
6
|
import { useSession } from "../../hooks/useSession";
|
|
6
|
-
import { signOut } from "../../adapters/auth/index";
|
|
7
|
+
import { getSession, signOut } from "../../adapters/auth/index";
|
|
7
8
|
import { createPortal } from "react-dom";
|
|
8
9
|
import { env } from "../../adapters/env";
|
|
10
|
+
import { ERROR_MESSAGES } from "../../constants/error-messages";
|
|
9
11
|
|
|
10
12
|
// ── Icons ──────────────────────────────────────────────────────────────────────
|
|
11
13
|
|
|
@@ -68,9 +70,10 @@ export function SolidStudio() {
|
|
|
68
70
|
const { pathname, search } = useLocation();
|
|
69
71
|
const isPreviewMode = new URLSearchParams(search).get("preview") === "true" || (typeof sessionStorage !== "undefined" && sessionStorage.getItem("solid-preview") === "true");
|
|
70
72
|
const isPreviewable = pathname !== "/studio" && pathname !== "/landing";
|
|
71
|
-
const { status } = useSession();
|
|
73
|
+
const { data, status } = useSession();
|
|
72
74
|
const isAuthenticated = status === "authenticated";
|
|
73
75
|
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
76
|
+
const [isChatRedirecting, setIsChatRedirecting] = useState(false);
|
|
74
77
|
const menuRef = useRef<HTMLDivElement>(null);
|
|
75
78
|
|
|
76
79
|
// Close the 3-dot menu when clicking outside
|
|
@@ -105,6 +108,68 @@ export function SolidStudio() {
|
|
|
105
108
|
navigate(view === "backend" ? "/admin" : "/landing");
|
|
106
109
|
};
|
|
107
110
|
|
|
111
|
+
const handleAiChatClick = async () => {
|
|
112
|
+
if (isChatRedirecting) return;
|
|
113
|
+
|
|
114
|
+
const aiUrl = env("VITE_SOLIDX_AI_URL");
|
|
115
|
+
if (!aiUrl) return;
|
|
116
|
+
|
|
117
|
+
setIsChatRedirecting(true);
|
|
118
|
+
try {
|
|
119
|
+
const session = await getSession();
|
|
120
|
+
const accessToken = session?.user?.accessToken || data?.user?.accessToken;
|
|
121
|
+
if (!accessToken) return;
|
|
122
|
+
|
|
123
|
+
const apiBaseUrl = env("API_URL", "http://localhost:8080").replace(/\/+$/, "");
|
|
124
|
+
const response = await fetch(`${apiBaseUrl}/api/iam/sso/code`, {
|
|
125
|
+
method: "POST",
|
|
126
|
+
headers: {
|
|
127
|
+
accept: "*/*",
|
|
128
|
+
Authorization: `Bearer ${accessToken}`,
|
|
129
|
+
},
|
|
130
|
+
body: "",
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
let detail = `Failed to fetch ssoCode (${response.status})`;
|
|
135
|
+
try {
|
|
136
|
+
const errorPayload = await response.json();
|
|
137
|
+
detail =
|
|
138
|
+
errorPayload?.message ||
|
|
139
|
+
errorPayload?.error?.message ||
|
|
140
|
+
errorPayload?.data?.message ||
|
|
141
|
+
detail;
|
|
142
|
+
} catch {
|
|
143
|
+
// no-op: keep default message
|
|
144
|
+
}
|
|
145
|
+
throw new Error(detail);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const payload = await response.json();
|
|
149
|
+
const ssoCode = payload?.ssoCode ?? payload?.data?.ssoCode;
|
|
150
|
+
if (!ssoCode) {
|
|
151
|
+
throw new Error("ssoCode missing in response");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const redirectUrl = new URL(aiUrl, window.location.origin);
|
|
155
|
+
redirectUrl.searchParams.set("ssoCode", String(ssoCode));
|
|
156
|
+
window.open(redirectUrl.toString(), "_blank");
|
|
157
|
+
} catch (error) {
|
|
158
|
+
const detail = error instanceof Error ? error.message : ERROR_MESSAGES.SOMETHING_WRONG;
|
|
159
|
+
dispatch(
|
|
160
|
+
showToast({
|
|
161
|
+
severity: "error",
|
|
162
|
+
summary: ERROR_MESSAGES.ERROR,
|
|
163
|
+
detail,
|
|
164
|
+
life: 4000,
|
|
165
|
+
})
|
|
166
|
+
);
|
|
167
|
+
console.error("Failed to open AI chat with ssoCode:", error);
|
|
168
|
+
} finally {
|
|
169
|
+
setIsChatRedirecting(false);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
108
173
|
const studioUI = (
|
|
109
174
|
<div className="solid-studio-island" style={{ zIndex: "var(--z-studio)" }}>
|
|
110
175
|
<div className="solid-studio-island-inner">
|
|
@@ -127,10 +192,9 @@ export function SolidStudio() {
|
|
|
127
192
|
<button
|
|
128
193
|
type="button"
|
|
129
194
|
className="solid-studio-island-btn"
|
|
130
|
-
onClick={
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}}
|
|
195
|
+
onClick={handleAiChatClick}
|
|
196
|
+
disabled={isChatRedirecting}
|
|
197
|
+
aria-busy={isChatRedirecting}
|
|
134
198
|
aria-label="AI chat"
|
|
135
199
|
>
|
|
136
200
|
<ChatIcon />
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/helpers/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/helpers/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AA0D1B,OAAO,EAGH,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC7B,MAAM,6BAA6B,CAAC;AAwBrC,eAAO,MAAM,0BAA0B,SAAU,MAAM,aAAa,MAAM,aAAa,CAAC,GAAG,CAAC,QAAQ,sBAAsB,YAAW,MAAM,EAAE,cAAkB,MAAM,SAMpK,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,MAAM,gBAAgB,GAAG,EAAE,KAAK,GAAG,QAAQ,qBAAqB,SAE/G,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,MAAM,KAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,IAM/E,CAAC;AAEF,eAAO,MAAM,sBAAsB,SAAU,sBAAsB,cAAa,MAAM,KAAQ,MAAM,EAAE,GAAG,EASxG,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,MAAM,eA7C/B,GAAG,EAAE,KAAK,GA+C3B,CAAC"}
|
package/dist/helpers/registry.js
CHANGED
|
@@ -51,12 +51,14 @@ import dashboardQuestionFieldChangeHandler from "../components/core/extension/so
|
|
|
51
51
|
import dashboardQuestionOnFormLoadHandler from "../components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler";
|
|
52
52
|
import MqMessageKanbanCardWidget from "../components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanCardWidget";
|
|
53
53
|
import MediaCardWidget from "../components/core/extension/solid-core/media/card/MediaCardWidget";
|
|
54
|
+
import { SolidChatterMessageCoModelEntityIdListViewWidget } from "../components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget";
|
|
55
|
+
import { SolidMqMessageStageListViewWidget } from "../components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget";
|
|
56
|
+
import { SolidMqMessagesSummarizeListHeaderAction } from "../components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction";
|
|
57
|
+
import { SolidChatterMessageCoModelEntityIdFormViewWidget } from "../components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget";
|
|
58
|
+
import { SolidLovTypeChangeFormEditWidget } from "../components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget";
|
|
59
|
+
import mqMessageOnFormLoadHandler from "../components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler";
|
|
60
|
+
import { SolidMqMessageStageFormViewWIdget } from "../components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget";
|
|
54
61
|
import { ExtensionComponentTypes, ExtensionFunctionTypes, } from "../types/extension-registry";
|
|
55
|
-
import { SolidChatterMessageCoModelEntityIdFormViewWidget } from "../components/core/form/fields/widgets/SolidChatterMessageCoModelEntityIdFormViewWidget";
|
|
56
|
-
import { SolidChatterMessageCoModelEntityIdListViewWidget } from "../components/core/list/widgets/SolidChatterMessageCoModelEntityIdListViewWidget";
|
|
57
|
-
import { SolidMqMessageStageListViewWidget } from "../components/core/list/widgets/SolidMqMessageStageListViewWidget";
|
|
58
|
-
import { SolidLovTypeChangeFormEditWidget } from "../components/core/form/fields/widgets/SolidLovTypeChangeFormEditWidget";
|
|
59
|
-
import { SolidSummarizeListHeaderActionMqMessages } from "../components/core/list/widgets/SolidSummarizeListHeaderActionMqMessages";
|
|
60
62
|
var extensionRegistry = {
|
|
61
63
|
components: {},
|
|
62
64
|
functions: {},
|
|
@@ -123,7 +125,7 @@ registerExtensionComponent('DefaultDateListWidget', DefaultDateListWidget, Exten
|
|
|
123
125
|
// - datetime
|
|
124
126
|
registerExtensionComponent("SolidChatterMessageCoModelEntityIdListViewWidget", SolidChatterMessageCoModelEntityIdListViewWidget, ExtensionComponentTypes.list_field_widget);
|
|
125
127
|
registerExtensionComponent("SolidMqMessageStageListViewWidget", SolidMqMessageStageListViewWidget, ExtensionComponentTypes.list_field_widget);
|
|
126
|
-
registerExtensionComponent("
|
|
128
|
+
registerExtensionComponent("SolidMqMessagesSummarizeListHeaderAction", SolidMqMessagesSummarizeListHeaderAction, ExtensionComponentTypes.list_header_action);
|
|
127
129
|
// ...
|
|
128
130
|
// 2. form view field edit widget
|
|
129
131
|
// - shortText
|
|
@@ -257,6 +259,7 @@ registerExtensionComponent("RolePermissionsManyToManyFieldWidget", RolePermissio
|
|
|
257
259
|
// Solid Google Material Symbols Icon
|
|
258
260
|
registerExtensionComponent("SolidIconEditWidget", SolidIconEditWidget, ExtensionComponentTypes.form_field_edit_widget);
|
|
259
261
|
registerExtensionComponent("SolidIconViewWidget", SolidIconViewWidget, ExtensionComponentTypes.form_field_view_widget);
|
|
262
|
+
registerExtensionComponent("SolidMqMessageStageFormViewWIdget", SolidMqMessageStageFormViewWIdget, ExtensionComponentTypes.form_field_view_widget);
|
|
260
263
|
// Kanban
|
|
261
264
|
registerExtensionComponent("MqMessageKanbanCardWidget", MqMessageKanbanCardWidget, ExtensionComponentTypes.kanban_card_widget);
|
|
262
265
|
registerExtensionComponent("MediaCardWidget", MediaCardWidget, ExtensionComponentTypes.card_widget);
|
|
@@ -273,4 +276,5 @@ registerExtensionFunction("dashboardQuestionOnFormLoadHandler", dashboardQuestio
|
|
|
273
276
|
// on change of module, apply a where clause on the model & field fields..
|
|
274
277
|
// on change of model, apply a where clause on the field field...
|
|
275
278
|
registerExtensionFunction("modelSequenceFormViewChangeHandler", hanldeModelSequenceFormViewChange, ExtensionFunctionTypes.onFieldChange);
|
|
279
|
+
registerExtensionFunction("mqMessageOnFormLoadHandler", mqMessageOnFormLoadHandler, ExtensionFunctionTypes.onFormLoad);
|
|
276
280
|
//# sourceMappingURL=registry.js.map
|