@boomerang-io/carbon-addons-boomerang-react 4.6.21-beta.8 → 4.6.22-beta.0
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/cjs/components/AdvantageSideNav/AdvantageSideNav.js +29 -37
- package/dist/cjs/components/Creatable/Creatable.js +32 -3
- package/dist/cjs/components/DataDrivenInput/DataDrivenInput.js +11 -2
- package/dist/cjs/components/DynamicFormik/DynamicFormik.js +11 -1
- package/dist/cjs/components/Header/Header.js +3 -2
- package/dist/cjs/components/Header/HeaderTeamSwitcher.js +109 -81
- package/dist/cjs/components/ProfileSettings/ProfileSettings.js +22 -4
- package/dist/cjs/components/UIShell/UIShell.js +13 -5
- package/dist/cjs/constants/DataDrivenInputTypes.js +4 -0
- package/dist/cjs/constants/TeamTypes.js +15 -0
- package/dist/esm/components/AdvantageSideNav/AdvantageSideNav.js +29 -37
- package/dist/esm/components/Creatable/Creatable.js +34 -5
- package/dist/esm/components/DataDrivenInput/DataDrivenInput.js +11 -2
- package/dist/esm/components/DynamicFormik/DynamicFormik.js +11 -1
- package/dist/esm/components/Header/Header.js +3 -2
- package/dist/esm/components/Header/HeaderTeamSwitcher.js +109 -81
- package/dist/esm/components/ProfileSettings/ProfileSettings.js +22 -4
- package/dist/esm/components/UIShell/UIShell.js +14 -6
- package/dist/esm/constants/DataDrivenInputTypes.js +4 -0
- package/dist/esm/constants/TeamTypes.js +13 -0
- package/dist/types/index.d.ts +7 -2
- package/package.json +7 -3
- package/scss/components/Creatable/_creatable.scss +31 -1
- package/scss/components/ProfileSettings/_profileSettings.scss +1 -1
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var cx = require('classnames');
|
|
7
|
+
require('history');
|
|
7
8
|
var react = require('@carbon/react');
|
|
8
9
|
var TooltipHover = require('../TooltipHover/TooltipHover.js');
|
|
9
10
|
var icons = require('@carbon/react/icons');
|
|
@@ -33,7 +34,7 @@ const SideNavUrlKeys = {
|
|
|
33
34
|
Admin: "admin",
|
|
34
35
|
};
|
|
35
36
|
function AdvantageSideNav(props) {
|
|
36
|
-
const { app, appLink, agenticAppsPath = "", agentStudioPath = "", regionalTeam, enableChatButton = true, showChatButton = true, showSelectTeamPurpose = false, defaultAssistantLink, joinCreateTrigger, isLoading, isOpen, teams = [], triggerEvent, accounts = [], baseEnvUrl, className, navLinks, personalTeams = [], user, showChatTooltip, templateMeteringEvent, tooltipMessage, isLaunchpad = false, sideNavUrls, history, children, personalTeamEnabled, ...rest } = props;
|
|
37
|
+
const { app, appLink, agenticAppsPath = "", agentStudioPath = "", regionalTeam, enableChatButton = true, showChatButton = true, showSelectTeamPurpose = false, defaultAssistantLink, joinCreateTrigger, isLoading, isOpen, teams = [], triggerEvent, accounts = [], baseEnvUrl, className, navLinks, personalTeams = [], user, showChatTooltip, templateMeteringEvent, tooltipMessage, isLaunchpad = false, isbetaLaunchpad = false, sideNavUrls, history, children, personalTeamEnabled, ...rest } = props;
|
|
37
38
|
const [activeMenu, setActiveMenu] = React__default.default.useState(false);
|
|
38
39
|
const isMenuOpen = isOpen || activeMenu;
|
|
39
40
|
const windowLocation = window.location;
|
|
@@ -49,6 +50,11 @@ function AdvantageSideNav(props) {
|
|
|
49
50
|
const catalogNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Catalog)?.url;
|
|
50
51
|
const settingsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
51
52
|
const adminNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Admin)?.url;
|
|
53
|
+
const AssistantStudioLink = false;
|
|
54
|
+
const currentUrl = new URL(window.location.href);
|
|
55
|
+
const workspace = currentUrl.searchParams.get("workspace");
|
|
56
|
+
const isDocumentCollectionsActive = currentUrl.pathname.includes("/chat") && workspace === "knowledge";
|
|
57
|
+
const isChatActive = currentUrl.pathname.includes("/chat") && !isDocumentCollectionsActive;
|
|
52
58
|
// get current selected team
|
|
53
59
|
let teamSwitcherTeam = null;
|
|
54
60
|
if (Array.isArray(personalTeams) && personalTeams.length > 0) {
|
|
@@ -96,22 +102,6 @@ function AdvantageSideNav(props) {
|
|
|
96
102
|
destinationPath: toolsLink,
|
|
97
103
|
});
|
|
98
104
|
};
|
|
99
|
-
const handleAgentAssistantStudioClick = () => {
|
|
100
|
-
triggerEvent &&
|
|
101
|
-
triggerEvent({
|
|
102
|
-
action: "Clicked on SideNav Agent & Assistant Studio link",
|
|
103
|
-
category: "Sidenav",
|
|
104
|
-
destinationPath: agentAssistantStudioLink,
|
|
105
|
-
});
|
|
106
|
-
};
|
|
107
|
-
const handleAgentAssistantLibraryClick = () => {
|
|
108
|
-
triggerEvent &&
|
|
109
|
-
triggerEvent({
|
|
110
|
-
action: "Clicked on SideNav Agent & Assistant Library link",
|
|
111
|
-
category: "Sidenav",
|
|
112
|
-
destinationPath: agentAssistantLibraryLink,
|
|
113
|
-
});
|
|
114
|
-
};
|
|
115
105
|
const handleDocumentCollectionsClick = () => {
|
|
116
106
|
triggerEvent &&
|
|
117
107
|
triggerEvent({
|
|
@@ -168,7 +158,7 @@ function AdvantageSideNav(props) {
|
|
|
168
158
|
}
|
|
169
159
|
setActiveMenu(false);
|
|
170
160
|
};
|
|
171
|
-
const chatSideNavLink = (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), renderIcon: icons.ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
|
|
161
|
+
const chatSideNavLink = (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", isActive: isChatActive, disabled: Boolean(!enableChatButton), renderIcon: icons.ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
|
|
172
162
|
const showSecondDivider = showChatButton || toolsLink || agentAssistantStudioLink || agentAssistantLibraryLink || documentCollectionsLink;
|
|
173
163
|
return (React__default.default.createElement(react.SideNav, { "aria-label": "sidenav-container", className: cx__default.default(`${settings.prefix}--bmrg-advantage-sidenav-container`, className, {
|
|
174
164
|
"--closed": !isMenuOpen,
|
|
@@ -181,6 +171,11 @@ function AdvantageSideNav(props) {
|
|
|
181
171
|
handleLaunchpadLink(e);
|
|
182
172
|
history.push("/");
|
|
183
173
|
}
|
|
174
|
+
if (isbetaLaunchpad) {
|
|
175
|
+
console.log("beta launchpad home link clicked");
|
|
176
|
+
handleLaunchpadLink(e);
|
|
177
|
+
history.push("/launchpad");
|
|
178
|
+
}
|
|
184
179
|
handleHomeClick();
|
|
185
180
|
} }, "Home")) : null,
|
|
186
181
|
teamSwitcherTeam ? (React__default.default.createElement(react.SideNavLink, { title: teamSwitcherTeam.isAccount ? "Account Page" : "Team Page", name: teamSwitcherTeam.name, "data-testid": "sidenav-team-link", id: teamSwitcherTeam.id, isActive: windowLocation.href.includes(`/launchpad/teams/${teamSwitcherTeam.id}`), className: `${settings.prefix}--bmrg-advantage-sidenav-team`, renderIcon: icons.UserMultiple, href: `${baseEnvUrl}/${app}/teams/${teamSwitcherTeam.id}`, onClick: (e) => {
|
|
@@ -205,7 +200,7 @@ function AdvantageSideNav(props) {
|
|
|
205
200
|
} }, joinButtontitle)) : null,
|
|
206
201
|
React__default.default.createElement(react.SideNavDivider, null),
|
|
207
202
|
showChatButton &&
|
|
208
|
-
(showChatTooltip ? (React__default.default.createElement(TooltipHover.default, { className: `${settings.prefix}--bmrg-side-nav__tooltip`, content: tooltipMessage, direction: "right" },
|
|
203
|
+
(showChatTooltip ? (React__default.default.createElement(TooltipHover.default, { className: `${settings.prefix}--bmrg-side-nav__tooltip`, isActive: isChatActive, content: tooltipMessage, direction: "right" },
|
|
209
204
|
React__default.default.createElement("span", null, chatSideNavLink))) : (chatSideNavLink)),
|
|
210
205
|
toolsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-tools-link", renderIcon: icons.Api, href: toolsLink, onClick: (e) => {
|
|
211
206
|
handleToolsClick();
|
|
@@ -213,27 +208,24 @@ function AdvantageSideNav(props) {
|
|
|
213
208
|
React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-advantage-sidenav-item-tag` },
|
|
214
209
|
"Tools",
|
|
215
210
|
React__default.default.createElement(react.Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
|
|
216
|
-
agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
} }, "Agent & Assistant Library")) : null,
|
|
227
|
-
documentCollectionsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: icons.DocumentMultiple_02, href: documentCollectionsLink, onClick: (e) => {
|
|
211
|
+
agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
212
|
+
// isActive={
|
|
213
|
+
// (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
|
|
214
|
+
// (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`))
|
|
215
|
+
// }
|
|
216
|
+
className: `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink), renderIcon: icons.IntentRequestCreate }, "Agent & Assistant Studio")) : null,
|
|
217
|
+
agentAssistantLibraryLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: icons.Folders,
|
|
218
|
+
//href={agentAssistantLibraryLink}
|
|
219
|
+
className: `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Agent & Assistant Library")) : null,
|
|
220
|
+
documentCollectionsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-document-collections-link", isActive: isDocumentCollectionsActive, renderIcon: icons.DocumentMultiple_02, href: documentCollectionsLink, onClick: (e) => {
|
|
228
221
|
handleDocumentCollectionsClick();
|
|
229
222
|
} }, "Document Collections")) : null,
|
|
230
223
|
showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
|
|
231
|
-
catalogNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-catalog-link", isActive:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
|
|
224
|
+
catalogNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: icons.Catalog }, "Catalog")) : null,
|
|
225
|
+
settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink,
|
|
226
|
+
//className={!AssistantStudioLink ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : ""}
|
|
227
|
+
//disabled={Boolean(!AssistantStudioLink)}
|
|
228
|
+
onClick: (e) => {
|
|
237
229
|
handleSettingsClick();
|
|
238
230
|
} }, "Settings")) : null,
|
|
239
231
|
adminNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: icons.LicenseThirdParty }, "Admin")) : null),
|
|
@@ -5,6 +5,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var react = require('@carbon/react');
|
|
7
7
|
var icons = require('@carbon/react/icons');
|
|
8
|
+
var core = require('@dnd-kit/core');
|
|
9
|
+
var sortable = require('@dnd-kit/sortable');
|
|
10
|
+
var utilities = require('@dnd-kit/utilities');
|
|
8
11
|
var cx = require('classnames');
|
|
9
12
|
var TooltipHover = require('../TooltipHover/TooltipHover.js');
|
|
10
13
|
var accessibility = require('../../tools/accessibility.js');
|
|
@@ -20,7 +23,7 @@ IBM Confidential
|
|
|
20
23
|
694970X, 69497O0
|
|
21
24
|
© Copyright IBM Corp. 2022, 2024
|
|
22
25
|
*/
|
|
23
|
-
function CreatableComponent({ buttonClassName = `${settings.prefix}--bmrg-creatable__button`, buttonContent = "Add", buttonProps, createKeyValuePair = false, disabled, id, initialValues: externalInitialValues, invalid, invalidText, helperText, key, keyHelperText, keyLabel, keyLabelText, keyPlaceholder, label, labelText = "", max, nonDeletable = false, onKeyBlur, onValueBlur, onInputBlur, onChange, placeholder, tagProps, tagType = "teal", textInputProps, tooltipClassName = `${settings.prefix}--bmrg-creatable__tooltip`, tooltipContent, tooltipProps = { direction: "top" }, type = "text", valueHelperText, valueLabel, valueLabelText, valuePlaceholder, value: externalValues, values, trimInput = false, removeOnlyFirst = false, }) {
|
|
26
|
+
function CreatableComponent({ buttonClassName = `${settings.prefix}--bmrg-creatable__button`, buttonContent = "Add", buttonProps, createKeyValuePair = false, disabled, id, initialValues: externalInitialValues, invalid, invalidText, helperText, key, keyHelperText, keyLabel, keyLabelText, keyPlaceholder, label, labelText = "", max, nonDeletable = false, onKeyBlur, onValueBlur, onInputBlur, onChange, placeholder, reorderable, tagProps, tagType = "teal", textInputProps, tooltipClassName = `${settings.prefix}--bmrg-creatable__tooltip`, tooltipContent, tooltipProps = { direction: "top" }, type = "text", valueHelperText, valueLabel, valueLabelText, valuePlaceholder, value: externalValues, values, trimInput = false, removeOnlyFirst = false, }) {
|
|
24
27
|
const [keyValue, setKeyValue] = React.useState("");
|
|
25
28
|
const [value, setValue] = React.useState("");
|
|
26
29
|
const [input, setInput] = React.useState("");
|
|
@@ -128,6 +131,21 @@ function CreatableComponent({ buttonClassName = `${settings.prefix}--bmrg-creata
|
|
|
128
131
|
if (onChange)
|
|
129
132
|
onChange(items);
|
|
130
133
|
};
|
|
134
|
+
const sensors = core.useSensors(core.useSensor(core.PointerSensor, {
|
|
135
|
+
activationConstraint: { distance: 5 },
|
|
136
|
+
}));
|
|
137
|
+
function handleDragEnd(event) {
|
|
138
|
+
const { active, over } = event;
|
|
139
|
+
if (over && active.id !== over.id) {
|
|
140
|
+
const oldIndex = tagItems.indexOf(active.id);
|
|
141
|
+
const newIndex = tagItems.indexOf(over.id);
|
|
142
|
+
const reorderedItems = sortable.arrayMove(tagItems, oldIndex, newIndex);
|
|
143
|
+
setCreatedItems(reorderedItems);
|
|
144
|
+
if (onChange) {
|
|
145
|
+
onChange(reorderedItems);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
131
149
|
return (React__default.default.createElement("div", { key: key, className: `${settings.prefix}--bmrg-creatable` },
|
|
132
150
|
React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-creatable__input` },
|
|
133
151
|
createKeyValuePair ? (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-creatable__key-value-inputs` },
|
|
@@ -149,9 +167,20 @@ function CreatableComponent({ buttonClassName = `${settings.prefix}--bmrg-creata
|
|
|
149
167
|
React__default.default.createElement(TooltipHover.default, { ...tooltipProps, tooltipText: tooltipContent },
|
|
150
168
|
React__default.default.createElement(icons.Information, { size: 16, fill: "currentColor" }))))), onBlur: onInputBlur, onChange: onInputChange, placeholder: placeholder, ref: inputRef, type: type, value: input, ...textInputProps })),
|
|
151
169
|
React__default.default.createElement(react.Button, { className: createButtonClassName, disabled: isAddButtonDisabled, onClick: addValue, iconDescription: "Add", renderIcon: icons.Add, size: "md", type: "button", ...buttonProps }, buttonContent)),
|
|
152
|
-
|
|
170
|
+
reorderable ? (React__default.default.createElement(core.DndContext, { sensors: disabled ? [] : sensors, collisionDetection: core.closestCenter, onDragEnd: handleDragEnd },
|
|
171
|
+
React__default.default.createElement(sortable.SortableContext, { items: tagsToShow, strategy: sortable.verticalListSortingStrategy },
|
|
172
|
+
React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-creatable__tags--reorderable` }, tagsToShow.map((item, index) => (React__default.default.createElement(ReorderableTag, { key: `${item}-${index}`, disabled: disabled, initialTagItems: initialTagItems, item: item, nonDeletable: nonDeletable, removeValue: removeValue, tagProps: tagProps, tagType: tagType }))))))) : (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-creatable__tags` }, tagsToShow.map((item, index) => (React__default.default.createElement(react.Tag, { key: `${item}-${index}`, disabled: disabled, type: tagType, onClick: nonDeletable && initialTagItems.includes(item) ? undefined : () => removeValue(item), onKeyDown: nonDeletable && initialTagItems.includes(item)
|
|
153
173
|
? undefined
|
|
154
|
-
: (e) => accessibility.isAccessibleKeyDownEvent(e) && removeValue(item), filter: !nonDeletable || (nonDeletable && !initialTagItems.includes(item)), ...tagProps }, item))))));
|
|
174
|
+
: (e) => accessibility.isAccessibleKeyDownEvent(e) && removeValue(item), filter: !nonDeletable || (nonDeletable && !initialTagItems.includes(item)), ...tagProps }, item)))))));
|
|
175
|
+
}
|
|
176
|
+
function ReorderableTag({ disabled, initialTagItems, item, nonDeletable, removeValue, tagProps, tagType, }) {
|
|
177
|
+
const { attributes, listeners, setNodeRef, transform, transition } = sortable.useSortable({ id: item });
|
|
178
|
+
const style = {
|
|
179
|
+
transform: utilities.CSS.Transform.toString(transform),
|
|
180
|
+
transition,
|
|
181
|
+
};
|
|
182
|
+
return (React__default.default.createElement("div", { ref: setNodeRef, ...attributes, ...(!disabled ? listeners : {}), style: style },
|
|
183
|
+
React__default.default.createElement(react.DismissibleTag, { disabled: disabled, type: tagType, onClose: nonDeletable && initialTagItems.includes(item) ? undefined : () => removeValue(item), renderIcon: icons.Draggable, title: "", text: item, ...tagProps })));
|
|
155
184
|
}
|
|
156
185
|
|
|
157
186
|
exports.default = CreatableComponent;
|
|
@@ -117,9 +117,18 @@ function DataDrivenInput(props) {
|
|
|
117
117
|
Component = Creatable$1;
|
|
118
118
|
componentProps = {
|
|
119
119
|
...allInputProps,
|
|
120
|
-
createKeyValuePair: type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR ||
|
|
120
|
+
createKeyValuePair: type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR ||
|
|
121
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE ||
|
|
122
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE ||
|
|
123
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE,
|
|
121
124
|
nonDeletable: type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_NON_DELETABLE ||
|
|
122
|
-
type === DataDrivenInputTypes.CREATABLE_TYPES.
|
|
125
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE ||
|
|
126
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE ||
|
|
127
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE,
|
|
128
|
+
reorderable: type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE ||
|
|
129
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE ||
|
|
130
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE ||
|
|
131
|
+
type === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE,
|
|
123
132
|
invalid: invalidInput,
|
|
124
133
|
invalidText: invalidTextMessage,
|
|
125
134
|
placeholder,
|
|
@@ -134,7 +134,13 @@ async function handleGoverningSelectChange({ formikProps, input, inputs, isInput
|
|
|
134
134
|
/** Erase value of governed inputs */
|
|
135
135
|
if (inputsGovernedByCurrentOne.length) {
|
|
136
136
|
await inputsGovernedByCurrentOne.forEach(async (input) => {
|
|
137
|
-
await handleGoverningSelectChange({
|
|
137
|
+
await handleGoverningSelectChange({
|
|
138
|
+
formikProps,
|
|
139
|
+
input,
|
|
140
|
+
inputs,
|
|
141
|
+
isInputBeingChanged: false,
|
|
142
|
+
selectedItem: null,
|
|
143
|
+
});
|
|
138
144
|
});
|
|
139
145
|
}
|
|
140
146
|
// only the top governing select should display warnings if changed and reset touched status for governed ones
|
|
@@ -226,8 +232,12 @@ function generateYupAst({ inputs, allowCustomPropertySyntax, customPropertySynta
|
|
|
226
232
|
if (inputType === DataDrivenInputTypes.MULTI_SELECT_TYPES.MULTI_SELECT ||
|
|
227
233
|
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE ||
|
|
228
234
|
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_NON_DELETABLE ||
|
|
235
|
+
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE ||
|
|
236
|
+
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE ||
|
|
229
237
|
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR ||
|
|
230
238
|
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE ||
|
|
239
|
+
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE ||
|
|
240
|
+
inputType === DataDrivenInputTypes.CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE ||
|
|
231
241
|
inputType === DataDrivenInputTypes.CHECKBOX_TYPES.CHECKBOX) {
|
|
232
242
|
if (useCSVforArrays) {
|
|
233
243
|
yupValidationArray.push(["yup.string"]);
|
|
@@ -62,7 +62,7 @@ const MenuAriaLabelRecord = {
|
|
|
62
62
|
const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
|
|
63
63
|
const instanceCheckMarkContainerClass = "instance-checkmark-style-container";
|
|
64
64
|
function Header(props) {
|
|
65
|
-
const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, navLinks, platform, prefixName = "", refetchUser, refetchNavigation, rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, userTeamsAssets, } = props;
|
|
65
|
+
const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, enableTeamSwitcher = true, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, navLinks, platform, prefixName = "", refetchUser, refetchNavigation, rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, userTeamsAssets, } = props;
|
|
66
66
|
const hasUserTeams = Boolean(userTeams);
|
|
67
67
|
const userTeamsUrl = servicesConfig.serviceUrl.getUserTeamsServices({ baseServicesUrl });
|
|
68
68
|
const teamsQuery = reactQuery.useQuery({
|
|
@@ -70,6 +70,7 @@ function Header(props) {
|
|
|
70
70
|
queryFn: servicesConfig.resolver.query(userTeamsUrl, null),
|
|
71
71
|
enabled: !hasUserTeams && Boolean(baseServicesUrl),
|
|
72
72
|
});
|
|
73
|
+
const showTeamSwitcher = enableTeamSwitcher && Boolean(user);
|
|
73
74
|
return (React__default.default.createElement(React__default.default.Fragment, null,
|
|
74
75
|
React__default.default.createElement(react.Theme, { theme: carbonTheme },
|
|
75
76
|
React__default.default.createElement(react.Header, { "aria-label": "App navigation header", className: className },
|
|
@@ -80,7 +81,7 @@ function Header(props) {
|
|
|
80
81
|
? navLinks.map((link) => (React__default.default.createElement(react.HeaderMenuItem, { "aria-label": `Link for ${link.name}`, "data-testid": "header-menu-link", href: link.url, isCurrentPage: window?.location?.href && link.url ? window.location.href.startsWith(link.url) : false, key: link.name, target: link.isExternal ? "_blank" : undefined, rel: link.isExternal ? "noopener noreferrer" : undefined }, link.name)))
|
|
81
82
|
: null),
|
|
82
83
|
React__default.default.createElement(react.HeaderGlobalBar, null,
|
|
83
|
-
React__default.default.createElement(HeaderTeamSwitcher.default, { analyticsHelpers: analyticsHelpers, baseServicesUrl: baseServicesUrl, createJoinTeamTrigger: createJoinTeamTrigger, history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, menuAriaLabelRecord: MenuAriaLabelRecord.TeamSwitcher, menuButtonId: MenuButtonId.TeamSwitcher, menuListId: MenuListId.TeamSwitcher, navigationPlatform: platform, refetchUser: refetchUser, refetchNavigation: refetchNavigation, teamsQuery: teamsQuery, trackEvent: trackEvent, user: user, userTeams: userTeams }),
|
|
84
|
+
showTeamSwitcher ? (React__default.default.createElement(HeaderTeamSwitcher.default, { analyticsHelpers: analyticsHelpers, baseServicesUrl: baseServicesUrl, createJoinTeamTrigger: createJoinTeamTrigger, history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, menuAriaLabelRecord: MenuAriaLabelRecord.TeamSwitcher, menuButtonId: MenuButtonId.TeamSwitcher, menuListId: MenuListId.TeamSwitcher, navigationPlatform: platform, refetchUser: refetchUser, refetchNavigation: refetchNavigation, teamsQuery: teamsQuery, trackEvent: trackEvent, user: user, userTeams: userTeams })) : null,
|
|
84
85
|
props?.instanceSwitcherEnabled && (React__default.default.createElement(InstanceSwitcherMenu, { enabled: Boolean(props.instanceSwitcherEnabled), menuItems: platform?.instances })),
|
|
85
86
|
React__default.default.createElement(RequestsMenu, { baseEnvUrl: baseEnvUrl, enabled: Boolean(props.requestSummary), summary: props.requestSummary }),
|
|
86
87
|
React__default.default.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
|
|
@@ -11,6 +11,7 @@ var HeaderMenu = require('./HeaderMenu.js');
|
|
|
11
11
|
var servicesConfig = require('../../config/servicesConfig.js');
|
|
12
12
|
var settings = require('../../internal/settings.js');
|
|
13
13
|
var UserType = require('../../constants/UserType.js');
|
|
14
|
+
var TeamTypes = require('../../constants/TeamTypes.js');
|
|
14
15
|
|
|
15
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
17
|
|
|
@@ -52,6 +53,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
52
53
|
const showSelectTeamPurpose = navigationPlatform?.requireTeamPurpose;
|
|
53
54
|
const createTeamButtonText = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
|
|
54
55
|
const userTeamInstanceSwitcherDefault = user?.teamInstanceSwitcherDefault;
|
|
56
|
+
const hasUpdatedDefaultTeamRef = React__default.default.useRef(false);
|
|
55
57
|
const teamLink = ({ teamId }) => {
|
|
56
58
|
return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
|
|
57
59
|
};
|
|
@@ -90,7 +92,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
90
92
|
const userHasTeams = userHasPersonalTeam || userHasAccountTeams || userHasStandardTeams;
|
|
91
93
|
const handleSelectTeam = async ({ team }) => {
|
|
92
94
|
setSelectedTeam(team);
|
|
93
|
-
if (!userTeamInstanceSwitcherDefault
|
|
95
|
+
if (!userTeamInstanceSwitcherDefault &&
|
|
96
|
+
!hasUpdatedDefaultTeamRef.current) {
|
|
97
|
+
hasUpdatedDefaultTeamRef.current = true;
|
|
94
98
|
const body = {
|
|
95
99
|
teamInstanceSwitcherDefault: team.id,
|
|
96
100
|
};
|
|
@@ -98,6 +102,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
98
102
|
}
|
|
99
103
|
};
|
|
100
104
|
const handleNoTeamsToSelect = async () => {
|
|
105
|
+
if (hasUpdatedDefaultTeamRef.current)
|
|
106
|
+
return;
|
|
107
|
+
hasUpdatedDefaultTeamRef.current = true;
|
|
101
108
|
const body = {
|
|
102
109
|
teamInstanceSwitcherDefault: null,
|
|
103
110
|
};
|
|
@@ -147,6 +154,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
147
154
|
teamsQuery?.data?.personalTeam?.length === 0))) {
|
|
148
155
|
handleNoTeamsToSelect();
|
|
149
156
|
}
|
|
157
|
+
else if (userTeamInstanceSwitcherDefault === null) {
|
|
158
|
+
setSelectedTeam(null);
|
|
159
|
+
}
|
|
150
160
|
}, [
|
|
151
161
|
baseServicesUrl,
|
|
152
162
|
hasUserTeams,
|
|
@@ -223,33 +233,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
223
233
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
224
234
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
225
235
|
}
|
|
226
|
-
let
|
|
227
|
-
|
|
236
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
237
|
+
? personalTeam.map((personalTeam) => ({
|
|
238
|
+
...personalTeam,
|
|
239
|
+
type: TeamTypes.TEAM_TYPES.PERSONAL,
|
|
240
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
241
|
+
}))
|
|
242
|
+
: [];
|
|
243
|
+
let newAccountTeams = [];
|
|
244
|
+
let newStandardTeams = [];
|
|
228
245
|
if (accountTeams?.length > 0) {
|
|
229
|
-
|
|
246
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
230
247
|
let newProjectTeams = [];
|
|
231
248
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
232
|
-
newProjectTeams = team.projectTeams?.map((
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
249
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
250
|
+
return {
|
|
251
|
+
...projectTeam,
|
|
252
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
253
|
+
};
|
|
254
|
+
});
|
|
236
255
|
}
|
|
237
256
|
return {
|
|
238
257
|
...team,
|
|
239
258
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
259
|
+
type: TeamTypes.TEAM_TYPES.ACCOUNT,
|
|
240
260
|
projectTeams: sortBy__default.default(newProjectTeams, ["nameToDisplay"]),
|
|
241
261
|
};
|
|
242
262
|
});
|
|
243
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy__default.default(newAccountTeams, ["nameToDisplay"]);
|
|
244
263
|
}
|
|
245
264
|
if (standardTeams?.length > 0) {
|
|
246
|
-
|
|
265
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
247
266
|
return {
|
|
248
267
|
...team,
|
|
268
|
+
type: TeamTypes.TEAM_TYPES.STANDARD,
|
|
249
269
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
250
270
|
};
|
|
251
271
|
});
|
|
252
|
-
|
|
272
|
+
}
|
|
273
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
274
|
+
const order = { [TeamTypes.TEAM_TYPES.PERSONAL]: 1, [TeamTypes.TEAM_TYPES.ACCOUNT]: 2, [TeamTypes.TEAM_TYPES.STANDARD]: 3 };
|
|
275
|
+
allTeams = sortBy__default.default(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
276
|
+
if (selectedTeam) {
|
|
277
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
278
|
+
if (team.id === selectedTeam.id) {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
282
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
});
|
|
286
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
287
|
+
allTeams.unshift(removedTeam);
|
|
253
288
|
}
|
|
254
289
|
let selectedTeamName = selectedTeam?.displayName
|
|
255
290
|
? selectedTeam.displayName
|
|
@@ -271,79 +306,72 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
271
306
|
React__default.default.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
272
307
|
React__default.default.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
273
308
|
React__default.default.createElement(icons.AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const teamName = team.displayName ? team.displayName : team.name;
|
|
309
|
+
allTeams.map((team) => {
|
|
310
|
+
if (Boolean(team?.id)) {
|
|
277
311
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
+
if (team.type === TeamTypes.TEAM_TYPES.ACCOUNT) {
|
|
313
|
+
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
314
|
+
const projectTeams = team.projectTeams;
|
|
315
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
316
|
+
let selectedProjectTeamIndex = -1;
|
|
317
|
+
if (existProjectTeams) {
|
|
318
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
319
|
+
}
|
|
320
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
321
|
+
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
322
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
323
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
324
|
+
projectTeams.unshift(removedTeam);
|
|
325
|
+
}
|
|
326
|
+
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
327
|
+
React__default.default.createElement(react.HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
328
|
+
// eslint-disable-next-line no-script-url
|
|
329
|
+
href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-account-accordion" },
|
|
330
|
+
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
331
|
+
React__default.default.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
332
|
+
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
333
|
+
isMenuSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null),
|
|
334
|
+
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
335
|
+
React__default.default.createElement(icons.GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
336
|
+
React__default.default.createElement(icons.ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
337
|
+
React__default.default.createElement("div", { id: `${team.id}-account-submenu`, key: `${team.id}-account-submenu`, "aria-expanded": isSubmenuOpen, className: headerDropdownMenuItemAccountSubmenuClassname },
|
|
338
|
+
React__default.default.createElement(react.HeaderMenuItem, { key: `${team.id}-menu-item`, id: `${team.id}-account-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
339
|
+
handleTeamClick({ team, type: "account" });
|
|
340
|
+
}, "data-testid": "header-team-switcher-menu-account-accordion-item",
|
|
341
|
+
// eslint-disable-next-line no-script-url
|
|
342
|
+
href: "javascript:void(0)" },
|
|
343
|
+
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
344
|
+
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
345
|
+
isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)),
|
|
346
|
+
projectTeams && projectTeams.length > 0
|
|
347
|
+
? projectTeams.map((team) => {
|
|
348
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
349
|
+
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
350
|
+
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
351
|
+
handleTeamClick({ team, type: "project" });
|
|
352
|
+
}, "data-testid": "header-team-switcher-menu-account-accordion-item",
|
|
353
|
+
// eslint-disable-next-line no-script-url
|
|
354
|
+
href: "javascript:void(0)" },
|
|
355
|
+
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
356
|
+
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
357
|
+
isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
358
|
+
})
|
|
359
|
+
: null)));
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
363
|
+
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
364
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
365
|
+
}, "data-testid": "header-team-switcher-menu-item",
|
|
312
366
|
// eslint-disable-next-line no-script-url
|
|
313
367
|
href: "javascript:void(0)" },
|
|
314
|
-
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname
|
|
315
|
-
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname },
|
|
316
|
-
isTeamSelected ?
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
322
|
-
handleTeamClick({ team, type: "project" });
|
|
323
|
-
}, "data-testid": "header-team-switcher-menu-account-accordion-item",
|
|
324
|
-
// eslint-disable-next-line no-script-url
|
|
325
|
-
href: "javascript:void(0)" },
|
|
326
|
-
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
327
|
-
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
328
|
-
isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
329
|
-
})
|
|
330
|
-
: null)));
|
|
331
|
-
})
|
|
332
|
-
: null,
|
|
333
|
-
standardTeams.length > 0
|
|
334
|
-
? sortedStandardTeamsWithNamesToDisplay.map((team) => {
|
|
335
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
336
|
-
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-standard-menu-item` },
|
|
337
|
-
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
338
|
-
handleTeamClick({ team, type: "standard" });
|
|
339
|
-
}, "data-testid": "header-team-switcher-menu-item",
|
|
340
|
-
// eslint-disable-next-line no-script-url
|
|
341
|
-
href: "javascript:void(0)" },
|
|
342
|
-
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
343
|
-
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
344
|
-
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
345
|
-
})
|
|
346
|
-
: null))));
|
|
368
|
+
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
369
|
+
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
370
|
+
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return null;
|
|
374
|
+
})))));
|
|
347
375
|
}
|
|
348
376
|
return null;
|
|
349
377
|
}
|
|
@@ -34,12 +34,13 @@ function determineIfConfigIsDifferent(teams, initialTeams) {
|
|
|
34
34
|
}
|
|
35
35
|
return isConfigDifferent;
|
|
36
36
|
}
|
|
37
|
-
function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal }) {
|
|
37
|
+
function ProfileSettings({ baseServicesUrl, refetchUser, refetchUserTeams, refetchNavigation, src, userName, isOpen, closeModal, }) {
|
|
38
38
|
const queryClient = reactQuery.useQueryClient();
|
|
39
39
|
const [initialTeams, setInitialTeams] = React.useState([]);
|
|
40
40
|
const [teams, setTeams] = React.useState([]);
|
|
41
41
|
const userUrl = servicesConfig.serviceUrl.getLaunchpadUser({ baseServicesUrl });
|
|
42
42
|
const profileUrl = servicesConfig.serviceUrl.resourceUserProfile({ baseServicesUrl });
|
|
43
|
+
const userTeamsUrl = servicesConfig.serviceUrl.getUserTeamsServices({ baseServicesUrl });
|
|
43
44
|
const { data: user, isLoading: userIsLoading, error: userError, } = reactQuery.useQuery({
|
|
44
45
|
queryKey: userUrl,
|
|
45
46
|
queryFn: servicesConfig.resolver.query(userUrl),
|
|
@@ -48,6 +49,22 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
48
49
|
onSuccess: () => {
|
|
49
50
|
queryClient.invalidateQueries(userUrl);
|
|
50
51
|
queryClient.invalidateQueries(profileUrl);
|
|
52
|
+
queryClient.invalidateQueries(userTeamsUrl);
|
|
53
|
+
if (refetchUser) {
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
refetchUser();
|
|
56
|
+
}, 1000);
|
|
57
|
+
}
|
|
58
|
+
if (refetchUserTeams) {
|
|
59
|
+
setTimeout(() => {
|
|
60
|
+
refetchUserTeams();
|
|
61
|
+
}, 1000);
|
|
62
|
+
}
|
|
63
|
+
if (refetchNavigation) {
|
|
64
|
+
setTimeout(() => {
|
|
65
|
+
refetchNavigation();
|
|
66
|
+
}, 1000);
|
|
67
|
+
}
|
|
51
68
|
},
|
|
52
69
|
});
|
|
53
70
|
// Only disable when we have a user and we know that there aren' any lower level groups to manage
|
|
@@ -63,6 +80,7 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
63
80
|
}
|
|
64
81
|
async function handleSubmit() {
|
|
65
82
|
const body = {
|
|
83
|
+
teamInstanceSwitcherDefault: null,
|
|
66
84
|
lowerLevelGroups: teams,
|
|
67
85
|
};
|
|
68
86
|
try {
|
|
@@ -104,9 +122,9 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
104
122
|
return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Profile Settings", className: `${settings.prefix}--bmrg-profile-settings-container ${settings.prefix}--bmrg-header-modal`, open: isOpen, onClose: handleClose, preventCloseOnClickOutside: true },
|
|
105
123
|
React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
|
|
106
124
|
React__default.default.createElement(react.ModalBody, { style: { maxHeight: "31.5rem" } },
|
|
107
|
-
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your
|
|
108
|
-
React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad
|
|
109
|
-
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad
|
|
125
|
+
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your team switcher in Launchpad."),
|
|
126
|
+
React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad team switcher"),
|
|
127
|
+
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad team switcher and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the team switcher, and cannot add items to them from Catalog."),
|
|
110
128
|
userIsLoading ? (React__default.default.createElement(react.StructuredListSkeleton, null)) : userError ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8", padding: "1rem" } })) : teams?.length > 0 ? (React__default.default.createElement(react.StructuredListWrapper, { className: `${settings.prefix}--bmrg-profile-settings-list` },
|
|
111
129
|
React__default.default.createElement(react.StructuredListHead, null,
|
|
112
130
|
React__default.default.createElement(react.StructuredListRow, { head: true },
|