@trops/dash-core 0.1.225 → 0.1.227
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/index.esm.js +460 -565
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +458 -564
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import * as DashReact from '@trops/dash-react';
|
|
3
|
-
import { isObject, ThemeContext, deepCopy, MainSection, getUUID, getStylesForItem, themeObjects, Heading, SearchInput, ButtonIcon, SubHeading3, InputText, Button, FontAwesomeIcon, Tag, Sidebar, Paragraph, Modal, Panel, Stepper, Tag2,
|
|
3
|
+
import { isObject, ThemeContext, deepCopy, MainSection, getUUID, getStylesForItem, themeObjects, Heading, SearchInput, ButtonIcon, SubHeading3, InputText, Button, FontAwesomeIcon, Tag, Sidebar, Paragraph, Modal, Panel, Stepper, Tag2, Tag3, Card2, Card3, Heading3, MenuItem3, FormLabel, SelectMenu, Switch, SelectInput, CodeEditorInline, SettingsModal, SubHeading2, tailwindHeightFractions, Menu3, Panel3, DropdownPanel, MenuItem2, ButtonIcon2, DragComponent, ConfirmationModal, DropComponent, getStyleName, capitalizeFirstLetter, colorTypes, getCSSStyleForClassname, Panel2, Heading2, SubHeading, Paragraph2, Paragraph3, Button2, Button3, MenuItem, ButtonIcon3, DashPanel, colorNames, shades, themeVariants, Tabs3, DataList, Checkbox, StatCard, Card, Tabs, Accordion, Alert, Toast, ProgressBar, Toggle, Breadcrumbs, Tabs2, Accordion2, Alert2, Toast2, ProgressBar2, Toggle2, Breadcrumbs2, Accordion3, Alert3, Toast3, ProgressBar3, Toggle3, Breadcrumbs3, ThemeFromUrlPane, TextArea, Icon2, AlgoliaSearchBox, CommandPalette, EmptyState, Navbar, withRouter, Menu as Menu$1 } from '@trops/dash-react';
|
|
4
4
|
export * from '@trops/dash-react';
|
|
5
5
|
export { ThemeContext } from '@trops/dash-react';
|
|
6
6
|
import _typeof from '@babel/runtime/helpers/typeof';
|
|
@@ -5879,6 +5879,29 @@ var WizardDiscoverStep = function WizardDiscoverStep(_ref) {
|
|
|
5879
5879
|
payload: prov
|
|
5880
5880
|
});
|
|
5881
5881
|
}, [dispatch]);
|
|
5882
|
+
|
|
5883
|
+
// Tab state (DASH-185)
|
|
5884
|
+
var _useState = useState("dashboards"),
|
|
5885
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
5886
|
+
activeTab = _useState2[0],
|
|
5887
|
+
setActiveTab = _useState2[1];
|
|
5888
|
+
|
|
5889
|
+
// Clear selection handler (DASH-186)
|
|
5890
|
+
var hasSelection = state.selectedDashboard !== null || state.selectedWidgets.length > 0;
|
|
5891
|
+
var handleClearSelection = useCallback(function () {
|
|
5892
|
+
dispatch({
|
|
5893
|
+
type: "SET_SELECTED_DASHBOARD",
|
|
5894
|
+
payload: null
|
|
5895
|
+
});
|
|
5896
|
+
dispatch({
|
|
5897
|
+
type: "SET_SELECTED_WIDGETS",
|
|
5898
|
+
payload: []
|
|
5899
|
+
});
|
|
5900
|
+
dispatch({
|
|
5901
|
+
type: "SET_PATH",
|
|
5902
|
+
payload: null
|
|
5903
|
+
});
|
|
5904
|
+
}, [dispatch]);
|
|
5882
5905
|
var hasResults = filteredDashboards.length > 0 || filteredWidgets.length > 0;
|
|
5883
5906
|
var hasActiveFilters = filters.categories.length > 0 || filters.providers.length > 0;
|
|
5884
5907
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -5924,8 +5947,43 @@ var WizardDiscoverStep = function WizardDiscoverStep(_ref) {
|
|
|
5924
5947
|
})
|
|
5925
5948
|
})]
|
|
5926
5949
|
})]
|
|
5950
|
+
}), /*#__PURE__*/jsxs("div", {
|
|
5951
|
+
className: "flex items-center justify-between",
|
|
5952
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
5953
|
+
className: "flex gap-1",
|
|
5954
|
+
children: [/*#__PURE__*/jsxs("button", {
|
|
5955
|
+
type: "button",
|
|
5956
|
+
className: "px-4 py-2 text-sm font-medium rounded-t transition-colors ".concat(activeTab === "dashboards" ? "bg-gray-800 text-blue-400 border-b-2 border-blue-400" : "text-gray-400 hover:text-gray-200"),
|
|
5957
|
+
onClick: function onClick() {
|
|
5958
|
+
return setActiveTab("dashboards");
|
|
5959
|
+
},
|
|
5960
|
+
children: ["Dashboards (", filteredDashboards.length, ")"]
|
|
5961
|
+
}), /*#__PURE__*/jsxs("button", {
|
|
5962
|
+
type: "button",
|
|
5963
|
+
className: "px-4 py-2 text-sm font-medium rounded-t transition-colors ".concat(activeTab === "widgets" ? "bg-gray-800 text-blue-400 border-b-2 border-blue-400" : "text-gray-400 hover:text-gray-200"),
|
|
5964
|
+
onClick: function onClick() {
|
|
5965
|
+
return setActiveTab("widgets");
|
|
5966
|
+
},
|
|
5967
|
+
children: ["Widgets (", filteredWidgets.length, ")", state.selectedWidgets.length > 0 && /*#__PURE__*/jsx("span", {
|
|
5968
|
+
className: "ml-1.5",
|
|
5969
|
+
children: /*#__PURE__*/jsx(Tag3, {
|
|
5970
|
+
text: "".concat(state.selectedWidgets.length, " selected")
|
|
5971
|
+
})
|
|
5972
|
+
})]
|
|
5973
|
+
})]
|
|
5974
|
+
}), hasSelection && /*#__PURE__*/jsx(Button, {
|
|
5975
|
+
onClick: handleClearSelection,
|
|
5976
|
+
title: "Clear Selection",
|
|
5977
|
+
textSize: "text-xs",
|
|
5978
|
+
padding: "py-1 px-3",
|
|
5979
|
+
backgroundColor: "bg-gray-700",
|
|
5980
|
+
textColor: "text-gray-400",
|
|
5981
|
+
hoverTextColor: "hover:text-white",
|
|
5982
|
+
hoverBackgroundColor: "hover:bg-gray-600",
|
|
5983
|
+
icon: "xmark"
|
|
5984
|
+
})]
|
|
5927
5985
|
}), /*#__PURE__*/jsx("div", {
|
|
5928
|
-
className: "flex flex-col gap-6
|
|
5986
|
+
className: "flex flex-col gap-6",
|
|
5929
5987
|
children: isLoading ? /*#__PURE__*/jsxs("div", {
|
|
5930
5988
|
className: "flex flex-col items-center justify-center gap-2 py-12 text-gray-400",
|
|
5931
5989
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
@@ -5955,12 +6013,9 @@ var WizardDiscoverStep = function WizardDiscoverStep(_ref) {
|
|
|
5955
6013
|
children: "Try removing some filters to see more results."
|
|
5956
6014
|
})]
|
|
5957
6015
|
}) : /*#__PURE__*/jsxs(Fragment, {
|
|
5958
|
-
children: [filteredDashboards.length > 0 && /*#__PURE__*/
|
|
6016
|
+
children: [activeTab === "dashboards" && filteredDashboards.length > 0 && /*#__PURE__*/jsx("div", {
|
|
5959
6017
|
className: "flex flex-col gap-3",
|
|
5960
|
-
children:
|
|
5961
|
-
className: "text-sm font-semibold text-gray-300 flex items-center gap-2",
|
|
5962
|
-
children: ["Dashboards (", filteredDashboards.length, " result", filteredDashboards.length !== 1 ? "s" : "", ")"]
|
|
5963
|
-
}), /*#__PURE__*/jsx("div", {
|
|
6018
|
+
children: /*#__PURE__*/jsx("div", {
|
|
5964
6019
|
className: "grid grid-cols-3 gap-3",
|
|
5965
6020
|
children: filteredDashboards.map(function (dash) {
|
|
5966
6021
|
var isSelected = state.selectedDashboard && state.selectedDashboard.name === dash.name;
|
|
@@ -6016,15 +6071,18 @@ var WizardDiscoverStep = function WizardDiscoverStep(_ref) {
|
|
|
6016
6071
|
})]
|
|
6017
6072
|
}, dash.name);
|
|
6018
6073
|
})
|
|
6074
|
+
})
|
|
6075
|
+
}), activeTab === "dashboards" && filteredDashboards.length === 0 && /*#__PURE__*/jsxs("div", {
|
|
6076
|
+
className: "flex flex-col items-center justify-center gap-2 py-12 text-gray-500",
|
|
6077
|
+
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6078
|
+
icon: "grid-2",
|
|
6079
|
+
fixedWidth: true
|
|
6080
|
+
}), /*#__PURE__*/jsx("p", {
|
|
6081
|
+
children: "No dashboards match your search."
|
|
6019
6082
|
})]
|
|
6020
|
-
}), filteredWidgets.length > 0 && /*#__PURE__*/
|
|
6083
|
+
}), activeTab === "widgets" && filteredWidgets.length > 0 && /*#__PURE__*/jsx("div", {
|
|
6021
6084
|
className: "flex flex-col gap-3",
|
|
6022
|
-
children:
|
|
6023
|
-
className: "text-sm font-semibold text-gray-300 flex items-center gap-2",
|
|
6024
|
-
children: ["Widgets (", filteredWidgets.length, " result", filteredWidgets.length !== 1 ? "s" : "", ")", state.selectedWidgets.length > 0 && /*#__PURE__*/jsx(Tag3, {
|
|
6025
|
-
text: "".concat(state.selectedWidgets.length, " selected")
|
|
6026
|
-
})]
|
|
6027
|
-
}), /*#__PURE__*/jsx("div", {
|
|
6085
|
+
children: /*#__PURE__*/jsx("div", {
|
|
6028
6086
|
className: "grid grid-cols-3 gap-3",
|
|
6029
6087
|
children: filteredWidgets.map(function (widget) {
|
|
6030
6088
|
var checked = isWidgetSelected(widget);
|
|
@@ -6063,6 +6121,14 @@ var WizardDiscoverStep = function WizardDiscoverStep(_ref) {
|
|
|
6063
6121
|
})]
|
|
6064
6122
|
}, widget.key);
|
|
6065
6123
|
})
|
|
6124
|
+
})
|
|
6125
|
+
}), activeTab === "widgets" && filteredWidgets.length === 0 && /*#__PURE__*/jsxs("div", {
|
|
6126
|
+
className: "flex flex-col items-center justify-center gap-2 py-12 text-gray-500",
|
|
6127
|
+
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6128
|
+
icon: "puzzle-piece",
|
|
6129
|
+
fixedWidth: true
|
|
6130
|
+
}), /*#__PURE__*/jsx("p", {
|
|
6131
|
+
children: "No widgets match your search."
|
|
6066
6132
|
})]
|
|
6067
6133
|
})]
|
|
6068
6134
|
})
|
|
@@ -6100,442 +6166,6 @@ function applyFilters(items, filters, mode) {
|
|
|
6100
6166
|
|
|
6101
6167
|
function ownKeys$B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6102
6168
|
function _objectSpread$B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$B(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6103
|
-
var TOTAL_STEPS = 3; // Steps 0-2: Discover, Layout, Customize
|
|
6104
|
-
|
|
6105
|
-
var initialState = {
|
|
6106
|
-
step: 0,
|
|
6107
|
-
filters: {
|
|
6108
|
-
categories: [],
|
|
6109
|
-
providers: [],
|
|
6110
|
-
query: ""
|
|
6111
|
-
},
|
|
6112
|
-
selectedWidgets: [],
|
|
6113
|
-
selectedDashboard: null,
|
|
6114
|
-
layout: {
|
|
6115
|
-
templateKey: null,
|
|
6116
|
-
widgetOrder: []
|
|
6117
|
-
},
|
|
6118
|
-
customization: {
|
|
6119
|
-
name: "",
|
|
6120
|
-
menuId: null,
|
|
6121
|
-
theme: null
|
|
6122
|
-
},
|
|
6123
|
-
path: null
|
|
6124
|
-
};
|
|
6125
|
-
function wizardReducer(state, action) {
|
|
6126
|
-
switch (action.type) {
|
|
6127
|
-
case "SET_STEP":
|
|
6128
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6129
|
-
step: action.payload
|
|
6130
|
-
});
|
|
6131
|
-
case "SET_FILTERS":
|
|
6132
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6133
|
-
filters: _objectSpread$B(_objectSpread$B({}, state.filters), action.payload)
|
|
6134
|
-
});
|
|
6135
|
-
case "TOGGLE_FILTER_CATEGORY":
|
|
6136
|
-
{
|
|
6137
|
-
var categories = state.filters.categories.includes(action.payload) ? state.filters.categories.filter(function (c) {
|
|
6138
|
-
return c !== action.payload;
|
|
6139
|
-
}) : [].concat(_toConsumableArray(state.filters.categories), [action.payload]);
|
|
6140
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6141
|
-
filters: _objectSpread$B(_objectSpread$B({}, state.filters), {}, {
|
|
6142
|
-
categories: categories
|
|
6143
|
-
})
|
|
6144
|
-
});
|
|
6145
|
-
}
|
|
6146
|
-
case "TOGGLE_FILTER_PROVIDER":
|
|
6147
|
-
{
|
|
6148
|
-
var providers = state.filters.providers.includes(action.payload) ? state.filters.providers.filter(function (p) {
|
|
6149
|
-
return p !== action.payload;
|
|
6150
|
-
}) : [].concat(_toConsumableArray(state.filters.providers), [action.payload]);
|
|
6151
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6152
|
-
filters: _objectSpread$B(_objectSpread$B({}, state.filters), {}, {
|
|
6153
|
-
providers: providers
|
|
6154
|
-
})
|
|
6155
|
-
});
|
|
6156
|
-
}
|
|
6157
|
-
case "SET_SEARCH_QUERY":
|
|
6158
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6159
|
-
filters: _objectSpread$B(_objectSpread$B({}, state.filters), {}, {
|
|
6160
|
-
query: action.payload
|
|
6161
|
-
})
|
|
6162
|
-
});
|
|
6163
|
-
case "SET_SELECTED_WIDGETS":
|
|
6164
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6165
|
-
selectedWidgets: action.payload
|
|
6166
|
-
});
|
|
6167
|
-
case "TOGGLE_WIDGET":
|
|
6168
|
-
{
|
|
6169
|
-
var exists = state.selectedWidgets.some(function (w) {
|
|
6170
|
-
return w.name === action.payload.name;
|
|
6171
|
-
});
|
|
6172
|
-
var selectedWidgets = exists ? state.selectedWidgets.filter(function (w) {
|
|
6173
|
-
return w.name !== action.payload.name;
|
|
6174
|
-
}) : [].concat(_toConsumableArray(state.selectedWidgets), [action.payload]);
|
|
6175
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6176
|
-
selectedWidgets: selectedWidgets
|
|
6177
|
-
});
|
|
6178
|
-
}
|
|
6179
|
-
case "SET_SELECTED_DASHBOARD":
|
|
6180
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6181
|
-
selectedDashboard: action.payload
|
|
6182
|
-
});
|
|
6183
|
-
case "SET_PATH":
|
|
6184
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6185
|
-
path: action.payload
|
|
6186
|
-
});
|
|
6187
|
-
case "SET_LAYOUT":
|
|
6188
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6189
|
-
layout: action.payload
|
|
6190
|
-
});
|
|
6191
|
-
case "REORDER_WIDGETS":
|
|
6192
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6193
|
-
layout: _objectSpread$B(_objectSpread$B({}, state.layout), {}, {
|
|
6194
|
-
widgetOrder: action.payload
|
|
6195
|
-
})
|
|
6196
|
-
});
|
|
6197
|
-
case "SET_CUSTOMIZATION":
|
|
6198
|
-
return _objectSpread$B(_objectSpread$B({}, state), {}, {
|
|
6199
|
-
customization: _objectSpread$B(_objectSpread$B({}, state.customization), action.payload)
|
|
6200
|
-
});
|
|
6201
|
-
case "RESET":
|
|
6202
|
-
return _objectSpread$B({}, initialState);
|
|
6203
|
-
default:
|
|
6204
|
-
return state;
|
|
6205
|
-
}
|
|
6206
|
-
}
|
|
6207
|
-
function widgetCountToTemplate(count) {
|
|
6208
|
-
if (count <= 1) return "single";
|
|
6209
|
-
if (count === 2) return "two-columns";
|
|
6210
|
-
if (count === 3) return "three-columns";
|
|
6211
|
-
if (count === 4) return "two-by-two";
|
|
6212
|
-
if (count <= 6) return "two-by-three";
|
|
6213
|
-
return "three-by-three";
|
|
6214
|
-
}
|
|
6215
|
-
function getCanProceed(state) {
|
|
6216
|
-
switch (state.step) {
|
|
6217
|
-
case 0:
|
|
6218
|
-
return state.selectedDashboard !== null || state.selectedWidgets.length > 0;
|
|
6219
|
-
case 1:
|
|
6220
|
-
return state.layout.templateKey !== null;
|
|
6221
|
-
case 2:
|
|
6222
|
-
return state.customization.name.trim().length > 0;
|
|
6223
|
-
default:
|
|
6224
|
-
return false;
|
|
6225
|
-
}
|
|
6226
|
-
}
|
|
6227
|
-
var useWizardState = function useWizardState() {
|
|
6228
|
-
var _useReducer = useReducer(wizardReducer, initialState),
|
|
6229
|
-
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
6230
|
-
state = _useReducer2[0],
|
|
6231
|
-
dispatch = _useReducer2[1];
|
|
6232
|
-
var canProceed = useMemo(function () {
|
|
6233
|
-
return getCanProceed(state);
|
|
6234
|
-
}, [state]);
|
|
6235
|
-
var selectedCount = useMemo(function () {
|
|
6236
|
-
return state.selectedWidgets.length;
|
|
6237
|
-
}, [state.selectedWidgets]);
|
|
6238
|
-
var isPrebuiltPath = state.path === "prebuilt";
|
|
6239
|
-
var isCustomPath = state.path === "custom";
|
|
6240
|
-
var nextStep = useCallback(function () {
|
|
6241
|
-
if (getCanProceed(state) && state.step < TOTAL_STEPS - 1) {
|
|
6242
|
-
dispatch({
|
|
6243
|
-
type: "SET_STEP",
|
|
6244
|
-
payload: state.step + 1
|
|
6245
|
-
});
|
|
6246
|
-
}
|
|
6247
|
-
}, [state]);
|
|
6248
|
-
var prevStep = useCallback(function () {
|
|
6249
|
-
if (state.step > 0) {
|
|
6250
|
-
dispatch({
|
|
6251
|
-
type: "SET_STEP",
|
|
6252
|
-
payload: state.step - 1
|
|
6253
|
-
});
|
|
6254
|
-
}
|
|
6255
|
-
}, [state.step]);
|
|
6256
|
-
var goToStep = useCallback(function (n) {
|
|
6257
|
-
if (n >= 0 && n < TOTAL_STEPS) {
|
|
6258
|
-
dispatch({
|
|
6259
|
-
type: "SET_STEP",
|
|
6260
|
-
payload: n
|
|
6261
|
-
});
|
|
6262
|
-
}
|
|
6263
|
-
}, []);
|
|
6264
|
-
return {
|
|
6265
|
-
state: state,
|
|
6266
|
-
dispatch: dispatch,
|
|
6267
|
-
nextStep: nextStep,
|
|
6268
|
-
prevStep: prevStep,
|
|
6269
|
-
goToStep: goToStep,
|
|
6270
|
-
canProceed: canProceed,
|
|
6271
|
-
selectedCount: selectedCount,
|
|
6272
|
-
isPrebuiltPath: isPrebuiltPath,
|
|
6273
|
-
isCustomPath: isCustomPath,
|
|
6274
|
-
widgetCountToTemplate: widgetCountToTemplate
|
|
6275
|
-
};
|
|
6276
|
-
};
|
|
6277
|
-
|
|
6278
|
-
var WizardLayoutPreviewStep = function WizardLayoutPreviewStep(_ref) {
|
|
6279
|
-
var state = _ref.state,
|
|
6280
|
-
dispatch = _ref.dispatch;
|
|
6281
|
-
var isPrebuilt = state.path === "prebuilt";
|
|
6282
|
-
|
|
6283
|
-
// Auto-select template and populate widget order on mount / widget change
|
|
6284
|
-
useEffect(function () {
|
|
6285
|
-
if (isPrebuilt) return;
|
|
6286
|
-
var templateKey = widgetCountToTemplate(state.selectedWidgets.length);
|
|
6287
|
-
var template = layoutTemplates.find(function (t) {
|
|
6288
|
-
return t.id === templateKey;
|
|
6289
|
-
});
|
|
6290
|
-
if (!template) return;
|
|
6291
|
-
|
|
6292
|
-
// Only update if template changed or widget order is empty
|
|
6293
|
-
if (state.layout.templateKey !== templateKey || state.layout.widgetOrder.length === 0) {
|
|
6294
|
-
var widgetOrder = state.selectedWidgets.map(function (w) {
|
|
6295
|
-
return w.name || w.key;
|
|
6296
|
-
});
|
|
6297
|
-
dispatch({
|
|
6298
|
-
type: "SET_LAYOUT",
|
|
6299
|
-
payload: {
|
|
6300
|
-
templateKey: templateKey,
|
|
6301
|
-
widgetOrder: widgetOrder
|
|
6302
|
-
}
|
|
6303
|
-
});
|
|
6304
|
-
}
|
|
6305
|
-
}, [isPrebuilt, state.selectedWidgets, state.layout.templateKey, state.layout.widgetOrder.length, dispatch]);
|
|
6306
|
-
if (isPrebuilt) {
|
|
6307
|
-
return /*#__PURE__*/jsx(PrebuiltPreview, {
|
|
6308
|
-
dashboard: state.selectedDashboard
|
|
6309
|
-
});
|
|
6310
|
-
}
|
|
6311
|
-
var template = layoutTemplates.find(function (t) {
|
|
6312
|
-
return t.id === state.layout.templateKey;
|
|
6313
|
-
});
|
|
6314
|
-
return /*#__PURE__*/jsxs("div", {
|
|
6315
|
-
className: "flex flex-col gap-4",
|
|
6316
|
-
children: [/*#__PURE__*/jsx("h3", {
|
|
6317
|
-
className: "text-lg font-semibold text-gray-200",
|
|
6318
|
-
children: "Preview your layout"
|
|
6319
|
-
}), /*#__PURE__*/jsx("p", {
|
|
6320
|
-
className: "text-sm text-gray-400",
|
|
6321
|
-
children: "Drag widgets to rearrange their placement in the grid."
|
|
6322
|
-
}), template ? /*#__PURE__*/jsx(LayoutGrid, {
|
|
6323
|
-
template: template,
|
|
6324
|
-
widgetOrder: state.layout.widgetOrder,
|
|
6325
|
-
widgets: state.selectedWidgets,
|
|
6326
|
-
dispatch: dispatch
|
|
6327
|
-
}) : /*#__PURE__*/jsxs("div", {
|
|
6328
|
-
className: "flex flex-col items-center justify-center gap-2 py-12 text-gray-500",
|
|
6329
|
-
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6330
|
-
icon: "grid-2",
|
|
6331
|
-
fixedWidth: true
|
|
6332
|
-
}), /*#__PURE__*/jsx("p", {
|
|
6333
|
-
children: "No layout template available."
|
|
6334
|
-
})]
|
|
6335
|
-
})]
|
|
6336
|
-
});
|
|
6337
|
-
};
|
|
6338
|
-
|
|
6339
|
-
// --- Pre-built dashboard preview ---
|
|
6340
|
-
|
|
6341
|
-
var PrebuiltPreview = function PrebuiltPreview(_ref2) {
|
|
6342
|
-
var dashboard = _ref2.dashboard;
|
|
6343
|
-
if (!dashboard) {
|
|
6344
|
-
return /*#__PURE__*/jsxs("div", {
|
|
6345
|
-
className: "flex flex-col gap-4",
|
|
6346
|
-
children: [/*#__PURE__*/jsx("h3", {
|
|
6347
|
-
className: "text-lg font-semibold text-gray-200",
|
|
6348
|
-
children: "Dashboard preview"
|
|
6349
|
-
}), /*#__PURE__*/jsxs("div", {
|
|
6350
|
-
className: "flex flex-col items-center justify-center gap-2 py-12 text-gray-500",
|
|
6351
|
-
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6352
|
-
icon: "box-open",
|
|
6353
|
-
fixedWidth: true
|
|
6354
|
-
}), /*#__PURE__*/jsx("p", {
|
|
6355
|
-
children: "No dashboard selected."
|
|
6356
|
-
})]
|
|
6357
|
-
})]
|
|
6358
|
-
});
|
|
6359
|
-
}
|
|
6360
|
-
var widgets = dashboard.widgets || [];
|
|
6361
|
-
return /*#__PURE__*/jsxs("div", {
|
|
6362
|
-
className: "flex flex-col gap-4",
|
|
6363
|
-
children: [/*#__PURE__*/jsx("h3", {
|
|
6364
|
-
className: "text-lg font-semibold text-gray-200",
|
|
6365
|
-
children: "Dashboard preview"
|
|
6366
|
-
}), /*#__PURE__*/jsxs("div", {
|
|
6367
|
-
className: "rounded-lg border border-gray-700/50 bg-gray-800/50 p-4 flex flex-col gap-3",
|
|
6368
|
-
children: [/*#__PURE__*/jsxs("div", {
|
|
6369
|
-
className: "flex items-center gap-2",
|
|
6370
|
-
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6371
|
-
icon: resolveIcon(dashboard.icon || "grid-2"),
|
|
6372
|
-
fixedWidth: true,
|
|
6373
|
-
className: "text-blue-400"
|
|
6374
|
-
}), /*#__PURE__*/jsx("span", {
|
|
6375
|
-
className: "text-base font-semibold text-gray-200",
|
|
6376
|
-
children: dashboard.displayName || dashboard.name
|
|
6377
|
-
})]
|
|
6378
|
-
}), dashboard.description && /*#__PURE__*/jsx("p", {
|
|
6379
|
-
className: "text-sm text-gray-400",
|
|
6380
|
-
children: dashboard.description
|
|
6381
|
-
}), /*#__PURE__*/jsxs("div", {
|
|
6382
|
-
className: "flex flex-col gap-1.5",
|
|
6383
|
-
children: [/*#__PURE__*/jsxs("span", {
|
|
6384
|
-
className: "text-xs font-semibold text-gray-400 uppercase tracking-wide",
|
|
6385
|
-
children: ["Includes ", widgets.length, " widget", widgets.length !== 1 ? "s" : "", ":"]
|
|
6386
|
-
}), /*#__PURE__*/jsx("ul", {
|
|
6387
|
-
className: "flex flex-col gap-1",
|
|
6388
|
-
children: widgets.map(function (w, i) {
|
|
6389
|
-
return /*#__PURE__*/jsxs("li", {
|
|
6390
|
-
className: "flex items-center gap-2 text-sm text-gray-300",
|
|
6391
|
-
children: [w.icon && /*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6392
|
-
icon: resolveIcon(w.icon),
|
|
6393
|
-
fixedWidth: true,
|
|
6394
|
-
className: "text-gray-500 text-xs"
|
|
6395
|
-
}), /*#__PURE__*/jsx("span", {
|
|
6396
|
-
children: w.displayName || w.name
|
|
6397
|
-
})]
|
|
6398
|
-
}, w.name || i);
|
|
6399
|
-
})
|
|
6400
|
-
})]
|
|
6401
|
-
})]
|
|
6402
|
-
})]
|
|
6403
|
-
});
|
|
6404
|
-
};
|
|
6405
|
-
|
|
6406
|
-
// --- Drag-reorder grid ---
|
|
6407
|
-
|
|
6408
|
-
var LayoutGrid = function LayoutGrid(_ref3) {
|
|
6409
|
-
var template = _ref3.template,
|
|
6410
|
-
widgetOrder = _ref3.widgetOrder,
|
|
6411
|
-
widgets = _ref3.widgets,
|
|
6412
|
-
dispatch = _ref3.dispatch;
|
|
6413
|
-
var _useState = useState(null),
|
|
6414
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
6415
|
-
dragIndex = _useState2[0],
|
|
6416
|
-
setDragIndex = _useState2[1];
|
|
6417
|
-
var _useState3 = useState(null),
|
|
6418
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
6419
|
-
dragOverIndex = _useState4[0],
|
|
6420
|
-
setDragOverIndex = _useState4[1];
|
|
6421
|
-
var dragRef = useRef(null);
|
|
6422
|
-
var totalCells = template.previewCells.length;
|
|
6423
|
-
|
|
6424
|
-
// Build cell contents: widget names for filled cells, null for empty
|
|
6425
|
-
var cellContents = template.previewCells.map(function (_, i) {
|
|
6426
|
-
var widgetId = widgetOrder[i] || null;
|
|
6427
|
-
if (!widgetId) return null;
|
|
6428
|
-
var widget = widgets.find(function (w) {
|
|
6429
|
-
return (w.name || w.key) === widgetId;
|
|
6430
|
-
});
|
|
6431
|
-
return widget || {
|
|
6432
|
-
name: widgetId
|
|
6433
|
-
};
|
|
6434
|
-
});
|
|
6435
|
-
var handleDragStart = useCallback(function (e, index) {
|
|
6436
|
-
setDragIndex(index);
|
|
6437
|
-
dragRef.current = index;
|
|
6438
|
-
e.dataTransfer.effectAllowed = "move";
|
|
6439
|
-
e.dataTransfer.setData("text/plain", String(index));
|
|
6440
|
-
}, []);
|
|
6441
|
-
var handleDragOver = useCallback(function (e, index) {
|
|
6442
|
-
e.preventDefault();
|
|
6443
|
-
e.dataTransfer.dropEffect = "move";
|
|
6444
|
-
setDragOverIndex(index);
|
|
6445
|
-
}, []);
|
|
6446
|
-
var handleDragLeave = useCallback(function () {
|
|
6447
|
-
setDragOverIndex(null);
|
|
6448
|
-
}, []);
|
|
6449
|
-
var handleDrop = useCallback(function (e, dropIndex) {
|
|
6450
|
-
e.preventDefault();
|
|
6451
|
-
var fromIndex = dragRef.current;
|
|
6452
|
-
setDragIndex(null);
|
|
6453
|
-
setDragOverIndex(null);
|
|
6454
|
-
dragRef.current = null;
|
|
6455
|
-
if (fromIndex === null || fromIndex === dropIndex) return;
|
|
6456
|
-
|
|
6457
|
-
// Swap the two positions in widgetOrder
|
|
6458
|
-
var newOrder = _toConsumableArray(widgetOrder);
|
|
6459
|
-
// Pad array to cover all cells
|
|
6460
|
-
while (newOrder.length < totalCells) {
|
|
6461
|
-
newOrder.push(null);
|
|
6462
|
-
}
|
|
6463
|
-
var temp = newOrder[fromIndex];
|
|
6464
|
-
newOrder[fromIndex] = newOrder[dropIndex];
|
|
6465
|
-
newOrder[dropIndex] = temp;
|
|
6466
|
-
|
|
6467
|
-
// Trim trailing nulls
|
|
6468
|
-
while (newOrder.length > 0 && newOrder[newOrder.length - 1] === null) {
|
|
6469
|
-
newOrder.pop();
|
|
6470
|
-
}
|
|
6471
|
-
dispatch({
|
|
6472
|
-
type: "REORDER_WIDGETS",
|
|
6473
|
-
payload: newOrder
|
|
6474
|
-
});
|
|
6475
|
-
}, [widgetOrder, totalCells, dispatch]);
|
|
6476
|
-
var handleDragEnd = useCallback(function () {
|
|
6477
|
-
setDragIndex(null);
|
|
6478
|
-
setDragOverIndex(null);
|
|
6479
|
-
dragRef.current = null;
|
|
6480
|
-
}, []);
|
|
6481
|
-
return /*#__PURE__*/jsx("div", {
|
|
6482
|
-
className: "gap-3 p-4",
|
|
6483
|
-
style: {
|
|
6484
|
-
display: "grid",
|
|
6485
|
-
gridTemplateRows: "repeat(".concat(template.rows, ", 1fr)"),
|
|
6486
|
-
gridTemplateColumns: "repeat(".concat(template.cols, ", 1fr)")
|
|
6487
|
-
},
|
|
6488
|
-
children: template.previewCells.map(function (cell, i) {
|
|
6489
|
-
var content = cellContents[i];
|
|
6490
|
-
var isDragging = dragIndex === i;
|
|
6491
|
-
var isDragOver = dragOverIndex === i;
|
|
6492
|
-
var hasWidget = content !== null;
|
|
6493
|
-
var cellStyle = {};
|
|
6494
|
-
if (cell.rowSpan) cellStyle.gridRow = "span ".concat(cell.rowSpan);
|
|
6495
|
-
if (cell.colSpan) cellStyle.gridColumn = "span ".concat(cell.colSpan);
|
|
6496
|
-
var cellClasses = ["rounded-lg border transition-all flex items-center justify-center min-h-[60px]", hasWidget ? "border-gray-600 bg-gray-800/80 cursor-grab" : "border-dashed border-gray-700 bg-gray-800/30", isDragging ? "opacity-50 scale-95" : "", isDragOver ? "ring-2 ring-blue-400 border-blue-400" : ""].filter(Boolean).join(" ");
|
|
6497
|
-
return /*#__PURE__*/jsx("div", {
|
|
6498
|
-
className: cellClasses,
|
|
6499
|
-
style: cellStyle,
|
|
6500
|
-
draggable: hasWidget,
|
|
6501
|
-
onDragStart: hasWidget ? function (e) {
|
|
6502
|
-
return handleDragStart(e, i);
|
|
6503
|
-
} : undefined,
|
|
6504
|
-
onDragOver: function onDragOver(e) {
|
|
6505
|
-
return handleDragOver(e, i);
|
|
6506
|
-
},
|
|
6507
|
-
onDragLeave: handleDragLeave,
|
|
6508
|
-
onDrop: function onDrop(e) {
|
|
6509
|
-
return handleDrop(e, i);
|
|
6510
|
-
},
|
|
6511
|
-
onDragEnd: handleDragEnd,
|
|
6512
|
-
children: hasWidget ? /*#__PURE__*/jsxs("div", {
|
|
6513
|
-
className: "flex items-center gap-2 px-3 py-2 text-sm text-gray-300",
|
|
6514
|
-
children: [content.icon && /*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6515
|
-
icon: resolveIcon(content.icon),
|
|
6516
|
-
fixedWidth: true,
|
|
6517
|
-
className: "text-gray-400 text-xs"
|
|
6518
|
-
}), /*#__PURE__*/jsx("span", {
|
|
6519
|
-
className: "truncate",
|
|
6520
|
-
children: content.displayName || content.name || content.key
|
|
6521
|
-
}), /*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6522
|
-
icon: "grip-vertical",
|
|
6523
|
-
className: "text-gray-600 ml-auto"
|
|
6524
|
-
})]
|
|
6525
|
-
}) : /*#__PURE__*/jsx("div", {
|
|
6526
|
-
className: "text-gray-600",
|
|
6527
|
-
children: /*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6528
|
-
icon: "plus",
|
|
6529
|
-
fixedWidth: true
|
|
6530
|
-
})
|
|
6531
|
-
})
|
|
6532
|
-
}, "".concat(cell.row, "-").concat(cell.col));
|
|
6533
|
-
})
|
|
6534
|
-
});
|
|
6535
|
-
};
|
|
6536
|
-
|
|
6537
|
-
function ownKeys$A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6538
|
-
function _objectSpread$A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$A(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6539
6169
|
var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
6540
6170
|
var _state$selectedDashbo, _state$selectedDashbo2;
|
|
6541
6171
|
var state = _ref.state,
|
|
@@ -6550,7 +6180,9 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6550
6180
|
onInstallDashboard = _ref$onInstallDashboa === void 0 ? null : _ref$onInstallDashboa,
|
|
6551
6181
|
_ref$onOpenDashboard = _ref.onOpenDashboard,
|
|
6552
6182
|
onOpenDashboard = _ref$onOpenDashboard === void 0 ? null : _ref$onOpenDashboard,
|
|
6553
|
-
appId = _ref.appId
|
|
6183
|
+
appId = _ref.appId,
|
|
6184
|
+
_ref$createHandlerRef = _ref.createHandlerRef,
|
|
6185
|
+
createHandlerRef = _ref$createHandlerRef === void 0 ? null : _ref$createHandlerRef;
|
|
6554
6186
|
var _useContext = useContext(ThemeContext),
|
|
6555
6187
|
themes = _useContext.themes,
|
|
6556
6188
|
appThemeKey = _useContext.themeKey;
|
|
@@ -6575,9 +6207,9 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6575
6207
|
|
|
6576
6208
|
// Creation state
|
|
6577
6209
|
var _useState9 = useState(false),
|
|
6578
|
-
_useState0 = _slicedToArray(_useState9, 2)
|
|
6579
|
-
_useState0[0]
|
|
6580
|
-
|
|
6210
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
6211
|
+
creating = _useState0[0],
|
|
6212
|
+
setCreating = _useState0[1];
|
|
6581
6213
|
var _useState1 = useState(null),
|
|
6582
6214
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
6583
6215
|
error = _useState10[0],
|
|
@@ -6586,9 +6218,15 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6586
6218
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
6587
6219
|
createdDashboard = _useState12[0],
|
|
6588
6220
|
setCreatedDashboard = _useState12[1];
|
|
6221
|
+
|
|
6222
|
+
// Sub-step state (DASH-188): 0 = Name, 1 = Folder, 2 = Theme
|
|
6223
|
+
var _useState13 = useState(0),
|
|
6224
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
6225
|
+
subStep = _useState14[0],
|
|
6226
|
+
setSubStep = _useState14[1];
|
|
6589
6227
|
var isPrebuilt = state.path === "prebuilt";
|
|
6590
6228
|
|
|
6591
|
-
// Initialize customization defaults
|
|
6229
|
+
// Initialize customization defaults when stepping into this step
|
|
6592
6230
|
useEffect(function () {
|
|
6593
6231
|
setLocalMenuItems(menuItems);
|
|
6594
6232
|
var updates = {};
|
|
@@ -6606,6 +6244,10 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6606
6244
|
})[0]) === null || _Object$entries$sort$ === void 0 ? void 0 : _Object$entries$sort$[0];
|
|
6607
6245
|
updates.theme = appThemeKey || fallback || null;
|
|
6608
6246
|
}
|
|
6247
|
+
// Auto-populate name from selected dashboard (DASH-184)
|
|
6248
|
+
if (!state.customization.name && state.selectedDashboard) {
|
|
6249
|
+
updates.name = state.selectedDashboard.displayName || state.selectedDashboard.name || "";
|
|
6250
|
+
}
|
|
6609
6251
|
if (Object.keys(updates).length > 0) {
|
|
6610
6252
|
dispatch({
|
|
6611
6253
|
type: "SET_CUSTOMIZATION",
|
|
@@ -6613,65 +6255,10 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6613
6255
|
});
|
|
6614
6256
|
}
|
|
6615
6257
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
6616
|
-
}, []);
|
|
6617
|
-
var handleNameChange = useCallback(function (val) {
|
|
6618
|
-
dispatch({
|
|
6619
|
-
type: "SET_CUSTOMIZATION",
|
|
6620
|
-
payload: {
|
|
6621
|
-
name: val
|
|
6622
|
-
}
|
|
6623
|
-
});
|
|
6624
|
-
}, [dispatch]);
|
|
6625
|
-
var handleMenuSelect = useCallback(function (id) {
|
|
6626
|
-
dispatch({
|
|
6627
|
-
type: "SET_CUSTOMIZATION",
|
|
6628
|
-
payload: {
|
|
6629
|
-
menuId: id
|
|
6630
|
-
}
|
|
6631
|
-
});
|
|
6632
|
-
setIsCreatingFolder(false);
|
|
6633
|
-
setNewFolderName("");
|
|
6634
|
-
setNewFolderIcon(null);
|
|
6635
|
-
}, [dispatch]);
|
|
6636
|
-
var handleThemeSelect = useCallback(function (key) {
|
|
6637
|
-
dispatch({
|
|
6638
|
-
type: "SET_CUSTOMIZATION",
|
|
6639
|
-
payload: {
|
|
6640
|
-
theme: key
|
|
6641
|
-
}
|
|
6642
|
-
});
|
|
6643
|
-
}, [dispatch]);
|
|
6644
|
-
function handleCancelNewFolder() {
|
|
6645
|
-
setIsCreatingFolder(false);
|
|
6646
|
-
setNewFolderName("");
|
|
6647
|
-
setNewFolderIcon(null);
|
|
6648
|
-
}
|
|
6649
|
-
function handleSaveNewFolder() {
|
|
6650
|
-
if (!newFolderName.trim() || !newFolderIcon) return;
|
|
6651
|
-
var newItem = {
|
|
6652
|
-
id: Date.now(),
|
|
6653
|
-
name: newFolderName.trim(),
|
|
6654
|
-
icon: newFolderIcon
|
|
6655
|
-
};
|
|
6656
|
-
setLocalMenuItems(function (prev) {
|
|
6657
|
-
return [].concat(_toConsumableArray(prev), [newItem]);
|
|
6658
|
-
});
|
|
6659
|
-
dispatch({
|
|
6660
|
-
type: "SET_CUSTOMIZATION",
|
|
6661
|
-
payload: {
|
|
6662
|
-
menuId: newItem.id
|
|
6663
|
-
}
|
|
6664
|
-
});
|
|
6665
|
-
if (onSaveMenuItem) {
|
|
6666
|
-
onSaveMenuItem(newItem);
|
|
6667
|
-
}
|
|
6668
|
-
setIsCreatingFolder(false);
|
|
6669
|
-
setNewFolderName("");
|
|
6670
|
-
setNewFolderIcon(null);
|
|
6671
|
-
}
|
|
6258
|
+
}, [state.step, state.selectedDashboard]);
|
|
6672
6259
|
|
|
6673
|
-
// --- Create logic ---
|
|
6674
|
-
useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
6260
|
+
// --- Create logic (DASH-191: moved above useEffect so ref captures actual function) ---
|
|
6261
|
+
var handleCreate = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
6675
6262
|
var _state$customization, name, menuId, theme, result, _window$mainApi, installResult, updatedWorkspace, _window$mainApi2, template, layoutObj, widgetOrder, cells, _loop, i, workspace, _t;
|
|
6676
6263
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
6677
6264
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -6713,7 +6300,7 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6713
6300
|
_context2.next = 6;
|
|
6714
6301
|
break;
|
|
6715
6302
|
}
|
|
6716
|
-
updatedWorkspace = _objectSpread$
|
|
6303
|
+
updatedWorkspace = _objectSpread$B(_objectSpread$B({}, installResult.workspace), {}, {
|
|
6717
6304
|
name: name.trim(),
|
|
6718
6305
|
menuId: menuId || 1,
|
|
6719
6306
|
themeKey: theme
|
|
@@ -6822,6 +6409,72 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6822
6409
|
}, _callee, null, [[1, 16, 17, 18]]);
|
|
6823
6410
|
})), [state, isPrebuilt, onInstallDashboard, onCreateWorkspace, appId]);
|
|
6824
6411
|
|
|
6412
|
+
// Expose handleCreate and creating state to parent via ref (DASH-183)
|
|
6413
|
+
useEffect(function () {
|
|
6414
|
+
if (createHandlerRef) {
|
|
6415
|
+
createHandlerRef.current = {
|
|
6416
|
+
handleCreate: handleCreate,
|
|
6417
|
+
creating: creating
|
|
6418
|
+
};
|
|
6419
|
+
}
|
|
6420
|
+
}, [createHandlerRef, handleCreate, creating]);
|
|
6421
|
+
var handleNameChange = useCallback(function (val) {
|
|
6422
|
+
dispatch({
|
|
6423
|
+
type: "SET_CUSTOMIZATION",
|
|
6424
|
+
payload: {
|
|
6425
|
+
name: val
|
|
6426
|
+
}
|
|
6427
|
+
});
|
|
6428
|
+
}, [dispatch]);
|
|
6429
|
+
var handleMenuSelect = useCallback(function (id) {
|
|
6430
|
+
dispatch({
|
|
6431
|
+
type: "SET_CUSTOMIZATION",
|
|
6432
|
+
payload: {
|
|
6433
|
+
menuId: id
|
|
6434
|
+
}
|
|
6435
|
+
});
|
|
6436
|
+
setIsCreatingFolder(false);
|
|
6437
|
+
setNewFolderName("");
|
|
6438
|
+
setNewFolderIcon(null);
|
|
6439
|
+
setSubStep(2); // Auto-advance to Theme
|
|
6440
|
+
}, [dispatch]);
|
|
6441
|
+
var handleThemeSelect = useCallback(function (key) {
|
|
6442
|
+
dispatch({
|
|
6443
|
+
type: "SET_CUSTOMIZATION",
|
|
6444
|
+
payload: {
|
|
6445
|
+
theme: key
|
|
6446
|
+
}
|
|
6447
|
+
});
|
|
6448
|
+
}, [dispatch]);
|
|
6449
|
+
function handleCancelNewFolder() {
|
|
6450
|
+
setIsCreatingFolder(false);
|
|
6451
|
+
setNewFolderName("");
|
|
6452
|
+
setNewFolderIcon(null);
|
|
6453
|
+
}
|
|
6454
|
+
function handleSaveNewFolder() {
|
|
6455
|
+
if (!newFolderName.trim() || !newFolderIcon) return;
|
|
6456
|
+
var newItem = {
|
|
6457
|
+
id: Date.now(),
|
|
6458
|
+
name: newFolderName.trim(),
|
|
6459
|
+
icon: newFolderIcon
|
|
6460
|
+
};
|
|
6461
|
+
setLocalMenuItems(function (prev) {
|
|
6462
|
+
return [].concat(_toConsumableArray(prev), [newItem]);
|
|
6463
|
+
});
|
|
6464
|
+
dispatch({
|
|
6465
|
+
type: "SET_CUSTOMIZATION",
|
|
6466
|
+
payload: {
|
|
6467
|
+
menuId: newItem.id
|
|
6468
|
+
}
|
|
6469
|
+
});
|
|
6470
|
+
if (onSaveMenuItem) {
|
|
6471
|
+
onSaveMenuItem(newItem);
|
|
6472
|
+
}
|
|
6473
|
+
setIsCreatingFolder(false);
|
|
6474
|
+
setNewFolderName("");
|
|
6475
|
+
setNewFolderIcon(null);
|
|
6476
|
+
}
|
|
6477
|
+
|
|
6825
6478
|
// --- Success state ---
|
|
6826
6479
|
if (createdDashboard) {
|
|
6827
6480
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -6876,18 +6529,44 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6876
6529
|
return item.id === state.customization.menuId;
|
|
6877
6530
|
});
|
|
6878
6531
|
var selectedTheme = themes && state.customization.theme ? themes[state.customization.theme] : null;
|
|
6532
|
+
var SUB_STEPS = [{
|
|
6533
|
+
label: "Name",
|
|
6534
|
+
icon: "input-text"
|
|
6535
|
+
}, {
|
|
6536
|
+
label: "Folder",
|
|
6537
|
+
icon: "folder"
|
|
6538
|
+
}, {
|
|
6539
|
+
label: "Theme",
|
|
6540
|
+
icon: "palette"
|
|
6541
|
+
}];
|
|
6879
6542
|
return /*#__PURE__*/jsxs("div", {
|
|
6880
6543
|
className: "flex flex-col gap-4",
|
|
6881
6544
|
children: [/*#__PURE__*/jsx("h3", {
|
|
6882
6545
|
className: "text-lg font-semibold text-gray-200",
|
|
6883
6546
|
children: "Customize your dashboard"
|
|
6884
|
-
}), /*#__PURE__*/jsx("
|
|
6885
|
-
className: "
|
|
6886
|
-
children:
|
|
6547
|
+
}), /*#__PURE__*/jsx("div", {
|
|
6548
|
+
className: "flex items-center gap-2 mb-2",
|
|
6549
|
+
children: SUB_STEPS.map(function (s, i) {
|
|
6550
|
+
return /*#__PURE__*/jsxs(React__default.Fragment, {
|
|
6551
|
+
children: [i > 0 && /*#__PURE__*/jsx("div", {
|
|
6552
|
+
className: "flex-1 h-px ".concat(i <= subStep ? "bg-blue-500" : "bg-gray-700")
|
|
6553
|
+
}), /*#__PURE__*/jsxs("button", {
|
|
6554
|
+
type: "button",
|
|
6555
|
+
className: "flex items-center gap-1.5 px-3 py-1.5 rounded-full text-xs font-medium transition-colors ".concat(i === subStep ? "bg-blue-600 text-white" : i < subStep ? "bg-blue-900/50 text-blue-300 cursor-pointer" : "bg-gray-800 text-gray-500"),
|
|
6556
|
+
onClick: function onClick() {
|
|
6557
|
+
return setSubStep(i);
|
|
6558
|
+
},
|
|
6559
|
+
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
6560
|
+
icon: s.icon,
|
|
6561
|
+
fixedWidth: true
|
|
6562
|
+
}), s.label]
|
|
6563
|
+
})]
|
|
6564
|
+
}, s.label);
|
|
6565
|
+
})
|
|
6887
6566
|
}), /*#__PURE__*/jsxs("div", {
|
|
6888
6567
|
className: "flex flex-col gap-6",
|
|
6889
|
-
children: [/*#__PURE__*/jsxs("div", {
|
|
6890
|
-
className: "flex flex-col gap-
|
|
6568
|
+
children: [subStep === 0 && /*#__PURE__*/jsxs("div", {
|
|
6569
|
+
className: "flex flex-col gap-3",
|
|
6891
6570
|
children: [/*#__PURE__*/jsxs("label", {
|
|
6892
6571
|
className: "flex items-center gap-2 text-sm font-semibold text-gray-300",
|
|
6893
6572
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
@@ -6899,9 +6578,25 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6899
6578
|
onChange: handleNameChange,
|
|
6900
6579
|
placeholder: "My Dashboard",
|
|
6901
6580
|
autoFocus: true
|
|
6581
|
+
}), /*#__PURE__*/jsx("div", {
|
|
6582
|
+
className: "flex justify-end mt-2",
|
|
6583
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
6584
|
+
onClick: function onClick() {
|
|
6585
|
+
return setSubStep(1);
|
|
6586
|
+
},
|
|
6587
|
+
title: "Next",
|
|
6588
|
+
textSize: "text-sm",
|
|
6589
|
+
padding: "py-1.5 px-4",
|
|
6590
|
+
backgroundColor: state.customization.name.trim() ? "bg-blue-600" : "bg-gray-700",
|
|
6591
|
+
textColor: state.customization.name.trim() ? "text-white" : "text-gray-500",
|
|
6592
|
+
hoverTextColor: state.customization.name.trim() ? "hover:text-white" : "hover:text-gray-500",
|
|
6593
|
+
hoverBackgroundColor: state.customization.name.trim() ? "hover:bg-blue-500" : "hover:bg-gray-700",
|
|
6594
|
+
disabled: !state.customization.name.trim(),
|
|
6595
|
+
icon: "arrow-right"
|
|
6596
|
+
})
|
|
6902
6597
|
})]
|
|
6903
|
-
}), /*#__PURE__*/jsxs("div", {
|
|
6904
|
-
className: "flex flex-col gap-
|
|
6598
|
+
}), subStep === 1 && /*#__PURE__*/jsxs("div", {
|
|
6599
|
+
className: "flex flex-col gap-3",
|
|
6905
6600
|
children: [/*#__PURE__*/jsxs("label", {
|
|
6906
6601
|
className: "flex items-center gap-2 text-sm font-semibold text-gray-300",
|
|
6907
6602
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
@@ -6992,9 +6687,24 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
6992
6687
|
})
|
|
6993
6688
|
}, item.id);
|
|
6994
6689
|
})]
|
|
6690
|
+
}), /*#__PURE__*/jsx("div", {
|
|
6691
|
+
className: "flex justify-end mt-2",
|
|
6692
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
6693
|
+
onClick: function onClick() {
|
|
6694
|
+
return setSubStep(2);
|
|
6695
|
+
},
|
|
6696
|
+
title: "Next",
|
|
6697
|
+
textSize: "text-sm",
|
|
6698
|
+
padding: "py-1.5 px-4",
|
|
6699
|
+
backgroundColor: "bg-blue-600",
|
|
6700
|
+
textColor: "text-white",
|
|
6701
|
+
hoverTextColor: "hover:text-white",
|
|
6702
|
+
hoverBackgroundColor: "hover:bg-blue-500",
|
|
6703
|
+
icon: "arrow-right"
|
|
6704
|
+
})
|
|
6995
6705
|
})]
|
|
6996
|
-
}), /*#__PURE__*/jsxs("div", {
|
|
6997
|
-
className: "flex flex-col gap-
|
|
6706
|
+
}), subStep === 2 && /*#__PURE__*/jsxs("div", {
|
|
6707
|
+
className: "flex flex-col gap-3",
|
|
6998
6708
|
children: [/*#__PURE__*/jsxs("label", {
|
|
6999
6709
|
className: "flex items-center gap-2 text-sm font-semibold text-gray-300",
|
|
7000
6710
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
@@ -7141,12 +6851,202 @@ var WizardCustomizeStep = function WizardCustomizeStep(_ref) {
|
|
|
7141
6851
|
});
|
|
7142
6852
|
};
|
|
7143
6853
|
|
|
6854
|
+
function ownKeys$A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6855
|
+
function _objectSpread$A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$A(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6856
|
+
var TOTAL_STEPS = 2; // Steps 0-1: Discover, Customize
|
|
6857
|
+
|
|
6858
|
+
var initialState = {
|
|
6859
|
+
step: 0,
|
|
6860
|
+
filters: {
|
|
6861
|
+
categories: [],
|
|
6862
|
+
providers: [],
|
|
6863
|
+
query: ""
|
|
6864
|
+
},
|
|
6865
|
+
selectedWidgets: [],
|
|
6866
|
+
selectedDashboard: null,
|
|
6867
|
+
layout: {
|
|
6868
|
+
templateKey: null,
|
|
6869
|
+
widgetOrder: []
|
|
6870
|
+
},
|
|
6871
|
+
customization: {
|
|
6872
|
+
name: "",
|
|
6873
|
+
menuId: null,
|
|
6874
|
+
theme: null
|
|
6875
|
+
},
|
|
6876
|
+
path: null
|
|
6877
|
+
};
|
|
6878
|
+
function wizardReducer(state, action) {
|
|
6879
|
+
switch (action.type) {
|
|
6880
|
+
case "SET_STEP":
|
|
6881
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6882
|
+
step: action.payload
|
|
6883
|
+
});
|
|
6884
|
+
case "SET_FILTERS":
|
|
6885
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6886
|
+
filters: _objectSpread$A(_objectSpread$A({}, state.filters), action.payload)
|
|
6887
|
+
});
|
|
6888
|
+
case "TOGGLE_FILTER_CATEGORY":
|
|
6889
|
+
{
|
|
6890
|
+
var categories = state.filters.categories.includes(action.payload) ? state.filters.categories.filter(function (c) {
|
|
6891
|
+
return c !== action.payload;
|
|
6892
|
+
}) : [].concat(_toConsumableArray(state.filters.categories), [action.payload]);
|
|
6893
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6894
|
+
filters: _objectSpread$A(_objectSpread$A({}, state.filters), {}, {
|
|
6895
|
+
categories: categories
|
|
6896
|
+
})
|
|
6897
|
+
});
|
|
6898
|
+
}
|
|
6899
|
+
case "TOGGLE_FILTER_PROVIDER":
|
|
6900
|
+
{
|
|
6901
|
+
var providers = state.filters.providers.includes(action.payload) ? state.filters.providers.filter(function (p) {
|
|
6902
|
+
return p !== action.payload;
|
|
6903
|
+
}) : [].concat(_toConsumableArray(state.filters.providers), [action.payload]);
|
|
6904
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6905
|
+
filters: _objectSpread$A(_objectSpread$A({}, state.filters), {}, {
|
|
6906
|
+
providers: providers
|
|
6907
|
+
})
|
|
6908
|
+
});
|
|
6909
|
+
}
|
|
6910
|
+
case "SET_SEARCH_QUERY":
|
|
6911
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6912
|
+
filters: _objectSpread$A(_objectSpread$A({}, state.filters), {}, {
|
|
6913
|
+
query: action.payload
|
|
6914
|
+
})
|
|
6915
|
+
});
|
|
6916
|
+
case "SET_SELECTED_WIDGETS":
|
|
6917
|
+
{
|
|
6918
|
+
var templateKey = widgetCountToTemplate(action.payload.length);
|
|
6919
|
+
var widgetOrder = action.payload.map(function (w) {
|
|
6920
|
+
return w.name || w.key;
|
|
6921
|
+
});
|
|
6922
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6923
|
+
selectedWidgets: action.payload,
|
|
6924
|
+
layout: {
|
|
6925
|
+
templateKey: templateKey,
|
|
6926
|
+
widgetOrder: widgetOrder
|
|
6927
|
+
}
|
|
6928
|
+
});
|
|
6929
|
+
}
|
|
6930
|
+
case "TOGGLE_WIDGET":
|
|
6931
|
+
{
|
|
6932
|
+
var exists = state.selectedWidgets.some(function (w) {
|
|
6933
|
+
return w.name === action.payload.name;
|
|
6934
|
+
});
|
|
6935
|
+
var selectedWidgets = exists ? state.selectedWidgets.filter(function (w) {
|
|
6936
|
+
return w.name !== action.payload.name;
|
|
6937
|
+
}) : [].concat(_toConsumableArray(state.selectedWidgets), [action.payload]);
|
|
6938
|
+
var toggleTemplateKey = widgetCountToTemplate(selectedWidgets.length);
|
|
6939
|
+
var toggleWidgetOrder = selectedWidgets.map(function (w) {
|
|
6940
|
+
return w.name || w.key;
|
|
6941
|
+
});
|
|
6942
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6943
|
+
selectedWidgets: selectedWidgets,
|
|
6944
|
+
layout: {
|
|
6945
|
+
templateKey: toggleTemplateKey,
|
|
6946
|
+
widgetOrder: toggleWidgetOrder
|
|
6947
|
+
}
|
|
6948
|
+
});
|
|
6949
|
+
}
|
|
6950
|
+
case "SET_SELECTED_DASHBOARD":
|
|
6951
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6952
|
+
selectedDashboard: action.payload
|
|
6953
|
+
});
|
|
6954
|
+
case "SET_PATH":
|
|
6955
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6956
|
+
path: action.payload
|
|
6957
|
+
});
|
|
6958
|
+
case "SET_LAYOUT":
|
|
6959
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6960
|
+
layout: action.payload
|
|
6961
|
+
});
|
|
6962
|
+
case "REORDER_WIDGETS":
|
|
6963
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6964
|
+
layout: _objectSpread$A(_objectSpread$A({}, state.layout), {}, {
|
|
6965
|
+
widgetOrder: action.payload
|
|
6966
|
+
})
|
|
6967
|
+
});
|
|
6968
|
+
case "SET_CUSTOMIZATION":
|
|
6969
|
+
return _objectSpread$A(_objectSpread$A({}, state), {}, {
|
|
6970
|
+
customization: _objectSpread$A(_objectSpread$A({}, state.customization), action.payload)
|
|
6971
|
+
});
|
|
6972
|
+
case "RESET":
|
|
6973
|
+
return _objectSpread$A({}, initialState);
|
|
6974
|
+
default:
|
|
6975
|
+
return state;
|
|
6976
|
+
}
|
|
6977
|
+
}
|
|
6978
|
+
function widgetCountToTemplate(count) {
|
|
6979
|
+
if (count <= 1) return "single";
|
|
6980
|
+
if (count === 2) return "two-columns";
|
|
6981
|
+
if (count === 3) return "three-columns";
|
|
6982
|
+
if (count === 4) return "two-by-two";
|
|
6983
|
+
if (count <= 6) return "two-by-three";
|
|
6984
|
+
return "three-by-three";
|
|
6985
|
+
}
|
|
6986
|
+
function getCanProceed(state) {
|
|
6987
|
+
switch (state.step) {
|
|
6988
|
+
case 0:
|
|
6989
|
+
return state.selectedDashboard !== null || state.selectedWidgets.length > 0;
|
|
6990
|
+
case 1:
|
|
6991
|
+
return state.customization.name.trim().length > 0;
|
|
6992
|
+
default:
|
|
6993
|
+
return false;
|
|
6994
|
+
}
|
|
6995
|
+
}
|
|
6996
|
+
var useWizardState = function useWizardState() {
|
|
6997
|
+
var _useReducer = useReducer(wizardReducer, initialState),
|
|
6998
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
6999
|
+
state = _useReducer2[0],
|
|
7000
|
+
dispatch = _useReducer2[1];
|
|
7001
|
+
var canProceed = useMemo(function () {
|
|
7002
|
+
return getCanProceed(state);
|
|
7003
|
+
}, [state]);
|
|
7004
|
+
var selectedCount = useMemo(function () {
|
|
7005
|
+
return state.selectedWidgets.length;
|
|
7006
|
+
}, [state.selectedWidgets]);
|
|
7007
|
+
var isPrebuiltPath = state.path === "prebuilt";
|
|
7008
|
+
var isCustomPath = state.path === "custom";
|
|
7009
|
+
var nextStep = useCallback(function () {
|
|
7010
|
+
if (getCanProceed(state) && state.step < TOTAL_STEPS - 1) {
|
|
7011
|
+
dispatch({
|
|
7012
|
+
type: "SET_STEP",
|
|
7013
|
+
payload: state.step + 1
|
|
7014
|
+
});
|
|
7015
|
+
}
|
|
7016
|
+
}, [state]);
|
|
7017
|
+
var prevStep = useCallback(function () {
|
|
7018
|
+
if (state.step > 0) {
|
|
7019
|
+
dispatch({
|
|
7020
|
+
type: "SET_STEP",
|
|
7021
|
+
payload: state.step - 1
|
|
7022
|
+
});
|
|
7023
|
+
}
|
|
7024
|
+
}, [state.step]);
|
|
7025
|
+
var goToStep = useCallback(function (n) {
|
|
7026
|
+
if (n >= 0 && n < TOTAL_STEPS) {
|
|
7027
|
+
dispatch({
|
|
7028
|
+
type: "SET_STEP",
|
|
7029
|
+
payload: n
|
|
7030
|
+
});
|
|
7031
|
+
}
|
|
7032
|
+
}, []);
|
|
7033
|
+
return {
|
|
7034
|
+
state: state,
|
|
7035
|
+
dispatch: dispatch,
|
|
7036
|
+
nextStep: nextStep,
|
|
7037
|
+
prevStep: prevStep,
|
|
7038
|
+
goToStep: goToStep,
|
|
7039
|
+
canProceed: canProceed,
|
|
7040
|
+
selectedCount: selectedCount,
|
|
7041
|
+
isPrebuiltPath: isPrebuiltPath,
|
|
7042
|
+
isCustomPath: isCustomPath,
|
|
7043
|
+
widgetCountToTemplate: widgetCountToTemplate
|
|
7044
|
+
};
|
|
7045
|
+
};
|
|
7046
|
+
|
|
7144
7047
|
var STEP_LABELS = [{
|
|
7145
7048
|
label: "Discover",
|
|
7146
7049
|
description: "Search & select"
|
|
7147
|
-
}, {
|
|
7148
|
-
label: "Layout",
|
|
7149
|
-
description: "Arrange your widgets"
|
|
7150
7050
|
}, {
|
|
7151
7051
|
label: "Customize",
|
|
7152
7052
|
description: "Name, folder & theme"
|
|
@@ -7160,6 +7060,7 @@ var STEP_LABELS = [{
|
|
|
7160
7060
|
* Resets wizard state cleanly on close.
|
|
7161
7061
|
*/
|
|
7162
7062
|
var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
7063
|
+
var _createHandlerRef$cur, _createHandlerRef$cur2;
|
|
7163
7064
|
var open = _ref.open,
|
|
7164
7065
|
setIsOpen = _ref.setIsOpen,
|
|
7165
7066
|
_ref$menuItems = _ref.menuItems,
|
|
@@ -7175,14 +7076,13 @@ var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
|
7175
7076
|
_ref$onReloadWorkspac = _ref.onReloadWorkspaces,
|
|
7176
7077
|
onReloadWorkspaces = _ref$onReloadWorkspac === void 0 ? null : _ref$onReloadWorkspac,
|
|
7177
7078
|
appId = _ref.appId;
|
|
7079
|
+
var createHandlerRef = useRef(null);
|
|
7178
7080
|
var _useWizardState = useWizardState(),
|
|
7179
7081
|
state = _useWizardState.state,
|
|
7180
7082
|
dispatch = _useWizardState.dispatch,
|
|
7181
7083
|
nextStep = _useWizardState.nextStep,
|
|
7182
7084
|
prevStep = _useWizardState.prevStep,
|
|
7183
|
-
|
|
7184
|
-
canProceed = _useWizardState.canProceed,
|
|
7185
|
-
isPrebuiltPath = _useWizardState.isPrebuiltPath;
|
|
7085
|
+
canProceed = _useWizardState.canProceed;
|
|
7186
7086
|
|
|
7187
7087
|
// Reset wizard state when modal opens
|
|
7188
7088
|
useEffect(function () {
|
|
@@ -7198,30 +7098,16 @@ var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
|
7198
7098
|
var handleStepChange = useCallback(function (newStep) {
|
|
7199
7099
|
// Stepper only allows going backwards; forward is via Next button
|
|
7200
7100
|
if (newStep < state.step) {
|
|
7201
|
-
|
|
7101
|
+
prevStep();
|
|
7202
7102
|
}
|
|
7203
|
-
}, [state.step,
|
|
7204
|
-
|
|
7205
|
-
// Skip layout step for prebuilt path
|
|
7103
|
+
}, [state.step, prevStep]);
|
|
7206
7104
|
var handleNext = useCallback(function () {
|
|
7207
7105
|
if (!canProceed) return;
|
|
7208
|
-
|
|
7209
|
-
|
|
7210
|
-
|
|
7211
|
-
|
|
7212
|
-
|
|
7213
|
-
}
|
|
7214
|
-
}, [canProceed, state.step, isPrebuiltPath, goToStep, nextStep]);
|
|
7215
|
-
var handleBack = useCallback(function () {
|
|
7216
|
-
if (state.step === 2 && isPrebuiltPath) {
|
|
7217
|
-
// Skip back over layout step (1), go to discover (0)
|
|
7218
|
-
goToStep(0);
|
|
7219
|
-
} else {
|
|
7220
|
-
prevStep();
|
|
7221
|
-
}
|
|
7222
|
-
}, [state.step, isPrebuiltPath, goToStep, prevStep]);
|
|
7223
|
-
var isLastStep = state.step === 2;
|
|
7224
|
-
state.step === 2 && state._created;
|
|
7106
|
+
nextStep();
|
|
7107
|
+
}, [canProceed, nextStep]);
|
|
7108
|
+
var isLastStep = state.step === 1;
|
|
7109
|
+
var isCreating = (_createHandlerRef$cur = (_createHandlerRef$cur2 = createHandlerRef.current) === null || _createHandlerRef$cur2 === void 0 ? void 0 : _createHandlerRef$cur2.creating) !== null && _createHandlerRef$cur !== void 0 ? _createHandlerRef$cur : false;
|
|
7110
|
+
var canCreate = canProceed && !isCreating;
|
|
7225
7111
|
return /*#__PURE__*/jsx(Modal, {
|
|
7226
7112
|
isOpen: open,
|
|
7227
7113
|
setIsOpen: setIsOpen,
|
|
@@ -7271,16 +7157,6 @@ var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
|
7271
7157
|
}), /*#__PURE__*/jsx(Stepper.Step, {
|
|
7272
7158
|
label: STEP_LABELS[1].label,
|
|
7273
7159
|
description: STEP_LABELS[1].description,
|
|
7274
|
-
children: /*#__PURE__*/jsx("div", {
|
|
7275
|
-
className: "flex-1 min-h-0 overflow-y-auto",
|
|
7276
|
-
children: /*#__PURE__*/jsx(WizardLayoutPreviewStep, {
|
|
7277
|
-
state: state,
|
|
7278
|
-
dispatch: dispatch
|
|
7279
|
-
})
|
|
7280
|
-
})
|
|
7281
|
-
}), /*#__PURE__*/jsx(Stepper.Step, {
|
|
7282
|
-
label: STEP_LABELS[2].label,
|
|
7283
|
-
description: STEP_LABELS[2].description,
|
|
7284
7160
|
children: /*#__PURE__*/jsx("div", {
|
|
7285
7161
|
className: "flex-1 min-h-0 overflow-y-auto",
|
|
7286
7162
|
children: /*#__PURE__*/jsx(WizardCustomizeStep, {
|
|
@@ -7295,14 +7171,15 @@ var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
|
7295
7171
|
if (_onOpenDashboard) _onOpenDashboard(ws);
|
|
7296
7172
|
if (onReloadWorkspaces) onReloadWorkspaces();
|
|
7297
7173
|
},
|
|
7298
|
-
appId: appId
|
|
7174
|
+
appId: appId,
|
|
7175
|
+
createHandlerRef: createHandlerRef
|
|
7299
7176
|
})
|
|
7300
7177
|
})
|
|
7301
7178
|
})]
|
|
7302
7179
|
}), /*#__PURE__*/jsxs("div", {
|
|
7303
7180
|
className: "flex flex-row justify-between items-center pt-4 mt-4 border-t border-gray-700/50",
|
|
7304
7181
|
children: [/*#__PURE__*/jsx(Button, {
|
|
7305
|
-
onClick: state.step === 0 ? handleClose :
|
|
7182
|
+
onClick: state.step === 0 ? handleClose : prevStep,
|
|
7306
7183
|
title: state.step === 0 ? "Cancel" : "Back",
|
|
7307
7184
|
textSize: "text-sm",
|
|
7308
7185
|
padding: "py-2 px-4",
|
|
@@ -7313,7 +7190,21 @@ var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
|
7313
7190
|
}), /*#__PURE__*/jsxs("span", {
|
|
7314
7191
|
className: "text-xs text-gray-500",
|
|
7315
7192
|
children: ["Step ", state.step + 1, " of ", STEP_LABELS.length]
|
|
7316
|
-
}),
|
|
7193
|
+
}), isLastStep ? /*#__PURE__*/jsx(Button, {
|
|
7194
|
+
onClick: function onClick() {
|
|
7195
|
+
var _createHandlerRef$cur3, _createHandlerRef$cur4;
|
|
7196
|
+
return (_createHandlerRef$cur3 = createHandlerRef.current) === null || _createHandlerRef$cur3 === void 0 || (_createHandlerRef$cur4 = _createHandlerRef$cur3.handleCreate) === null || _createHandlerRef$cur4 === void 0 ? void 0 : _createHandlerRef$cur4.call(_createHandlerRef$cur3);
|
|
7197
|
+
},
|
|
7198
|
+
title: isCreating ? "Creating..." : "Create Dashboard",
|
|
7199
|
+
textSize: "text-sm",
|
|
7200
|
+
padding: "py-2 px-4",
|
|
7201
|
+
backgroundColor: canCreate ? "bg-green-600" : "bg-gray-700",
|
|
7202
|
+
textColor: canCreate ? "text-white" : "text-gray-500",
|
|
7203
|
+
hoverTextColor: canCreate ? "hover:text-white" : "hover:text-gray-500",
|
|
7204
|
+
hoverBackgroundColor: canCreate ? "hover:bg-green-500" : "hover:bg-gray-700",
|
|
7205
|
+
disabled: !canCreate,
|
|
7206
|
+
icon: isCreating ? "spinner" : "plus"
|
|
7207
|
+
}) : /*#__PURE__*/jsx(Button, {
|
|
7317
7208
|
onClick: handleNext,
|
|
7318
7209
|
title: "Next",
|
|
7319
7210
|
textSize: "text-sm",
|
|
@@ -7324,7 +7215,7 @@ var DashboardWizardModal = function DashboardWizardModal(_ref) {
|
|
|
7324
7215
|
hoverBackgroundColor: canProceed ? "hover:bg-blue-500" : "hover:bg-gray-700",
|
|
7325
7216
|
disabled: !canProceed,
|
|
7326
7217
|
icon: "arrow-right"
|
|
7327
|
-
})
|
|
7218
|
+
})]
|
|
7328
7219
|
})]
|
|
7329
7220
|
})]
|
|
7330
7221
|
})
|
|
@@ -48215,6 +48106,10 @@ var DashboardStageInner = function DashboardStageInner(_ref2) {
|
|
|
48215
48106
|
handleOpenTab(newWorkspace);
|
|
48216
48107
|
setSidebarCollapsed(true);
|
|
48217
48108
|
setPreviewMode(false);
|
|
48109
|
+
return {
|
|
48110
|
+
success: true,
|
|
48111
|
+
workspace: newWorkspace
|
|
48112
|
+
};
|
|
48218
48113
|
} catch (e) {
|
|
48219
48114
|
}
|
|
48220
48115
|
}
|
|
@@ -50227,5 +50122,5 @@ var WorkspaceMenu = function WorkspaceMenu(_ref) {
|
|
|
50227
50122
|
|
|
50228
50123
|
ComponentManager.registerContainerTypes(LayoutContainer, LayoutGridContainer);
|
|
50229
50124
|
|
|
50230
|
-
export { ALGOLIA_ANALYTICS_FOR_QUERY, ALGOLIA_ANALYTICS_FOR_QUERY_COMPLETE, ALGOLIA_ANALYTICS_FOR_QUERY_ERROR, ALGOLIA_LIST_INDICES, ALGOLIA_LIST_INDICES_COMPLETE, ALGOLIA_LIST_INDICES_ERROR, AVAILABLE_COLORS, AddMenuItemModal, AdvancedMcpConfig, AppContext, AppSettingsModal, AppThemeScope, AppWrapper, CHOOSE_FILE, CHOOSE_FILE_COMPLETE, CHOOSE_FILE_ERROR, ColorModel, ComponentConfigModel, ComponentManager, ContextModel, DATA_JSON_TO_CSV_FILE, DATA_JSON_TO_CSV_FILE_COMPLETE, DATA_JSON_TO_CSV_FILE_ERROR, DATA_JSON_TO_CSV_STRING, DATA_JSON_TO_CSV_STRING_COMPLETE, DATA_JSON_TO_CSV_STRING_ERROR, DATA_READ_FROM_FILE, DATA_READ_FROM_FILE_COMPLETE, DATA_READ_FROM_FILE_ERROR, DATA_SAVE_TO_FILE, DATA_SAVE_TO_FILE_COMPLETE, DATA_SAVE_TO_FILE_ERROR, DashCommandPalette, DashNavbar, DashSidebar, DashTabBar, DashboardStage as Dashboard, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, LAYOUT_SAVE, LAYOUT_SAVE_COMPLETE, LAYOUT_SAVE_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MissingProviderPrompt, MockDashboardApi, PROVIDER_DELETE_COMPLETE, PROVIDER_DELETE_ERROR, PROVIDER_GET_COMPLETE, PROVIDER_GET_ERROR, PROVIDER_LIST_COMPLETE, PROVIDER_LIST_ERROR, PROVIDER_SAVE_COMPLETE, PROVIDER_SAVE_ERROR, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, ProviderContext, ProviderErrorBoundary, ProviderForm, ProviderSelector, SECURE_STORAGE_ENCRYPT_STRING, SECURE_STORAGE_ENCRYPT_STRING_COMPLETE, SECURE_STORAGE_ENCRYPT_STRING_ERROR, SECURE_STORE_ENCRYPTION_CHECK, SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, SECURE_STORE_ENCRYPTION_CHECK_ERROR, SECURE_STORE_GET_DATA, SECURE_STORE_GET_DATA_COMPLETE, SECURE_STORE_GET_DATA_ERROR, SECURE_STORE_SET_DATA, SECURE_STORE_SET_DATA_COMPLETE, SECURE_STORE_SET_DATA_ERROR, SETTINGS_GET, SETTINGS_GET_COMPLETE, SETTINGS_GET_ERROR, SETTINGS_SAVE, SETTINGS_SAVE_COMPLETE, SETTINGS_SAVE_ERROR, SIDEBAR_WIDGET_TYPE, SettingsModel, SideMenu, SplitCellModal, THEME_DELETE, THEME_DELETE_COMPLETE, THEME_DELETE_ERROR, THEME_EXTRACT_FROM_URL, THEME_EXTRACT_FROM_URL_COMPLETE, THEME_EXTRACT_FROM_URL_ERROR, THEME_LIST, THEME_LIST_COMPLETE, THEME_LIST_ERROR, THEME_MAP_PALETTE, THEME_MAP_PALETTE_COMPLETE, THEME_MAP_PALETTE_ERROR, THEME_SAVE, THEME_SAVE_COMPLETE, THEME_SAVE_ERROR, ThemeApi, ThemeColorDots, ThemeManagerModal, ThemeModel, ThemeWrapper, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep,
|
|
50125
|
+
export { ALGOLIA_ANALYTICS_FOR_QUERY, ALGOLIA_ANALYTICS_FOR_QUERY_COMPLETE, ALGOLIA_ANALYTICS_FOR_QUERY_ERROR, ALGOLIA_LIST_INDICES, ALGOLIA_LIST_INDICES_COMPLETE, ALGOLIA_LIST_INDICES_ERROR, AVAILABLE_COLORS, AddMenuItemModal, AdvancedMcpConfig, AppContext, AppSettingsModal, AppThemeScope, AppWrapper, CHOOSE_FILE, CHOOSE_FILE_COMPLETE, CHOOSE_FILE_ERROR, ColorModel, ComponentConfigModel, ComponentManager, ContextModel, DATA_JSON_TO_CSV_FILE, DATA_JSON_TO_CSV_FILE_COMPLETE, DATA_JSON_TO_CSV_FILE_ERROR, DATA_JSON_TO_CSV_STRING, DATA_JSON_TO_CSV_STRING_COMPLETE, DATA_JSON_TO_CSV_STRING_ERROR, DATA_READ_FROM_FILE, DATA_READ_FROM_FILE_COMPLETE, DATA_READ_FROM_FILE_ERROR, DATA_SAVE_TO_FILE, DATA_SAVE_TO_FILE_COMPLETE, DATA_SAVE_TO_FILE_ERROR, DashCommandPalette, DashNavbar, DashSidebar, DashTabBar, DashboardStage as Dashboard, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, LAYOUT_SAVE, LAYOUT_SAVE_COMPLETE, LAYOUT_SAVE_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MissingProviderPrompt, MockDashboardApi, PROVIDER_DELETE_COMPLETE, PROVIDER_DELETE_ERROR, PROVIDER_GET_COMPLETE, PROVIDER_GET_ERROR, PROVIDER_LIST_COMPLETE, PROVIDER_LIST_ERROR, PROVIDER_SAVE_COMPLETE, PROVIDER_SAVE_ERROR, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, ProviderContext, ProviderErrorBoundary, ProviderForm, ProviderSelector, SECURE_STORAGE_ENCRYPT_STRING, SECURE_STORAGE_ENCRYPT_STRING_COMPLETE, SECURE_STORAGE_ENCRYPT_STRING_ERROR, SECURE_STORE_ENCRYPTION_CHECK, SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, SECURE_STORE_ENCRYPTION_CHECK_ERROR, SECURE_STORE_GET_DATA, SECURE_STORE_GET_DATA_COMPLETE, SECURE_STORE_GET_DATA_ERROR, SECURE_STORE_SET_DATA, SECURE_STORE_SET_DATA_COMPLETE, SECURE_STORE_SET_DATA_ERROR, SETTINGS_GET, SETTINGS_GET_COMPLETE, SETTINGS_GET_ERROR, SETTINGS_SAVE, SETTINGS_SAVE_COMPLETE, SETTINGS_SAVE_ERROR, SIDEBAR_WIDGET_TYPE, SettingsModel, SideMenu, SplitCellModal, THEME_DELETE, THEME_DELETE_COMPLETE, THEME_DELETE_ERROR, THEME_EXTRACT_FROM_URL, THEME_EXTRACT_FROM_URL_COMPLETE, THEME_EXTRACT_FROM_URL_ERROR, THEME_LIST, THEME_LIST_COMPLETE, THEME_LIST_ERROR, THEME_MAP_PALETTE, THEME_MAP_PALETTE_COMPLETE, THEME_MAP_PALETTE_ERROR, THEME_SAVE, THEME_SAVE_COMPLETE, THEME_SAVE_ERROR, ThemeApi, ThemeColorDots, ThemeManagerModal, ThemeModel, ThemeWrapper, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, addChildToLayoutItem, addItemToItemLayout, buildMcpConfigFromOverrides, canHaveChildren, changeDirectionForLayoutItem, createProviderRegistry, deriveFormFields, envMappingToRows, evaluateBundle, extractWidgetConfigs, formStateToMcpJson, formatFieldName, generateCustomTheme, generateHarmonyTheme, generateRandomTheme, generateThemeName, getBorderStyle, getChildrenForLayoutItem, getComponentInLayout, getContainerBorderColor, getContainerColor, getIndexOfLayoutChildrenForItem, getIndexOfLayoutItem, getLayoutItemById, getLayoutItemForWorkspace, getNearestParentWorkspace, getNextHighestId, getNextHighestItemInLayout, getNextHighestOrder, getNextHighestParentId, getNextLowestItemInLayout, getParentForLayoutItem, getParentWorkspaceForItem, getThemePresets, getUserConfigurableProviders, getWidgetsForWorkspace, getWorkspacesForWorkspace, headerTemplateToRows, isContainer, isLikelySecret, isMaxOrderForItem, isMinOrderForItem, isWidget, isWidgetResolvable, isWorkspace, layoutItemHasWorkspaceAsChild, loadWidgetBundle, mcpJsonToFormState, numChildrenForLayout, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, replaceItemInLayout, resolveIcon, setHostModules, traverseParentTree, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
|
|
50231
50126
|
//# sourceMappingURL=index.esm.js.map
|