@patternfly/quickstarts 5.0.0-prerelease.0 → 5.0.0-prerelease.2
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/ConsoleInternal/components/markdown-view.d.ts +19 -19
- package/dist/ConsoleInternal/components/utils/camel-case-wrap.d.ts +6 -6
- package/dist/ConsoleInternal/components/utils/index.d.ts +3 -3
- package/dist/ConsoleInternal/components/utils/router.d.ts +9 -9
- package/dist/ConsoleInternal/components/utils/status-box.d.ts +20 -20
- package/dist/ConsoleInternal/module/k8s/types.d.ts +42 -42
- package/dist/ConsoleShared/index.d.ts +1 -1
- package/dist/ConsoleShared/src/components/index.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/MarkdownCopyClipboard.d.ts +13 -13
- package/dist/ConsoleShared/src/components/markdown-extensions/accordion-extension.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/accordion-render-extension.d.ts +6 -6
- package/dist/ConsoleShared/src/components/markdown-extensions/admonition-extension.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/code-extension.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/const.d.ts +5 -5
- package/dist/ConsoleShared/src/components/markdown-extensions/index.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/inline-clipboard-extension.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/multiline-clipboard-extension.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-extensions/utils.d.ts +1 -1
- package/dist/ConsoleShared/src/components/markdown-highlight-extension/MarkdownHighlightExtension.d.ts +7 -7
- package/dist/ConsoleShared/src/components/markdown-highlight-extension/highlight-consts.d.ts +4 -4
- package/dist/ConsoleShared/src/components/markdown-highlight-extension/index.d.ts +1 -1
- package/dist/ConsoleShared/src/components/modal/Modal.d.ts +9 -9
- package/dist/ConsoleShared/src/components/modal/index.d.ts +1 -1
- package/dist/ConsoleShared/src/components/popper/Portal.d.ts +8 -8
- package/dist/ConsoleShared/src/components/popper/SimplePopper.d.ts +6 -6
- package/dist/ConsoleShared/src/components/popper/index.d.ts +2 -2
- package/dist/ConsoleShared/src/components/spotlight/InteractiveSpotlight.d.ts +7 -7
- package/dist/ConsoleShared/src/components/spotlight/Spotlight.d.ts +7 -7
- package/dist/ConsoleShared/src/components/spotlight/StaticSpotlight.d.ts +7 -7
- package/dist/ConsoleShared/src/components/spotlight/index.d.ts +1 -1
- package/dist/ConsoleShared/src/components/status/GenericStatus.d.ts +12 -12
- package/dist/ConsoleShared/src/components/status/NotStartedIcon.d.ts +3 -3
- package/dist/ConsoleShared/src/components/status/PopoverStatus.d.ts +13 -13
- package/dist/ConsoleShared/src/components/status/Status.d.ts +11 -11
- package/dist/ConsoleShared/src/components/status/StatusIconAndText.d.ts +8 -8
- package/dist/ConsoleShared/src/components/status/icons.d.ts +9 -9
- package/dist/ConsoleShared/src/components/status/index.d.ts +1 -1
- package/dist/ConsoleShared/src/components/status/statuses.d.ts +5 -5
- package/dist/ConsoleShared/src/components/status/types.d.ts +9 -9
- package/dist/ConsoleShared/src/components/utils/FallbackImg.d.ts +9 -9
- package/dist/ConsoleShared/src/components/utils/index.d.ts +1 -1
- package/dist/ConsoleShared/src/constants/index.d.ts +1 -1
- package/dist/ConsoleShared/src/constants/ui.d.ts +1 -1
- package/dist/ConsoleShared/src/hooks/index.d.ts +6 -6
- package/dist/ConsoleShared/src/hooks/scroll.d.ts +8 -8
- package/dist/ConsoleShared/src/hooks/useBoundingClientRect.d.ts +3 -3
- package/dist/ConsoleShared/src/hooks/useEventListener.d.ts +1 -1
- package/dist/ConsoleShared/src/hooks/useForceRender.d.ts +4 -4
- package/dist/ConsoleShared/src/hooks/useResizeObserver.d.ts +1 -1
- package/dist/ConsoleShared/src/hooks/useScrollShadows.d.ts +7 -7
- package/dist/ConsoleShared/src/index.d.ts +4 -4
- package/dist/ConsoleShared/src/utils/index.d.ts +1 -1
- package/dist/ConsoleShared/src/utils/useCombineRefs.d.ts +2 -2
- package/dist/HelpTopicDrawer.d.ts +33 -33
- package/dist/HelpTopicPanelContent.d.ts +11 -11
- package/dist/QuickStartCatalogPage.d.ts +14 -14
- package/dist/QuickStartCloseModal.d.ts +8 -8
- package/dist/QuickStartController.d.ts +10 -10
- package/dist/QuickStartDrawer.d.ts +62 -62
- package/dist/QuickStartMarkdownView.d.ts +9 -9
- package/dist/QuickStartPanelContent.d.ts +15 -15
- package/dist/catalog/Catalog/QuickStartCatalogHeader.d.ts +6 -6
- package/dist/catalog/Catalog/QuickStartCatalogSection.d.ts +5 -5
- package/dist/catalog/Catalog/QuickStartCatalogToolbar.d.ts +5 -5
- package/dist/catalog/Catalog/index.d.ts +3 -3
- package/dist/catalog/QuickStartCatalog.d.ts +8 -8
- package/dist/catalog/QuickStartTile.d.ts +11 -11
- package/dist/catalog/QuickStartTileDescription.d.ts +8 -8
- package/dist/catalog/QuickStartTileFooter.d.ts +8 -8
- package/dist/catalog/QuickStartTileFooterExternal.d.ts +8 -8
- package/dist/catalog/QuickStartTileHeader.d.ts +12 -12
- package/dist/catalog/Toolbar/QuickStartCatalogFilter.d.ts +10 -10
- package/dist/catalog/Toolbar/QuickStartCatalogFilterItems.d.ts +31 -31
- package/dist/catalog/index.d.ts +9 -9
- package/dist/controller/QuickStartConclusion.d.ts +12 -12
- package/dist/controller/QuickStartContent.d.ts +14 -14
- package/dist/controller/QuickStartFooter.d.ts +14 -14
- package/dist/controller/QuickStartIntroduction.d.ts +12 -12
- package/dist/controller/QuickStartTaskHeader.d.ts +15 -15
- package/dist/controller/QuickStartTaskHeaderList.d.ts +10 -10
- package/dist/controller/QuickStartTaskReview.d.ts +10 -10
- package/dist/controller/QuickStartTasks.d.ts +12 -12
- package/dist/data/mocks/json/explore-pipeline-quickstart.d.ts +2 -2
- package/dist/data/mocks/json/explore-serverless-quickstart.d.ts +2 -2
- package/dist/data/mocks/json/monitor-sampleapp-quickstart.d.ts +2 -2
- package/dist/data/mocks/json/tour-icons.d.ts +2 -2
- package/dist/data/quick-start-test-data.d.ts +2 -2
- package/dist/data/test-utils.d.ts +8 -8
- package/dist/index.d.ts +16 -16
- package/dist/index.es.js +2286 -2286
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +2286 -2286
- package/dist/index.js.map +1 -1
- package/dist/patternfly-nested.css +56 -38
- package/dist/quickstarts-base.css +17 -17
- package/dist/quickstarts-full.es.js +2307 -2290
- package/dist/quickstarts-full.es.js.map +1 -1
- package/dist/quickstarts-standalone.css +2 -2
- package/dist/quickstarts-standalone.min.css +2 -2
- package/dist/quickstarts.css +17 -17
- package/dist/quickstarts.min.css +1 -1
- package/dist/styles/patternfly-global-entry.d.ts +1 -1
- package/dist/styles/patternfly-nested-entry.d.ts +1 -1
- package/dist/styles/quickstarts-standalone-entry.d.ts +1 -1
- package/dist/styles/vendor-entry.d.ts +1 -1
- package/dist/utils/PluralResolver.d.ts +16 -16
- package/dist/utils/asciidoc-procedure-parser.d.ts +12 -12
- package/dist/utils/const.d.ts +6 -6
- package/dist/utils/help-topic-context.d.ts +23 -23
- package/dist/utils/help-topic-types.d.ts +13 -13
- package/dist/utils/quick-start-context.d.ts +81 -81
- package/dist/utils/quick-start-types.d.ts +60 -60
- package/dist/utils/quick-start-utils.d.ts +10 -10
- package/dist/utils/useLocalStorage.d.ts +1 -1
- package/package.json +10 -10
- package/src/styles/_dark-custom-override.scss +1 -1
|
@@ -5316,7 +5316,7 @@ const statusIcons = {
|
|
|
5316
5316
|
const FormControlIcon = (_a) => {
|
|
5317
5317
|
var { status, customIcon, className } = _a, props = __rest$1(_a, ["status", "customIcon", "className"]);
|
|
5318
5318
|
const StatusIcon = status && statusIcons[status];
|
|
5319
|
-
return (React.createElement("
|
|
5319
|
+
return (React.createElement("span", Object.assign({ className: css(formStyles$1.formControlIcon, status && formStyles$1.modifiers.status, className) }, props), customIcon || React.createElement(StatusIcon, null)));
|
|
5320
5320
|
};
|
|
5321
5321
|
|
|
5322
5322
|
var TextInputTypes;
|
|
@@ -5401,9 +5401,9 @@ class TextInputBase extends React.Component {
|
|
|
5401
5401
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
5402
5402
|
onChange, onFocus, onBlur, isLeftTruncated, isExpanded, readOnly, readOnlyVariant, isRequired, isDisabled, customIcon, ouiaId, ouiaSafe } = _a, props = __rest$1(_a, ["innerRef", "className", "type", "value", "placeholder", "validated", "onChange", "onFocus", "onBlur", "isLeftTruncated", "isExpanded", "readOnly", "readOnlyVariant", "isRequired", "isDisabled", "customIcon", "ouiaId", "ouiaSafe"]);
|
|
5403
5403
|
const hasStatusIcon = ['success', 'error', 'warning'].includes(validated);
|
|
5404
|
-
return (React.createElement("
|
|
5404
|
+
return (React.createElement("span", { className: css(formStyles$1.formControl, readOnlyVariant && formStyles$1.modifiers.readonly, readOnlyVariant === 'plain' && formStyles$1.modifiers.plain, isDisabled && formStyles$1.modifiers.disabled, isExpanded && formStyles$1.modifiers.expanded, customIcon && formStyles$1.modifiers.icon, hasStatusIcon && formStyles$1.modifiers[validated], className) },
|
|
5405
5405
|
React.createElement("input", Object.assign({}, props, { onFocus: this.onFocus, onBlur: this.onBlur, onChange: this.handleChange, type: type, value: this.sanitizeInputValue(value), "aria-invalid": props['aria-invalid'] ? props['aria-invalid'] : validated === ValidatedOptions.error, required: isRequired, disabled: isDisabled, readOnly: !!readOnlyVariant || readOnly, ref: innerRef || this.inputRef, placeholder: placeholder }, getOUIAProps(TextInput.displayName, ouiaId !== undefined ? ouiaId : this.state.ouiaStateId, ouiaSafe))),
|
|
5406
|
-
(customIcon || hasStatusIcon) && (React.createElement("
|
|
5406
|
+
(customIcon || hasStatusIcon) && (React.createElement("span", { className: css(formStyles$1.formControlUtilities) },
|
|
5407
5407
|
customIcon && React.createElement(FormControlIcon, { customIcon: customIcon }),
|
|
5408
5408
|
hasStatusIcon && React.createElement(FormControlIcon, { status: validated })))));
|
|
5409
5409
|
}
|
|
@@ -5471,6 +5471,7 @@ var menuStyles = {
|
|
|
5471
5471
|
"nav": "pf-m-nav",
|
|
5472
5472
|
"focus": "pf-m-focus",
|
|
5473
5473
|
"disabled": "pf-m-disabled",
|
|
5474
|
+
"ariaDisabled": "pf-m-aria-disabled",
|
|
5474
5475
|
"load": "pf-m-load",
|
|
5475
5476
|
"loading": "pf-m-loading",
|
|
5476
5477
|
"danger": "pf-m-danger",
|
|
@@ -5651,10 +5652,12 @@ class MenuBase extends React.Component {
|
|
|
5651
5652
|
document.activeElement.parentElement === element ||
|
|
5652
5653
|
document.activeElement.closest(`.${menuStyles.menuSearch}`) === element || // if element is a MenuSearch
|
|
5653
5654
|
(document.activeElement.closest('ol') && document.activeElement.closest('ol').firstChild === element), getFocusableElement: (navigableElement) => {
|
|
5654
|
-
var _a;
|
|
5655
|
+
var _a, _b;
|
|
5655
5656
|
return ((navigableElement === null || navigableElement === void 0 ? void 0 : navigableElement.tagName) === 'DIV' && navigableElement.querySelector('input')) || // for MenuSearchInput
|
|
5656
5657
|
(((_a = navigableElement.firstChild) === null || _a === void 0 ? void 0 : _a.tagName) === 'LABEL' &&
|
|
5657
5658
|
navigableElement.querySelector('input')) || // for MenuItem checkboxes
|
|
5659
|
+
(((_b = navigableElement.firstChild) === null || _b === void 0 ? void 0 : _b.tagName) === 'DIV' &&
|
|
5660
|
+
navigableElement.querySelector('a, button, input')) || // For aria-disabled element that is rendered inside a div with "display: contents" styling
|
|
5658
5661
|
navigableElement.firstChild;
|
|
5659
5662
|
}, noHorizontalArrowHandling: document.activeElement &&
|
|
5660
5663
|
(document.activeElement.classList.contains('pf-v5-c-breadcrumb__link') ||
|
|
@@ -5850,7 +5853,7 @@ const FlyoutContext = React.createContext({
|
|
|
5850
5853
|
direction: 'right'
|
|
5851
5854
|
});
|
|
5852
5855
|
const MenuItemBase = (_a) => {
|
|
5853
|
-
var { children, className, itemId = null, to, hasCheckbox = false, isActive = null, isFavorited = null, isLoadButton = false, isLoading = false, flyoutMenu, direction, description = null, onClick = () => { }, component = 'button', isDisabled = false, isExternalLink = false, isSelected = null, isFocused, isDanger = false, icon, actions, onShowFlyout, drilldownMenu, isOnPath, innerRef, id, 'aria-label': ariaLabel } = _a, props = __rest$1(_a, ["children", "className", "itemId", "to", "hasCheckbox", "isActive", "isFavorited", "isLoadButton", "isLoading", "flyoutMenu", "direction", "description", "onClick", "component", "isDisabled", "isExternalLink", "isSelected", "isFocused", "isDanger", "icon", "actions", "onShowFlyout", "drilldownMenu", "isOnPath", "innerRef", "id", 'aria-label']);
|
|
5856
|
+
var { children, className, itemId = null, to, hasCheckbox = false, isActive = null, isFavorited = null, isLoadButton = false, isLoading = false, flyoutMenu, direction, description = null, onClick = () => { }, component = 'button', isDisabled = false, isAriaDisabled = false, isExternalLink = false, isSelected = null, isFocused, isDanger = false, icon, actions, onShowFlyout, drilldownMenu, isOnPath, innerRef, id, 'aria-label': ariaLabel, tooltipProps } = _a, props = __rest$1(_a, ["children", "className", "itemId", "to", "hasCheckbox", "isActive", "isFavorited", "isLoadButton", "isLoading", "flyoutMenu", "direction", "description", "onClick", "component", "isDisabled", "isAriaDisabled", "isExternalLink", "isSelected", "isFocused", "isDanger", "icon", "actions", "onShowFlyout", "drilldownMenu", "isOnPath", "innerRef", "id", 'aria-label', "tooltipProps"]);
|
|
5854
5857
|
const { menuId, parentMenu, onSelect, onActionClick, activeItemId, selected, drilldownItemPath, onDrillIn, onDrillOut, flyoutRef, setFlyoutRef, disableHover, role: menuRole } = React.useContext(MenuContext);
|
|
5855
5858
|
let Component = (to ? 'a' : component);
|
|
5856
5859
|
if (hasCheckbox && !to) {
|
|
@@ -5945,10 +5948,12 @@ const MenuItemBase = (_a) => {
|
|
|
5945
5948
|
}
|
|
5946
5949
|
};
|
|
5947
5950
|
const onItemSelect = (event, onSelect) => {
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
5951
|
-
|
|
5951
|
+
if (!isAriaDisabled) {
|
|
5952
|
+
// Trigger callback for Menu onSelect
|
|
5953
|
+
onSelect && onSelect(event, itemId);
|
|
5954
|
+
// Trigger callback for item onClick
|
|
5955
|
+
onClick && onClick(event);
|
|
5956
|
+
}
|
|
5952
5957
|
};
|
|
5953
5958
|
const _isOnPath = (isOnPath && isOnPath) || (drilldownItemPath && drilldownItemPath.includes(itemId)) || false;
|
|
5954
5959
|
let drill;
|
|
@@ -5967,7 +5972,7 @@ const MenuItemBase = (_a) => {
|
|
|
5967
5972
|
if (Component === 'a') {
|
|
5968
5973
|
additionalProps = {
|
|
5969
5974
|
href: to,
|
|
5970
|
-
'aria-disabled': isDisabled ? true : null,
|
|
5975
|
+
'aria-disabled': isDisabled || isAriaDisabled ? true : null,
|
|
5971
5976
|
// prevent invalid 'disabled' attribute on <a> tags
|
|
5972
5977
|
disabled: null,
|
|
5973
5978
|
target: isExternalLink ? '_blank' : null
|
|
@@ -5975,7 +5980,8 @@ const MenuItemBase = (_a) => {
|
|
|
5975
5980
|
}
|
|
5976
5981
|
else if (Component === 'button') {
|
|
5977
5982
|
additionalProps = {
|
|
5978
|
-
type: 'button'
|
|
5983
|
+
type: 'button',
|
|
5984
|
+
'aria-disabled': isAriaDisabled ? true : null
|
|
5979
5985
|
};
|
|
5980
5986
|
}
|
|
5981
5987
|
if (isOnPath) {
|
|
@@ -6020,12 +6026,17 @@ const MenuItemBase = (_a) => {
|
|
|
6020
6026
|
}
|
|
6021
6027
|
};
|
|
6022
6028
|
const isSelectMenu = menuRole === 'listbox';
|
|
6023
|
-
|
|
6029
|
+
const renderItem = (React.createElement(React.Fragment, null,
|
|
6024
6030
|
React.createElement(GenerateId, null, (randomId) => (React.createElement(Component, Object.assign({ id: id, tabIndex: -1, className: css(menuStyles.menuItem, getIsSelected() && !hasCheckbox && menuStyles.modifiers.selected, className), "aria-current": getAriaCurrent() }, (!hasCheckbox && { disabled: isDisabled, 'aria-label': ariaLabel }), (!hasCheckbox && !flyoutMenu && { role: isSelectMenu ? 'option' : 'menuitem' }), (!hasCheckbox && !flyoutMenu && isSelectMenu && { 'aria-selected': getIsSelected() }), { ref: innerRef }, (!hasCheckbox && {
|
|
6025
6031
|
onClick: (event) => {
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6032
|
+
if (!isAriaDisabled) {
|
|
6033
|
+
onItemSelect(event, onSelect);
|
|
6034
|
+
drill && drill(event);
|
|
6035
|
+
flyoutMenu && handleFlyout(event);
|
|
6036
|
+
}
|
|
6037
|
+
else {
|
|
6038
|
+
event.preventDefault();
|
|
6039
|
+
}
|
|
6029
6040
|
}
|
|
6030
6041
|
}), (hasCheckbox && { htmlFor: randomId }), additionalProps),
|
|
6031
6042
|
React.createElement("span", { className: css(menuStyles.menuItemMain) },
|
|
@@ -6033,7 +6044,7 @@ const MenuItemBase = (_a) => {
|
|
|
6033
6044
|
React.createElement(AngleLeftIcon, { "aria-hidden": true }))),
|
|
6034
6045
|
icon && React.createElement("span", { className: css(menuStyles.menuItemIcon) }, icon),
|
|
6035
6046
|
hasCheckbox && (React.createElement("span", { className: css(menuStyles.menuItemCheck) },
|
|
6036
|
-
React.createElement(Checkbox, { id: randomId, component: "span", isChecked: isSelected || false, onChange: (event) => onItemSelect(event, onSelect), isDisabled: isDisabled }))),
|
|
6047
|
+
React.createElement(Checkbox, { id: randomId, component: "span", isChecked: isSelected || false, onChange: (event) => onItemSelect(event, onSelect), isDisabled: isDisabled, "aria-disabled": isAriaDisabled }))),
|
|
6037
6048
|
React.createElement("span", { className: css(menuStyles.menuItemText) }, children),
|
|
6038
6049
|
isExternalLink && (React.createElement("span", { className: css(menuStyles.menuItemExternalIcon) },
|
|
6039
6050
|
React.createElement(ExternalLinkAltIcon$1, { "aria-hidden": true }))),
|
|
@@ -6049,6 +6060,11 @@ const MenuItemBase = (_a) => {
|
|
|
6049
6060
|
React.createElement(MenuItemContext.Provider, { value: { itemId, isDisabled } },
|
|
6050
6061
|
actions,
|
|
6051
6062
|
isFavorited !== null && (React.createElement(MenuItemAction, { icon: "favorites", isFavorited: isFavorited, "aria-label": isFavorited ? 'starred' : 'not starred', onClick: (event) => onActionClick(event, itemId), tabIndex: -1, actionId: "fav" })))));
|
|
6063
|
+
return (React.createElement("li", Object.assign({ className: css(menuStyles.menuListItem, isDisabled && menuStyles.modifiers.disabled, isAriaDisabled && menuStyles.modifiers.ariaDisabled, _isOnPath && menuStyles.modifiers.currentPath, isLoadButton && menuStyles.modifiers.load, isLoading && menuStyles.modifiers.loading, isFocused && menuStyles.modifiers.focus, isDanger && menuStyles.modifiers.danger, className), onMouseOver: () => {
|
|
6064
|
+
if (!isAriaDisabled) {
|
|
6065
|
+
onMouseOver();
|
|
6066
|
+
}
|
|
6067
|
+
} }, (flyoutMenu && !isAriaDisabled && { onKeyDown: handleFlyout }), { ref: ref, role: !hasCheckbox ? 'none' : 'menuitem' }, (hasCheckbox && { 'aria-label': ariaLabel }), props), tooltipProps ? (React.createElement(Tooltip, Object.assign({}, tooltipProps), renderItem)) : (renderItem)));
|
|
6052
6068
|
};
|
|
6053
6069
|
const MenuItem = React.forwardRef((props, ref) => (React.createElement(MenuItemBase, Object.assign({}, props, { innerRef: ref }))));
|
|
6054
6070
|
MenuItem.displayName = 'MenuItem';
|
|
@@ -6131,6 +6147,7 @@ SelectOption.displayName = 'SelectOption';
|
|
|
6131
6147
|
|
|
6132
6148
|
var styles$j = {
|
|
6133
6149
|
"check": "pf-v5-c-check",
|
|
6150
|
+
"checkInput": "pf-v5-c-check__input",
|
|
6134
6151
|
"menuToggle": "pf-v5-c-menu-toggle",
|
|
6135
6152
|
"menuToggleButton": "pf-v5-c-menu-toggle__button",
|
|
6136
6153
|
"menuToggleControls": "pf-v5-c-menu-toggle__controls",
|
|
@@ -6241,11 +6258,11 @@ class FormSelect extends React.Component {
|
|
|
6241
6258
|
const selectedOption = React.Children.toArray(children).find((option) => option.props.value === value);
|
|
6242
6259
|
const isSelectedPlaceholder = selectedOption && selectedOption.props.isPlaceholder;
|
|
6243
6260
|
const hasStatusIcon = ['success', 'error', 'warning'].includes(validated);
|
|
6244
|
-
return (React.createElement("
|
|
6261
|
+
return (React.createElement("span", { className: css(formStyles$1.formControl, isDisabled && formStyles$1.modifiers.disabled, isSelectedPlaceholder && formStyles$1.modifiers.placeholder, hasStatusIcon && formStyles$1.modifiers[validated], className) },
|
|
6245
6262
|
React.createElement("select", Object.assign({}, props, { "aria-invalid": validated === ValidatedOptions.error }, getOUIAProps(FormSelect.displayName, ouiaId !== undefined ? ouiaId : this.state.ouiaStateId, ouiaSafe), { onChange: this.handleChange, disabled: isDisabled, required: isRequired, value: value }), children),
|
|
6246
|
-
React.createElement("
|
|
6263
|
+
React.createElement("span", { className: css(formStyles$1.formControlUtilities) },
|
|
6247
6264
|
hasStatusIcon && React.createElement(FormControlIcon, { status: validated }),
|
|
6248
|
-
React.createElement("
|
|
6265
|
+
React.createElement("span", { className: css(formStyles$1.formControlToggleIcon) },
|
|
6249
6266
|
React.createElement(CaretDownIcon, null)))));
|
|
6250
6267
|
}
|
|
6251
6268
|
}
|
|
@@ -6319,9 +6336,9 @@ class TextAreaBase extends React.Component {
|
|
|
6319
6336
|
props = __rest$1(_a, ["className", "value", "validated", "isRequired", "isDisabled", "readOnlyVariant", "resizeOrientation", "innerRef", "disabled", "autoResize", "onChange"]);
|
|
6320
6337
|
const orientation = `resize${capitalize(resizeOrientation)}`;
|
|
6321
6338
|
const hasStatusIcon = ['success', 'error', 'warning'].includes(validated);
|
|
6322
|
-
return (React.createElement("
|
|
6339
|
+
return (React.createElement("span", { className: css(formStyles$1.formControl, readOnlyVariant && formStyles$1.modifiers.readonly, readOnlyVariant === 'plain' && formStyles$1.modifiers.plain, resizeOrientation && formStyles$1.modifiers[orientation], isDisabled && formStyles$1.modifiers.disabled, hasStatusIcon && formStyles$1.modifiers[validated], className) },
|
|
6323
6340
|
React.createElement("textarea", Object.assign({ onChange: this.handleChange }, (typeof this.props.defaultValue !== 'string' && { value }), { "aria-invalid": validated === ValidatedOptions.error, required: isRequired, disabled: isDisabled || disabled, readOnly: !!readOnlyVariant, ref: innerRef || this.inputRef }, props)),
|
|
6324
|
-
hasStatusIcon && (React.createElement("
|
|
6341
|
+
hasStatusIcon && (React.createElement("span", { className: css(formStyles$1.formControlUtilities) },
|
|
6325
6342
|
React.createElement(FormControlIcon, { status: validated })))));
|
|
6326
6343
|
}
|
|
6327
6344
|
}
|
|
@@ -7001,7 +7018,7 @@ const Popover = (_a) => {
|
|
|
7001
7018
|
React.createElement(PopoverBody, { id: `popover-${uniqueId}-body` }, typeof bodyContent === 'function' ? bodyContent(hide) : bodyContent),
|
|
7002
7019
|
footerContent && (React.createElement(PopoverFooter, { id: `popover-${uniqueId}-footer` }, typeof footerContent === 'function' ? footerContent(hide) : footerContent)))));
|
|
7003
7020
|
return (React.createElement(PopoverContext.Provider, { value: { headerComponent } },
|
|
7004
|
-
React.createElement(Popper, { trigger: children, triggerRef: triggerRef, popper: content, popperRef: popoverRef, minWidth:
|
|
7021
|
+
React.createElement(Popper, { trigger: children, triggerRef: triggerRef, popper: content, popperRef: popoverRef, minWidth: minWidth, appendTo: appendTo, isVisible: visible, positionModifiers: positionModifiers, distance: distance, placement: position, onTriggerClick: onTriggerClick, onDocumentClick: onDocumentClick, onDocumentKeyDown: onDocumentKeyDown, enableFlip: enableFlip, zIndex: zIndex, flipBehavior: flipBehavior })));
|
|
7005
7022
|
};
|
|
7006
7023
|
Popover.displayName = 'Popover';
|
|
7007
7024
|
|
|
@@ -8686,7 +8703,7 @@ var ToolbarItemVariant;
|
|
|
8686
8703
|
ToolbarItemVariant["expand-all"] = "expand-all";
|
|
8687
8704
|
})(ToolbarItemVariant || (ToolbarItemVariant = {}));
|
|
8688
8705
|
const ToolbarItem = (_a) => {
|
|
8689
|
-
var { className, variant, visibility, spacer, widths, align, alignSelf, id, children, isAllExpanded, isOverflowContainer } = _a, props = __rest$1(_a, ["className", "variant", "visibility", "spacer", "widths", "align", "alignSelf", "id", "children", "isAllExpanded", "isOverflowContainer"]);
|
|
8706
|
+
var { className, variant, visibility, spacer, widths, align, alignSelf, alignItems, id, children, isAllExpanded, isOverflowContainer } = _a, props = __rest$1(_a, ["className", "variant", "visibility", "spacer", "widths", "align", "alignSelf", "alignItems", "id", "children", "isAllExpanded", "isOverflowContainer"]);
|
|
8690
8707
|
if (variant === ToolbarItemVariant.separator) {
|
|
8691
8708
|
return React.createElement(Divider, Object.assign({ className: css(styles$4.modifiers.vertical, className) }, props));
|
|
8692
8709
|
}
|
|
@@ -8695,7 +8712,7 @@ const ToolbarItem = (_a) => {
|
|
|
8695
8712
|
Object.entries(widths || {}).map(([breakpoint, value]) => (widthStyles[`--pf-v5-c-toolbar__item--Width${breakpoint !== 'default' ? `-on-${breakpoint}` : ''}`] = value));
|
|
8696
8713
|
}
|
|
8697
8714
|
return (React.createElement(PageContext.Consumer, null, ({ width, getBreakpoint }) => (React.createElement("div", Object.assign({ className: css(styles$4.toolbarItem, variant &&
|
|
8698
|
-
styles$4.modifiers[toCamel(variant)], isAllExpanded && styles$4.modifiers.expanded, isOverflowContainer && styles$4.modifiers.overflowContainer, formatBreakpointMods(visibility, styles$4, '', getBreakpoint(width)), formatBreakpointMods(align, styles$4, '', getBreakpoint(width)), formatBreakpointMods(spacer, styles$4, '', getBreakpoint(width)), alignSelf === 'center' && styles$4.modifiers.alignSelfCenter, alignSelf === 'baseline' && styles$4.modifiers.alignSelfBaseline, className) }, (variant === 'label' && { 'aria-hidden': true }), { id: id }, props, (widths && { style: Object.assign(Object.assign({}, widthStyles), props.style) })), children))));
|
|
8715
|
+
styles$4.modifiers[toCamel(variant)], isAllExpanded && styles$4.modifiers.expanded, isOverflowContainer && styles$4.modifiers.overflowContainer, formatBreakpointMods(visibility, styles$4, '', getBreakpoint(width)), formatBreakpointMods(align, styles$4, '', getBreakpoint(width)), formatBreakpointMods(spacer, styles$4, '', getBreakpoint(width)), alignItems === 'start' && styles$4.modifiers.alignItemsStart, alignItems === 'center' && styles$4.modifiers.alignItemsCenter, alignItems === 'baseline' && styles$4.modifiers.alignItemsBaseline, alignSelf === 'start' && styles$4.modifiers.alignSelfStart, alignSelf === 'center' && styles$4.modifiers.alignSelfCenter, alignSelf === 'baseline' && styles$4.modifiers.alignSelfBaseline, className) }, (variant === 'label' && { 'aria-hidden': true }), { id: id }, props, (widths && { style: Object.assign(Object.assign({}, widthStyles), props.style) })), children))));
|
|
8699
8716
|
};
|
|
8700
8717
|
ToolbarItem.displayName = 'ToolbarItem';
|
|
8701
8718
|
|
|
@@ -8708,7 +8725,7 @@ var ToolbarGroupVariant;
|
|
|
8708
8725
|
class ToolbarGroupWithRef extends React.Component {
|
|
8709
8726
|
render() {
|
|
8710
8727
|
const _a = this.props, { visibility, align, alignItems, alignSelf, spacer, spaceItems, className, variant, children, isOverflowContainer, innerRef } = _a, props = __rest$1(_a, ["visibility", "align", "alignItems", "alignSelf", "spacer", "spaceItems", "className", "variant", "children", "isOverflowContainer", "innerRef"]);
|
|
8711
|
-
return (React.createElement(PageContext.Consumer, null, ({ width, getBreakpoint }) => (React.createElement("div", Object.assign({ className: css(styles$4.toolbarGroup, variant && styles$4.modifiers[toCamel(variant)], formatBreakpointMods(visibility, styles$4, '', getBreakpoint(width)), formatBreakpointMods(align, styles$4, '', getBreakpoint(width)), formatBreakpointMods(spacer, styles$4, '', getBreakpoint(width)), formatBreakpointMods(spaceItems, styles$4, '', getBreakpoint(width)), alignItems === 'center' && styles$4.modifiers.alignItemsCenter, alignItems === 'baseline' && styles$4.modifiers.alignItemsBaseline, alignSelf === 'center' && styles$4.modifiers.alignSelfCenter, alignSelf === 'baseline' && styles$4.modifiers.alignSelfBaseline, isOverflowContainer && styles$4.modifiers.overflowContainer, className) }, props, { ref: innerRef }), children))));
|
|
8728
|
+
return (React.createElement(PageContext.Consumer, null, ({ width, getBreakpoint }) => (React.createElement("div", Object.assign({ className: css(styles$4.toolbarGroup, variant && styles$4.modifiers[toCamel(variant)], formatBreakpointMods(visibility, styles$4, '', getBreakpoint(width)), formatBreakpointMods(align, styles$4, '', getBreakpoint(width)), formatBreakpointMods(spacer, styles$4, '', getBreakpoint(width)), formatBreakpointMods(spaceItems, styles$4, '', getBreakpoint(width)), alignItems === 'start' && styles$4.modifiers.alignItemsStart, alignItems === 'center' && styles$4.modifiers.alignItemsCenter, alignItems === 'baseline' && styles$4.modifiers.alignItemsBaseline, alignSelf === 'start' && styles$4.modifiers.alignSelfStart, alignSelf === 'center' && styles$4.modifiers.alignSelfCenter, alignSelf === 'baseline' && styles$4.modifiers.alignSelfBaseline, isOverflowContainer && styles$4.modifiers.overflowContainer, className) }, props, { ref: innerRef }), children))));
|
|
8712
8729
|
}
|
|
8713
8730
|
}
|
|
8714
8731
|
const ToolbarGroup = React.forwardRef((props, ref) => (React.createElement(ToolbarGroupWithRef, Object.assign({}, props, { innerRef: ref }))));
|
|
@@ -8727,7 +8744,8 @@ class ToolbarChipGroupContent extends React.Component {
|
|
|
8727
8744
|
collapseListedFilters =
|
|
8728
8745
|
(canUseDOM ? window.innerWidth : 1200) < globalBreakpoints[collapseListedFiltersBreakpoint];
|
|
8729
8746
|
}
|
|
8730
|
-
|
|
8747
|
+
const isHidden = numberOfFilters === 0 || isExpanded;
|
|
8748
|
+
return (React.createElement("div", Object.assign({ className: css(styles$4.toolbarContent, !isHidden && !collapseListedFilters && styles$4.modifiers.chipContainer, isHidden && styles$4.modifiers.hidden, className) }, ((numberOfFilters === 0 || isExpanded) && { hidden: true }), { ref: chipGroupContentRef }, props),
|
|
8731
8749
|
React.createElement(ToolbarGroup, Object.assign({ className: css(collapseListedFilters && styles$4.modifiers.hidden) }, (collapseListedFilters && { hidden: true }), (collapseListedFilters && { 'aria-hidden': true }))),
|
|
8732
8750
|
collapseListedFilters && numberOfFilters > 0 && !isExpanded && (React.createElement(ToolbarGroup, null,
|
|
8733
8751
|
React.createElement(ToolbarItem, null, numberOfFiltersText(numberOfFilters)))),
|
|
@@ -8849,17 +8867,16 @@ class ToolbarContent extends React.Component {
|
|
|
8849
8867
|
this.chipContainerRef = React.createRef();
|
|
8850
8868
|
}
|
|
8851
8869
|
render() {
|
|
8852
|
-
const _a = this.props, { className, children, isExpanded, toolbarId, visibility, alignItems, clearAllFilters, showClearFiltersButton, clearFiltersButtonText } = _a, props = __rest$1(_a, ["className", "children", "isExpanded", "toolbarId", "visibility", "alignItems", "clearAllFilters", "showClearFiltersButton", "clearFiltersButtonText"]);
|
|
8870
|
+
const _a = this.props, { className, children, isExpanded, toolbarId, visibility, alignItems, clearAllFilters, showClearFiltersButton, clearFiltersButtonText, alignSelf } = _a, props = __rest$1(_a, ["className", "children", "isExpanded", "toolbarId", "visibility", "alignItems", "clearAllFilters", "showClearFiltersButton", "clearFiltersButtonText", "alignSelf"]);
|
|
8853
8871
|
return (React.createElement(PageContext.Consumer, null, ({ width, getBreakpoint }) => (React.createElement("div", Object.assign({ className: css(styles$4.toolbarContent, formatBreakpointMods(visibility, styles$4, '', getBreakpoint(width)), className) }, props),
|
|
8854
8872
|
React.createElement(ToolbarContext.Consumer, null, ({ clearAllFilters: clearAllFiltersContext, clearFiltersButtonText: clearFiltersButtonContext, showClearFiltersButton: showClearFiltersButtonContext, toolbarId: toolbarIdContext }) => {
|
|
8855
|
-
const expandableContentId = `${toolbarId ||
|
|
8856
|
-
toolbarIdContext}-expandable-content-${ToolbarContent.currentId++}`;
|
|
8873
|
+
const expandableContentId = `${toolbarId || toolbarIdContext}-expandable-content-${ToolbarContent.currentId++}`;
|
|
8857
8874
|
return (React.createElement(ToolbarContentContext.Provider, { value: {
|
|
8858
8875
|
expandableContentRef: this.expandableContentRef,
|
|
8859
8876
|
expandableContentId,
|
|
8860
8877
|
chipContainerRef: this.chipContainerRef
|
|
8861
8878
|
} },
|
|
8862
|
-
React.createElement("div", { className: css(styles$4.toolbarContentSection, alignItems === 'center' && styles$4.modifiers.alignItemsCenter) }, children),
|
|
8879
|
+
React.createElement("div", { className: css(styles$4.toolbarContentSection, alignItems === 'center' && styles$4.modifiers.alignItemsCenter, alignItems === 'start' && styles$4.modifiers.alignItemsStart, alignItems === 'baseline' && styles$4.modifiers.alignItemsBaseline, alignSelf === 'center' && styles$4.modifiers.alignSelfCenter, alignSelf === 'start' && styles$4.modifiers.alignSelfStart, alignSelf === 'baseline' && styles$4.modifiers.alignSelfBaseline) }, children),
|
|
8863
8880
|
React.createElement(ToolbarExpandableContent, { id: expandableContentId, isExpanded: isExpanded, expandableContentRef: this.expandableContentRef, chipContainerRef: this.chipContainerRef, clearAllFilters: clearAllFilters || clearAllFiltersContext, showClearFiltersButton: showClearFiltersButton || showClearFiltersButtonContext, clearFiltersButtonText: clearFiltersButtonText || clearFiltersButtonContext })));
|
|
8864
8881
|
})))));
|
|
8865
8882
|
}
|
|
@@ -9663,66 +9680,66 @@ m.Pop;a=b();var q=a[0],l=a[1],c=B$1(),e=B$1();null==q&&(q=0,f.replaceState(_exte
|
|
|
9663
9680
|
y$1(_extends({pathname:"/",search:"",hash:"",state:null,key:D$1()},"string"===typeof a?F$2(a):a));"production"!==process.env.NODE_ENV?z$2("/"===b.pathname.charAt(0),"Relative pathnames are not supported in createMemoryHistory({ initialEntries }) (invalid entry: "+JSON.stringify(a)+")"):void 0;return b}),f=Math.min(Math.max(null==r?h.length-1:r,0),h.length-1),p=m.Pop,n=h[f],q=B$1(),l=B$1();return {get index(){return f},get action(){return p},get location(){return n},createHref:function(a){return "string"===typeof a?
|
|
9664
9681
|
a:E$1(a)},push:v,replace:w,go:u,back:function(){u(-1);},forward:function(){u(1);},listen:function(a){return q.push(a)},block:function(a){return l.push(a)}}}
|
|
9665
9682
|
|
|
9666
|
-
var QuickStartStatus;
|
|
9667
|
-
(function (QuickStartStatus) {
|
|
9668
|
-
QuickStartStatus["COMPLETE"] = "Complete";
|
|
9669
|
-
QuickStartStatus["IN_PROGRESS"] = "In Progress";
|
|
9670
|
-
QuickStartStatus["NOT_STARTED"] = "Not started";
|
|
9671
|
-
})(QuickStartStatus || (QuickStartStatus = {}));
|
|
9672
|
-
var QuickStartTaskStatus;
|
|
9673
|
-
(function (QuickStartTaskStatus) {
|
|
9674
|
-
QuickStartTaskStatus["INIT"] = "Initial";
|
|
9675
|
-
QuickStartTaskStatus["VISITED"] = "Visited";
|
|
9676
|
-
QuickStartTaskStatus["REVIEW"] = "Review";
|
|
9677
|
-
QuickStartTaskStatus["SUCCESS"] = "Success";
|
|
9678
|
-
QuickStartTaskStatus["FAILED"] = "Failed";
|
|
9683
|
+
var QuickStartStatus;
|
|
9684
|
+
(function (QuickStartStatus) {
|
|
9685
|
+
QuickStartStatus["COMPLETE"] = "Complete";
|
|
9686
|
+
QuickStartStatus["IN_PROGRESS"] = "In Progress";
|
|
9687
|
+
QuickStartStatus["NOT_STARTED"] = "Not started";
|
|
9688
|
+
})(QuickStartStatus || (QuickStartStatus = {}));
|
|
9689
|
+
var QuickStartTaskStatus;
|
|
9690
|
+
(function (QuickStartTaskStatus) {
|
|
9691
|
+
QuickStartTaskStatus["INIT"] = "Initial";
|
|
9692
|
+
QuickStartTaskStatus["VISITED"] = "Visited";
|
|
9693
|
+
QuickStartTaskStatus["REVIEW"] = "Review";
|
|
9694
|
+
QuickStartTaskStatus["SUCCESS"] = "Success";
|
|
9695
|
+
QuickStartTaskStatus["FAILED"] = "Failed";
|
|
9679
9696
|
})(QuickStartTaskStatus || (QuickStartTaskStatus = {}));
|
|
9680
9697
|
|
|
9681
|
-
const QUICKSTART_SEARCH_FILTER_KEY = 'keyword';
|
|
9682
|
-
const QUICKSTART_STATUS_FILTER_KEY = 'status';
|
|
9683
|
-
const QUICKSTART_ID_FILTER_KEY = 'quickstart';
|
|
9684
|
-
const QUICKSTART_TASKS_INITIAL_STATES = [
|
|
9685
|
-
QuickStartTaskStatus.INIT,
|
|
9686
|
-
QuickStartTaskStatus.VISITED,
|
|
9687
|
-
];
|
|
9698
|
+
const QUICKSTART_SEARCH_FILTER_KEY = 'keyword';
|
|
9699
|
+
const QUICKSTART_STATUS_FILTER_KEY = 'status';
|
|
9700
|
+
const QUICKSTART_ID_FILTER_KEY = 'quickstart';
|
|
9701
|
+
const QUICKSTART_TASKS_INITIAL_STATES = [
|
|
9702
|
+
QuickStartTaskStatus.INIT,
|
|
9703
|
+
QuickStartTaskStatus.VISITED,
|
|
9704
|
+
];
|
|
9688
9705
|
const HELP_TOPIC_NAME_KEY = 'topic';
|
|
9689
9706
|
|
|
9690
|
-
let createHistory;
|
|
9691
|
-
try {
|
|
9692
|
-
if (process.env.NODE_ENV === 'test') {
|
|
9693
|
-
// Running in node. Can't use browser history
|
|
9694
|
-
createHistory = createMemoryHistory;
|
|
9695
|
-
}
|
|
9696
|
-
else {
|
|
9697
|
-
createHistory = createBrowserHistory;
|
|
9698
|
-
}
|
|
9699
|
-
}
|
|
9700
|
-
catch (unused) {
|
|
9701
|
-
createHistory = createBrowserHistory;
|
|
9702
|
-
}
|
|
9703
|
-
const history = createHistory();
|
|
9704
|
-
const removeQueryArgument = (k) => {
|
|
9705
|
-
const params = new URLSearchParams(window.location.search);
|
|
9706
|
-
if (params.has(k)) {
|
|
9707
|
-
params.delete(k);
|
|
9708
|
-
const url = new URL(window.location.href);
|
|
9709
|
-
history.replace(`${url.pathname}?${params.toString()}${url.hash}`);
|
|
9710
|
-
}
|
|
9711
|
-
};
|
|
9712
|
-
const setQueryArgument = (k, v) => {
|
|
9713
|
-
if (!v) {
|
|
9714
|
-
return removeQueryArgument(k);
|
|
9715
|
-
}
|
|
9716
|
-
const params = new URLSearchParams(window.location.search);
|
|
9717
|
-
if (params.get(k) !== v) {
|
|
9718
|
-
params.set(k, v);
|
|
9719
|
-
const url = new URL(window.location.href);
|
|
9720
|
-
history.replace(`${url.pathname}?${params.toString()}${url.hash}`);
|
|
9721
|
-
}
|
|
9722
|
-
};
|
|
9723
|
-
const clearFilterParams = () => {
|
|
9724
|
-
removeQueryArgument(QUICKSTART_SEARCH_FILTER_KEY);
|
|
9725
|
-
removeQueryArgument(QUICKSTART_STATUS_FILTER_KEY);
|
|
9707
|
+
let createHistory;
|
|
9708
|
+
try {
|
|
9709
|
+
if (process.env.NODE_ENV === 'test') {
|
|
9710
|
+
// Running in node. Can't use browser history
|
|
9711
|
+
createHistory = createMemoryHistory;
|
|
9712
|
+
}
|
|
9713
|
+
else {
|
|
9714
|
+
createHistory = createBrowserHistory;
|
|
9715
|
+
}
|
|
9716
|
+
}
|
|
9717
|
+
catch (unused) {
|
|
9718
|
+
createHistory = createBrowserHistory;
|
|
9719
|
+
}
|
|
9720
|
+
const history = createHistory();
|
|
9721
|
+
const removeQueryArgument = (k) => {
|
|
9722
|
+
const params = new URLSearchParams(window.location.search);
|
|
9723
|
+
if (params.has(k)) {
|
|
9724
|
+
params.delete(k);
|
|
9725
|
+
const url = new URL(window.location.href);
|
|
9726
|
+
history.replace(`${url.pathname}?${params.toString()}${url.hash}`);
|
|
9727
|
+
}
|
|
9728
|
+
};
|
|
9729
|
+
const setQueryArgument = (k, v) => {
|
|
9730
|
+
if (!v) {
|
|
9731
|
+
return removeQueryArgument(k);
|
|
9732
|
+
}
|
|
9733
|
+
const params = new URLSearchParams(window.location.search);
|
|
9734
|
+
if (params.get(k) !== v) {
|
|
9735
|
+
params.set(k, v);
|
|
9736
|
+
const url = new URL(window.location.href);
|
|
9737
|
+
history.replace(`${url.pathname}?${params.toString()}${url.hash}`);
|
|
9738
|
+
}
|
|
9739
|
+
};
|
|
9740
|
+
const clearFilterParams = () => {
|
|
9741
|
+
removeQueryArgument(QUICKSTART_SEARCH_FILTER_KEY);
|
|
9742
|
+
removeQueryArgument(QUICKSTART_STATUS_FILTER_KEY);
|
|
9726
9743
|
};
|
|
9727
9744
|
|
|
9728
9745
|
var Status$1 = "Status";
|
|
@@ -9786,667 +9803,667 @@ var en = {
|
|
|
9786
9803
|
"{{type}} • {{duration, number}} minutes": "{{type}} • {{duration, number}} minutes"
|
|
9787
9804
|
};
|
|
9788
9805
|
|
|
9789
|
-
/* eslint-disable */
|
|
9790
|
-
// https://github.com/i18next/i18next/blob/master/src/PluralResolver.js
|
|
9791
|
-
const sets = [
|
|
9792
|
-
{
|
|
9793
|
-
lngs: [
|
|
9794
|
-
'ach',
|
|
9795
|
-
'ak',
|
|
9796
|
-
'am',
|
|
9797
|
-
'arn',
|
|
9798
|
-
'br',
|
|
9799
|
-
'fil',
|
|
9800
|
-
'gun',
|
|
9801
|
-
'ln',
|
|
9802
|
-
'mfe',
|
|
9803
|
-
'mg',
|
|
9804
|
-
'mi',
|
|
9805
|
-
'oc',
|
|
9806
|
-
'pt',
|
|
9807
|
-
'pt-BR',
|
|
9808
|
-
'tg',
|
|
9809
|
-
'tl',
|
|
9810
|
-
'ti',
|
|
9811
|
-
'tr',
|
|
9812
|
-
'uz',
|
|
9813
|
-
'wa',
|
|
9814
|
-
],
|
|
9815
|
-
nr: [1, 2],
|
|
9816
|
-
fc: 1,
|
|
9817
|
-
},
|
|
9818
|
-
{
|
|
9819
|
-
lngs: [
|
|
9820
|
-
'af',
|
|
9821
|
-
'an',
|
|
9822
|
-
'ast',
|
|
9823
|
-
'az',
|
|
9824
|
-
'bg',
|
|
9825
|
-
'bn',
|
|
9826
|
-
'ca',
|
|
9827
|
-
'da',
|
|
9828
|
-
'de',
|
|
9829
|
-
'dev',
|
|
9830
|
-
'el',
|
|
9831
|
-
'en',
|
|
9832
|
-
'eo',
|
|
9833
|
-
'es',
|
|
9834
|
-
'et',
|
|
9835
|
-
'eu',
|
|
9836
|
-
'fi',
|
|
9837
|
-
'fo',
|
|
9838
|
-
'fur',
|
|
9839
|
-
'fy',
|
|
9840
|
-
'gl',
|
|
9841
|
-
'gu',
|
|
9842
|
-
'ha',
|
|
9843
|
-
'hi',
|
|
9844
|
-
'hu',
|
|
9845
|
-
'hy',
|
|
9846
|
-
'ia',
|
|
9847
|
-
'it',
|
|
9848
|
-
'kk',
|
|
9849
|
-
'kn',
|
|
9850
|
-
'ku',
|
|
9851
|
-
'lb',
|
|
9852
|
-
'mai',
|
|
9853
|
-
'ml',
|
|
9854
|
-
'mn',
|
|
9855
|
-
'mr',
|
|
9856
|
-
'nah',
|
|
9857
|
-
'nap',
|
|
9858
|
-
'nb',
|
|
9859
|
-
'ne',
|
|
9860
|
-
'nl',
|
|
9861
|
-
'nn',
|
|
9862
|
-
'no',
|
|
9863
|
-
'nso',
|
|
9864
|
-
'pa',
|
|
9865
|
-
'pap',
|
|
9866
|
-
'pms',
|
|
9867
|
-
'ps',
|
|
9868
|
-
'pt-PT',
|
|
9869
|
-
'rm',
|
|
9870
|
-
'sco',
|
|
9871
|
-
'se',
|
|
9872
|
-
'si',
|
|
9873
|
-
'so',
|
|
9874
|
-
'son',
|
|
9875
|
-
'sq',
|
|
9876
|
-
'sv',
|
|
9877
|
-
'sw',
|
|
9878
|
-
'ta',
|
|
9879
|
-
'te',
|
|
9880
|
-
'tk',
|
|
9881
|
-
'ur',
|
|
9882
|
-
'yo',
|
|
9883
|
-
],
|
|
9884
|
-
nr: [1, 2],
|
|
9885
|
-
fc: 2,
|
|
9886
|
-
},
|
|
9887
|
-
{
|
|
9888
|
-
lngs: [
|
|
9889
|
-
'ay',
|
|
9890
|
-
'bo',
|
|
9891
|
-
'cgg',
|
|
9892
|
-
'fa',
|
|
9893
|
-
'ht',
|
|
9894
|
-
'id',
|
|
9895
|
-
'ja',
|
|
9896
|
-
'jbo',
|
|
9897
|
-
'ka',
|
|
9898
|
-
'km',
|
|
9899
|
-
'ko',
|
|
9900
|
-
'ky',
|
|
9901
|
-
'lo',
|
|
9902
|
-
'ms',
|
|
9903
|
-
'sah',
|
|
9904
|
-
'su',
|
|
9905
|
-
'th',
|
|
9906
|
-
'tt',
|
|
9907
|
-
'ug',
|
|
9908
|
-
'vi',
|
|
9909
|
-
'wo',
|
|
9910
|
-
'zh',
|
|
9911
|
-
],
|
|
9912
|
-
nr: [1],
|
|
9913
|
-
fc: 3,
|
|
9914
|
-
},
|
|
9915
|
-
{ lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 },
|
|
9916
|
-
{ lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 },
|
|
9917
|
-
{ lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 },
|
|
9918
|
-
{ lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 },
|
|
9919
|
-
{ lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 },
|
|
9920
|
-
{ lngs: ['fr'], nr: [1, 2], fc: 9 },
|
|
9921
|
-
{ lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 },
|
|
9922
|
-
{ lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 },
|
|
9923
|
-
{ lngs: ['is'], nr: [1, 2], fc: 12 },
|
|
9924
|
-
{ lngs: ['jv'], nr: [0, 1], fc: 13 },
|
|
9925
|
-
{ lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 },
|
|
9926
|
-
{ lngs: ['lt'], nr: [1, 2, 10], fc: 15 },
|
|
9927
|
-
{ lngs: ['lv'], nr: [1, 2, 0], fc: 16 },
|
|
9928
|
-
{ lngs: ['mk'], nr: [1, 2], fc: 17 },
|
|
9929
|
-
{ lngs: ['mnk'], nr: [0, 1, 2], fc: 18 },
|
|
9930
|
-
{ lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 },
|
|
9931
|
-
{ lngs: ['or'], nr: [2, 1], fc: 2 },
|
|
9932
|
-
{ lngs: ['ro'], nr: [1, 2, 20], fc: 20 },
|
|
9933
|
-
{ lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 },
|
|
9934
|
-
{ lngs: ['he', 'iw'], nr: [1, 2, 20, 21], fc: 22 },
|
|
9935
|
-
];
|
|
9936
|
-
const _rulesPluralsTypes = {
|
|
9937
|
-
1: function (n) {
|
|
9938
|
-
return Number(n > 1);
|
|
9939
|
-
},
|
|
9940
|
-
2: function (n) {
|
|
9941
|
-
return Number(n != 1);
|
|
9942
|
-
},
|
|
9943
|
-
3: function (n) {
|
|
9944
|
-
return 0;
|
|
9945
|
-
},
|
|
9946
|
-
4: function (n) {
|
|
9947
|
-
return Number(n % 10 == 1 && n % 100 != 11
|
|
9948
|
-
? 0
|
|
9949
|
-
: n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)
|
|
9950
|
-
? 1
|
|
9951
|
-
: 2);
|
|
9952
|
-
},
|
|
9953
|
-
5: function (n) {
|
|
9954
|
-
return Number(n == 0
|
|
9955
|
-
? 0
|
|
9956
|
-
: n == 1
|
|
9957
|
-
? 1
|
|
9958
|
-
: n == 2
|
|
9959
|
-
? 2
|
|
9960
|
-
: n % 100 >= 3 && n % 100 <= 10
|
|
9961
|
-
? 3
|
|
9962
|
-
: n % 100 >= 11
|
|
9963
|
-
? 4
|
|
9964
|
-
: 5);
|
|
9965
|
-
},
|
|
9966
|
-
6: function (n) {
|
|
9967
|
-
return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);
|
|
9968
|
-
},
|
|
9969
|
-
7: function (n) {
|
|
9970
|
-
return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
|
|
9971
|
-
},
|
|
9972
|
-
8: function (n) {
|
|
9973
|
-
return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);
|
|
9974
|
-
},
|
|
9975
|
-
9: function (n) {
|
|
9976
|
-
return Number(n >= 2);
|
|
9977
|
-
},
|
|
9978
|
-
10: function (n) {
|
|
9979
|
-
return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);
|
|
9980
|
-
},
|
|
9981
|
-
11: function (n) {
|
|
9982
|
-
return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);
|
|
9983
|
-
},
|
|
9984
|
-
12: function (n) {
|
|
9985
|
-
return Number(n % 10 != 1 || n % 100 == 11);
|
|
9986
|
-
},
|
|
9987
|
-
13: function (n) {
|
|
9988
|
-
return Number(n !== 0);
|
|
9989
|
-
},
|
|
9990
|
-
14: function (n) {
|
|
9991
|
-
return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);
|
|
9992
|
-
},
|
|
9993
|
-
15: function (n) {
|
|
9994
|
-
return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
|
|
9995
|
-
},
|
|
9996
|
-
16: function (n) {
|
|
9997
|
-
return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);
|
|
9998
|
-
},
|
|
9999
|
-
17: function (n) {
|
|
10000
|
-
return Number(n == 1 || (n % 10 == 1 && n % 100 != 11) ? 0 : 1);
|
|
10001
|
-
},
|
|
10002
|
-
18: function (n) {
|
|
10003
|
-
return Number(n == 0 ? 0 : n == 1 ? 1 : 2);
|
|
10004
|
-
},
|
|
10005
|
-
19: function (n) {
|
|
10006
|
-
return Number(n == 1
|
|
10007
|
-
? 0
|
|
10008
|
-
: n == 0 || (n % 100 > 1 && n % 100 < 11)
|
|
10009
|
-
? 1
|
|
10010
|
-
: n % 100 > 10 && n % 100 < 20
|
|
10011
|
-
? 2
|
|
10012
|
-
: 3);
|
|
10013
|
-
},
|
|
10014
|
-
20: function (n) {
|
|
10015
|
-
return Number(n == 1 ? 0 : n == 0 || (n % 100 > 0 && n % 100 < 20) ? 1 : 2);
|
|
10016
|
-
},
|
|
10017
|
-
21: function (n) {
|
|
10018
|
-
return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);
|
|
10019
|
-
},
|
|
10020
|
-
22: function (n) {
|
|
10021
|
-
return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);
|
|
10022
|
-
},
|
|
10023
|
-
};
|
|
10024
|
-
function createRules() {
|
|
10025
|
-
const rules = {};
|
|
10026
|
-
sets.forEach((set) => {
|
|
10027
|
-
set.lngs.forEach((l) => {
|
|
10028
|
-
rules[l] = {
|
|
10029
|
-
numbers: set.nr,
|
|
10030
|
-
plurals: _rulesPluralsTypes[set.fc],
|
|
10031
|
-
};
|
|
10032
|
-
});
|
|
10033
|
-
});
|
|
10034
|
-
return rules;
|
|
10035
|
-
}
|
|
10036
|
-
class PluralResolver {
|
|
10037
|
-
constructor(options = {}) {
|
|
10038
|
-
this.options = options;
|
|
10039
|
-
this.rules = createRules();
|
|
10040
|
-
}
|
|
10041
|
-
addRule(lng, obj) {
|
|
10042
|
-
this.rules[lng] = obj;
|
|
10043
|
-
}
|
|
10044
|
-
getRule(code) {
|
|
10045
|
-
return this.rules[code];
|
|
10046
|
-
}
|
|
10047
|
-
needsPlural(code) {
|
|
10048
|
-
const rule = this.getRule(code);
|
|
10049
|
-
return rule && rule.numbers.length > 1;
|
|
10050
|
-
}
|
|
10051
|
-
getPluralFormsOfKey(code, key) {
|
|
10052
|
-
return this.getSuffixes(code).map((suffix) => key + suffix);
|
|
10053
|
-
}
|
|
10054
|
-
getSuffixes(code) {
|
|
10055
|
-
const rule = this.getRule(code);
|
|
10056
|
-
if (!rule) {
|
|
10057
|
-
return [];
|
|
10058
|
-
}
|
|
10059
|
-
return rule.numbers.map((number) => this.getSuffix(code, number));
|
|
10060
|
-
}
|
|
10061
|
-
getSuffix(code, count) {
|
|
10062
|
-
const rule = this.getRule(code);
|
|
10063
|
-
if (rule) {
|
|
10064
|
-
// if (rule.numbers.length === 1) return ''; // only singular
|
|
10065
|
-
const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));
|
|
10066
|
-
let suffix = rule.numbers[idx];
|
|
10067
|
-
// special treatment for lngs only having singular and plural
|
|
10068
|
-
if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {
|
|
10069
|
-
if (suffix === 2) {
|
|
10070
|
-
suffix = 'plural';
|
|
10071
|
-
}
|
|
10072
|
-
else if (suffix === 1) {
|
|
10073
|
-
suffix = '';
|
|
10074
|
-
}
|
|
10075
|
-
}
|
|
10076
|
-
const returnSuffix = () => this.options.prepend && suffix.toString()
|
|
10077
|
-
? this.options.prepend + suffix.toString()
|
|
10078
|
-
: suffix.toString();
|
|
10079
|
-
// COMPATIBILITY JSON
|
|
10080
|
-
// v1
|
|
10081
|
-
if (this.options.compatibilityJSON === 'v1') {
|
|
10082
|
-
if (suffix === 1) {
|
|
10083
|
-
return '';
|
|
10084
|
-
}
|
|
10085
|
-
if (typeof suffix === 'number') {
|
|
10086
|
-
return `_plural_${suffix.toString()}`;
|
|
10087
|
-
}
|
|
10088
|
-
return returnSuffix();
|
|
10089
|
-
}
|
|
10090
|
-
if ( /* v2 */this.options.compatibilityJSON === 'v2') {
|
|
10091
|
-
return returnSuffix();
|
|
10092
|
-
}
|
|
10093
|
-
if (
|
|
10094
|
-
/* v3 - gettext index */ this.options.simplifyPluralSuffix &&
|
|
10095
|
-
rule.numbers.length === 2 &&
|
|
10096
|
-
rule.numbers[0] === 1) {
|
|
10097
|
-
return returnSuffix();
|
|
10098
|
-
}
|
|
10099
|
-
return this.options.prepend && idx.toString()
|
|
10100
|
-
? this.options.prepend + idx.toString()
|
|
10101
|
-
: idx.toString();
|
|
10102
|
-
}
|
|
10103
|
-
// this.logger.warn(`no plural rule found for: ${code}`);
|
|
10104
|
-
return '';
|
|
10105
|
-
}
|
|
9806
|
+
/* eslint-disable */
|
|
9807
|
+
// https://github.com/i18next/i18next/blob/master/src/PluralResolver.js
|
|
9808
|
+
const sets = [
|
|
9809
|
+
{
|
|
9810
|
+
lngs: [
|
|
9811
|
+
'ach',
|
|
9812
|
+
'ak',
|
|
9813
|
+
'am',
|
|
9814
|
+
'arn',
|
|
9815
|
+
'br',
|
|
9816
|
+
'fil',
|
|
9817
|
+
'gun',
|
|
9818
|
+
'ln',
|
|
9819
|
+
'mfe',
|
|
9820
|
+
'mg',
|
|
9821
|
+
'mi',
|
|
9822
|
+
'oc',
|
|
9823
|
+
'pt',
|
|
9824
|
+
'pt-BR',
|
|
9825
|
+
'tg',
|
|
9826
|
+
'tl',
|
|
9827
|
+
'ti',
|
|
9828
|
+
'tr',
|
|
9829
|
+
'uz',
|
|
9830
|
+
'wa',
|
|
9831
|
+
],
|
|
9832
|
+
nr: [1, 2],
|
|
9833
|
+
fc: 1,
|
|
9834
|
+
},
|
|
9835
|
+
{
|
|
9836
|
+
lngs: [
|
|
9837
|
+
'af',
|
|
9838
|
+
'an',
|
|
9839
|
+
'ast',
|
|
9840
|
+
'az',
|
|
9841
|
+
'bg',
|
|
9842
|
+
'bn',
|
|
9843
|
+
'ca',
|
|
9844
|
+
'da',
|
|
9845
|
+
'de',
|
|
9846
|
+
'dev',
|
|
9847
|
+
'el',
|
|
9848
|
+
'en',
|
|
9849
|
+
'eo',
|
|
9850
|
+
'es',
|
|
9851
|
+
'et',
|
|
9852
|
+
'eu',
|
|
9853
|
+
'fi',
|
|
9854
|
+
'fo',
|
|
9855
|
+
'fur',
|
|
9856
|
+
'fy',
|
|
9857
|
+
'gl',
|
|
9858
|
+
'gu',
|
|
9859
|
+
'ha',
|
|
9860
|
+
'hi',
|
|
9861
|
+
'hu',
|
|
9862
|
+
'hy',
|
|
9863
|
+
'ia',
|
|
9864
|
+
'it',
|
|
9865
|
+
'kk',
|
|
9866
|
+
'kn',
|
|
9867
|
+
'ku',
|
|
9868
|
+
'lb',
|
|
9869
|
+
'mai',
|
|
9870
|
+
'ml',
|
|
9871
|
+
'mn',
|
|
9872
|
+
'mr',
|
|
9873
|
+
'nah',
|
|
9874
|
+
'nap',
|
|
9875
|
+
'nb',
|
|
9876
|
+
'ne',
|
|
9877
|
+
'nl',
|
|
9878
|
+
'nn',
|
|
9879
|
+
'no',
|
|
9880
|
+
'nso',
|
|
9881
|
+
'pa',
|
|
9882
|
+
'pap',
|
|
9883
|
+
'pms',
|
|
9884
|
+
'ps',
|
|
9885
|
+
'pt-PT',
|
|
9886
|
+
'rm',
|
|
9887
|
+
'sco',
|
|
9888
|
+
'se',
|
|
9889
|
+
'si',
|
|
9890
|
+
'so',
|
|
9891
|
+
'son',
|
|
9892
|
+
'sq',
|
|
9893
|
+
'sv',
|
|
9894
|
+
'sw',
|
|
9895
|
+
'ta',
|
|
9896
|
+
'te',
|
|
9897
|
+
'tk',
|
|
9898
|
+
'ur',
|
|
9899
|
+
'yo',
|
|
9900
|
+
],
|
|
9901
|
+
nr: [1, 2],
|
|
9902
|
+
fc: 2,
|
|
9903
|
+
},
|
|
9904
|
+
{
|
|
9905
|
+
lngs: [
|
|
9906
|
+
'ay',
|
|
9907
|
+
'bo',
|
|
9908
|
+
'cgg',
|
|
9909
|
+
'fa',
|
|
9910
|
+
'ht',
|
|
9911
|
+
'id',
|
|
9912
|
+
'ja',
|
|
9913
|
+
'jbo',
|
|
9914
|
+
'ka',
|
|
9915
|
+
'km',
|
|
9916
|
+
'ko',
|
|
9917
|
+
'ky',
|
|
9918
|
+
'lo',
|
|
9919
|
+
'ms',
|
|
9920
|
+
'sah',
|
|
9921
|
+
'su',
|
|
9922
|
+
'th',
|
|
9923
|
+
'tt',
|
|
9924
|
+
'ug',
|
|
9925
|
+
'vi',
|
|
9926
|
+
'wo',
|
|
9927
|
+
'zh',
|
|
9928
|
+
],
|
|
9929
|
+
nr: [1],
|
|
9930
|
+
fc: 3,
|
|
9931
|
+
},
|
|
9932
|
+
{ lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 },
|
|
9933
|
+
{ lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 },
|
|
9934
|
+
{ lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 },
|
|
9935
|
+
{ lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 },
|
|
9936
|
+
{ lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 },
|
|
9937
|
+
{ lngs: ['fr'], nr: [1, 2], fc: 9 },
|
|
9938
|
+
{ lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 },
|
|
9939
|
+
{ lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 },
|
|
9940
|
+
{ lngs: ['is'], nr: [1, 2], fc: 12 },
|
|
9941
|
+
{ lngs: ['jv'], nr: [0, 1], fc: 13 },
|
|
9942
|
+
{ lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 },
|
|
9943
|
+
{ lngs: ['lt'], nr: [1, 2, 10], fc: 15 },
|
|
9944
|
+
{ lngs: ['lv'], nr: [1, 2, 0], fc: 16 },
|
|
9945
|
+
{ lngs: ['mk'], nr: [1, 2], fc: 17 },
|
|
9946
|
+
{ lngs: ['mnk'], nr: [0, 1, 2], fc: 18 },
|
|
9947
|
+
{ lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 },
|
|
9948
|
+
{ lngs: ['or'], nr: [2, 1], fc: 2 },
|
|
9949
|
+
{ lngs: ['ro'], nr: [1, 2, 20], fc: 20 },
|
|
9950
|
+
{ lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 },
|
|
9951
|
+
{ lngs: ['he', 'iw'], nr: [1, 2, 20, 21], fc: 22 },
|
|
9952
|
+
];
|
|
9953
|
+
const _rulesPluralsTypes = {
|
|
9954
|
+
1: function (n) {
|
|
9955
|
+
return Number(n > 1);
|
|
9956
|
+
},
|
|
9957
|
+
2: function (n) {
|
|
9958
|
+
return Number(n != 1);
|
|
9959
|
+
},
|
|
9960
|
+
3: function (n) {
|
|
9961
|
+
return 0;
|
|
9962
|
+
},
|
|
9963
|
+
4: function (n) {
|
|
9964
|
+
return Number(n % 10 == 1 && n % 100 != 11
|
|
9965
|
+
? 0
|
|
9966
|
+
: n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)
|
|
9967
|
+
? 1
|
|
9968
|
+
: 2);
|
|
9969
|
+
},
|
|
9970
|
+
5: function (n) {
|
|
9971
|
+
return Number(n == 0
|
|
9972
|
+
? 0
|
|
9973
|
+
: n == 1
|
|
9974
|
+
? 1
|
|
9975
|
+
: n == 2
|
|
9976
|
+
? 2
|
|
9977
|
+
: n % 100 >= 3 && n % 100 <= 10
|
|
9978
|
+
? 3
|
|
9979
|
+
: n % 100 >= 11
|
|
9980
|
+
? 4
|
|
9981
|
+
: 5);
|
|
9982
|
+
},
|
|
9983
|
+
6: function (n) {
|
|
9984
|
+
return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);
|
|
9985
|
+
},
|
|
9986
|
+
7: function (n) {
|
|
9987
|
+
return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
|
|
9988
|
+
},
|
|
9989
|
+
8: function (n) {
|
|
9990
|
+
return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);
|
|
9991
|
+
},
|
|
9992
|
+
9: function (n) {
|
|
9993
|
+
return Number(n >= 2);
|
|
9994
|
+
},
|
|
9995
|
+
10: function (n) {
|
|
9996
|
+
return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);
|
|
9997
|
+
},
|
|
9998
|
+
11: function (n) {
|
|
9999
|
+
return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);
|
|
10000
|
+
},
|
|
10001
|
+
12: function (n) {
|
|
10002
|
+
return Number(n % 10 != 1 || n % 100 == 11);
|
|
10003
|
+
},
|
|
10004
|
+
13: function (n) {
|
|
10005
|
+
return Number(n !== 0);
|
|
10006
|
+
},
|
|
10007
|
+
14: function (n) {
|
|
10008
|
+
return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);
|
|
10009
|
+
},
|
|
10010
|
+
15: function (n) {
|
|
10011
|
+
return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
|
|
10012
|
+
},
|
|
10013
|
+
16: function (n) {
|
|
10014
|
+
return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);
|
|
10015
|
+
},
|
|
10016
|
+
17: function (n) {
|
|
10017
|
+
return Number(n == 1 || (n % 10 == 1 && n % 100 != 11) ? 0 : 1);
|
|
10018
|
+
},
|
|
10019
|
+
18: function (n) {
|
|
10020
|
+
return Number(n == 0 ? 0 : n == 1 ? 1 : 2);
|
|
10021
|
+
},
|
|
10022
|
+
19: function (n) {
|
|
10023
|
+
return Number(n == 1
|
|
10024
|
+
? 0
|
|
10025
|
+
: n == 0 || (n % 100 > 1 && n % 100 < 11)
|
|
10026
|
+
? 1
|
|
10027
|
+
: n % 100 > 10 && n % 100 < 20
|
|
10028
|
+
? 2
|
|
10029
|
+
: 3);
|
|
10030
|
+
},
|
|
10031
|
+
20: function (n) {
|
|
10032
|
+
return Number(n == 1 ? 0 : n == 0 || (n % 100 > 0 && n % 100 < 20) ? 1 : 2);
|
|
10033
|
+
},
|
|
10034
|
+
21: function (n) {
|
|
10035
|
+
return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);
|
|
10036
|
+
},
|
|
10037
|
+
22: function (n) {
|
|
10038
|
+
return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);
|
|
10039
|
+
},
|
|
10040
|
+
};
|
|
10041
|
+
function createRules() {
|
|
10042
|
+
const rules = {};
|
|
10043
|
+
sets.forEach((set) => {
|
|
10044
|
+
set.lngs.forEach((l) => {
|
|
10045
|
+
rules[l] = {
|
|
10046
|
+
numbers: set.nr,
|
|
10047
|
+
plurals: _rulesPluralsTypes[set.fc],
|
|
10048
|
+
};
|
|
10049
|
+
});
|
|
10050
|
+
});
|
|
10051
|
+
return rules;
|
|
10052
|
+
}
|
|
10053
|
+
class PluralResolver {
|
|
10054
|
+
constructor(options = {}) {
|
|
10055
|
+
this.options = options;
|
|
10056
|
+
this.rules = createRules();
|
|
10057
|
+
}
|
|
10058
|
+
addRule(lng, obj) {
|
|
10059
|
+
this.rules[lng] = obj;
|
|
10060
|
+
}
|
|
10061
|
+
getRule(code) {
|
|
10062
|
+
return this.rules[code];
|
|
10063
|
+
}
|
|
10064
|
+
needsPlural(code) {
|
|
10065
|
+
const rule = this.getRule(code);
|
|
10066
|
+
return rule && rule.numbers.length > 1;
|
|
10067
|
+
}
|
|
10068
|
+
getPluralFormsOfKey(code, key) {
|
|
10069
|
+
return this.getSuffixes(code).map((suffix) => key + suffix);
|
|
10070
|
+
}
|
|
10071
|
+
getSuffixes(code) {
|
|
10072
|
+
const rule = this.getRule(code);
|
|
10073
|
+
if (!rule) {
|
|
10074
|
+
return [];
|
|
10075
|
+
}
|
|
10076
|
+
return rule.numbers.map((number) => this.getSuffix(code, number));
|
|
10077
|
+
}
|
|
10078
|
+
getSuffix(code, count) {
|
|
10079
|
+
const rule = this.getRule(code);
|
|
10080
|
+
if (rule) {
|
|
10081
|
+
// if (rule.numbers.length === 1) return ''; // only singular
|
|
10082
|
+
const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));
|
|
10083
|
+
let suffix = rule.numbers[idx];
|
|
10084
|
+
// special treatment for lngs only having singular and plural
|
|
10085
|
+
if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {
|
|
10086
|
+
if (suffix === 2) {
|
|
10087
|
+
suffix = 'plural';
|
|
10088
|
+
}
|
|
10089
|
+
else if (suffix === 1) {
|
|
10090
|
+
suffix = '';
|
|
10091
|
+
}
|
|
10092
|
+
}
|
|
10093
|
+
const returnSuffix = () => this.options.prepend && suffix.toString()
|
|
10094
|
+
? this.options.prepend + suffix.toString()
|
|
10095
|
+
: suffix.toString();
|
|
10096
|
+
// COMPATIBILITY JSON
|
|
10097
|
+
// v1
|
|
10098
|
+
if (this.options.compatibilityJSON === 'v1') {
|
|
10099
|
+
if (suffix === 1) {
|
|
10100
|
+
return '';
|
|
10101
|
+
}
|
|
10102
|
+
if (typeof suffix === 'number') {
|
|
10103
|
+
return `_plural_${suffix.toString()}`;
|
|
10104
|
+
}
|
|
10105
|
+
return returnSuffix();
|
|
10106
|
+
}
|
|
10107
|
+
if ( /* v2 */this.options.compatibilityJSON === 'v2') {
|
|
10108
|
+
return returnSuffix();
|
|
10109
|
+
}
|
|
10110
|
+
if (
|
|
10111
|
+
/* v3 - gettext index */ this.options.simplifyPluralSuffix &&
|
|
10112
|
+
rule.numbers.length === 2 &&
|
|
10113
|
+
rule.numbers[0] === 1) {
|
|
10114
|
+
return returnSuffix();
|
|
10115
|
+
}
|
|
10116
|
+
return this.options.prepend && idx.toString()
|
|
10117
|
+
? this.options.prepend + idx.toString()
|
|
10118
|
+
: idx.toString();
|
|
10119
|
+
}
|
|
10120
|
+
// this.logger.warn(`no plural rule found for: ${code}`);
|
|
10121
|
+
return '';
|
|
10122
|
+
}
|
|
10106
10123
|
}
|
|
10107
10124
|
|
|
10108
|
-
const QUICK_START_NAME = 'console.openshift.io/name';
|
|
10109
|
-
const getQuickStartByName = (name, quickStarts) => quickStarts.find((quickStart) => quickStart.metadata.name === name);
|
|
10110
|
-
const getQuickStartStatus = (allQuickStartStates, quickStartID) => { var _a, _b; return (_b = (_a = allQuickStartStates === null || allQuickStartStates === void 0 ? void 0 : allQuickStartStates[quickStartID]) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : QuickStartStatus.NOT_STARTED; };
|
|
10111
|
-
const getTaskStatusKey = (taskNumber) => `taskStatus${taskNumber}`;
|
|
10112
|
-
const getQuickStartStatusCount = (allQuickStartStates, quickStarts) => quickStarts.reduce((totals, item) => {
|
|
10113
|
-
totals[getQuickStartStatus(allQuickStartStates, item.metadata.name)]++;
|
|
10114
|
-
return totals;
|
|
10115
|
-
}, {
|
|
10116
|
-
[QuickStartStatus.IN_PROGRESS]: 0,
|
|
10117
|
-
[QuickStartStatus.COMPLETE]: 0,
|
|
10118
|
-
[QuickStartStatus.NOT_STARTED]: 0,
|
|
10119
|
-
});
|
|
10120
|
-
const getDisabledQuickStarts = () => {
|
|
10121
|
-
var _a, _b;
|
|
10122
|
-
let disabledQuickStarts = [];
|
|
10123
|
-
const quickStartServerData = (_a = window.SERVER_FLAGS) === null || _a === void 0 ? void 0 : _a.quickStarts;
|
|
10124
|
-
try {
|
|
10125
|
-
if (quickStartServerData) {
|
|
10126
|
-
disabledQuickStarts = (_b = JSON.parse(quickStartServerData).disabled) !== null && _b !== void 0 ? _b : [];
|
|
10127
|
-
}
|
|
10128
|
-
}
|
|
10129
|
-
catch (e) {
|
|
10130
|
-
// eslint-disable-next-line no-console
|
|
10131
|
-
console.error('error while parsing SERVER_FLAG.quickStarts', e);
|
|
10132
|
-
}
|
|
10133
|
-
return disabledQuickStarts;
|
|
10134
|
-
};
|
|
10135
|
-
const isDisabledQuickStart = (quickstart, disabledQuickStarts) => {
|
|
10136
|
-
var _a, _b;
|
|
10137
|
-
const quickStartName = (_b = (_a = quickstart.metadata.annotations) === null || _a === void 0 ? void 0 : _a[QUICK_START_NAME]) !== null && _b !== void 0 ? _b : quickstart.metadata.name;
|
|
10138
|
-
return disabledQuickStarts.includes(quickStartName);
|
|
10139
|
-
};
|
|
10140
|
-
const filterQuickStarts = (quickStarts, filterText, statusFilters, allQuickStartStates) => {
|
|
10141
|
-
const searchText = filterText.toLowerCase();
|
|
10142
|
-
return quickStarts.filter(({ metadata: { name }, spec: { displayName, prerequisites = [], description } }) => {
|
|
10143
|
-
const matchesFilter = statusFilters.length > 0
|
|
10144
|
-
? statusFilters.includes(getQuickStartStatus(allQuickStartStates, name))
|
|
10145
|
-
: true;
|
|
10146
|
-
const matchesText = displayName.toLowerCase().includes(searchText) ||
|
|
10147
|
-
description.toLowerCase().includes(searchText) ||
|
|
10148
|
-
prerequisites.some((text) => text.toLowerCase().includes(searchText));
|
|
10149
|
-
return matchesFilter && matchesText;
|
|
10150
|
-
});
|
|
10151
|
-
};
|
|
10152
|
-
const camelize = (str) => str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) {
|
|
10153
|
-
if (+match === 0) {
|
|
10154
|
-
return '';
|
|
10155
|
-
} // or if (/\s+/.test(match)) for white spaces
|
|
10156
|
-
return index === 0 ? match.toLowerCase() : match.toUpperCase();
|
|
10125
|
+
const QUICK_START_NAME = 'console.openshift.io/name';
|
|
10126
|
+
const getQuickStartByName = (name, quickStarts) => quickStarts.find((quickStart) => quickStart.metadata.name === name);
|
|
10127
|
+
const getQuickStartStatus = (allQuickStartStates, quickStartID) => { var _a, _b; return (_b = (_a = allQuickStartStates === null || allQuickStartStates === void 0 ? void 0 : allQuickStartStates[quickStartID]) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : QuickStartStatus.NOT_STARTED; };
|
|
10128
|
+
const getTaskStatusKey = (taskNumber) => `taskStatus${taskNumber}`;
|
|
10129
|
+
const getQuickStartStatusCount = (allQuickStartStates, quickStarts) => quickStarts.reduce((totals, item) => {
|
|
10130
|
+
totals[getQuickStartStatus(allQuickStartStates, item.metadata.name)]++;
|
|
10131
|
+
return totals;
|
|
10132
|
+
}, {
|
|
10133
|
+
[QuickStartStatus.IN_PROGRESS]: 0,
|
|
10134
|
+
[QuickStartStatus.COMPLETE]: 0,
|
|
10135
|
+
[QuickStartStatus.NOT_STARTED]: 0,
|
|
10136
|
+
});
|
|
10137
|
+
const getDisabledQuickStarts = () => {
|
|
10138
|
+
var _a, _b;
|
|
10139
|
+
let disabledQuickStarts = [];
|
|
10140
|
+
const quickStartServerData = (_a = window.SERVER_FLAGS) === null || _a === void 0 ? void 0 : _a.quickStarts;
|
|
10141
|
+
try {
|
|
10142
|
+
if (quickStartServerData) {
|
|
10143
|
+
disabledQuickStarts = (_b = JSON.parse(quickStartServerData).disabled) !== null && _b !== void 0 ? _b : [];
|
|
10144
|
+
}
|
|
10145
|
+
}
|
|
10146
|
+
catch (e) {
|
|
10147
|
+
// eslint-disable-next-line no-console
|
|
10148
|
+
console.error('error while parsing SERVER_FLAG.quickStarts', e);
|
|
10149
|
+
}
|
|
10150
|
+
return disabledQuickStarts;
|
|
10151
|
+
};
|
|
10152
|
+
const isDisabledQuickStart = (quickstart, disabledQuickStarts) => {
|
|
10153
|
+
var _a, _b;
|
|
10154
|
+
const quickStartName = (_b = (_a = quickstart.metadata.annotations) === null || _a === void 0 ? void 0 : _a[QUICK_START_NAME]) !== null && _b !== void 0 ? _b : quickstart.metadata.name;
|
|
10155
|
+
return disabledQuickStarts.includes(quickStartName);
|
|
10156
|
+
};
|
|
10157
|
+
const filterQuickStarts = (quickStarts, filterText, statusFilters, allQuickStartStates) => {
|
|
10158
|
+
const searchText = filterText.toLowerCase();
|
|
10159
|
+
return quickStarts.filter(({ metadata: { name }, spec: { displayName, prerequisites = [], description } }) => {
|
|
10160
|
+
const matchesFilter = statusFilters.length > 0
|
|
10161
|
+
? statusFilters.includes(getQuickStartStatus(allQuickStartStates, name))
|
|
10162
|
+
: true;
|
|
10163
|
+
const matchesText = displayName.toLowerCase().includes(searchText) ||
|
|
10164
|
+
description.toLowerCase().includes(searchText) ||
|
|
10165
|
+
prerequisites.some((text) => text.toLowerCase().includes(searchText));
|
|
10166
|
+
return matchesFilter && matchesText;
|
|
10167
|
+
});
|
|
10168
|
+
};
|
|
10169
|
+
const camelize = (str) => str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) {
|
|
10170
|
+
if (+match === 0) {
|
|
10171
|
+
return '';
|
|
10172
|
+
} // or if (/\s+/.test(match)) for white spaces
|
|
10173
|
+
return index === 0 ? match.toLowerCase() : match.toUpperCase();
|
|
10157
10174
|
});
|
|
10158
10175
|
|
|
10159
|
-
const pluralResolver = new PluralResolver({ simplifyPluralSuffix: true });
|
|
10160
|
-
const getDefaultQuickStartState = (totalTasks, initialStatus) => {
|
|
10161
|
-
const defaultQuickStartState = {
|
|
10162
|
-
status: initialStatus || QuickStartStatus.NOT_STARTED,
|
|
10163
|
-
taskNumber: -1,
|
|
10164
|
-
};
|
|
10165
|
-
if (totalTasks) {
|
|
10166
|
-
for (let i = 0; i < totalTasks; i++) {
|
|
10167
|
-
defaultQuickStartState[getTaskStatusKey(i)] = QuickStartTaskStatus.INIT;
|
|
10168
|
-
}
|
|
10169
|
-
}
|
|
10170
|
-
return defaultQuickStartState;
|
|
10171
|
-
};
|
|
10172
|
-
const QuickStartContextDefaults = {
|
|
10173
|
-
allQuickStarts: [],
|
|
10174
|
-
activeQuickStartID: '',
|
|
10175
|
-
allQuickStartStates: {},
|
|
10176
|
-
activeQuickStartState: {},
|
|
10177
|
-
setAllQuickStarts: () => { },
|
|
10178
|
-
resourceBundle: en,
|
|
10179
|
-
getResource: (resource) => resource,
|
|
10180
|
-
language: 'en',
|
|
10181
|
-
useQueryParams: true,
|
|
10182
|
-
filter: {
|
|
10183
|
-
keyword: '',
|
|
10184
|
-
status: {
|
|
10185
|
-
statusTypes: {},
|
|
10186
|
-
statusFilters: [],
|
|
10187
|
-
},
|
|
10188
|
-
},
|
|
10189
|
-
setFilter: () => { },
|
|
10190
|
-
footer: null,
|
|
10191
|
-
useLegacyHeaderColors: false,
|
|
10192
|
-
markdown: null,
|
|
10193
|
-
loading: false,
|
|
10194
|
-
alwaysShowTaskReview: true,
|
|
10195
|
-
};
|
|
10196
|
-
const QuickStartContext = createContext(QuickStartContextDefaults);
|
|
10197
|
-
const getResource = (resource, options, resourceBundle, lng) => {
|
|
10198
|
-
if (options && !isNaN(options.count)) {
|
|
10199
|
-
const suffix = pluralResolver.getSuffix(lng, options.count);
|
|
10200
|
-
if (suffix && resourceBundle[`${resource}_${suffix}`]) {
|
|
10201
|
-
// needs plural
|
|
10202
|
-
return resourceBundle[`${resource}_${suffix}`];
|
|
10203
|
-
}
|
|
10204
|
-
}
|
|
10205
|
-
return (resourceBundle && resourceBundle[resource]) || resource;
|
|
10206
|
-
};
|
|
10207
|
-
const useValuesForQuickStartContext = (value = {}) => {
|
|
10208
|
-
var _a, _b;
|
|
10209
|
-
const combinedValue = Object.assign(Object.assign({}, QuickStartContextDefaults), value);
|
|
10210
|
-
const { activeQuickStartID, setActiveQuickStartID, setAllQuickStartStates, useQueryParams, allQuickStartStates, allQuickStarts = [], footer, useLegacyHeaderColors, markdown, } = combinedValue;
|
|
10211
|
-
const [quickStarts, setQuickStarts] = React__default.useState(combinedValue.allQuickStarts || []);
|
|
10212
|
-
const [resourceBundle, setResourceBundle] = React__default.useState(Object.assign(Object.assign({}, en), combinedValue.resourceBundle));
|
|
10213
|
-
const [language, setLanguage] = React__default.useState(combinedValue.language);
|
|
10214
|
-
const changeResourceBundle = (bundle, lng) => {
|
|
10215
|
-
lng && setLanguage(lng);
|
|
10216
|
-
setResourceBundle(Object.assign(Object.assign({}, en), bundle));
|
|
10217
|
-
};
|
|
10218
|
-
const findResource = useCallback((resource, count) => getResource(resource, count !== undefined ? { count } : null, resourceBundle, language), [resourceBundle, language]);
|
|
10219
|
-
const [loading, setLoading] = React__default.useState(combinedValue.loading);
|
|
10220
|
-
const [alwaysShowTaskReview, setAlwaysShowTaskReview] = React__default.useState(combinedValue.alwaysShowTaskReview);
|
|
10221
|
-
const initialSearchParams = new URLSearchParams(window.location.search);
|
|
10222
|
-
const initialSearchQuery = initialSearchParams.get(QUICKSTART_SEARCH_FILTER_KEY) || '';
|
|
10223
|
-
const initialStatusFilters = ((_a = initialSearchParams.get(QUICKSTART_STATUS_FILTER_KEY)) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
|
|
10224
|
-
const quickStartStatusCount = getQuickStartStatusCount(allQuickStartStates, allQuickStarts);
|
|
10225
|
-
const [statusTypes, setStatusTypes] = React__default.useState({
|
|
10226
|
-
[QuickStartStatus.COMPLETE]: findResource('Complete ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[QuickStartStatus.COMPLETE]),
|
|
10227
|
-
[QuickStartStatus.IN_PROGRESS]: findResource('In progress ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[QuickStartStatus.IN_PROGRESS]),
|
|
10228
|
-
[QuickStartStatus.NOT_STARTED]: findResource('Not started ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[QuickStartStatus.NOT_STARTED]),
|
|
10229
|
-
});
|
|
10230
|
-
const [statusFilters, setStatusFilters] = React__default.useState(initialStatusFilters);
|
|
10231
|
-
const [filterKeyword, setFilterKeyword] = React__default.useState(initialSearchQuery);
|
|
10232
|
-
const setFilter = (type, val) => {
|
|
10233
|
-
if (type === 'keyword') {
|
|
10234
|
-
setFilterKeyword(val);
|
|
10235
|
-
}
|
|
10236
|
-
else if (type === 'status') {
|
|
10237
|
-
setStatusFilters(val);
|
|
10238
|
-
}
|
|
10239
|
-
};
|
|
10240
|
-
React__default.useEffect(() => {
|
|
10241
|
-
const updatedQuickStartStatusCount = getQuickStartStatusCount(allQuickStartStates, quickStarts);
|
|
10242
|
-
setStatusTypes({
|
|
10243
|
-
[QuickStartStatus.COMPLETE]: findResource('Complete ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[QuickStartStatus.COMPLETE]),
|
|
10244
|
-
[QuickStartStatus.IN_PROGRESS]: findResource('In progress ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[QuickStartStatus.IN_PROGRESS]),
|
|
10245
|
-
[QuickStartStatus.NOT_STARTED]: findResource('Not started ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[QuickStartStatus.NOT_STARTED]),
|
|
10246
|
-
});
|
|
10247
|
-
}, [allQuickStartStates, findResource, quickStarts]);
|
|
10248
|
-
const updateAllQuickStarts = (qs) => {
|
|
10249
|
-
setQuickStarts(qs);
|
|
10250
|
-
};
|
|
10251
|
-
const setActiveQuickStart = useCallback((quickStartId, totalTasks) => {
|
|
10252
|
-
setActiveQuickStartID((id) => {
|
|
10253
|
-
if (!quickStartId || id === quickStartId) {
|
|
10254
|
-
useQueryParams && removeQueryArgument(QUICKSTART_ID_FILTER_KEY);
|
|
10255
|
-
return '';
|
|
10256
|
-
}
|
|
10257
|
-
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
10258
|
-
return quickStartId;
|
|
10259
|
-
});
|
|
10260
|
-
setAllQuickStartStates((qs) => !quickStartId || qs[quickStartId]
|
|
10261
|
-
? qs
|
|
10262
|
-
: Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks) }));
|
|
10263
|
-
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
10264
|
-
const startQuickStart = useCallback((quickStartId, totalTasks) => {
|
|
10265
|
-
setActiveQuickStartID((id) => {
|
|
10266
|
-
if (!id || id !== quickStartId) {
|
|
10267
|
-
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
10268
|
-
return quickStartId;
|
|
10269
|
-
}
|
|
10270
|
-
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, id);
|
|
10271
|
-
return id;
|
|
10272
|
-
});
|
|
10273
|
-
setAllQuickStartStates((qs) => {
|
|
10274
|
-
if (qs.hasOwnProperty(quickStartId)) {
|
|
10275
|
-
return Object.assign(Object.assign({}, qs), { [quickStartId]: Object.assign(Object.assign({}, qs[quickStartId]), { status: QuickStartStatus.IN_PROGRESS }) });
|
|
10276
|
-
}
|
|
10277
|
-
return Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks, QuickStartStatus.IN_PROGRESS) });
|
|
10278
|
-
});
|
|
10279
|
-
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
10280
|
-
const restartQuickStart = useCallback((quickStartId, totalTasks) => {
|
|
10281
|
-
setActiveQuickStartID((id) => {
|
|
10282
|
-
if (!id || id !== quickStartId) {
|
|
10283
|
-
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
10284
|
-
return quickStartId;
|
|
10285
|
-
}
|
|
10286
|
-
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, id);
|
|
10287
|
-
return id;
|
|
10288
|
-
});
|
|
10289
|
-
setAllQuickStartStates((qs) => (Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks, QuickStartStatus.NOT_STARTED) })));
|
|
10290
|
-
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
10291
|
-
// When alwaysShowTaskReview preference is enabled, skip visited step and go directly to review
|
|
10292
|
-
const stepAfterInitial = alwaysShowTaskReview
|
|
10293
|
-
? QuickStartTaskStatus.REVIEW
|
|
10294
|
-
: QuickStartTaskStatus.VISITED;
|
|
10295
|
-
const nextStep = useCallback((totalTasks) => {
|
|
10296
|
-
if (!activeQuickStartID) {
|
|
10297
|
-
return;
|
|
10298
|
-
}
|
|
10299
|
-
setAllQuickStartStates((qs) => {
|
|
10300
|
-
const quickStart = qs[activeQuickStartID];
|
|
10301
|
-
const status = quickStart === null || quickStart === void 0 ? void 0 : quickStart.status;
|
|
10302
|
-
const taskNumber = quickStart === null || quickStart === void 0 ? void 0 : quickStart.taskNumber;
|
|
10303
|
-
const taskStatus = quickStart[getTaskStatusKey(taskNumber)];
|
|
10304
|
-
let updatedStatus;
|
|
10305
|
-
let updatedTaskNumber;
|
|
10306
|
-
let updatedTaskStatus;
|
|
10307
|
-
if (status === QuickStartStatus.NOT_STARTED) {
|
|
10308
|
-
updatedStatus = QuickStartStatus.IN_PROGRESS;
|
|
10309
|
-
}
|
|
10310
|
-
else if (status === QuickStartStatus.IN_PROGRESS &&
|
|
10311
|
-
!QUICKSTART_TASKS_INITIAL_STATES.includes(taskStatus) &&
|
|
10312
|
-
taskNumber === totalTasks - 1) {
|
|
10313
|
-
updatedStatus = QuickStartStatus.COMPLETE;
|
|
10314
|
-
}
|
|
10315
|
-
if (taskStatus === QuickStartTaskStatus.VISITED) {
|
|
10316
|
-
updatedTaskStatus = QuickStartTaskStatus.REVIEW;
|
|
10317
|
-
}
|
|
10318
|
-
if (taskNumber < totalTasks && !updatedTaskStatus) {
|
|
10319
|
-
updatedTaskNumber = taskNumber + 1;
|
|
10320
|
-
}
|
|
10321
|
-
const markInitialStepVisitedOrReview = updatedTaskNumber > -1 &&
|
|
10322
|
-
quickStart[getTaskStatusKey(updatedTaskNumber)] === QuickStartTaskStatus.INIT
|
|
10323
|
-
? stepAfterInitial
|
|
10324
|
-
: quickStart[getTaskStatusKey(updatedTaskNumber)];
|
|
10325
|
-
const newState = Object.assign(Object.assign({}, qs), { [activeQuickStartID]: Object.assign(Object.assign(Object.assign(Object.assign({}, quickStart), (updatedStatus ? { status: updatedStatus } : {})), (updatedTaskNumber > -1
|
|
10326
|
-
? {
|
|
10327
|
-
taskNumber: updatedTaskNumber,
|
|
10328
|
-
[getTaskStatusKey(updatedTaskNumber)]: markInitialStepVisitedOrReview,
|
|
10329
|
-
}
|
|
10330
|
-
: {})), (updatedTaskStatus ? { [getTaskStatusKey(taskNumber)]: updatedTaskStatus } : {})) });
|
|
10331
|
-
return newState;
|
|
10332
|
-
});
|
|
10333
|
-
}, [activeQuickStartID, setAllQuickStartStates, stepAfterInitial]);
|
|
10334
|
-
const previousStep = useCallback(() => {
|
|
10335
|
-
setAllQuickStartStates((qs) => {
|
|
10336
|
-
const quickStart = qs[activeQuickStartID];
|
|
10337
|
-
const taskNumber = quickStart === null || quickStart === void 0 ? void 0 : quickStart.taskNumber;
|
|
10338
|
-
if (taskNumber < 0) {
|
|
10339
|
-
return qs;
|
|
10340
|
-
}
|
|
10341
|
-
return Object.assign(Object.assign({}, qs), { [activeQuickStartID]: Object.assign(Object.assign({}, quickStart), { taskNumber: taskNumber - 1 }) });
|
|
10342
|
-
});
|
|
10343
|
-
}, [activeQuickStartID, setAllQuickStartStates]);
|
|
10344
|
-
const setQuickStartTaskNumber = useCallback((quickStartId, taskNumber) => {
|
|
10345
|
-
setAllQuickStartStates((qs) => {
|
|
10346
|
-
const quickStart = qs[quickStartId];
|
|
10347
|
-
const status = quickStart === null || quickStart === void 0 ? void 0 : quickStart.status;
|
|
10348
|
-
let updatedStatus;
|
|
10349
|
-
if (taskNumber > -1 && status === QuickStartStatus.NOT_STARTED) {
|
|
10350
|
-
updatedStatus = QuickStartStatus.IN_PROGRESS;
|
|
10351
|
-
}
|
|
10352
|
-
let updatedTaskStatus = {};
|
|
10353
|
-
for (let taskIndex = 0; taskIndex <= taskNumber; taskIndex++) {
|
|
10354
|
-
const taskStatus = quickStart[getTaskStatusKey(taskIndex)];
|
|
10355
|
-
const newTaskStatus = taskStatus === QuickStartTaskStatus.INIT ? stepAfterInitial : undefined;
|
|
10356
|
-
if (newTaskStatus) {
|
|
10357
|
-
updatedTaskStatus = Object.assign(Object.assign({}, updatedTaskStatus), { [getTaskStatusKey(taskIndex)]: newTaskStatus });
|
|
10358
|
-
}
|
|
10359
|
-
}
|
|
10360
|
-
const updatedQuickStart = Object.assign(Object.assign(Object.assign(Object.assign({}, quickStart), (updatedStatus ? { status: updatedStatus } : {})), { taskNumber }), updatedTaskStatus);
|
|
10361
|
-
return Object.assign(Object.assign({}, qs), { [quickStartId]: updatedQuickStart });
|
|
10362
|
-
});
|
|
10363
|
-
}, [setAllQuickStartStates, stepAfterInitial]);
|
|
10364
|
-
const setQuickStartTaskStatus = useCallback((taskStatus) => {
|
|
10365
|
-
const quickStart = allQuickStartStates[activeQuickStartID];
|
|
10366
|
-
const { taskNumber } = quickStart;
|
|
10367
|
-
const updatedQuickStart = Object.assign(Object.assign({}, quickStart), { [getTaskStatusKey(taskNumber)]: taskStatus });
|
|
10368
|
-
setAllQuickStartStates((qs) => (Object.assign(Object.assign({}, qs), { [activeQuickStartID]: updatedQuickStart })));
|
|
10369
|
-
}, [allQuickStartStates, activeQuickStartID, setAllQuickStartStates]);
|
|
10370
|
-
const activeQuickStartState = (_b = allQuickStartStates === null || allQuickStartStates === void 0 ? void 0 : allQuickStartStates[activeQuickStartID]) !== null && _b !== void 0 ? _b : {};
|
|
10371
|
-
const getQuickStartForId = useCallback((id) => allQuickStartStates[id], [
|
|
10372
|
-
allQuickStartStates,
|
|
10373
|
-
]);
|
|
10374
|
-
return {
|
|
10375
|
-
allQuickStarts: quickStarts,
|
|
10376
|
-
setAllQuickStarts: updateAllQuickStarts,
|
|
10377
|
-
activeQuickStartID,
|
|
10378
|
-
setActiveQuickStartID,
|
|
10379
|
-
allQuickStartStates,
|
|
10380
|
-
setAllQuickStartStates,
|
|
10381
|
-
activeQuickStartState,
|
|
10382
|
-
setActiveQuickStart: value.setActiveQuickStart || setActiveQuickStart,
|
|
10383
|
-
startQuickStart: value.startQuickStart || startQuickStart,
|
|
10384
|
-
restartQuickStart: value.restartQuickStart || restartQuickStart,
|
|
10385
|
-
nextStep: value.nextStep || nextStep,
|
|
10386
|
-
previousStep: value.previousStep || previousStep,
|
|
10387
|
-
setQuickStartTaskNumber,
|
|
10388
|
-
setQuickStartTaskStatus,
|
|
10389
|
-
getQuickStartForId,
|
|
10390
|
-
footer,
|
|
10391
|
-
useLegacyHeaderColors,
|
|
10392
|
-
useQueryParams,
|
|
10393
|
-
markdown,
|
|
10394
|
-
resourceBundle,
|
|
10395
|
-
getResource: findResource,
|
|
10396
|
-
setResourceBundle: changeResourceBundle,
|
|
10397
|
-
language,
|
|
10398
|
-
setLanguage,
|
|
10399
|
-
// revisit if this should be in public context API
|
|
10400
|
-
filter: {
|
|
10401
|
-
keyword: filterKeyword,
|
|
10402
|
-
status: {
|
|
10403
|
-
statusTypes,
|
|
10404
|
-
statusFilters,
|
|
10405
|
-
},
|
|
10406
|
-
},
|
|
10407
|
-
setFilter,
|
|
10408
|
-
loading,
|
|
10409
|
-
setLoading,
|
|
10410
|
-
alwaysShowTaskReview,
|
|
10411
|
-
setAlwaysShowTaskReview,
|
|
10412
|
-
};
|
|
10413
|
-
};
|
|
10176
|
+
const pluralResolver = new PluralResolver({ simplifyPluralSuffix: true });
|
|
10177
|
+
const getDefaultQuickStartState = (totalTasks, initialStatus) => {
|
|
10178
|
+
const defaultQuickStartState = {
|
|
10179
|
+
status: initialStatus || QuickStartStatus.NOT_STARTED,
|
|
10180
|
+
taskNumber: -1,
|
|
10181
|
+
};
|
|
10182
|
+
if (totalTasks) {
|
|
10183
|
+
for (let i = 0; i < totalTasks; i++) {
|
|
10184
|
+
defaultQuickStartState[getTaskStatusKey(i)] = QuickStartTaskStatus.INIT;
|
|
10185
|
+
}
|
|
10186
|
+
}
|
|
10187
|
+
return defaultQuickStartState;
|
|
10188
|
+
};
|
|
10189
|
+
const QuickStartContextDefaults = {
|
|
10190
|
+
allQuickStarts: [],
|
|
10191
|
+
activeQuickStartID: '',
|
|
10192
|
+
allQuickStartStates: {},
|
|
10193
|
+
activeQuickStartState: {},
|
|
10194
|
+
setAllQuickStarts: () => { },
|
|
10195
|
+
resourceBundle: en,
|
|
10196
|
+
getResource: (resource) => resource,
|
|
10197
|
+
language: 'en',
|
|
10198
|
+
useQueryParams: true,
|
|
10199
|
+
filter: {
|
|
10200
|
+
keyword: '',
|
|
10201
|
+
status: {
|
|
10202
|
+
statusTypes: {},
|
|
10203
|
+
statusFilters: [],
|
|
10204
|
+
},
|
|
10205
|
+
},
|
|
10206
|
+
setFilter: () => { },
|
|
10207
|
+
footer: null,
|
|
10208
|
+
useLegacyHeaderColors: false,
|
|
10209
|
+
markdown: null,
|
|
10210
|
+
loading: false,
|
|
10211
|
+
alwaysShowTaskReview: true,
|
|
10212
|
+
};
|
|
10213
|
+
const QuickStartContext = createContext(QuickStartContextDefaults);
|
|
10214
|
+
const getResource = (resource, options, resourceBundle, lng) => {
|
|
10215
|
+
if (options && !isNaN(options.count)) {
|
|
10216
|
+
const suffix = pluralResolver.getSuffix(lng, options.count);
|
|
10217
|
+
if (suffix && resourceBundle[`${resource}_${suffix}`]) {
|
|
10218
|
+
// needs plural
|
|
10219
|
+
return resourceBundle[`${resource}_${suffix}`];
|
|
10220
|
+
}
|
|
10221
|
+
}
|
|
10222
|
+
return (resourceBundle && resourceBundle[resource]) || resource;
|
|
10223
|
+
};
|
|
10224
|
+
const useValuesForQuickStartContext = (value = {}) => {
|
|
10225
|
+
var _a, _b;
|
|
10226
|
+
const combinedValue = Object.assign(Object.assign({}, QuickStartContextDefaults), value);
|
|
10227
|
+
const { activeQuickStartID, setActiveQuickStartID, setAllQuickStartStates, useQueryParams, allQuickStartStates, allQuickStarts = [], footer, useLegacyHeaderColors, markdown, } = combinedValue;
|
|
10228
|
+
const [quickStarts, setQuickStarts] = React__default.useState(combinedValue.allQuickStarts || []);
|
|
10229
|
+
const [resourceBundle, setResourceBundle] = React__default.useState(Object.assign(Object.assign({}, en), combinedValue.resourceBundle));
|
|
10230
|
+
const [language, setLanguage] = React__default.useState(combinedValue.language);
|
|
10231
|
+
const changeResourceBundle = (bundle, lng) => {
|
|
10232
|
+
lng && setLanguage(lng);
|
|
10233
|
+
setResourceBundle(Object.assign(Object.assign({}, en), bundle));
|
|
10234
|
+
};
|
|
10235
|
+
const findResource = useCallback((resource, count) => getResource(resource, count !== undefined ? { count } : null, resourceBundle, language), [resourceBundle, language]);
|
|
10236
|
+
const [loading, setLoading] = React__default.useState(combinedValue.loading);
|
|
10237
|
+
const [alwaysShowTaskReview, setAlwaysShowTaskReview] = React__default.useState(combinedValue.alwaysShowTaskReview);
|
|
10238
|
+
const initialSearchParams = new URLSearchParams(window.location.search);
|
|
10239
|
+
const initialSearchQuery = initialSearchParams.get(QUICKSTART_SEARCH_FILTER_KEY) || '';
|
|
10240
|
+
const initialStatusFilters = ((_a = initialSearchParams.get(QUICKSTART_STATUS_FILTER_KEY)) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
|
|
10241
|
+
const quickStartStatusCount = getQuickStartStatusCount(allQuickStartStates, allQuickStarts);
|
|
10242
|
+
const [statusTypes, setStatusTypes] = React__default.useState({
|
|
10243
|
+
[QuickStartStatus.COMPLETE]: findResource('Complete ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[QuickStartStatus.COMPLETE]),
|
|
10244
|
+
[QuickStartStatus.IN_PROGRESS]: findResource('In progress ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[QuickStartStatus.IN_PROGRESS]),
|
|
10245
|
+
[QuickStartStatus.NOT_STARTED]: findResource('Not started ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[QuickStartStatus.NOT_STARTED]),
|
|
10246
|
+
});
|
|
10247
|
+
const [statusFilters, setStatusFilters] = React__default.useState(initialStatusFilters);
|
|
10248
|
+
const [filterKeyword, setFilterKeyword] = React__default.useState(initialSearchQuery);
|
|
10249
|
+
const setFilter = (type, val) => {
|
|
10250
|
+
if (type === 'keyword') {
|
|
10251
|
+
setFilterKeyword(val);
|
|
10252
|
+
}
|
|
10253
|
+
else if (type === 'status') {
|
|
10254
|
+
setStatusFilters(val);
|
|
10255
|
+
}
|
|
10256
|
+
};
|
|
10257
|
+
React__default.useEffect(() => {
|
|
10258
|
+
const updatedQuickStartStatusCount = getQuickStartStatusCount(allQuickStartStates, quickStarts);
|
|
10259
|
+
setStatusTypes({
|
|
10260
|
+
[QuickStartStatus.COMPLETE]: findResource('Complete ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[QuickStartStatus.COMPLETE]),
|
|
10261
|
+
[QuickStartStatus.IN_PROGRESS]: findResource('In progress ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[QuickStartStatus.IN_PROGRESS]),
|
|
10262
|
+
[QuickStartStatus.NOT_STARTED]: findResource('Not started ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[QuickStartStatus.NOT_STARTED]),
|
|
10263
|
+
});
|
|
10264
|
+
}, [allQuickStartStates, findResource, quickStarts]);
|
|
10265
|
+
const updateAllQuickStarts = (qs) => {
|
|
10266
|
+
setQuickStarts(qs);
|
|
10267
|
+
};
|
|
10268
|
+
const setActiveQuickStart = useCallback((quickStartId, totalTasks) => {
|
|
10269
|
+
setActiveQuickStartID((id) => {
|
|
10270
|
+
if (!quickStartId || id === quickStartId) {
|
|
10271
|
+
useQueryParams && removeQueryArgument(QUICKSTART_ID_FILTER_KEY);
|
|
10272
|
+
return '';
|
|
10273
|
+
}
|
|
10274
|
+
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
10275
|
+
return quickStartId;
|
|
10276
|
+
});
|
|
10277
|
+
setAllQuickStartStates((qs) => !quickStartId || qs[quickStartId]
|
|
10278
|
+
? qs
|
|
10279
|
+
: Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks) }));
|
|
10280
|
+
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
10281
|
+
const startQuickStart = useCallback((quickStartId, totalTasks) => {
|
|
10282
|
+
setActiveQuickStartID((id) => {
|
|
10283
|
+
if (!id || id !== quickStartId) {
|
|
10284
|
+
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
10285
|
+
return quickStartId;
|
|
10286
|
+
}
|
|
10287
|
+
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, id);
|
|
10288
|
+
return id;
|
|
10289
|
+
});
|
|
10290
|
+
setAllQuickStartStates((qs) => {
|
|
10291
|
+
if (qs.hasOwnProperty(quickStartId)) {
|
|
10292
|
+
return Object.assign(Object.assign({}, qs), { [quickStartId]: Object.assign(Object.assign({}, qs[quickStartId]), { status: QuickStartStatus.IN_PROGRESS }) });
|
|
10293
|
+
}
|
|
10294
|
+
return Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks, QuickStartStatus.IN_PROGRESS) });
|
|
10295
|
+
});
|
|
10296
|
+
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
10297
|
+
const restartQuickStart = useCallback((quickStartId, totalTasks) => {
|
|
10298
|
+
setActiveQuickStartID((id) => {
|
|
10299
|
+
if (!id || id !== quickStartId) {
|
|
10300
|
+
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
10301
|
+
return quickStartId;
|
|
10302
|
+
}
|
|
10303
|
+
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, id);
|
|
10304
|
+
return id;
|
|
10305
|
+
});
|
|
10306
|
+
setAllQuickStartStates((qs) => (Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks, QuickStartStatus.NOT_STARTED) })));
|
|
10307
|
+
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
10308
|
+
// When alwaysShowTaskReview preference is enabled, skip visited step and go directly to review
|
|
10309
|
+
const stepAfterInitial = alwaysShowTaskReview
|
|
10310
|
+
? QuickStartTaskStatus.REVIEW
|
|
10311
|
+
: QuickStartTaskStatus.VISITED;
|
|
10312
|
+
const nextStep = useCallback((totalTasks) => {
|
|
10313
|
+
if (!activeQuickStartID) {
|
|
10314
|
+
return;
|
|
10315
|
+
}
|
|
10316
|
+
setAllQuickStartStates((qs) => {
|
|
10317
|
+
const quickStart = qs[activeQuickStartID];
|
|
10318
|
+
const status = quickStart === null || quickStart === void 0 ? void 0 : quickStart.status;
|
|
10319
|
+
const taskNumber = quickStart === null || quickStart === void 0 ? void 0 : quickStart.taskNumber;
|
|
10320
|
+
const taskStatus = quickStart[getTaskStatusKey(taskNumber)];
|
|
10321
|
+
let updatedStatus;
|
|
10322
|
+
let updatedTaskNumber;
|
|
10323
|
+
let updatedTaskStatus;
|
|
10324
|
+
if (status === QuickStartStatus.NOT_STARTED) {
|
|
10325
|
+
updatedStatus = QuickStartStatus.IN_PROGRESS;
|
|
10326
|
+
}
|
|
10327
|
+
else if (status === QuickStartStatus.IN_PROGRESS &&
|
|
10328
|
+
!QUICKSTART_TASKS_INITIAL_STATES.includes(taskStatus) &&
|
|
10329
|
+
taskNumber === totalTasks - 1) {
|
|
10330
|
+
updatedStatus = QuickStartStatus.COMPLETE;
|
|
10331
|
+
}
|
|
10332
|
+
if (taskStatus === QuickStartTaskStatus.VISITED) {
|
|
10333
|
+
updatedTaskStatus = QuickStartTaskStatus.REVIEW;
|
|
10334
|
+
}
|
|
10335
|
+
if (taskNumber < totalTasks && !updatedTaskStatus) {
|
|
10336
|
+
updatedTaskNumber = taskNumber + 1;
|
|
10337
|
+
}
|
|
10338
|
+
const markInitialStepVisitedOrReview = updatedTaskNumber > -1 &&
|
|
10339
|
+
quickStart[getTaskStatusKey(updatedTaskNumber)] === QuickStartTaskStatus.INIT
|
|
10340
|
+
? stepAfterInitial
|
|
10341
|
+
: quickStart[getTaskStatusKey(updatedTaskNumber)];
|
|
10342
|
+
const newState = Object.assign(Object.assign({}, qs), { [activeQuickStartID]: Object.assign(Object.assign(Object.assign(Object.assign({}, quickStart), (updatedStatus ? { status: updatedStatus } : {})), (updatedTaskNumber > -1
|
|
10343
|
+
? {
|
|
10344
|
+
taskNumber: updatedTaskNumber,
|
|
10345
|
+
[getTaskStatusKey(updatedTaskNumber)]: markInitialStepVisitedOrReview,
|
|
10346
|
+
}
|
|
10347
|
+
: {})), (updatedTaskStatus ? { [getTaskStatusKey(taskNumber)]: updatedTaskStatus } : {})) });
|
|
10348
|
+
return newState;
|
|
10349
|
+
});
|
|
10350
|
+
}, [activeQuickStartID, setAllQuickStartStates, stepAfterInitial]);
|
|
10351
|
+
const previousStep = useCallback(() => {
|
|
10352
|
+
setAllQuickStartStates((qs) => {
|
|
10353
|
+
const quickStart = qs[activeQuickStartID];
|
|
10354
|
+
const taskNumber = quickStart === null || quickStart === void 0 ? void 0 : quickStart.taskNumber;
|
|
10355
|
+
if (taskNumber < 0) {
|
|
10356
|
+
return qs;
|
|
10357
|
+
}
|
|
10358
|
+
return Object.assign(Object.assign({}, qs), { [activeQuickStartID]: Object.assign(Object.assign({}, quickStart), { taskNumber: taskNumber - 1 }) });
|
|
10359
|
+
});
|
|
10360
|
+
}, [activeQuickStartID, setAllQuickStartStates]);
|
|
10361
|
+
const setQuickStartTaskNumber = useCallback((quickStartId, taskNumber) => {
|
|
10362
|
+
setAllQuickStartStates((qs) => {
|
|
10363
|
+
const quickStart = qs[quickStartId];
|
|
10364
|
+
const status = quickStart === null || quickStart === void 0 ? void 0 : quickStart.status;
|
|
10365
|
+
let updatedStatus;
|
|
10366
|
+
if (taskNumber > -1 && status === QuickStartStatus.NOT_STARTED) {
|
|
10367
|
+
updatedStatus = QuickStartStatus.IN_PROGRESS;
|
|
10368
|
+
}
|
|
10369
|
+
let updatedTaskStatus = {};
|
|
10370
|
+
for (let taskIndex = 0; taskIndex <= taskNumber; taskIndex++) {
|
|
10371
|
+
const taskStatus = quickStart[getTaskStatusKey(taskIndex)];
|
|
10372
|
+
const newTaskStatus = taskStatus === QuickStartTaskStatus.INIT ? stepAfterInitial : undefined;
|
|
10373
|
+
if (newTaskStatus) {
|
|
10374
|
+
updatedTaskStatus = Object.assign(Object.assign({}, updatedTaskStatus), { [getTaskStatusKey(taskIndex)]: newTaskStatus });
|
|
10375
|
+
}
|
|
10376
|
+
}
|
|
10377
|
+
const updatedQuickStart = Object.assign(Object.assign(Object.assign(Object.assign({}, quickStart), (updatedStatus ? { status: updatedStatus } : {})), { taskNumber }), updatedTaskStatus);
|
|
10378
|
+
return Object.assign(Object.assign({}, qs), { [quickStartId]: updatedQuickStart });
|
|
10379
|
+
});
|
|
10380
|
+
}, [setAllQuickStartStates, stepAfterInitial]);
|
|
10381
|
+
const setQuickStartTaskStatus = useCallback((taskStatus) => {
|
|
10382
|
+
const quickStart = allQuickStartStates[activeQuickStartID];
|
|
10383
|
+
const { taskNumber } = quickStart;
|
|
10384
|
+
const updatedQuickStart = Object.assign(Object.assign({}, quickStart), { [getTaskStatusKey(taskNumber)]: taskStatus });
|
|
10385
|
+
setAllQuickStartStates((qs) => (Object.assign(Object.assign({}, qs), { [activeQuickStartID]: updatedQuickStart })));
|
|
10386
|
+
}, [allQuickStartStates, activeQuickStartID, setAllQuickStartStates]);
|
|
10387
|
+
const activeQuickStartState = (_b = allQuickStartStates === null || allQuickStartStates === void 0 ? void 0 : allQuickStartStates[activeQuickStartID]) !== null && _b !== void 0 ? _b : {};
|
|
10388
|
+
const getQuickStartForId = useCallback((id) => allQuickStartStates[id], [
|
|
10389
|
+
allQuickStartStates,
|
|
10390
|
+
]);
|
|
10391
|
+
return {
|
|
10392
|
+
allQuickStarts: quickStarts,
|
|
10393
|
+
setAllQuickStarts: updateAllQuickStarts,
|
|
10394
|
+
activeQuickStartID,
|
|
10395
|
+
setActiveQuickStartID,
|
|
10396
|
+
allQuickStartStates,
|
|
10397
|
+
setAllQuickStartStates,
|
|
10398
|
+
activeQuickStartState,
|
|
10399
|
+
setActiveQuickStart: value.setActiveQuickStart || setActiveQuickStart,
|
|
10400
|
+
startQuickStart: value.startQuickStart || startQuickStart,
|
|
10401
|
+
restartQuickStart: value.restartQuickStart || restartQuickStart,
|
|
10402
|
+
nextStep: value.nextStep || nextStep,
|
|
10403
|
+
previousStep: value.previousStep || previousStep,
|
|
10404
|
+
setQuickStartTaskNumber,
|
|
10405
|
+
setQuickStartTaskStatus,
|
|
10406
|
+
getQuickStartForId,
|
|
10407
|
+
footer,
|
|
10408
|
+
useLegacyHeaderColors,
|
|
10409
|
+
useQueryParams,
|
|
10410
|
+
markdown,
|
|
10411
|
+
resourceBundle,
|
|
10412
|
+
getResource: findResource,
|
|
10413
|
+
setResourceBundle: changeResourceBundle,
|
|
10414
|
+
language,
|
|
10415
|
+
setLanguage,
|
|
10416
|
+
// revisit if this should be in public context API
|
|
10417
|
+
filter: {
|
|
10418
|
+
keyword: filterKeyword,
|
|
10419
|
+
status: {
|
|
10420
|
+
statusTypes,
|
|
10421
|
+
statusFilters,
|
|
10422
|
+
},
|
|
10423
|
+
},
|
|
10424
|
+
setFilter,
|
|
10425
|
+
loading,
|
|
10426
|
+
setLoading,
|
|
10427
|
+
alwaysShowTaskReview,
|
|
10428
|
+
setAlwaysShowTaskReview,
|
|
10429
|
+
};
|
|
10430
|
+
};
|
|
10414
10431
|
const QuickStartContextProvider = ({ children, value }) => (React__default.createElement(QuickStartContext.Provider, { value: useValuesForQuickStartContext(value) }, children));
|
|
10415
10432
|
|
|
10416
|
-
const Box = ({ children, className }) => (React.createElement("div", { className: css('pfext-status-box', className) }, children));
|
|
10417
|
-
const Loading = ({ className }) => (React.createElement("div", { className: css('pfext-m-loader', className) },
|
|
10418
|
-
React.createElement("div", { className: "pfext-m-loader-dot__one" }),
|
|
10419
|
-
React.createElement("div", { className: "pfext-m-loader-dot__two" }),
|
|
10420
|
-
React.createElement("div", { className: "pfext-m-loader-dot__three" })));
|
|
10421
|
-
Loading.displayName = 'Loading';
|
|
10422
|
-
const LoadingBox = ({ className, message }) => (React.createElement(Box, { className: css('pfext-status-box--loading', className) },
|
|
10423
|
-
React.createElement(Loading, null),
|
|
10424
|
-
message && React.createElement("div", { className: "pfext-status-box__loading-message" }, message)));
|
|
10425
|
-
LoadingBox.displayName = 'LoadingBox';
|
|
10426
|
-
const EmptyBox = ({ label }) => {
|
|
10427
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
10428
|
-
return (React.createElement(Box, null,
|
|
10429
|
-
React.createElement("div", { "data-test": "empty-message", className: "text-center" }, label
|
|
10430
|
-
? getResource('No {{label}} found').replace('{{label}}', label)
|
|
10431
|
-
: getResource('Not found'))));
|
|
10432
|
-
};
|
|
10433
|
+
const Box = ({ children, className }) => (React.createElement("div", { className: css('pfext-status-box', className) }, children));
|
|
10434
|
+
const Loading = ({ className }) => (React.createElement("div", { className: css('pfext-m-loader', className) },
|
|
10435
|
+
React.createElement("div", { className: "pfext-m-loader-dot__one" }),
|
|
10436
|
+
React.createElement("div", { className: "pfext-m-loader-dot__two" }),
|
|
10437
|
+
React.createElement("div", { className: "pfext-m-loader-dot__three" })));
|
|
10438
|
+
Loading.displayName = 'Loading';
|
|
10439
|
+
const LoadingBox = ({ className, message }) => (React.createElement(Box, { className: css('pfext-status-box--loading', className) },
|
|
10440
|
+
React.createElement(Loading, null),
|
|
10441
|
+
message && React.createElement("div", { className: "pfext-status-box__loading-message" }, message)));
|
|
10442
|
+
LoadingBox.displayName = 'LoadingBox';
|
|
10443
|
+
const EmptyBox = ({ label }) => {
|
|
10444
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
10445
|
+
return (React.createElement(Box, null,
|
|
10446
|
+
React.createElement("div", { "data-test": "empty-message", className: "text-center" }, label
|
|
10447
|
+
? getResource('No {{label}} found').replace('{{label}}', label)
|
|
10448
|
+
: getResource('Not found'))));
|
|
10449
|
+
};
|
|
10433
10450
|
EmptyBox.displayName = 'EmptyBox';
|
|
10434
10451
|
|
|
10435
|
-
const MEMO = {};
|
|
10436
|
-
const CamelCaseWrap = ({ value, dataTest }) => {
|
|
10437
|
-
if (!value) {
|
|
10438
|
-
return '-';
|
|
10439
|
-
}
|
|
10440
|
-
if (MEMO[value]) {
|
|
10441
|
-
return MEMO[value];
|
|
10442
|
-
}
|
|
10443
|
-
// Add word break points before capital letters (but keep consecutive capital letters together).
|
|
10444
|
-
const words = value.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g);
|
|
10445
|
-
const rendered = (React.createElement("span", { "data-test": dataTest }, words.map((word, i) => (React.createElement(React.Fragment, { key: i },
|
|
10446
|
-
word,
|
|
10447
|
-
i !== words.length - 1 && React.createElement("wbr", null))))));
|
|
10448
|
-
MEMO[value] = rendered;
|
|
10449
|
-
return rendered;
|
|
10452
|
+
const MEMO = {};
|
|
10453
|
+
const CamelCaseWrap = ({ value, dataTest }) => {
|
|
10454
|
+
if (!value) {
|
|
10455
|
+
return '-';
|
|
10456
|
+
}
|
|
10457
|
+
if (MEMO[value]) {
|
|
10458
|
+
return MEMO[value];
|
|
10459
|
+
}
|
|
10460
|
+
// Add word break points before capital letters (but keep consecutive capital letters together).
|
|
10461
|
+
const words = value.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g);
|
|
10462
|
+
const rendered = (React.createElement("span", { "data-test": dataTest }, words.map((word, i) => (React.createElement(React.Fragment, { key: i },
|
|
10463
|
+
word,
|
|
10464
|
+
i !== words.length - 1 && React.createElement("wbr", null))))));
|
|
10465
|
+
MEMO[value] = rendered;
|
|
10466
|
+
return rendered;
|
|
10450
10467
|
};
|
|
10451
10468
|
|
|
10452
10469
|
class CatalogTile extends React.Component {
|
|
@@ -10525,322 +10542,322 @@ exports["default"] = exports.RocketIcon;
|
|
|
10525
10542
|
|
|
10526
10543
|
var RocketIcon = /*@__PURE__*/getDefaultExportFromCjs(rocketIcon);
|
|
10527
10544
|
|
|
10528
|
-
const Modal = (_a) => {
|
|
10529
|
-
var { isFullScreen = false, className } = _a, props = __rest(_a, ["isFullScreen", "className"]);
|
|
10530
|
-
return (React.createElement(Modal$1, Object.assign({}, props, { className: css('pfext-modal', className), appendTo: () => (isFullScreen ? document.body : document.querySelector('#modal-container')) })));
|
|
10531
|
-
};
|
|
10532
|
-
|
|
10533
|
-
const getContainer = (container) => typeof container === 'function' ? container() : container;
|
|
10534
|
-
const Portal = ({ children, container }) => {
|
|
10535
|
-
const [containerNode, setContainerNode] = React.useState();
|
|
10536
|
-
useIsomorphicLayoutEffect(() => {
|
|
10537
|
-
setContainerNode(getContainer(container) || document.body);
|
|
10538
|
-
}, [container]);
|
|
10539
|
-
return containerNode ? ReactDOM.createPortal(children, containerNode) : null;
|
|
10540
|
-
};
|
|
10541
|
-
|
|
10542
|
-
const SimplePopper = ({ children }) => {
|
|
10543
|
-
const openProp = true;
|
|
10544
|
-
const nodeRef = React.useRef();
|
|
10545
|
-
const popperRef = React.useRef(null);
|
|
10546
|
-
const [isOpen, setOpenState] = React.useState(openProp);
|
|
10547
|
-
const setOpen = React.useCallback((newOpen) => {
|
|
10548
|
-
setOpenState(newOpen);
|
|
10549
|
-
}, []);
|
|
10550
|
-
React.useEffect(() => {
|
|
10551
|
-
setOpen(openProp);
|
|
10552
|
-
}, [openProp, setOpen]);
|
|
10553
|
-
const onKeyDown = React.useCallback((e) => {
|
|
10554
|
-
if (e.keyCode === 27) {
|
|
10555
|
-
setOpen(false);
|
|
10556
|
-
}
|
|
10557
|
-
}, [setOpen]);
|
|
10558
|
-
const onClickOutside = React.useCallback((e) => {
|
|
10559
|
-
if (!nodeRef.current || (e.target instanceof Node && !nodeRef.current.contains(e.target))) {
|
|
10560
|
-
setOpen(false);
|
|
10561
|
-
}
|
|
10562
|
-
}, [setOpen]);
|
|
10563
|
-
const destroy = React.useCallback(() => {
|
|
10564
|
-
if (popperRef.current) {
|
|
10565
|
-
popperRef.current.destroy();
|
|
10566
|
-
document.removeEventListener('keydown', onKeyDown, true);
|
|
10567
|
-
document.removeEventListener('mousedown', onClickOutside, true);
|
|
10568
|
-
document.removeEventListener('touchstart', onClickOutside, true);
|
|
10569
|
-
}
|
|
10570
|
-
}, [onClickOutside, onKeyDown]);
|
|
10571
|
-
const initialize = React.useCallback(() => {
|
|
10572
|
-
if (!nodeRef.current || !isOpen) {
|
|
10573
|
-
return;
|
|
10574
|
-
}
|
|
10575
|
-
destroy();
|
|
10576
|
-
}, [isOpen, destroy]);
|
|
10577
|
-
const nodeRefCallback = React.useCallback((node) => {
|
|
10578
|
-
nodeRef.current = node;
|
|
10579
|
-
initialize();
|
|
10580
|
-
}, [initialize]);
|
|
10581
|
-
React.useEffect(() => {
|
|
10582
|
-
initialize();
|
|
10583
|
-
}, [initialize]);
|
|
10584
|
-
React.useEffect(() => () => {
|
|
10585
|
-
destroy();
|
|
10586
|
-
}, [destroy]);
|
|
10587
|
-
React.useEffect(() => {
|
|
10588
|
-
if (!isOpen) {
|
|
10589
|
-
destroy();
|
|
10590
|
-
}
|
|
10591
|
-
}, [destroy, isOpen]);
|
|
10592
|
-
return isOpen ? (React.createElement(Portal, null,
|
|
10593
|
-
React.createElement("div", { ref: nodeRefCallback, style: { zIndex: 9999, position: 'absolute', top: 0, left: 0 }, className: "pfext-quick-start__base" }, children))) : null;
|
|
10545
|
+
const Modal = (_a) => {
|
|
10546
|
+
var { isFullScreen = false, className } = _a, props = __rest(_a, ["isFullScreen", "className"]);
|
|
10547
|
+
return (React.createElement(Modal$1, Object.assign({}, props, { className: css('pfext-modal', className), appendTo: () => (isFullScreen ? document.body : document.querySelector('#modal-container')) })));
|
|
10548
|
+
};
|
|
10549
|
+
|
|
10550
|
+
const getContainer = (container) => typeof container === 'function' ? container() : container;
|
|
10551
|
+
const Portal = ({ children, container }) => {
|
|
10552
|
+
const [containerNode, setContainerNode] = React.useState();
|
|
10553
|
+
useIsomorphicLayoutEffect(() => {
|
|
10554
|
+
setContainerNode(getContainer(container) || document.body);
|
|
10555
|
+
}, [container]);
|
|
10556
|
+
return containerNode ? ReactDOM.createPortal(children, containerNode) : null;
|
|
10557
|
+
};
|
|
10558
|
+
|
|
10559
|
+
const SimplePopper = ({ children }) => {
|
|
10560
|
+
const openProp = true;
|
|
10561
|
+
const nodeRef = React.useRef();
|
|
10562
|
+
const popperRef = React.useRef(null);
|
|
10563
|
+
const [isOpen, setOpenState] = React.useState(openProp);
|
|
10564
|
+
const setOpen = React.useCallback((newOpen) => {
|
|
10565
|
+
setOpenState(newOpen);
|
|
10566
|
+
}, []);
|
|
10567
|
+
React.useEffect(() => {
|
|
10568
|
+
setOpen(openProp);
|
|
10569
|
+
}, [openProp, setOpen]);
|
|
10570
|
+
const onKeyDown = React.useCallback((e) => {
|
|
10571
|
+
if (e.keyCode === 27) {
|
|
10572
|
+
setOpen(false);
|
|
10573
|
+
}
|
|
10574
|
+
}, [setOpen]);
|
|
10575
|
+
const onClickOutside = React.useCallback((e) => {
|
|
10576
|
+
if (!nodeRef.current || (e.target instanceof Node && !nodeRef.current.contains(e.target))) {
|
|
10577
|
+
setOpen(false);
|
|
10578
|
+
}
|
|
10579
|
+
}, [setOpen]);
|
|
10580
|
+
const destroy = React.useCallback(() => {
|
|
10581
|
+
if (popperRef.current) {
|
|
10582
|
+
popperRef.current.destroy();
|
|
10583
|
+
document.removeEventListener('keydown', onKeyDown, true);
|
|
10584
|
+
document.removeEventListener('mousedown', onClickOutside, true);
|
|
10585
|
+
document.removeEventListener('touchstart', onClickOutside, true);
|
|
10586
|
+
}
|
|
10587
|
+
}, [onClickOutside, onKeyDown]);
|
|
10588
|
+
const initialize = React.useCallback(() => {
|
|
10589
|
+
if (!nodeRef.current || !isOpen) {
|
|
10590
|
+
return;
|
|
10591
|
+
}
|
|
10592
|
+
destroy();
|
|
10593
|
+
}, [isOpen, destroy]);
|
|
10594
|
+
const nodeRefCallback = React.useCallback((node) => {
|
|
10595
|
+
nodeRef.current = node;
|
|
10596
|
+
initialize();
|
|
10597
|
+
}, [initialize]);
|
|
10598
|
+
React.useEffect(() => {
|
|
10599
|
+
initialize();
|
|
10600
|
+
}, [initialize]);
|
|
10601
|
+
React.useEffect(() => () => {
|
|
10602
|
+
destroy();
|
|
10603
|
+
}, [destroy]);
|
|
10604
|
+
React.useEffect(() => {
|
|
10605
|
+
if (!isOpen) {
|
|
10606
|
+
destroy();
|
|
10607
|
+
}
|
|
10608
|
+
}, [destroy, isOpen]);
|
|
10609
|
+
return isOpen ? (React.createElement(Portal, null,
|
|
10610
|
+
React.createElement("div", { ref: nodeRefCallback, style: { zIndex: 9999, position: 'absolute', top: 0, left: 0 }, className: "pfext-quick-start__base" }, children))) : null;
|
|
10594
10611
|
};
|
|
10595
10612
|
|
|
10596
|
-
const isInViewport = (elementToCheck) => {
|
|
10597
|
-
const rect = elementToCheck.getBoundingClientRect();
|
|
10598
|
-
return (rect.top >= 0 &&
|
|
10599
|
-
rect.left >= 0 &&
|
|
10600
|
-
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
|
10601
|
-
rect.right <= (window.innerWidth || document.documentElement.clientWidth));
|
|
10602
|
-
};
|
|
10603
|
-
const InteractiveSpotlight = ({ element }) => {
|
|
10604
|
-
const { top, bottom, left, right, height, width } = element.getBoundingClientRect();
|
|
10605
|
-
const style = {
|
|
10606
|
-
height,
|
|
10607
|
-
width,
|
|
10608
|
-
top,
|
|
10609
|
-
left,
|
|
10610
|
-
bottom,
|
|
10611
|
-
right,
|
|
10612
|
-
};
|
|
10613
|
-
const [clicked, setClicked] = React.useState(false);
|
|
10614
|
-
React.useEffect(() => {
|
|
10615
|
-
if (!clicked) {
|
|
10616
|
-
if (!isInViewport(element)) {
|
|
10617
|
-
element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
10618
|
-
}
|
|
10619
|
-
const handleClick = () => setClicked(true);
|
|
10620
|
-
document.addEventListener('click', handleClick);
|
|
10621
|
-
return () => {
|
|
10622
|
-
document.removeEventListener('click', handleClick);
|
|
10623
|
-
};
|
|
10624
|
-
}
|
|
10625
|
-
return () => { };
|
|
10626
|
-
}, [element, clicked]);
|
|
10627
|
-
if (clicked) {
|
|
10628
|
-
return null;
|
|
10629
|
-
}
|
|
10630
|
-
return (React.createElement(Portal, null,
|
|
10631
|
-
React.createElement(SimplePopper, null,
|
|
10632
|
-
React.createElement("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-animate", style: style }))));
|
|
10613
|
+
const isInViewport = (elementToCheck) => {
|
|
10614
|
+
const rect = elementToCheck.getBoundingClientRect();
|
|
10615
|
+
return (rect.top >= 0 &&
|
|
10616
|
+
rect.left >= 0 &&
|
|
10617
|
+
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
|
10618
|
+
rect.right <= (window.innerWidth || document.documentElement.clientWidth));
|
|
10619
|
+
};
|
|
10620
|
+
const InteractiveSpotlight = ({ element }) => {
|
|
10621
|
+
const { top, bottom, left, right, height, width } = element.getBoundingClientRect();
|
|
10622
|
+
const style = {
|
|
10623
|
+
height,
|
|
10624
|
+
width,
|
|
10625
|
+
top,
|
|
10626
|
+
left,
|
|
10627
|
+
bottom,
|
|
10628
|
+
right,
|
|
10629
|
+
};
|
|
10630
|
+
const [clicked, setClicked] = React.useState(false);
|
|
10631
|
+
React.useEffect(() => {
|
|
10632
|
+
if (!clicked) {
|
|
10633
|
+
if (!isInViewport(element)) {
|
|
10634
|
+
element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
10635
|
+
}
|
|
10636
|
+
const handleClick = () => setClicked(true);
|
|
10637
|
+
document.addEventListener('click', handleClick);
|
|
10638
|
+
return () => {
|
|
10639
|
+
document.removeEventListener('click', handleClick);
|
|
10640
|
+
};
|
|
10641
|
+
}
|
|
10642
|
+
return () => { };
|
|
10643
|
+
}, [element, clicked]);
|
|
10644
|
+
if (clicked) {
|
|
10645
|
+
return null;
|
|
10646
|
+
}
|
|
10647
|
+
return (React.createElement(Portal, null,
|
|
10648
|
+
React.createElement(SimplePopper, null,
|
|
10649
|
+
React.createElement("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-animate", style: style }))));
|
|
10633
10650
|
};
|
|
10634
10651
|
|
|
10635
|
-
var ScrollDirection;
|
|
10636
|
-
(function (ScrollDirection) {
|
|
10637
|
-
ScrollDirection["scrollingUp"] = "scrolling-up";
|
|
10638
|
-
ScrollDirection["scrollingDown"] = "scrolling-down";
|
|
10639
|
-
ScrollDirection["scrolledToBottom"] = "scrolled-to-bottom";
|
|
10640
|
-
ScrollDirection["scrolledToTop"] = "scrolled-to-top";
|
|
10652
|
+
var ScrollDirection;
|
|
10653
|
+
(function (ScrollDirection) {
|
|
10654
|
+
ScrollDirection["scrollingUp"] = "scrolling-up";
|
|
10655
|
+
ScrollDirection["scrollingDown"] = "scrolling-down";
|
|
10656
|
+
ScrollDirection["scrolledToBottom"] = "scrolled-to-bottom";
|
|
10657
|
+
ScrollDirection["scrolledToTop"] = "scrolled-to-top";
|
|
10641
10658
|
})(ScrollDirection || (ScrollDirection = {}));
|
|
10642
10659
|
|
|
10643
|
-
const useResizeObserver = (callback, targetElement, observerOptions = undefined) => {
|
|
10644
|
-
const element = React.useMemo(() => targetElement !== null && targetElement !== void 0 ? targetElement : document.querySelector('body'), [targetElement]);
|
|
10645
|
-
React.useEffect(() => {
|
|
10646
|
-
const observer = new ResizeObserver(callback);
|
|
10647
|
-
observer.observe(element, observerOptions);
|
|
10648
|
-
return () => {
|
|
10649
|
-
observer.disconnect();
|
|
10650
|
-
};
|
|
10651
|
-
}, [callback, observerOptions, element]);
|
|
10652
|
-
};
|
|
10653
|
-
|
|
10654
|
-
var Shadows;
|
|
10655
|
-
(function (Shadows) {
|
|
10656
|
-
Shadows["none"] = "none";
|
|
10657
|
-
Shadows["both"] = "both";
|
|
10658
|
-
Shadows["top"] = "top";
|
|
10659
|
-
Shadows["bottom"] = "bottom";
|
|
10660
|
-
})(Shadows || (Shadows = {}));
|
|
10661
|
-
const useScrollShadows = (node) => {
|
|
10662
|
-
const [shadows, setShadows] = React.useState(Shadows.none);
|
|
10663
|
-
const computeShadows = React.useCallback(() => {
|
|
10664
|
-
if (node) {
|
|
10665
|
-
const { scrollTop, clientHeight, scrollHeight } = node;
|
|
10666
|
-
const top = scrollTop !== 0;
|
|
10667
|
-
const bottom = scrollTop + clientHeight < scrollHeight;
|
|
10668
|
-
if (top && bottom) {
|
|
10669
|
-
setShadows(Shadows.both);
|
|
10670
|
-
}
|
|
10671
|
-
else if (top) {
|
|
10672
|
-
setShadows(Shadows.top);
|
|
10673
|
-
}
|
|
10674
|
-
else if (bottom) {
|
|
10675
|
-
setShadows(Shadows.bottom);
|
|
10676
|
-
}
|
|
10677
|
-
else {
|
|
10678
|
-
setShadows(Shadows.none);
|
|
10679
|
-
}
|
|
10680
|
-
}
|
|
10681
|
-
}, [node]);
|
|
10682
|
-
// recompute when the scroll container changes in size
|
|
10683
|
-
useResizeObserver(computeShadows, node);
|
|
10684
|
-
React.useEffect(() => {
|
|
10685
|
-
if (node) {
|
|
10686
|
-
// compute initial shadows
|
|
10687
|
-
computeShadows();
|
|
10688
|
-
// listen for scroll events
|
|
10689
|
-
node.addEventListener('scroll', computeShadows);
|
|
10690
|
-
}
|
|
10691
|
-
return () => {
|
|
10692
|
-
if (node) {
|
|
10693
|
-
node.removeEventListener('scroll', computeShadows);
|
|
10694
|
-
}
|
|
10695
|
-
};
|
|
10696
|
-
}, [node, computeShadows]);
|
|
10697
|
-
return shadows;
|
|
10660
|
+
const useResizeObserver = (callback, targetElement, observerOptions = undefined) => {
|
|
10661
|
+
const element = React.useMemo(() => targetElement !== null && targetElement !== void 0 ? targetElement : document.querySelector('body'), [targetElement]);
|
|
10662
|
+
React.useEffect(() => {
|
|
10663
|
+
const observer = new ResizeObserver(callback);
|
|
10664
|
+
observer.observe(element, observerOptions);
|
|
10665
|
+
return () => {
|
|
10666
|
+
observer.disconnect();
|
|
10667
|
+
};
|
|
10668
|
+
}, [callback, observerOptions, element]);
|
|
10669
|
+
};
|
|
10670
|
+
|
|
10671
|
+
var Shadows;
|
|
10672
|
+
(function (Shadows) {
|
|
10673
|
+
Shadows["none"] = "none";
|
|
10674
|
+
Shadows["both"] = "both";
|
|
10675
|
+
Shadows["top"] = "top";
|
|
10676
|
+
Shadows["bottom"] = "bottom";
|
|
10677
|
+
})(Shadows || (Shadows = {}));
|
|
10678
|
+
const useScrollShadows = (node) => {
|
|
10679
|
+
const [shadows, setShadows] = React.useState(Shadows.none);
|
|
10680
|
+
const computeShadows = React.useCallback(() => {
|
|
10681
|
+
if (node) {
|
|
10682
|
+
const { scrollTop, clientHeight, scrollHeight } = node;
|
|
10683
|
+
const top = scrollTop !== 0;
|
|
10684
|
+
const bottom = scrollTop + clientHeight < scrollHeight;
|
|
10685
|
+
if (top && bottom) {
|
|
10686
|
+
setShadows(Shadows.both);
|
|
10687
|
+
}
|
|
10688
|
+
else if (top) {
|
|
10689
|
+
setShadows(Shadows.top);
|
|
10690
|
+
}
|
|
10691
|
+
else if (bottom) {
|
|
10692
|
+
setShadows(Shadows.bottom);
|
|
10693
|
+
}
|
|
10694
|
+
else {
|
|
10695
|
+
setShadows(Shadows.none);
|
|
10696
|
+
}
|
|
10697
|
+
}
|
|
10698
|
+
}, [node]);
|
|
10699
|
+
// recompute when the scroll container changes in size
|
|
10700
|
+
useResizeObserver(computeShadows, node);
|
|
10701
|
+
React.useEffect(() => {
|
|
10702
|
+
if (node) {
|
|
10703
|
+
// compute initial shadows
|
|
10704
|
+
computeShadows();
|
|
10705
|
+
// listen for scroll events
|
|
10706
|
+
node.addEventListener('scroll', computeShadows);
|
|
10707
|
+
}
|
|
10708
|
+
return () => {
|
|
10709
|
+
if (node) {
|
|
10710
|
+
node.removeEventListener('scroll', computeShadows);
|
|
10711
|
+
}
|
|
10712
|
+
};
|
|
10713
|
+
}, [node, computeShadows]);
|
|
10714
|
+
return shadows;
|
|
10698
10715
|
};
|
|
10699
10716
|
|
|
10700
|
-
const useBoundingClientRect = (targetElement) => {
|
|
10701
|
-
const [clientRect, setClientRect] = React.useState(() => targetElement ? targetElement.getBoundingClientRect() : null);
|
|
10702
|
-
const observerCallback = React.useCallback(() => {
|
|
10703
|
-
setClientRect(targetElement ? targetElement.getBoundingClientRect() : null);
|
|
10704
|
-
}, [targetElement]);
|
|
10705
|
-
useResizeObserver(observerCallback);
|
|
10706
|
-
return clientRect;
|
|
10717
|
+
const useBoundingClientRect = (targetElement) => {
|
|
10718
|
+
const [clientRect, setClientRect] = React.useState(() => targetElement ? targetElement.getBoundingClientRect() : null);
|
|
10719
|
+
const observerCallback = React.useCallback(() => {
|
|
10720
|
+
setClientRect(targetElement ? targetElement.getBoundingClientRect() : null);
|
|
10721
|
+
}, [targetElement]);
|
|
10722
|
+
useResizeObserver(observerCallback);
|
|
10723
|
+
return clientRect;
|
|
10707
10724
|
};
|
|
10708
10725
|
|
|
10709
|
-
/**
|
|
10710
|
-
* React hook that forces component render.
|
|
10711
|
-
*/
|
|
10726
|
+
/**
|
|
10727
|
+
* React hook that forces component render.
|
|
10728
|
+
*/
|
|
10712
10729
|
const useForceRender = () => React.useReducer((s) => !s, false)[1];
|
|
10713
10730
|
|
|
10714
|
-
const useEventListener = (target, event, callback) => {
|
|
10715
|
-
useEffect(() => {
|
|
10716
|
-
target.addEventListener(event, callback);
|
|
10717
|
-
return () => {
|
|
10718
|
-
target.removeEventListener(event, callback);
|
|
10719
|
-
};
|
|
10720
|
-
}, [target, event, callback]);
|
|
10721
|
-
};
|
|
10722
|
-
|
|
10723
|
-
const StaticSpotlight = ({ element }) => {
|
|
10724
|
-
const clientRect = useBoundingClientRect(element);
|
|
10725
|
-
const style = clientRect
|
|
10726
|
-
? {
|
|
10727
|
-
top: clientRect.top,
|
|
10728
|
-
left: clientRect.left,
|
|
10729
|
-
height: clientRect.height,
|
|
10730
|
-
width: clientRect.width,
|
|
10731
|
-
}
|
|
10732
|
-
: {};
|
|
10733
|
-
return clientRect ? (React.createElement(Portal, null,
|
|
10734
|
-
React.createElement("div", { className: "pf-v5-c-backdrop pfext-spotlight__with-backdrop" },
|
|
10735
|
-
React.createElement("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-noanimate", style: style })))) : null;
|
|
10736
|
-
};
|
|
10737
|
-
|
|
10738
|
-
const Spotlight = ({ selector, interactive }) => {
|
|
10739
|
-
// if target element is a hidden one return null
|
|
10740
|
-
const element = React.useMemo(() => {
|
|
10741
|
-
const highlightElement = document.querySelector(selector);
|
|
10742
|
-
let hiddenElement = highlightElement;
|
|
10743
|
-
while (hiddenElement) {
|
|
10744
|
-
const ariaHidden = hiddenElement.getAttribute('aria-hidden');
|
|
10745
|
-
if (ariaHidden === 'true') {
|
|
10746
|
-
return null;
|
|
10747
|
-
}
|
|
10748
|
-
hiddenElement = hiddenElement.parentElement;
|
|
10749
|
-
}
|
|
10750
|
-
return highlightElement;
|
|
10751
|
-
}, [selector]);
|
|
10752
|
-
if (!element) {
|
|
10753
|
-
return null;
|
|
10754
|
-
}
|
|
10755
|
-
return interactive ? (React.createElement(InteractiveSpotlight, { element: element })) : (React.createElement(StaticSpotlight, { element: element }));
|
|
10731
|
+
const useEventListener = (target, event, callback) => {
|
|
10732
|
+
useEffect(() => {
|
|
10733
|
+
target.addEventListener(event, callback);
|
|
10734
|
+
return () => {
|
|
10735
|
+
target.removeEventListener(event, callback);
|
|
10736
|
+
};
|
|
10737
|
+
}, [target, event, callback]);
|
|
10738
|
+
};
|
|
10739
|
+
|
|
10740
|
+
const StaticSpotlight = ({ element }) => {
|
|
10741
|
+
const clientRect = useBoundingClientRect(element);
|
|
10742
|
+
const style = clientRect
|
|
10743
|
+
? {
|
|
10744
|
+
top: clientRect.top,
|
|
10745
|
+
left: clientRect.left,
|
|
10746
|
+
height: clientRect.height,
|
|
10747
|
+
width: clientRect.width,
|
|
10748
|
+
}
|
|
10749
|
+
: {};
|
|
10750
|
+
return clientRect ? (React.createElement(Portal, null,
|
|
10751
|
+
React.createElement("div", { className: "pf-v5-c-backdrop pfext-spotlight__with-backdrop" },
|
|
10752
|
+
React.createElement("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-noanimate", style: style })))) : null;
|
|
10753
|
+
};
|
|
10754
|
+
|
|
10755
|
+
const Spotlight = ({ selector, interactive }) => {
|
|
10756
|
+
// if target element is a hidden one return null
|
|
10757
|
+
const element = React.useMemo(() => {
|
|
10758
|
+
const highlightElement = document.querySelector(selector);
|
|
10759
|
+
let hiddenElement = highlightElement;
|
|
10760
|
+
while (hiddenElement) {
|
|
10761
|
+
const ariaHidden = hiddenElement.getAttribute('aria-hidden');
|
|
10762
|
+
if (ariaHidden === 'true') {
|
|
10763
|
+
return null;
|
|
10764
|
+
}
|
|
10765
|
+
hiddenElement = hiddenElement.parentElement;
|
|
10766
|
+
}
|
|
10767
|
+
return highlightElement;
|
|
10768
|
+
}, [selector]);
|
|
10769
|
+
if (!element) {
|
|
10770
|
+
return null;
|
|
10771
|
+
}
|
|
10772
|
+
return interactive ? (React.createElement(InteractiveSpotlight, { element: element })) : (React.createElement(StaticSpotlight, { element: element }));
|
|
10773
|
+
};
|
|
10774
|
+
|
|
10775
|
+
const MarkdownHighlightExtension = ({ docContext, rootSelector, }) => {
|
|
10776
|
+
const [selector, setSelector] = React.useState(null);
|
|
10777
|
+
React.useEffect(() => {
|
|
10778
|
+
const elements = docContext.querySelectorAll(`${rootSelector} [data-highlight]`);
|
|
10779
|
+
let timeoutId;
|
|
10780
|
+
function startHighlight(e) {
|
|
10781
|
+
const highlightId = e.target.getAttribute('data-highlight');
|
|
10782
|
+
if (!highlightId) {
|
|
10783
|
+
return;
|
|
10784
|
+
}
|
|
10785
|
+
setSelector(null);
|
|
10786
|
+
timeoutId = setTimeout(() => {
|
|
10787
|
+
setSelector(`[data-quickstart-id="${highlightId}"]`);
|
|
10788
|
+
}, 0);
|
|
10789
|
+
}
|
|
10790
|
+
elements && elements.forEach((elm) => elm.addEventListener('click', startHighlight));
|
|
10791
|
+
return () => {
|
|
10792
|
+
clearTimeout(timeoutId);
|
|
10793
|
+
elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
|
|
10794
|
+
};
|
|
10795
|
+
}, [docContext, rootSelector]);
|
|
10796
|
+
React.useEffect(() => {
|
|
10797
|
+
const elements = docContext.querySelectorAll(`${rootSelector} [class^=data-highlight__]`);
|
|
10798
|
+
let timeoutId;
|
|
10799
|
+
function startHighlight(e) {
|
|
10800
|
+
e.preventDefault();
|
|
10801
|
+
const classes = e.target.getAttribute('class').split(' ');
|
|
10802
|
+
let highlightId;
|
|
10803
|
+
for (const className of classes) {
|
|
10804
|
+
if (className.startsWith('data-highlight__')) {
|
|
10805
|
+
highlightId = className.split('__')[1];
|
|
10806
|
+
break;
|
|
10807
|
+
}
|
|
10808
|
+
}
|
|
10809
|
+
if (!highlightId) {
|
|
10810
|
+
return;
|
|
10811
|
+
}
|
|
10812
|
+
setSelector(null);
|
|
10813
|
+
timeoutId = setTimeout(() => {
|
|
10814
|
+
setSelector(`[data-quickstart-id="${highlightId}"]`);
|
|
10815
|
+
}, 0);
|
|
10816
|
+
}
|
|
10817
|
+
elements && elements.forEach((elm) => elm.addEventListener('click', startHighlight));
|
|
10818
|
+
return () => {
|
|
10819
|
+
clearTimeout(timeoutId);
|
|
10820
|
+
elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
|
|
10821
|
+
};
|
|
10822
|
+
}, [docContext, rootSelector]);
|
|
10823
|
+
if (!selector) {
|
|
10824
|
+
return null;
|
|
10825
|
+
}
|
|
10826
|
+
return React.createElement(Spotlight, { selector: selector, interactive: true });
|
|
10756
10827
|
};
|
|
10757
10828
|
|
|
10758
|
-
const
|
|
10759
|
-
|
|
10760
|
-
|
|
10761
|
-
const elements = docContext.querySelectorAll(`${rootSelector} [data-highlight]`);
|
|
10762
|
-
let timeoutId;
|
|
10763
|
-
function startHighlight(e) {
|
|
10764
|
-
const highlightId = e.target.getAttribute('data-highlight');
|
|
10765
|
-
if (!highlightId) {
|
|
10766
|
-
return;
|
|
10767
|
-
}
|
|
10768
|
-
setSelector(null);
|
|
10769
|
-
timeoutId = setTimeout(() => {
|
|
10770
|
-
setSelector(`[data-quickstart-id="${highlightId}"]`);
|
|
10771
|
-
}, 0);
|
|
10772
|
-
}
|
|
10773
|
-
elements && elements.forEach((elm) => elm.addEventListener('click', startHighlight));
|
|
10774
|
-
return () => {
|
|
10775
|
-
clearTimeout(timeoutId);
|
|
10776
|
-
elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
|
|
10777
|
-
};
|
|
10778
|
-
}, [docContext, rootSelector]);
|
|
10779
|
-
React.useEffect(() => {
|
|
10780
|
-
const elements = docContext.querySelectorAll(`${rootSelector} [class^=data-highlight__]`);
|
|
10781
|
-
let timeoutId;
|
|
10782
|
-
function startHighlight(e) {
|
|
10783
|
-
e.preventDefault();
|
|
10784
|
-
const classes = e.target.getAttribute('class').split(' ');
|
|
10785
|
-
let highlightId;
|
|
10786
|
-
for (const className of classes) {
|
|
10787
|
-
if (className.startsWith('data-highlight__')) {
|
|
10788
|
-
highlightId = className.split('__')[1];
|
|
10789
|
-
break;
|
|
10790
|
-
}
|
|
10791
|
-
}
|
|
10792
|
-
if (!highlightId) {
|
|
10793
|
-
return;
|
|
10794
|
-
}
|
|
10795
|
-
setSelector(null);
|
|
10796
|
-
timeoutId = setTimeout(() => {
|
|
10797
|
-
setSelector(`[data-quickstart-id="${highlightId}"]`);
|
|
10798
|
-
}, 0);
|
|
10799
|
-
}
|
|
10800
|
-
elements && elements.forEach((elm) => elm.addEventListener('click', startHighlight));
|
|
10801
|
-
return () => {
|
|
10802
|
-
clearTimeout(timeoutId);
|
|
10803
|
-
elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
|
|
10804
|
-
};
|
|
10805
|
-
}, [docContext, rootSelector]);
|
|
10806
|
-
if (!selector) {
|
|
10807
|
-
return null;
|
|
10808
|
-
}
|
|
10809
|
-
return React.createElement(Spotlight, { selector: selector, interactive: true });
|
|
10810
|
-
};
|
|
10811
|
-
|
|
10812
|
-
const MARKDOWN_COPY_BUTTON_ID = 'data-copy-for';
|
|
10813
|
-
const MARKDOWN_SNIPPET_ID = 'data-snippet-id';
|
|
10814
|
-
const ACCORDION_MARKDOWN_BUTTON_ID = `accordion-markdown-button-id`;
|
|
10829
|
+
const MARKDOWN_COPY_BUTTON_ID = 'data-copy-for';
|
|
10830
|
+
const MARKDOWN_SNIPPET_ID = 'data-snippet-id';
|
|
10831
|
+
const ACCORDION_MARKDOWN_BUTTON_ID = `accordion-markdown-button-id`;
|
|
10815
10832
|
const ACCORDION_MARKDOWN_CONTENT_ID = `accordion-markdown-content-id`;
|
|
10816
10833
|
|
|
10817
|
-
const CopyClipboard = ({ element, rootSelector, docContext, }) => {
|
|
10818
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
10819
|
-
const [showSuccessContent, setShowSuccessContent] = React.useState(false);
|
|
10820
|
-
const textToCopy = React.useMemo(() => {
|
|
10821
|
-
var _a;
|
|
10822
|
-
const copyTextId = element.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
10823
|
-
return (_a = docContext.querySelector(`${rootSelector} [${MARKDOWN_SNIPPET_ID}="${copyTextId}"]`)) === null || _a === void 0 ? void 0 : _a.innerText;
|
|
10824
|
-
}, [element, docContext, rootSelector]);
|
|
10825
|
-
useEventListener(element, 'click', React.useCallback(() => {
|
|
10826
|
-
navigator.clipboard
|
|
10827
|
-
.writeText(textToCopy.trim())
|
|
10828
|
-
.then(() => {
|
|
10829
|
-
setShowSuccessContent(true);
|
|
10830
|
-
})
|
|
10831
|
-
.catch(() => { });
|
|
10832
|
-
}, [textToCopy]));
|
|
10833
|
-
useEventListener(element, 'mouseleave', React.useCallback(() => {
|
|
10834
|
-
setShowSuccessContent(false);
|
|
10835
|
-
}, []));
|
|
10836
|
-
return showSuccessContent ? (React.createElement(Tooltip, { key: "after-copy", isVisible: true, triggerRef: () => element, content: getResource('Successfully copied to clipboard!'), className: "pfext-quick-start__base" })) : (React.createElement(Tooltip, { key: "before-copy", triggerRef: () => element, content: getResource('Copy to clipboard'), className: "pfext-quick-start__base" }));
|
|
10837
|
-
};
|
|
10838
|
-
const MarkdownCopyClipboard = ({ docContext, rootSelector, }) => {
|
|
10839
|
-
const elements = docContext.querySelectorAll(`${rootSelector} [${MARKDOWN_COPY_BUTTON_ID}]`);
|
|
10840
|
-
return elements.length > 0 ? (React.createElement(React.Fragment, null, Array.from(elements).map((elm) => {
|
|
10841
|
-
const attributeValue = elm.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
10842
|
-
return (React.createElement(CopyClipboard, { key: attributeValue, element: elm, rootSelector: rootSelector, docContext: docContext }));
|
|
10843
|
-
}))) : null;
|
|
10834
|
+
const CopyClipboard = ({ element, rootSelector, docContext, }) => {
|
|
10835
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
10836
|
+
const [showSuccessContent, setShowSuccessContent] = React.useState(false);
|
|
10837
|
+
const textToCopy = React.useMemo(() => {
|
|
10838
|
+
var _a;
|
|
10839
|
+
const copyTextId = element.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
10840
|
+
return (_a = docContext.querySelector(`${rootSelector} [${MARKDOWN_SNIPPET_ID}="${copyTextId}"]`)) === null || _a === void 0 ? void 0 : _a.innerText;
|
|
10841
|
+
}, [element, docContext, rootSelector]);
|
|
10842
|
+
useEventListener(element, 'click', React.useCallback(() => {
|
|
10843
|
+
navigator.clipboard
|
|
10844
|
+
.writeText(textToCopy.trim())
|
|
10845
|
+
.then(() => {
|
|
10846
|
+
setShowSuccessContent(true);
|
|
10847
|
+
})
|
|
10848
|
+
.catch(() => { });
|
|
10849
|
+
}, [textToCopy]));
|
|
10850
|
+
useEventListener(element, 'mouseleave', React.useCallback(() => {
|
|
10851
|
+
setShowSuccessContent(false);
|
|
10852
|
+
}, []));
|
|
10853
|
+
return showSuccessContent ? (React.createElement(Tooltip, { key: "after-copy", isVisible: true, triggerRef: () => element, content: getResource('Successfully copied to clipboard!'), className: "pfext-quick-start__base" })) : (React.createElement(Tooltip, { key: "before-copy", triggerRef: () => element, content: getResource('Copy to clipboard'), className: "pfext-quick-start__base" }));
|
|
10854
|
+
};
|
|
10855
|
+
const MarkdownCopyClipboard = ({ docContext, rootSelector, }) => {
|
|
10856
|
+
const elements = docContext.querySelectorAll(`${rootSelector} [${MARKDOWN_COPY_BUTTON_ID}]`);
|
|
10857
|
+
return elements.length > 0 ? (React.createElement(React.Fragment, null, Array.from(elements).map((elm) => {
|
|
10858
|
+
const attributeValue = elm.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
10859
|
+
return (React.createElement(CopyClipboard, { key: attributeValue, element: elm, rootSelector: rootSelector, docContext: docContext }));
|
|
10860
|
+
}))) : null;
|
|
10844
10861
|
};
|
|
10845
10862
|
|
|
10846
10863
|
const removeTemplateWhitespace = (template) => template.replace(/>(?:\s|\n)+</g, '><');
|
|
@@ -25234,15 +25251,15 @@ exports["default"] = exports.CopyIcon;
|
|
|
25234
25251
|
|
|
25235
25252
|
var CopyIcon = /*@__PURE__*/getDefaultExportFromCjs(copyIcon);
|
|
25236
25253
|
|
|
25237
|
-
const useInlineCopyClipboardShowdownExtension = () => {
|
|
25238
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
25239
|
-
return React.useMemo(() => ({
|
|
25240
|
-
type: 'lang',
|
|
25241
|
-
regex: /`([^`](.*?)[^`])`{{copy}}/g,
|
|
25242
|
-
replace: (text, group, _, groupId) => {
|
|
25243
|
-
if (!group || isNaN(groupId)) {
|
|
25244
|
-
return text;
|
|
25245
|
-
}
|
|
25254
|
+
const useInlineCopyClipboardShowdownExtension = () => {
|
|
25255
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
25256
|
+
return React.useMemo(() => ({
|
|
25257
|
+
type: 'lang',
|
|
25258
|
+
regex: /`([^`](.*?)[^`])`{{copy}}/g,
|
|
25259
|
+
replace: (text, group, _, groupId) => {
|
|
25260
|
+
if (!group || isNaN(groupId)) {
|
|
25261
|
+
return text;
|
|
25262
|
+
}
|
|
25246
25263
|
return removeTemplateWhitespace(`<span class="pf-v5-c-clipboard-copy pf-m-inline">
|
|
25247
25264
|
<span class="pf-v5-c-clipboard-copy__text" ${MARKDOWN_SNIPPET_ID}="${groupId}">${group}</span>
|
|
25248
25265
|
<span class="pf-v5-c-clipboard-copy__actions">
|
|
@@ -25252,20 +25269,20 @@ const useInlineCopyClipboardShowdownExtension = () => {
|
|
|
25252
25269
|
</button>
|
|
25253
25270
|
</span>
|
|
25254
25271
|
</span>
|
|
25255
|
-
</span>`);
|
|
25256
|
-
},
|
|
25257
|
-
}), [getResource]);
|
|
25258
|
-
};
|
|
25259
|
-
|
|
25260
|
-
const useMultilineCopyClipboardShowdownExtension = () => {
|
|
25261
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
25262
|
-
return React.useMemo(() => ({
|
|
25263
|
-
type: 'lang',
|
|
25264
|
-
regex: /```[\n]\s*((((?!```).)*?\n)+)\s*```{{copy}}/g,
|
|
25265
|
-
replace: (text, group, _1, _2, groupId) => {
|
|
25266
|
-
if (!group || isNaN(groupId)) {
|
|
25267
|
-
return text;
|
|
25268
|
-
}
|
|
25272
|
+
</span>`);
|
|
25273
|
+
},
|
|
25274
|
+
}), [getResource]);
|
|
25275
|
+
};
|
|
25276
|
+
|
|
25277
|
+
const useMultilineCopyClipboardShowdownExtension = () => {
|
|
25278
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
25279
|
+
return React.useMemo(() => ({
|
|
25280
|
+
type: 'lang',
|
|
25281
|
+
regex: /```[\n]\s*((((?!```).)*?\n)+)\s*```{{copy}}/g,
|
|
25282
|
+
replace: (text, group, _1, _2, groupId) => {
|
|
25283
|
+
if (!group || isNaN(groupId)) {
|
|
25284
|
+
return text;
|
|
25285
|
+
}
|
|
25269
25286
|
return `<div class="pf-v5-c-code-block">
|
|
25270
25287
|
<div class="pf-v5-c-code-block__header">
|
|
25271
25288
|
<div class="pf-v5-c-code-block__actions">
|
|
@@ -25282,9 +25299,9 @@ const useMultilineCopyClipboardShowdownExtension = () => {
|
|
|
25282
25299
|
${MARKDOWN_SNIPPET_ID}="${groupId}">${group.trim()}</code>
|
|
25283
25300
|
</pre>
|
|
25284
25301
|
</div>
|
|
25285
|
-
</div>`;
|
|
25286
|
-
},
|
|
25287
|
-
}), [getResource]);
|
|
25302
|
+
</div>`;
|
|
25303
|
+
},
|
|
25304
|
+
}), [getResource]);
|
|
25288
25305
|
};
|
|
25289
25306
|
|
|
25290
25307
|
var lightbulbIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -29741,133 +29758,133 @@ if (module.exports) {
|
|
|
29741
29758
|
|
|
29742
29759
|
});
|
|
29743
29760
|
|
|
29744
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
29745
|
-
const DOMPurify = require('dompurify');
|
|
29746
|
-
const markdownConvert = (markdown, extensions) => {
|
|
29747
|
-
const converter = new showdown.Converter({
|
|
29748
|
-
tables: true,
|
|
29749
|
-
openLinksInNewWindow: true,
|
|
29750
|
-
strikethrough: true,
|
|
29751
|
-
emoji: false,
|
|
29752
|
-
});
|
|
29753
|
-
if (extensions) {
|
|
29754
|
-
converter.addExtension(extensions);
|
|
29755
|
-
}
|
|
29756
|
-
DOMPurify.addHook('beforeSanitizeElements', function (node) {
|
|
29757
|
-
// nodeType 1 = element type
|
|
29758
|
-
// transform anchor tags
|
|
29759
|
-
if (node.nodeType === 1 && node.nodeName.toLowerCase() === 'a') {
|
|
29760
|
-
node.setAttribute('rel', 'noopener noreferrer');
|
|
29761
|
-
return node;
|
|
29762
|
-
}
|
|
29763
|
-
// add PF class to ul and ol lists
|
|
29764
|
-
if (node.nodeType === 1 &&
|
|
29765
|
-
(node.nodeName.toLowerCase() === 'ul' || node.nodeName.toLowerCase() === 'ol')) {
|
|
29766
|
-
node.setAttribute('class', 'pf-v5-c-list');
|
|
29767
|
-
return node;
|
|
29768
|
-
}
|
|
29769
|
-
});
|
|
29770
|
-
// Add a hook to make all links open a new window
|
|
29771
|
-
DOMPurify.addHook('afterSanitizeAttributes', function (node) {
|
|
29772
|
-
// set all elements owning target to target=_blank
|
|
29773
|
-
if ('target' in node) {
|
|
29774
|
-
node.setAttribute('target', '_blank');
|
|
29775
|
-
}
|
|
29776
|
-
// set non-HTML/MathML links to xlink:show=new
|
|
29777
|
-
if (!node.hasAttribute('target') &&
|
|
29778
|
-
(node.hasAttribute('xlink:href') || node.hasAttribute('href'))) {
|
|
29779
|
-
node.setAttribute('xlink:show', 'new');
|
|
29780
|
-
}
|
|
29781
|
-
});
|
|
29782
|
-
return DOMPurify.sanitize(converter.makeHtml(markdown), {
|
|
29783
|
-
USE_PROFILES: {
|
|
29784
|
-
html: true,
|
|
29785
|
-
svg: true,
|
|
29786
|
-
},
|
|
29787
|
-
});
|
|
29788
|
-
};
|
|
29789
|
-
const SyncMarkdownView = ({ content, emptyMsg, extensions, renderExtension, exactHeight, inline, className, }) => {
|
|
29790
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
29791
|
-
const markup = React.useMemo(() => markdownConvert(content || emptyMsg || getResource('Not available'), extensions), [content, emptyMsg, extensions, getResource]);
|
|
29792
|
-
const innerProps = {
|
|
29793
|
-
renderExtension: (extensions === null || extensions === void 0 ? void 0 : extensions.length) > 0 ? renderExtension : undefined,
|
|
29794
|
-
exactHeight,
|
|
29795
|
-
markup,
|
|
29796
|
-
isEmpty: !content,
|
|
29797
|
-
className,
|
|
29798
|
-
};
|
|
29799
|
-
return inline ? React.createElement(InlineMarkdownView, Object.assign({}, innerProps)) : React.createElement(IFrameMarkdownView, Object.assign({}, innerProps));
|
|
29800
|
-
};
|
|
29801
|
-
const uniqueId = (function () {
|
|
29802
|
-
let num = 0;
|
|
29803
|
-
return function (prefix) {
|
|
29804
|
-
const prefixStr = String(prefix) || '';
|
|
29805
|
-
num += 1;
|
|
29806
|
-
return prefixStr + num;
|
|
29807
|
-
};
|
|
29808
|
-
})();
|
|
29809
|
-
const RenderExtension = ({ renderExtension, selector, markup, docContext, }) => {
|
|
29810
|
-
const forceRender = useForceRender();
|
|
29811
|
-
const markupRef = React.useRef(null);
|
|
29812
|
-
const shouldRenderExtension = React.useCallback(() => {
|
|
29813
|
-
if (markupRef.current === markup) {
|
|
29814
|
-
return true;
|
|
29815
|
-
}
|
|
29816
|
-
markupRef.current = markup;
|
|
29817
|
-
return false;
|
|
29818
|
-
}, [markup]);
|
|
29819
|
-
/**
|
|
29820
|
-
* During a render cycle in which markup changes, renderExtension receives an old copy of document
|
|
29821
|
-
* because react is still updating the dom using `dangerouslySetInnerHTML` with latest markdown markup
|
|
29822
|
-
* which causes the component rendered by renderExtension to receive old copy of document
|
|
29823
|
-
* use forceRender to delay the rendering of extension by one render cycle
|
|
29824
|
-
*/
|
|
29825
|
-
React.useEffect(() => {
|
|
29826
|
-
if (renderExtension) {
|
|
29827
|
-
forceRender();
|
|
29828
|
-
}
|
|
29829
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29830
|
-
}, [markup]);
|
|
29831
|
-
return (React.createElement(React.Fragment, null, shouldRenderExtension() ? renderExtension === null || renderExtension === void 0 ? void 0 : renderExtension(docContext !== null && docContext !== void 0 ? docContext : document, selector) : null));
|
|
29832
|
-
};
|
|
29833
|
-
const InlineMarkdownView = ({ markup, isEmpty, renderExtension, className, }) => {
|
|
29834
|
-
const id = React.useMemo(() => uniqueId('markdown'), []);
|
|
29835
|
-
return (React.createElement("div", { className: css('pfext-markdown-view', { 'is-empty': isEmpty }, className), id: id },
|
|
29836
|
-
React.createElement("div", { dangerouslySetInnerHTML: { __html: markup } }),
|
|
29837
|
-
renderExtension && (React.createElement(RenderExtension, { renderExtension: renderExtension, selector: `#${id}`, markup: markup }))));
|
|
29838
|
-
};
|
|
29839
|
-
const IFrameMarkdownView = ({ exactHeight, markup, isEmpty, renderExtension, className, }) => {
|
|
29840
|
-
const [frame, setFrame] = React.useState();
|
|
29841
|
-
const [loaded, setLoaded] = React.useState(false);
|
|
29842
|
-
const updateTimeoutHandle = React.useRef();
|
|
29843
|
-
const updateDimensions = React.useCallback(() => {
|
|
29844
|
-
var _a;
|
|
29845
|
-
if (!((_a = frame === null || frame === void 0 ? void 0 : frame.contentWindow) === null || _a === void 0 ? void 0 : _a.document.body.firstChild)) {
|
|
29846
|
-
return;
|
|
29847
|
-
}
|
|
29848
|
-
frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight}px`;
|
|
29849
|
-
// Let the new height take effect, then reset again once we recompute
|
|
29850
|
-
updateTimeoutHandle.current = setTimeout(() => {
|
|
29851
|
-
if (exactHeight) {
|
|
29852
|
-
frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight}px`;
|
|
29853
|
-
}
|
|
29854
|
-
else {
|
|
29855
|
-
// Increase by 15px for the case where a horizontal scrollbar might appear
|
|
29856
|
-
frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight + 15}px`;
|
|
29857
|
-
}
|
|
29858
|
-
});
|
|
29859
|
-
}, [frame, exactHeight]);
|
|
29860
|
-
React.useEffect(() => () => {
|
|
29861
|
-
clearTimeout(updateTimeoutHandle.current);
|
|
29862
|
-
}, []);
|
|
29863
|
-
const onLoad = React.useCallback(() => {
|
|
29864
|
-
updateDimensions();
|
|
29865
|
-
setLoaded(true);
|
|
29866
|
-
}, [updateDimensions]);
|
|
29867
|
-
// Find the app's stylesheets and inject them into the frame to ensure consistent styling.
|
|
29868
|
-
const filteredLinks = Array.from(document.getElementsByTagName('link')).filter((l) => l.href.includes('app-bundle'));
|
|
29761
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
29762
|
+
const DOMPurify = require('dompurify');
|
|
29763
|
+
const markdownConvert = (markdown, extensions) => {
|
|
29764
|
+
const converter = new showdown.Converter({
|
|
29765
|
+
tables: true,
|
|
29766
|
+
openLinksInNewWindow: true,
|
|
29767
|
+
strikethrough: true,
|
|
29768
|
+
emoji: false,
|
|
29769
|
+
});
|
|
29770
|
+
if (extensions) {
|
|
29771
|
+
converter.addExtension(extensions);
|
|
29772
|
+
}
|
|
29773
|
+
DOMPurify.addHook('beforeSanitizeElements', function (node) {
|
|
29774
|
+
// nodeType 1 = element type
|
|
29775
|
+
// transform anchor tags
|
|
29776
|
+
if (node.nodeType === 1 && node.nodeName.toLowerCase() === 'a') {
|
|
29777
|
+
node.setAttribute('rel', 'noopener noreferrer');
|
|
29778
|
+
return node;
|
|
29779
|
+
}
|
|
29780
|
+
// add PF class to ul and ol lists
|
|
29781
|
+
if (node.nodeType === 1 &&
|
|
29782
|
+
(node.nodeName.toLowerCase() === 'ul' || node.nodeName.toLowerCase() === 'ol')) {
|
|
29783
|
+
node.setAttribute('class', 'pf-v5-c-list');
|
|
29784
|
+
return node;
|
|
29785
|
+
}
|
|
29786
|
+
});
|
|
29787
|
+
// Add a hook to make all links open a new window
|
|
29788
|
+
DOMPurify.addHook('afterSanitizeAttributes', function (node) {
|
|
29789
|
+
// set all elements owning target to target=_blank
|
|
29790
|
+
if ('target' in node) {
|
|
29791
|
+
node.setAttribute('target', '_blank');
|
|
29792
|
+
}
|
|
29793
|
+
// set non-HTML/MathML links to xlink:show=new
|
|
29794
|
+
if (!node.hasAttribute('target') &&
|
|
29795
|
+
(node.hasAttribute('xlink:href') || node.hasAttribute('href'))) {
|
|
29796
|
+
node.setAttribute('xlink:show', 'new');
|
|
29797
|
+
}
|
|
29798
|
+
});
|
|
29799
|
+
return DOMPurify.sanitize(converter.makeHtml(markdown), {
|
|
29800
|
+
USE_PROFILES: {
|
|
29801
|
+
html: true,
|
|
29802
|
+
svg: true,
|
|
29803
|
+
},
|
|
29804
|
+
});
|
|
29805
|
+
};
|
|
29806
|
+
const SyncMarkdownView = ({ content, emptyMsg, extensions, renderExtension, exactHeight, inline, className, }) => {
|
|
29807
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
29808
|
+
const markup = React.useMemo(() => markdownConvert(content || emptyMsg || getResource('Not available'), extensions), [content, emptyMsg, extensions, getResource]);
|
|
29809
|
+
const innerProps = {
|
|
29810
|
+
renderExtension: (extensions === null || extensions === void 0 ? void 0 : extensions.length) > 0 ? renderExtension : undefined,
|
|
29811
|
+
exactHeight,
|
|
29812
|
+
markup,
|
|
29813
|
+
isEmpty: !content,
|
|
29814
|
+
className,
|
|
29815
|
+
};
|
|
29816
|
+
return inline ? React.createElement(InlineMarkdownView, Object.assign({}, innerProps)) : React.createElement(IFrameMarkdownView, Object.assign({}, innerProps));
|
|
29817
|
+
};
|
|
29818
|
+
const uniqueId = (function () {
|
|
29819
|
+
let num = 0;
|
|
29820
|
+
return function (prefix) {
|
|
29821
|
+
const prefixStr = String(prefix) || '';
|
|
29822
|
+
num += 1;
|
|
29823
|
+
return prefixStr + num;
|
|
29824
|
+
};
|
|
29825
|
+
})();
|
|
29826
|
+
const RenderExtension = ({ renderExtension, selector, markup, docContext, }) => {
|
|
29827
|
+
const forceRender = useForceRender();
|
|
29828
|
+
const markupRef = React.useRef(null);
|
|
29829
|
+
const shouldRenderExtension = React.useCallback(() => {
|
|
29830
|
+
if (markupRef.current === markup) {
|
|
29831
|
+
return true;
|
|
29832
|
+
}
|
|
29833
|
+
markupRef.current = markup;
|
|
29834
|
+
return false;
|
|
29835
|
+
}, [markup]);
|
|
29836
|
+
/**
|
|
29837
|
+
* During a render cycle in which markup changes, renderExtension receives an old copy of document
|
|
29838
|
+
* because react is still updating the dom using `dangerouslySetInnerHTML` with latest markdown markup
|
|
29839
|
+
* which causes the component rendered by renderExtension to receive old copy of document
|
|
29840
|
+
* use forceRender to delay the rendering of extension by one render cycle
|
|
29841
|
+
*/
|
|
29842
|
+
React.useEffect(() => {
|
|
29843
|
+
if (renderExtension) {
|
|
29844
|
+
forceRender();
|
|
29845
|
+
}
|
|
29846
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29847
|
+
}, [markup]);
|
|
29848
|
+
return (React.createElement(React.Fragment, null, shouldRenderExtension() ? renderExtension === null || renderExtension === void 0 ? void 0 : renderExtension(docContext !== null && docContext !== void 0 ? docContext : document, selector) : null));
|
|
29849
|
+
};
|
|
29850
|
+
const InlineMarkdownView = ({ markup, isEmpty, renderExtension, className, }) => {
|
|
29851
|
+
const id = React.useMemo(() => uniqueId('markdown'), []);
|
|
29852
|
+
return (React.createElement("div", { className: css('pfext-markdown-view', { 'is-empty': isEmpty }, className), id: id },
|
|
29853
|
+
React.createElement("div", { dangerouslySetInnerHTML: { __html: markup } }),
|
|
29854
|
+
renderExtension && (React.createElement(RenderExtension, { renderExtension: renderExtension, selector: `#${id}`, markup: markup }))));
|
|
29855
|
+
};
|
|
29856
|
+
const IFrameMarkdownView = ({ exactHeight, markup, isEmpty, renderExtension, className, }) => {
|
|
29857
|
+
const [frame, setFrame] = React.useState();
|
|
29858
|
+
const [loaded, setLoaded] = React.useState(false);
|
|
29859
|
+
const updateTimeoutHandle = React.useRef();
|
|
29860
|
+
const updateDimensions = React.useCallback(() => {
|
|
29861
|
+
var _a;
|
|
29862
|
+
if (!((_a = frame === null || frame === void 0 ? void 0 : frame.contentWindow) === null || _a === void 0 ? void 0 : _a.document.body.firstChild)) {
|
|
29863
|
+
return;
|
|
29864
|
+
}
|
|
29865
|
+
frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight}px`;
|
|
29866
|
+
// Let the new height take effect, then reset again once we recompute
|
|
29867
|
+
updateTimeoutHandle.current = setTimeout(() => {
|
|
29868
|
+
if (exactHeight) {
|
|
29869
|
+
frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight}px`;
|
|
29870
|
+
}
|
|
29871
|
+
else {
|
|
29872
|
+
// Increase by 15px for the case where a horizontal scrollbar might appear
|
|
29873
|
+
frame.style.height = `${frame.contentWindow.document.body.firstElementChild.scrollHeight + 15}px`;
|
|
29874
|
+
}
|
|
29875
|
+
});
|
|
29876
|
+
}, [frame, exactHeight]);
|
|
29877
|
+
React.useEffect(() => () => {
|
|
29878
|
+
clearTimeout(updateTimeoutHandle.current);
|
|
29879
|
+
}, []);
|
|
29880
|
+
const onLoad = React.useCallback(() => {
|
|
29881
|
+
updateDimensions();
|
|
29882
|
+
setLoaded(true);
|
|
29883
|
+
}, [updateDimensions]);
|
|
29884
|
+
// Find the app's stylesheets and inject them into the frame to ensure consistent styling.
|
|
29885
|
+
const filteredLinks = Array.from(document.getElementsByTagName('link')).filter((l) => l.href.includes('app-bundle'));
|
|
29869
29886
|
const linkRefs = filteredLinks.reduce((refs, link) => `${refs}
|
|
29870
|
-
<link rel="stylesheet" href="${link.href}">`, '');
|
|
29887
|
+
<link rel="stylesheet" href="${link.href}">`, '');
|
|
29871
29888
|
const contents = `
|
|
29872
29889
|
${linkRefs}
|
|
29873
29890
|
<style type="text/css">
|
|
@@ -29892,148 +29909,148 @@ const IFrameMarkdownView = ({ exactHeight, markup, isEmpty, renderExtension, cla
|
|
|
29892
29909
|
padding-top: 0;
|
|
29893
29910
|
}
|
|
29894
29911
|
</style>
|
|
29895
|
-
<body class="pf-m-redhat-font"><div style="overflow-y: auto;">${markup}</div></body>`;
|
|
29896
|
-
return (React.createElement(React.Fragment, null,
|
|
29897
|
-
React.createElement("iframe", { sandbox: "allow-popups allow-popups-to-escape-sandbox allow-same-origin", srcDoc: contents, style: { border: '0px', display: 'block', width: '100%', height: '0' }, ref: (r) => setFrame(r), onLoad: () => onLoad(), className: className }),
|
|
29898
|
-
loaded && frame && renderExtension && (React.createElement(RenderExtension, { markup: markup, selector: '', renderExtension: renderExtension, docContext: frame.contentDocument }))));
|
|
29912
|
+
<body class="pf-m-redhat-font"><div style="overflow-y: auto;">${markup}</div></body>`;
|
|
29913
|
+
return (React.createElement(React.Fragment, null,
|
|
29914
|
+
React.createElement("iframe", { sandbox: "allow-popups allow-popups-to-escape-sandbox allow-same-origin", srcDoc: contents, style: { border: '0px', display: 'block', width: '100%', height: '0' }, ref: (r) => setFrame(r), onLoad: () => onLoad(), className: className }),
|
|
29915
|
+
loaded && frame && renderExtension && (React.createElement(RenderExtension, { markup: markup, selector: '', renderExtension: renderExtension, docContext: frame.contentDocument }))));
|
|
29899
29916
|
};
|
|
29900
29917
|
|
|
29901
|
-
const LINK_LABEL = '[\\d\\w\\s-()$!]+';
|
|
29902
|
-
const HIGHLIGHT_ACTIONS = ['highlight'];
|
|
29903
|
-
const SELECTOR_ID = `[\\w-]+`;
|
|
29904
|
-
// [linkLabel]{{action id}}
|
|
29918
|
+
const LINK_LABEL = '[\\d\\w\\s-()$!]+';
|
|
29919
|
+
const HIGHLIGHT_ACTIONS = ['highlight'];
|
|
29920
|
+
const SELECTOR_ID = `[\\w-]+`;
|
|
29921
|
+
// [linkLabel]{{action id}}
|
|
29905
29922
|
const HIGHLIGHT_REGEXP = new RegExp(`\\[(${LINK_LABEL})]{{(${HIGHLIGHT_ACTIONS.join('|')}) (${SELECTOR_ID})}}`, 'g');
|
|
29906
29923
|
|
|
29907
|
-
const removeParagraphWrap = (markdown) => markdown.replace(/^<p>|<\/p>$/g, '');
|
|
29908
|
-
const QuickStartMarkdownView = ({ content, exactHeight, className, }) => {
|
|
29909
|
-
const { markdown } = React.useContext(QuickStartContext);
|
|
29910
|
-
const inlineCopyClipboardShowdownExtension = useInlineCopyClipboardShowdownExtension();
|
|
29911
|
-
const multilineCopyClipboardShowdownExtension = useMultilineCopyClipboardShowdownExtension();
|
|
29912
|
-
const admonitionShowdownExtension = useAdmonitionShowdownExtension();
|
|
29913
|
-
const codeShowdownExtension = useCodeShowdownExtension();
|
|
29914
|
-
const accordionShowdownExtension = useAccordionShowdownExtension();
|
|
29915
|
-
return (React.createElement(SyncMarkdownView, { inline: true, content: content, exactHeight: exactHeight, extensions: [
|
|
29916
|
-
{
|
|
29917
|
-
type: 'lang',
|
|
29918
|
-
regex: HIGHLIGHT_REGEXP,
|
|
29919
|
-
replace: (text, linkLabel, linkType, linkId) => {
|
|
29920
|
-
if (!linkLabel || !linkType || !linkId) {
|
|
29921
|
-
return text;
|
|
29922
|
-
}
|
|
29923
|
-
return `<button class="pf-v5-c-button pf-m-inline pf-m-link" data-highlight="${linkId}">${linkLabel}</button>`;
|
|
29924
|
-
},
|
|
29925
|
-
},
|
|
29926
|
-
{
|
|
29927
|
-
type: 'output',
|
|
29928
|
-
filter(text) {
|
|
29929
|
-
// check HTML for patterns like: <em>Status: unknown</em>{#extension-requirement-status}
|
|
29930
|
-
// and replace with <em id="extension-requirement-status">Status: unknown</em>
|
|
29931
|
-
return text.replace(/<em>(.*)<\/em>{#(.*)}/g, '<em id="$2">$1</em>');
|
|
29932
|
-
},
|
|
29933
|
-
},
|
|
29934
|
-
inlineCopyClipboardShowdownExtension,
|
|
29935
|
-
multilineCopyClipboardShowdownExtension,
|
|
29936
|
-
admonitionShowdownExtension,
|
|
29937
|
-
codeShowdownExtension,
|
|
29938
|
-
accordionShowdownExtension,
|
|
29939
|
-
...(markdown ? markdown.extensions : []),
|
|
29940
|
-
], renderExtension: (docContext, rootSelector) => (React.createElement(React.Fragment, null,
|
|
29941
|
-
React.createElement(AccordionRenderExtension, { docContext: docContext }),
|
|
29942
|
-
React.createElement(MarkdownHighlightExtension, { docContext: docContext, rootSelector: rootSelector }),
|
|
29943
|
-
React.createElement(MarkdownCopyClipboard, { docContext: docContext, rootSelector: rootSelector }),
|
|
29944
|
-
markdown &&
|
|
29945
|
-
markdown.renderExtension &&
|
|
29946
|
-
markdown.renderExtension(docContext, rootSelector))), className: className }));
|
|
29947
|
-
};
|
|
29948
|
-
|
|
29949
|
-
var AdmonitionType;
|
|
29950
|
-
(function (AdmonitionType) {
|
|
29951
|
-
AdmonitionType["TIP"] = "TIP";
|
|
29952
|
-
AdmonitionType["NOTE"] = "NOTE";
|
|
29953
|
-
AdmonitionType["IMPORTANT"] = "IMPORTANT";
|
|
29954
|
-
AdmonitionType["WARNING"] = "WARNING";
|
|
29955
|
-
AdmonitionType["CAUTION"] = "CAUTION";
|
|
29956
|
-
})(AdmonitionType || (AdmonitionType = {}));
|
|
29957
|
-
const admonitionToAlertVariantMap = {
|
|
29958
|
-
[AdmonitionType.NOTE]: { variant: 'info' },
|
|
29959
|
-
[AdmonitionType.TIP]: { variant: 'default', customIcon: React.createElement(LightbulbIcon, null) },
|
|
29960
|
-
[AdmonitionType.IMPORTANT]: { variant: 'danger' },
|
|
29961
|
-
[AdmonitionType.CAUTION]: { variant: 'warning', customIcon: React.createElement(FireIcon, null) },
|
|
29962
|
-
[AdmonitionType.WARNING]: { variant: 'warning' },
|
|
29963
|
-
};
|
|
29964
|
-
const useAdmonitionShowdownExtension = () =>
|
|
29965
|
-
// const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
|
|
29966
|
-
React.useMemo(() => ({
|
|
29967
|
-
type: 'lang',
|
|
29968
|
-
regex: /\[(.+)]{{(admonition) ([\w-]+)}}/g,
|
|
29969
|
-
replace: (text, content, admonitionLabel, admonitionType, groupId) => {
|
|
29970
|
-
if (!content || !admonitionLabel || !admonitionType || !groupId) {
|
|
29971
|
-
return text;
|
|
29972
|
-
}
|
|
29973
|
-
admonitionType = admonitionType.toUpperCase();
|
|
29974
|
-
const { variant, customIcon } = admonitionToAlertVariantMap[admonitionType];
|
|
29975
|
-
const style = admonitionType === AdmonitionType.CAUTION ? { backgroundColor: '#ec7a0915' } : {};
|
|
29976
|
-
const mdContent = React.createElement(QuickStartMarkdownView, { content: content });
|
|
29977
|
-
const pfAlert = (React.createElement(Alert, { variant: variant, customIcon: customIcon && customIcon, isInline: true, title: admonitionType, className: "pfext-markdown-admonition", style: style }, mdContent));
|
|
29978
|
-
return removeTemplateWhitespace(renderToStaticMarkup(pfAlert));
|
|
29979
|
-
},
|
|
29924
|
+
const removeParagraphWrap = (markdown) => markdown.replace(/^<p>|<\/p>$/g, '');
|
|
29925
|
+
const QuickStartMarkdownView = ({ content, exactHeight, className, }) => {
|
|
29926
|
+
const { markdown } = React.useContext(QuickStartContext);
|
|
29927
|
+
const inlineCopyClipboardShowdownExtension = useInlineCopyClipboardShowdownExtension();
|
|
29928
|
+
const multilineCopyClipboardShowdownExtension = useMultilineCopyClipboardShowdownExtension();
|
|
29929
|
+
const admonitionShowdownExtension = useAdmonitionShowdownExtension();
|
|
29930
|
+
const codeShowdownExtension = useCodeShowdownExtension();
|
|
29931
|
+
const accordionShowdownExtension = useAccordionShowdownExtension();
|
|
29932
|
+
return (React.createElement(SyncMarkdownView, { inline: true, content: content, exactHeight: exactHeight, extensions: [
|
|
29933
|
+
{
|
|
29934
|
+
type: 'lang',
|
|
29935
|
+
regex: HIGHLIGHT_REGEXP,
|
|
29936
|
+
replace: (text, linkLabel, linkType, linkId) => {
|
|
29937
|
+
if (!linkLabel || !linkType || !linkId) {
|
|
29938
|
+
return text;
|
|
29939
|
+
}
|
|
29940
|
+
return `<button class="pf-v5-c-button pf-m-inline pf-m-link" data-highlight="${linkId}">${linkLabel}</button>`;
|
|
29941
|
+
},
|
|
29942
|
+
},
|
|
29943
|
+
{
|
|
29944
|
+
type: 'output',
|
|
29945
|
+
filter(text) {
|
|
29946
|
+
// check HTML for patterns like: <em>Status: unknown</em>{#extension-requirement-status}
|
|
29947
|
+
// and replace with <em id="extension-requirement-status">Status: unknown</em>
|
|
29948
|
+
return text.replace(/<em>(.*)<\/em>{#(.*)}/g, '<em id="$2">$1</em>');
|
|
29949
|
+
},
|
|
29950
|
+
},
|
|
29951
|
+
inlineCopyClipboardShowdownExtension,
|
|
29952
|
+
multilineCopyClipboardShowdownExtension,
|
|
29953
|
+
admonitionShowdownExtension,
|
|
29954
|
+
codeShowdownExtension,
|
|
29955
|
+
accordionShowdownExtension,
|
|
29956
|
+
...(markdown ? markdown.extensions : []),
|
|
29957
|
+
], renderExtension: (docContext, rootSelector) => (React.createElement(React.Fragment, null,
|
|
29958
|
+
React.createElement(AccordionRenderExtension, { docContext: docContext }),
|
|
29959
|
+
React.createElement(MarkdownHighlightExtension, { docContext: docContext, rootSelector: rootSelector }),
|
|
29960
|
+
React.createElement(MarkdownCopyClipboard, { docContext: docContext, rootSelector: rootSelector }),
|
|
29961
|
+
markdown &&
|
|
29962
|
+
markdown.renderExtension &&
|
|
29963
|
+
markdown.renderExtension(docContext, rootSelector))), className: className }));
|
|
29964
|
+
};
|
|
29965
|
+
|
|
29966
|
+
var AdmonitionType;
|
|
29967
|
+
(function (AdmonitionType) {
|
|
29968
|
+
AdmonitionType["TIP"] = "TIP";
|
|
29969
|
+
AdmonitionType["NOTE"] = "NOTE";
|
|
29970
|
+
AdmonitionType["IMPORTANT"] = "IMPORTANT";
|
|
29971
|
+
AdmonitionType["WARNING"] = "WARNING";
|
|
29972
|
+
AdmonitionType["CAUTION"] = "CAUTION";
|
|
29973
|
+
})(AdmonitionType || (AdmonitionType = {}));
|
|
29974
|
+
const admonitionToAlertVariantMap = {
|
|
29975
|
+
[AdmonitionType.NOTE]: { variant: 'info' },
|
|
29976
|
+
[AdmonitionType.TIP]: { variant: 'default', customIcon: React.createElement(LightbulbIcon, null) },
|
|
29977
|
+
[AdmonitionType.IMPORTANT]: { variant: 'danger' },
|
|
29978
|
+
[AdmonitionType.CAUTION]: { variant: 'warning', customIcon: React.createElement(FireIcon, null) },
|
|
29979
|
+
[AdmonitionType.WARNING]: { variant: 'warning' },
|
|
29980
|
+
};
|
|
29981
|
+
const useAdmonitionShowdownExtension = () =>
|
|
29982
|
+
// const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
|
|
29983
|
+
React.useMemo(() => ({
|
|
29984
|
+
type: 'lang',
|
|
29985
|
+
regex: /\[(.+)]{{(admonition) ([\w-]+)}}/g,
|
|
29986
|
+
replace: (text, content, admonitionLabel, admonitionType, groupId) => {
|
|
29987
|
+
if (!content || !admonitionLabel || !admonitionType || !groupId) {
|
|
29988
|
+
return text;
|
|
29989
|
+
}
|
|
29990
|
+
admonitionType = admonitionType.toUpperCase();
|
|
29991
|
+
const { variant, customIcon } = admonitionToAlertVariantMap[admonitionType];
|
|
29992
|
+
const style = admonitionType === AdmonitionType.CAUTION ? { backgroundColor: '#ec7a0915' } : {};
|
|
29993
|
+
const mdContent = React.createElement(QuickStartMarkdownView, { content: content });
|
|
29994
|
+
const pfAlert = (React.createElement(Alert, { variant: variant, customIcon: customIcon && customIcon, isInline: true, title: admonitionType, className: "pfext-markdown-admonition", style: style }, mdContent));
|
|
29995
|
+
return removeTemplateWhitespace(renderToStaticMarkup(pfAlert));
|
|
29996
|
+
},
|
|
29980
29997
|
}), []);
|
|
29981
29998
|
|
|
29982
|
-
const useCodeShowdownExtension = () => React.useMemo(() => ({
|
|
29983
|
-
type: 'output',
|
|
29984
|
-
regex: /<pre><code>(.*?)\n?<\/code><\/pre>/g,
|
|
29985
|
-
replace: (text, content) => {
|
|
29986
|
-
if (!content) {
|
|
29987
|
-
return text;
|
|
29988
|
-
}
|
|
29989
|
-
const pfCodeBlock = React.createElement(CodeBlock, null, content);
|
|
29990
|
-
return removeTemplateWhitespace(renderToStaticMarkup(pfCodeBlock));
|
|
29991
|
-
},
|
|
29999
|
+
const useCodeShowdownExtension = () => React.useMemo(() => ({
|
|
30000
|
+
type: 'output',
|
|
30001
|
+
regex: /<pre><code>(.*?)\n?<\/code><\/pre>/g,
|
|
30002
|
+
replace: (text, content) => {
|
|
30003
|
+
if (!content) {
|
|
30004
|
+
return text;
|
|
30005
|
+
}
|
|
30006
|
+
const pfCodeBlock = React.createElement(CodeBlock, null, content);
|
|
30007
|
+
return removeTemplateWhitespace(renderToStaticMarkup(pfCodeBlock));
|
|
30008
|
+
},
|
|
29992
30009
|
}), []);
|
|
29993
30010
|
|
|
29994
|
-
const useAccordionShowdownExtension = () => React.useMemo(() => ({
|
|
29995
|
-
type: 'lang',
|
|
29996
|
-
regex: /\[(.+)]{{(accordion) ("(.*?)")}}/g,
|
|
29997
|
-
replace: (_text, accordionContent, _command, accordionHeading) => {
|
|
29998
|
-
const accordionId = String(accordionHeading).replace(/\s/g, '-');
|
|
29999
|
-
return removeTemplateWhitespace(renderToStaticMarkup(React.createElement(Accordion, { asDefinitionList: true },
|
|
30000
|
-
React.createElement(AccordionItem, null,
|
|
30001
|
-
React.createElement(AccordionToggle, { isExpanded: false, id: `${ACCORDION_MARKDOWN_BUTTON_ID}-${accordionId}` }, accordionHeading),
|
|
30002
|
-
React.createElement(AccordionContent, { id: `${ACCORDION_MARKDOWN_CONTENT_ID}-${accordionId}`, isHidden: !false }, accordionContent)))));
|
|
30003
|
-
},
|
|
30011
|
+
const useAccordionShowdownExtension = () => React.useMemo(() => ({
|
|
30012
|
+
type: 'lang',
|
|
30013
|
+
regex: /\[(.+)]{{(accordion) ("(.*?)")}}/g,
|
|
30014
|
+
replace: (_text, accordionContent, _command, accordionHeading) => {
|
|
30015
|
+
const accordionId = String(accordionHeading).replace(/\s/g, '-');
|
|
30016
|
+
return removeTemplateWhitespace(renderToStaticMarkup(React.createElement(Accordion, { asDefinitionList: true },
|
|
30017
|
+
React.createElement(AccordionItem, null,
|
|
30018
|
+
React.createElement(AccordionToggle, { isExpanded: false, id: `${ACCORDION_MARKDOWN_BUTTON_ID}-${accordionId}` }, accordionHeading),
|
|
30019
|
+
React.createElement(AccordionContent, { id: `${ACCORDION_MARKDOWN_CONTENT_ID}-${accordionId}`, isHidden: !false }, accordionContent)))));
|
|
30020
|
+
},
|
|
30004
30021
|
}), []);
|
|
30005
30022
|
|
|
30006
|
-
const AccordionShowdownHandler = ({ buttonElement, contentElement, }) => {
|
|
30007
|
-
const [expanded, setExpanded] = React.useState(false);
|
|
30008
|
-
const handleClick = () => {
|
|
30009
|
-
const expandedModifier = 'pf-m-expanded';
|
|
30010
|
-
buttonElement.className = `pf-v5-c-accordion__toggle ${!expanded ? expandedModifier : ''}`;
|
|
30011
|
-
contentElement.hidden = expanded;
|
|
30012
|
-
contentElement.className = `pf-v5-c-accordion__expanded-content ${!expanded ? expandedModifier : ''}`;
|
|
30013
|
-
setExpanded(!expanded);
|
|
30014
|
-
};
|
|
30015
|
-
useEventListener(buttonElement, 'click', handleClick);
|
|
30016
|
-
return React.createElement(React.Fragment, null);
|
|
30017
|
-
};
|
|
30018
|
-
const AccordionRenderExtension = ({ docContext }) => {
|
|
30019
|
-
const buttonElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_BUTTON_ID}]`);
|
|
30020
|
-
const contentElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_CONTENT_ID}]`);
|
|
30021
|
-
return buttonElements.length > 0 ? (React.createElement(React.Fragment, null, Array.from(buttonElements).map((elm) => {
|
|
30022
|
-
const content = Array.from(contentElements).find((elm2) => {
|
|
30023
|
-
const elmId = elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1];
|
|
30024
|
-
const elm2Id = elm2.id.split(ACCORDION_MARKDOWN_CONTENT_ID)[1];
|
|
30025
|
-
return elmId === elm2Id;
|
|
30026
|
-
});
|
|
30027
|
-
return (React.createElement(AccordionShowdownHandler, { key: elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1], buttonElement: elm, contentElement: content }));
|
|
30028
|
-
}))) : null;
|
|
30029
|
-
};
|
|
30030
|
-
|
|
30031
|
-
const FallbackImg = ({ src, alt, className, fallback }) => {
|
|
30032
|
-
const [isSrcValid, setIsSrcValid] = React.useState(true);
|
|
30033
|
-
if (src && isSrcValid) {
|
|
30034
|
-
return React.createElement("img", { className: className, src: src, alt: alt, onError: () => setIsSrcValid(false) });
|
|
30035
|
-
}
|
|
30036
|
-
return React.createElement(React.Fragment, null, fallback);
|
|
30023
|
+
const AccordionShowdownHandler = ({ buttonElement, contentElement, }) => {
|
|
30024
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
30025
|
+
const handleClick = () => {
|
|
30026
|
+
const expandedModifier = 'pf-m-expanded';
|
|
30027
|
+
buttonElement.className = `pf-v5-c-accordion__toggle ${!expanded ? expandedModifier : ''}`;
|
|
30028
|
+
contentElement.hidden = expanded;
|
|
30029
|
+
contentElement.className = `pf-v5-c-accordion__expanded-content ${!expanded ? expandedModifier : ''}`;
|
|
30030
|
+
setExpanded(!expanded);
|
|
30031
|
+
};
|
|
30032
|
+
useEventListener(buttonElement, 'click', handleClick);
|
|
30033
|
+
return React.createElement(React.Fragment, null);
|
|
30034
|
+
};
|
|
30035
|
+
const AccordionRenderExtension = ({ docContext }) => {
|
|
30036
|
+
const buttonElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_BUTTON_ID}]`);
|
|
30037
|
+
const contentElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_CONTENT_ID}]`);
|
|
30038
|
+
return buttonElements.length > 0 ? (React.createElement(React.Fragment, null, Array.from(buttonElements).map((elm) => {
|
|
30039
|
+
const content = Array.from(contentElements).find((elm2) => {
|
|
30040
|
+
const elmId = elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1];
|
|
30041
|
+
const elm2Id = elm2.id.split(ACCORDION_MARKDOWN_CONTENT_ID)[1];
|
|
30042
|
+
return elmId === elm2Id;
|
|
30043
|
+
});
|
|
30044
|
+
return (React.createElement(AccordionShowdownHandler, { key: elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1], buttonElement: elm, contentElement: content }));
|
|
30045
|
+
}))) : null;
|
|
30046
|
+
};
|
|
30047
|
+
|
|
30048
|
+
const FallbackImg = ({ src, alt, className, fallback }) => {
|
|
30049
|
+
const [isSrcValid, setIsSrcValid] = React.useState(true);
|
|
30050
|
+
if (src && isSrcValid) {
|
|
30051
|
+
return React.createElement("img", { className: className, src: src, alt: alt, onError: () => setIsSrcValid(false) });
|
|
30052
|
+
}
|
|
30053
|
+
return React.createElement(React.Fragment, null, fallback);
|
|
30037
30054
|
};
|
|
30038
30055
|
|
|
30039
30056
|
var syncAltIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -30054,26 +30071,26 @@ var SyncAltIcon = /*@__PURE__*/getDefaultExportFromCjs(syncAltIcon);
|
|
|
30054
30071
|
|
|
30055
30072
|
const DASH = '-';
|
|
30056
30073
|
|
|
30057
|
-
const PopoverStatus = ({ hideHeader, children, isVisible = null, statusBody, title, onHide, onShow, }) => (React.createElement(Popover, { position: PopoverPosition.right, headerContent: hideHeader ? null : title, bodyContent: children, "aria-label": title, onHide: onHide, onShow: onShow, isVisible: isVisible },
|
|
30074
|
+
const PopoverStatus = ({ hideHeader, children, isVisible = null, statusBody, title, onHide, onShow, }) => (React.createElement(Popover, { position: PopoverPosition.right, headerContent: hideHeader ? null : title, bodyContent: children, "aria-label": title, onHide: onHide, onShow: onShow, isVisible: isVisible },
|
|
30058
30075
|
React.createElement(Button, { variant: "link", isInline: true }, statusBody)));
|
|
30059
30076
|
|
|
30060
|
-
const StatusIconAndText = ({ icon, title, spin, iconOnly, noTooltip, className, }) => {
|
|
30061
|
-
if (!title) {
|
|
30062
|
-
return React.createElement(React.Fragment, null, DASH);
|
|
30063
|
-
}
|
|
30064
|
-
return (React.createElement("span", { className: css('pfext-icon-and-text', className), title: iconOnly && !noTooltip ? title : undefined },
|
|
30065
|
-
icon &&
|
|
30066
|
-
React.cloneElement(icon, {
|
|
30067
|
-
className: css(spin && 'fa-spin', icon.props.className, !iconOnly && 'pfext-icon-and-text__icon pfext-icon-flex-child'),
|
|
30068
|
-
}),
|
|
30069
|
-
!iconOnly && React.createElement(CamelCaseWrap, { value: title, dataTest: "status-text" })));
|
|
30077
|
+
const StatusIconAndText = ({ icon, title, spin, iconOnly, noTooltip, className, }) => {
|
|
30078
|
+
if (!title) {
|
|
30079
|
+
return React.createElement(React.Fragment, null, DASH);
|
|
30080
|
+
}
|
|
30081
|
+
return (React.createElement("span", { className: css('pfext-icon-and-text', className), title: iconOnly && !noTooltip ? title : undefined },
|
|
30082
|
+
icon &&
|
|
30083
|
+
React.cloneElement(icon, {
|
|
30084
|
+
className: css(spin && 'fa-spin', icon.props.className, !iconOnly && 'pfext-icon-and-text__icon pfext-icon-flex-child'),
|
|
30085
|
+
}),
|
|
30086
|
+
!iconOnly && React.createElement(CamelCaseWrap, { value: title, dataTest: "status-text" })));
|
|
30070
30087
|
};
|
|
30071
30088
|
|
|
30072
|
-
const GenericStatus = (props) => {
|
|
30073
|
-
const { Icon, children, popoverTitle, title, noTooltip, iconOnly } = props, restProps = __rest(props, ["Icon", "children", "popoverTitle", "title", "noTooltip", "iconOnly"]);
|
|
30074
|
-
const renderIcon = iconOnly && !noTooltip ? React.createElement(Icon, { title: title }) : React.createElement(Icon, null);
|
|
30075
|
-
const statusBody = (React.createElement(StatusIconAndText, Object.assign({}, restProps, { noTooltip: noTooltip, title: title, iconOnly: iconOnly, icon: renderIcon })));
|
|
30076
|
-
return React.Children.toArray(children).length ? (React.createElement(PopoverStatus, Object.assign({ title: popoverTitle || title }, restProps, { statusBody: statusBody }), children)) : (statusBody);
|
|
30089
|
+
const GenericStatus = (props) => {
|
|
30090
|
+
const { Icon, children, popoverTitle, title, noTooltip, iconOnly } = props, restProps = __rest(props, ["Icon", "children", "popoverTitle", "title", "noTooltip", "iconOnly"]);
|
|
30091
|
+
const renderIcon = iconOnly && !noTooltip ? React.createElement(Icon, { title: title }) : React.createElement(Icon, null);
|
|
30092
|
+
const statusBody = (React.createElement(StatusIconAndText, Object.assign({}, restProps, { noTooltip: noTooltip, title: title, iconOnly: iconOnly, icon: renderIcon })));
|
|
30093
|
+
return React.Children.toArray(children).length ? (React.createElement(PopoverStatus, Object.assign({ title: popoverTitle || title }, restProps, { statusBody: statusBody }), children)) : (statusBody);
|
|
30077
30094
|
};
|
|
30078
30095
|
|
|
30079
30096
|
var checkCircleIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -30130,68 +30147,68 @@ const global_palette_green_500 = {
|
|
|
30130
30147
|
"var": "var(--pf-v5-global--palette--green-500)"
|
|
30131
30148
|
};
|
|
30132
30149
|
|
|
30133
|
-
const GreenCheckCircleIcon = ({ className, title, size }) => (React.createElement(Icon, { size: size },
|
|
30150
|
+
const GreenCheckCircleIcon = ({ className, title, size }) => (React.createElement(Icon, { size: size },
|
|
30134
30151
|
React.createElement(CheckCircleIcon, { "data-test": "success-icon", color: global_palette_green_500.value, className: className, title: title })));
|
|
30135
30152
|
|
|
30136
|
-
const SuccessStatus = (props) => (React.createElement(GenericStatus, Object.assign({}, props, { Icon: GreenCheckCircleIcon, title: props.title || 'Healthy' })));
|
|
30153
|
+
const SuccessStatus = (props) => (React.createElement(GenericStatus, Object.assign({}, props, { Icon: GreenCheckCircleIcon, title: props.title || 'Healthy' })));
|
|
30137
30154
|
SuccessStatus.displayName = 'SuccessStatus';
|
|
30138
30155
|
|
|
30139
|
-
const Status = ({ status, title, iconOnly, noTooltip, className, }) => {
|
|
30140
|
-
const statusProps = { title: title || status, iconOnly, noTooltip, className };
|
|
30141
|
-
switch (status) {
|
|
30142
|
-
case 'In Progress':
|
|
30143
|
-
return React.createElement(StatusIconAndText, Object.assign({}, statusProps, { icon: React.createElement(SyncAltIcon, null) }));
|
|
30144
|
-
case 'Complete':
|
|
30145
|
-
return React.createElement(SuccessStatus, Object.assign({}, statusProps));
|
|
30146
|
-
default:
|
|
30147
|
-
return React.createElement(React.Fragment, null, status || DASH);
|
|
30148
|
-
}
|
|
30149
|
-
};
|
|
30156
|
+
const Status = ({ status, title, iconOnly, noTooltip, className, }) => {
|
|
30157
|
+
const statusProps = { title: title || status, iconOnly, noTooltip, className };
|
|
30158
|
+
switch (status) {
|
|
30159
|
+
case 'In Progress':
|
|
30160
|
+
return React.createElement(StatusIconAndText, Object.assign({}, statusProps, { icon: React.createElement(SyncAltIcon, null) }));
|
|
30161
|
+
case 'Complete':
|
|
30162
|
+
return React.createElement(SuccessStatus, Object.assign({}, statusProps));
|
|
30163
|
+
default:
|
|
30164
|
+
return React.createElement(React.Fragment, null, status || DASH);
|
|
30165
|
+
}
|
|
30166
|
+
};
|
|
30150
30167
|
const StatusIcon = ({ status }) => (React.createElement(Status, { status: status, iconOnly: true }));
|
|
30151
30168
|
|
|
30152
|
-
const QuickStartTileDescription = ({ description, prerequisites, }) => {
|
|
30153
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30154
|
-
const prereqs = prerequisites === null || prerequisites === void 0 ? void 0 : prerequisites.filter((p) => p);
|
|
30155
|
-
return (React.createElement(React.Fragment, null,
|
|
30156
|
-
React.createElement(QuickStartMarkdownView, { content: description, className: "pfext-quick-start-tile-description" }),
|
|
30157
|
-
(prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (React.createElement("div", { className: "pfext-quick-start-tile-prerequisites" },
|
|
30158
|
-
React.createElement(Text, { component: TextVariants.h5, className: "pfext-quick-start-tile-prerequisites__text" },
|
|
30159
|
-
getResource('Prerequisites ({{totalPrereqs}})').replace('{{totalPrereqs}}', prereqs.length),
|
|
30160
|
-
' '),
|
|
30161
|
-
React.createElement(Popover, { "aria-label": getResource('Prerequisites'), headerContent: getResource('Prerequisites'), className: "pfext-quick-start__base", bodyContent: React.createElement("div", { className: "pfext-popover__base" },
|
|
30162
|
-
React.createElement(TextList, { "aria-label": getResource('Prerequisites'), className: "pfext-quick-start-tile-prerequisites-list" }, prereqs.map((prerequisite, index) => (
|
|
30163
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
30164
|
-
React.createElement(TextListItem, { key: index },
|
|
30165
|
-
React.createElement(QuickStartMarkdownView, { content: prerequisite })))))) },
|
|
30166
|
-
React.createElement(Button, { variant: "link", isInline: true, className: "pfext-quick-start-tile-prerequisites__icon", "data-testid": "qs-card-prereqs", onClick: (e) => {
|
|
30167
|
-
e.preventDefault();
|
|
30168
|
-
e.stopPropagation();
|
|
30169
|
-
}, "aria-label": getResource('Show prerequisites') },
|
|
30170
|
-
React.createElement(InfoCircleIcon, null)))))));
|
|
30171
|
-
};
|
|
30172
|
-
|
|
30173
|
-
const QuickStartTileFooter = ({ quickStartId, status, totalTasks, }) => {
|
|
30174
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30175
|
-
const { activeQuickStartID, startQuickStart, restartQuickStart } = React.useContext(QuickStartContext);
|
|
30176
|
-
const start = React.useCallback((e) => {
|
|
30177
|
-
e.preventDefault();
|
|
30178
|
-
e.stopPropagation();
|
|
30179
|
-
startQuickStart(quickStartId, totalTasks);
|
|
30180
|
-
}, [quickStartId, startQuickStart, totalTasks]);
|
|
30181
|
-
const restart = React.useCallback((e) => {
|
|
30182
|
-
e.preventDefault();
|
|
30183
|
-
e.stopPropagation();
|
|
30184
|
-
restartQuickStart(quickStartId, totalTasks);
|
|
30185
|
-
}, [quickStartId, restartQuickStart, totalTasks]);
|
|
30186
|
-
return (React.createElement(Flex, { justifyContent: { default: 'justifyContentSpaceBetween' } },
|
|
30187
|
-
status === QuickStartStatus.NOT_STARTED && (React.createElement(FlexItem, null,
|
|
30188
|
-
React.createElement(Button, { onClick: start, variant: "link", isInline: true, "data-testid": "qs-card-notStarted-start", id: `${quickStartId}-start`, "aria-labelledby": `${quickStartId}-start ${quickStartId}` }, getResource('Start')))),
|
|
30189
|
-
status === QuickStartStatus.IN_PROGRESS && activeQuickStartID !== quickStartId && (React.createElement(FlexItem, null,
|
|
30190
|
-
React.createElement(Button, { variant: "link", isInline: true, "data-testid": "qs-card-inProgress-resume", id: `${quickStartId}-continue`, "aria-labelledby": `${quickStartId}-continue ${quickStartId}` }, getResource('Continue')))),
|
|
30191
|
-
status === QuickStartStatus.COMPLETE && (React.createElement(FlexItem, null,
|
|
30192
|
-
React.createElement(Button, { onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-complete-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, getResource('Restart')))),
|
|
30193
|
-
status === QuickStartStatus.IN_PROGRESS && (React.createElement(FlexItem, null,
|
|
30194
|
-
React.createElement(Button, { onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-inProgress-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, getResource('Restart'))))));
|
|
30169
|
+
const QuickStartTileDescription = ({ description, prerequisites, }) => {
|
|
30170
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30171
|
+
const prereqs = prerequisites === null || prerequisites === void 0 ? void 0 : prerequisites.filter((p) => p);
|
|
30172
|
+
return (React.createElement(React.Fragment, null,
|
|
30173
|
+
React.createElement(QuickStartMarkdownView, { content: description, className: "pfext-quick-start-tile-description" }),
|
|
30174
|
+
(prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (React.createElement("div", { className: "pfext-quick-start-tile-prerequisites" },
|
|
30175
|
+
React.createElement(Text, { component: TextVariants.h5, className: "pfext-quick-start-tile-prerequisites__text" },
|
|
30176
|
+
getResource('Prerequisites ({{totalPrereqs}})').replace('{{totalPrereqs}}', prereqs.length),
|
|
30177
|
+
' '),
|
|
30178
|
+
React.createElement(Popover, { "aria-label": getResource('Prerequisites'), headerContent: getResource('Prerequisites'), className: "pfext-quick-start__base", bodyContent: React.createElement("div", { className: "pfext-popover__base" },
|
|
30179
|
+
React.createElement(TextList, { "aria-label": getResource('Prerequisites'), className: "pfext-quick-start-tile-prerequisites-list" }, prereqs.map((prerequisite, index) => (
|
|
30180
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
30181
|
+
React.createElement(TextListItem, { key: index },
|
|
30182
|
+
React.createElement(QuickStartMarkdownView, { content: prerequisite })))))) },
|
|
30183
|
+
React.createElement(Button, { variant: "link", isInline: true, className: "pfext-quick-start-tile-prerequisites__icon", "data-testid": "qs-card-prereqs", onClick: (e) => {
|
|
30184
|
+
e.preventDefault();
|
|
30185
|
+
e.stopPropagation();
|
|
30186
|
+
}, "aria-label": getResource('Show prerequisites') },
|
|
30187
|
+
React.createElement(InfoCircleIcon, null)))))));
|
|
30188
|
+
};
|
|
30189
|
+
|
|
30190
|
+
const QuickStartTileFooter = ({ quickStartId, status, totalTasks, }) => {
|
|
30191
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30192
|
+
const { activeQuickStartID, startQuickStart, restartQuickStart } = React.useContext(QuickStartContext);
|
|
30193
|
+
const start = React.useCallback((e) => {
|
|
30194
|
+
e.preventDefault();
|
|
30195
|
+
e.stopPropagation();
|
|
30196
|
+
startQuickStart(quickStartId, totalTasks);
|
|
30197
|
+
}, [quickStartId, startQuickStart, totalTasks]);
|
|
30198
|
+
const restart = React.useCallback((e) => {
|
|
30199
|
+
e.preventDefault();
|
|
30200
|
+
e.stopPropagation();
|
|
30201
|
+
restartQuickStart(quickStartId, totalTasks);
|
|
30202
|
+
}, [quickStartId, restartQuickStart, totalTasks]);
|
|
30203
|
+
return (React.createElement(Flex, { justifyContent: { default: 'justifyContentSpaceBetween' } },
|
|
30204
|
+
status === QuickStartStatus.NOT_STARTED && (React.createElement(FlexItem, null,
|
|
30205
|
+
React.createElement(Button, { onClick: start, variant: "link", isInline: true, "data-testid": "qs-card-notStarted-start", id: `${quickStartId}-start`, "aria-labelledby": `${quickStartId}-start ${quickStartId}` }, getResource('Start')))),
|
|
30206
|
+
status === QuickStartStatus.IN_PROGRESS && activeQuickStartID !== quickStartId && (React.createElement(FlexItem, null,
|
|
30207
|
+
React.createElement(Button, { variant: "link", isInline: true, "data-testid": "qs-card-inProgress-resume", id: `${quickStartId}-continue`, "aria-labelledby": `${quickStartId}-continue ${quickStartId}` }, getResource('Continue')))),
|
|
30208
|
+
status === QuickStartStatus.COMPLETE && (React.createElement(FlexItem, null,
|
|
30209
|
+
React.createElement(Button, { onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-complete-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, getResource('Restart')))),
|
|
30210
|
+
status === QuickStartStatus.IN_PROGRESS && (React.createElement(FlexItem, null,
|
|
30211
|
+
React.createElement(Button, { onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-inProgress-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, getResource('Restart'))))));
|
|
30195
30212
|
};
|
|
30196
30213
|
|
|
30197
30214
|
var externalLinkAltIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -30210,11 +30227,11 @@ exports["default"] = exports.ExternalLinkAltIcon;
|
|
|
30210
30227
|
|
|
30211
30228
|
var ExternalLinkAltIcon = /*@__PURE__*/getDefaultExportFromCjs(externalLinkAltIcon);
|
|
30212
30229
|
|
|
30213
|
-
const QuickStartTileFooterExternal = ({ link, quickStartId, }) => {
|
|
30214
|
-
const { href, text } = link;
|
|
30215
|
-
return (React.createElement(Flex, { justifyContent: { default: 'justifyContentSpaceBetween' } },
|
|
30216
|
-
React.createElement(FlexItem, null,
|
|
30217
|
-
React.createElement(Button, { component: "a", href: href, target: "_blank", rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: React.createElement(ExternalLinkAltIcon, null), iconPosition: "right", id: quickStartId, "aria-labelledby": `${quickStartId}-external ${quickStartId}` }, text || href))));
|
|
30230
|
+
const QuickStartTileFooterExternal = ({ link, quickStartId, }) => {
|
|
30231
|
+
const { href, text } = link;
|
|
30232
|
+
return (React.createElement(Flex, { justifyContent: { default: 'justifyContentSpaceBetween' } },
|
|
30233
|
+
React.createElement(FlexItem, null,
|
|
30234
|
+
React.createElement(Button, { component: "a", href: href, target: "_blank", rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: React.createElement(ExternalLinkAltIcon, null), iconPosition: "right", id: quickStartId, "aria-labelledby": `${quickStartId}-external ${quickStartId}` }, text || href))));
|
|
30218
30235
|
};
|
|
30219
30236
|
|
|
30220
30237
|
var outlinedClockIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -30233,293 +30250,293 @@ exports["default"] = exports.OutlinedClockIcon;
|
|
|
30233
30250
|
|
|
30234
30251
|
var OutlinedClockIcon = /*@__PURE__*/getDefaultExportFromCjs(outlinedClockIcon);
|
|
30235
30252
|
|
|
30236
|
-
const statusColorMap = {
|
|
30237
|
-
[QuickStartStatus.COMPLETE]: 'green',
|
|
30238
|
-
[QuickStartStatus.IN_PROGRESS]: 'purple',
|
|
30239
|
-
[QuickStartStatus.NOT_STARTED]: 'grey',
|
|
30240
|
-
};
|
|
30241
|
-
const QuickStartTileHeader = ({ status, duration, name, type, quickStartId, }) => {
|
|
30242
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30243
|
-
const statusLocaleMap = {
|
|
30244
|
-
[QuickStartStatus.COMPLETE]: getResource('Complete'),
|
|
30245
|
-
[QuickStartStatus.IN_PROGRESS]: getResource('In progress'),
|
|
30246
|
-
[QuickStartStatus.NOT_STARTED]: getResource('Not started'),
|
|
30247
|
-
};
|
|
30248
|
-
return (React.createElement("div", { className: "pfext-quick-start-tile-header" },
|
|
30249
|
-
React.createElement(Title, { headingLevel: "h3", "data-test": "title", id: quickStartId },
|
|
30250
|
-
React.createElement(QuickStartMarkdownView, { content: name })),
|
|
30251
|
-
React.createElement("div", { className: "pfext-quick-start-tile-header__status" },
|
|
30252
|
-
type && (React.createElement(Label, { className: "pfext-quick-start-tile-header--margin", color: type.color }, type.text)),
|
|
30253
|
-
duration && (React.createElement(Label, { variant: "outline", "data-test": "duration", icon: React.createElement(OutlinedClockIcon, null), className: "pfext-quick-start-tile-header--margin" }, getResource('{{duration, number}} minutes', duration).replace('{{duration, number}}', duration))),
|
|
30254
|
-
status !== QuickStartStatus.NOT_STARTED && (React.createElement(Label, { variant: "outline", color: statusColorMap[status], icon: React.createElement(StatusIcon, { status: status }), "data-test": "status" }, statusLocaleMap[status])))));
|
|
30255
|
-
};
|
|
30256
|
-
|
|
30257
|
-
const QuickStartTile = ({ quickStart, status, isActive, onClick = () => { }, }) => {
|
|
30258
|
-
const { metadata: { name: id }, spec: { icon, tasks, displayName, description, durationMinutes, prerequisites, link, type }, } = quickStart;
|
|
30259
|
-
const { setActiveQuickStart, footer } = React.useContext(QuickStartContext);
|
|
30260
|
-
const ref = React.useRef(null);
|
|
30261
|
-
let quickStartIcon;
|
|
30262
|
-
if (typeof icon === 'object') {
|
|
30263
|
-
quickStartIcon = icon;
|
|
30264
|
-
}
|
|
30265
|
-
else {
|
|
30266
|
-
quickStartIcon = (React.createElement(FallbackImg, { className: "pfext-catalog-item-icon__img--large", src: icon, alt: "", fallback: React.createElement(RocketIcon, null) }));
|
|
30267
|
-
}
|
|
30268
|
-
const footerComponent = React.useMemo(() => {
|
|
30269
|
-
if (footer && footer.show === false) {
|
|
30270
|
-
return null;
|
|
30271
|
-
}
|
|
30272
|
-
if (link) {
|
|
30273
|
-
return React.createElement(QuickStartTileFooterExternal, { link: link, quickStartId: id });
|
|
30274
|
-
}
|
|
30275
|
-
return React.createElement(QuickStartTileFooter, { quickStartId: id, status: status, totalTasks: tasks === null || tasks === void 0 ? void 0 : tasks.length });
|
|
30276
|
-
}, [footer, id, link, status, tasks === null || tasks === void 0 ? void 0 : tasks.length]);
|
|
30277
|
-
const handleClick = (e) => {
|
|
30278
|
-
var _a;
|
|
30279
|
-
if ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
|
|
30280
|
-
if (link) {
|
|
30281
|
-
window.open(link.href);
|
|
30282
|
-
}
|
|
30283
|
-
else {
|
|
30284
|
-
setActiveQuickStart(id, tasks === null || tasks === void 0 ? void 0 : tasks.length);
|
|
30285
|
-
}
|
|
30286
|
-
onClick();
|
|
30287
|
-
}
|
|
30288
|
-
};
|
|
30289
|
-
return (React.createElement("div", { ref: ref },
|
|
30290
|
-
React.createElement(CatalogTile, { style: {
|
|
30291
|
-
cursor: 'pointer',
|
|
30292
|
-
}, icon: quickStartIcon, className: "pfext-quick-start-tile", "data-testid": `qs-card-${camelize(displayName)}`, featured: isActive, title: React.createElement(QuickStartTileHeader, { name: displayName, status: status, duration: durationMinutes, type: type, quickStartId: id }), onClick: handleClick, onKeyDown: (event) => {
|
|
30293
|
-
if (event.key === 'Enter' || event.key === ' ') {
|
|
30294
|
-
setActiveQuickStart(id, tasks === null || tasks === void 0 ? void 0 : tasks.length);
|
|
30295
|
-
onClick();
|
|
30296
|
-
}
|
|
30297
|
-
},
|
|
30298
|
-
// https://github.com/patternfly/patternfly-react/issues/7039
|
|
30299
|
-
href: link === null || link === void 0 ? void 0 : link.href, "data-test": `tile ${id}`, description: React.createElement(QuickStartTileDescription, { description: description, prerequisites: prerequisites }), footer: footerComponent, tabIndex: 0 })));
|
|
30300
|
-
};
|
|
30301
|
-
|
|
30302
|
-
const QuickStartCatalog = ({ quickStarts }) => {
|
|
30303
|
-
const { activeQuickStartID, allQuickStartStates } = React.useContext(QuickStartContext);
|
|
30304
|
-
return (React.createElement("div", { className: "pfext-page-layout__content" },
|
|
30305
|
-
React.createElement(Gallery, { className: "pfext-quick-start-catalog__gallery", hasGutter: true }, quickStarts.map((quickStart) => {
|
|
30306
|
-
const { metadata: { name: id }, } = quickStart;
|
|
30307
|
-
return (React.createElement(GalleryItem, { key: id, className: "pfext-quick-start-catalog__gallery-item" },
|
|
30308
|
-
React.createElement(QuickStartTile, { quickStart: quickStart, isActive: id === activeQuickStartID, status: getQuickStartStatus(allQuickStartStates, id) })));
|
|
30309
|
-
}))));
|
|
30310
|
-
};
|
|
30311
|
-
|
|
30312
|
-
const QuickStartCatalogFilterSearch = (_a) => {
|
|
30313
|
-
var { searchInputText, handleTextChange } = _a, props = __rest(_a, ["searchInputText", "handleTextChange"]);
|
|
30314
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30315
|
-
return (React.createElement(ToolbarItem, { className: "pfext-quick-start-catalog-filter__input" },
|
|
30316
|
-
React.createElement(SearchInput, Object.assign({ placeholder: getResource('Filter by keyword...'), value: searchInputText, onChange: (_ev, value) => handleTextChange(value), onClear: () => handleTextChange('') }, props))));
|
|
30317
|
-
};
|
|
30318
|
-
const QuickStartCatalogFilterSelect = (_a) => {
|
|
30319
|
-
var { isDropdownOpen, setIsDropdownOpen, onRowfilterSelect, selectedFilters, dropdownItems } = _a, props = __rest(_a, ["isDropdownOpen", "setIsDropdownOpen", "onRowfilterSelect", "selectedFilters", "dropdownItems"]);
|
|
30320
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30321
|
-
const toggle = (toggleRef) => (React.createElement(MenuToggle, { isFullWidth: true, ref: toggleRef, onClick: () => setIsDropdownOpen(!isDropdownOpen), isExpanded: isDropdownOpen },
|
|
30322
|
-
getResource('Status'),
|
|
30323
|
-
selectedFilters.length > 0 && React.createElement(Badge, { isRead: true }, selectedFilters.length)));
|
|
30324
|
-
return (React.createElement(ToolbarItem, null,
|
|
30325
|
-
React.createElement(Select, Object.assign({ "aria-label": getResource('Select filter'), isOpen: isDropdownOpen, selected: selectedFilters, onSelect: onRowfilterSelect, onOpenChange: (isOpen) => setIsDropdownOpen(isOpen), toggle: toggle }, props),
|
|
30326
|
-
React.createElement(SelectList, null, dropdownItems))));
|
|
30327
|
-
};
|
|
30328
|
-
const QuickStartCatalogFilterCount = ({ quickStartsCount }) => {
|
|
30329
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30330
|
-
return (React.createElement(ToolbarItem, { className: "pfext-quick-start-catalog-filter__count", align: { default: 'alignRight' } }, getResource('{{count, number}} item', quickStartsCount).replace('{{count, number}}', quickStartsCount)));
|
|
30331
|
-
};
|
|
30332
|
-
const QuickStartCatalogFilterSearchWrapper = ({ onSearchInputChange = () => { } }) => {
|
|
30333
|
-
const { useQueryParams, filter, setFilter } = React.useContext(QuickStartContext);
|
|
30334
|
-
React.useEffect(() => {
|
|
30335
|
-
// use this effect to clear the search when a `clear all` action is performed higher up
|
|
30336
|
-
const unlisten = history.listen(({ location }) => {
|
|
30337
|
-
const searchParams = new URLSearchParams(location.search);
|
|
30338
|
-
const searchQuery = searchParams.get(QUICKSTART_SEARCH_FILTER_KEY) || '';
|
|
30339
|
-
if (searchQuery === '') {
|
|
30340
|
-
setFilter('keyword', '');
|
|
30341
|
-
onSearchInputChange('');
|
|
30342
|
-
}
|
|
30343
|
-
});
|
|
30344
|
-
return () => {
|
|
30345
|
-
unlisten();
|
|
30346
|
-
};
|
|
30347
|
-
}, [onSearchInputChange, setFilter]);
|
|
30348
|
-
const handleTextChange = (val) => {
|
|
30349
|
-
if (val.length > 0) {
|
|
30350
|
-
useQueryParams && setQueryArgument(QUICKSTART_SEARCH_FILTER_KEY, val);
|
|
30351
|
-
}
|
|
30352
|
-
else {
|
|
30353
|
-
useQueryParams && removeQueryArgument(QUICKSTART_SEARCH_FILTER_KEY);
|
|
30354
|
-
}
|
|
30355
|
-
if ((filter === null || filter === void 0 ? void 0 : filter.keyword) !== val) {
|
|
30356
|
-
setFilter('keyword', val);
|
|
30357
|
-
}
|
|
30358
|
-
onSearchInputChange(val);
|
|
30359
|
-
};
|
|
30360
|
-
return (React.createElement(QuickStartCatalogFilterSearch, { searchInputText: filter === null || filter === void 0 ? void 0 : filter.keyword, handleTextChange: handleTextChange }));
|
|
30361
|
-
};
|
|
30362
|
-
// compare string/number arrays
|
|
30363
|
-
const equalsIgnoreOrder = (a, b) => {
|
|
30364
|
-
if (a.length !== b.length) {
|
|
30365
|
-
return false;
|
|
30366
|
-
}
|
|
30367
|
-
const uniqueValues = new Set([...a, ...b]);
|
|
30368
|
-
for (const v of uniqueValues) {
|
|
30369
|
-
const aCount = a.filter((e) => e === v).length;
|
|
30370
|
-
const bCount = b.filter((e) => e === v).length;
|
|
30371
|
-
if (aCount !== bCount) {
|
|
30372
|
-
return false;
|
|
30373
|
-
}
|
|
30374
|
-
}
|
|
30375
|
-
return true;
|
|
30376
|
-
};
|
|
30377
|
-
const QuickStartCatalogFilterStatusWrapper = ({ onStatusChange = () => { } }) => {
|
|
30378
|
-
const { useQueryParams, filter, setFilter } = React.useContext(QuickStartContext);
|
|
30379
|
-
React.useEffect(() => {
|
|
30380
|
-
// use this effect to clear the status when a `clear all` action is performed higher up
|
|
30381
|
-
const unlisten = history.listen(({ location }) => {
|
|
30382
|
-
var _a;
|
|
30383
|
-
const searchParams = new URLSearchParams(location.search);
|
|
30384
|
-
const updatedStatusFilters = ((_a = searchParams.get(QUICKSTART_STATUS_FILTER_KEY)) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
|
|
30385
|
-
if (updatedStatusFilters.length === 0) {
|
|
30386
|
-
setFilter('status', []);
|
|
30387
|
-
onStatusChange([]);
|
|
30388
|
-
}
|
|
30389
|
-
});
|
|
30390
|
-
return () => {
|
|
30391
|
-
unlisten();
|
|
30392
|
-
};
|
|
30393
|
-
});
|
|
30394
|
-
const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);
|
|
30395
|
-
const onRowfilterSelect = React.useCallback((_e, selectedValue) => {
|
|
30396
|
-
setIsDropdownOpen(false);
|
|
30397
|
-
const selection = Object.entries(filter.status.statusTypes).find(([_key, value]) => value === selectedValue)[0];
|
|
30398
|
-
const selectedFiltersList = filter.status.statusFilters.includes(selection)
|
|
30399
|
-
? filter.status.statusFilters.filter((status) => status !== selection)
|
|
30400
|
-
: [...filter.status.statusFilters, selection];
|
|
30401
|
-
if (!equalsIgnoreOrder(filter.status.statusFilters, selectedFiltersList)) {
|
|
30402
|
-
setFilter('status', selectedFiltersList);
|
|
30403
|
-
}
|
|
30404
|
-
if (selectedFiltersList.length > 0) {
|
|
30405
|
-
useQueryParams && setQueryArgument('status', selectedFiltersList.join(','));
|
|
30406
|
-
}
|
|
30407
|
-
else {
|
|
30408
|
-
useQueryParams && removeQueryArgument(QUICKSTART_STATUS_FILTER_KEY);
|
|
30409
|
-
}
|
|
30410
|
-
onStatusChange(selectedFiltersList);
|
|
30411
|
-
}, [filter.status.statusFilters, onStatusChange, setFilter, useQueryParams]);
|
|
30412
|
-
const dropdownItems = Object.entries(filter.status.statusTypes).map(([key, value]) => (React.createElement(SelectOption, { key: key, "data-key": key, value: value, hasCheckbox: true, isSelected: filter.status.statusFilters.includes(key) },
|
|
30413
|
-
React.createElement(React.Fragment, null, value))));
|
|
30414
|
-
return (React.createElement(QuickStartCatalogFilterSelect, { isDropdownOpen: isDropdownOpen, setIsDropdownOpen: setIsDropdownOpen, onRowfilterSelect: onRowfilterSelect, selectedFilters: filter.status.statusFilters, dropdownItems: dropdownItems }));
|
|
30415
|
-
};
|
|
30253
|
+
const statusColorMap = {
|
|
30254
|
+
[QuickStartStatus.COMPLETE]: 'green',
|
|
30255
|
+
[QuickStartStatus.IN_PROGRESS]: 'purple',
|
|
30256
|
+
[QuickStartStatus.NOT_STARTED]: 'grey',
|
|
30257
|
+
};
|
|
30258
|
+
const QuickStartTileHeader = ({ status, duration, name, type, quickStartId, }) => {
|
|
30259
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30260
|
+
const statusLocaleMap = {
|
|
30261
|
+
[QuickStartStatus.COMPLETE]: getResource('Complete'),
|
|
30262
|
+
[QuickStartStatus.IN_PROGRESS]: getResource('In progress'),
|
|
30263
|
+
[QuickStartStatus.NOT_STARTED]: getResource('Not started'),
|
|
30264
|
+
};
|
|
30265
|
+
return (React.createElement("div", { className: "pfext-quick-start-tile-header" },
|
|
30266
|
+
React.createElement(Title, { headingLevel: "h3", "data-test": "title", id: quickStartId },
|
|
30267
|
+
React.createElement(QuickStartMarkdownView, { content: name })),
|
|
30268
|
+
React.createElement("div", { className: "pfext-quick-start-tile-header__status" },
|
|
30269
|
+
type && (React.createElement(Label, { className: "pfext-quick-start-tile-header--margin", color: type.color }, type.text)),
|
|
30270
|
+
duration && (React.createElement(Label, { variant: "outline", "data-test": "duration", icon: React.createElement(OutlinedClockIcon, null), className: "pfext-quick-start-tile-header--margin" }, getResource('{{duration, number}} minutes', duration).replace('{{duration, number}}', duration))),
|
|
30271
|
+
status !== QuickStartStatus.NOT_STARTED && (React.createElement(Label, { variant: "outline", color: statusColorMap[status], icon: React.createElement(StatusIcon, { status: status }), "data-test": "status" }, statusLocaleMap[status])))));
|
|
30272
|
+
};
|
|
30273
|
+
|
|
30274
|
+
const QuickStartTile = ({ quickStart, status, isActive, onClick = () => { }, }) => {
|
|
30275
|
+
const { metadata: { name: id }, spec: { icon, tasks, displayName, description, durationMinutes, prerequisites, link, type }, } = quickStart;
|
|
30276
|
+
const { setActiveQuickStart, footer } = React.useContext(QuickStartContext);
|
|
30277
|
+
const ref = React.useRef(null);
|
|
30278
|
+
let quickStartIcon;
|
|
30279
|
+
if (typeof icon === 'object') {
|
|
30280
|
+
quickStartIcon = icon;
|
|
30281
|
+
}
|
|
30282
|
+
else {
|
|
30283
|
+
quickStartIcon = (React.createElement(FallbackImg, { className: "pfext-catalog-item-icon__img--large", src: icon, alt: "", fallback: React.createElement(RocketIcon, null) }));
|
|
30284
|
+
}
|
|
30285
|
+
const footerComponent = React.useMemo(() => {
|
|
30286
|
+
if (footer && footer.show === false) {
|
|
30287
|
+
return null;
|
|
30288
|
+
}
|
|
30289
|
+
if (link) {
|
|
30290
|
+
return React.createElement(QuickStartTileFooterExternal, { link: link, quickStartId: id });
|
|
30291
|
+
}
|
|
30292
|
+
return React.createElement(QuickStartTileFooter, { quickStartId: id, status: status, totalTasks: tasks === null || tasks === void 0 ? void 0 : tasks.length });
|
|
30293
|
+
}, [footer, id, link, status, tasks === null || tasks === void 0 ? void 0 : tasks.length]);
|
|
30294
|
+
const handleClick = (e) => {
|
|
30295
|
+
var _a;
|
|
30296
|
+
if ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
|
|
30297
|
+
if (link) {
|
|
30298
|
+
window.open(link.href);
|
|
30299
|
+
}
|
|
30300
|
+
else {
|
|
30301
|
+
setActiveQuickStart(id, tasks === null || tasks === void 0 ? void 0 : tasks.length);
|
|
30302
|
+
}
|
|
30303
|
+
onClick();
|
|
30304
|
+
}
|
|
30305
|
+
};
|
|
30306
|
+
return (React.createElement("div", { ref: ref },
|
|
30307
|
+
React.createElement(CatalogTile, { id: id + '-catalog-tile', style: {
|
|
30308
|
+
cursor: 'pointer',
|
|
30309
|
+
}, icon: quickStartIcon, className: "pfext-quick-start-tile", "data-testid": `qs-card-${camelize(displayName)}`, featured: isActive, title: React.createElement(QuickStartTileHeader, { name: displayName, status: status, duration: durationMinutes, type: type, quickStartId: id }), onClick: handleClick, onKeyDown: (event) => {
|
|
30310
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
30311
|
+
setActiveQuickStart(id, tasks === null || tasks === void 0 ? void 0 : tasks.length);
|
|
30312
|
+
onClick();
|
|
30313
|
+
}
|
|
30314
|
+
},
|
|
30315
|
+
// https://github.com/patternfly/patternfly-react/issues/7039
|
|
30316
|
+
href: link === null || link === void 0 ? void 0 : link.href, "data-test": `tile ${id}`, description: React.createElement(QuickStartTileDescription, { description: description, prerequisites: prerequisites }), footer: footerComponent, tabIndex: 0 })));
|
|
30317
|
+
};
|
|
30318
|
+
|
|
30319
|
+
const QuickStartCatalog = ({ quickStarts }) => {
|
|
30320
|
+
const { activeQuickStartID, allQuickStartStates } = React.useContext(QuickStartContext);
|
|
30321
|
+
return (React.createElement("div", { className: "pfext-page-layout__content" },
|
|
30322
|
+
React.createElement(Gallery, { className: "pfext-quick-start-catalog__gallery", hasGutter: true }, quickStarts.map((quickStart) => {
|
|
30323
|
+
const { metadata: { name: id }, } = quickStart;
|
|
30324
|
+
return (React.createElement(GalleryItem, { key: id, className: "pfext-quick-start-catalog__gallery-item" },
|
|
30325
|
+
React.createElement(QuickStartTile, { quickStart: quickStart, isActive: id === activeQuickStartID, status: getQuickStartStatus(allQuickStartStates, id) })));
|
|
30326
|
+
}))));
|
|
30327
|
+
};
|
|
30328
|
+
|
|
30329
|
+
const QuickStartCatalogFilterSearch = (_a) => {
|
|
30330
|
+
var { searchInputText, handleTextChange } = _a, props = __rest(_a, ["searchInputText", "handleTextChange"]);
|
|
30331
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30332
|
+
return (React.createElement(ToolbarItem, { className: "pfext-quick-start-catalog-filter__input" },
|
|
30333
|
+
React.createElement(SearchInput, Object.assign({ placeholder: getResource('Filter by keyword...'), value: searchInputText, onChange: (_ev, value) => handleTextChange(value), onClear: () => handleTextChange('') }, props))));
|
|
30334
|
+
};
|
|
30335
|
+
const QuickStartCatalogFilterSelect = (_a) => {
|
|
30336
|
+
var { isDropdownOpen, setIsDropdownOpen, onRowfilterSelect, selectedFilters, dropdownItems } = _a, props = __rest(_a, ["isDropdownOpen", "setIsDropdownOpen", "onRowfilterSelect", "selectedFilters", "dropdownItems"]);
|
|
30337
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30338
|
+
const toggle = (toggleRef) => (React.createElement(MenuToggle, { isFullWidth: true, ref: toggleRef, onClick: () => setIsDropdownOpen(!isDropdownOpen), isExpanded: isDropdownOpen },
|
|
30339
|
+
getResource('Status'),
|
|
30340
|
+
selectedFilters.length > 0 && React.createElement(Badge, { isRead: true }, selectedFilters.length)));
|
|
30341
|
+
return (React.createElement(ToolbarItem, null,
|
|
30342
|
+
React.createElement(Select, Object.assign({ "aria-label": getResource('Select filter'), isOpen: isDropdownOpen, selected: selectedFilters, onSelect: onRowfilterSelect, onOpenChange: (isOpen) => setIsDropdownOpen(isOpen), toggle: toggle }, props),
|
|
30343
|
+
React.createElement(SelectList, null, dropdownItems))));
|
|
30344
|
+
};
|
|
30345
|
+
const QuickStartCatalogFilterCount = ({ quickStartsCount }) => {
|
|
30346
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30347
|
+
return (React.createElement(ToolbarItem, { className: "pfext-quick-start-catalog-filter__count", align: { default: 'alignRight' } }, getResource('{{count, number}} item', quickStartsCount).replace('{{count, number}}', quickStartsCount)));
|
|
30348
|
+
};
|
|
30349
|
+
const QuickStartCatalogFilterSearchWrapper = ({ onSearchInputChange = () => { } }) => {
|
|
30350
|
+
const { useQueryParams, filter, setFilter } = React.useContext(QuickStartContext);
|
|
30351
|
+
React.useEffect(() => {
|
|
30352
|
+
// use this effect to clear the search when a `clear all` action is performed higher up
|
|
30353
|
+
const unlisten = history.listen(({ location }) => {
|
|
30354
|
+
const searchParams = new URLSearchParams(location.search);
|
|
30355
|
+
const searchQuery = searchParams.get(QUICKSTART_SEARCH_FILTER_KEY) || '';
|
|
30356
|
+
if (searchQuery === '') {
|
|
30357
|
+
setFilter('keyword', '');
|
|
30358
|
+
onSearchInputChange('');
|
|
30359
|
+
}
|
|
30360
|
+
});
|
|
30361
|
+
return () => {
|
|
30362
|
+
unlisten();
|
|
30363
|
+
};
|
|
30364
|
+
}, [onSearchInputChange, setFilter]);
|
|
30365
|
+
const handleTextChange = (val) => {
|
|
30366
|
+
if (val.length > 0) {
|
|
30367
|
+
useQueryParams && setQueryArgument(QUICKSTART_SEARCH_FILTER_KEY, val);
|
|
30368
|
+
}
|
|
30369
|
+
else {
|
|
30370
|
+
useQueryParams && removeQueryArgument(QUICKSTART_SEARCH_FILTER_KEY);
|
|
30371
|
+
}
|
|
30372
|
+
if ((filter === null || filter === void 0 ? void 0 : filter.keyword) !== val) {
|
|
30373
|
+
setFilter('keyword', val);
|
|
30374
|
+
}
|
|
30375
|
+
onSearchInputChange(val);
|
|
30376
|
+
};
|
|
30377
|
+
return (React.createElement(QuickStartCatalogFilterSearch, { searchInputText: filter === null || filter === void 0 ? void 0 : filter.keyword, handleTextChange: handleTextChange }));
|
|
30378
|
+
};
|
|
30379
|
+
// compare string/number arrays
|
|
30380
|
+
const equalsIgnoreOrder = (a, b) => {
|
|
30381
|
+
if (a.length !== b.length) {
|
|
30382
|
+
return false;
|
|
30383
|
+
}
|
|
30384
|
+
const uniqueValues = new Set([...a, ...b]);
|
|
30385
|
+
for (const v of uniqueValues) {
|
|
30386
|
+
const aCount = a.filter((e) => e === v).length;
|
|
30387
|
+
const bCount = b.filter((e) => e === v).length;
|
|
30388
|
+
if (aCount !== bCount) {
|
|
30389
|
+
return false;
|
|
30390
|
+
}
|
|
30391
|
+
}
|
|
30392
|
+
return true;
|
|
30393
|
+
};
|
|
30394
|
+
const QuickStartCatalogFilterStatusWrapper = ({ onStatusChange = () => { } }) => {
|
|
30395
|
+
const { useQueryParams, filter, setFilter } = React.useContext(QuickStartContext);
|
|
30396
|
+
React.useEffect(() => {
|
|
30397
|
+
// use this effect to clear the status when a `clear all` action is performed higher up
|
|
30398
|
+
const unlisten = history.listen(({ location }) => {
|
|
30399
|
+
var _a;
|
|
30400
|
+
const searchParams = new URLSearchParams(location.search);
|
|
30401
|
+
const updatedStatusFilters = ((_a = searchParams.get(QUICKSTART_STATUS_FILTER_KEY)) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
|
|
30402
|
+
if (updatedStatusFilters.length === 0) {
|
|
30403
|
+
setFilter('status', []);
|
|
30404
|
+
onStatusChange([]);
|
|
30405
|
+
}
|
|
30406
|
+
});
|
|
30407
|
+
return () => {
|
|
30408
|
+
unlisten();
|
|
30409
|
+
};
|
|
30410
|
+
});
|
|
30411
|
+
const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);
|
|
30412
|
+
const onRowfilterSelect = React.useCallback((_e, selectedValue) => {
|
|
30413
|
+
setIsDropdownOpen(false);
|
|
30414
|
+
const selection = Object.entries(filter.status.statusTypes).find(([_key, value]) => value === selectedValue)[0];
|
|
30415
|
+
const selectedFiltersList = filter.status.statusFilters.includes(selection)
|
|
30416
|
+
? filter.status.statusFilters.filter((status) => status !== selection)
|
|
30417
|
+
: [...filter.status.statusFilters, selection];
|
|
30418
|
+
if (!equalsIgnoreOrder(filter.status.statusFilters, selectedFiltersList)) {
|
|
30419
|
+
setFilter('status', selectedFiltersList);
|
|
30420
|
+
}
|
|
30421
|
+
if (selectedFiltersList.length > 0) {
|
|
30422
|
+
useQueryParams && setQueryArgument('status', selectedFiltersList.join(','));
|
|
30423
|
+
}
|
|
30424
|
+
else {
|
|
30425
|
+
useQueryParams && removeQueryArgument(QUICKSTART_STATUS_FILTER_KEY);
|
|
30426
|
+
}
|
|
30427
|
+
onStatusChange(selectedFiltersList);
|
|
30428
|
+
}, [filter.status.statusFilters, onStatusChange, setFilter, useQueryParams]);
|
|
30429
|
+
const dropdownItems = Object.entries(filter.status.statusTypes).map(([key, value]) => (React.createElement(SelectOption, { key: key, "data-key": key, value: value, hasCheckbox: true, isSelected: filter.status.statusFilters.includes(key) },
|
|
30430
|
+
React.createElement(React.Fragment, null, value))));
|
|
30431
|
+
return (React.createElement(QuickStartCatalogFilterSelect, { isDropdownOpen: isDropdownOpen, setIsDropdownOpen: setIsDropdownOpen, onRowfilterSelect: onRowfilterSelect, selectedFilters: filter.status.statusFilters, dropdownItems: dropdownItems }));
|
|
30432
|
+
};
|
|
30416
30433
|
const QuickStartCatalogFilterCountWrapper = ({ quickStartsCount }) => React.createElement(QuickStartCatalogFilterCount, { quickStartsCount: quickStartsCount });
|
|
30417
30434
|
|
|
30418
|
-
const QuickStartCatalogFilter = (_a) => {
|
|
30419
|
-
var { quickStartsCount, onSearchInputChange = () => { }, onStatusChange = () => { } } = _a, props = __rest(_a, ["quickStartsCount", "onSearchInputChange", "onStatusChange"]);
|
|
30420
|
-
return (React.createElement(Toolbar, Object.assign({ usePageInsets: true, className: "pfext-quick-start-catalog-filter__flex" }, props),
|
|
30421
|
-
React.createElement(ToolbarContent, null,
|
|
30422
|
-
React.createElement(QuickStartCatalogFilterSearchWrapper, { onSearchInputChange: onSearchInputChange }),
|
|
30423
|
-
React.createElement(QuickStartCatalogFilterStatusWrapper, { onStatusChange: onStatusChange }),
|
|
30424
|
-
React.createElement(QuickStartCatalogFilterCountWrapper, { quickStartsCount: quickStartsCount }))));
|
|
30425
|
-
};
|
|
30426
|
-
|
|
30427
|
-
const QuickStartCatalogEmptyState = ({ clearFilters }) => {
|
|
30428
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30429
|
-
return (React.createElement(EmptyState, null,
|
|
30430
|
-
React.createElement(EmptyStateHeader, { titleText: React.createElement(React.Fragment, null, getResource('No results found')), icon: React.createElement(EmptyStateIcon, { icon: SearchIcon }), headingLevel: "h4" }),
|
|
30431
|
-
React.createElement(EmptyStateBody, null, getResource('No results match the filter criteria. Remove filters or clear all filters to show results.')),
|
|
30432
|
-
React.createElement(EmptyStateFooter, null,
|
|
30433
|
-
React.createElement(EmptyStateActions, null,
|
|
30434
|
-
React.createElement(Button, { variant: "link", onClick: clearFilters, "data-test": "clear-filter button" }, getResource('Clear all filters'))))));
|
|
30435
|
-
};
|
|
30436
|
-
const QuickStartCatalogPage = ({ quickStarts, showFilter, sortFnc = (q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName), title, hint, showTitle = true, }) => {
|
|
30437
|
-
const sortFncCallback = React.useCallback(sortFnc, [sortFnc]);
|
|
30438
|
-
const { allQuickStarts = [], setAllQuickStarts, allQuickStartStates, getResource, filter, setFilter, loading, } = React.useContext(QuickStartContext);
|
|
30439
|
-
React.useEffect(() => {
|
|
30440
|
-
// passed through prop, not context
|
|
30441
|
-
if (quickStarts && JSON.stringify(quickStarts) !== JSON.stringify(allQuickStarts)) {
|
|
30442
|
-
setAllQuickStarts(quickStarts);
|
|
30443
|
-
}
|
|
30444
|
-
}, [quickStarts, allQuickStarts, setAllQuickStarts]);
|
|
30445
|
-
const initialFilteredQuickStarts = showFilter
|
|
30446
|
-
? filterQuickStarts(allQuickStarts, filter.keyword, filter.status.statusFilters, allQuickStartStates).sort(sortFncCallback)
|
|
30447
|
-
: allQuickStarts;
|
|
30448
|
-
const [filteredQuickStarts, setFilteredQuickStarts] = React.useState(initialFilteredQuickStarts);
|
|
30449
|
-
React.useEffect(() => {
|
|
30450
|
-
const filteredQs = showFilter
|
|
30451
|
-
? filterQuickStarts(allQuickStarts, filter.keyword, filter.status.statusFilters, allQuickStartStates).sort(sortFncCallback)
|
|
30452
|
-
: allQuickStarts;
|
|
30453
|
-
// also needs a check whether the content of the QS changed
|
|
30454
|
-
if (filteredQs.length !== filteredQuickStarts.length ||
|
|
30455
|
-
JSON.stringify(filteredQs) !== JSON.stringify(filteredQuickStarts)) {
|
|
30456
|
-
setFilteredQuickStarts(filteredQs);
|
|
30457
|
-
}
|
|
30458
|
-
}, [
|
|
30459
|
-
allQuickStarts,
|
|
30460
|
-
allQuickStartStates,
|
|
30461
|
-
showFilter,
|
|
30462
|
-
filter.keyword,
|
|
30463
|
-
filter.status.statusFilters,
|
|
30464
|
-
sortFncCallback,
|
|
30465
|
-
filteredQuickStarts,
|
|
30466
|
-
]);
|
|
30467
|
-
const clearFilters = () => {
|
|
30468
|
-
setFilter('keyword', '');
|
|
30469
|
-
setFilter('status', []);
|
|
30470
|
-
clearFilterParams();
|
|
30471
|
-
setFilteredQuickStarts(allQuickStarts.sort((q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName)));
|
|
30472
|
-
};
|
|
30473
|
-
const onSearchInputChange = (searchValue) => {
|
|
30474
|
-
const result = filterQuickStarts(allQuickStarts, searchValue, filter.status.statusFilters, allQuickStartStates).sort((q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName));
|
|
30475
|
-
if (searchValue !== filter.keyword) {
|
|
30476
|
-
setFilter('keyword', searchValue);
|
|
30477
|
-
}
|
|
30478
|
-
if (result.length !== filteredQuickStarts.length) {
|
|
30479
|
-
setFilteredQuickStarts(result);
|
|
30480
|
-
}
|
|
30481
|
-
};
|
|
30482
|
-
const onStatusChange = (statusList) => {
|
|
30483
|
-
const result = filterQuickStarts(allQuickStarts, filter.keyword, statusList, allQuickStartStates).sort((q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName));
|
|
30484
|
-
if (JSON.stringify(statusList) !== JSON.stringify(filter.status)) {
|
|
30485
|
-
setFilter('status', statusList);
|
|
30486
|
-
}
|
|
30487
|
-
if (result.length !== filteredQuickStarts.length) {
|
|
30488
|
-
setFilteredQuickStarts(result);
|
|
30489
|
-
}
|
|
30490
|
-
};
|
|
30491
|
-
if (loading) {
|
|
30492
|
-
return React.createElement(LoadingBox, null);
|
|
30493
|
-
}
|
|
30494
|
-
if (!allQuickStarts || allQuickStarts.length === 0) {
|
|
30495
|
-
return React.createElement(EmptyBox, { label: getResource('Quick Starts') });
|
|
30496
|
-
}
|
|
30497
|
-
return (React.createElement("div", { className: "pfext-quick-start__base" },
|
|
30498
|
-
showTitle && (React.createElement("div", { className: "pfext-page-layout__header" },
|
|
30499
|
-
React.createElement(Text, { component: "h1", className: "pfext-page-layout__title", "data-test": "page-title" }, title || getResource('Quick Starts')),
|
|
30500
|
-
hint && React.createElement("div", { className: "pfext-page-layout__hint" }, hint))),
|
|
30501
|
-
showTitle && React.createElement(Divider, { component: "div" }),
|
|
30502
|
-
showFilter && (React.createElement(React.Fragment, null,
|
|
30503
|
-
React.createElement(QuickStartCatalogFilter, { quickStartsCount: filteredQuickStarts.length, onSearchInputChange: onSearchInputChange, onStatusChange: onStatusChange }),
|
|
30504
|
-
React.createElement(Divider, { component: "div" }))),
|
|
30505
|
-
React.createElement(React.Fragment, null, filteredQuickStarts.length === 0 ? (React.createElement(QuickStartCatalogEmptyState, { clearFilters: clearFilters })) : (React.createElement(QuickStartCatalog, { quickStarts: filteredQuickStarts })))));
|
|
30506
|
-
};
|
|
30507
|
-
|
|
30508
|
-
const QuickStartCatalogHeader = ({ title, hint, }) => (React.createElement("div", { className: "pfext-page-layout__header" },
|
|
30509
|
-
React.createElement("h1", { "data-pf-content": "true", className: "pfext-page-layout__title" }, title),
|
|
30435
|
+
const QuickStartCatalogFilter = (_a) => {
|
|
30436
|
+
var { quickStartsCount, onSearchInputChange = () => { }, onStatusChange = () => { } } = _a, props = __rest(_a, ["quickStartsCount", "onSearchInputChange", "onStatusChange"]);
|
|
30437
|
+
return (React.createElement(Toolbar, Object.assign({ usePageInsets: true, className: "pfext-quick-start-catalog-filter__flex" }, props),
|
|
30438
|
+
React.createElement(ToolbarContent, null,
|
|
30439
|
+
React.createElement(QuickStartCatalogFilterSearchWrapper, { onSearchInputChange: onSearchInputChange }),
|
|
30440
|
+
React.createElement(QuickStartCatalogFilterStatusWrapper, { onStatusChange: onStatusChange }),
|
|
30441
|
+
React.createElement(QuickStartCatalogFilterCountWrapper, { quickStartsCount: quickStartsCount }))));
|
|
30442
|
+
};
|
|
30443
|
+
|
|
30444
|
+
const QuickStartCatalogEmptyState = ({ clearFilters }) => {
|
|
30445
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30446
|
+
return (React.createElement(EmptyState, null,
|
|
30447
|
+
React.createElement(EmptyStateHeader, { titleText: React.createElement(React.Fragment, null, getResource('No results found')), icon: React.createElement(EmptyStateIcon, { icon: SearchIcon }), headingLevel: "h4" }),
|
|
30448
|
+
React.createElement(EmptyStateBody, null, getResource('No results match the filter criteria. Remove filters or clear all filters to show results.')),
|
|
30449
|
+
React.createElement(EmptyStateFooter, null,
|
|
30450
|
+
React.createElement(EmptyStateActions, null,
|
|
30451
|
+
React.createElement(Button, { variant: "link", onClick: clearFilters, "data-test": "clear-filter button" }, getResource('Clear all filters'))))));
|
|
30452
|
+
};
|
|
30453
|
+
const QuickStartCatalogPage = ({ quickStarts, showFilter, sortFnc = (q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName), title, hint, showTitle = true, }) => {
|
|
30454
|
+
const sortFncCallback = React.useCallback(sortFnc, [sortFnc]);
|
|
30455
|
+
const { allQuickStarts = [], setAllQuickStarts, allQuickStartStates, getResource, filter, setFilter, loading, } = React.useContext(QuickStartContext);
|
|
30456
|
+
React.useEffect(() => {
|
|
30457
|
+
// passed through prop, not context
|
|
30458
|
+
if (quickStarts && JSON.stringify(quickStarts) !== JSON.stringify(allQuickStarts)) {
|
|
30459
|
+
setAllQuickStarts(quickStarts);
|
|
30460
|
+
}
|
|
30461
|
+
}, [quickStarts, allQuickStarts, setAllQuickStarts]);
|
|
30462
|
+
const initialFilteredQuickStarts = showFilter
|
|
30463
|
+
? filterQuickStarts(allQuickStarts, filter.keyword, filter.status.statusFilters, allQuickStartStates).sort(sortFncCallback)
|
|
30464
|
+
: allQuickStarts;
|
|
30465
|
+
const [filteredQuickStarts, setFilteredQuickStarts] = React.useState(initialFilteredQuickStarts);
|
|
30466
|
+
React.useEffect(() => {
|
|
30467
|
+
const filteredQs = showFilter
|
|
30468
|
+
? filterQuickStarts(allQuickStarts, filter.keyword, filter.status.statusFilters, allQuickStartStates).sort(sortFncCallback)
|
|
30469
|
+
: allQuickStarts;
|
|
30470
|
+
// also needs a check whether the content of the QS changed
|
|
30471
|
+
if (filteredQs.length !== filteredQuickStarts.length ||
|
|
30472
|
+
JSON.stringify(filteredQs) !== JSON.stringify(filteredQuickStarts)) {
|
|
30473
|
+
setFilteredQuickStarts(filteredQs);
|
|
30474
|
+
}
|
|
30475
|
+
}, [
|
|
30476
|
+
allQuickStarts,
|
|
30477
|
+
allQuickStartStates,
|
|
30478
|
+
showFilter,
|
|
30479
|
+
filter.keyword,
|
|
30480
|
+
filter.status.statusFilters,
|
|
30481
|
+
sortFncCallback,
|
|
30482
|
+
filteredQuickStarts,
|
|
30483
|
+
]);
|
|
30484
|
+
const clearFilters = () => {
|
|
30485
|
+
setFilter('keyword', '');
|
|
30486
|
+
setFilter('status', []);
|
|
30487
|
+
clearFilterParams();
|
|
30488
|
+
setFilteredQuickStarts(allQuickStarts.sort((q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName)));
|
|
30489
|
+
};
|
|
30490
|
+
const onSearchInputChange = (searchValue) => {
|
|
30491
|
+
const result = filterQuickStarts(allQuickStarts, searchValue, filter.status.statusFilters, allQuickStartStates).sort((q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName));
|
|
30492
|
+
if (searchValue !== filter.keyword) {
|
|
30493
|
+
setFilter('keyword', searchValue);
|
|
30494
|
+
}
|
|
30495
|
+
if (result.length !== filteredQuickStarts.length) {
|
|
30496
|
+
setFilteredQuickStarts(result);
|
|
30497
|
+
}
|
|
30498
|
+
};
|
|
30499
|
+
const onStatusChange = (statusList) => {
|
|
30500
|
+
const result = filterQuickStarts(allQuickStarts, filter.keyword, statusList, allQuickStartStates).sort((q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName));
|
|
30501
|
+
if (JSON.stringify(statusList) !== JSON.stringify(filter.status)) {
|
|
30502
|
+
setFilter('status', statusList);
|
|
30503
|
+
}
|
|
30504
|
+
if (result.length !== filteredQuickStarts.length) {
|
|
30505
|
+
setFilteredQuickStarts(result);
|
|
30506
|
+
}
|
|
30507
|
+
};
|
|
30508
|
+
if (loading) {
|
|
30509
|
+
return React.createElement(LoadingBox, null);
|
|
30510
|
+
}
|
|
30511
|
+
if (!allQuickStarts || allQuickStarts.length === 0) {
|
|
30512
|
+
return React.createElement(EmptyBox, { label: getResource('Quick Starts') });
|
|
30513
|
+
}
|
|
30514
|
+
return (React.createElement("div", { className: "pfext-quick-start__base" },
|
|
30515
|
+
showTitle && (React.createElement("div", { className: "pfext-page-layout__header" },
|
|
30516
|
+
React.createElement(Text, { component: "h1", className: "pfext-page-layout__title", "data-test": "page-title" }, title || getResource('Quick Starts')),
|
|
30517
|
+
hint && React.createElement("div", { className: "pfext-page-layout__hint" }, hint))),
|
|
30518
|
+
showTitle && React.createElement(Divider, { component: "div" }),
|
|
30519
|
+
showFilter && (React.createElement(React.Fragment, null,
|
|
30520
|
+
React.createElement(QuickStartCatalogFilter, { quickStartsCount: filteredQuickStarts.length, onSearchInputChange: onSearchInputChange, onStatusChange: onStatusChange }),
|
|
30521
|
+
React.createElement(Divider, { component: "div" }))),
|
|
30522
|
+
React.createElement(React.Fragment, null, filteredQuickStarts.length === 0 ? (React.createElement(QuickStartCatalogEmptyState, { clearFilters: clearFilters })) : (React.createElement(QuickStartCatalog, { quickStarts: filteredQuickStarts })))));
|
|
30523
|
+
};
|
|
30524
|
+
|
|
30525
|
+
const QuickStartCatalogHeader = ({ title, hint, }) => (React.createElement("div", { className: "pfext-page-layout__header" },
|
|
30526
|
+
React.createElement("h1", { "data-pf-content": "true", className: "pfext-page-layout__title" }, title),
|
|
30510
30527
|
hint && React.createElement("div", { className: "pfext-page-layout__hint" }, hint)));
|
|
30511
30528
|
|
|
30512
30529
|
const QuickStartCatalogSection = ({ children }) => (React.createElement("div", { className: "pfext-page-layout__content" }, children));
|
|
30513
30530
|
|
|
30514
30531
|
const QuickStartCatalogToolbar = ({ children }) => (React.createElement(Toolbar, { usePageInsets: true, className: "pfext-quick-start-catalog-filter__flex" }, children));
|
|
30515
30532
|
|
|
30516
|
-
const QuickStartCloseModal = ({ isOpen, onConfirm, onCancel, }) => {
|
|
30517
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30518
|
-
return (React.createElement(Modal, { className: "pfext-quick-start-drawer__modal pfext-quick-start__base", isOpen: isOpen, variant: ModalVariant.small, showClose: false, "data-test": "leave-quickstart", title: getResource('Leave quick start?'), footer: React.createElement(Flex, null,
|
|
30519
|
-
React.createElement(FlexItem, { align: { default: 'alignRight' } },
|
|
30520
|
-
React.createElement(Button, { variant: "secondary", "data-test": "cancel button", onClick: onCancel }, getResource('Cancel'))),
|
|
30521
|
-
React.createElement(FlexItem, null,
|
|
30522
|
-
React.createElement(Button, { variant: "primary", "data-test": "leave button", onClick: onConfirm }, getResource('Leave')))), isFullScreen: true }, getResource('Your progress will be saved.')));
|
|
30533
|
+
const QuickStartCloseModal = ({ isOpen, onConfirm, onCancel, }) => {
|
|
30534
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30535
|
+
return (React.createElement(Modal, { className: "pfext-quick-start-drawer__modal pfext-quick-start__base", isOpen: isOpen, variant: ModalVariant.small, showClose: false, "data-test": "leave-quickstart", title: getResource('Leave quick start?'), footer: React.createElement(Flex, null,
|
|
30536
|
+
React.createElement(FlexItem, { align: { default: 'alignRight' } },
|
|
30537
|
+
React.createElement(Button, { variant: "secondary", "data-test": "cancel button", onClick: onCancel }, getResource('Cancel'))),
|
|
30538
|
+
React.createElement(FlexItem, null,
|
|
30539
|
+
React.createElement(Button, { variant: "primary", "data-test": "leave button", onClick: onConfirm }, getResource('Leave')))), isFullScreen: true }, getResource('Your progress will be saved.')));
|
|
30523
30540
|
};
|
|
30524
30541
|
|
|
30525
30542
|
var arrowRightIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -30538,395 +30555,395 @@ exports["default"] = exports.ArrowRightIcon;
|
|
|
30538
30555
|
|
|
30539
30556
|
var ArrowRightIcon = /*@__PURE__*/getDefaultExportFromCjs(arrowRightIcon);
|
|
30540
30557
|
|
|
30541
|
-
const TaskIcon = ({ taskIndex, taskStatus }) => {
|
|
30542
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30543
|
-
const success = taskStatus === QuickStartTaskStatus.SUCCESS;
|
|
30544
|
-
const failed = taskStatus === QuickStartTaskStatus.FAILED;
|
|
30545
|
-
const classNames = css('pfext-icon-and-text__icon', {
|
|
30546
|
-
'pfext-quick-start-task-header__task-icon-init': !failed && !success,
|
|
30547
|
-
});
|
|
30548
|
-
let content;
|
|
30549
|
-
if (success) {
|
|
30550
|
-
content = (React.createElement(Icon, { size: "md" },
|
|
30551
|
-
React.createElement(CheckCircleIcon, { className: "pfext-quick-start-task-header__task-icon-success" }),
|
|
30552
|
-
' '));
|
|
30553
|
-
}
|
|
30554
|
-
else if (failed) {
|
|
30555
|
-
content = (React.createElement(Icon, { size: "md" },
|
|
30556
|
-
React.createElement(ExclamationCircleIcon, { className: "pfext-quick-start-task-header__task-icon-failed" })));
|
|
30557
|
-
}
|
|
30558
|
-
else {
|
|
30559
|
-
content = getResource('{{taskIndex, number}}', taskIndex).replace('{{taskIndex, number}}', taskIndex);
|
|
30560
|
-
}
|
|
30561
|
-
return React.createElement("span", { className: classNames }, content);
|
|
30562
|
-
};
|
|
30563
|
-
const QuickStartTaskHeader = ({ title, taskIndex, subtitle, taskStatus, size, isActiveTask, onTaskSelect, children, }) => {
|
|
30564
|
-
const titleRef = React.useRef(null);
|
|
30565
|
-
React.useEffect(() => {
|
|
30566
|
-
if (isActiveTask) {
|
|
30567
|
-
// Focus the WizardNavItem button element that contains the title
|
|
30568
|
-
titleRef.current.parentNode.focus();
|
|
30569
|
-
}
|
|
30570
|
-
}, [isActiveTask]);
|
|
30571
|
-
const classNames = css('pfext-quick-start-task-header__title', {
|
|
30572
|
-
'pfext-quick-start-task-header__title-success': taskStatus === QuickStartTaskStatus.SUCCESS,
|
|
30573
|
-
'pfext-quick-start-task-header__title-failed': taskStatus === (QuickStartTaskStatus.FAILED || QuickStartTaskStatus.VISITED),
|
|
30574
|
-
});
|
|
30575
|
-
// const notCompleted = taskStatus === QuickStartTaskStatus.VISITED;
|
|
30576
|
-
// const skippedReview = taskStatus === QuickStartTaskStatus.REVIEW;
|
|
30577
|
-
const failedReview = taskStatus === QuickStartTaskStatus.FAILED;
|
|
30578
|
-
// TODO: toned down when this is shown, investigate further when we should display it
|
|
30579
|
-
// related: https://github.com/patternfly/patternfly-quickstarts/issues/104
|
|
30580
|
-
const tryAgain = failedReview && (React.createElement(React.Fragment, null,
|
|
30581
|
-
React.createElement("div", null),
|
|
30582
|
-
React.createElement("div", { className: "pfext-quick-start-task-header__tryagain" }, "Try the steps again.")));
|
|
30583
|
-
const content = (React.createElement("div", { className: "pfext-quick-start-task-header", ref: titleRef },
|
|
30584
|
-
React.createElement(TaskIcon, { taskIndex: taskIndex, taskStatus: taskStatus }),
|
|
30585
|
-
React.createElement(Title, { headingLevel: "h3", size: size, className: classNames },
|
|
30586
|
-
React.createElement("span", { dangerouslySetInnerHTML: { __html: removeParagraphWrap(markdownConvert(title)) } }),
|
|
30587
|
-
isActiveTask && subtitle && (React.createElement("span", { className: "pfext-quick-start-task-header__subtitle", "data-test-id": "quick-start-task-subtitle" },
|
|
30588
|
-
' ',
|
|
30589
|
-
subtitle))),
|
|
30590
|
-
tryAgain));
|
|
30591
|
-
return (React.createElement(WizardNavItem, { content: content, stepIndex: taskIndex, onClick: () => onTaskSelect(taskIndex - 1), component: "button", isCurrent: isActiveTask }, children));
|
|
30558
|
+
const TaskIcon = ({ taskIndex, taskStatus }) => {
|
|
30559
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30560
|
+
const success = taskStatus === QuickStartTaskStatus.SUCCESS;
|
|
30561
|
+
const failed = taskStatus === QuickStartTaskStatus.FAILED;
|
|
30562
|
+
const classNames = css('pfext-icon-and-text__icon', {
|
|
30563
|
+
'pfext-quick-start-task-header__task-icon-init': !failed && !success,
|
|
30564
|
+
});
|
|
30565
|
+
let content;
|
|
30566
|
+
if (success) {
|
|
30567
|
+
content = (React.createElement(Icon, { size: "md" },
|
|
30568
|
+
React.createElement(CheckCircleIcon, { className: "pfext-quick-start-task-header__task-icon-success" }),
|
|
30569
|
+
' '));
|
|
30570
|
+
}
|
|
30571
|
+
else if (failed) {
|
|
30572
|
+
content = (React.createElement(Icon, { size: "md" },
|
|
30573
|
+
React.createElement(ExclamationCircleIcon, { className: "pfext-quick-start-task-header__task-icon-failed" })));
|
|
30574
|
+
}
|
|
30575
|
+
else {
|
|
30576
|
+
content = getResource('{{taskIndex, number}}', taskIndex).replace('{{taskIndex, number}}', taskIndex);
|
|
30577
|
+
}
|
|
30578
|
+
return React.createElement("span", { className: classNames }, content);
|
|
30579
|
+
};
|
|
30580
|
+
const QuickStartTaskHeader = ({ title, taskIndex, subtitle, taskStatus, size, isActiveTask, onTaskSelect, children, }) => {
|
|
30581
|
+
const titleRef = React.useRef(null);
|
|
30582
|
+
React.useEffect(() => {
|
|
30583
|
+
if (isActiveTask) {
|
|
30584
|
+
// Focus the WizardNavItem button element that contains the title
|
|
30585
|
+
titleRef.current.parentNode.focus();
|
|
30586
|
+
}
|
|
30587
|
+
}, [isActiveTask]);
|
|
30588
|
+
const classNames = css('pfext-quick-start-task-header__title', {
|
|
30589
|
+
'pfext-quick-start-task-header__title-success': taskStatus === QuickStartTaskStatus.SUCCESS,
|
|
30590
|
+
'pfext-quick-start-task-header__title-failed': taskStatus === (QuickStartTaskStatus.FAILED || QuickStartTaskStatus.VISITED),
|
|
30591
|
+
});
|
|
30592
|
+
// const notCompleted = taskStatus === QuickStartTaskStatus.VISITED;
|
|
30593
|
+
// const skippedReview = taskStatus === QuickStartTaskStatus.REVIEW;
|
|
30594
|
+
const failedReview = taskStatus === QuickStartTaskStatus.FAILED;
|
|
30595
|
+
// TODO: toned down when this is shown, investigate further when we should display it
|
|
30596
|
+
// related: https://github.com/patternfly/patternfly-quickstarts/issues/104
|
|
30597
|
+
const tryAgain = failedReview && (React.createElement(React.Fragment, null,
|
|
30598
|
+
React.createElement("div", null),
|
|
30599
|
+
React.createElement("div", { className: "pfext-quick-start-task-header__tryagain" }, "Try the steps again.")));
|
|
30600
|
+
const content = (React.createElement("div", { className: "pfext-quick-start-task-header", ref: titleRef },
|
|
30601
|
+
React.createElement(TaskIcon, { taskIndex: taskIndex, taskStatus: taskStatus }),
|
|
30602
|
+
React.createElement(Title, { headingLevel: "h3", size: size, className: classNames },
|
|
30603
|
+
React.createElement("span", { dangerouslySetInnerHTML: { __html: removeParagraphWrap(markdownConvert(title)) } }),
|
|
30604
|
+
isActiveTask && subtitle && (React.createElement("span", { className: "pfext-quick-start-task-header__subtitle", "data-test-id": "quick-start-task-subtitle" },
|
|
30605
|
+
' ',
|
|
30606
|
+
subtitle))),
|
|
30607
|
+
tryAgain));
|
|
30608
|
+
return (React.createElement(WizardNavItem, { content: content, stepIndex: taskIndex, onClick: () => onTaskSelect(taskIndex - 1), component: "button", isCurrent: isActiveTask }, children));
|
|
30592
30609
|
};
|
|
30593
30610
|
|
|
30594
30611
|
const QuickStartTaskHeaderList = ({ tasks, allTaskStatuses, onTaskSelect, }) => tasks.length > 0 ? (React.createElement(List, { className: "pfext-quick-start-task-header__list" }, tasks.map((task, index) => (React.createElement(QuickStartTaskHeader, { key: task.title, title: task.title, taskIndex: index + 1, size: "md", taskStatus: allTaskStatuses[index], onTaskSelect: onTaskSelect }))))) : null;
|
|
30595
30612
|
|
|
30596
|
-
const QuickStartConclusion = ({ tasks, conclusion, allTaskStatuses, nextQuickStarts, onQuickStartChange, onTaskSelect, }) => {
|
|
30597
|
-
const hasFailedTask = allTaskStatuses.includes(QuickStartTaskStatus.FAILED);
|
|
30598
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30599
|
-
return (React.createElement(React.Fragment, null,
|
|
30600
|
-
React.createElement(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect }),
|
|
30601
|
-
React.createElement(QuickStartMarkdownView, { content: hasFailedTask
|
|
30602
|
-
? getResource('One or more verifications did not pass during this quick start. Revisit the tasks or the help links, and then try again.')
|
|
30603
|
-
: conclusion }),
|
|
30604
|
-
!hasFailedTask &&
|
|
30605
|
-
nextQuickStarts &&
|
|
30606
|
-
nextQuickStarts.length > 0 &&
|
|
30607
|
-
nextQuickStarts.map((nextQuickStart, index) => {
|
|
30608
|
-
var _a;
|
|
30609
|
-
return (React.createElement(Button, { variant: "link", onClick: () => onQuickStartChange(nextQuickStart.metadata.name), isInline: true, isBlock: true, key: index },
|
|
30610
|
-
getResource('Start {{nextQSDisplayName}} quick start').replace('{{nextQSDisplayName}}', (_a = nextQuickStart === null || nextQuickStart === void 0 ? void 0 : nextQuickStart.spec) === null || _a === void 0 ? void 0 : _a.displayName),
|
|
30611
|
-
' ',
|
|
30612
|
-
React.createElement(ArrowRightIcon, { style: { marginLeft: 'var(--pf-v5-global--spacer--xs)', verticalAlign: 'middle' } })));
|
|
30613
|
-
})));
|
|
30614
|
-
};
|
|
30615
|
-
|
|
30616
|
-
const QuickStartIntroduction = ({ tasks, introduction, allTaskStatuses, prerequisites, onTaskSelect, }) => {
|
|
30617
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30618
|
-
const prereqs = prerequisites === null || prerequisites === void 0 ? void 0 : prerequisites.filter((p) => p);
|
|
30619
|
-
const [isPrereqsExpanded, setIsPrereqsExpanded] = React.useState(false);
|
|
30620
|
-
const prereqList = (prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (React.createElement(ExpandableSection, { toggleText: getResource('View Prerequisites ({{totalPrereqs}})').replace('{{totalPrereqs}}', prereqs.length), onToggle: () => setIsPrereqsExpanded(!isPrereqsExpanded), className: "pfext-quick-start-intro__prereq" },
|
|
30621
|
-
React.createElement(List, { className: "pfext-quick-start-intro__prereq-list" }, prereqs.map((pr) => (React.createElement(ListItem, { key: pr, className: "pfext-quick-start-intro__prereq-list__item" },
|
|
30622
|
-
React.createElement("span", { className: "pfext-quick-start-intro__prereq-list__item-content" },
|
|
30623
|
-
React.createElement(QuickStartMarkdownView, { content: pr }))))))));
|
|
30624
|
-
return (React.createElement(React.Fragment, null,
|
|
30625
|
-
React.createElement(QuickStartMarkdownView, { content: introduction }),
|
|
30626
|
-
prereqList,
|
|
30627
|
-
React.createElement("p", { style: { marginBottom: 'var(--pf-v5-global--spacer--md)' } },
|
|
30628
|
-
getResource('In this quick start, you will complete {{count, number}} task', tasks.length).replace('{{count, number}}', tasks.length),
|
|
30629
|
-
":"),
|
|
30630
|
-
React.createElement(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect })));
|
|
30631
|
-
};
|
|
30632
|
-
|
|
30633
|
-
const getAlertVariant = (status) => {
|
|
30634
|
-
switch (status) {
|
|
30635
|
-
case QuickStartTaskStatus.SUCCESS:
|
|
30636
|
-
return 'success';
|
|
30637
|
-
case QuickStartTaskStatus.FAILED:
|
|
30638
|
-
return 'danger';
|
|
30639
|
-
default:
|
|
30640
|
-
return 'info';
|
|
30641
|
-
}
|
|
30642
|
-
};
|
|
30643
|
-
const QuickStartTaskReview = ({ review, taskStatus, onTaskReview, }) => {
|
|
30644
|
-
const { instructions, failedTaskHelp: taskHelp } = review;
|
|
30645
|
-
const { getResource } = React.useContext(QuickStartContext);
|
|
30646
|
-
const alertClassNames = css('pfext-quick-start-task-review', {
|
|
30647
|
-
'pfext-quick-start-task-review--success': taskStatus === QuickStartTaskStatus.SUCCESS,
|
|
30648
|
-
'pfext-quick-start-task-review--failed': taskStatus === QuickStartTaskStatus.FAILED,
|
|
30649
|
-
});
|
|
30650
|
-
const title = React.createElement("span", { className: alertClassNames }, getResource('Check your work'));
|
|
30651
|
-
return (React.createElement(Alert, { className: "pfext-quick-start-task-review-alert", variant: getAlertVariant(taskStatus), title: title, isInline: true, role: "alert" },
|
|
30652
|
-
React.createElement(QuickStartMarkdownView, { content: instructions }),
|
|
30653
|
-
React.createElement("span", { className: "pfext-quick-start-task-review__actions" },
|
|
30654
|
-
React.createElement(Radio, { id: "review-success", name: "review-success", "data-testid": "qs-drawer-check-yes", label: getResource('Yes'), className: "pfext-quick-start-task-review__radio", isChecked: taskStatus === QuickStartTaskStatus.SUCCESS, onChange: () => onTaskReview(QuickStartTaskStatus.SUCCESS) }),
|
|
30655
|
-
React.createElement(Radio, { id: "review-failed", name: "review-failed", "data-testid": "qs-drawer-check-no", label: getResource('No'), className: "pfext-quick-start-task-review__radio", isChecked: taskStatus === QuickStartTaskStatus.FAILED, onChange: () => onTaskReview(QuickStartTaskStatus.FAILED) })),
|
|
30656
|
-
taskStatus === QuickStartTaskStatus.FAILED && taskHelp && (React.createElement(QuickStartMarkdownView, { content: taskHelp, exactHeight: true }))));
|
|
30657
|
-
};
|
|
30658
|
-
|
|
30659
|
-
const QuickStartTasks = ({ tasks, taskNumber, allTaskStatuses, onTaskReview, onTaskSelect, }) => {
|
|
30660
|
-
const { getResource, alwaysShowTaskReview } = React.useContext(QuickStartContext);
|
|
30661
|
-
return (React.createElement("div", { className: "pfext-quick-start-tasks__list" },
|
|
30662
|
-
React.createElement("ul", null, tasks
|
|
30663
|
-
.filter((_, index) => allTaskStatuses[index] !== QuickStartTaskStatus.INIT)
|
|
30664
|
-
.map((task, index) => {
|
|
30665
|
-
const { title, description, review } = task;
|
|
30666
|
-
const isActiveTask = index === taskNumber;
|
|
30667
|
-
const taskStatus = allTaskStatuses[index];
|
|
30668
|
-
const shouldShowTaskReview = (!QUICKSTART_TASKS_INITIAL_STATES.includes(taskStatus) || alwaysShowTaskReview) &&
|
|
30669
|
-
review;
|
|
30670
|
-
return (React.createElement(React.Fragment, { key: title },
|
|
30671
|
-
React.createElement(QuickStartTaskHeader, { taskIndex: index + 1, title: title, size: "md", subtitle: getResource('{{index, number}} of {{tasks, number}}')
|
|
30672
|
-
.replace('{{index, number}}', index + 1)
|
|
30673
|
-
.replace('{{tasks, number}}', tasks.length), taskStatus: taskStatus, isActiveTask: isActiveTask, onTaskSelect: onTaskSelect }, isActiveTask && (React.createElement("div", { className: "pfext-quick-start-task__content" },
|
|
30674
|
-
React.createElement(QuickStartMarkdownView, { content: description }),
|
|
30675
|
-
shouldShowTaskReview && (React.createElement(QuickStartTaskReview, { review: review, taskStatus: taskStatus, onTaskReview: onTaskReview })))))));
|
|
30676
|
-
}))));
|
|
30677
|
-
};
|
|
30678
|
-
|
|
30679
|
-
const QuickStartContent = React.forwardRef(({ quickStart, nextQuickStarts = [], taskNumber, allTaskStatuses, onTaskSelect, onTaskReview, onQuickStartChange, }, ref) => {
|
|
30680
|
-
const { spec: { introduction, tasks, conclusion, prerequisites }, } = quickStart;
|
|
30681
|
-
const totalTasks = tasks.length;
|
|
30682
|
-
return (React.createElement("div", { className: "pfext-quick-start-content", ref: ref },
|
|
30683
|
-
taskNumber === -1 && (React.createElement(QuickStartIntroduction, { tasks: tasks, allTaskStatuses: allTaskStatuses, introduction: introduction, prerequisites: prerequisites, onTaskSelect: onTaskSelect })),
|
|
30684
|
-
taskNumber > -1 && taskNumber < totalTasks && (React.createElement(QuickStartTasks, { tasks: tasks, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskReview: onTaskReview, onTaskSelect: onTaskSelect })),
|
|
30685
|
-
taskNumber === totalTasks && (React.createElement(QuickStartConclusion, { tasks: tasks, conclusion: conclusion, allTaskStatuses: allTaskStatuses, nextQuickStarts: nextQuickStarts, onQuickStartChange: onQuickStartChange, onTaskSelect: onTaskSelect }))));
|
|
30613
|
+
const QuickStartConclusion = ({ tasks, conclusion, allTaskStatuses, nextQuickStarts, onQuickStartChange, onTaskSelect, }) => {
|
|
30614
|
+
const hasFailedTask = allTaskStatuses.includes(QuickStartTaskStatus.FAILED);
|
|
30615
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30616
|
+
return (React.createElement(React.Fragment, null,
|
|
30617
|
+
React.createElement(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect }),
|
|
30618
|
+
React.createElement(QuickStartMarkdownView, { content: hasFailedTask
|
|
30619
|
+
? getResource('One or more verifications did not pass during this quick start. Revisit the tasks or the help links, and then try again.')
|
|
30620
|
+
: conclusion }),
|
|
30621
|
+
!hasFailedTask &&
|
|
30622
|
+
nextQuickStarts &&
|
|
30623
|
+
nextQuickStarts.length > 0 &&
|
|
30624
|
+
nextQuickStarts.map((nextQuickStart, index) => {
|
|
30625
|
+
var _a;
|
|
30626
|
+
return (React.createElement(Button, { variant: "link", onClick: () => onQuickStartChange(nextQuickStart.metadata.name), isInline: true, isBlock: true, key: index },
|
|
30627
|
+
getResource('Start {{nextQSDisplayName}} quick start').replace('{{nextQSDisplayName}}', (_a = nextQuickStart === null || nextQuickStart === void 0 ? void 0 : nextQuickStart.spec) === null || _a === void 0 ? void 0 : _a.displayName),
|
|
30628
|
+
' ',
|
|
30629
|
+
React.createElement(ArrowRightIcon, { style: { marginLeft: 'var(--pf-v5-global--spacer--xs)', verticalAlign: 'middle' } })));
|
|
30630
|
+
})));
|
|
30631
|
+
};
|
|
30632
|
+
|
|
30633
|
+
const QuickStartIntroduction = ({ tasks, introduction, allTaskStatuses, prerequisites, onTaskSelect, }) => {
|
|
30634
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30635
|
+
const prereqs = prerequisites === null || prerequisites === void 0 ? void 0 : prerequisites.filter((p) => p);
|
|
30636
|
+
const [isPrereqsExpanded, setIsPrereqsExpanded] = React.useState(false);
|
|
30637
|
+
const prereqList = (prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (React.createElement(ExpandableSection, { toggleText: getResource('View Prerequisites ({{totalPrereqs}})').replace('{{totalPrereqs}}', prereqs.length), onToggle: () => setIsPrereqsExpanded(!isPrereqsExpanded), className: "pfext-quick-start-intro__prereq" },
|
|
30638
|
+
React.createElement(List, { className: "pfext-quick-start-intro__prereq-list" }, prereqs.map((pr) => (React.createElement(ListItem, { key: pr, className: "pfext-quick-start-intro__prereq-list__item" },
|
|
30639
|
+
React.createElement("span", { className: "pfext-quick-start-intro__prereq-list__item-content" },
|
|
30640
|
+
React.createElement(QuickStartMarkdownView, { content: pr }))))))));
|
|
30641
|
+
return (React.createElement(React.Fragment, null,
|
|
30642
|
+
React.createElement(QuickStartMarkdownView, { content: introduction }),
|
|
30643
|
+
prereqList,
|
|
30644
|
+
React.createElement("p", { style: { marginBottom: 'var(--pf-v5-global--spacer--md)' } },
|
|
30645
|
+
getResource('In this quick start, you will complete {{count, number}} task', tasks.length).replace('{{count, number}}', tasks.length),
|
|
30646
|
+
":"),
|
|
30647
|
+
React.createElement(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect })));
|
|
30648
|
+
};
|
|
30649
|
+
|
|
30650
|
+
const getAlertVariant = (status) => {
|
|
30651
|
+
switch (status) {
|
|
30652
|
+
case QuickStartTaskStatus.SUCCESS:
|
|
30653
|
+
return 'success';
|
|
30654
|
+
case QuickStartTaskStatus.FAILED:
|
|
30655
|
+
return 'danger';
|
|
30656
|
+
default:
|
|
30657
|
+
return 'info';
|
|
30658
|
+
}
|
|
30659
|
+
};
|
|
30660
|
+
const QuickStartTaskReview = ({ review, taskStatus, onTaskReview, }) => {
|
|
30661
|
+
const { instructions, failedTaskHelp: taskHelp } = review;
|
|
30662
|
+
const { getResource } = React.useContext(QuickStartContext);
|
|
30663
|
+
const alertClassNames = css('pfext-quick-start-task-review', {
|
|
30664
|
+
'pfext-quick-start-task-review--success': taskStatus === QuickStartTaskStatus.SUCCESS,
|
|
30665
|
+
'pfext-quick-start-task-review--failed': taskStatus === QuickStartTaskStatus.FAILED,
|
|
30666
|
+
});
|
|
30667
|
+
const title = React.createElement("span", { className: alertClassNames }, getResource('Check your work'));
|
|
30668
|
+
return (React.createElement(Alert, { className: "pfext-quick-start-task-review-alert", variant: getAlertVariant(taskStatus), title: title, isInline: true, role: "alert" },
|
|
30669
|
+
React.createElement(QuickStartMarkdownView, { content: instructions }),
|
|
30670
|
+
React.createElement("span", { className: "pfext-quick-start-task-review__actions" },
|
|
30671
|
+
React.createElement(Radio, { id: "review-success", name: "review-success", "data-testid": "qs-drawer-check-yes", label: getResource('Yes'), className: "pfext-quick-start-task-review__radio", isChecked: taskStatus === QuickStartTaskStatus.SUCCESS, onChange: () => onTaskReview(QuickStartTaskStatus.SUCCESS) }),
|
|
30672
|
+
React.createElement(Radio, { id: "review-failed", name: "review-failed", "data-testid": "qs-drawer-check-no", label: getResource('No'), className: "pfext-quick-start-task-review__radio", isChecked: taskStatus === QuickStartTaskStatus.FAILED, onChange: () => onTaskReview(QuickStartTaskStatus.FAILED) })),
|
|
30673
|
+
taskStatus === QuickStartTaskStatus.FAILED && taskHelp && (React.createElement(QuickStartMarkdownView, { content: taskHelp, exactHeight: true }))));
|
|
30674
|
+
};
|
|
30675
|
+
|
|
30676
|
+
const QuickStartTasks = ({ tasks, taskNumber, allTaskStatuses, onTaskReview, onTaskSelect, }) => {
|
|
30677
|
+
const { getResource, alwaysShowTaskReview } = React.useContext(QuickStartContext);
|
|
30678
|
+
return (React.createElement("div", { className: "pfext-quick-start-tasks__list" },
|
|
30679
|
+
React.createElement("ul", null, tasks
|
|
30680
|
+
.filter((_, index) => allTaskStatuses[index] !== QuickStartTaskStatus.INIT)
|
|
30681
|
+
.map((task, index) => {
|
|
30682
|
+
const { title, description, review } = task;
|
|
30683
|
+
const isActiveTask = index === taskNumber;
|
|
30684
|
+
const taskStatus = allTaskStatuses[index];
|
|
30685
|
+
const shouldShowTaskReview = (!QUICKSTART_TASKS_INITIAL_STATES.includes(taskStatus) || alwaysShowTaskReview) &&
|
|
30686
|
+
review;
|
|
30687
|
+
return (React.createElement(React.Fragment, { key: title },
|
|
30688
|
+
React.createElement(QuickStartTaskHeader, { taskIndex: index + 1, title: title, size: "md", subtitle: getResource('{{index, number}} of {{tasks, number}}')
|
|
30689
|
+
.replace('{{index, number}}', index + 1)
|
|
30690
|
+
.replace('{{tasks, number}}', tasks.length), taskStatus: taskStatus, isActiveTask: isActiveTask, onTaskSelect: onTaskSelect }, isActiveTask && (React.createElement("div", { className: "pfext-quick-start-task__content" },
|
|
30691
|
+
React.createElement(QuickStartMarkdownView, { content: description }),
|
|
30692
|
+
shouldShowTaskReview && (React.createElement(QuickStartTaskReview, { review: review, taskStatus: taskStatus, onTaskReview: onTaskReview })))))));
|
|
30693
|
+
}))));
|
|
30694
|
+
};
|
|
30695
|
+
|
|
30696
|
+
const QuickStartContent = React.forwardRef(({ quickStart, nextQuickStarts = [], taskNumber, allTaskStatuses, onTaskSelect, onTaskReview, onQuickStartChange, }, ref) => {
|
|
30697
|
+
const { spec: { introduction, tasks, conclusion, prerequisites }, } = quickStart;
|
|
30698
|
+
const totalTasks = tasks.length;
|
|
30699
|
+
return (React.createElement("div", { className: "pfext-quick-start-content", ref: ref },
|
|
30700
|
+
taskNumber === -1 && (React.createElement(QuickStartIntroduction, { tasks: tasks, allTaskStatuses: allTaskStatuses, introduction: introduction, prerequisites: prerequisites, onTaskSelect: onTaskSelect })),
|
|
30701
|
+
taskNumber > -1 && taskNumber < totalTasks && (React.createElement(QuickStartTasks, { tasks: tasks, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskReview: onTaskReview, onTaskSelect: onTaskSelect })),
|
|
30702
|
+
taskNumber === totalTasks && (React.createElement(QuickStartConclusion, { tasks: tasks, conclusion: conclusion, allTaskStatuses: allTaskStatuses, nextQuickStarts: nextQuickStarts, onQuickStartChange: onQuickStartChange, onTaskSelect: onTaskSelect }))));
|
|
30686
30703
|
});
|
|
30687
30704
|
|
|
30688
|
-
const QuickStartFooter = ({ status, taskNumber, totalTasks, onNext, onBack, footerClass, quickStartId, }) => {
|
|
30689
|
-
const { restartQuickStart, getResource } = React.useContext(QuickStartContext);
|
|
30690
|
-
const PrimaryButtonText = React.useMemo(() => ({
|
|
30691
|
-
START: getResource('Start'),
|
|
30692
|
-
CONTINUE: getResource('Continue'),
|
|
30693
|
-
NEXT: getResource('Next'),
|
|
30694
|
-
CLOSE: getResource('Close'),
|
|
30695
|
-
}), [getResource]);
|
|
30696
|
-
const SecondaryButtonText = React.useMemo(() => ({
|
|
30697
|
-
BACK: getResource('Back'),
|
|
30698
|
-
RESTART: getResource('Restart'),
|
|
30699
|
-
}), [getResource]);
|
|
30700
|
-
const onRestart = React.useCallback((e) => {
|
|
30701
|
-
e.preventDefault();
|
|
30702
|
-
e.stopPropagation();
|
|
30703
|
-
restartQuickStart(quickStartId, totalTasks);
|
|
30704
|
-
}, [quickStartId, restartQuickStart, totalTasks]);
|
|
30705
|
-
const getPrimaryButtonText = React.useMemo(() => {
|
|
30706
|
-
if (status === QuickStartStatus.NOT_STARTED) {
|
|
30707
|
-
return PrimaryButtonText.START;
|
|
30708
|
-
}
|
|
30709
|
-
if (taskNumber === totalTasks) {
|
|
30710
|
-
return PrimaryButtonText.CLOSE;
|
|
30711
|
-
}
|
|
30712
|
-
if (taskNumber > -1 && taskNumber < totalTasks) {
|
|
30713
|
-
return PrimaryButtonText.NEXT;
|
|
30714
|
-
}
|
|
30715
|
-
return PrimaryButtonText.CONTINUE;
|
|
30716
|
-
}, [taskNumber, totalTasks, PrimaryButtonText, status]);
|
|
30717
|
-
const getPrimaryButton = React.useMemo(() => (React.createElement(Button, { variant: "primary", className: "pfext-quick-start-footer__actionbtn", onClick: onNext, "data-testid": `qs-drawer-${camelize(getPrimaryButtonText)}`, "data-test": `${getPrimaryButtonText} button` }, getPrimaryButtonText)), [getPrimaryButtonText, onNext]);
|
|
30718
|
-
const getSecondaryButton = React.useMemo(() => taskNumber === -1 && status !== QuickStartStatus.NOT_STARTED ? (React.createElement(Button, { variant: "secondary", onClick: onRestart, "data-testid": "qs-drawer-restart" }, SecondaryButtonText.RESTART)) : (taskNumber > -1 && (React.createElement(Button, { variant: "secondary", onClick: onBack, "data-testid": "qs-drawer-back" }, SecondaryButtonText.BACK))), [onRestart, onBack, SecondaryButtonText, status, taskNumber]);
|
|
30719
|
-
const getSideNoteAction = React.useMemo(() => taskNumber !== -1 && (React.createElement(Button, { variant: "link", className: "pfext-quick-start-footer__restartbtn", onClick: onRestart, "data-testid": "qs-drawer-side-note-action" }, SecondaryButtonText.RESTART)), [taskNumber, onRestart, SecondaryButtonText.RESTART]);
|
|
30720
|
-
return (React.createElement("div", { className: `pfext-quick-start-footer ${footerClass}` },
|
|
30721
|
-
getPrimaryButton,
|
|
30722
|
-
getSecondaryButton,
|
|
30723
|
-
getSideNoteAction));
|
|
30724
|
-
};
|
|
30725
|
-
|
|
30726
|
-
const QuickStartController = ({ quickStart, nextQuickStarts, contentRef, footerClass, }) => {
|
|
30727
|
-
const { metadata: { name }, spec: { tasks = [] }, } = quickStart;
|
|
30728
|
-
const totalTasks = tasks === null || tasks === void 0 ? void 0 : tasks.length;
|
|
30729
|
-
const { activeQuickStartState, setActiveQuickStart, setQuickStartTaskNumber, setQuickStartTaskStatus, nextStep, previousStep, } = React.useContext(QuickStartContext);
|
|
30730
|
-
const status = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.status;
|
|
30731
|
-
const taskNumber = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.taskNumber;
|
|
30732
|
-
const allTaskStatuses = tasks.map((task, index) => activeQuickStartState[`taskStatus${index}`]);
|
|
30733
|
-
const handleQuickStartChange = React.useCallback((quickStartId) => setActiveQuickStart(quickStartId), [setActiveQuickStart]);
|
|
30734
|
-
const handleTaskStatusChange = React.useCallback((newTaskStatus) => setQuickStartTaskStatus(newTaskStatus), [setQuickStartTaskStatus]);
|
|
30735
|
-
const getQuickStartActiveTask = React.useCallback(() => {
|
|
30736
|
-
let activeTaskNumber = 0;
|
|
30737
|
-
while (activeTaskNumber !== totalTasks &&
|
|
30738
|
-
activeQuickStartState[`taskStatus${activeTaskNumber}`] !== QuickStartTaskStatus.INIT) {
|
|
30739
|
-
activeTaskNumber++;
|
|
30740
|
-
}
|
|
30741
|
-
return activeTaskNumber;
|
|
30742
|
-
}, [totalTasks, activeQuickStartState]);
|
|
30743
|
-
const handleQuickStartContinue = React.useCallback(() => {
|
|
30744
|
-
const activeTaskNumber = getQuickStartActiveTask();
|
|
30745
|
-
setQuickStartTaskNumber(name, activeTaskNumber);
|
|
30746
|
-
}, [getQuickStartActiveTask, setQuickStartTaskNumber, name]);
|
|
30747
|
-
const handleNext = React.useCallback(() => {
|
|
30748
|
-
if (status === QuickStartStatus.COMPLETE && taskNumber === totalTasks) {
|
|
30749
|
-
return handleQuickStartChange('');
|
|
30750
|
-
}
|
|
30751
|
-
if (status !== QuickStartStatus.NOT_STARTED && taskNumber === -1) {
|
|
30752
|
-
return handleQuickStartContinue();
|
|
30753
|
-
}
|
|
30754
|
-
return nextStep(totalTasks);
|
|
30755
|
-
}, [handleQuickStartChange, nextStep, status, taskNumber, totalTasks, handleQuickStartContinue]);
|
|
30756
|
-
const handleBack = React.useCallback(() => previousStep(), [previousStep]);
|
|
30757
|
-
const handleTaskSelect = React.useCallback((selectedTaskNumber) => {
|
|
30758
|
-
setQuickStartTaskNumber(name, selectedTaskNumber);
|
|
30759
|
-
}, [name, setQuickStartTaskNumber]);
|
|
30760
|
-
return (React.createElement(React.Fragment, null,
|
|
30761
|
-
React.createElement(QuickStartContent, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskSelect: handleTaskSelect, onTaskReview: handleTaskStatusChange, onQuickStartChange: handleQuickStartChange, ref: contentRef }),
|
|
30762
|
-
React.createElement(QuickStartFooter, { status: status, taskNumber: taskNumber, totalTasks: totalTasks, onNext: handleNext, onBack: handleBack, footerClass: footerClass, quickStartId: quickStart.metadata.name })));
|
|
30763
|
-
};
|
|
30764
|
-
|
|
30765
|
-
const getElement = (appendTo) => {
|
|
30766
|
-
if (typeof appendTo === 'function') {
|
|
30767
|
-
return appendTo();
|
|
30768
|
-
}
|
|
30769
|
-
return appendTo;
|
|
30770
|
-
};
|
|
30771
|
-
const useScrollTopOnTaskNumberChange = (node, taskNumber) => {
|
|
30772
|
-
React.useEffect(() => {
|
|
30773
|
-
if (node) {
|
|
30774
|
-
node.scrollTo({ top: 0, behavior: 'smooth' });
|
|
30775
|
-
}
|
|
30776
|
-
}, [taskNumber, node]);
|
|
30777
|
-
};
|
|
30778
|
-
const QuickStartPanelContent = (_a) => {
|
|
30779
|
-
var { quickStarts = [], handleClose, activeQuickStartID, appendTo, isResizable = true, showClose = true, headerVariant = '' } = _a, props = __rest(_a, ["quickStarts", "handleClose", "activeQuickStartID", "appendTo", "isResizable", "showClose", "headerVariant"]);
|
|
30780
|
-
const titleRef = React.useRef(null);
|
|
30781
|
-
const { getResource, activeQuickStartState } = React.useContext(QuickStartContext);
|
|
30782
|
-
const [contentRef, setContentRef] = React.useState();
|
|
30783
|
-
const shadows = useScrollShadows(contentRef);
|
|
30784
|
-
const quickStart = quickStarts.find((qs) => qs.metadata.name === activeQuickStartID);
|
|
30785
|
-
const taskNumber = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.taskNumber;
|
|
30786
|
-
useScrollTopOnTaskNumberChange(contentRef, taskNumber);
|
|
30787
|
-
const nextQuickStarts = quickStarts.filter((qs) => { var _a; return (_a = quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.nextQuickStart) === null || _a === void 0 ? void 0 : _a.includes(qs.metadata.name); });
|
|
30788
|
-
const headerClasses = css('pfext-quick-start-panel-content__header', {
|
|
30789
|
-
'pfext-quick-start-panel-content__header__shadow': shadows === Shadows.top || shadows === Shadows.both,
|
|
30790
|
-
'pfext-quick-start-panel-content__header--blue-white': headerVariant === 'blue-white',
|
|
30791
|
-
});
|
|
30792
|
-
const footerClass = css({
|
|
30793
|
-
'pfext-quick-start-panel-content__footer__shadow': shadows === Shadows.bottom || shadows === Shadows.both,
|
|
30794
|
-
});
|
|
30795
|
-
const getStep = () => {
|
|
30796
|
-
const tasks = quickStart.spec.tasks.length;
|
|
30797
|
-
if (Number.parseInt(taskNumber) === -1) {
|
|
30798
|
-
return 'intro';
|
|
30799
|
-
}
|
|
30800
|
-
if (Number.parseInt(taskNumber) === tasks) {
|
|
30801
|
-
return 'conclusion';
|
|
30802
|
-
}
|
|
30803
|
-
return Number.parseInt(taskNumber) + 1;
|
|
30804
|
-
};
|
|
30805
|
-
React.useEffect(() => {
|
|
30806
|
-
if (quickStart) {
|
|
30807
|
-
titleRef.current.focus();
|
|
30808
|
-
}
|
|
30809
|
-
}, [quickStart]);
|
|
30810
|
-
const content = quickStart ? (React.createElement(DrawerPanelContent, Object.assign({ isResizable: isResizable, className: "pfext-quick-start__base", "data-testid": `qs-drawer-${camelize(quickStart.spec.displayName)}`, "data-qs": `qs-step-${getStep()}`, "data-test": "quickstart drawer" }, props),
|
|
30811
|
-
React.createElement("div", { className: headerClasses },
|
|
30812
|
-
React.createElement(DrawerHead, null,
|
|
30813
|
-
React.createElement("div", { className: "pfext-quick-start-panel-content__title", tabIndex: -1, ref: titleRef },
|
|
30814
|
-
React.createElement(Title, { headingLevel: "h2", size: "xl", className: "pfext-quick-start-panel-content__name", style: { marginRight: 'var(--pf-v5-global--spacer--md)' } },
|
|
30815
|
-
React.createElement("span", { dangerouslySetInnerHTML: {
|
|
30816
|
-
__html: removeParagraphWrap(markdownConvert(quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.displayName)),
|
|
30817
|
-
} }),
|
|
30818
|
-
' ',
|
|
30819
|
-
React.createElement("small", { className: "pfext-quick-start-panel-content__duration" }, (quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
30820
|
-
? getResource('{{type}} • {{duration, number}} minutes', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
30821
|
-
.replace('{{duration, number}}', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
30822
|
-
.replace('{{type}}', getResource('Type'))
|
|
30823
|
-
: getResource('Type')))),
|
|
30824
|
-
showClose && (React.createElement(DrawerActions, null,
|
|
30825
|
-
React.createElement(DrawerCloseButton, { onClick: handleClose, className: "pfext-quick-start-panel-content__close-button", "data-testid": "qs-drawer-close" }))))),
|
|
30826
|
-
React.createElement(DrawerPanelBody, { hasNoPadding: true, className: "pfext-quick-start-panel-content__body", "data-test": "content" },
|
|
30827
|
-
React.createElement(QuickStartController, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, footerClass: footerClass, contentRef: setContentRef })))) : null;
|
|
30828
|
-
if (appendTo) {
|
|
30829
|
-
return ReactDOM.createPortal(content, getElement(appendTo));
|
|
30830
|
-
}
|
|
30831
|
-
return content;
|
|
30832
|
-
};
|
|
30833
|
-
|
|
30834
|
-
const QuickStartContainer = (_a) => {
|
|
30835
|
-
var { quickStarts, children, activeQuickStartID, allQuickStartStates, setActiveQuickStartID, setAllQuickStartStates, appendTo, fullWidth, onCloseInProgress, onCloseNotInProgress, resourceBundle, showCardFooters, useLegacyHeaderColors, language, loading = false, useQueryParams = true, markdown, contextProps, alwaysShowTaskReview = true } = _a, props = __rest(_a, ["quickStarts", "children", "activeQuickStartID", "allQuickStartStates", "setActiveQuickStartID", "setAllQuickStartStates", "appendTo", "fullWidth", "onCloseInProgress", "onCloseNotInProgress", "resourceBundle", "showCardFooters", "useLegacyHeaderColors", "language", "loading", "useQueryParams", "markdown", "contextProps", "alwaysShowTaskReview"]);
|
|
30836
|
-
const valuesForQuickstartContext = useValuesForQuickStartContext(Object.assign({ allQuickStarts: quickStarts, activeQuickStartID,
|
|
30837
|
-
setActiveQuickStartID,
|
|
30838
|
-
allQuickStartStates,
|
|
30839
|
-
setAllQuickStartStates, footer: {
|
|
30840
|
-
show: showCardFooters,
|
|
30841
|
-
}, useLegacyHeaderColors,
|
|
30842
|
-
language, resourceBundle: Object.assign({}, resourceBundle), loading,
|
|
30843
|
-
useQueryParams,
|
|
30844
|
-
markdown,
|
|
30845
|
-
alwaysShowTaskReview }, contextProps));
|
|
30846
|
-
React.useEffect(() => {
|
|
30847
|
-
if (quickStarts &&
|
|
30848
|
-
JSON.stringify(quickStarts) !== JSON.stringify(valuesForQuickstartContext.allQuickStarts)) {
|
|
30849
|
-
valuesForQuickstartContext.setAllQuickStarts(quickStarts);
|
|
30850
|
-
}
|
|
30851
|
-
}, [quickStarts, valuesForQuickstartContext]);
|
|
30852
|
-
React.useEffect(() => {
|
|
30853
|
-
if (loading !== valuesForQuickstartContext.loading) {
|
|
30854
|
-
valuesForQuickstartContext.setLoading(loading);
|
|
30855
|
-
}
|
|
30856
|
-
}, [loading, valuesForQuickstartContext]);
|
|
30857
|
-
const drawerProps = Object.assign({ appendTo,
|
|
30858
|
-
fullWidth,
|
|
30859
|
-
onCloseInProgress,
|
|
30860
|
-
onCloseNotInProgress }, props);
|
|
30861
|
-
return (React.createElement(QuickStartContext.Provider, { value: valuesForQuickstartContext },
|
|
30862
|
-
React.createElement(QuickStartDrawer, Object.assign({}, drawerProps), children)));
|
|
30863
|
-
};
|
|
30864
|
-
const QuickStartDrawer = (_a) => {
|
|
30865
|
-
var { quickStarts = [], children, appendTo, fullWidth, onCloseInProgress, onCloseNotInProgress } = _a, props = __rest(_a, ["quickStarts", "children", "appendTo", "fullWidth", "onCloseInProgress", "onCloseNotInProgress"]);
|
|
30866
|
-
const { activeQuickStartID, setActiveQuickStart, allQuickStarts = [], activeQuickStartState, allQuickStartStates, setAllQuickStartStates, useLegacyHeaderColors, } = React.useContext(QuickStartContext);
|
|
30867
|
-
const combinedQuickStarts = allQuickStarts.concat(quickStarts);
|
|
30868
|
-
React.useEffect(() => {
|
|
30869
|
-
const params = new URLSearchParams(window.location.search);
|
|
30870
|
-
// if there is a quick start param, but the quick start is not active, set it
|
|
30871
|
-
// this can happen if a new browser session is opened or an incognito window for example
|
|
30872
|
-
const quickStartIdFromParam = params.get(QUICKSTART_ID_FILTER_KEY) || '';
|
|
30873
|
-
if (quickStartIdFromParam && activeQuickStartID !== quickStartIdFromParam) {
|
|
30874
|
-
const activeQuickStart = getQuickStartByName(quickStartIdFromParam, combinedQuickStarts);
|
|
30875
|
-
// don't try to load a quick start that is actually just an external resource (spec.link)
|
|
30876
|
-
if (combinedQuickStarts.length > 0 && activeQuickStart && !activeQuickStart.spec.link) {
|
|
30877
|
-
setActiveQuickStart(quickStartIdFromParam);
|
|
30878
|
-
}
|
|
30879
|
-
}
|
|
30880
|
-
}, [activeQuickStartID, combinedQuickStarts, setActiveQuickStart]);
|
|
30881
|
-
React.useEffect(() => {
|
|
30882
|
-
// If activeQuickStartID was changed through prop from QuickStartContainer, need to init the state if it does not exist yet
|
|
30883
|
-
if (activeQuickStartID && !allQuickStartStates[activeQuickStartID]) {
|
|
30884
|
-
setAllQuickStartStates(Object.assign(Object.assign({}, allQuickStartStates), { [activeQuickStartID]: getDefaultQuickStartState() }));
|
|
30885
|
-
}
|
|
30886
|
-
}, [activeQuickStartID, allQuickStartStates, setAllQuickStartStates]);
|
|
30887
|
-
const [modalOpen, setModalOpen] = React.useState(false);
|
|
30888
|
-
const activeQuickStartStatus = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.status;
|
|
30889
|
-
const onClose = () => setActiveQuickStart('');
|
|
30890
|
-
const handleClose = () => {
|
|
30891
|
-
if (activeQuickStartStatus === QuickStartStatus.IN_PROGRESS) {
|
|
30892
|
-
if (onCloseInProgress) {
|
|
30893
|
-
onCloseInProgress();
|
|
30894
|
-
}
|
|
30895
|
-
else {
|
|
30896
|
-
setModalOpen(true);
|
|
30897
|
-
}
|
|
30898
|
-
}
|
|
30899
|
-
else if (onCloseNotInProgress) {
|
|
30900
|
-
onCloseNotInProgress();
|
|
30901
|
-
}
|
|
30902
|
-
else {
|
|
30903
|
-
onClose();
|
|
30904
|
-
}
|
|
30905
|
-
};
|
|
30906
|
-
const onModalConfirm = () => {
|
|
30907
|
-
setModalOpen(false);
|
|
30908
|
-
onClose();
|
|
30909
|
-
};
|
|
30910
|
-
const onModalCancel = () => setModalOpen(false);
|
|
30911
|
-
const fullWidthPanelStyle = fullWidth
|
|
30912
|
-
? {
|
|
30913
|
-
style: {
|
|
30914
|
-
flex: 1,
|
|
30915
|
-
},
|
|
30916
|
-
}
|
|
30917
|
-
: {};
|
|
30918
|
-
const fullWidthBodyStyle = fullWidth
|
|
30919
|
-
? {
|
|
30920
|
-
style: {
|
|
30921
|
-
display: activeQuickStartID ? 'none' : 'flex',
|
|
30922
|
-
},
|
|
30923
|
-
}
|
|
30924
|
-
: {};
|
|
30925
|
-
const panelContent = (React.createElement(QuickStartPanelContent, Object.assign({ quickStarts: combinedQuickStarts, handleClose: handleClose, activeQuickStartID: activeQuickStartID, appendTo: appendTo, isResizable: !fullWidth, headerVariant: useLegacyHeaderColors ? '' : 'blue-white' }, fullWidthPanelStyle)));
|
|
30926
|
-
return (React.createElement(React.Fragment, null,
|
|
30927
|
-
React.createElement(Drawer, Object.assign({ isExpanded: !!activeQuickStartID, isInline: true }, props), children ? (React.createElement(DrawerContent, Object.assign({ panelContent: panelContent }, fullWidthBodyStyle),
|
|
30928
|
-
React.createElement(DrawerContentBody, { className: "pfext-quick-start-drawer__body" }, children))) : (React.createElement("div", { className: "pf-v5-c-drawer__main" }, panelContent))),
|
|
30929
|
-
React.createElement(QuickStartCloseModal, { isOpen: modalOpen, onConfirm: onModalConfirm, onCancel: onModalCancel })));
|
|
30705
|
+
const QuickStartFooter = ({ status, taskNumber, totalTasks, onNext, onBack, footerClass, quickStartId, }) => {
|
|
30706
|
+
const { restartQuickStart, getResource } = React.useContext(QuickStartContext);
|
|
30707
|
+
const PrimaryButtonText = React.useMemo(() => ({
|
|
30708
|
+
START: getResource('Start'),
|
|
30709
|
+
CONTINUE: getResource('Continue'),
|
|
30710
|
+
NEXT: getResource('Next'),
|
|
30711
|
+
CLOSE: getResource('Close'),
|
|
30712
|
+
}), [getResource]);
|
|
30713
|
+
const SecondaryButtonText = React.useMemo(() => ({
|
|
30714
|
+
BACK: getResource('Back'),
|
|
30715
|
+
RESTART: getResource('Restart'),
|
|
30716
|
+
}), [getResource]);
|
|
30717
|
+
const onRestart = React.useCallback((e) => {
|
|
30718
|
+
e.preventDefault();
|
|
30719
|
+
e.stopPropagation();
|
|
30720
|
+
restartQuickStart(quickStartId, totalTasks);
|
|
30721
|
+
}, [quickStartId, restartQuickStart, totalTasks]);
|
|
30722
|
+
const getPrimaryButtonText = React.useMemo(() => {
|
|
30723
|
+
if (status === QuickStartStatus.NOT_STARTED) {
|
|
30724
|
+
return PrimaryButtonText.START;
|
|
30725
|
+
}
|
|
30726
|
+
if (taskNumber === totalTasks) {
|
|
30727
|
+
return PrimaryButtonText.CLOSE;
|
|
30728
|
+
}
|
|
30729
|
+
if (taskNumber > -1 && taskNumber < totalTasks) {
|
|
30730
|
+
return PrimaryButtonText.NEXT;
|
|
30731
|
+
}
|
|
30732
|
+
return PrimaryButtonText.CONTINUE;
|
|
30733
|
+
}, [taskNumber, totalTasks, PrimaryButtonText, status]);
|
|
30734
|
+
const getPrimaryButton = React.useMemo(() => (React.createElement(Button, { variant: "primary", className: "pfext-quick-start-footer__actionbtn", onClick: onNext, "data-testid": `qs-drawer-${camelize(getPrimaryButtonText)}`, "data-test": `${getPrimaryButtonText} button` }, getPrimaryButtonText)), [getPrimaryButtonText, onNext]);
|
|
30735
|
+
const getSecondaryButton = React.useMemo(() => taskNumber === -1 && status !== QuickStartStatus.NOT_STARTED ? (React.createElement(Button, { variant: "secondary", onClick: onRestart, "data-testid": "qs-drawer-restart" }, SecondaryButtonText.RESTART)) : (taskNumber > -1 && (React.createElement(Button, { variant: "secondary", onClick: onBack, "data-testid": "qs-drawer-back" }, SecondaryButtonText.BACK))), [onRestart, onBack, SecondaryButtonText, status, taskNumber]);
|
|
30736
|
+
const getSideNoteAction = React.useMemo(() => taskNumber !== -1 && (React.createElement(Button, { variant: "link", className: "pfext-quick-start-footer__restartbtn", onClick: onRestart, "data-testid": "qs-drawer-side-note-action" }, SecondaryButtonText.RESTART)), [taskNumber, onRestart, SecondaryButtonText.RESTART]);
|
|
30737
|
+
return (React.createElement("div", { className: `pfext-quick-start-footer ${footerClass}` },
|
|
30738
|
+
getPrimaryButton,
|
|
30739
|
+
getSecondaryButton,
|
|
30740
|
+
getSideNoteAction));
|
|
30741
|
+
};
|
|
30742
|
+
|
|
30743
|
+
const QuickStartController = ({ quickStart, nextQuickStarts, contentRef, footerClass, }) => {
|
|
30744
|
+
const { metadata: { name }, spec: { tasks = [] }, } = quickStart;
|
|
30745
|
+
const totalTasks = tasks === null || tasks === void 0 ? void 0 : tasks.length;
|
|
30746
|
+
const { activeQuickStartState, setActiveQuickStart, setQuickStartTaskNumber, setQuickStartTaskStatus, nextStep, previousStep, } = React.useContext(QuickStartContext);
|
|
30747
|
+
const status = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.status;
|
|
30748
|
+
const taskNumber = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.taskNumber;
|
|
30749
|
+
const allTaskStatuses = tasks.map((task, index) => activeQuickStartState[`taskStatus${index}`]);
|
|
30750
|
+
const handleQuickStartChange = React.useCallback((quickStartId) => setActiveQuickStart(quickStartId), [setActiveQuickStart]);
|
|
30751
|
+
const handleTaskStatusChange = React.useCallback((newTaskStatus) => setQuickStartTaskStatus(newTaskStatus), [setQuickStartTaskStatus]);
|
|
30752
|
+
const getQuickStartActiveTask = React.useCallback(() => {
|
|
30753
|
+
let activeTaskNumber = 0;
|
|
30754
|
+
while (activeTaskNumber !== totalTasks &&
|
|
30755
|
+
activeQuickStartState[`taskStatus${activeTaskNumber}`] !== QuickStartTaskStatus.INIT) {
|
|
30756
|
+
activeTaskNumber++;
|
|
30757
|
+
}
|
|
30758
|
+
return activeTaskNumber;
|
|
30759
|
+
}, [totalTasks, activeQuickStartState]);
|
|
30760
|
+
const handleQuickStartContinue = React.useCallback(() => {
|
|
30761
|
+
const activeTaskNumber = getQuickStartActiveTask();
|
|
30762
|
+
setQuickStartTaskNumber(name, activeTaskNumber);
|
|
30763
|
+
}, [getQuickStartActiveTask, setQuickStartTaskNumber, name]);
|
|
30764
|
+
const handleNext = React.useCallback(() => {
|
|
30765
|
+
if (status === QuickStartStatus.COMPLETE && taskNumber === totalTasks) {
|
|
30766
|
+
return handleQuickStartChange('');
|
|
30767
|
+
}
|
|
30768
|
+
if (status !== QuickStartStatus.NOT_STARTED && taskNumber === -1) {
|
|
30769
|
+
return handleQuickStartContinue();
|
|
30770
|
+
}
|
|
30771
|
+
return nextStep(totalTasks);
|
|
30772
|
+
}, [handleQuickStartChange, nextStep, status, taskNumber, totalTasks, handleQuickStartContinue]);
|
|
30773
|
+
const handleBack = React.useCallback(() => previousStep(), [previousStep]);
|
|
30774
|
+
const handleTaskSelect = React.useCallback((selectedTaskNumber) => {
|
|
30775
|
+
setQuickStartTaskNumber(name, selectedTaskNumber);
|
|
30776
|
+
}, [name, setQuickStartTaskNumber]);
|
|
30777
|
+
return (React.createElement(React.Fragment, null,
|
|
30778
|
+
React.createElement(QuickStartContent, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskSelect: handleTaskSelect, onTaskReview: handleTaskStatusChange, onQuickStartChange: handleQuickStartChange, ref: contentRef }),
|
|
30779
|
+
React.createElement(QuickStartFooter, { status: status, taskNumber: taskNumber, totalTasks: totalTasks, onNext: handleNext, onBack: handleBack, footerClass: footerClass, quickStartId: quickStart.metadata.name })));
|
|
30780
|
+
};
|
|
30781
|
+
|
|
30782
|
+
const getElement = (appendTo) => {
|
|
30783
|
+
if (typeof appendTo === 'function') {
|
|
30784
|
+
return appendTo();
|
|
30785
|
+
}
|
|
30786
|
+
return appendTo;
|
|
30787
|
+
};
|
|
30788
|
+
const useScrollTopOnTaskNumberChange = (node, taskNumber) => {
|
|
30789
|
+
React.useEffect(() => {
|
|
30790
|
+
if (node) {
|
|
30791
|
+
node.scrollTo({ top: 0, behavior: 'smooth' });
|
|
30792
|
+
}
|
|
30793
|
+
}, [taskNumber, node]);
|
|
30794
|
+
};
|
|
30795
|
+
const QuickStartPanelContent = (_a) => {
|
|
30796
|
+
var { quickStarts = [], handleClose, activeQuickStartID, appendTo, isResizable = true, showClose = true, headerVariant = '' } = _a, props = __rest(_a, ["quickStarts", "handleClose", "activeQuickStartID", "appendTo", "isResizable", "showClose", "headerVariant"]);
|
|
30797
|
+
const titleRef = React.useRef(null);
|
|
30798
|
+
const { getResource, activeQuickStartState } = React.useContext(QuickStartContext);
|
|
30799
|
+
const [contentRef, setContentRef] = React.useState();
|
|
30800
|
+
const shadows = useScrollShadows(contentRef);
|
|
30801
|
+
const quickStart = quickStarts.find((qs) => qs.metadata.name === activeQuickStartID);
|
|
30802
|
+
const taskNumber = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.taskNumber;
|
|
30803
|
+
useScrollTopOnTaskNumberChange(contentRef, taskNumber);
|
|
30804
|
+
const nextQuickStarts = quickStarts.filter((qs) => { var _a; return (_a = quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.nextQuickStart) === null || _a === void 0 ? void 0 : _a.includes(qs.metadata.name); });
|
|
30805
|
+
const headerClasses = css('pfext-quick-start-panel-content__header', {
|
|
30806
|
+
'pfext-quick-start-panel-content__header__shadow': shadows === Shadows.top || shadows === Shadows.both,
|
|
30807
|
+
'pfext-quick-start-panel-content__header--blue-white': headerVariant === 'blue-white',
|
|
30808
|
+
});
|
|
30809
|
+
const footerClass = css({
|
|
30810
|
+
'pfext-quick-start-panel-content__footer__shadow': shadows === Shadows.bottom || shadows === Shadows.both,
|
|
30811
|
+
});
|
|
30812
|
+
const getStep = () => {
|
|
30813
|
+
const tasks = quickStart.spec.tasks.length;
|
|
30814
|
+
if (Number.parseInt(taskNumber) === -1) {
|
|
30815
|
+
return 'intro';
|
|
30816
|
+
}
|
|
30817
|
+
if (Number.parseInt(taskNumber) === tasks) {
|
|
30818
|
+
return 'conclusion';
|
|
30819
|
+
}
|
|
30820
|
+
return Number.parseInt(taskNumber) + 1;
|
|
30821
|
+
};
|
|
30822
|
+
React.useEffect(() => {
|
|
30823
|
+
if (quickStart) {
|
|
30824
|
+
titleRef.current.focus();
|
|
30825
|
+
}
|
|
30826
|
+
}, [quickStart]);
|
|
30827
|
+
const content = quickStart ? (React.createElement(DrawerPanelContent, Object.assign({ isResizable: isResizable, className: "pfext-quick-start__base", "data-testid": `qs-drawer-${camelize(quickStart.spec.displayName)}`, "data-qs": `qs-step-${getStep()}`, "data-test": "quickstart drawer" }, props),
|
|
30828
|
+
React.createElement("div", { className: headerClasses },
|
|
30829
|
+
React.createElement(DrawerHead, null,
|
|
30830
|
+
React.createElement("div", { className: "pfext-quick-start-panel-content__title", tabIndex: -1, ref: titleRef },
|
|
30831
|
+
React.createElement(Title, { headingLevel: "h2", size: "xl", className: "pfext-quick-start-panel-content__name", style: { marginRight: 'var(--pf-v5-global--spacer--md)' } },
|
|
30832
|
+
React.createElement("span", { dangerouslySetInnerHTML: {
|
|
30833
|
+
__html: removeParagraphWrap(markdownConvert(quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.displayName)),
|
|
30834
|
+
} }),
|
|
30835
|
+
' ',
|
|
30836
|
+
React.createElement("small", { className: "pfext-quick-start-panel-content__duration" }, (quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
30837
|
+
? getResource('{{type}} • {{duration, number}} minutes', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
30838
|
+
.replace('{{duration, number}}', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
30839
|
+
.replace('{{type}}', getResource('Type'))
|
|
30840
|
+
: getResource('Type')))),
|
|
30841
|
+
showClose && (React.createElement(DrawerActions, null,
|
|
30842
|
+
React.createElement(DrawerCloseButton, { onClick: handleClose, className: "pfext-quick-start-panel-content__close-button", "data-testid": "qs-drawer-close" }))))),
|
|
30843
|
+
React.createElement(DrawerPanelBody, { hasNoPadding: true, className: "pfext-quick-start-panel-content__body", "data-test": "content" },
|
|
30844
|
+
React.createElement(QuickStartController, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, footerClass: footerClass, contentRef: setContentRef })))) : null;
|
|
30845
|
+
if (appendTo) {
|
|
30846
|
+
return ReactDOM.createPortal(content, getElement(appendTo));
|
|
30847
|
+
}
|
|
30848
|
+
return content;
|
|
30849
|
+
};
|
|
30850
|
+
|
|
30851
|
+
const QuickStartContainer = (_a) => {
|
|
30852
|
+
var { quickStarts, children, activeQuickStartID, allQuickStartStates, setActiveQuickStartID, setAllQuickStartStates, appendTo, fullWidth, onCloseInProgress, onCloseNotInProgress, resourceBundle, showCardFooters, useLegacyHeaderColors, language, loading = false, useQueryParams = true, markdown, contextProps, alwaysShowTaskReview = true } = _a, props = __rest(_a, ["quickStarts", "children", "activeQuickStartID", "allQuickStartStates", "setActiveQuickStartID", "setAllQuickStartStates", "appendTo", "fullWidth", "onCloseInProgress", "onCloseNotInProgress", "resourceBundle", "showCardFooters", "useLegacyHeaderColors", "language", "loading", "useQueryParams", "markdown", "contextProps", "alwaysShowTaskReview"]);
|
|
30853
|
+
const valuesForQuickstartContext = useValuesForQuickStartContext(Object.assign({ allQuickStarts: quickStarts, activeQuickStartID,
|
|
30854
|
+
setActiveQuickStartID,
|
|
30855
|
+
allQuickStartStates,
|
|
30856
|
+
setAllQuickStartStates, footer: {
|
|
30857
|
+
show: showCardFooters,
|
|
30858
|
+
}, useLegacyHeaderColors,
|
|
30859
|
+
language, resourceBundle: Object.assign({}, resourceBundle), loading,
|
|
30860
|
+
useQueryParams,
|
|
30861
|
+
markdown,
|
|
30862
|
+
alwaysShowTaskReview }, contextProps));
|
|
30863
|
+
React.useEffect(() => {
|
|
30864
|
+
if (quickStarts &&
|
|
30865
|
+
JSON.stringify(quickStarts) !== JSON.stringify(valuesForQuickstartContext.allQuickStarts)) {
|
|
30866
|
+
valuesForQuickstartContext.setAllQuickStarts(quickStarts);
|
|
30867
|
+
}
|
|
30868
|
+
}, [quickStarts, valuesForQuickstartContext]);
|
|
30869
|
+
React.useEffect(() => {
|
|
30870
|
+
if (loading !== valuesForQuickstartContext.loading) {
|
|
30871
|
+
valuesForQuickstartContext.setLoading(loading);
|
|
30872
|
+
}
|
|
30873
|
+
}, [loading, valuesForQuickstartContext]);
|
|
30874
|
+
const drawerProps = Object.assign({ appendTo,
|
|
30875
|
+
fullWidth,
|
|
30876
|
+
onCloseInProgress,
|
|
30877
|
+
onCloseNotInProgress }, props);
|
|
30878
|
+
return (React.createElement(QuickStartContext.Provider, { value: valuesForQuickstartContext },
|
|
30879
|
+
React.createElement(QuickStartDrawer, Object.assign({}, drawerProps), children)));
|
|
30880
|
+
};
|
|
30881
|
+
const QuickStartDrawer = (_a) => {
|
|
30882
|
+
var { quickStarts = [], children, appendTo, fullWidth, onCloseInProgress, onCloseNotInProgress } = _a, props = __rest(_a, ["quickStarts", "children", "appendTo", "fullWidth", "onCloseInProgress", "onCloseNotInProgress"]);
|
|
30883
|
+
const { activeQuickStartID, setActiveQuickStart, allQuickStarts = [], activeQuickStartState, allQuickStartStates, setAllQuickStartStates, useLegacyHeaderColors, } = React.useContext(QuickStartContext);
|
|
30884
|
+
const combinedQuickStarts = allQuickStarts.concat(quickStarts);
|
|
30885
|
+
React.useEffect(() => {
|
|
30886
|
+
const params = new URLSearchParams(window.location.search);
|
|
30887
|
+
// if there is a quick start param, but the quick start is not active, set it
|
|
30888
|
+
// this can happen if a new browser session is opened or an incognito window for example
|
|
30889
|
+
const quickStartIdFromParam = params.get(QUICKSTART_ID_FILTER_KEY) || '';
|
|
30890
|
+
if (quickStartIdFromParam && activeQuickStartID !== quickStartIdFromParam) {
|
|
30891
|
+
const activeQuickStart = getQuickStartByName(quickStartIdFromParam, combinedQuickStarts);
|
|
30892
|
+
// don't try to load a quick start that is actually just an external resource (spec.link)
|
|
30893
|
+
if (combinedQuickStarts.length > 0 && activeQuickStart && !activeQuickStart.spec.link) {
|
|
30894
|
+
setActiveQuickStart(quickStartIdFromParam);
|
|
30895
|
+
}
|
|
30896
|
+
}
|
|
30897
|
+
}, [activeQuickStartID, combinedQuickStarts, setActiveQuickStart]);
|
|
30898
|
+
React.useEffect(() => {
|
|
30899
|
+
// If activeQuickStartID was changed through prop from QuickStartContainer, need to init the state if it does not exist yet
|
|
30900
|
+
if (activeQuickStartID && !allQuickStartStates[activeQuickStartID]) {
|
|
30901
|
+
setAllQuickStartStates(Object.assign(Object.assign({}, allQuickStartStates), { [activeQuickStartID]: getDefaultQuickStartState() }));
|
|
30902
|
+
}
|
|
30903
|
+
}, [activeQuickStartID, allQuickStartStates, setAllQuickStartStates]);
|
|
30904
|
+
const [modalOpen, setModalOpen] = React.useState(false);
|
|
30905
|
+
const activeQuickStartStatus = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.status;
|
|
30906
|
+
const onClose = () => setActiveQuickStart('');
|
|
30907
|
+
const handleClose = () => {
|
|
30908
|
+
if (activeQuickStartStatus === QuickStartStatus.IN_PROGRESS) {
|
|
30909
|
+
if (onCloseInProgress) {
|
|
30910
|
+
onCloseInProgress();
|
|
30911
|
+
}
|
|
30912
|
+
else {
|
|
30913
|
+
setModalOpen(true);
|
|
30914
|
+
}
|
|
30915
|
+
}
|
|
30916
|
+
else if (onCloseNotInProgress) {
|
|
30917
|
+
onCloseNotInProgress();
|
|
30918
|
+
}
|
|
30919
|
+
else {
|
|
30920
|
+
onClose();
|
|
30921
|
+
}
|
|
30922
|
+
};
|
|
30923
|
+
const onModalConfirm = () => {
|
|
30924
|
+
setModalOpen(false);
|
|
30925
|
+
onClose();
|
|
30926
|
+
};
|
|
30927
|
+
const onModalCancel = () => setModalOpen(false);
|
|
30928
|
+
const fullWidthPanelStyle = fullWidth
|
|
30929
|
+
? {
|
|
30930
|
+
style: {
|
|
30931
|
+
flex: 1,
|
|
30932
|
+
},
|
|
30933
|
+
}
|
|
30934
|
+
: {};
|
|
30935
|
+
const fullWidthBodyStyle = fullWidth
|
|
30936
|
+
? {
|
|
30937
|
+
style: {
|
|
30938
|
+
display: activeQuickStartID ? 'none' : 'flex',
|
|
30939
|
+
},
|
|
30940
|
+
}
|
|
30941
|
+
: {};
|
|
30942
|
+
const panelContent = (React.createElement(QuickStartPanelContent, Object.assign({ quickStarts: combinedQuickStarts, handleClose: handleClose, activeQuickStartID: activeQuickStartID, appendTo: appendTo, isResizable: !fullWidth, headerVariant: useLegacyHeaderColors ? '' : 'blue-white' }, fullWidthPanelStyle)));
|
|
30943
|
+
return (React.createElement(React.Fragment, null,
|
|
30944
|
+
React.createElement(Drawer, Object.assign({ isExpanded: !!activeQuickStartID, isInline: true }, props), children ? (React.createElement(DrawerContent, Object.assign({ panelContent: panelContent }, fullWidthBodyStyle),
|
|
30945
|
+
React.createElement(DrawerContentBody, { className: "pfext-quick-start-drawer__body" }, children))) : (React.createElement("div", { className: "pf-v5-c-drawer__main" }, panelContent))),
|
|
30946
|
+
React.createElement(QuickStartCloseModal, { isOpen: modalOpen, onConfirm: onModalConfirm, onCancel: onModalCancel })));
|
|
30930
30947
|
};
|
|
30931
30948
|
|
|
30932
30949
|
var barsIcon = createCommonjsModule(function (module, exports) {
|
|
@@ -30945,242 +30962,242 @@ exports["default"] = exports.BarsIcon;
|
|
|
30945
30962
|
|
|
30946
30963
|
var BarsIcon = /*@__PURE__*/getDefaultExportFromCjs(barsIcon);
|
|
30947
30964
|
|
|
30948
|
-
const HelpTopicContextDefaults = {
|
|
30949
|
-
helpTopics: [],
|
|
30950
|
-
setHelpTopics: () => { },
|
|
30951
|
-
activeHelpTopic: null,
|
|
30952
|
-
setActiveHelpTopicByName: () => { },
|
|
30953
|
-
filteredHelpTopics: [],
|
|
30954
|
-
setFilteredHelpTopics: () => { },
|
|
30955
|
-
loading: false,
|
|
30956
|
-
};
|
|
30957
|
-
const HelpTopicContext = React__default.createContext(HelpTopicContextDefaults);
|
|
30958
|
-
const useValuesForHelpTopicContext = (value = {}) => {
|
|
30959
|
-
const combinedValue = Object.assign(Object.assign({}, HelpTopicContextDefaults), value);
|
|
30960
|
-
const [loading, setLoading] = React__default.useState(combinedValue.loading);
|
|
30961
|
-
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
|
30962
|
-
const [helpTopics, setHelpTopics] = React__default.useState(combinedValue.helpTopics || []);
|
|
30963
|
-
const [activeHelpTopic, setActiveHelpTopic] = React__default.useState(combinedValue.activeHelpTopic || null);
|
|
30964
|
-
const setActiveHelpTopicByName = React__default.useCallback((helpTopicName) => {
|
|
30965
|
-
const topic = helpTopics.find((t) => t.name === helpTopicName);
|
|
30966
|
-
if (!helpTopicName) {
|
|
30967
|
-
setActiveHelpTopic(null);
|
|
30968
|
-
return;
|
|
30969
|
-
}
|
|
30970
|
-
setActiveHelpTopic(topic);
|
|
30971
|
-
}, [helpTopics]);
|
|
30972
|
-
const [filteredHelpTopics, setFilteredHelpTopics] = React__default.useState(combinedValue.filteredHelpTopics || []);
|
|
30973
|
-
return {
|
|
30974
|
-
helpTopics,
|
|
30975
|
-
setHelpTopics,
|
|
30976
|
-
activeHelpTopic,
|
|
30977
|
-
setActiveHelpTopicByName,
|
|
30978
|
-
filteredHelpTopics,
|
|
30979
|
-
setFilteredHelpTopics,
|
|
30980
|
-
loading,
|
|
30981
|
-
setLoading,
|
|
30982
|
-
};
|
|
30965
|
+
const HelpTopicContextDefaults = {
|
|
30966
|
+
helpTopics: [],
|
|
30967
|
+
setHelpTopics: () => { },
|
|
30968
|
+
activeHelpTopic: null,
|
|
30969
|
+
setActiveHelpTopicByName: () => { },
|
|
30970
|
+
filteredHelpTopics: [],
|
|
30971
|
+
setFilteredHelpTopics: () => { },
|
|
30972
|
+
loading: false,
|
|
30973
|
+
};
|
|
30974
|
+
const HelpTopicContext = React__default.createContext(HelpTopicContextDefaults);
|
|
30975
|
+
const useValuesForHelpTopicContext = (value = {}) => {
|
|
30976
|
+
const combinedValue = Object.assign(Object.assign({}, HelpTopicContextDefaults), value);
|
|
30977
|
+
const [loading, setLoading] = React__default.useState(combinedValue.loading);
|
|
30978
|
+
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
|
30979
|
+
const [helpTopics, setHelpTopics] = React__default.useState(combinedValue.helpTopics || []);
|
|
30980
|
+
const [activeHelpTopic, setActiveHelpTopic] = React__default.useState(combinedValue.activeHelpTopic || null);
|
|
30981
|
+
const setActiveHelpTopicByName = React__default.useCallback((helpTopicName) => {
|
|
30982
|
+
const topic = helpTopics.find((t) => t.name === helpTopicName);
|
|
30983
|
+
if (!helpTopicName) {
|
|
30984
|
+
setActiveHelpTopic(null);
|
|
30985
|
+
return;
|
|
30986
|
+
}
|
|
30987
|
+
setActiveHelpTopic(topic);
|
|
30988
|
+
}, [helpTopics]);
|
|
30989
|
+
const [filteredHelpTopics, setFilteredHelpTopics] = React__default.useState(combinedValue.filteredHelpTopics || []);
|
|
30990
|
+
return {
|
|
30991
|
+
helpTopics,
|
|
30992
|
+
setHelpTopics,
|
|
30993
|
+
activeHelpTopic,
|
|
30994
|
+
setActiveHelpTopicByName,
|
|
30995
|
+
filteredHelpTopics,
|
|
30996
|
+
setFilteredHelpTopics,
|
|
30997
|
+
loading,
|
|
30998
|
+
setLoading,
|
|
30999
|
+
};
|
|
30983
31000
|
};
|
|
30984
31001
|
|
|
30985
|
-
const HelpTopicPanelContent = (_a) => {
|
|
30986
|
-
var _b, _c;
|
|
30987
|
-
var { activeHelpTopic = null, filteredHelpTopics = [], isResizable = true, onClose } = _a, props = __rest(_a, ["activeHelpTopic", "filteredHelpTopics", "isResizable", "onClose"]);
|
|
30988
|
-
const { setActiveHelpTopicByName } = React.useContext(HelpTopicContext);
|
|
30989
|
-
const [isHelpTopicMenuOpen, setIsHelpTopicMenuOpen] = React.useState(false);
|
|
30990
|
-
const toggleHelpTopicMenu = () => {
|
|
30991
|
-
setIsHelpTopicMenuOpen(!isHelpTopicMenuOpen);
|
|
30992
|
-
};
|
|
30993
|
-
const onSelectHelpTopic = (_event, value) => {
|
|
30994
|
-
const topicName = value;
|
|
30995
|
-
setActiveHelpTopicByName(topicName.toString());
|
|
30996
|
-
toggleHelpTopicMenu();
|
|
30997
|
-
};
|
|
30998
|
-
const helpTopicOptions = filteredHelpTopics.length > 1 &&
|
|
30999
|
-
filteredHelpTopics.map((topic) => (React.createElement(SelectOption, { key: topic.name, value: topic.name }, topic.title)));
|
|
31000
|
-
const paddingContainer = (children) => React.createElement("div", { style: { padding: '24px' } }, children);
|
|
31001
|
-
const panelBodyItems = (React.createElement(React.Fragment, null,
|
|
31002
|
-
paddingContainer(React.createElement(QuickStartMarkdownView, { content: activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.content })),
|
|
31003
|
-
!!((_b = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _b === void 0 ? void 0 : _b.length) && React.createElement(Divider, null),
|
|
31004
|
-
paddingContainer(React.createElement(Stack, { hasGutter: true }, (_c = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _c === void 0 ? void 0 : _c.map(({ href, text, newTab, isExternal }, index) => (React.createElement(StackItem, { key: index },
|
|
31005
|
-
React.createElement(Button, { component: "a", href: href, target: newTab ? '_blank' : '', rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: isExternal ? React.createElement(ExternalLinkAltIcon, null) : null, iconPosition: "right", style: { fontSize: 'inherit' } }, text || href))))))));
|
|
31006
|
-
const content = (React.createElement(DrawerPanelContent, Object.assign({ isResizable: isResizable, className: "pfext-quick-start__base" }, props),
|
|
31007
|
-
React.createElement("div", null,
|
|
31008
|
-
React.createElement(DrawerHead, null,
|
|
31009
|
-
React.createElement("div", { className: "pfext-quick-start-panel-content__title" },
|
|
31010
|
-
helpTopicOptions && (React.createElement(Select, { isPlain: true, id: "help-topics-select", selected: activeHelpTopic, isOpen: isHelpTopicMenuOpen, onSelect: onSelectHelpTopic, onOpenChange: (isOpen) => setIsHelpTopicMenuOpen(isOpen), toggle: (toggleRef) => (React.createElement(MenuToggle, { isFullWidth: true, ref: toggleRef, icon: React.createElement(BarsIcon, null), onClick: toggleHelpTopicMenu, isExpanded: isHelpTopicMenuOpen }, activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title)) },
|
|
31011
|
-
React.createElement(SelectList, null, helpTopicOptions))),
|
|
31012
|
-
React.createElement(Title, { headingLevel: "h1", size: "xl", className: "pfext-quick-start-panel-content__name", style: { marginRight: 'var(--pf-v5-global--spacer--md)' } }, activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title)),
|
|
31013
|
-
React.createElement(DrawerActions, null,
|
|
31014
|
-
React.createElement(DrawerCloseButton, { onClick: onClose, className: "pfext-quick-start-panel-content__close-button", "data-testid": "qs-drawer-close" }))),
|
|
31015
|
-
React.createElement(Divider, null),
|
|
31016
|
-
React.createElement(DrawerPanelBody, { hasNoPadding: true, className: "pfext-quick-start-panel-content__body", "data-test": "content" }, panelBodyItems))));
|
|
31017
|
-
return content;
|
|
31018
|
-
};
|
|
31019
|
-
|
|
31020
|
-
const HelpTopicContainer = (_a) => {
|
|
31021
|
-
var { helpTopics, children, resourceBundle, language, loading = false, markdown, contextProps } = _a, props = __rest(_a, ["helpTopics", "children", "resourceBundle", "language", "loading", "markdown", "contextProps"]);
|
|
31022
|
-
const valuesForHelpTopicContext = useValuesForHelpTopicContext(Object.assign({ helpTopics,
|
|
31023
|
-
language, resourceBundle: Object.assign({}, resourceBundle), loading,
|
|
31024
|
-
markdown }, contextProps));
|
|
31025
|
-
React.useEffect(() => {
|
|
31026
|
-
if (loading !== valuesForHelpTopicContext.loading) {
|
|
31027
|
-
valuesForHelpTopicContext.setLoading(loading);
|
|
31028
|
-
}
|
|
31029
|
-
}, [loading, valuesForHelpTopicContext]);
|
|
31030
|
-
React.useEffect(() => {
|
|
31031
|
-
if (helpTopics &&
|
|
31032
|
-
JSON.stringify(helpTopics) !== JSON.stringify(valuesForHelpTopicContext.helpTopics)) {
|
|
31033
|
-
valuesForHelpTopicContext.setHelpTopics(helpTopics);
|
|
31034
|
-
}
|
|
31035
|
-
}, [helpTopics, valuesForHelpTopicContext]);
|
|
31036
|
-
return (React.createElement(HelpTopicContext.Provider, { value: valuesForHelpTopicContext },
|
|
31037
|
-
React.createElement(HelpTopicDrawer, Object.assign({}, props), children)));
|
|
31038
|
-
};
|
|
31039
|
-
const HelpTopicDrawer = (_a) => {
|
|
31040
|
-
var { children } = _a, props = __rest(_a, ["children"]);
|
|
31041
|
-
const { activeHelpTopic, filteredHelpTopics, setActiveHelpTopicByName } = React.useContext(HelpTopicContext);
|
|
31042
|
-
const onClose = () => {
|
|
31043
|
-
setActiveHelpTopicByName('');
|
|
31044
|
-
};
|
|
31045
|
-
const panelContent = (React.createElement(HelpTopicPanelContent, { activeHelpTopic: activeHelpTopic, filteredHelpTopics: filteredHelpTopics, onClose: onClose }));
|
|
31046
|
-
return (React.createElement(React.Fragment, null,
|
|
31047
|
-
React.createElement(Drawer, Object.assign({ isExpanded: !!activeHelpTopic, isInline: true }, props), children ? (React.createElement(DrawerContent, { panelContent: panelContent },
|
|
31048
|
-
React.createElement(DrawerContentBody, { className: "pfext-quick-start-drawer__body" }, children))) : (React.createElement("div", { className: "pf-v5-c-drawer__main" }, panelContent)))));
|
|
31002
|
+
const HelpTopicPanelContent = (_a) => {
|
|
31003
|
+
var _b, _c;
|
|
31004
|
+
var { activeHelpTopic = null, filteredHelpTopics = [], isResizable = true, onClose } = _a, props = __rest(_a, ["activeHelpTopic", "filteredHelpTopics", "isResizable", "onClose"]);
|
|
31005
|
+
const { setActiveHelpTopicByName } = React.useContext(HelpTopicContext);
|
|
31006
|
+
const [isHelpTopicMenuOpen, setIsHelpTopicMenuOpen] = React.useState(false);
|
|
31007
|
+
const toggleHelpTopicMenu = () => {
|
|
31008
|
+
setIsHelpTopicMenuOpen(!isHelpTopicMenuOpen);
|
|
31009
|
+
};
|
|
31010
|
+
const onSelectHelpTopic = (_event, value) => {
|
|
31011
|
+
const topicName = value;
|
|
31012
|
+
setActiveHelpTopicByName(topicName.toString());
|
|
31013
|
+
toggleHelpTopicMenu();
|
|
31014
|
+
};
|
|
31015
|
+
const helpTopicOptions = filteredHelpTopics.length > 1 &&
|
|
31016
|
+
filteredHelpTopics.map((topic) => (React.createElement(SelectOption, { key: topic.name, value: topic.name }, topic.title)));
|
|
31017
|
+
const paddingContainer = (children) => React.createElement("div", { style: { padding: '24px' } }, children);
|
|
31018
|
+
const panelBodyItems = (React.createElement(React.Fragment, null,
|
|
31019
|
+
paddingContainer(React.createElement(QuickStartMarkdownView, { content: activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.content })),
|
|
31020
|
+
!!((_b = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _b === void 0 ? void 0 : _b.length) && React.createElement(Divider, null),
|
|
31021
|
+
paddingContainer(React.createElement(Stack, { hasGutter: true }, (_c = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _c === void 0 ? void 0 : _c.map(({ href, text, newTab, isExternal }, index) => (React.createElement(StackItem, { key: index },
|
|
31022
|
+
React.createElement(Button, { component: "a", href: href, target: newTab ? '_blank' : '', rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: isExternal ? React.createElement(ExternalLinkAltIcon, null) : null, iconPosition: "right", style: { fontSize: 'inherit' } }, text || href))))))));
|
|
31023
|
+
const content = (React.createElement(DrawerPanelContent, Object.assign({ isResizable: isResizable, className: "pfext-quick-start__base" }, props),
|
|
31024
|
+
React.createElement("div", null,
|
|
31025
|
+
React.createElement(DrawerHead, null,
|
|
31026
|
+
React.createElement("div", { className: "pfext-quick-start-panel-content__title" },
|
|
31027
|
+
helpTopicOptions && (React.createElement(Select, { isPlain: true, id: "help-topics-select", selected: activeHelpTopic, isOpen: isHelpTopicMenuOpen, onSelect: onSelectHelpTopic, onOpenChange: (isOpen) => setIsHelpTopicMenuOpen(isOpen), toggle: (toggleRef) => (React.createElement(MenuToggle, { isFullWidth: true, ref: toggleRef, icon: React.createElement(BarsIcon, null), onClick: toggleHelpTopicMenu, isExpanded: isHelpTopicMenuOpen }, activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title)) },
|
|
31028
|
+
React.createElement(SelectList, null, helpTopicOptions))),
|
|
31029
|
+
React.createElement(Title, { headingLevel: "h1", size: "xl", className: "pfext-quick-start-panel-content__name", style: { marginRight: 'var(--pf-v5-global--spacer--md)' } }, activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title)),
|
|
31030
|
+
React.createElement(DrawerActions, null,
|
|
31031
|
+
React.createElement(DrawerCloseButton, { onClick: onClose, className: "pfext-quick-start-panel-content__close-button", "data-testid": "qs-drawer-close" }))),
|
|
31032
|
+
React.createElement(Divider, null),
|
|
31033
|
+
React.createElement(DrawerPanelBody, { hasNoPadding: true, className: "pfext-quick-start-panel-content__body", "data-test": "content" }, panelBodyItems))));
|
|
31034
|
+
return content;
|
|
31035
|
+
};
|
|
31036
|
+
|
|
31037
|
+
const HelpTopicContainer = (_a) => {
|
|
31038
|
+
var { helpTopics, children, resourceBundle, language, loading = false, markdown, contextProps } = _a, props = __rest(_a, ["helpTopics", "children", "resourceBundle", "language", "loading", "markdown", "contextProps"]);
|
|
31039
|
+
const valuesForHelpTopicContext = useValuesForHelpTopicContext(Object.assign({ helpTopics,
|
|
31040
|
+
language, resourceBundle: Object.assign({}, resourceBundle), loading,
|
|
31041
|
+
markdown }, contextProps));
|
|
31042
|
+
React.useEffect(() => {
|
|
31043
|
+
if (loading !== valuesForHelpTopicContext.loading) {
|
|
31044
|
+
valuesForHelpTopicContext.setLoading(loading);
|
|
31045
|
+
}
|
|
31046
|
+
}, [loading, valuesForHelpTopicContext]);
|
|
31047
|
+
React.useEffect(() => {
|
|
31048
|
+
if (helpTopics &&
|
|
31049
|
+
JSON.stringify(helpTopics) !== JSON.stringify(valuesForHelpTopicContext.helpTopics)) {
|
|
31050
|
+
valuesForHelpTopicContext.setHelpTopics(helpTopics);
|
|
31051
|
+
}
|
|
31052
|
+
}, [helpTopics, valuesForHelpTopicContext]);
|
|
31053
|
+
return (React.createElement(HelpTopicContext.Provider, { value: valuesForHelpTopicContext },
|
|
31054
|
+
React.createElement(HelpTopicDrawer, Object.assign({}, props), children)));
|
|
31055
|
+
};
|
|
31056
|
+
const HelpTopicDrawer = (_a) => {
|
|
31057
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
|
31058
|
+
const { activeHelpTopic, filteredHelpTopics, setActiveHelpTopicByName } = React.useContext(HelpTopicContext);
|
|
31059
|
+
const onClose = () => {
|
|
31060
|
+
setActiveHelpTopicByName('');
|
|
31061
|
+
};
|
|
31062
|
+
const panelContent = (React.createElement(HelpTopicPanelContent, { activeHelpTopic: activeHelpTopic, filteredHelpTopics: filteredHelpTopics, onClose: onClose }));
|
|
31063
|
+
return (React.createElement(React.Fragment, null,
|
|
31064
|
+
React.createElement(Drawer, Object.assign({ isExpanded: !!activeHelpTopic, isInline: true }, props), children ? (React.createElement(DrawerContent, { panelContent: panelContent },
|
|
31065
|
+
React.createElement(DrawerContentBody, { className: "pfext-quick-start-drawer__body" }, children))) : (React.createElement("div", { className: "pf-v5-c-drawer__main" }, panelContent)))));
|
|
31049
31066
|
};
|
|
31050
31067
|
|
|
31051
|
-
const useLocalStorage = (key, initialValue) => {
|
|
31052
|
-
// State to store our value
|
|
31053
|
-
// Pass initial state function to useState so logic is only executed once
|
|
31054
|
-
const [storedValue, setStoredValue] = useState(() => {
|
|
31055
|
-
try {
|
|
31056
|
-
// Get from local storage by key
|
|
31057
|
-
const item = window.localStorage.getItem(key);
|
|
31058
|
-
// Parse stored json or if none return initialValue
|
|
31059
|
-
return item ? JSON.parse(item) : initialValue;
|
|
31060
|
-
}
|
|
31061
|
-
catch (error) {
|
|
31062
|
-
// If error also return initialValue
|
|
31063
|
-
// eslint-disable-next-line no-console
|
|
31064
|
-
console.log(error);
|
|
31065
|
-
return initialValue;
|
|
31066
|
-
}
|
|
31067
|
-
});
|
|
31068
|
-
// Return a wrapped version of useState's setter function that ...
|
|
31069
|
-
// ... persists the new value to localStorage.
|
|
31070
|
-
const setValue = (value) => {
|
|
31071
|
-
try {
|
|
31072
|
-
// Allow value to be a function so we have same API as useState
|
|
31073
|
-
const valueToStore = value instanceof Function ? value(storedValue) : value;
|
|
31074
|
-
// Save state
|
|
31075
|
-
setStoredValue(valueToStore);
|
|
31076
|
-
// Save to local storage
|
|
31077
|
-
window.localStorage.setItem(key, JSON.stringify(valueToStore));
|
|
31078
|
-
}
|
|
31079
|
-
catch (error) {
|
|
31080
|
-
// A more advanced implementation would handle the error case
|
|
31081
|
-
// eslint-disable-next-line no-console
|
|
31082
|
-
console.log(error);
|
|
31083
|
-
}
|
|
31084
|
-
};
|
|
31085
|
-
return [storedValue, setValue];
|
|
31068
|
+
const useLocalStorage = (key, initialValue) => {
|
|
31069
|
+
// State to store our value
|
|
31070
|
+
// Pass initial state function to useState so logic is only executed once
|
|
31071
|
+
const [storedValue, setStoredValue] = useState(() => {
|
|
31072
|
+
try {
|
|
31073
|
+
// Get from local storage by key
|
|
31074
|
+
const item = window.localStorage.getItem(key);
|
|
31075
|
+
// Parse stored json or if none return initialValue
|
|
31076
|
+
return item ? JSON.parse(item) : initialValue;
|
|
31077
|
+
}
|
|
31078
|
+
catch (error) {
|
|
31079
|
+
// If error also return initialValue
|
|
31080
|
+
// eslint-disable-next-line no-console
|
|
31081
|
+
console.log(error);
|
|
31082
|
+
return initialValue;
|
|
31083
|
+
}
|
|
31084
|
+
});
|
|
31085
|
+
// Return a wrapped version of useState's setter function that ...
|
|
31086
|
+
// ... persists the new value to localStorage.
|
|
31087
|
+
const setValue = (value) => {
|
|
31088
|
+
try {
|
|
31089
|
+
// Allow value to be a function so we have same API as useState
|
|
31090
|
+
const valueToStore = value instanceof Function ? value(storedValue) : value;
|
|
31091
|
+
// Save state
|
|
31092
|
+
setStoredValue(valueToStore);
|
|
31093
|
+
// Save to local storage
|
|
31094
|
+
window.localStorage.setItem(key, JSON.stringify(valueToStore));
|
|
31095
|
+
}
|
|
31096
|
+
catch (error) {
|
|
31097
|
+
// A more advanced implementation would handle the error case
|
|
31098
|
+
// eslint-disable-next-line no-console
|
|
31099
|
+
console.log(error);
|
|
31100
|
+
}
|
|
31101
|
+
};
|
|
31102
|
+
return [storedValue, setValue];
|
|
31086
31103
|
};
|
|
31087
31104
|
|
|
31088
|
-
/* eslint-disable */
|
|
31089
|
-
// Brought in from dev to publish this with QS module
|
|
31090
|
-
// Dev now imports from here
|
|
31091
|
-
const ProcQuickStartParser = (quickStart, environmentVariables) => {
|
|
31092
|
-
var _a;
|
|
31093
|
-
const replaceEnvironmentVariables = (s) => s === null || s === void 0 ? void 0 : s.replace(/\${(\w+)}/, (substring, name) => {
|
|
31094
|
-
return environmentVariables ? ([name] ? environmentVariables[name] : substring) : substring;
|
|
31095
|
-
});
|
|
31096
|
-
quickStart.spec.tasks = (_a = quickStart.spec.tasks) === null || _a === void 0 ? void 0 : _a.map((task, index) => {
|
|
31097
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
31098
|
-
let proc;
|
|
31099
|
-
let answer;
|
|
31100
|
-
if (typeof task === 'string') {
|
|
31101
|
-
proc = task;
|
|
31102
|
-
answer = {};
|
|
31103
|
-
}
|
|
31104
|
-
else {
|
|
31105
|
-
proc = task.proc;
|
|
31106
|
-
answer = task;
|
|
31107
|
-
delete task.proc;
|
|
31108
|
-
}
|
|
31109
|
-
let description = '', procedure, verification, title, summaryFailed, success, reviewFailed, prerequisites;
|
|
31110
|
-
if (proc) {
|
|
31111
|
-
const taskDOM = document.createElement('div');
|
|
31112
|
-
taskDOM.innerHTML = proc;
|
|
31113
|
-
// remove the screencapture images
|
|
31114
|
-
taskDOM.querySelectorAll('.imageblock.screencapture').forEach((node) => {
|
|
31115
|
-
var _a;
|
|
31116
|
-
(_a = node.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(node);
|
|
31117
|
-
});
|
|
31118
|
-
title = (_a = taskDOM
|
|
31119
|
-
.querySelector('h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child')) === null || _a === void 0 ? void 0 : _a.innerHTML.trim();
|
|
31120
|
-
let sectionBody = taskDOM.querySelector('.sectionbody');
|
|
31121
|
-
if (!(sectionBody === null || sectionBody === void 0 ? void 0 : sectionBody.hasChildNodes())) {
|
|
31122
|
-
// possibly in other templates, where we want to look for article
|
|
31123
|
-
sectionBody = taskDOM.querySelector('article');
|
|
31124
|
-
}
|
|
31125
|
-
if (sectionBody) {
|
|
31126
|
-
for (let i = 0; i < sectionBody.children.length || 0; i++) {
|
|
31127
|
-
/**
|
|
31128
|
-
child typically looks like:
|
|
31105
|
+
/* eslint-disable */
|
|
31106
|
+
// Brought in from dev to publish this with QS module
|
|
31107
|
+
// Dev now imports from here
|
|
31108
|
+
const ProcQuickStartParser = (quickStart, environmentVariables) => {
|
|
31109
|
+
var _a;
|
|
31110
|
+
const replaceEnvironmentVariables = (s) => s === null || s === void 0 ? void 0 : s.replace(/\${(\w+)}/, (substring, name) => {
|
|
31111
|
+
return environmentVariables ? ([name] ? environmentVariables[name] : substring) : substring;
|
|
31112
|
+
});
|
|
31113
|
+
quickStart.spec.tasks = (_a = quickStart.spec.tasks) === null || _a === void 0 ? void 0 : _a.map((task, index) => {
|
|
31114
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
31115
|
+
let proc;
|
|
31116
|
+
let answer;
|
|
31117
|
+
if (typeof task === 'string') {
|
|
31118
|
+
proc = task;
|
|
31119
|
+
answer = {};
|
|
31120
|
+
}
|
|
31121
|
+
else {
|
|
31122
|
+
proc = task.proc;
|
|
31123
|
+
answer = task;
|
|
31124
|
+
delete task.proc;
|
|
31125
|
+
}
|
|
31126
|
+
let description = '', procedure, verification, title, summaryFailed, success, reviewFailed, prerequisites;
|
|
31127
|
+
if (proc) {
|
|
31128
|
+
const taskDOM = document.createElement('div');
|
|
31129
|
+
taskDOM.innerHTML = proc;
|
|
31130
|
+
// remove the screencapture images
|
|
31131
|
+
taskDOM.querySelectorAll('.imageblock.screencapture').forEach((node) => {
|
|
31132
|
+
var _a;
|
|
31133
|
+
(_a = node.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(node);
|
|
31134
|
+
});
|
|
31135
|
+
title = (_a = taskDOM
|
|
31136
|
+
.querySelector('h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child')) === null || _a === void 0 ? void 0 : _a.innerHTML.trim();
|
|
31137
|
+
let sectionBody = taskDOM.querySelector('.sectionbody');
|
|
31138
|
+
if (!(sectionBody === null || sectionBody === void 0 ? void 0 : sectionBody.hasChildNodes())) {
|
|
31139
|
+
// possibly in other templates, where we want to look for article
|
|
31140
|
+
sectionBody = taskDOM.querySelector('article');
|
|
31141
|
+
}
|
|
31142
|
+
if (sectionBody) {
|
|
31143
|
+
for (let i = 0; i < sectionBody.children.length || 0; i++) {
|
|
31144
|
+
/**
|
|
31145
|
+
child typically looks like:
|
|
31129
31146
|
|
|
31130
|
-
<div class="paragraph|olist|ulist|admonitionblock">
|
|
31131
|
-
<div class="title">Procedure|Prerequisites|Verification|Note|Warning</div>
|
|
31132
|
-
<ol|ul class="arabic">
|
|
31133
|
-
<li>
|
|
31134
|
-
<li>...
|
|
31135
|
-
</ol|ul>
|
|
31136
|
-
</div>
|
|
31147
|
+
<div class="paragraph|olist|ulist|admonitionblock">
|
|
31148
|
+
<div class="title">Procedure|Prerequisites|Verification|Note|Warning</div>
|
|
31149
|
+
<ol|ul class="arabic">
|
|
31150
|
+
<li>
|
|
31151
|
+
<li>...
|
|
31152
|
+
</ol|ul>
|
|
31153
|
+
</div>
|
|
31137
31154
|
|
|
31138
|
-
And the below code extracts the <ol> or <ul>
|
|
31139
|
-
Except for when there is no <div class="title|heading"/>, then the description is extracted
|
|
31140
|
-
in the else if below
|
|
31141
|
-
*/
|
|
31142
|
-
const child = sectionBody.children.item(i);
|
|
31143
|
-
// find the title
|
|
31144
|
-
const sectionTitle = child === null || child === void 0 ? void 0 : child.querySelector('.heading,.title');
|
|
31145
|
-
// should this section be assigned to a specific section
|
|
31146
|
-
const sectionTitleText = (_b = sectionTitle === null || sectionTitle === void 0 ? void 0 : sectionTitle.textContent) === null || _b === void 0 ? void 0 : _b.trim();
|
|
31147
|
-
const isKnownSection = ['Procedure', 'Verification', 'Prerequisites'].includes((_c = sectionTitle === null || sectionTitle === void 0 ? void 0 : sectionTitle.textContent) === null || _c === void 0 ? void 0 : _c.trim());
|
|
31148
|
-
if (isKnownSection) {
|
|
31149
|
-
switch (sectionTitleText) {
|
|
31150
|
-
case 'Procedure':
|
|
31151
|
-
procedure = (_d = child === null || child === void 0 ? void 0 : child.querySelector(':not(.heading):not(.title)')) === null || _d === void 0 ? void 0 : _d.outerHTML.trim();
|
|
31152
|
-
break;
|
|
31153
|
-
case 'Verification':
|
|
31154
|
-
verification = (_e = child === null || child === void 0 ? void 0 : child.querySelector(':not(.heading):not(.title)')) === null || _e === void 0 ? void 0 : _e.outerHTML.trim();
|
|
31155
|
-
break;
|
|
31156
|
-
case 'Prerequisites':
|
|
31157
|
-
prerequisites = (_f = child === null || child === void 0 ? void 0 : child.querySelector(':not(.heading):not(.title)')) === null || _f === void 0 ? void 0 : _f.outerHTML.trim();
|
|
31158
|
-
break;
|
|
31159
|
-
}
|
|
31160
|
-
}
|
|
31161
|
-
else if (!procedure) {
|
|
31162
|
-
// Otherwise if it comes before a procedure it's part of the description
|
|
31163
|
-
description = description + (child === null || child === void 0 ? void 0 : child.outerHTML.trim());
|
|
31164
|
-
}
|
|
31165
|
-
}
|
|
31166
|
-
}
|
|
31167
|
-
success = (_g = taskDOM.querySelector('.qs-summary.success')) === null || _g === void 0 ? void 0 : _g.innerHTML.trim();
|
|
31168
|
-
reviewFailed = (_h = taskDOM.querySelector('.qs-review.failed')) === null || _h === void 0 ? void 0 : _h.innerHTML.trim();
|
|
31169
|
-
summaryFailed = (_j = taskDOM.querySelector('.qs-summary.failed')) === null || _j === void 0 ? void 0 : _j.innerHTML.trim();
|
|
31170
|
-
}
|
|
31171
|
-
answer.title = replaceEnvironmentVariables(answer.title || title);
|
|
31172
|
-
answer.description = replaceEnvironmentVariables(answer.description || `${description} ${prerequisites || ''} ${procedure}`);
|
|
31173
|
-
answer.review = answer.review || {};
|
|
31174
|
-
answer.review.instructions = replaceEnvironmentVariables(((_k = answer.review) === null || _k === void 0 ? void 0 : _k.instructions) || verification || 'Have you completed these steps?');
|
|
31175
|
-
answer.review.failedTaskHelp = replaceEnvironmentVariables(answer.review.failedTaskHelp ||
|
|
31176
|
-
reviewFailed ||
|
|
31177
|
-
'This task isn’t verified yet. Try the task again.');
|
|
31178
|
-
answer.summary = answer.summary || {};
|
|
31179
|
-
answer.summary.success = replaceEnvironmentVariables(answer.summary.success || success || 'You have completed this task!');
|
|
31180
|
-
answer.summary.failed = replaceEnvironmentVariables(answer.summary.failed || summaryFailed || 'Try the steps again.');
|
|
31181
|
-
return answer;
|
|
31182
|
-
});
|
|
31183
|
-
return quickStart;
|
|
31155
|
+
And the below code extracts the <ol> or <ul>
|
|
31156
|
+
Except for when there is no <div class="title|heading"/>, then the description is extracted
|
|
31157
|
+
in the else if below
|
|
31158
|
+
*/
|
|
31159
|
+
const child = sectionBody.children.item(i);
|
|
31160
|
+
// find the title
|
|
31161
|
+
const sectionTitle = child === null || child === void 0 ? void 0 : child.querySelector('.heading,.title');
|
|
31162
|
+
// should this section be assigned to a specific section
|
|
31163
|
+
const sectionTitleText = (_b = sectionTitle === null || sectionTitle === void 0 ? void 0 : sectionTitle.textContent) === null || _b === void 0 ? void 0 : _b.trim();
|
|
31164
|
+
const isKnownSection = ['Procedure', 'Verification', 'Prerequisites'].includes((_c = sectionTitle === null || sectionTitle === void 0 ? void 0 : sectionTitle.textContent) === null || _c === void 0 ? void 0 : _c.trim());
|
|
31165
|
+
if (isKnownSection) {
|
|
31166
|
+
switch (sectionTitleText) {
|
|
31167
|
+
case 'Procedure':
|
|
31168
|
+
procedure = (_d = child === null || child === void 0 ? void 0 : child.querySelector(':not(.heading):not(.title)')) === null || _d === void 0 ? void 0 : _d.outerHTML.trim();
|
|
31169
|
+
break;
|
|
31170
|
+
case 'Verification':
|
|
31171
|
+
verification = (_e = child === null || child === void 0 ? void 0 : child.querySelector(':not(.heading):not(.title)')) === null || _e === void 0 ? void 0 : _e.outerHTML.trim();
|
|
31172
|
+
break;
|
|
31173
|
+
case 'Prerequisites':
|
|
31174
|
+
prerequisites = (_f = child === null || child === void 0 ? void 0 : child.querySelector(':not(.heading):not(.title)')) === null || _f === void 0 ? void 0 : _f.outerHTML.trim();
|
|
31175
|
+
break;
|
|
31176
|
+
}
|
|
31177
|
+
}
|
|
31178
|
+
else if (!procedure) {
|
|
31179
|
+
// Otherwise if it comes before a procedure it's part of the description
|
|
31180
|
+
description = description + (child === null || child === void 0 ? void 0 : child.outerHTML.trim());
|
|
31181
|
+
}
|
|
31182
|
+
}
|
|
31183
|
+
}
|
|
31184
|
+
success = (_g = taskDOM.querySelector('.qs-summary.success')) === null || _g === void 0 ? void 0 : _g.innerHTML.trim();
|
|
31185
|
+
reviewFailed = (_h = taskDOM.querySelector('.qs-review.failed')) === null || _h === void 0 ? void 0 : _h.innerHTML.trim();
|
|
31186
|
+
summaryFailed = (_j = taskDOM.querySelector('.qs-summary.failed')) === null || _j === void 0 ? void 0 : _j.innerHTML.trim();
|
|
31187
|
+
}
|
|
31188
|
+
answer.title = replaceEnvironmentVariables(answer.title || title);
|
|
31189
|
+
answer.description = replaceEnvironmentVariables(answer.description || `${description} ${prerequisites || ''} ${procedure}`);
|
|
31190
|
+
answer.review = answer.review || {};
|
|
31191
|
+
answer.review.instructions = replaceEnvironmentVariables(((_k = answer.review) === null || _k === void 0 ? void 0 : _k.instructions) || verification || 'Have you completed these steps?');
|
|
31192
|
+
answer.review.failedTaskHelp = replaceEnvironmentVariables(answer.review.failedTaskHelp ||
|
|
31193
|
+
reviewFailed ||
|
|
31194
|
+
'This task isn’t verified yet. Try the task again.');
|
|
31195
|
+
answer.summary = answer.summary || {};
|
|
31196
|
+
answer.summary.success = replaceEnvironmentVariables(answer.summary.success || success || 'You have completed this task!');
|
|
31197
|
+
answer.summary.failed = replaceEnvironmentVariables(answer.summary.failed || summaryFailed || 'Try the steps again.');
|
|
31198
|
+
return answer;
|
|
31199
|
+
});
|
|
31200
|
+
return quickStart;
|
|
31184
31201
|
};
|
|
31185
31202
|
|
|
31186
31203
|
export { Box, CamelCaseWrap, EmptyBox, HELP_TOPIC_NAME_KEY, HelpTopicContainer, HelpTopicContext, HelpTopicContextDefaults, HelpTopicDrawer, Loading, LoadingBox, ProcQuickStartParser, QUICKSTART_ID_FILTER_KEY, QUICKSTART_SEARCH_FILTER_KEY, QUICKSTART_STATUS_FILTER_KEY, QUICKSTART_TASKS_INITIAL_STATES, QUICK_START_NAME, QuickStartCatalog, QuickStartCatalogEmptyState, QuickStartCatalogFilter, QuickStartCatalogFilterCount, QuickStartCatalogFilterCountWrapper, QuickStartCatalogFilterSearch, QuickStartCatalogFilterSearchWrapper, QuickStartCatalogFilterSelect, QuickStartCatalogFilterStatusWrapper, QuickStartCatalogHeader, QuickStartCatalogPage, QuickStartCatalogSection, QuickStartCatalogToolbar, QuickStartCloseModal, QuickStartContainer, QuickStartContext, QuickStartContextDefaults, QuickStartContextProvider, QuickStartDrawer, QuickStartPanelContent, QuickStartStatus, QuickStartTaskStatus, QuickStartTile, QuickStartTileDescription, QuickStartTileFooter, QuickStartTileFooterExternal, QuickStartTileHeader, camelize, clearFilterParams, equalsIgnoreOrder, filterQuickStarts, getDefaultQuickStartState, getDisabledQuickStarts, getQuickStartByName, getQuickStartStatus, getQuickStartStatusCount, getResource, getTaskStatusKey, history, isDisabledQuickStart, removeQueryArgument, setQueryArgument, useLocalStorage, useValuesForHelpTopicContext, useValuesForQuickStartContext };
|