@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.
@@ -26,11 +26,11 @@ IBM Confidential
26
26
  694970X, 69497O0
27
27
  © Copyright IBM Corp. 2022, 2024
28
28
  */
29
- function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, userTeamsAssets, enableIcaMacs, }) {
29
+ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, enableTeamSwitcher = true, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchUserTeams, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, userTeamsAssets, enableIcaMacs, }) {
30
30
  // Support base header .e.g for an error state
31
31
  if (!config) {
32
32
  return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
33
- React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "", user: user })));
33
+ React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, enableTeamSwitcher: enableTeamSwitcher, productName: productName || platformName || "", user: user })));
34
34
  }
35
35
  const { features, navigation, platform, platformMessage } = config;
36
36
  const names = getProductAndPlatformNames({ productName, platformName, platform });
@@ -71,8 +71,8 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
71
71
  */
72
72
  const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
73
73
  return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
74
- React__default.default.createElement(Header.default, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
75
- isUserEnabled && (React__default.default.createElement(ProfileSettings.ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
74
+ React__default.default.createElement(Header.default, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, enableTeamSwitcher: enableTeamSwitcher, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
75
+ isUserEnabled && (React__default.default.createElement(ProfileSettings.ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name, refetchUser: refetchUser, refetchUserTeams: refetchUserTeams, refetchNavigation: refetchNavigation })),
76
76
  isSendMailEnabled && (React__default.default.createElement(HeaderMenuItem.default, { key: "email-preferences", href: `${platform.baseEnvUrl}/launchpad/email-preferences`, icon: React__default.default.createElement(icons.Email, null), kind: "internal", text: "Email Preferences", type: "link" })),
77
77
  !isPrivacyStatementDisabled && (React__default.default.createElement(PrivacyStatement.PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
78
78
  ...profileMenuItems,
@@ -82,7 +82,15 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
82
82
  isSupportEnabled &&
83
83
  (supportFlagCheck || isPartnerUser ? (React__default.default.createElement(SupportCenter.SupportCenterMenuItem, { key: "support-center", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, supportLink: supportLink, partnerEmailId: partnerEmailId, enablePartner: isPartnerUser, baseServicesUrl: platform.baseServicesUrl })) : (React__default.default.createElement(HeaderMenuItem.default, { key: "support-center", href: platform?.supportUrl, icon: React__default.default.createElement(icons.HelpDesk, null), kind: "external", text: "Support Center", type: "link" }))),
84
84
  React__default.default.createElement(HeaderMenuItem.default, { key: "release-notes", href: platform?.releaseNotesUrl, icon: React__default.default.createElement(icons.CatalogPublish, null), "data-testid": "release-notes", kind: "app", text: "Release Notes", type: "link" }),
85
- React__default.default.createElement(HeaderMenuItem.default, { key: "legal-terms", href: platform?.legalTermsUrl, icon: React__default.default.createElement(icons.Policy, null), "data-testid": "legal-terms", kind: "app", text: "Legal Terms", type: "link" }),
85
+ // <HeaderMenuItem
86
+ // key="legal-terms"
87
+ // href={platform?.legalTermsUrl as string}
88
+ // icon={<Policy />}
89
+ // data-testid="legal-terms"
90
+ // kind="app"
91
+ // text="Legal Terms"
92
+ // type="link"
93
+ // />,
86
94
  React__default.default.createElement("span", { style: { borderBottom: "1px solid #b8c1c1" } }),
87
95
  isCommunityEnabled && (React__default.default.createElement(HeaderMenuItem.default, { key: "community", href: platform?.communityUrl, icon: React__default.default.createElement(icons.Forum, null), kind: "external", text: "Community", type: "link" })),
88
96
  isFeedbackEnabled && (React__default.default.createElement(Feedback.FeedbackMenuItem, { key: "feedback", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, sendIdeasUrl: sendIdeasUrl, sendBluePointsAwardUrl: sendBluePointsAwardUrl })),
@@ -11,8 +11,12 @@ const CHECKBOX_TYPES = {
11
11
  const CREATABLE_TYPES = {
12
12
  CREATABLE_SINGLE: "creatable-single",
13
13
  CREATABLE_SINGLE_NON_DELETABLE: "creatable-single-non-deletable",
14
+ CREATABLE_SINGLE_REORDERABLE: "creatable-single-reorderable",
15
+ CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE: "creatable-single-reorderable-non-deletable",
14
16
  CREATABLE_PAIR: "creatable-pair",
15
17
  CREATABLE_PAIR_NON_DELETABLE: "creatable-pair-non-deletable",
18
+ CREATABLE_PAIR_REORDERABLE: "creatable-pair-reorderable",
19
+ CREATABLE_PAIR_REORDERABLE_NON_DELETABLE: "creatable-pair-reorderable-non-deletable",
16
20
  };
17
21
  const DATE_TYPES = {
18
22
  DATE: "date",
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ /*
4
+ IBM Confidential
5
+ 694970X, 69497O0
6
+ © Copyright IBM Corp. 2022, 2024
7
+ */
8
+ const TEAM_TYPES = {
9
+ ACCOUNT: "account",
10
+ PERSONAL: "personal",
11
+ PROJECT: "project",
12
+ STANDARD: "standard",
13
+ };
14
+
15
+ exports.TEAM_TYPES = TEAM_TYPES;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import cx from 'classnames';
3
+ import 'history';
3
4
  import { SideNavLink, SideNav, SideNavItems, SideNavDivider, Tag } from '@carbon/react';
4
5
  import TooltipHover from '../TooltipHover/TooltipHover.js';
5
6
  import { ChatBot, Home, UserMultiple, AddAlt, Api, IntentRequestCreate, Folders, DocumentMultiple_02, Catalog, Settings, LicenseThirdParty } from '@carbon/react/icons';
@@ -24,7 +25,7 @@ const SideNavUrlKeys = {
24
25
  Admin: "admin",
25
26
  };
26
27
  function AdvantageSideNav(props) {
27
- 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;
28
+ 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;
28
29
  const [activeMenu, setActiveMenu] = React.useState(false);
29
30
  const isMenuOpen = isOpen || activeMenu;
30
31
  const windowLocation = window.location;
@@ -40,6 +41,11 @@ function AdvantageSideNav(props) {
40
41
  const catalogNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Catalog)?.url;
41
42
  const settingsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
42
43
  const adminNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Admin)?.url;
44
+ const AssistantStudioLink = false;
45
+ const currentUrl = new URL(window.location.href);
46
+ const workspace = currentUrl.searchParams.get("workspace");
47
+ const isDocumentCollectionsActive = currentUrl.pathname.includes("/chat") && workspace === "knowledge";
48
+ const isChatActive = currentUrl.pathname.includes("/chat") && !isDocumentCollectionsActive;
43
49
  // get current selected team
44
50
  let teamSwitcherTeam = null;
45
51
  if (Array.isArray(personalTeams) && personalTeams.length > 0) {
@@ -87,22 +93,6 @@ function AdvantageSideNav(props) {
87
93
  destinationPath: toolsLink,
88
94
  });
89
95
  };
90
- const handleAgentAssistantStudioClick = () => {
91
- triggerEvent &&
92
- triggerEvent({
93
- action: "Clicked on SideNav Agent & Assistant Studio link",
94
- category: "Sidenav",
95
- destinationPath: agentAssistantStudioLink,
96
- });
97
- };
98
- const handleAgentAssistantLibraryClick = () => {
99
- triggerEvent &&
100
- triggerEvent({
101
- action: "Clicked on SideNav Agent & Assistant Library link",
102
- category: "Sidenav",
103
- destinationPath: agentAssistantLibraryLink,
104
- });
105
- };
106
96
  const handleDocumentCollectionsClick = () => {
107
97
  triggerEvent &&
108
98
  triggerEvent({
@@ -159,7 +149,7 @@ function AdvantageSideNav(props) {
159
149
  }
160
150
  setActiveMenu(false);
161
151
  };
162
- const chatSideNavLink = (React.createElement(SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), renderIcon: ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
152
+ const chatSideNavLink = (React.createElement(SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", isActive: isChatActive, disabled: Boolean(!enableChatButton), renderIcon: ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
163
153
  const showSecondDivider = showChatButton || toolsLink || agentAssistantStudioLink || agentAssistantLibraryLink || documentCollectionsLink;
164
154
  return (React.createElement(SideNav, { "aria-label": "sidenav-container", className: cx(`${prefix}--bmrg-advantage-sidenav-container`, className, {
165
155
  "--closed": !isMenuOpen,
@@ -172,6 +162,11 @@ function AdvantageSideNav(props) {
172
162
  handleLaunchpadLink(e);
173
163
  history.push("/");
174
164
  }
165
+ if (isbetaLaunchpad) {
166
+ console.log("beta launchpad home link clicked");
167
+ handleLaunchpadLink(e);
168
+ history.push("/launchpad");
169
+ }
175
170
  handleHomeClick();
176
171
  } }, "Home")) : null,
177
172
  teamSwitcherTeam ? (React.createElement(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: `${prefix}--bmrg-advantage-sidenav-team`, renderIcon: UserMultiple, href: `${baseEnvUrl}/${app}/teams/${teamSwitcherTeam.id}`, onClick: (e) => {
@@ -196,7 +191,7 @@ function AdvantageSideNav(props) {
196
191
  } }, joinButtontitle)) : null,
197
192
  React.createElement(SideNavDivider, null),
198
193
  showChatButton &&
199
- (showChatTooltip ? (React.createElement(TooltipHover, { className: `${prefix}--bmrg-side-nav__tooltip`, content: tooltipMessage, direction: "right" },
194
+ (showChatTooltip ? (React.createElement(TooltipHover, { className: `${prefix}--bmrg-side-nav__tooltip`, isActive: isChatActive, content: tooltipMessage, direction: "right" },
200
195
  React.createElement("span", null, chatSideNavLink))) : (chatSideNavLink)),
201
196
  toolsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-tools-link", renderIcon: Api, href: toolsLink, onClick: (e) => {
202
197
  handleToolsClick();
@@ -204,27 +199,24 @@ function AdvantageSideNav(props) {
204
199
  React.createElement("div", { className: `${prefix}--bmrg-advantage-sidenav-item-tag` },
205
200
  "Tools",
206
201
  React.createElement(Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
207
- agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link", isActive: (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
208
- (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`)), renderIcon: IntentRequestCreate, href: agentAssistantStudioLink, onClick: (e) => {
209
- if (isLaunchpad) {
210
- handleLaunchpadLink(e);
211
- history.push(agentStudioPath);
212
- }
213
- handleAgentAssistantStudioClick();
214
- } }, "Agent & Assistant Studio")) : null,
215
- agentAssistantLibraryLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: Folders, href: agentAssistantLibraryLink, onClick: (e) => {
216
- handleAgentAssistantLibraryClick();
217
- } }, "Agent & Assistant Library")) : null,
218
- documentCollectionsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: DocumentMultiple_02, href: documentCollectionsLink, onClick: (e) => {
202
+ agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
203
+ // isActive={
204
+ // (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
205
+ // (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`))
206
+ // }
207
+ className: `${prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink), renderIcon: IntentRequestCreate }, "Agent & Assistant Studio")) : null,
208
+ agentAssistantLibraryLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: Folders,
209
+ //href={agentAssistantLibraryLink}
210
+ className: `${prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Agent & Assistant Library")) : null,
211
+ documentCollectionsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-document-collections-link", isActive: isDocumentCollectionsActive, renderIcon: DocumentMultiple_02, href: documentCollectionsLink, onClick: (e) => {
219
212
  handleDocumentCollectionsClick();
220
213
  } }, "Document Collections")) : null,
221
214
  showSecondDivider ? React.createElement(SideNavDivider, null) : null,
222
- catalogNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: location.pathname.includes("/catalog"), renderIcon: Catalog, href: catalogNavlink, onClick: (e) => {
223
- console.log("ss", catalogNavlink);
224
- e.preventDefault();
225
- history.push(catalogNavlink);
226
- } }, "Catalog")) : null,
227
- settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
215
+ catalogNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: Catalog }, "Catalog")) : null,
216
+ settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink,
217
+ //className={!AssistantStudioLink ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : ""}
218
+ //disabled={Boolean(!AssistantStudioLink)}
219
+ onClick: (e) => {
228
220
  handleSettingsClick();
229
221
  } }, "Settings")) : null,
230
222
  adminNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: LicenseThirdParty }, "Admin")) : null),
@@ -1,6 +1,9 @@
1
1
  import React, { useState } from 'react';
2
- import { TextInput, Button, Tag } from '@carbon/react';
3
- import { Information, Add } from '@carbon/react/icons';
2
+ import { TextInput, Button, Tag, DismissibleTag } from '@carbon/react';
3
+ import { Information, Add, Draggable } from '@carbon/react/icons';
4
+ import { useSensors, useSensor, PointerSensor, DndContext, closestCenter } from '@dnd-kit/core';
5
+ import { SortableContext, verticalListSortingStrategy, useSortable, arrayMove } from '@dnd-kit/sortable';
6
+ import { CSS } from '@dnd-kit/utilities';
4
7
  import cx from 'classnames';
5
8
  import TooltipHover from '../TooltipHover/TooltipHover.js';
6
9
  import { isAccessibleKeyDownEvent } from '../../tools/accessibility.js';
@@ -11,7 +14,7 @@ IBM Confidential
11
14
  694970X, 69497O0
12
15
  © Copyright IBM Corp. 2022, 2024
13
16
  */
14
- function CreatableComponent({ buttonClassName = `${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 = `${prefix}--bmrg-creatable__tooltip`, tooltipContent, tooltipProps = { direction: "top" }, type = "text", valueHelperText, valueLabel, valueLabelText, valuePlaceholder, value: externalValues, values, trimInput = false, removeOnlyFirst = false, }) {
17
+ function CreatableComponent({ buttonClassName = `${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 = `${prefix}--bmrg-creatable__tooltip`, tooltipContent, tooltipProps = { direction: "top" }, type = "text", valueHelperText, valueLabel, valueLabelText, valuePlaceholder, value: externalValues, values, trimInput = false, removeOnlyFirst = false, }) {
15
18
  const [keyValue, setKeyValue] = useState("");
16
19
  const [value, setValue] = useState("");
17
20
  const [input, setInput] = useState("");
@@ -119,6 +122,21 @@ function CreatableComponent({ buttonClassName = `${prefix}--bmrg-creatable__butt
119
122
  if (onChange)
120
123
  onChange(items);
121
124
  };
125
+ const sensors = useSensors(useSensor(PointerSensor, {
126
+ activationConstraint: { distance: 5 },
127
+ }));
128
+ function handleDragEnd(event) {
129
+ const { active, over } = event;
130
+ if (over && active.id !== over.id) {
131
+ const oldIndex = tagItems.indexOf(active.id);
132
+ const newIndex = tagItems.indexOf(over.id);
133
+ const reorderedItems = arrayMove(tagItems, oldIndex, newIndex);
134
+ setCreatedItems(reorderedItems);
135
+ if (onChange) {
136
+ onChange(reorderedItems);
137
+ }
138
+ }
139
+ }
122
140
  return (React.createElement("div", { key: key, className: `${prefix}--bmrg-creatable` },
123
141
  React.createElement("div", { className: `${prefix}--bmrg-creatable__input` },
124
142
  createKeyValuePair ? (React.createElement("div", { className: `${prefix}--bmrg-creatable__key-value-inputs` },
@@ -140,9 +158,20 @@ function CreatableComponent({ buttonClassName = `${prefix}--bmrg-creatable__butt
140
158
  React.createElement(TooltipHover, { ...tooltipProps, tooltipText: tooltipContent },
141
159
  React.createElement(Information, { size: 16, fill: "currentColor" }))))), onBlur: onInputBlur, onChange: onInputChange, placeholder: placeholder, ref: inputRef, type: type, value: input, ...textInputProps })),
142
160
  React.createElement(Button, { className: createButtonClassName, disabled: isAddButtonDisabled, onClick: addValue, iconDescription: "Add", renderIcon: Add, size: "md", type: "button", ...buttonProps }, buttonContent)),
143
- React.createElement("div", { className: `${prefix}--bmrg-creatable__tags` }, tagsToShow.map((item, index) => (React.createElement(Tag, { key: `${item}-${index}`, disabled: disabled, type: tagType, onClick: nonDeletable && initialTagItems.includes(item) ? undefined : () => removeValue(item), onKeyDown: nonDeletable && initialTagItems.includes(item)
161
+ reorderable ? (React.createElement(DndContext, { sensors: disabled ? [] : sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd },
162
+ React.createElement(SortableContext, { items: tagsToShow, strategy: verticalListSortingStrategy },
163
+ React.createElement("div", { className: `${prefix}--bmrg-creatable__tags--reorderable` }, tagsToShow.map((item, index) => (React.createElement(ReorderableTag, { key: `${item}-${index}`, disabled: disabled, initialTagItems: initialTagItems, item: item, nonDeletable: nonDeletable, removeValue: removeValue, tagProps: tagProps, tagType: tagType }))))))) : (React.createElement("div", { className: `${prefix}--bmrg-creatable__tags` }, tagsToShow.map((item, index) => (React.createElement(Tag, { key: `${item}-${index}`, disabled: disabled, type: tagType, onClick: nonDeletable && initialTagItems.includes(item) ? undefined : () => removeValue(item), onKeyDown: nonDeletable && initialTagItems.includes(item)
144
164
  ? undefined
145
- : (e) => isAccessibleKeyDownEvent(e) && removeValue(item), filter: !nonDeletable || (nonDeletable && !initialTagItems.includes(item)), ...tagProps }, item))))));
165
+ : (e) => isAccessibleKeyDownEvent(e) && removeValue(item), filter: !nonDeletable || (nonDeletable && !initialTagItems.includes(item)), ...tagProps }, item)))))));
166
+ }
167
+ function ReorderableTag({ disabled, initialTagItems, item, nonDeletable, removeValue, tagProps, tagType, }) {
168
+ const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: item });
169
+ const style = {
170
+ transform: CSS.Transform.toString(transform),
171
+ transition,
172
+ };
173
+ return (React.createElement("div", { ref: setNodeRef, ...attributes, ...(!disabled ? listeners : {}), style: style },
174
+ React.createElement(DismissibleTag, { disabled: disabled, type: tagType, onClose: nonDeletable && initialTagItems.includes(item) ? undefined : () => removeValue(item), renderIcon: Draggable, title: "", text: item, ...tagProps })));
146
175
  }
147
176
 
148
177
  export { CreatableComponent as default };
@@ -109,9 +109,18 @@ function DataDrivenInput(props) {
109
109
  Component = Creatable;
110
110
  componentProps = {
111
111
  ...allInputProps,
112
- createKeyValuePair: type === CREATABLE_TYPES.CREATABLE_PAIR || type === CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE,
112
+ createKeyValuePair: type === CREATABLE_TYPES.CREATABLE_PAIR ||
113
+ type === CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE ||
114
+ type === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE ||
115
+ type === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE,
113
116
  nonDeletable: type === CREATABLE_TYPES.CREATABLE_SINGLE_NON_DELETABLE ||
114
- type === CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE,
117
+ type === CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE ||
118
+ type === CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE ||
119
+ type === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE,
120
+ reorderable: type === CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE ||
121
+ type === CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE ||
122
+ type === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE ||
123
+ type === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE,
115
124
  invalid: invalidInput,
116
125
  invalidText: invalidTextMessage,
117
126
  placeholder,
@@ -106,7 +106,13 @@ async function handleGoverningSelectChange({ formikProps, input, inputs, isInput
106
106
  /** Erase value of governed inputs */
107
107
  if (inputsGovernedByCurrentOne.length) {
108
108
  await inputsGovernedByCurrentOne.forEach(async (input) => {
109
- await handleGoverningSelectChange({ formikProps, input, inputs, isInputBeingChanged: false, selectedItem: null });
109
+ await handleGoverningSelectChange({
110
+ formikProps,
111
+ input,
112
+ inputs,
113
+ isInputBeingChanged: false,
114
+ selectedItem: null,
115
+ });
110
116
  });
111
117
  }
112
118
  // only the top governing select should display warnings if changed and reset touched status for governed ones
@@ -198,8 +204,12 @@ function generateYupAst({ inputs, allowCustomPropertySyntax, customPropertySynta
198
204
  if (inputType === MULTI_SELECT_TYPES.MULTI_SELECT ||
199
205
  inputType === CREATABLE_TYPES.CREATABLE_SINGLE ||
200
206
  inputType === CREATABLE_TYPES.CREATABLE_SINGLE_NON_DELETABLE ||
207
+ inputType === CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE ||
208
+ inputType === CREATABLE_TYPES.CREATABLE_SINGLE_REORDERABLE_NON_DELETABLE ||
201
209
  inputType === CREATABLE_TYPES.CREATABLE_PAIR ||
202
210
  inputType === CREATABLE_TYPES.CREATABLE_PAIR_NON_DELETABLE ||
211
+ inputType === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE ||
212
+ inputType === CREATABLE_TYPES.CREATABLE_PAIR_REORDERABLE_NON_DELETABLE ||
203
213
  inputType === CHECKBOX_TYPES.CHECKBOX) {
204
214
  if (useCSVforArrays) {
205
215
  yupValidationArray.push(["yup.string"]);
@@ -54,7 +54,7 @@ const MenuAriaLabelRecord = {
54
54
  const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
55
55
  const instanceCheckMarkContainerClass = "instance-checkmark-style-container";
56
56
  function Header(props) {
57
- 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;
57
+ 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;
58
58
  const hasUserTeams = Boolean(userTeams);
59
59
  const userTeamsUrl = serviceUrl.getUserTeamsServices({ baseServicesUrl });
60
60
  const teamsQuery = useQuery({
@@ -62,6 +62,7 @@ function Header(props) {
62
62
  queryFn: resolver.query(userTeamsUrl, null),
63
63
  enabled: !hasUserTeams && Boolean(baseServicesUrl),
64
64
  });
65
+ const showTeamSwitcher = enableTeamSwitcher && Boolean(user);
65
66
  return (React.createElement(React.Fragment, null,
66
67
  React.createElement(Theme, { theme: carbonTheme },
67
68
  React.createElement(Header$1, { "aria-label": "App navigation header", className: className },
@@ -72,7 +73,7 @@ function Header(props) {
72
73
  ? navLinks.map((link) => (React.createElement(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)))
73
74
  : null),
74
75
  React.createElement(HeaderGlobalBar, null,
75
- React.createElement(HeaderTeamSwitcher, { 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 }),
76
+ showTeamSwitcher ? (React.createElement(HeaderTeamSwitcher, { 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,
76
77
  props?.instanceSwitcherEnabled && (React.createElement(InstanceSwitcherMenu, { enabled: Boolean(props.instanceSwitcherEnabled), menuItems: platform?.instances })),
77
78
  React.createElement(RequestsMenu, { baseEnvUrl: baseEnvUrl, enabled: Boolean(props.requestSummary), summary: props.requestSummary }),
78
79
  React.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),