@patternfly/quickstarts 6.3.0-prerelease.1 → 6.3.0-prerelease.10
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 +2 -2
- package/dist/ConsoleInternal/components/utils/camel-case-wrap.d.ts +1 -1
- package/dist/ConsoleInternal/components/utils/status-box.d.ts +3 -3
- package/dist/ConsoleShared/src/components/markdown-extensions/MarkdownCopyClipboard.d.ts +3 -3
- package/dist/ConsoleShared/src/components/markdown-extensions/accordion-extension.d.ts +1 -1
- package/dist/ConsoleShared/src/components/markdown-extensions/accordion-render-extension.d.ts +2 -2
- package/dist/ConsoleShared/src/components/markdown-extensions/admonition-extension.d.ts +1 -1
- package/dist/ConsoleShared/src/components/markdown-highlight-extension/MarkdownHighlightExtension.d.ts +2 -2
- package/dist/ConsoleShared/src/components/modal/Modal.d.ts +3 -3
- package/dist/ConsoleShared/src/components/popper/Portal.d.ts +3 -3
- package/dist/ConsoleShared/src/components/popper/SimplePopper.d.ts +3 -3
- package/dist/ConsoleShared/src/components/spotlight/InteractiveSpotlight.d.ts +3 -2
- package/dist/ConsoleShared/src/components/spotlight/Spotlight.d.ts +2 -2
- package/dist/ConsoleShared/src/components/spotlight/StaticSpotlight.d.ts +3 -2
- package/dist/ConsoleShared/src/components/status/GenericStatus.d.ts +4 -4
- package/dist/ConsoleShared/src/components/status/NotStartedIcon.d.ts +1 -2
- package/dist/ConsoleShared/src/components/status/PopoverStatus.d.ts +4 -4
- package/dist/ConsoleShared/src/components/status/Status.d.ts +3 -3
- package/dist/ConsoleShared/src/components/status/StatusIconAndText.d.ts +3 -3
- package/dist/ConsoleShared/src/components/status/icons.d.ts +4 -4
- package/dist/ConsoleShared/src/components/status/statuses.d.ts +4 -4
- package/dist/ConsoleShared/src/components/utils/FallbackImg.d.ts +3 -3
- package/dist/ConsoleShared/src/utils/useCombineRefs.d.ts +2 -2
- package/dist/HelpTopicDrawer.d.ts +3 -3
- package/dist/HelpTopicPanelContent.d.ts +2 -2
- package/dist/QuickStartCatalogPage.d.ts +3 -3
- package/dist/QuickStartCloseModal.d.ts +2 -2
- package/dist/QuickStartContainer.d.ts +2 -2
- package/dist/QuickStartController.d.ts +2 -2
- package/dist/QuickStartDrawer.d.ts +2 -2
- package/dist/QuickStartDrawerContent.d.ts +2 -2
- package/dist/QuickStartMarkdownView.d.ts +2 -2
- package/dist/QuickStartPanelContent.d.ts +2 -2
- package/dist/catalog/Catalog/QuickStartCatalogHeader.d.ts +2 -2
- package/dist/catalog/Catalog/QuickStartCatalogSection.d.ts +2 -2
- package/dist/catalog/Catalog/QuickStartCatalogToolbar.d.ts +2 -2
- package/dist/catalog/QuickStartCatalog.d.ts +2 -2
- package/dist/catalog/QuickStartTile.d.ts +2 -2
- package/dist/catalog/QuickStartTileDescription.d.ts +2 -2
- package/dist/catalog/QuickStartTileFooter.d.ts +2 -2
- package/dist/catalog/QuickStartTileFooterExternal.d.ts +2 -2
- package/dist/catalog/QuickStartTileHeader.d.ts +2 -2
- package/dist/catalog/Toolbar/QuickStartCatalogFilter.d.ts +2 -2
- package/dist/catalog/Toolbar/QuickStartCatalogFilterItems.d.ts +7 -7
- package/dist/controller/QuickStartConclusion.d.ts +2 -2
- package/dist/controller/QuickStartContent.d.ts +2 -2
- package/dist/controller/QuickStartFooter.d.ts +2 -2
- package/dist/controller/QuickStartIntroduction.d.ts +2 -2
- package/dist/controller/QuickStartTaskHeader.d.ts +2 -2
- package/dist/controller/QuickStartTaskHeaderList.d.ts +2 -2
- package/dist/controller/QuickStartTaskReview.d.ts +2 -2
- package/dist/controller/QuickStartTasks.d.ts +2 -2
- package/dist/index.es.js +489 -561
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +500 -574
- package/dist/index.js.map +1 -1
- package/dist/quickstarts-base.css +61 -0
- package/dist/quickstarts-full.es.js +1963 -693
- package/dist/quickstarts-full.es.js.map +1 -1
- package/dist/quickstarts.css +61 -0
- package/dist/quickstarts.min.css +1 -1
- package/dist/utils/help-topic-context.d.ts +2 -2
- package/dist/utils/quick-start-context.d.ts +3 -3
- package/package.json +5 -6
- package/src/ConsoleInternal/components/markdown-view.tsx +112 -22
- package/src/ConsoleInternal/components/utils/camel-case-wrap.tsx +3 -3
- package/src/ConsoleInternal/components/utils/status-box.tsx +4 -4
- package/src/ConsoleShared/src/components/markdown-extensions/MarkdownCopyClipboard.tsx +8 -15
- package/src/ConsoleShared/src/components/markdown-extensions/__tests__/MarkdownCopyClipboard.spec.tsx +0 -1
- package/src/ConsoleShared/src/components/markdown-extensions/__tests__/accordion-extension.spec.tsx +105 -0
- package/src/ConsoleShared/src/components/markdown-extensions/__tests__/admonition-extension.spec.tsx +121 -0
- package/src/ConsoleShared/src/components/markdown-extensions/accordion-extension.tsx +22 -15
- package/src/ConsoleShared/src/components/markdown-extensions/accordion-render-extension.tsx +23 -9
- package/src/ConsoleShared/src/components/markdown-extensions/admonition-extension.tsx +19 -8
- package/src/ConsoleShared/src/components/markdown-extensions/code-extension.tsx +2 -2
- package/src/ConsoleShared/src/components/markdown-extensions/inline-clipboard-extension.tsx +3 -3
- package/src/ConsoleShared/src/components/markdown-extensions/multiline-clipboard-extension.tsx +3 -3
- package/src/ConsoleShared/src/components/markdown-highlight-extension/MarkdownHighlightExtension.tsx +5 -5
- package/src/ConsoleShared/src/components/modal/Modal.tsx +3 -3
- package/src/ConsoleShared/src/components/popper/Portal.tsx +5 -5
- package/src/ConsoleShared/src/components/popper/SimplePopper.tsx +15 -15
- package/src/ConsoleShared/src/components/spotlight/InteractiveSpotlight.tsx +6 -5
- package/src/ConsoleShared/src/components/spotlight/Spotlight.tsx +3 -3
- package/src/ConsoleShared/src/components/spotlight/StaticSpotlight.tsx +4 -3
- package/src/ConsoleShared/src/components/spotlight/spotlight.scss +63 -0
- package/src/ConsoleShared/src/components/status/GenericStatus.tsx +5 -5
- package/src/ConsoleShared/src/components/status/NotStartedIcon.tsx +0 -1
- package/src/ConsoleShared/src/components/status/PopoverStatus.tsx +4 -4
- package/src/ConsoleShared/src/components/status/Status.tsx +3 -11
- package/src/ConsoleShared/src/components/status/StatusIconAndText.tsx +6 -6
- package/src/ConsoleShared/src/components/status/icons.tsx +4 -8
- package/src/ConsoleShared/src/components/status/statuses.tsx +4 -5
- package/src/ConsoleShared/src/components/utils/FallbackImg.tsx +4 -4
- package/src/ConsoleShared/src/hooks/scroll.ts +4 -4
- package/src/ConsoleShared/src/hooks/useBoundingClientRect.ts +3 -3
- package/src/ConsoleShared/src/hooks/useForceRender.ts +2 -2
- package/src/ConsoleShared/src/hooks/useResizeObserver.ts +3 -6
- package/src/ConsoleShared/src/hooks/useScrollShadows.ts +4 -4
- package/src/ConsoleShared/src/utils/useCombineRefs.ts +4 -4
- package/src/HelpTopicDrawer.tsx +6 -6
- package/src/HelpTopicPanelContent.tsx +4 -4
- package/src/QuickStartCatalogPage.tsx +9 -9
- package/src/QuickStartCloseModal.tsx +3 -7
- package/src/QuickStartContainer.tsx +4 -4
- package/src/QuickStartController.tsx +11 -11
- package/src/QuickStartDrawer.tsx +6 -6
- package/src/QuickStartDrawerContent.tsx +6 -4
- package/src/QuickStartMarkdownView.tsx +3 -3
- package/src/QuickStartPanelContent.tsx +8 -8
- package/src/catalog/Catalog/QuickStartCatalogHeader.tsx +2 -2
- package/src/catalog/Catalog/QuickStartCatalogSection.tsx +2 -2
- package/src/catalog/Catalog/QuickStartCatalogToolbar.tsx +2 -2
- package/src/catalog/QuickStartCatalog.tsx +3 -3
- package/src/catalog/QuickStartTile.tsx +4 -4
- package/src/catalog/QuickStartTileDescription.tsx +4 -4
- package/src/catalog/QuickStartTileFooter.tsx +6 -6
- package/src/catalog/QuickStartTileFooterExternal.tsx +2 -5
- package/src/catalog/QuickStartTileHeader.tsx +2 -6
- package/src/catalog/Toolbar/QuickStartCatalogFilter.tsx +2 -2
- package/src/catalog/Toolbar/QuickStartCatalogFilterItems.tsx +17 -20
- package/src/catalog/__tests__/QuickStartCatalog.spec.tsx +0 -1
- package/src/catalog/__tests__/QuickStartTile.spec.tsx +0 -1
- package/src/catalog/__tests__/QuickStartTileDescription.spec.tsx +1 -2
- package/src/controller/QuickStartConclusion.tsx +3 -3
- package/src/controller/QuickStartContent.tsx +2 -2
- package/src/controller/QuickStartFooter.tsx +10 -11
- package/src/controller/QuickStartIntroduction.tsx +5 -5
- package/src/controller/QuickStartTaskHeader.tsx +5 -5
- package/src/controller/QuickStartTaskHeaderList.tsx +2 -2
- package/src/controller/QuickStartTaskReview.tsx +4 -4
- package/src/controller/QuickStartTasks.tsx +5 -5
- package/src/controller/__tests__/QuickStartConclusion.spec.tsx +3 -3
- package/src/controller/__tests__/QuickStartContent.spec.tsx +2 -2
- package/src/controller/__tests__/QuickStartTaskHeader.spec.tsx +2 -2
- package/src/controller/__tests__/QuickStartTaskReview.spec.tsx +2 -2
- package/src/utils/help-topic-context.tsx +7 -10
- package/src/utils/quick-start-context.tsx +11 -11
package/dist/index.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var react = require('react');
|
|
6
7
|
var reactCore = require('@patternfly/react-core');
|
|
7
8
|
var SearchIcon = require('@patternfly/react-icons/dist/js/icons/search-icon');
|
|
8
9
|
var reactStyles = require('@patternfly/react-styles');
|
|
@@ -45,8 +46,6 @@ function _interopNamespace(e) {
|
|
|
45
46
|
return Object.freeze(n);
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
49
|
-
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
50
49
|
var SearchIcon__default = /*#__PURE__*/_interopDefaultLegacy(SearchIcon);
|
|
51
50
|
var RocketIcon__default = /*#__PURE__*/_interopDefaultLegacy(RocketIcon);
|
|
52
51
|
var ReactDOM__namespace = /*#__PURE__*/_interopNamespace(ReactDOM);
|
|
@@ -63,18 +62,13 @@ var ArrowRightIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowRightIcon)
|
|
|
63
62
|
var BarsIcon__default = /*#__PURE__*/_interopDefaultLegacy(BarsIcon);
|
|
64
63
|
|
|
65
64
|
function _extends() {
|
|
66
|
-
_extends = Object.assign ? Object.assign.bind() : function (
|
|
67
|
-
for (var
|
|
68
|
-
var
|
|
69
|
-
for (var
|
|
70
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
71
|
-
target[key] = source[key];
|
|
72
|
-
}
|
|
73
|
-
}
|
|
65
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
66
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
67
|
+
var t = arguments[e];
|
|
68
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
74
69
|
}
|
|
75
|
-
return
|
|
76
|
-
};
|
|
77
|
-
return _extends.apply(this, arguments);
|
|
70
|
+
return n;
|
|
71
|
+
}, _extends.apply(null, arguments);
|
|
78
72
|
}
|
|
79
73
|
|
|
80
74
|
var m,x=m||(m={});x.Pop="POP";x.Push="PUSH";x.Replace="REPLACE";var y="production"!==process.env.NODE_ENV?function(a){return Object.freeze(a)}:function(a){return a};function z(a,b){if(!a){"undefined"!==typeof console&&console.warn(b);try{throw Error(b);}catch(g){}}}function A(a){a.preventDefault();a.returnValue="";}
|
|
@@ -619,7 +613,7 @@ const QuickStartContextDefaults = {
|
|
|
619
613
|
alwaysShowTaskReview: true,
|
|
620
614
|
focusOnQuickStart: true,
|
|
621
615
|
};
|
|
622
|
-
const QuickStartContext =
|
|
616
|
+
const QuickStartContext = react.createContext(QuickStartContextDefaults);
|
|
623
617
|
const getResource = (resource, options, resourceBundle, lng) => {
|
|
624
618
|
if (options && !isNaN(options.count)) {
|
|
625
619
|
const suffix = pluralResolver.getSuffix(lng, options.count);
|
|
@@ -634,27 +628,27 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
634
628
|
var _a, _b;
|
|
635
629
|
const combinedValue = Object.assign(Object.assign({}, QuickStartContextDefaults), value);
|
|
636
630
|
const { activeQuickStartID, setActiveQuickStartID, setAllQuickStartStates, useQueryParams, allQuickStartStates, allQuickStarts = [], footer, useLegacyHeaderColors, markdown, } = combinedValue;
|
|
637
|
-
const [quickStarts, setQuickStarts] =
|
|
638
|
-
const [resourceBundle, setResourceBundle] =
|
|
639
|
-
const [language, setLanguage] =
|
|
631
|
+
const [quickStarts, setQuickStarts] = react.useState(combinedValue.allQuickStarts || []);
|
|
632
|
+
const [resourceBundle, setResourceBundle] = react.useState(Object.assign(Object.assign({}, en), combinedValue.resourceBundle));
|
|
633
|
+
const [language, setLanguage] = react.useState(combinedValue.language);
|
|
640
634
|
const changeResourceBundle = (bundle, lng) => {
|
|
641
635
|
lng && setLanguage(lng);
|
|
642
636
|
setResourceBundle(Object.assign(Object.assign({}, en), bundle));
|
|
643
637
|
};
|
|
644
|
-
const findResource =
|
|
645
|
-
const [loading, setLoading] =
|
|
646
|
-
const [alwaysShowTaskReview, setAlwaysShowTaskReview] =
|
|
638
|
+
const findResource = react.useCallback((resource, count) => getResource(resource, count !== undefined ? { count } : null, resourceBundle, language), [resourceBundle, language]);
|
|
639
|
+
const [loading, setLoading] = react.useState(combinedValue.loading);
|
|
640
|
+
const [alwaysShowTaskReview, setAlwaysShowTaskReview] = react.useState(combinedValue.alwaysShowTaskReview);
|
|
647
641
|
const initialSearchParams = new URLSearchParams(window.location.search);
|
|
648
642
|
const initialSearchQuery = initialSearchParams.get(QUICKSTART_SEARCH_FILTER_KEY) || '';
|
|
649
643
|
const initialStatusFilters = ((_a = initialSearchParams.get(QUICKSTART_STATUS_FILTER_KEY)) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
|
|
650
644
|
const quickStartStatusCount = getQuickStartStatusCount(allQuickStartStates, allQuickStarts);
|
|
651
|
-
const [statusTypes, setStatusTypes] =
|
|
645
|
+
const [statusTypes, setStatusTypes] = react.useState({
|
|
652
646
|
[exports.QuickStartStatus.COMPLETE]: findResource('Complete ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[exports.QuickStartStatus.COMPLETE]),
|
|
653
647
|
[exports.QuickStartStatus.IN_PROGRESS]: findResource('In progress ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[exports.QuickStartStatus.IN_PROGRESS]),
|
|
654
648
|
[exports.QuickStartStatus.NOT_STARTED]: findResource('Not started ({{statusCount, number}})').replace('{{statusCount, number}}', quickStartStatusCount[exports.QuickStartStatus.NOT_STARTED]),
|
|
655
649
|
});
|
|
656
|
-
const [statusFilters, setStatusFilters] =
|
|
657
|
-
const [filterKeyword, setFilterKeyword] =
|
|
650
|
+
const [statusFilters, setStatusFilters] = react.useState(initialStatusFilters);
|
|
651
|
+
const [filterKeyword, setFilterKeyword] = react.useState(initialSearchQuery);
|
|
658
652
|
const setFilter = (type, val) => {
|
|
659
653
|
if (type === 'keyword') {
|
|
660
654
|
setFilterKeyword(val);
|
|
@@ -663,7 +657,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
663
657
|
setStatusFilters(val);
|
|
664
658
|
}
|
|
665
659
|
};
|
|
666
|
-
|
|
660
|
+
react.useEffect(() => {
|
|
667
661
|
const updatedQuickStartStatusCount = getQuickStartStatusCount(allQuickStartStates, quickStarts);
|
|
668
662
|
setStatusTypes({
|
|
669
663
|
[exports.QuickStartStatus.COMPLETE]: findResource('Complete ({{statusCount, number}})').replace('{{statusCount, number}}', updatedQuickStartStatusCount[exports.QuickStartStatus.COMPLETE]),
|
|
@@ -674,7 +668,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
674
668
|
const updateAllQuickStarts = (qs) => {
|
|
675
669
|
setQuickStarts(qs);
|
|
676
670
|
};
|
|
677
|
-
const setActiveQuickStart =
|
|
671
|
+
const setActiveQuickStart = react.useCallback((quickStartId, totalTasks) => {
|
|
678
672
|
setActiveQuickStartID((id) => {
|
|
679
673
|
if (!quickStartId || id === quickStartId) {
|
|
680
674
|
useQueryParams && removeQueryArgument(QUICKSTART_ID_FILTER_KEY);
|
|
@@ -687,7 +681,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
687
681
|
? qs
|
|
688
682
|
: Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks) }));
|
|
689
683
|
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
690
|
-
const startQuickStart =
|
|
684
|
+
const startQuickStart = react.useCallback((quickStartId, totalTasks) => {
|
|
691
685
|
setActiveQuickStartID((id) => {
|
|
692
686
|
if (!id || id !== quickStartId) {
|
|
693
687
|
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
@@ -703,7 +697,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
703
697
|
return Object.assign(Object.assign({}, qs), { [quickStartId]: getDefaultQuickStartState(totalTasks, exports.QuickStartStatus.IN_PROGRESS) });
|
|
704
698
|
});
|
|
705
699
|
}, [setActiveQuickStartID, setAllQuickStartStates, useQueryParams]);
|
|
706
|
-
const restartQuickStart =
|
|
700
|
+
const restartQuickStart = react.useCallback((quickStartId, totalTasks) => {
|
|
707
701
|
setActiveQuickStartID((id) => {
|
|
708
702
|
if (!id || id !== quickStartId) {
|
|
709
703
|
useQueryParams && setQueryArgument(QUICKSTART_ID_FILTER_KEY, quickStartId);
|
|
@@ -718,7 +712,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
718
712
|
const stepAfterInitial = alwaysShowTaskReview
|
|
719
713
|
? exports.QuickStartTaskStatus.REVIEW
|
|
720
714
|
: exports.QuickStartTaskStatus.VISITED;
|
|
721
|
-
const nextStep =
|
|
715
|
+
const nextStep = react.useCallback((totalTasks) => {
|
|
722
716
|
if (!activeQuickStartID) {
|
|
723
717
|
return;
|
|
724
718
|
}
|
|
@@ -757,7 +751,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
757
751
|
return newState;
|
|
758
752
|
});
|
|
759
753
|
}, [activeQuickStartID, setAllQuickStartStates, stepAfterInitial]);
|
|
760
|
-
const previousStep =
|
|
754
|
+
const previousStep = react.useCallback(() => {
|
|
761
755
|
setAllQuickStartStates((qs) => {
|
|
762
756
|
const quickStart = qs[activeQuickStartID];
|
|
763
757
|
const taskNumber = quickStart === null || quickStart === void 0 ? void 0 : quickStart.taskNumber;
|
|
@@ -767,7 +761,7 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
767
761
|
return Object.assign(Object.assign({}, qs), { [activeQuickStartID]: Object.assign(Object.assign({}, quickStart), { taskNumber: taskNumber - 1 }) });
|
|
768
762
|
});
|
|
769
763
|
}, [activeQuickStartID, setAllQuickStartStates]);
|
|
770
|
-
const setQuickStartTaskNumber =
|
|
764
|
+
const setQuickStartTaskNumber = react.useCallback((quickStartId, taskNumber) => {
|
|
771
765
|
setAllQuickStartStates((qs) => {
|
|
772
766
|
const quickStart = qs[quickStartId];
|
|
773
767
|
const status = quickStart === null || quickStart === void 0 ? void 0 : quickStart.status;
|
|
@@ -787,14 +781,14 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
787
781
|
return Object.assign(Object.assign({}, qs), { [quickStartId]: updatedQuickStart });
|
|
788
782
|
});
|
|
789
783
|
}, [setAllQuickStartStates, stepAfterInitial]);
|
|
790
|
-
const setQuickStartTaskStatus =
|
|
784
|
+
const setQuickStartTaskStatus = react.useCallback((taskStatus) => {
|
|
791
785
|
const quickStart = allQuickStartStates[activeQuickStartID];
|
|
792
786
|
const { taskNumber } = quickStart;
|
|
793
787
|
const updatedQuickStart = Object.assign(Object.assign({}, quickStart), { [getTaskStatusKey(taskNumber)]: taskStatus });
|
|
794
788
|
setAllQuickStartStates((qs) => (Object.assign(Object.assign({}, qs), { [activeQuickStartID]: updatedQuickStart })));
|
|
795
789
|
}, [allQuickStartStates, activeQuickStartID, setAllQuickStartStates]);
|
|
796
790
|
const activeQuickStartState = (_b = allQuickStartStates === null || allQuickStartStates === void 0 ? void 0 : allQuickStartStates[activeQuickStartID]) !== null && _b !== void 0 ? _b : {};
|
|
797
|
-
const getQuickStartForId =
|
|
791
|
+
const getQuickStartForId = react.useCallback((id) => allQuickStartStates[id], [allQuickStartStates]);
|
|
798
792
|
return {
|
|
799
793
|
allQuickStarts: quickStarts,
|
|
800
794
|
setAllQuickStarts: updateAllQuickStarts,
|
|
@@ -835,24 +829,18 @@ const useValuesForQuickStartContext = (value = {}) => {
|
|
|
835
829
|
setAlwaysShowTaskReview,
|
|
836
830
|
};
|
|
837
831
|
};
|
|
838
|
-
const QuickStartContextProvider = ({ children, value }) => (
|
|
832
|
+
const QuickStartContextProvider = ({ children, value }) => (jsxRuntime.jsx(QuickStartContext.Provider, Object.assign({ value: useValuesForQuickStartContext(value) }, { children: children })));
|
|
839
833
|
|
|
840
|
-
const Box = ({ children, className }) => (
|
|
841
|
-
const Loading = ({ className }) => (
|
|
842
|
-
React__namespace.createElement("div", { className: "pfext-m-loader-dot__one" }),
|
|
843
|
-
React__namespace.createElement("div", { className: "pfext-m-loader-dot__two" }),
|
|
844
|
-
React__namespace.createElement("div", { className: "pfext-m-loader-dot__three" })));
|
|
834
|
+
const Box = ({ children, className }) => (jsxRuntime.jsx("div", Object.assign({ className: reactStyles.css('pfext-status-box', className) }, { children: children })));
|
|
835
|
+
const Loading = ({ className }) => (jsxRuntime.jsxs("div", Object.assign({ className: reactStyles.css('pfext-m-loader', className) }, { children: [jsxRuntime.jsx("div", { className: "pfext-m-loader-dot__one" }), jsxRuntime.jsx("div", { className: "pfext-m-loader-dot__two" }), jsxRuntime.jsx("div", { className: "pfext-m-loader-dot__three" })] })));
|
|
845
836
|
Loading.displayName = 'Loading';
|
|
846
|
-
const LoadingBox = ({ className, message }) => (
|
|
847
|
-
React__namespace.createElement(Loading, null),
|
|
848
|
-
message && React__namespace.createElement("div", { className: "pfext-status-box__loading-message" }, message)));
|
|
837
|
+
const LoadingBox = ({ className, message }) => (jsxRuntime.jsxs(Box, Object.assign({ className: reactStyles.css('pfext-status-box--loading', className) }, { children: [jsxRuntime.jsx(Loading, {}), message && jsxRuntime.jsx("div", Object.assign({ className: "pfext-status-box__loading-message" }, { children: message }))] })));
|
|
849
838
|
LoadingBox.displayName = 'LoadingBox';
|
|
850
839
|
const EmptyBox = ({ label }) => {
|
|
851
|
-
const { getResource } =
|
|
852
|
-
return (
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
: getResource('Not found'))));
|
|
840
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
841
|
+
return (jsxRuntime.jsx(Box, { children: jsxRuntime.jsx("div", Object.assign({ "data-test": "empty-message", className: "text-center" }, { children: label
|
|
842
|
+
? getResource('No {{label}} found').replace('{{label}}', label)
|
|
843
|
+
: getResource('Not found') })) }));
|
|
856
844
|
};
|
|
857
845
|
EmptyBox.displayName = 'EmptyBox';
|
|
858
846
|
|
|
@@ -866,49 +854,47 @@ const CamelCaseWrap = ({ value, dataTest }) => {
|
|
|
866
854
|
}
|
|
867
855
|
// Add word break points before capital letters (but keep consecutive capital letters together).
|
|
868
856
|
const words = value.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g);
|
|
869
|
-
const rendered = (
|
|
870
|
-
word,
|
|
871
|
-
i !== words.length - 1 && React__namespace.createElement("wbr", null))))));
|
|
857
|
+
const rendered = (jsxRuntime.jsx("span", Object.assign({ "data-test": dataTest }, { children: words.map((word, i) => (jsxRuntime.jsxs(react.Fragment, { children: [word, i !== words.length - 1 && jsxRuntime.jsx("wbr", {})] }, i))) })));
|
|
872
858
|
MEMO[value] = rendered;
|
|
873
859
|
return rendered;
|
|
874
860
|
};
|
|
875
861
|
|
|
876
862
|
const Modal = (_a) => {
|
|
877
863
|
var { isFullScreen = false, className } = _a, props = tslib.__rest(_a, ["isFullScreen", "className"]);
|
|
878
|
-
return (
|
|
864
|
+
return (jsxRuntime.jsx(deprecated.Modal, Object.assign({}, props, { className: reactStyles.css('pfext-modal', className), appendTo: () => (isFullScreen ? document.body : document.querySelector('#modal-container')) })));
|
|
879
865
|
};
|
|
880
866
|
|
|
881
867
|
const getContainer = (container) => typeof container === 'function' ? container() : container;
|
|
882
868
|
const Portal = ({ children, container }) => {
|
|
883
|
-
const [containerNode, setContainerNode] =
|
|
869
|
+
const [containerNode, setContainerNode] = react.useState();
|
|
884
870
|
reactCore.useIsomorphicLayoutEffect(() => {
|
|
885
871
|
setContainerNode(getContainer(container) || document.body);
|
|
886
872
|
}, [container]);
|
|
887
|
-
return containerNode ?
|
|
873
|
+
return containerNode ? ReactDOM.createPortal(children, containerNode) : null;
|
|
888
874
|
};
|
|
889
875
|
|
|
890
876
|
const SimplePopper = ({ children }) => {
|
|
891
877
|
const openProp = true;
|
|
892
|
-
const nodeRef =
|
|
893
|
-
const popperRef =
|
|
894
|
-
const [isOpen, setOpenState] =
|
|
895
|
-
const setOpen =
|
|
878
|
+
const nodeRef = react.useRef(null);
|
|
879
|
+
const popperRef = react.useRef(null);
|
|
880
|
+
const [isOpen, setOpenState] = react.useState(openProp);
|
|
881
|
+
const setOpen = react.useCallback((newOpen) => {
|
|
896
882
|
setOpenState(newOpen);
|
|
897
883
|
}, []);
|
|
898
|
-
|
|
884
|
+
react.useEffect(() => {
|
|
899
885
|
setOpen(openProp);
|
|
900
886
|
}, [openProp, setOpen]);
|
|
901
|
-
const onKeyDown =
|
|
887
|
+
const onKeyDown = react.useCallback((e) => {
|
|
902
888
|
if (e.keyCode === 27) {
|
|
903
889
|
setOpen(false);
|
|
904
890
|
}
|
|
905
891
|
}, [setOpen]);
|
|
906
|
-
const onClickOutside =
|
|
892
|
+
const onClickOutside = react.useCallback((e) => {
|
|
907
893
|
if (!nodeRef.current || (e.target instanceof Node && !nodeRef.current.contains(e.target))) {
|
|
908
894
|
setOpen(false);
|
|
909
895
|
}
|
|
910
896
|
}, [setOpen]);
|
|
911
|
-
const destroy =
|
|
897
|
+
const destroy = react.useCallback(() => {
|
|
912
898
|
if (popperRef.current) {
|
|
913
899
|
popperRef.current.destroy();
|
|
914
900
|
document.removeEventListener('keydown', onKeyDown, true);
|
|
@@ -916,29 +902,28 @@ const SimplePopper = ({ children }) => {
|
|
|
916
902
|
document.removeEventListener('touchstart', onClickOutside, true);
|
|
917
903
|
}
|
|
918
904
|
}, [onClickOutside, onKeyDown]);
|
|
919
|
-
const initialize =
|
|
905
|
+
const initialize = react.useCallback(() => {
|
|
920
906
|
if (!nodeRef.current || !isOpen) {
|
|
921
907
|
return;
|
|
922
908
|
}
|
|
923
909
|
destroy();
|
|
924
910
|
}, [isOpen, destroy]);
|
|
925
|
-
const nodeRefCallback =
|
|
911
|
+
const nodeRefCallback = react.useCallback((node) => {
|
|
926
912
|
nodeRef.current = node;
|
|
927
913
|
initialize();
|
|
928
914
|
}, [initialize]);
|
|
929
|
-
|
|
915
|
+
react.useEffect(() => {
|
|
930
916
|
initialize();
|
|
931
917
|
}, [initialize]);
|
|
932
|
-
|
|
918
|
+
react.useEffect(() => () => {
|
|
933
919
|
destroy();
|
|
934
920
|
}, [destroy]);
|
|
935
|
-
|
|
921
|
+
react.useEffect(() => {
|
|
936
922
|
if (!isOpen) {
|
|
937
923
|
destroy();
|
|
938
924
|
}
|
|
939
925
|
}, [destroy, isOpen]);
|
|
940
|
-
return isOpen ? (
|
|
941
|
-
React__namespace.createElement("div", { ref: nodeRefCallback, style: { zIndex: 9999, position: 'absolute', top: 0, left: 0 }, className: "pfext-quick-start__base" }, children))) : null;
|
|
926
|
+
return isOpen ? (jsxRuntime.jsx(Portal, { children: jsxRuntime.jsx("div", Object.assign({ ref: nodeRefCallback, style: { zIndex: 9999, position: 'absolute', top: 0, left: 0 }, className: "pfext-quick-start__base" }, { children: children })) })) : null;
|
|
942
927
|
};
|
|
943
928
|
|
|
944
929
|
const isInViewport = (elementToCheck) => {
|
|
@@ -958,8 +943,8 @@ const InteractiveSpotlight = ({ element }) => {
|
|
|
958
943
|
bottom,
|
|
959
944
|
right,
|
|
960
945
|
};
|
|
961
|
-
const [clicked, setClicked] =
|
|
962
|
-
|
|
946
|
+
const [clicked, setClicked] = react.useState(false);
|
|
947
|
+
react.useEffect(() => {
|
|
963
948
|
if (!clicked) {
|
|
964
949
|
if (!isInViewport(element)) {
|
|
965
950
|
element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
@@ -975,9 +960,7 @@ const InteractiveSpotlight = ({ element }) => {
|
|
|
975
960
|
if (clicked) {
|
|
976
961
|
return null;
|
|
977
962
|
}
|
|
978
|
-
return (
|
|
979
|
-
React__namespace.createElement(SimplePopper, null,
|
|
980
|
-
React__namespace.createElement("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-animate", style: style }))));
|
|
963
|
+
return (jsxRuntime.jsx(Portal, { children: jsxRuntime.jsx(SimplePopper, { children: jsxRuntime.jsx("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-animate", style: style }) }) }));
|
|
981
964
|
};
|
|
982
965
|
|
|
983
966
|
var ScrollDirection;
|
|
@@ -989,8 +972,8 @@ var ScrollDirection;
|
|
|
989
972
|
})(ScrollDirection || (ScrollDirection = {}));
|
|
990
973
|
|
|
991
974
|
const useResizeObserver = (callback, targetElement, observerOptions = undefined) => {
|
|
992
|
-
const element =
|
|
993
|
-
|
|
975
|
+
const element = react.useMemo(() => targetElement !== null && targetElement !== void 0 ? targetElement : document.querySelector('body'), [targetElement]);
|
|
976
|
+
react.useEffect(() => {
|
|
994
977
|
const observer = new ResizeObserver(callback);
|
|
995
978
|
observer.observe(element, observerOptions);
|
|
996
979
|
return () => {
|
|
@@ -1008,8 +991,8 @@ var Shadows;
|
|
|
1008
991
|
})(Shadows || (Shadows = {}));
|
|
1009
992
|
|
|
1010
993
|
const useBoundingClientRect = (targetElement) => {
|
|
1011
|
-
const [clientRect, setClientRect] =
|
|
1012
|
-
const observerCallback =
|
|
994
|
+
const [clientRect, setClientRect] = react.useState(() => targetElement ? targetElement.getBoundingClientRect() : null);
|
|
995
|
+
const observerCallback = react.useCallback(() => {
|
|
1013
996
|
setClientRect(targetElement ? targetElement.getBoundingClientRect() : null);
|
|
1014
997
|
}, [targetElement]);
|
|
1015
998
|
useResizeObserver(observerCallback);
|
|
@@ -1019,10 +1002,10 @@ const useBoundingClientRect = (targetElement) => {
|
|
|
1019
1002
|
/**
|
|
1020
1003
|
* React hook that forces component render.
|
|
1021
1004
|
*/
|
|
1022
|
-
const useForceRender = () =>
|
|
1005
|
+
const useForceRender = () => react.useReducer((s) => !s, false)[1];
|
|
1023
1006
|
|
|
1024
1007
|
const useEventListener = (target, event, callback) => {
|
|
1025
|
-
|
|
1008
|
+
react.useEffect(() => {
|
|
1026
1009
|
target.addEventListener(event, callback);
|
|
1027
1010
|
return () => {
|
|
1028
1011
|
target.removeEventListener(event, callback);
|
|
@@ -1040,14 +1023,12 @@ const StaticSpotlight = ({ element }) => {
|
|
|
1040
1023
|
width: clientRect.width,
|
|
1041
1024
|
}
|
|
1042
1025
|
: {};
|
|
1043
|
-
return clientRect ? (
|
|
1044
|
-
React__namespace.createElement("div", { className: "pf-v6-c-backdrop pfext-spotlight__with-backdrop" },
|
|
1045
|
-
React__namespace.createElement("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-noanimate", style: style })))) : null;
|
|
1026
|
+
return clientRect ? (jsxRuntime.jsx(Portal, { children: jsxRuntime.jsx("div", Object.assign({ className: "pf-v6-c-backdrop pfext-spotlight__with-backdrop" }, { children: jsxRuntime.jsx("div", { className: "pfext-spotlight pfext-spotlight__element-highlight-noanimate", style: style }) })) })) : null;
|
|
1046
1027
|
};
|
|
1047
1028
|
|
|
1048
1029
|
const Spotlight = ({ selector, interactive }) => {
|
|
1049
1030
|
// if target element is a hidden one return null
|
|
1050
|
-
const element =
|
|
1031
|
+
const element = react.useMemo(() => {
|
|
1051
1032
|
const highlightElement = document.querySelector(selector);
|
|
1052
1033
|
let hiddenElement = highlightElement;
|
|
1053
1034
|
while (hiddenElement) {
|
|
@@ -1062,12 +1043,12 @@ const Spotlight = ({ selector, interactive }) => {
|
|
|
1062
1043
|
if (!element) {
|
|
1063
1044
|
return null;
|
|
1064
1045
|
}
|
|
1065
|
-
return interactive ? (
|
|
1046
|
+
return interactive ? (jsxRuntime.jsx(InteractiveSpotlight, { element: element })) : (jsxRuntime.jsx(StaticSpotlight, { element: element }));
|
|
1066
1047
|
};
|
|
1067
1048
|
|
|
1068
1049
|
const MarkdownHighlightExtension = ({ docContext, rootSelector, }) => {
|
|
1069
|
-
const [selector, setSelector] =
|
|
1070
|
-
|
|
1050
|
+
const [selector, setSelector] = react.useState(null);
|
|
1051
|
+
react.useEffect(() => {
|
|
1071
1052
|
const elements = docContext.querySelectorAll(`${rootSelector} [data-highlight]`);
|
|
1072
1053
|
let timeoutId;
|
|
1073
1054
|
function startHighlight(e) {
|
|
@@ -1086,7 +1067,7 @@ const MarkdownHighlightExtension = ({ docContext, rootSelector, }) => {
|
|
|
1086
1067
|
elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
|
|
1087
1068
|
};
|
|
1088
1069
|
}, [docContext, rootSelector]);
|
|
1089
|
-
|
|
1070
|
+
react.useEffect(() => {
|
|
1090
1071
|
const elements = docContext.querySelectorAll(`${rootSelector} [class^=data-highlight__]`);
|
|
1091
1072
|
let timeoutId;
|
|
1092
1073
|
function startHighlight(e) {
|
|
@@ -1116,7 +1097,7 @@ const MarkdownHighlightExtension = ({ docContext, rootSelector, }) => {
|
|
|
1116
1097
|
if (!selector) {
|
|
1117
1098
|
return null;
|
|
1118
1099
|
}
|
|
1119
|
-
return
|
|
1100
|
+
return jsxRuntime.jsx(Spotlight, { selector: selector, interactive: true });
|
|
1120
1101
|
};
|
|
1121
1102
|
|
|
1122
1103
|
const MARKDOWN_COPY_BUTTON_ID = 'data-copy-for';
|
|
@@ -1124,15 +1105,15 @@ const MARKDOWN_SNIPPET_ID = 'data-snippet-id';
|
|
|
1124
1105
|
const ACCORDION_MARKDOWN_BUTTON_ID = `accordion-markdown-button-id`;
|
|
1125
1106
|
const ACCORDION_MARKDOWN_CONTENT_ID = `accordion-markdown-content-id`;
|
|
1126
1107
|
|
|
1127
|
-
const CopyClipboard = ({ element, rootSelector, docContext
|
|
1128
|
-
const { getResource } =
|
|
1129
|
-
const [showSuccessContent, setShowSuccessContent] =
|
|
1130
|
-
const textToCopy =
|
|
1108
|
+
const CopyClipboard = ({ element, rootSelector, docContext }) => {
|
|
1109
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1110
|
+
const [showSuccessContent, setShowSuccessContent] = react.useState(false);
|
|
1111
|
+
const textToCopy = react.useMemo(() => {
|
|
1131
1112
|
var _a;
|
|
1132
1113
|
const copyTextId = element.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
1133
1114
|
return (_a = docContext.querySelector(`${rootSelector} [${MARKDOWN_SNIPPET_ID}="${copyTextId}"]`)) === null || _a === void 0 ? void 0 : _a.innerText;
|
|
1134
1115
|
}, [element, docContext, rootSelector]);
|
|
1135
|
-
useEventListener(element, 'click',
|
|
1116
|
+
useEventListener(element, 'click', react.useCallback(() => {
|
|
1136
1117
|
navigator.clipboard
|
|
1137
1118
|
.writeText(textToCopy.trim())
|
|
1138
1119
|
.then(() => {
|
|
@@ -1140,24 +1121,24 @@ const CopyClipboard = ({ element, rootSelector, docContext, }) => {
|
|
|
1140
1121
|
})
|
|
1141
1122
|
.catch(() => { });
|
|
1142
1123
|
}, [textToCopy]));
|
|
1143
|
-
useEventListener(element, 'mouseleave',
|
|
1124
|
+
useEventListener(element, 'mouseleave', react.useCallback(() => {
|
|
1144
1125
|
setShowSuccessContent(false);
|
|
1145
1126
|
}, []));
|
|
1146
|
-
return showSuccessContent ? (
|
|
1127
|
+
return showSuccessContent ? (jsxRuntime.jsx(reactCore.Tooltip, { isVisible: true, triggerRef: () => element, content: getResource('Successfully copied to clipboard!'), className: "pfext-quick-start__base" }, "after-copy")) : (jsxRuntime.jsx(reactCore.Tooltip, { triggerRef: () => element, content: getResource('Copy to clipboard'), className: "pfext-quick-start__base" }, "before-copy"));
|
|
1147
1128
|
};
|
|
1148
|
-
const MarkdownCopyClipboard = ({ docContext, rootSelector
|
|
1129
|
+
const MarkdownCopyClipboard = ({ docContext, rootSelector }) => {
|
|
1149
1130
|
const elements = docContext.querySelectorAll(`${rootSelector} [${MARKDOWN_COPY_BUTTON_ID}]`);
|
|
1150
|
-
return elements.length > 0 ? (
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1131
|
+
return elements.length > 0 ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from(elements).map((elm) => {
|
|
1132
|
+
const attributeValue = elm.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
1133
|
+
return (jsxRuntime.jsx(CopyClipboard, { element: elm, rootSelector: rootSelector, docContext: docContext }, attributeValue));
|
|
1134
|
+
}) })) : null;
|
|
1154
1135
|
};
|
|
1155
1136
|
|
|
1156
1137
|
const removeTemplateWhitespace = (template) => template.replace(/>(?:\s|\n)+</g, '><');
|
|
1157
1138
|
|
|
1158
1139
|
const useInlineCopyClipboardShowdownExtension = () => {
|
|
1159
|
-
const { getResource } =
|
|
1160
|
-
return
|
|
1140
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1141
|
+
return react.useMemo(() => ({
|
|
1161
1142
|
type: 'lang',
|
|
1162
1143
|
regex: /`([^`](.*?)[^`])`{{copy}}/g,
|
|
1163
1144
|
replace: (text, group, _, groupId) => {
|
|
@@ -1169,7 +1150,7 @@ const useInlineCopyClipboardShowdownExtension = () => {
|
|
|
1169
1150
|
<span class="pf-v6-c-clipboard-copy__actions">
|
|
1170
1151
|
<span class="pf-v6-c-clipboard-copy__actions-item">
|
|
1171
1152
|
<button class="pf-v6-c-button pf-m-plain" aria-label="${getResource('Copy to clipboard')}" ${MARKDOWN_COPY_BUTTON_ID}="${groupId}">
|
|
1172
|
-
${server.renderToStaticMarkup(
|
|
1153
|
+
${server.renderToStaticMarkup(jsxRuntime.jsx(CopyIcon__default["default"], {}))}
|
|
1173
1154
|
</button>
|
|
1174
1155
|
</span>
|
|
1175
1156
|
</span>
|
|
@@ -1178,10 +1159,9 @@ const useInlineCopyClipboardShowdownExtension = () => {
|
|
|
1178
1159
|
}), [getResource]);
|
|
1179
1160
|
};
|
|
1180
1161
|
|
|
1181
|
-
/* eslint-disable max-len */
|
|
1182
1162
|
const useMultilineCopyClipboardShowdownExtension = () => {
|
|
1183
|
-
const { getResource } =
|
|
1184
|
-
return
|
|
1163
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1164
|
+
return react.useMemo(() => ({
|
|
1185
1165
|
type: 'lang',
|
|
1186
1166
|
regex: /```[\n]\s*((((?!```).)*?\n)+)\s*```{{copy}}/g,
|
|
1187
1167
|
replace: (text, group, _1, _2, groupId) => {
|
|
@@ -1193,7 +1173,7 @@ const useMultilineCopyClipboardShowdownExtension = () => {
|
|
|
1193
1173
|
<div class="pf-v6-c-code-block__actions">
|
|
1194
1174
|
<div class="pf-v6-c-code-block__actions-item">
|
|
1195
1175
|
<button class="pf-v6-c-button pf-m-plain" type="button" aria-label="${getResource('Copy to clipboard')}" ${MARKDOWN_COPY_BUTTON_ID}="${groupId}">
|
|
1196
|
-
${server.renderToStaticMarkup(
|
|
1176
|
+
${server.renderToStaticMarkup(jsxRuntime.jsx(CopyIcon__default["default"], {}))}
|
|
1197
1177
|
</button>
|
|
1198
1178
|
</div>
|
|
1199
1179
|
</div>
|
|
@@ -1206,6 +1186,155 @@ const useMultilineCopyClipboardShowdownExtension = () => {
|
|
|
1206
1186
|
}), [getResource]);
|
|
1207
1187
|
};
|
|
1208
1188
|
|
|
1189
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1190
|
+
const DOMPurify$2 = require('dompurify');
|
|
1191
|
+
var AdmonitionType;
|
|
1192
|
+
(function (AdmonitionType) {
|
|
1193
|
+
AdmonitionType["TIP"] = "TIP";
|
|
1194
|
+
AdmonitionType["NOTE"] = "NOTE";
|
|
1195
|
+
AdmonitionType["IMPORTANT"] = "IMPORTANT";
|
|
1196
|
+
AdmonitionType["WARNING"] = "WARNING";
|
|
1197
|
+
AdmonitionType["CAUTION"] = "CAUTION";
|
|
1198
|
+
})(AdmonitionType || (AdmonitionType = {}));
|
|
1199
|
+
const admonitionToAlertVariantMap = {
|
|
1200
|
+
[AdmonitionType.NOTE]: { variant: 'info' },
|
|
1201
|
+
[AdmonitionType.TIP]: { variant: 'custom', customIcon: jsxRuntime.jsx(LightbulbIcon__default["default"], {}) },
|
|
1202
|
+
[AdmonitionType.IMPORTANT]: { variant: 'danger' },
|
|
1203
|
+
[AdmonitionType.CAUTION]: { variant: 'warning', customIcon: jsxRuntime.jsx(FireIcon__default["default"], {}) },
|
|
1204
|
+
[AdmonitionType.WARNING]: { variant: 'warning' },
|
|
1205
|
+
};
|
|
1206
|
+
const useAdmonitionShowdownExtension = () =>
|
|
1207
|
+
// const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
|
|
1208
|
+
react.useMemo(() => ({
|
|
1209
|
+
type: 'lang',
|
|
1210
|
+
regex: /\[(.+)]{{(admonition) ([\w-]+)}}/g,
|
|
1211
|
+
replace: (text, content, admonitionLabel, admonitionType) => {
|
|
1212
|
+
if (!content || !admonitionLabel || !admonitionType) {
|
|
1213
|
+
return text;
|
|
1214
|
+
}
|
|
1215
|
+
if (admonitionLabel !== 'admonition') {
|
|
1216
|
+
return text;
|
|
1217
|
+
}
|
|
1218
|
+
admonitionType = admonitionType.toUpperCase();
|
|
1219
|
+
// Process markdown content directly using marked
|
|
1220
|
+
const processedContent = marked.marked.parseInline(content);
|
|
1221
|
+
const sanitizedContent = DOMPurify$2.sanitize(processedContent);
|
|
1222
|
+
// Handle unknown admonition types by defaulting to NOTE
|
|
1223
|
+
const admonitionConfig = admonitionToAlertVariantMap[admonitionType] || admonitionToAlertVariantMap.NOTE;
|
|
1224
|
+
const { variant, customIcon } = admonitionConfig;
|
|
1225
|
+
const pfAlert = (jsxRuntime.jsx(reactCore.Alert, Object.assign({ variant: variant }, (customIcon && { customIcon }), { isInline: true, title: admonitionType, className: "pfext-markdown-admonition" }, { children: jsxRuntime.jsx("div", { dangerouslySetInnerHTML: { __html: sanitizedContent } }) })));
|
|
1226
|
+
return removeTemplateWhitespace(server.renderToStaticMarkup(pfAlert));
|
|
1227
|
+
},
|
|
1228
|
+
}), []);
|
|
1229
|
+
|
|
1230
|
+
const useCodeShowdownExtension = () => react.useMemo(() => ({
|
|
1231
|
+
type: 'output',
|
|
1232
|
+
regex: /<pre><code>(.*?)\n?<\/code><\/pre>/g,
|
|
1233
|
+
replace: (text, content) => {
|
|
1234
|
+
if (!content) {
|
|
1235
|
+
return text;
|
|
1236
|
+
}
|
|
1237
|
+
const pfCodeBlock = jsxRuntime.jsx(reactCore.CodeBlock, { children: content });
|
|
1238
|
+
return removeTemplateWhitespace(server.renderToStaticMarkup(pfCodeBlock));
|
|
1239
|
+
},
|
|
1240
|
+
}), []);
|
|
1241
|
+
|
|
1242
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1243
|
+
const DOMPurify$1 = require('dompurify');
|
|
1244
|
+
const useAccordionShowdownExtension = () => react.useMemo(() => ({
|
|
1245
|
+
type: 'lang',
|
|
1246
|
+
regex: /\[(.+)]{{(accordion) ("(.*?)")}}/g,
|
|
1247
|
+
replace: (_text, accordionContent, _command, _quotedHeading, accordionHeading) => {
|
|
1248
|
+
const accordionId = String(accordionHeading).replace(/\s/g, '-');
|
|
1249
|
+
// Process accordion content with markdown
|
|
1250
|
+
const processedContent = marked.marked.parseInline(accordionContent);
|
|
1251
|
+
const sanitizedContent = DOMPurify$1.sanitize(processedContent);
|
|
1252
|
+
return removeTemplateWhitespace(server.renderToStaticMarkup(jsxRuntime.jsx(reactCore.Accordion, { children: jsxRuntime.jsxs(reactCore.AccordionItem, { children: [jsxRuntime.jsx(reactCore.AccordionToggle, Object.assign({ id: `${ACCORDION_MARKDOWN_BUTTON_ID}-${accordionId}` }, { children: accordionHeading })), jsxRuntime.jsx(reactCore.AccordionContent, Object.assign({ id: `${ACCORDION_MARKDOWN_CONTENT_ID}-${accordionId}`, hidden: true }, { children: jsxRuntime.jsx("div", { dangerouslySetInnerHTML: { __html: sanitizedContent } }) }))] }) })));
|
|
1253
|
+
},
|
|
1254
|
+
}), []);
|
|
1255
|
+
|
|
1256
|
+
const AccordionShowdownHandler = ({ buttonElement, contentElement, }) => {
|
|
1257
|
+
const [expanded, setExpanded] = react.useState(false);
|
|
1258
|
+
const handleClick = () => {
|
|
1259
|
+
const newExpanded = !expanded;
|
|
1260
|
+
const expandedModifier = 'pf-m-expanded';
|
|
1261
|
+
// Find the accordion item element (parent of the button)
|
|
1262
|
+
const accordionItem = buttonElement.closest('.pf-v6-c-accordion__item');
|
|
1263
|
+
// Update button - both visual state and aria-expanded
|
|
1264
|
+
buttonElement.className = `pf-v6-c-accordion__toggle ${newExpanded ? expandedModifier : ''}`;
|
|
1265
|
+
buttonElement.setAttribute('aria-expanded', newExpanded.toString());
|
|
1266
|
+
// Update content - both visual state and hidden attribute
|
|
1267
|
+
contentElement.hidden = !newExpanded;
|
|
1268
|
+
contentElement.className = `pf-v6-c-accordion__expandable-content ${newExpanded ? expandedModifier : ''}`;
|
|
1269
|
+
// Update accordion item
|
|
1270
|
+
if (accordionItem) {
|
|
1271
|
+
accordionItem.className = `pf-v6-c-accordion__item ${newExpanded ? expandedModifier : ''}`;
|
|
1272
|
+
}
|
|
1273
|
+
setExpanded(newExpanded);
|
|
1274
|
+
};
|
|
1275
|
+
useEventListener(buttonElement, 'click', handleClick);
|
|
1276
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
1277
|
+
};
|
|
1278
|
+
const AccordionRenderExtension = ({ docContext }) => {
|
|
1279
|
+
const buttonElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_BUTTON_ID}]`);
|
|
1280
|
+
const contentElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_CONTENT_ID}]`);
|
|
1281
|
+
return buttonElements.length > 0 ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from(buttonElements).map((elm) => {
|
|
1282
|
+
const content = Array.from(contentElements).find((elm2) => {
|
|
1283
|
+
const elmId = elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1];
|
|
1284
|
+
const elm2Id = elm2.id.split(ACCORDION_MARKDOWN_CONTENT_ID)[1];
|
|
1285
|
+
return elmId === elm2Id;
|
|
1286
|
+
});
|
|
1287
|
+
return (jsxRuntime.jsx(AccordionShowdownHandler, { buttonElement: elm, contentElement: content }, elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1]));
|
|
1288
|
+
}) })) : null;
|
|
1289
|
+
};
|
|
1290
|
+
|
|
1291
|
+
const FallbackImg = ({ src, alt, className, fallback }) => {
|
|
1292
|
+
const [isSrcValid, setIsSrcValid] = react.useState(true);
|
|
1293
|
+
if (src && isSrcValid) {
|
|
1294
|
+
return jsxRuntime.jsx("img", { className: className, src: src, alt: alt, onError: () => setIsSrcValid(false) });
|
|
1295
|
+
}
|
|
1296
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
|
|
1297
|
+
};
|
|
1298
|
+
|
|
1299
|
+
const DASH = '-';
|
|
1300
|
+
|
|
1301
|
+
const PopoverStatus = ({ hideHeader, children, isVisible = null, statusBody, title, onHide, onShow, }) => (jsxRuntime.jsx(reactCore.Popover, Object.assign({ position: reactCore.PopoverPosition.right, headerContent: hideHeader ? null : title, bodyContent: children, "aria-label": title, onHide: onHide, onShow: onShow, isVisible: isVisible }, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "link", isInline: true }, { children: statusBody })) })));
|
|
1302
|
+
|
|
1303
|
+
const StatusIconAndText = ({ icon, title, spin, iconOnly, noTooltip, className, }) => {
|
|
1304
|
+
if (!title) {
|
|
1305
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: DASH });
|
|
1306
|
+
}
|
|
1307
|
+
return (jsxRuntime.jsxs("span", Object.assign({ className: reactStyles.css('pfext-icon-and-text', className), title: iconOnly && !noTooltip ? title : undefined }, { children: [icon &&
|
|
1308
|
+
react.cloneElement(icon, {
|
|
1309
|
+
className: reactStyles.css(spin && 'fa-spin', icon.props.className, !iconOnly && 'pfext-icon-and-text__icon pfext-icon-flex-child'),
|
|
1310
|
+
}), !iconOnly && jsxRuntime.jsx(CamelCaseWrap, { value: title, dataTest: "status-text" })] })));
|
|
1311
|
+
};
|
|
1312
|
+
|
|
1313
|
+
const GenericStatus = (props) => {
|
|
1314
|
+
const { Icon, children, popoverTitle, title, noTooltip, iconOnly } = props, restProps = tslib.__rest(props, ["Icon", "children", "popoverTitle", "title", "noTooltip", "iconOnly"]);
|
|
1315
|
+
const renderIcon = iconOnly && !noTooltip ? jsxRuntime.jsx(Icon, { title: title }) : jsxRuntime.jsx(Icon, {});
|
|
1316
|
+
const statusBody = (jsxRuntime.jsx(StatusIconAndText, Object.assign({}, restProps, { noTooltip: noTooltip, title: title, iconOnly: iconOnly, icon: renderIcon })));
|
|
1317
|
+
return react.Children.toArray(children).length ? (jsxRuntime.jsx(PopoverStatus, Object.assign({ title: popoverTitle || title }, restProps, { statusBody: statusBody }, { children: children }))) : (statusBody);
|
|
1318
|
+
};
|
|
1319
|
+
|
|
1320
|
+
const GreenCheckCircleIcon = ({ className, title, size }) => (jsxRuntime.jsx(reactCore.Icon, Object.assign({ size: size, status: "success" }, { children: jsxRuntime.jsx(CheckCircleIcon__default["default"], { "data-test": "success-icon", className: className, title: title }) })));
|
|
1321
|
+
|
|
1322
|
+
const SuccessStatus = (props) => (jsxRuntime.jsx(GenericStatus, Object.assign({}, props, { Icon: GreenCheckCircleIcon, title: props.title || 'Healthy' })));
|
|
1323
|
+
SuccessStatus.displayName = 'SuccessStatus';
|
|
1324
|
+
|
|
1325
|
+
const Status = ({ status, title, iconOnly, noTooltip, className }) => {
|
|
1326
|
+
const statusProps = { title: title || status, iconOnly, noTooltip, className };
|
|
1327
|
+
switch (status) {
|
|
1328
|
+
case 'In Progress':
|
|
1329
|
+
return jsxRuntime.jsx(StatusIconAndText, Object.assign({}, statusProps, { icon: jsxRuntime.jsx(SyncAltIcon__default["default"], {}) }));
|
|
1330
|
+
case 'Complete':
|
|
1331
|
+
return jsxRuntime.jsx(SuccessStatus, Object.assign({}, statusProps));
|
|
1332
|
+
default:
|
|
1333
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: status || DASH });
|
|
1334
|
+
}
|
|
1335
|
+
};
|
|
1336
|
+
const StatusIcon = ({ status }) => jsxRuntime.jsx(Status, { status: status, iconOnly: true });
|
|
1337
|
+
|
|
1209
1338
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1210
1339
|
const DOMPurify = require('dompurify');
|
|
1211
1340
|
const markdownConvert = (markdown, extensions) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -1217,7 +1346,7 @@ const markdownConvert = (markdown, extensions) => tslib.__awaiter(void 0, void 0
|
|
|
1217
1346
|
node.setAttribute('rel', 'noopener noreferrer');
|
|
1218
1347
|
return node;
|
|
1219
1348
|
}
|
|
1220
|
-
// add PF content classes
|
|
1349
|
+
// add PF content classes to standard elements (details blocks get handled separately)
|
|
1221
1350
|
if (node.nodeType === 1) {
|
|
1222
1351
|
const contentElements = [
|
|
1223
1352
|
'ul',
|
|
@@ -1268,13 +1397,82 @@ const markdownConvert = (markdown, extensions) => tslib.__awaiter(void 0, void 0
|
|
|
1268
1397
|
const reversedMarkdown = reverseString(markdown);
|
|
1269
1398
|
const reverseMarkdownWithSubstitutedCodeFences = reversedMarkdown.replace(/{{```((.|\n)*?)```/g, '{{@@@$1@@@');
|
|
1270
1399
|
const markdownWithSubstitutedCodeFences = reverseString(reverseMarkdownWithSubstitutedCodeFences);
|
|
1271
|
-
|
|
1400
|
+
// Fix malformed HTML entities early in the process
|
|
1401
|
+
let preprocessedMarkdown = markdownWithSubstitutedCodeFences;
|
|
1402
|
+
preprocessedMarkdown = preprocessedMarkdown
|
|
1403
|
+
.replace(/ ([^;])/g, ' $1')
|
|
1404
|
+
.replace(/&nbsp;/g, ' ');
|
|
1405
|
+
preprocessedMarkdown = preprocessedMarkdown.replace(/ (?![;])/g, ' ');
|
|
1406
|
+
// Process content in segments to ensure markdown parsing continues after HTML blocks
|
|
1407
|
+
const htmlBlockRegex = /(<(?:details|div|section|article)[^>]*>[\s\S]*?<\/(?:details|div|section|article)>)/g;
|
|
1408
|
+
let parsedMarkdown = '';
|
|
1409
|
+
// Check if there are any HTML blocks
|
|
1410
|
+
if (htmlBlockRegex.test(preprocessedMarkdown)) {
|
|
1411
|
+
// Reset regex for actual processing
|
|
1412
|
+
htmlBlockRegex.lastIndex = 0;
|
|
1413
|
+
let lastIndex = 0;
|
|
1414
|
+
let match;
|
|
1415
|
+
while ((match = htmlBlockRegex.exec(preprocessedMarkdown)) !== null) {
|
|
1416
|
+
// Process markdown before the HTML block
|
|
1417
|
+
const markdownBefore = preprocessedMarkdown.slice(lastIndex, match.index).trim();
|
|
1418
|
+
if (markdownBefore) {
|
|
1419
|
+
const parsed = yield marked.marked.parse(markdownBefore);
|
|
1420
|
+
parsedMarkdown += parsed;
|
|
1421
|
+
}
|
|
1422
|
+
// Process the HTML block: parse markdown content inside while preserving HTML structure
|
|
1423
|
+
let htmlBlock = match[1];
|
|
1424
|
+
// Find and process markdown content inside HTML tags
|
|
1425
|
+
const contentRegex = />(\s*[\s\S]*?)\s*</g;
|
|
1426
|
+
const contentMatches = [];
|
|
1427
|
+
let contentMatch;
|
|
1428
|
+
while ((contentMatch = contentRegex.exec(htmlBlock)) !== null) {
|
|
1429
|
+
const content = contentMatch[1];
|
|
1430
|
+
// Only process content that has markdown formatting but no extension syntax
|
|
1431
|
+
if (content.trim() &&
|
|
1432
|
+
!content.includes('{{') &&
|
|
1433
|
+
(content.includes('**') || content.includes('- ') || content.includes('\n'))) {
|
|
1434
|
+
// This looks like markdown content without extensions - parse it as block content
|
|
1435
|
+
const parsedContent = yield marked.marked.parse(content.trim());
|
|
1436
|
+
// Remove wrapping <p> tags if they exist since we're inside HTML already
|
|
1437
|
+
const cleanedContent = parsedContent.replace(/^<p[^>]*>([\s\S]*)<\/p>[\s]*$/g, '$1');
|
|
1438
|
+
contentMatches.push({
|
|
1439
|
+
original: contentMatch[0],
|
|
1440
|
+
replacement: `>${cleanedContent}<`,
|
|
1441
|
+
});
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
// Apply the content replacements
|
|
1445
|
+
contentMatches.forEach(({ original, replacement }) => {
|
|
1446
|
+
htmlBlock = htmlBlock.replace(original, replacement);
|
|
1447
|
+
});
|
|
1448
|
+
// Apply extensions (like admonitions) to the processed HTML block
|
|
1449
|
+
if (extensions) {
|
|
1450
|
+
extensions.forEach(({ regex, replace }) => {
|
|
1451
|
+
if (regex) {
|
|
1452
|
+
htmlBlock = htmlBlock.replace(regex, replace);
|
|
1453
|
+
}
|
|
1454
|
+
});
|
|
1455
|
+
}
|
|
1456
|
+
parsedMarkdown += htmlBlock;
|
|
1457
|
+
lastIndex = htmlBlockRegex.lastIndex;
|
|
1458
|
+
}
|
|
1459
|
+
// Process any remaining markdown after the last HTML block
|
|
1460
|
+
const markdownAfter = preprocessedMarkdown.slice(lastIndex).trim();
|
|
1461
|
+
if (markdownAfter) {
|
|
1462
|
+
const parsed = yield marked.marked.parse(markdownAfter);
|
|
1463
|
+
parsedMarkdown += parsed;
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
else {
|
|
1467
|
+
// No HTML blocks found, process normally
|
|
1468
|
+
parsedMarkdown = yield marked.marked.parse(preprocessedMarkdown);
|
|
1469
|
+
}
|
|
1272
1470
|
// Swap the temporary tokens back to code fences before we run the extensions
|
|
1273
1471
|
let md = parsedMarkdown.replace(/@@@/g, '```');
|
|
1274
1472
|
if (extensions) {
|
|
1275
1473
|
// Convert code spans back to md format before we run the custom extension regexes
|
|
1276
1474
|
md = md.replace(/<code>(.*)<\/code>/g, '`$1`');
|
|
1277
|
-
extensions.forEach(({ regex, replace }) => {
|
|
1475
|
+
extensions.forEach(({ regex, replace }, _index) => {
|
|
1278
1476
|
if (regex) {
|
|
1279
1477
|
md = md.replace(regex, replace);
|
|
1280
1478
|
}
|
|
@@ -1285,9 +1483,9 @@ const markdownConvert = (markdown, extensions) => tslib.__awaiter(void 0, void 0
|
|
|
1285
1483
|
return DOMPurify.sanitize(md);
|
|
1286
1484
|
});
|
|
1287
1485
|
const SyncMarkdownView = ({ content, emptyMsg, extensions, renderExtension, exactHeight, inline, className, }) => {
|
|
1288
|
-
const { getResource } =
|
|
1289
|
-
const [markup, setMarkup] =
|
|
1290
|
-
|
|
1486
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1487
|
+
const [markup, setMarkup] = react.useState('');
|
|
1488
|
+
react.useEffect(() => {
|
|
1291
1489
|
function getMd() {
|
|
1292
1490
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
1293
1491
|
const md = yield markdownConvert(content || emptyMsg || getResource('Not available'), extensions);
|
|
@@ -1303,7 +1501,7 @@ const SyncMarkdownView = ({ content, emptyMsg, extensions, renderExtension, exac
|
|
|
1303
1501
|
isEmpty: !content,
|
|
1304
1502
|
className,
|
|
1305
1503
|
};
|
|
1306
|
-
return inline ?
|
|
1504
|
+
return inline ? jsxRuntime.jsx(InlineMarkdownView, Object.assign({}, innerProps)) : jsxRuntime.jsx(IFrameMarkdownView, Object.assign({}, innerProps));
|
|
1307
1505
|
};
|
|
1308
1506
|
const uniqueId = (function () {
|
|
1309
1507
|
let num = 0;
|
|
@@ -1315,8 +1513,8 @@ const uniqueId = (function () {
|
|
|
1315
1513
|
})();
|
|
1316
1514
|
const RenderExtension = ({ renderExtension, selector, markup, docContext, }) => {
|
|
1317
1515
|
const forceRender = useForceRender();
|
|
1318
|
-
const markupRef =
|
|
1319
|
-
const shouldRenderExtension =
|
|
1516
|
+
const markupRef = react.useRef(null);
|
|
1517
|
+
const shouldRenderExtension = react.useCallback(() => {
|
|
1320
1518
|
if (markupRef.current === markup) {
|
|
1321
1519
|
return true;
|
|
1322
1520
|
}
|
|
@@ -1329,25 +1527,23 @@ const RenderExtension = ({ renderExtension, selector, markup, docContext, }) =>
|
|
|
1329
1527
|
* which causes the component rendered by renderExtension to receive old copy of document
|
|
1330
1528
|
* use forceRender to delay the rendering of extension by one render cycle
|
|
1331
1529
|
*/
|
|
1332
|
-
|
|
1530
|
+
react.useEffect(() => {
|
|
1333
1531
|
if (renderExtension) {
|
|
1334
1532
|
forceRender();
|
|
1335
1533
|
}
|
|
1336
1534
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1337
1535
|
}, [markup]);
|
|
1338
|
-
return (
|
|
1536
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: shouldRenderExtension() ? renderExtension === null || renderExtension === void 0 ? void 0 : renderExtension(docContext !== null && docContext !== void 0 ? docContext : document, selector) : null }));
|
|
1339
1537
|
};
|
|
1340
1538
|
const InlineMarkdownView = ({ markup, isEmpty, renderExtension, className, }) => {
|
|
1341
|
-
const id =
|
|
1342
|
-
return (
|
|
1343
|
-
React__namespace.createElement("div", { dangerouslySetInnerHTML: { __html: markup } }),
|
|
1344
|
-
renderExtension && (React__namespace.createElement(RenderExtension, { renderExtension: renderExtension, selector: `#${id}`, markup: markup }))));
|
|
1539
|
+
const id = react.useMemo(() => uniqueId('markdown'), []);
|
|
1540
|
+
return (jsxRuntime.jsxs("div", Object.assign({ className: reactStyles.css({ 'is-empty': isEmpty }, className), id: id }, { children: [jsxRuntime.jsx("div", { style: { marginBlockEnd: 'var(--pf-t-global--spacer--md)' }, dangerouslySetInnerHTML: { __html: markup } }), renderExtension && (jsxRuntime.jsx(RenderExtension, { renderExtension: renderExtension, selector: `#${id}`, markup: markup }))] })));
|
|
1345
1541
|
};
|
|
1346
1542
|
const IFrameMarkdownView = ({ exactHeight, markup, isEmpty, renderExtension, className, }) => {
|
|
1347
|
-
const [frame, setFrame] =
|
|
1348
|
-
const [loaded, setLoaded] =
|
|
1349
|
-
const updateTimeoutHandle =
|
|
1350
|
-
const updateDimensions =
|
|
1543
|
+
const [frame, setFrame] = react.useState();
|
|
1544
|
+
const [loaded, setLoaded] = react.useState(false);
|
|
1545
|
+
const updateTimeoutHandle = react.useRef(null);
|
|
1546
|
+
const updateDimensions = react.useCallback(() => {
|
|
1351
1547
|
var _a;
|
|
1352
1548
|
if (!((_a = frame === null || frame === void 0 ? void 0 : frame.contentWindow) === null || _a === void 0 ? void 0 : _a.document.body.firstChild)) {
|
|
1353
1549
|
return;
|
|
@@ -1364,10 +1560,10 @@ const IFrameMarkdownView = ({ exactHeight, markup, isEmpty, renderExtension, cla
|
|
|
1364
1560
|
}
|
|
1365
1561
|
});
|
|
1366
1562
|
}, [frame, exactHeight]);
|
|
1367
|
-
|
|
1563
|
+
react.useEffect(() => () => {
|
|
1368
1564
|
clearTimeout(updateTimeoutHandle.current);
|
|
1369
1565
|
}, []);
|
|
1370
|
-
const onLoad =
|
|
1566
|
+
const onLoad = react.useCallback(() => {
|
|
1371
1567
|
updateDimensions();
|
|
1372
1568
|
setLoaded(true);
|
|
1373
1569
|
}, [updateDimensions]);
|
|
@@ -1400,9 +1596,9 @@ const IFrameMarkdownView = ({ exactHeight, markup, isEmpty, renderExtension, cla
|
|
|
1400
1596
|
}
|
|
1401
1597
|
</style>
|
|
1402
1598
|
<body class="pf-m-redhat-font"><div style="overflow-y: auto;">${markup}</div></body>`;
|
|
1403
|
-
return (
|
|
1404
|
-
|
|
1405
|
-
|
|
1599
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("iframe", { title: "Markdown content preview", sandbox: "allow-popups allow-popups-to-escape-sandbox allow-same-origin", srcDoc: contents, style: { border: '0px', display: 'block', width: '100%', height: '0' }, ref: (r) => {
|
|
1600
|
+
setFrame(r);
|
|
1601
|
+
}, onLoad: () => onLoad(), className: className }), loaded && frame && renderExtension && (jsxRuntime.jsx(RenderExtension, { markup: markup, selector: '', renderExtension: renderExtension, docContext: frame.contentDocument }))] }));
|
|
1406
1602
|
};
|
|
1407
1603
|
|
|
1408
1604
|
const LINK_LABEL = '[\\d\\w\\s-()$!]+';
|
|
@@ -1412,13 +1608,13 @@ const SELECTOR_ID = `[\\w-]+`;
|
|
|
1412
1608
|
const HIGHLIGHT_REGEXP = new RegExp(`\\[(${LINK_LABEL})]{{(${HIGHLIGHT_ACTIONS.join('|')}) (${SELECTOR_ID})}}`, 'g');
|
|
1413
1609
|
|
|
1414
1610
|
const QuickStartMarkdownView = ({ content, exactHeight, className, }) => {
|
|
1415
|
-
const { markdown } =
|
|
1611
|
+
const { markdown } = react.useContext(QuickStartContext);
|
|
1416
1612
|
const inlineCopyClipboardShowdownExtension = useInlineCopyClipboardShowdownExtension();
|
|
1417
1613
|
const multilineCopyClipboardShowdownExtension = useMultilineCopyClipboardShowdownExtension();
|
|
1418
1614
|
const admonitionShowdownExtension = useAdmonitionShowdownExtension();
|
|
1419
1615
|
const codeShowdownExtension = useCodeShowdownExtension();
|
|
1420
1616
|
const accordionShowdownExtension = useAccordionShowdownExtension();
|
|
1421
|
-
return (
|
|
1617
|
+
return (jsxRuntime.jsx(SyncMarkdownView, { inline: true, content: content, exactHeight: exactHeight, extensions: [
|
|
1422
1618
|
{
|
|
1423
1619
|
type: 'lang',
|
|
1424
1620
|
regex: HIGHLIGHT_REGEXP,
|
|
@@ -1443,203 +1639,45 @@ const QuickStartMarkdownView = ({ content, exactHeight, className, }) => {
|
|
|
1443
1639
|
codeShowdownExtension,
|
|
1444
1640
|
accordionShowdownExtension,
|
|
1445
1641
|
...(markdown ? markdown.extensions : []),
|
|
1446
|
-
], renderExtension: (docContext, rootSelector) => (
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
React__namespace.createElement(MarkdownCopyClipboard, { docContext: docContext, rootSelector: rootSelector }),
|
|
1450
|
-
markdown &&
|
|
1451
|
-
markdown.renderExtension &&
|
|
1452
|
-
markdown.renderExtension(docContext, rootSelector))), className: className }));
|
|
1642
|
+
], renderExtension: (docContext, rootSelector) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(AccordionRenderExtension, { docContext: docContext }), jsxRuntime.jsx(MarkdownHighlightExtension, { docContext: docContext, rootSelector: rootSelector }), jsxRuntime.jsx(MarkdownCopyClipboard, { docContext: docContext, rootSelector: rootSelector }), markdown &&
|
|
1643
|
+
markdown.renderExtension &&
|
|
1644
|
+
markdown.renderExtension(docContext, rootSelector)] })), className: className }));
|
|
1453
1645
|
};
|
|
1454
1646
|
|
|
1455
|
-
var AdmonitionType;
|
|
1456
|
-
(function (AdmonitionType) {
|
|
1457
|
-
AdmonitionType["TIP"] = "TIP";
|
|
1458
|
-
AdmonitionType["NOTE"] = "NOTE";
|
|
1459
|
-
AdmonitionType["IMPORTANT"] = "IMPORTANT";
|
|
1460
|
-
AdmonitionType["WARNING"] = "WARNING";
|
|
1461
|
-
AdmonitionType["CAUTION"] = "CAUTION";
|
|
1462
|
-
})(AdmonitionType || (AdmonitionType = {}));
|
|
1463
|
-
const admonitionToAlertVariantMap = {
|
|
1464
|
-
[AdmonitionType.NOTE]: { variant: 'info' },
|
|
1465
|
-
[AdmonitionType.TIP]: { variant: 'custom', customIcon: React__namespace.createElement(LightbulbIcon__default["default"], null) },
|
|
1466
|
-
[AdmonitionType.IMPORTANT]: { variant: 'danger' },
|
|
1467
|
-
[AdmonitionType.CAUTION]: { variant: 'warning', customIcon: React__namespace.createElement(FireIcon__default["default"], null) },
|
|
1468
|
-
[AdmonitionType.WARNING]: { variant: 'warning' },
|
|
1469
|
-
};
|
|
1470
|
-
const useAdmonitionShowdownExtension = () =>
|
|
1471
|
-
// const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
|
|
1472
|
-
React__namespace.useMemo(() => ({
|
|
1473
|
-
type: 'lang',
|
|
1474
|
-
regex: /\[(.+)]{{(admonition) ([\w-]+)}}/g,
|
|
1475
|
-
replace: (text, content, admonitionLabel, admonitionType, groupId) => {
|
|
1476
|
-
if (!content || !admonitionLabel || !admonitionType || !groupId) {
|
|
1477
|
-
return text;
|
|
1478
|
-
}
|
|
1479
|
-
admonitionType = admonitionType.toUpperCase();
|
|
1480
|
-
const { variant, customIcon } = admonitionToAlertVariantMap[admonitionType];
|
|
1481
|
-
const mdContent = React__namespace.createElement(QuickStartMarkdownView, { content: content });
|
|
1482
|
-
const pfAlert = (React__namespace.createElement(reactCore.Alert, Object.assign({ variant: variant }, (customIcon && { customIcon }), { isInline: true, title: admonitionType, className: "pfext-markdown-admonition" }), mdContent));
|
|
1483
|
-
return removeTemplateWhitespace(server.renderToStaticMarkup(pfAlert));
|
|
1484
|
-
},
|
|
1485
|
-
}), []);
|
|
1486
|
-
|
|
1487
|
-
const useCodeShowdownExtension = () => React__namespace.useMemo(() => ({
|
|
1488
|
-
type: 'output',
|
|
1489
|
-
regex: /<pre><code>(.*?)\n?<\/code><\/pre>/g,
|
|
1490
|
-
replace: (text, content) => {
|
|
1491
|
-
if (!content) {
|
|
1492
|
-
return text;
|
|
1493
|
-
}
|
|
1494
|
-
const pfCodeBlock = React__namespace.createElement(reactCore.CodeBlock, null, content);
|
|
1495
|
-
return removeTemplateWhitespace(server.renderToStaticMarkup(pfCodeBlock));
|
|
1496
|
-
},
|
|
1497
|
-
}), []);
|
|
1498
|
-
|
|
1499
|
-
const useAccordionShowdownExtension = () => React__namespace.useMemo(() => ({
|
|
1500
|
-
type: 'lang',
|
|
1501
|
-
regex: /\[(.+)]{{(accordion) ("(.*?)")}}/g,
|
|
1502
|
-
replace: (_text, accordionContent, _command, accordionHeading) => {
|
|
1503
|
-
const accordionId = String(accordionHeading).replace(/\s/g, '-');
|
|
1504
|
-
return removeTemplateWhitespace(server.renderToStaticMarkup(React__namespace.createElement(React__namespace.Fragment, null,
|
|
1505
|
-
React__namespace.createElement(reactCore.Accordion, { asDefinitionList: true },
|
|
1506
|
-
React__namespace.createElement(reactCore.AccordionItem, { isExpanded: false },
|
|
1507
|
-
React__namespace.createElement(reactCore.AccordionToggle, { id: `${ACCORDION_MARKDOWN_BUTTON_ID}-${accordionId}` }, accordionHeading),
|
|
1508
|
-
React__namespace.createElement(reactCore.AccordionContent, { id: `${ACCORDION_MARKDOWN_CONTENT_ID}-${accordionId}` }, accordionContent))))));
|
|
1509
|
-
},
|
|
1510
|
-
}), []);
|
|
1511
|
-
|
|
1512
|
-
const AccordionShowdownHandler = ({ buttonElement, contentElement, }) => {
|
|
1513
|
-
const [expanded, setExpanded] = React__namespace.useState(false);
|
|
1514
|
-
const handleClick = () => {
|
|
1515
|
-
const expandedModifier = 'pf-m-expanded';
|
|
1516
|
-
buttonElement.className = `pf-v6-c-accordion__toggle ${!expanded ? expandedModifier : ''}`;
|
|
1517
|
-
contentElement.hidden = expanded;
|
|
1518
|
-
contentElement.className = `pf-v6-c-accordion__expanded-content ${!expanded ? expandedModifier : ''}`;
|
|
1519
|
-
setExpanded(!expanded);
|
|
1520
|
-
};
|
|
1521
|
-
useEventListener(buttonElement, 'click', handleClick);
|
|
1522
|
-
return React__namespace.createElement(React__namespace.Fragment, null);
|
|
1523
|
-
};
|
|
1524
|
-
const AccordionRenderExtension = ({ docContext }) => {
|
|
1525
|
-
const buttonElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_BUTTON_ID}]`);
|
|
1526
|
-
const contentElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_CONTENT_ID}]`);
|
|
1527
|
-
return buttonElements.length > 0 ? (React__namespace.createElement(React__namespace.Fragment, null, Array.from(buttonElements).map((elm) => {
|
|
1528
|
-
const content = Array.from(contentElements).find((elm2) => {
|
|
1529
|
-
const elmId = elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1];
|
|
1530
|
-
const elm2Id = elm2.id.split(ACCORDION_MARKDOWN_CONTENT_ID)[1];
|
|
1531
|
-
return elmId === elm2Id;
|
|
1532
|
-
});
|
|
1533
|
-
return (React__namespace.createElement(AccordionShowdownHandler, { key: elm.id.split(ACCORDION_MARKDOWN_BUTTON_ID)[1], buttonElement: elm, contentElement: content }));
|
|
1534
|
-
}))) : null;
|
|
1535
|
-
};
|
|
1536
|
-
|
|
1537
|
-
const FallbackImg = ({ src, alt, className, fallback }) => {
|
|
1538
|
-
const [isSrcValid, setIsSrcValid] = React__namespace.useState(true);
|
|
1539
|
-
if (src && isSrcValid) {
|
|
1540
|
-
return React__namespace.createElement("img", { className: className, src: src, alt: alt, onError: () => setIsSrcValid(false) });
|
|
1541
|
-
}
|
|
1542
|
-
return React__namespace.createElement(React__namespace.Fragment, null, fallback);
|
|
1543
|
-
};
|
|
1544
|
-
|
|
1545
|
-
const DASH = '-';
|
|
1546
|
-
|
|
1547
|
-
const PopoverStatus = ({ hideHeader, children, isVisible = null, statusBody, title, onHide, onShow, }) => (React__namespace.createElement(reactCore.Popover, { position: reactCore.PopoverPosition.right, headerContent: hideHeader ? null : title, bodyContent: children, "aria-label": title, onHide: onHide, onShow: onShow, isVisible: isVisible },
|
|
1548
|
-
React__namespace.createElement(reactCore.Button, { variant: "link", isInline: true }, statusBody)));
|
|
1549
|
-
|
|
1550
|
-
const StatusIconAndText = ({ icon, title, spin, iconOnly, noTooltip, className, }) => {
|
|
1551
|
-
if (!title) {
|
|
1552
|
-
return React__namespace.createElement(React__namespace.Fragment, null, DASH);
|
|
1553
|
-
}
|
|
1554
|
-
return (React__namespace.createElement("span", { className: reactStyles.css('pfext-icon-and-text', className), title: iconOnly && !noTooltip ? title : undefined },
|
|
1555
|
-
icon &&
|
|
1556
|
-
React__namespace.cloneElement(icon, {
|
|
1557
|
-
className: reactStyles.css(spin && 'fa-spin', icon.props.className, !iconOnly && 'pfext-icon-and-text__icon pfext-icon-flex-child'),
|
|
1558
|
-
}),
|
|
1559
|
-
!iconOnly && React__namespace.createElement(CamelCaseWrap, { value: title, dataTest: "status-text" })));
|
|
1560
|
-
};
|
|
1561
|
-
|
|
1562
|
-
const GenericStatus = (props) => {
|
|
1563
|
-
const { Icon, children, popoverTitle, title, noTooltip, iconOnly } = props, restProps = tslib.__rest(props, ["Icon", "children", "popoverTitle", "title", "noTooltip", "iconOnly"]);
|
|
1564
|
-
const renderIcon = iconOnly && !noTooltip ? React__namespace.createElement(Icon, { title: title }) : React__namespace.createElement(Icon, null);
|
|
1565
|
-
const statusBody = (React__namespace.createElement(StatusIconAndText, Object.assign({}, restProps, { noTooltip: noTooltip, title: title, iconOnly: iconOnly, icon: renderIcon })));
|
|
1566
|
-
return React__namespace.Children.toArray(children).length ? (React__namespace.createElement(PopoverStatus, Object.assign({ title: popoverTitle || title }, restProps, { statusBody: statusBody }), children)) : (statusBody);
|
|
1567
|
-
};
|
|
1568
|
-
|
|
1569
|
-
const GreenCheckCircleIcon = ({ className, title, size }) => (React__namespace.createElement(reactCore.Icon, { size: size, status: "success" },
|
|
1570
|
-
React__namespace.createElement(CheckCircleIcon__default["default"], { "data-test": "success-icon", className: className, title: title })));
|
|
1571
|
-
|
|
1572
|
-
const SuccessStatus = (props) => (React__namespace.createElement(GenericStatus, Object.assign({}, props, { Icon: GreenCheckCircleIcon, title: props.title || 'Healthy' })));
|
|
1573
|
-
SuccessStatus.displayName = 'SuccessStatus';
|
|
1574
|
-
|
|
1575
|
-
const Status = ({ status, title, iconOnly, noTooltip, className, }) => {
|
|
1576
|
-
const statusProps = { title: title || status, iconOnly, noTooltip, className };
|
|
1577
|
-
switch (status) {
|
|
1578
|
-
case 'In Progress':
|
|
1579
|
-
return React__namespace.createElement(StatusIconAndText, Object.assign({}, statusProps, { icon: React__namespace.createElement(SyncAltIcon__default["default"], null) }));
|
|
1580
|
-
case 'Complete':
|
|
1581
|
-
return React__namespace.createElement(SuccessStatus, Object.assign({}, statusProps));
|
|
1582
|
-
default:
|
|
1583
|
-
return React__namespace.createElement(React__namespace.Fragment, null, status || DASH);
|
|
1584
|
-
}
|
|
1585
|
-
};
|
|
1586
|
-
const StatusIcon = ({ status }) => (React__namespace.createElement(Status, { status: status, iconOnly: true }));
|
|
1587
|
-
|
|
1588
1647
|
const QuickStartTileDescription = ({ description, prerequisites, }) => {
|
|
1589
|
-
const { getResource } =
|
|
1648
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1590
1649
|
const prereqs = prerequisites === null || prerequisites === void 0 ? void 0 : prerequisites.filter((p) => p);
|
|
1591
|
-
const buttonRef =
|
|
1592
|
-
return (
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
React__namespace.createElement(reactCore.Button, { variant: "link", isInline: true, "data-testid": "qs-card-prereqs", ref: buttonRef, onClick: (e) => {
|
|
1599
|
-
e.preventDefault();
|
|
1600
|
-
e.stopPropagation();
|
|
1601
|
-
}, "aria-label": getResource('Show prerequisites') },
|
|
1602
|
-
React__namespace.createElement(InfoCircleIcon__default["default"], null)),
|
|
1603
|
-
React__namespace.createElement(reactCore.Popover, { "aria-label": getResource('Prerequisites'), headerContent: getResource('Prerequisites'), triggerRef: buttonRef, bodyContent: React__namespace.createElement("div", null,
|
|
1604
|
-
React__namespace.createElement("ul", { "aria-label": getResource('Prerequisites') }, prereqs.map((prerequisite, index) => (
|
|
1605
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
1606
|
-
React__namespace.createElement("li", { key: index },
|
|
1607
|
-
React__namespace.createElement(QuickStartMarkdownView, { content: prerequisite })))))) })))));
|
|
1650
|
+
const buttonRef = react.useRef(null);
|
|
1651
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(QuickStartMarkdownView, { content: description }), (prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (jsxRuntime.jsxs(reactCore.Flex, Object.assign({ spaceItems: { default: 'spaceItemsSm' } }, { children: [jsxRuntime.jsxs("h5", { children: [getResource('Prerequisites ({{totalPrereqs}})').replace('{{totalPrereqs}}', prereqs.length), ' '] }), jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "link", isInline: true, "data-testid": "qs-card-prereqs", ref: buttonRef, onClick: (e) => {
|
|
1652
|
+
e.preventDefault();
|
|
1653
|
+
e.stopPropagation();
|
|
1654
|
+
}, "aria-label": getResource('Show prerequisites') }, { children: jsxRuntime.jsx(InfoCircleIcon__default["default"], {}) })), jsxRuntime.jsx(reactCore.Popover, { "aria-label": getResource('Prerequisites'), headerContent: getResource('Prerequisites'), triggerRef: buttonRef, bodyContent: jsxRuntime.jsx("div", { children: jsxRuntime.jsx("ul", Object.assign({ "aria-label": getResource('Prerequisites') }, { children: prereqs.map((prerequisite, index) => (
|
|
1655
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
1656
|
+
jsxRuntime.jsx("li", { children: jsxRuntime.jsx(QuickStartMarkdownView, { content: prerequisite }) }, index))) })) }) })] })))] }));
|
|
1608
1657
|
};
|
|
1609
1658
|
|
|
1610
1659
|
const QuickStartTileFooter = ({ quickStartId, status, totalTasks, onClickContinue, }) => {
|
|
1611
|
-
const { getResource } =
|
|
1612
|
-
const { activeQuickStartID, startQuickStart, restartQuickStart } =
|
|
1613
|
-
const start =
|
|
1660
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1661
|
+
const { activeQuickStartID, startQuickStart, restartQuickStart } = react.useContext(QuickStartContext);
|
|
1662
|
+
const start = react.useCallback(() => {
|
|
1614
1663
|
startQuickStart(quickStartId, totalTasks);
|
|
1615
1664
|
}, [quickStartId, startQuickStart, totalTasks]);
|
|
1616
|
-
const restart =
|
|
1665
|
+
const restart = react.useCallback(() => {
|
|
1617
1666
|
restartQuickStart(quickStartId, totalTasks);
|
|
1618
1667
|
}, [quickStartId, restartQuickStart, totalTasks]);
|
|
1619
|
-
return (
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
React__namespace.createElement(reactCore.Button, { variant: "link", onClick: onClickContinue, isInline: true, "data-testid": "qs-card-inProgress-resume", id: `${quickStartId}-continue`, "aria-labelledby": `${quickStartId}-continue ${quickStartId}` }, getResource('Continue')))),
|
|
1624
|
-
status === exports.QuickStartStatus.COMPLETE && (React__namespace.createElement(reactCore.FlexItem, null,
|
|
1625
|
-
React__namespace.createElement(reactCore.Button, { onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-complete-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, getResource('Restart')))),
|
|
1626
|
-
status === exports.QuickStartStatus.IN_PROGRESS && (React__namespace.createElement(reactCore.FlexItem, null,
|
|
1627
|
-
React__namespace.createElement(reactCore.Button, { onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-inProgress-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, getResource('Restart'))))));
|
|
1628
|
-
};
|
|
1629
|
-
|
|
1630
|
-
const QuickStartTileFooterExternal = ({ link, quickStartId, }) => {
|
|
1668
|
+
return (jsxRuntime.jsxs(reactCore.Flex, Object.assign({ justifyContent: { default: 'justifyContentSpaceBetween' } }, { children: [status === exports.QuickStartStatus.NOT_STARTED && (jsxRuntime.jsx(reactCore.FlexItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ onClick: start, variant: "link", isInline: true, "data-testid": "qs-card-notStarted-start", id: `${quickStartId}-start`, "aria-labelledby": `${quickStartId}-start ${quickStartId}` }, { children: getResource('Start') })) })), status === exports.QuickStartStatus.IN_PROGRESS && activeQuickStartID !== quickStartId && (jsxRuntime.jsx(reactCore.FlexItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "link", onClick: onClickContinue, isInline: true, "data-testid": "qs-card-inProgress-resume", id: `${quickStartId}-continue`, "aria-labelledby": `${quickStartId}-continue ${quickStartId}` }, { children: getResource('Continue') })) })), status === exports.QuickStartStatus.COMPLETE && (jsxRuntime.jsx(reactCore.FlexItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-complete-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, { children: getResource('Restart') })) })), status === exports.QuickStartStatus.IN_PROGRESS && (jsxRuntime.jsx(reactCore.FlexItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ onClick: restart, variant: "link", isInline: true, "data-testid": "qs-card-inProgress-restart", id: `${quickStartId}-restart`, "aria-labelledby": `${quickStartId}-restart ${quickStartId}` }, { children: getResource('Restart') })) }))] })));
|
|
1669
|
+
};
|
|
1670
|
+
|
|
1671
|
+
const QuickStartTileFooterExternal = ({ link, quickStartId }) => {
|
|
1631
1672
|
const { href, text } = link;
|
|
1632
|
-
return (
|
|
1633
|
-
React__namespace.createElement(reactCore.FlexItem, null,
|
|
1634
|
-
React__namespace.createElement(reactCore.Button, { component: "a", href: href, target: "_blank", rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: React__namespace.createElement(ExternalLinkAltIcon__default["default"], null), iconPosition: "right", id: quickStartId, "aria-labelledby": `${quickStartId}-external ${quickStartId}` }, text || href))));
|
|
1673
|
+
return (jsxRuntime.jsx(reactCore.Flex, Object.assign({ justifyContent: { default: 'justifyContentSpaceBetween' } }, { children: jsxRuntime.jsx(reactCore.FlexItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ component: "a", href: href, target: "_blank", rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: jsxRuntime.jsx(ExternalLinkAltIcon__default["default"], {}), iconPosition: "right", id: quickStartId, "aria-labelledby": `${quickStartId}-external ${quickStartId}` }, { children: text || href })) }) })));
|
|
1635
1674
|
};
|
|
1636
1675
|
|
|
1637
|
-
const QuickStartTileHeader = ({ name, quickStartId, onSelect
|
|
1638
|
-
React__namespace.createElement(reactCore.Button, { "data-test": "title", id: quickStartId, variant: "link", isInline: true, onClick: onSelect }, name)));
|
|
1676
|
+
const QuickStartTileHeader = ({ name, quickStartId, onSelect }) => (jsxRuntime.jsx(reactCore.Flex, Object.assign({ flexWrap: { default: 'nowrap' } }, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ "data-test": "title", id: quickStartId, variant: "link", isInline: true, onClick: onSelect }, { children: name })) })));
|
|
1639
1677
|
|
|
1640
1678
|
const QuickStartTile = ({ quickStart, status, isActive, onClick = () => { }, action, }) => {
|
|
1641
1679
|
const { metadata: { name: id }, spec: { icon, tasks, displayName, description, durationMinutes, prerequisites, link, type }, } = quickStart;
|
|
1642
|
-
const { setActiveQuickStart, footer, getResource } =
|
|
1680
|
+
const { setActiveQuickStart, footer, getResource } = react.useContext(QuickStartContext);
|
|
1643
1681
|
const statusColorMap = {
|
|
1644
1682
|
[exports.QuickStartStatus.COMPLETE]: 'green',
|
|
1645
1683
|
[exports.QuickStartStatus.IN_PROGRESS]: 'purple',
|
|
@@ -1652,11 +1690,10 @@ const QuickStartTile = ({ quickStart, status, isActive, onClick = () => { }, act
|
|
|
1652
1690
|
};
|
|
1653
1691
|
let quickStartIcon;
|
|
1654
1692
|
if (typeof icon === 'object') {
|
|
1655
|
-
quickStartIcon =
|
|
1693
|
+
quickStartIcon = jsxRuntime.jsx(reactCore.Icon, Object.assign({ size: "2xl" }, { children: icon }));
|
|
1656
1694
|
}
|
|
1657
1695
|
else {
|
|
1658
|
-
quickStartIcon = (
|
|
1659
|
-
React__namespace.createElement(FallbackImg, { src: icon, alt: "", className: "pfext-catalog-item-icon__img", fallback: React__namespace.createElement(RocketIcon__default["default"], null) })));
|
|
1696
|
+
quickStartIcon = (jsxRuntime.jsx(reactCore.Icon, Object.assign({ size: "2xl" }, { children: jsxRuntime.jsx(FallbackImg, { src: icon, alt: "", className: "pfext-catalog-item-icon__img", fallback: jsxRuntime.jsx(RocketIcon__default["default"], {}) }) })));
|
|
1660
1697
|
}
|
|
1661
1698
|
const onSelect = () => {
|
|
1662
1699
|
if (!link) {
|
|
@@ -1667,70 +1704,53 @@ const QuickStartTile = ({ quickStart, status, isActive, onClick = () => { }, act
|
|
|
1667
1704
|
}
|
|
1668
1705
|
onClick();
|
|
1669
1706
|
};
|
|
1670
|
-
const footerComponent =
|
|
1707
|
+
const footerComponent = react.useMemo(() => {
|
|
1671
1708
|
if (footer && footer.show === false) {
|
|
1672
1709
|
return null;
|
|
1673
1710
|
}
|
|
1674
1711
|
if (link) {
|
|
1675
|
-
return
|
|
1712
|
+
return jsxRuntime.jsx(QuickStartTileFooterExternal, { link: link, quickStartId: id });
|
|
1676
1713
|
}
|
|
1677
|
-
return (
|
|
1714
|
+
return (jsxRuntime.jsx(QuickStartTileFooter, { quickStartId: id, status: status, totalTasks: tasks === null || tasks === void 0 ? void 0 : tasks.length, onClickContinue: onSelect }));
|
|
1678
1715
|
}, [footer, id, link, status, tasks === null || tasks === void 0 ? void 0 : tasks.length]);
|
|
1679
1716
|
const ActionIcon = (action === null || action === void 0 ? void 0 : action.icon) || OutlinedBookmarkIcon__default["default"];
|
|
1680
|
-
const additionalAction = action ? (
|
|
1681
|
-
return (
|
|
1717
|
+
const additionalAction = action ? (jsxRuntime.jsx(reactCore.Button, Object.assign({ "aria-label": action['aria-label'], icon: jsxRuntime.jsx(ActionIcon, {}), variant: "plain", onClick: action.onClick }, action.buttonProps))) : undefined;
|
|
1718
|
+
return (jsxRuntime.jsxs(reactCore.Card, Object.assign({ id: `${id}-catalog-tile`, style: { height: '100%' }, "data-testid": `qs-card-${camelize(displayName)}`, className: "pfext-catalog-item" }, (isActive && {
|
|
1682
1719
|
isClickable: true,
|
|
1683
1720
|
isSelectable: true,
|
|
1684
1721
|
isSelected: true,
|
|
1685
1722
|
isClicked: true,
|
|
1686
|
-
})
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
})), quickStartIcon),
|
|
1690
|
-
React__namespace.createElement(reactCore.CardTitle, null,
|
|
1691
|
-
React__namespace.createElement(QuickStartTileHeader, { name: displayName, onSelect: onSelect, quickStartId: id })),
|
|
1692
|
-
React__namespace.createElement(reactCore.CardBody, null,
|
|
1693
|
-
React__namespace.createElement(reactCore.Stack, { hasGutter: true },
|
|
1694
|
-
React__namespace.createElement(reactCore.Flex, { spaceItems: { default: 'spaceItemsSm' } },
|
|
1695
|
-
type && React__namespace.createElement(reactCore.Label, { color: type.color }, type.text),
|
|
1696
|
-
durationMinutes && (React__namespace.createElement(reactCore.Label, { variant: "outline", "data-test": "duration", icon: React__namespace.createElement(OutlinedClockIcon__default["default"], null) }, getResource('{{duration, number}} minutes', durationMinutes).replace('{{duration, number}}', durationMinutes))),
|
|
1697
|
-
status !== exports.QuickStartStatus.NOT_STARTED && (React__namespace.createElement(reactCore.Label, { variant: "outline", color: statusColorMap[status], icon: React__namespace.createElement(StatusIcon, { status: status }), "data-test": "status" }, statusLocaleMap[status]))),
|
|
1698
|
-
React__namespace.createElement(QuickStartTileDescription, { description: description, prerequisites: prerequisites }))),
|
|
1699
|
-
React__namespace.createElement(reactCore.CardFooter, null, footerComponent)));
|
|
1723
|
+
}), { children: [jsxRuntime.jsx(reactCore.CardHeader, Object.assign({}, (action && {
|
|
1724
|
+
actions: { actions: additionalAction },
|
|
1725
|
+
}), { children: quickStartIcon })), jsxRuntime.jsx(reactCore.CardTitle, { children: jsxRuntime.jsx(QuickStartTileHeader, { name: displayName, onSelect: onSelect, quickStartId: id }) }), jsxRuntime.jsx(reactCore.CardBody, { children: jsxRuntime.jsxs(reactCore.Stack, Object.assign({ hasGutter: true }, { children: [jsxRuntime.jsxs(reactCore.Flex, Object.assign({ spaceItems: { default: 'spaceItemsSm' } }, { children: [type && jsxRuntime.jsx(reactCore.Label, Object.assign({ color: type.color }, { children: type.text })), durationMinutes && (jsxRuntime.jsx(reactCore.Label, Object.assign({ variant: "outline", "data-test": "duration", icon: jsxRuntime.jsx(OutlinedClockIcon__default["default"], {}) }, { children: getResource('{{duration, number}} minutes', durationMinutes).replace('{{duration, number}}', durationMinutes) }))), status !== exports.QuickStartStatus.NOT_STARTED && (jsxRuntime.jsx(reactCore.Label, Object.assign({ variant: "outline", color: statusColorMap[status], icon: jsxRuntime.jsx(StatusIcon, { status: status }), "data-test": "status" }, { children: statusLocaleMap[status] })))] })), jsxRuntime.jsx(QuickStartTileDescription, { description: description, prerequisites: prerequisites })] })) }), jsxRuntime.jsx(reactCore.CardFooter, { children: footerComponent })] })));
|
|
1700
1726
|
};
|
|
1701
1727
|
|
|
1702
1728
|
const QuickStartCatalog = ({ quickStarts }) => {
|
|
1703
|
-
const { activeQuickStartID, allQuickStartStates } =
|
|
1704
|
-
return (
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
}))));
|
|
1729
|
+
const { activeQuickStartID, allQuickStartStates } = react.useContext(QuickStartContext);
|
|
1730
|
+
return (jsxRuntime.jsx("div", { children: jsxRuntime.jsx(reactCore.Gallery, Object.assign({ hasGutter: true, className: "pfext-quick-start-catalog__gallery" }, { children: quickStarts.map((quickStart, index) => {
|
|
1731
|
+
const { metadata: { name: id }, } = quickStart;
|
|
1732
|
+
return (jsxRuntime.jsx(QuickStartTile, { quickStart: quickStart, isActive: id === activeQuickStartID, status: getQuickStartStatus(allQuickStartStates, id) }, index));
|
|
1733
|
+
}) })) }));
|
|
1709
1734
|
};
|
|
1710
1735
|
|
|
1711
1736
|
const QuickStartCatalogFilterSearch = (_a) => {
|
|
1712
1737
|
var { searchInputText, handleTextChange } = _a, props = tslib.__rest(_a, ["searchInputText", "handleTextChange"]);
|
|
1713
|
-
const { getResource } =
|
|
1714
|
-
return (
|
|
1715
|
-
React__namespace.createElement(reactCore.SearchInput, Object.assign({ placeholder: getResource('Filter by keyword...'), value: searchInputText, onChange: (_ev, value) => handleTextChange(value), onClear: () => handleTextChange('') }, props))));
|
|
1738
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1739
|
+
return (jsxRuntime.jsx(reactCore.ToolbarItem, { children: jsxRuntime.jsx(reactCore.SearchInput, Object.assign({ placeholder: getResource('Filter by keyword...'), value: searchInputText, onChange: (_ev, value) => handleTextChange(value), onClear: () => handleTextChange('') }, props)) }));
|
|
1716
1740
|
};
|
|
1717
1741
|
const QuickStartCatalogFilterSelect = (_a) => {
|
|
1718
1742
|
var { isDropdownOpen, setIsDropdownOpen, onRowfilterSelect, selectedFilters, dropdownItems } = _a, props = tslib.__rest(_a, ["isDropdownOpen", "setIsDropdownOpen", "onRowfilterSelect", "selectedFilters", "dropdownItems"]);
|
|
1719
|
-
const { getResource } =
|
|
1720
|
-
const toggle = (toggleRef) => (
|
|
1721
|
-
|
|
1722
|
-
selectedFilters.length > 0 && React__namespace.createElement(reactCore.Badge, { isRead: true }, selectedFilters.length)));
|
|
1723
|
-
return (React__namespace.createElement(reactCore.ToolbarItem, null,
|
|
1724
|
-
React__namespace.createElement(reactCore.Select, Object.assign({ "aria-label": getResource('Select filter'), isOpen: isDropdownOpen, selected: selectedFilters, onSelect: onRowfilterSelect, onOpenChange: (isOpen) => setIsDropdownOpen(isOpen), toggle: toggle }, props),
|
|
1725
|
-
React__namespace.createElement(reactCore.SelectList, null, dropdownItems))));
|
|
1743
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1744
|
+
const toggle = (toggleRef) => (jsxRuntime.jsxs(reactCore.MenuToggle, Object.assign({ isFullWidth: true, ref: toggleRef, onClick: () => setIsDropdownOpen(!isDropdownOpen), isExpanded: isDropdownOpen }, { children: [getResource('Status'), selectedFilters.length > 0 && jsxRuntime.jsx(reactCore.Badge, Object.assign({ isRead: true }, { children: selectedFilters.length }))] })));
|
|
1745
|
+
return (jsxRuntime.jsx(reactCore.ToolbarItem, { children: jsxRuntime.jsx(reactCore.Select, Object.assign({ "aria-label": getResource('Select filter'), isOpen: isDropdownOpen, selected: selectedFilters, onSelect: onRowfilterSelect, onOpenChange: (isOpen) => setIsDropdownOpen(isOpen), toggle: toggle }, props, { children: jsxRuntime.jsx(reactCore.SelectList, { children: dropdownItems }) })) }));
|
|
1726
1746
|
};
|
|
1727
1747
|
const QuickStartCatalogFilterCount = ({ quickStartsCount }) => {
|
|
1728
|
-
const { getResource } =
|
|
1729
|
-
return (
|
|
1748
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1749
|
+
return (jsxRuntime.jsx(reactCore.ToolbarItem, Object.assign({ align: { default: 'alignEnd' } }, { children: getResource("{{count, number}} item", quickStartsCount).replace('{{count, number}}', quickStartsCount) })));
|
|
1730
1750
|
};
|
|
1731
1751
|
const QuickStartCatalogFilterSearchWrapper = ({ onSearchInputChange = () => { } }) => {
|
|
1732
|
-
const { useQueryParams, filter, setFilter } =
|
|
1733
|
-
|
|
1752
|
+
const { useQueryParams, filter, setFilter } = react.useContext(QuickStartContext);
|
|
1753
|
+
react.useEffect(() => {
|
|
1734
1754
|
// use this effect to clear the search when a `clear all` action is performed higher up
|
|
1735
1755
|
const unlisten = history.listen(({ location }) => {
|
|
1736
1756
|
const searchParams = new URLSearchParams(location.search);
|
|
@@ -1756,7 +1776,7 @@ const QuickStartCatalogFilterSearchWrapper = ({ onSearchInputChange = () => { }
|
|
|
1756
1776
|
}
|
|
1757
1777
|
onSearchInputChange(val);
|
|
1758
1778
|
};
|
|
1759
|
-
return (
|
|
1779
|
+
return (jsxRuntime.jsx(QuickStartCatalogFilterSearch, { searchInputText: filter === null || filter === void 0 ? void 0 : filter.keyword, handleTextChange: handleTextChange }));
|
|
1760
1780
|
};
|
|
1761
1781
|
// compare string/number arrays
|
|
1762
1782
|
const equalsIgnoreOrder = (a, b) => {
|
|
@@ -1774,8 +1794,8 @@ const equalsIgnoreOrder = (a, b) => {
|
|
|
1774
1794
|
return true;
|
|
1775
1795
|
};
|
|
1776
1796
|
const QuickStartCatalogFilterStatusWrapper = ({ onStatusChange = () => { } }) => {
|
|
1777
|
-
const { useQueryParams, filter, setFilter } =
|
|
1778
|
-
|
|
1797
|
+
const { useQueryParams, filter, setFilter } = react.useContext(QuickStartContext);
|
|
1798
|
+
react.useEffect(() => {
|
|
1779
1799
|
// use this effect to clear the status when a `clear all` action is performed higher up
|
|
1780
1800
|
const unlisten = history.listen(({ location }) => {
|
|
1781
1801
|
var _a;
|
|
@@ -1790,8 +1810,8 @@ const QuickStartCatalogFilterStatusWrapper = ({ onStatusChange = () => { } }) =>
|
|
|
1790
1810
|
unlisten();
|
|
1791
1811
|
};
|
|
1792
1812
|
});
|
|
1793
|
-
const [isDropdownOpen, setIsDropdownOpen] =
|
|
1794
|
-
const onRowfilterSelect =
|
|
1813
|
+
const [isDropdownOpen, setIsDropdownOpen] = react.useState(false);
|
|
1814
|
+
const onRowfilterSelect = react.useCallback((_e, selectedValue) => {
|
|
1795
1815
|
setIsDropdownOpen(false);
|
|
1796
1816
|
const selection = Object.entries(filter.status.statusTypes).find(([_key, value]) => value === selectedValue)[0];
|
|
1797
1817
|
const selectedFiltersList = filter.status.statusFilters.includes(selection)
|
|
@@ -1808,33 +1828,24 @@ const QuickStartCatalogFilterStatusWrapper = ({ onStatusChange = () => { } }) =>
|
|
|
1808
1828
|
}
|
|
1809
1829
|
onStatusChange(selectedFiltersList);
|
|
1810
1830
|
}, [filter.status.statusFilters, onStatusChange, setFilter, useQueryParams]);
|
|
1811
|
-
const dropdownItems = Object.entries(filter.status.statusTypes).map(([key, value]) => (
|
|
1812
|
-
|
|
1813
|
-
return (React__namespace.createElement(QuickStartCatalogFilterSelect, { isDropdownOpen: isDropdownOpen, setIsDropdownOpen: setIsDropdownOpen, onRowfilterSelect: onRowfilterSelect, selectedFilters: filter.status.statusFilters, dropdownItems: dropdownItems }));
|
|
1831
|
+
const dropdownItems = Object.entries(filter.status.statusTypes).map(([key, value]) => (jsxRuntime.jsx(reactCore.SelectOption, Object.assign({ "data-key": key, value: value, hasCheckbox: true, isSelected: filter.status.statusFilters.includes(key) }, { children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: value }) }), key)));
|
|
1832
|
+
return (jsxRuntime.jsx(QuickStartCatalogFilterSelect, { isDropdownOpen: isDropdownOpen, setIsDropdownOpen: setIsDropdownOpen, onRowfilterSelect: onRowfilterSelect, selectedFilters: filter.status.statusFilters, dropdownItems: dropdownItems }));
|
|
1814
1833
|
};
|
|
1815
|
-
const QuickStartCatalogFilterCountWrapper = ({ quickStartsCount }) =>
|
|
1834
|
+
const QuickStartCatalogFilterCountWrapper = ({ quickStartsCount, }) => jsxRuntime.jsx(QuickStartCatalogFilterCount, { quickStartsCount: quickStartsCount });
|
|
1816
1835
|
|
|
1817
1836
|
const QuickStartCatalogFilter = (_a) => {
|
|
1818
1837
|
var { quickStartsCount, onSearchInputChange = () => { }, onStatusChange = () => { } } = _a, props = tslib.__rest(_a, ["quickStartsCount", "onSearchInputChange", "onStatusChange"]);
|
|
1819
|
-
return (
|
|
1820
|
-
React__namespace.createElement(reactCore.ToolbarContent, null,
|
|
1821
|
-
React__namespace.createElement(QuickStartCatalogFilterSearchWrapper, { onSearchInputChange: onSearchInputChange }),
|
|
1822
|
-
React__namespace.createElement(QuickStartCatalogFilterStatusWrapper, { onStatusChange: onStatusChange }),
|
|
1823
|
-
React__namespace.createElement(QuickStartCatalogFilterCountWrapper, { quickStartsCount: quickStartsCount }))));
|
|
1838
|
+
return (jsxRuntime.jsx(reactCore.Toolbar, Object.assign({}, props, { children: jsxRuntime.jsxs(reactCore.ToolbarContent, { children: [jsxRuntime.jsx(QuickStartCatalogFilterSearchWrapper, { onSearchInputChange: onSearchInputChange }), jsxRuntime.jsx(QuickStartCatalogFilterStatusWrapper, { onStatusChange: onStatusChange }), jsxRuntime.jsx(QuickStartCatalogFilterCountWrapper, { quickStartsCount: quickStartsCount })] }) })));
|
|
1824
1839
|
};
|
|
1825
1840
|
|
|
1826
1841
|
const QuickStartCatalogEmptyState = ({ clearFilters }) => {
|
|
1827
|
-
const { getResource } =
|
|
1828
|
-
return (
|
|
1829
|
-
React__namespace.createElement(reactCore.EmptyStateBody, null, getResource('No results match the filter criteria. Remove filters or clear all filters to show results.')),
|
|
1830
|
-
React__namespace.createElement(reactCore.EmptyStateFooter, null,
|
|
1831
|
-
React__namespace.createElement(reactCore.EmptyStateActions, null,
|
|
1832
|
-
React__namespace.createElement(reactCore.Button, { variant: "link", onClick: clearFilters, "data-test": "clear-filter button" }, getResource('Clear all filters'))))));
|
|
1842
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1843
|
+
return (jsxRuntime.jsxs(reactCore.EmptyState, Object.assign({ headingLevel: "h4", icon: SearchIcon__default["default"], titleText: jsxRuntime.jsx(jsxRuntime.Fragment, { children: getResource('No results found') }) }, { children: [jsxRuntime.jsx(reactCore.EmptyStateBody, { children: getResource('No results match the filter criteria. Remove filters or clear all filters to show results.') }), jsxRuntime.jsx(reactCore.EmptyStateFooter, { children: jsxRuntime.jsx(reactCore.EmptyStateActions, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "link", onClick: clearFilters, "data-test": "clear-filter button" }, { children: getResource('Clear all filters') })) }) })] })));
|
|
1833
1844
|
};
|
|
1834
1845
|
const QuickStartCatalogPage = ({ quickStarts, showFilter, sortFnc = (q1, q2) => q1.spec.displayName.localeCompare(q2.spec.displayName), title, hint, showTitle = true, }) => {
|
|
1835
|
-
const sortFncCallback =
|
|
1836
|
-
const { allQuickStarts = [], setAllQuickStarts, allQuickStartStates, getResource, filter, setFilter, loading, } =
|
|
1837
|
-
|
|
1846
|
+
const sortFncCallback = react.useCallback(sortFnc, [sortFnc]);
|
|
1847
|
+
const { allQuickStarts = [], setAllQuickStarts, allQuickStartStates, getResource, filter, setFilter, loading, } = react.useContext(QuickStartContext);
|
|
1848
|
+
react.useEffect(() => {
|
|
1838
1849
|
// passed through prop, not context
|
|
1839
1850
|
if (quickStarts && JSON.stringify(quickStarts) !== JSON.stringify(allQuickStarts)) {
|
|
1840
1851
|
setAllQuickStarts(quickStarts);
|
|
@@ -1843,8 +1854,8 @@ const QuickStartCatalogPage = ({ quickStarts, showFilter, sortFnc = (q1, q2) =>
|
|
|
1843
1854
|
const initialFilteredQuickStarts = showFilter
|
|
1844
1855
|
? filterQuickStarts(allQuickStarts, filter.keyword, filter.status.statusFilters, allQuickStartStates).sort(sortFncCallback)
|
|
1845
1856
|
: allQuickStarts;
|
|
1846
|
-
const [filteredQuickStarts, setFilteredQuickStarts] =
|
|
1847
|
-
|
|
1857
|
+
const [filteredQuickStarts, setFilteredQuickStarts] = react.useState(initialFilteredQuickStarts);
|
|
1858
|
+
react.useEffect(() => {
|
|
1848
1859
|
const filteredQs = showFilter
|
|
1849
1860
|
? filterQuickStarts(allQuickStarts, filter.keyword, filter.status.statusFilters, allQuickStartStates).sort(sortFncCallback)
|
|
1850
1861
|
: allQuickStarts;
|
|
@@ -1887,59 +1898,37 @@ const QuickStartCatalogPage = ({ quickStarts, showFilter, sortFnc = (q1, q2) =>
|
|
|
1887
1898
|
}
|
|
1888
1899
|
};
|
|
1889
1900
|
if (loading) {
|
|
1890
|
-
return
|
|
1901
|
+
return jsxRuntime.jsx(LoadingBox, {});
|
|
1891
1902
|
}
|
|
1892
1903
|
if (!allQuickStarts || allQuickStarts.length === 0) {
|
|
1893
|
-
return
|
|
1904
|
+
return jsxRuntime.jsx(EmptyBox, { label: getResource('Quick Starts') });
|
|
1894
1905
|
}
|
|
1895
|
-
return (
|
|
1896
|
-
(showTitle || showFilter) && (React__namespace.createElement(reactCore.PageSection, { hasBodyWrapper: false },
|
|
1897
|
-
showTitle && (React__namespace.createElement(reactCore.Content, { isEditorial: true },
|
|
1898
|
-
React__namespace.createElement(reactCore.Title, { headingLevel: "h1", "data-test": "page-title" }, title || getResource('Quick Starts')),
|
|
1899
|
-
hint && React__namespace.createElement("div", null, hint))),
|
|
1900
|
-
showTitle && React__namespace.createElement(reactCore.Divider, { component: "div" }),
|
|
1901
|
-
showFilter && (React__namespace.createElement(React__namespace.Fragment, null,
|
|
1902
|
-
React__namespace.createElement(QuickStartCatalogFilter, { quickStartsCount: filteredQuickStarts.length, onSearchInputChange: onSearchInputChange, onStatusChange: onStatusChange }))))),
|
|
1903
|
-
React__namespace.createElement(reactCore.PageSection, { hasBodyWrapper: false }, filteredQuickStarts.length === 0 ? (React__namespace.createElement(QuickStartCatalogEmptyState, { clearFilters: clearFilters })) : (React__namespace.createElement(QuickStartCatalog, { quickStarts: filteredQuickStarts })))));
|
|
1906
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [(showTitle || showFilter) && (jsxRuntime.jsxs(reactCore.PageSection, Object.assign({ hasBodyWrapper: false }, { children: [showTitle && (jsxRuntime.jsxs(reactCore.Content, Object.assign({ isEditorial: true }, { children: [jsxRuntime.jsx(reactCore.Title, Object.assign({ headingLevel: "h1", "data-test": "page-title" }, { children: title || getResource('Quick Starts') })), hint && jsxRuntime.jsx("div", { children: hint })] }))), showTitle && jsxRuntime.jsx(reactCore.Divider, { component: "div" }), showFilter && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(QuickStartCatalogFilter, { quickStartsCount: filteredQuickStarts.length, onSearchInputChange: onSearchInputChange, onStatusChange: onStatusChange }) }))] }))), jsxRuntime.jsx(reactCore.PageSection, Object.assign({ hasBodyWrapper: false }, { children: filteredQuickStarts.length === 0 ? (jsxRuntime.jsx(QuickStartCatalogEmptyState, { clearFilters: clearFilters })) : (jsxRuntime.jsx(QuickStartCatalog, { quickStarts: filteredQuickStarts })) }))] }));
|
|
1904
1907
|
};
|
|
1905
1908
|
|
|
1906
|
-
const QuickStartCatalogHeader = ({ title, hint, }) => (
|
|
1907
|
-
React__namespace.createElement(reactCore.Title, { headingLevel: "h1", "data-pf-content": "true" }, title),
|
|
1908
|
-
hint && React__namespace.createElement("div", null, hint)));
|
|
1909
|
+
const QuickStartCatalogHeader = ({ title, hint, }) => (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(reactCore.Title, Object.assign({ headingLevel: "h1", "data-pf-content": "true" }, { children: title })), hint && jsxRuntime.jsx("div", { children: hint })] }));
|
|
1909
1910
|
|
|
1910
|
-
const QuickStartCatalogSection = ({ children }) => (
|
|
1911
|
+
const QuickStartCatalogSection = ({ children }) => (jsxRuntime.jsx("div", { children: children }));
|
|
1911
1912
|
|
|
1912
|
-
const QuickStartCatalogToolbar = ({ children }) => (
|
|
1913
|
+
const QuickStartCatalogToolbar = ({ children }) => (jsxRuntime.jsx(reactCore.Toolbar, { children: children }));
|
|
1913
1914
|
|
|
1914
|
-
const QuickStartCloseModal = ({ isOpen, onConfirm, onCancel
|
|
1915
|
-
const { getResource } =
|
|
1916
|
-
return (
|
|
1917
|
-
React__namespace.createElement(reactCore.FlexItem, { align: { default: 'alignRight' } },
|
|
1918
|
-
React__namespace.createElement(reactCore.Button, { variant: "secondary", "data-test": "cancel button", onClick: onCancel }, getResource('Cancel'))),
|
|
1919
|
-
React__namespace.createElement(reactCore.FlexItem, null,
|
|
1920
|
-
React__namespace.createElement(reactCore.Button, { variant: "primary", "data-test": "leave button", onClick: onConfirm }, getResource('Leave')))), isFullScreen: true }, getResource('Your progress will be saved.')));
|
|
1915
|
+
const QuickStartCloseModal = ({ isOpen, onConfirm, onCancel }) => {
|
|
1916
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1917
|
+
return (jsxRuntime.jsx(Modal, Object.assign({ isOpen: isOpen, variant: deprecated.ModalVariant.small, showClose: false, "data-test": "leave-quickstart", title: getResource('Leave quick start?'), footer: jsxRuntime.jsxs(reactCore.Flex, { children: [jsxRuntime.jsx(reactCore.FlexItem, Object.assign({ align: { default: 'alignRight' } }, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "secondary", "data-test": "cancel button", onClick: onCancel }, { children: getResource('Cancel') })) })), jsxRuntime.jsx(reactCore.FlexItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "primary", "data-test": "leave button", onClick: onConfirm }, { children: getResource('Leave') })) })] }), isFullScreen: true }, { children: getResource('Your progress will be saved.') })));
|
|
1921
1918
|
};
|
|
1922
1919
|
|
|
1923
1920
|
const QuickStartTaskHeader = ({ title, taskIndex, subtitle, taskStatus, size, isActiveTask, onTaskSelect, children, }) => {
|
|
1924
|
-
const titleRef =
|
|
1925
|
-
const { focusOnQuickStart } =
|
|
1926
|
-
|
|
1921
|
+
const titleRef = react.useRef(null);
|
|
1922
|
+
const { focusOnQuickStart } = react.useContext(QuickStartContext);
|
|
1923
|
+
react.useEffect(() => {
|
|
1927
1924
|
if (focusOnQuickStart && isActiveTask) {
|
|
1928
1925
|
// Focus the WizardNavItem button element that contains the title
|
|
1929
1926
|
titleRef.current.parentNode.focus();
|
|
1930
1927
|
}
|
|
1931
1928
|
}, [focusOnQuickStart, isActiveTask]);
|
|
1932
1929
|
const failedReview = taskStatus === exports.QuickStartTaskStatus.FAILED;
|
|
1933
|
-
const tryAgain = failedReview && (
|
|
1934
|
-
|
|
1935
|
-
React__namespace.createElement("div", { className: "pfext-quick-start-task-header__tryagain" }, "Try the steps again.")));
|
|
1936
|
-
const content = (React__namespace.createElement("div", { ref: titleRef },
|
|
1937
|
-
React__namespace.createElement(reactCore.Title, { headingLevel: "h3", size: size },
|
|
1938
|
-
React__namespace.createElement("span", { className: "pfext-quick-start-task-header__title" }, title),
|
|
1939
|
-
isActiveTask && subtitle && (React__namespace.createElement("span", null,
|
|
1940
|
-
' ',
|
|
1941
|
-
React__namespace.createElement("span", { "data-test-id": "quick-start-task-subtitle", className: "pfext-quick-start-task-header__subtitle" }, subtitle))),
|
|
1942
|
-
tryAgain)));
|
|
1930
|
+
const tryAgain = failedReview && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", {}), jsxRuntime.jsx("div", Object.assign({ className: "pfext-quick-start-task-header__tryagain" }, { children: "Try the steps again." }))] }));
|
|
1931
|
+
const content = (jsxRuntime.jsx("div", Object.assign({ ref: titleRef }, { children: jsxRuntime.jsxs(reactCore.Title, Object.assign({ headingLevel: "h3", size: size }, { children: [jsxRuntime.jsx("span", Object.assign({ className: "pfext-quick-start-task-header__title" }, { children: title })), isActiveTask && subtitle && (jsxRuntime.jsxs("span", { children: [' ', jsxRuntime.jsx("span", Object.assign({ "data-test-id": "quick-start-task-subtitle", className: "pfext-quick-start-task-header__subtitle" }, { children: subtitle }))] })), tryAgain] })) })));
|
|
1943
1932
|
let status = 'default';
|
|
1944
1933
|
if (taskStatus === exports.QuickStartTaskStatus.FAILED) {
|
|
1945
1934
|
status = 'error';
|
|
@@ -1947,42 +1936,31 @@ const QuickStartTaskHeader = ({ title, taskIndex, subtitle, taskStatus, size, is
|
|
|
1947
1936
|
else if (taskStatus === exports.QuickStartTaskStatus.SUCCESS) {
|
|
1948
1937
|
status = 'success';
|
|
1949
1938
|
}
|
|
1950
|
-
return (
|
|
1939
|
+
return (jsxRuntime.jsx(reactCore.WizardNavItem, Object.assign({ content: content, stepIndex: taskIndex, onClick: () => onTaskSelect(taskIndex - 1), component: "button", isCurrent: isActiveTask, status: status, className: "pfext-quick-start-task-header" }, { children: children })));
|
|
1951
1940
|
};
|
|
1952
1941
|
|
|
1953
|
-
const QuickStartTaskHeaderList = ({ tasks, allTaskStatuses, onTaskSelect, }) => (tasks === null || tasks === void 0 ? void 0 : tasks.length) > 0 ? (
|
|
1942
|
+
const QuickStartTaskHeaderList = ({ tasks, allTaskStatuses, onTaskSelect, }) => (tasks === null || tasks === void 0 ? void 0 : tasks.length) > 0 ? (jsxRuntime.jsx("ul", Object.assign({ className: "pf-v6-c-wizard pf-v6-c-wizard__nav-list" }, { children: tasks.map((task, index) => (jsxRuntime.jsx(QuickStartTaskHeader, { title: task.title, taskIndex: index + 1, size: "md", taskStatus: allTaskStatuses[index], onTaskSelect: onTaskSelect }, task.title))) }))) : null;
|
|
1954
1943
|
|
|
1955
1944
|
const QuickStartConclusion = ({ tasks, conclusion, allTaskStatuses, nextQuickStarts, onQuickStartChange, onTaskSelect, }) => {
|
|
1956
1945
|
const hasFailedTask = allTaskStatuses.includes(exports.QuickStartTaskStatus.FAILED);
|
|
1957
|
-
const { getResource } =
|
|
1958
|
-
return (
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
var _a;
|
|
1968
|
-
return (React__namespace.createElement(reactCore.Button, { variant: "link", onClick: () => onQuickStartChange(nextQuickStart.metadata.name), isInline: true, icon: React__namespace.createElement(ArrowRightIcon__default["default"], null), iconPosition: "end", isBlock: true, key: index, style: { marginTop: 'var(--pf-t--global--spacer--md' } }, 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)));
|
|
1969
|
-
})));
|
|
1946
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1947
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect }), jsxRuntime.jsx(QuickStartMarkdownView, { content: hasFailedTask
|
|
1948
|
+
? getResource('One or more verifications did not pass during this quick start. Revisit the tasks or the help links, and then try again.')
|
|
1949
|
+
: conclusion }), !hasFailedTask &&
|
|
1950
|
+
nextQuickStarts &&
|
|
1951
|
+
nextQuickStarts.length > 0 &&
|
|
1952
|
+
nextQuickStarts.map((nextQuickStart, index) => {
|
|
1953
|
+
var _a;
|
|
1954
|
+
return (jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "link", onClick: () => onQuickStartChange(nextQuickStart.metadata.name), isInline: true, icon: jsxRuntime.jsx(ArrowRightIcon__default["default"], {}), iconPosition: "end", isBlock: true, style: { marginTop: 'var(--pf-t--global--spacer--md' } }, { children: 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) }), index));
|
|
1955
|
+
})] }));
|
|
1970
1956
|
};
|
|
1971
1957
|
|
|
1972
1958
|
const QuickStartIntroduction = ({ tasks, introduction, allTaskStatuses, prerequisites, onTaskSelect, }) => {
|
|
1973
|
-
const { getResource } =
|
|
1959
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1974
1960
|
const prereqs = prerequisites === null || prerequisites === void 0 ? void 0 : prerequisites.filter((p) => p);
|
|
1975
|
-
const [isPrereqsExpanded, setIsPrereqsExpanded] =
|
|
1976
|
-
const prereqList = (prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (
|
|
1977
|
-
|
|
1978
|
-
React__namespace.createElement(QuickStartMarkdownView, { content: pr })))))));
|
|
1979
|
-
return (React__namespace.createElement(reactCore.Stack, { hasGutter: true },
|
|
1980
|
-
React__namespace.createElement(QuickStartMarkdownView, { content: introduction }),
|
|
1981
|
-
prereqList,
|
|
1982
|
-
React__namespace.createElement("p", null,
|
|
1983
|
-
getResource('In this quick start, you will complete {{count, number}} task', tasks === null || tasks === void 0 ? void 0 : tasks.length).replace('{{count, number}}', (tasks === null || tasks === void 0 ? void 0 : tasks.length) || 0),
|
|
1984
|
-
":"),
|
|
1985
|
-
React__namespace.createElement(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect })));
|
|
1961
|
+
const [isPrereqsExpanded, setIsPrereqsExpanded] = react.useState(false);
|
|
1962
|
+
const prereqList = (prereqs === null || prereqs === void 0 ? void 0 : prereqs.length) > 0 && (jsxRuntime.jsx(reactCore.ExpandableSection, Object.assign({ toggleText: getResource('View Prerequisites ({{totalPrereqs}})').replace('{{totalPrereqs}}', prereqs.length), onToggle: () => setIsPrereqsExpanded(!isPrereqsExpanded) }, { children: jsxRuntime.jsx(reactCore.List, { children: prereqs.map((pr) => (jsxRuntime.jsx(reactCore.ListItem, { children: jsxRuntime.jsx(QuickStartMarkdownView, { content: pr }) }, pr))) }) })));
|
|
1963
|
+
return (jsxRuntime.jsxs(reactCore.Stack, Object.assign({ hasGutter: true }, { children: [jsxRuntime.jsx(QuickStartMarkdownView, { content: introduction }), prereqList, jsxRuntime.jsxs("p", { children: [getResource('In this quick start, you will complete {{count, number}} task', (tasks === null || tasks === void 0 ? void 0 : tasks.length) || 0).replace('{{count, number}}', (tasks === null || tasks === void 0 ? void 0 : tasks.length) || 0), ":"] }), jsxRuntime.jsx(QuickStartTaskHeaderList, { tasks: tasks, allTaskStatuses: allTaskStatuses, onTaskSelect: onTaskSelect })] })));
|
|
1986
1964
|
};
|
|
1987
1965
|
|
|
1988
1966
|
const getAlertVariant = (status) => {
|
|
@@ -1997,64 +1975,52 @@ const getAlertVariant = (status) => {
|
|
|
1997
1975
|
};
|
|
1998
1976
|
const QuickStartTaskReview = ({ review, taskStatus, onTaskReview, }) => {
|
|
1999
1977
|
const { instructions, failedTaskHelp: taskHelp } = review;
|
|
2000
|
-
const { getResource } =
|
|
2001
|
-
return (
|
|
1978
|
+
const { getResource } = react.useContext(QuickStartContext);
|
|
1979
|
+
return (jsxRuntime.jsxs(reactCore.Alert, Object.assign({ variant: getAlertVariant(taskStatus), title: getResource('Check your work'), isInline: true, role: "alert", style: {
|
|
2002
1980
|
marginBottom: 'var(--pf-t--global--spacer--md)',
|
|
2003
|
-
} },
|
|
2004
|
-
React__namespace.createElement(QuickStartMarkdownView, { content: instructions }),
|
|
2005
|
-
React__namespace.createElement("span", { className: "pfext-quick-start-task-review__actions" },
|
|
2006
|
-
React__namespace.createElement(reactCore.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 === exports.QuickStartTaskStatus.SUCCESS, onChange: () => onTaskReview(exports.QuickStartTaskStatus.SUCCESS) }),
|
|
2007
|
-
React__namespace.createElement(reactCore.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 === exports.QuickStartTaskStatus.FAILED, onChange: () => onTaskReview(exports.QuickStartTaskStatus.FAILED) })),
|
|
2008
|
-
taskStatus === exports.QuickStartTaskStatus.FAILED && taskHelp && (React__namespace.createElement(QuickStartMarkdownView, { content: taskHelp, exactHeight: true }))));
|
|
1981
|
+
} }, { children: [jsxRuntime.jsx(QuickStartMarkdownView, { content: instructions }), jsxRuntime.jsxs("span", Object.assign({ className: "pfext-quick-start-task-review__actions" }, { children: [jsxRuntime.jsx(reactCore.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 === exports.QuickStartTaskStatus.SUCCESS, onChange: () => onTaskReview(exports.QuickStartTaskStatus.SUCCESS) }), jsxRuntime.jsx(reactCore.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 === exports.QuickStartTaskStatus.FAILED, onChange: () => onTaskReview(exports.QuickStartTaskStatus.FAILED) })] })), taskStatus === exports.QuickStartTaskStatus.FAILED && taskHelp && (jsxRuntime.jsx(QuickStartMarkdownView, { content: taskHelp, exactHeight: true }))] })));
|
|
2009
1982
|
};
|
|
2010
1983
|
|
|
2011
1984
|
const QuickStartTasks = ({ tasks, taskNumber, allTaskStatuses, onTaskReview, onTaskSelect, }) => {
|
|
2012
|
-
const { getResource, alwaysShowTaskReview } =
|
|
2013
|
-
return (
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
}))));
|
|
2029
|
-
};
|
|
2030
|
-
|
|
2031
|
-
const QuickStartContent = React__namespace.forwardRef(({ quickStart, nextQuickStarts = [], taskNumber, allTaskStatuses, onTaskSelect, onTaskReview, onQuickStartChange, }, ref) => {
|
|
1985
|
+
const { getResource, alwaysShowTaskReview } = react.useContext(QuickStartContext);
|
|
1986
|
+
return (jsxRuntime.jsx("div", Object.assign({ className: "pf-v6-c-wizard pf-v6-c-wizard__nav-list", style: { padding: '0 0 0 0' } }, { children: jsxRuntime.jsx("ul", { children: tasks
|
|
1987
|
+
.filter((_, index) => allTaskStatuses[index] !== exports.QuickStartTaskStatus.INIT)
|
|
1988
|
+
.map((task, index) => {
|
|
1989
|
+
const { title, description, review } = task;
|
|
1990
|
+
const isActiveTask = index === taskNumber;
|
|
1991
|
+
const taskStatus = allTaskStatuses[index];
|
|
1992
|
+
const shouldShowTaskReview = (!QUICKSTART_TASKS_INITIAL_STATES.includes(taskStatus) || alwaysShowTaskReview) &&
|
|
1993
|
+
review;
|
|
1994
|
+
return (jsxRuntime.jsx(react.Fragment, { children: jsxRuntime.jsx(QuickStartTaskHeader, Object.assign({ taskIndex: index + 1, title: title, size: "md", subtitle: getResource('{{index, number}} of {{tasks, number}}')
|
|
1995
|
+
.replace('{{index, number}}', index + 1)
|
|
1996
|
+
.replace('{{tasks, number}}', tasks.length), taskStatus: taskStatus, isActiveTask: isActiveTask, onTaskSelect: onTaskSelect }, { children: isActiveTask && (jsxRuntime.jsxs(reactCore.Stack, Object.assign({ hasGutter: true }, { children: [jsxRuntime.jsx(QuickStartMarkdownView, { content: description }), shouldShowTaskReview && (jsxRuntime.jsx(QuickStartTaskReview, { review: review, taskStatus: taskStatus, onTaskReview: onTaskReview }))] }))) })) }, title));
|
|
1997
|
+
}) }) })));
|
|
1998
|
+
};
|
|
1999
|
+
|
|
2000
|
+
const QuickStartContent = react.forwardRef(({ quickStart, nextQuickStarts = [], taskNumber, allTaskStatuses, onTaskSelect, onTaskReview, onQuickStartChange, }, ref) => {
|
|
2032
2001
|
const { spec: { introduction, tasks, conclusion, prerequisites }, } = quickStart;
|
|
2033
2002
|
const totalTasks = tasks === null || tasks === void 0 ? void 0 : tasks.length;
|
|
2034
|
-
return (
|
|
2035
|
-
taskNumber === -1 && (React__namespace.createElement(QuickStartIntroduction, { tasks: tasks, allTaskStatuses: allTaskStatuses, introduction: introduction, prerequisites: prerequisites, onTaskSelect: onTaskSelect })),
|
|
2036
|
-
taskNumber > -1 && taskNumber < totalTasks && (React__namespace.createElement(QuickStartTasks, { tasks: tasks, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskReview: onTaskReview, onTaskSelect: onTaskSelect })),
|
|
2037
|
-
taskNumber === totalTasks && (React__namespace.createElement(QuickStartConclusion, { tasks: tasks, conclusion: conclusion, allTaskStatuses: allTaskStatuses, nextQuickStarts: nextQuickStarts, onQuickStartChange: onQuickStartChange, onTaskSelect: onTaskSelect }))));
|
|
2003
|
+
return (jsxRuntime.jsxs("div", Object.assign({ className: "pfext-quick-start-task", ref: ref }, { children: [taskNumber === -1 && (jsxRuntime.jsx(QuickStartIntroduction, { tasks: tasks, allTaskStatuses: allTaskStatuses, introduction: introduction, prerequisites: prerequisites, onTaskSelect: onTaskSelect })), taskNumber > -1 && taskNumber < totalTasks && (jsxRuntime.jsx(QuickStartTasks, { tasks: tasks, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskReview: onTaskReview, onTaskSelect: onTaskSelect })), taskNumber === totalTasks && (jsxRuntime.jsx(QuickStartConclusion, { tasks: tasks, conclusion: conclusion, allTaskStatuses: allTaskStatuses, nextQuickStarts: nextQuickStarts, onQuickStartChange: onQuickStartChange, onTaskSelect: onTaskSelect }))] })));
|
|
2038
2004
|
});
|
|
2039
2005
|
|
|
2040
2006
|
const QuickStartFooter = ({ status, taskNumber, totalTasks, onNext, onBack, quickStartId, className, }) => {
|
|
2041
|
-
const { restartQuickStart, getResource } =
|
|
2042
|
-
const PrimaryButtonText =
|
|
2007
|
+
const { restartQuickStart, getResource } = react.useContext(QuickStartContext);
|
|
2008
|
+
const PrimaryButtonText = react.useMemo(() => ({
|
|
2043
2009
|
START: getResource('Start'),
|
|
2044
2010
|
CONTINUE: getResource('Continue'),
|
|
2045
2011
|
NEXT: getResource('Next'),
|
|
2046
2012
|
CLOSE: getResource('Close'),
|
|
2047
2013
|
}), [getResource]);
|
|
2048
|
-
const SecondaryButtonText =
|
|
2014
|
+
const SecondaryButtonText = react.useMemo(() => ({
|
|
2049
2015
|
BACK: getResource('Back'),
|
|
2050
2016
|
RESTART: getResource('Restart'),
|
|
2051
2017
|
}), [getResource]);
|
|
2052
|
-
const onRestart =
|
|
2018
|
+
const onRestart = react.useCallback((e) => {
|
|
2053
2019
|
e.preventDefault();
|
|
2054
2020
|
e.stopPropagation();
|
|
2055
2021
|
restartQuickStart(quickStartId, totalTasks);
|
|
2056
2022
|
}, [quickStartId, restartQuickStart, totalTasks]);
|
|
2057
|
-
const getPrimaryButtonText =
|
|
2023
|
+
const getPrimaryButtonText = react.useMemo(() => {
|
|
2058
2024
|
if (status === exports.QuickStartStatus.NOT_STARTED) {
|
|
2059
2025
|
return PrimaryButtonText.START;
|
|
2060
2026
|
}
|
|
@@ -2066,23 +2032,17 @@ const QuickStartFooter = ({ status, taskNumber, totalTasks, onNext, onBack, quic
|
|
|
2066
2032
|
}
|
|
2067
2033
|
return PrimaryButtonText.CONTINUE;
|
|
2068
2034
|
}, [taskNumber, totalTasks, PrimaryButtonText, status]);
|
|
2069
|
-
const getPrimaryButton =
|
|
2070
|
-
const getSecondaryButton =
|
|
2071
|
-
const getSideNoteAction =
|
|
2072
|
-
return (
|
|
2073
|
-
React__namespace.createElement(reactCore.ActionList, null,
|
|
2074
|
-
React__namespace.createElement(reactCore.ActionListGroup, null,
|
|
2075
|
-
React__namespace.createElement(reactCore.ActionListItem, null, getPrimaryButton),
|
|
2076
|
-
React__namespace.createElement(reactCore.ActionListItem, null, getSecondaryButton)),
|
|
2077
|
-
React__namespace.createElement(reactCore.ActionListGroup, null,
|
|
2078
|
-
React__namespace.createElement(reactCore.ActionListItem, null, getSideNoteAction)))));
|
|
2035
|
+
const getPrimaryButton = react.useMemo(() => (jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "primary", className: "pfext-quick-start-footer__actionbtn", onClick: onNext, "data-testid": `qs-drawer-${camelize(getPrimaryButtonText)}`, "data-test": `${getPrimaryButtonText} button` }, { children: getPrimaryButtonText }))), [getPrimaryButtonText, onNext]);
|
|
2036
|
+
const getSecondaryButton = react.useMemo(() => taskNumber === -1 && status !== exports.QuickStartStatus.NOT_STARTED ? (jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "secondary", onClick: onRestart, "data-testid": "qs-drawer-restart" }, { children: SecondaryButtonText.RESTART }))) : (taskNumber > -1 && (jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "secondary", onClick: onBack, "data-testid": "qs-drawer-back" }, { children: SecondaryButtonText.BACK })))), [onRestart, onBack, SecondaryButtonText, status, taskNumber]);
|
|
2037
|
+
const getSideNoteAction = react.useMemo(() => taskNumber !== -1 && (jsxRuntime.jsx(reactCore.Button, Object.assign({ variant: "link", onClick: onRestart, "data-testid": "qs-drawer-side-note-action" }, { children: SecondaryButtonText.RESTART }))), [taskNumber, onRestart, SecondaryButtonText.RESTART]);
|
|
2038
|
+
return (jsxRuntime.jsx("div", Object.assign({ className: reactStyles.css('pfext-quick-start-footer', className) }, { children: jsxRuntime.jsxs(reactCore.ActionList, { children: [jsxRuntime.jsxs(reactCore.ActionListGroup, { children: [jsxRuntime.jsx(reactCore.ActionListItem, { children: getPrimaryButton }), jsxRuntime.jsx(reactCore.ActionListItem, { children: getSecondaryButton })] }), jsxRuntime.jsx(reactCore.ActionListGroup, { children: jsxRuntime.jsx(reactCore.ActionListItem, { children: getSideNoteAction }) })] }) })));
|
|
2079
2039
|
};
|
|
2080
2040
|
|
|
2081
2041
|
const QuickStartController = ({ quickStart, nextQuickStarts, contentRef, footerClass, }) => {
|
|
2082
2042
|
const { metadata: { name }, spec: { tasks = [] }, } = quickStart;
|
|
2083
2043
|
const totalTasks = tasks === null || tasks === void 0 ? void 0 : tasks.length;
|
|
2084
|
-
const { activeQuickStartID, allQuickStartStates, setAllQuickStartStates, activeQuickStartState, setActiveQuickStart, setQuickStartTaskNumber, setQuickStartTaskStatus, nextStep, previousStep, } =
|
|
2085
|
-
|
|
2044
|
+
const { activeQuickStartID, allQuickStartStates, setAllQuickStartStates, activeQuickStartState, setActiveQuickStart, setQuickStartTaskNumber, setQuickStartTaskStatus, nextStep, previousStep, } = react.useContext(QuickStartContext);
|
|
2045
|
+
react.useEffect(() => {
|
|
2086
2046
|
// If activeQuickStartID was changed through prop from QuickStartContainer, need to init the state if it does not exist yet
|
|
2087
2047
|
if (activeQuickStartID && !allQuickStartStates[activeQuickStartID]) {
|
|
2088
2048
|
setAllQuickStartStates(Object.assign(Object.assign({}, allQuickStartStates), { [activeQuickStartID]: getDefaultQuickStartState() }));
|
|
@@ -2091,9 +2051,9 @@ const QuickStartController = ({ quickStart, nextQuickStarts, contentRef, footerC
|
|
|
2091
2051
|
const status = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.status;
|
|
2092
2052
|
const taskNumber = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.taskNumber;
|
|
2093
2053
|
const allTaskStatuses = tasks.map((task, index) => activeQuickStartState[`taskStatus${index}`]);
|
|
2094
|
-
const handleQuickStartChange =
|
|
2095
|
-
const handleTaskStatusChange =
|
|
2096
|
-
const getQuickStartActiveTask =
|
|
2054
|
+
const handleQuickStartChange = react.useCallback((quickStartId) => setActiveQuickStart(quickStartId), [setActiveQuickStart]);
|
|
2055
|
+
const handleTaskStatusChange = react.useCallback((newTaskStatus) => setQuickStartTaskStatus(newTaskStatus), [setQuickStartTaskStatus]);
|
|
2056
|
+
const getQuickStartActiveTask = react.useCallback(() => {
|
|
2097
2057
|
let activeTaskNumber = 0;
|
|
2098
2058
|
while (activeTaskNumber !== totalTasks &&
|
|
2099
2059
|
activeQuickStartState[`taskStatus${activeTaskNumber}`] === exports.QuickStartTaskStatus.SUCCESS) {
|
|
@@ -2101,11 +2061,11 @@ const QuickStartController = ({ quickStart, nextQuickStarts, contentRef, footerC
|
|
|
2101
2061
|
}
|
|
2102
2062
|
return activeTaskNumber;
|
|
2103
2063
|
}, [totalTasks, activeQuickStartState]);
|
|
2104
|
-
const handleQuickStartContinue =
|
|
2064
|
+
const handleQuickStartContinue = react.useCallback(() => {
|
|
2105
2065
|
const activeTaskNumber = getQuickStartActiveTask();
|
|
2106
2066
|
setQuickStartTaskNumber(name, activeTaskNumber);
|
|
2107
2067
|
}, [getQuickStartActiveTask, setQuickStartTaskNumber, name]);
|
|
2108
|
-
const handleNext =
|
|
2068
|
+
const handleNext = react.useCallback(() => {
|
|
2109
2069
|
if (status === exports.QuickStartStatus.COMPLETE && taskNumber === totalTasks) {
|
|
2110
2070
|
return handleQuickStartChange('');
|
|
2111
2071
|
}
|
|
@@ -2114,13 +2074,11 @@ const QuickStartController = ({ quickStart, nextQuickStarts, contentRef, footerC
|
|
|
2114
2074
|
}
|
|
2115
2075
|
return nextStep(totalTasks);
|
|
2116
2076
|
}, [handleQuickStartChange, nextStep, status, taskNumber, totalTasks, handleQuickStartContinue]);
|
|
2117
|
-
const handleBack =
|
|
2118
|
-
const handleTaskSelect =
|
|
2077
|
+
const handleBack = react.useCallback(() => previousStep(), [previousStep]);
|
|
2078
|
+
const handleTaskSelect = react.useCallback((selectedTaskNumber) => {
|
|
2119
2079
|
setQuickStartTaskNumber(name, selectedTaskNumber);
|
|
2120
2080
|
}, [name, setQuickStartTaskNumber]);
|
|
2121
|
-
return (
|
|
2122
|
-
React__namespace.createElement(QuickStartContent, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskSelect: handleTaskSelect, onTaskReview: handleTaskStatusChange, onQuickStartChange: handleQuickStartChange, ref: contentRef }),
|
|
2123
|
-
React__namespace.createElement(QuickStartFooter, { status: status, taskNumber: taskNumber, totalTasks: totalTasks, onNext: handleNext, onBack: handleBack, className: footerClass, quickStartId: quickStart.metadata.name })));
|
|
2081
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(QuickStartContent, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, taskNumber: taskNumber, allTaskStatuses: allTaskStatuses, onTaskSelect: handleTaskSelect, onTaskReview: handleTaskStatusChange, onQuickStartChange: handleQuickStartChange, ref: contentRef }), jsxRuntime.jsx(QuickStartFooter, { status: status, taskNumber: taskNumber, totalTasks: totalTasks, onNext: handleNext, onBack: handleBack, className: footerClass, quickStartId: quickStart.metadata.name })] }));
|
|
2124
2082
|
};
|
|
2125
2083
|
|
|
2126
2084
|
const getElement = (appendTo) => {
|
|
@@ -2130,7 +2088,7 @@ const getElement = (appendTo) => {
|
|
|
2130
2088
|
return appendTo;
|
|
2131
2089
|
};
|
|
2132
2090
|
const useScrollTopOnTaskNumberChange = (node, taskNumber) => {
|
|
2133
|
-
|
|
2091
|
+
react.useEffect(() => {
|
|
2134
2092
|
if (node) {
|
|
2135
2093
|
node.scrollTo({ top: 0, behavior: 'smooth' });
|
|
2136
2094
|
}
|
|
@@ -2138,9 +2096,9 @@ const useScrollTopOnTaskNumberChange = (node, taskNumber) => {
|
|
|
2138
2096
|
};
|
|
2139
2097
|
const QuickStartPanelContent = (_a) => {
|
|
2140
2098
|
var { quickStarts = [], handleClose, activeQuickStartID, appendTo, isResizable = true, showClose = true, footerClass } = _a, props = tslib.__rest(_a, ["quickStarts", "handleClose", "activeQuickStartID", "appendTo", "isResizable", "showClose", "footerClass"]);
|
|
2141
|
-
const titleRef =
|
|
2142
|
-
const { getResource, activeQuickStartState, focusOnQuickStart } =
|
|
2143
|
-
const [contentRef, setContentRef] =
|
|
2099
|
+
const titleRef = react.useRef(null);
|
|
2100
|
+
const { getResource, activeQuickStartState, focusOnQuickStart } = react.useContext(QuickStartContext);
|
|
2101
|
+
const [contentRef, setContentRef] = react.useState();
|
|
2144
2102
|
const quickStart = quickStarts.find((qs) => qs.metadata.name === activeQuickStartID);
|
|
2145
2103
|
const taskNumber = activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.taskNumber;
|
|
2146
2104
|
useScrollTopOnTaskNumberChange(contentRef, taskNumber);
|
|
@@ -2156,27 +2114,16 @@ const QuickStartPanelContent = (_a) => {
|
|
|
2156
2114
|
}
|
|
2157
2115
|
return Number.parseInt(taskNumber) + 1;
|
|
2158
2116
|
};
|
|
2159
|
-
|
|
2117
|
+
react.useEffect(() => {
|
|
2160
2118
|
if (focusOnQuickStart && quickStart) {
|
|
2161
2119
|
titleRef.current.focus();
|
|
2162
2120
|
}
|
|
2163
2121
|
}, [focusOnQuickStart, quickStart]);
|
|
2164
|
-
const content = quickStart ? (
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
React__namespace.createElement("span", null, quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.displayName),
|
|
2170
|
-
' '),
|
|
2171
|
-
React__namespace.createElement("span", null, (quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
2172
|
-
? getResource('{{type}} • {{duration, number}} minutes', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
2173
|
-
.replace('{{duration, number}}', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
2174
|
-
.replace('{{type}}', getResource('Type'))
|
|
2175
|
-
: getResource('Type'))),
|
|
2176
|
-
showClose && (React__namespace.createElement(reactCore.DrawerActions, null,
|
|
2177
|
-
React__namespace.createElement(reactCore.DrawerCloseButton, { onClick: handleClose, className: "pfext-quick-start-panel-content__close-button", "data-testid": "qs-drawer-close" }))))),
|
|
2178
|
-
React__namespace.createElement(reactCore.DrawerPanelBody, { className: "pfext-quick-start-panel-content__body", "data-test": "content" },
|
|
2179
|
-
React__namespace.createElement(QuickStartController, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, footerClass: footerClass, contentRef: setContentRef })))) : null;
|
|
2122
|
+
const content = quickStart ? (jsxRuntime.jsxs(reactCore.DrawerPanelContent, Object.assign({ isResizable: isResizable, "data-testid": `qs-drawer-${camelize(quickStart.spec.displayName)}`, "data-qs": `qs-step-${getStep()}`, "data-test": "quickstart drawer", style: { '--pf-v6-c-drawer__panel--PaddingBlockStart': '0' } }, props, { children: [jsxRuntime.jsx("div", Object.assign({ className: "pfext-quick-start-panel-content" }, { children: jsxRuntime.jsxs(reactCore.DrawerHead, { children: [jsxRuntime.jsxs("div", Object.assign({ tabIndex: -1, ref: titleRef }, { children: [jsxRuntime.jsxs(reactCore.Title, Object.assign({ headingLevel: "h2", size: "xl", style: { marginRight: 'var(--pf-t--global--spacer--md)' } }, { children: [jsxRuntime.jsx("span", { children: quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.displayName }), ' '] })), jsxRuntime.jsx("span", { children: (quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
2123
|
+
? getResource('{{type}} • {{duration, number}} minutes', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
2124
|
+
.replace('{{duration, number}}', quickStart === null || quickStart === void 0 ? void 0 : quickStart.spec.durationMinutes)
|
|
2125
|
+
.replace('{{type}}', getResource('Type'))
|
|
2126
|
+
: getResource('Type') })] })), showClose && (jsxRuntime.jsx(reactCore.DrawerActions, { children: jsxRuntime.jsx(reactCore.DrawerCloseButton, { onClick: handleClose, className: "pfext-quick-start-panel-content__close-button", "data-testid": "qs-drawer-close" }) }))] }) })), jsxRuntime.jsx(reactCore.DrawerPanelBody, Object.assign({ className: "pfext-quick-start-panel-content__body", "data-test": "content" }, { children: jsxRuntime.jsx(QuickStartController, { quickStart: quickStart, nextQuickStarts: nextQuickStarts, footerClass: footerClass, contentRef: setContentRef }) }))] }))) : null;
|
|
2180
2127
|
if (appendTo) {
|
|
2181
2128
|
return ReactDOM__namespace.createPortal(content, getElement(appendTo));
|
|
2182
2129
|
}
|
|
@@ -2185,8 +2132,8 @@ const QuickStartPanelContent = (_a) => {
|
|
|
2185
2132
|
|
|
2186
2133
|
const QuickStartDrawerContent = (_a) => {
|
|
2187
2134
|
var { quickStarts = [], appendTo, fullWidth, handleDrawerClose } = _a, props = tslib.__rest(_a, ["quickStarts", "appendTo", "fullWidth", "handleDrawerClose"]);
|
|
2188
|
-
const { activeQuickStartID, allQuickStarts = [], activeQuickStartState, } =
|
|
2189
|
-
const combinedQuickStarts = allQuickStarts.
|
|
2135
|
+
const { activeQuickStartID, allQuickStarts = [], activeQuickStartState, } = react.useContext(QuickStartContext);
|
|
2136
|
+
const combinedQuickStarts = [...allQuickStarts, ...quickStarts].filter((qs, idx, arr) => arr.findIndex((q) => q.metadata.name === qs.metadata.name) === idx);
|
|
2190
2137
|
const handleClose = () => {
|
|
2191
2138
|
handleDrawerClose && handleDrawerClose(activeQuickStartState === null || activeQuickStartState === void 0 ? void 0 : activeQuickStartState.status);
|
|
2192
2139
|
};
|
|
@@ -2197,14 +2144,14 @@ const QuickStartDrawerContent = (_a) => {
|
|
|
2197
2144
|
},
|
|
2198
2145
|
}
|
|
2199
2146
|
: {};
|
|
2200
|
-
return (
|
|
2147
|
+
return (jsxRuntime.jsx(QuickStartPanelContent, Object.assign({ quickStarts: combinedQuickStarts, handleClose: handleClose, activeQuickStartID: activeQuickStartID, appendTo: appendTo, isResizable: !fullWidth }, fullWidthPanelStyle, props)));
|
|
2201
2148
|
};
|
|
2202
2149
|
|
|
2203
2150
|
const QuickStartDrawer = (_a) => {
|
|
2204
2151
|
var { quickStarts = [], children, appendTo, fullWidth, onCloseInProgress, onCloseNotInProgress } = _a, props = tslib.__rest(_a, ["quickStarts", "children", "appendTo", "fullWidth", "onCloseInProgress", "onCloseNotInProgress"]);
|
|
2205
|
-
const { activeQuickStartID, setActiveQuickStart, allQuickStarts = [], allQuickStartStates, setAllQuickStartStates, } =
|
|
2152
|
+
const { activeQuickStartID, setActiveQuickStart, allQuickStarts = [], allQuickStartStates, setAllQuickStartStates, } = react.useContext(QuickStartContext);
|
|
2206
2153
|
const combinedQuickStarts = allQuickStarts.concat(quickStarts);
|
|
2207
|
-
|
|
2154
|
+
react.useEffect(() => {
|
|
2208
2155
|
const params = new URLSearchParams(window.location.search);
|
|
2209
2156
|
// if there is a quick start param, but the quick start is not active, set it
|
|
2210
2157
|
// this can happen if a new browser session is opened or an incognito window for example
|
|
@@ -2217,13 +2164,13 @@ const QuickStartDrawer = (_a) => {
|
|
|
2217
2164
|
}
|
|
2218
2165
|
}
|
|
2219
2166
|
}, [activeQuickStartID, combinedQuickStarts, setActiveQuickStart]);
|
|
2220
|
-
|
|
2167
|
+
react.useEffect(() => {
|
|
2221
2168
|
// If activeQuickStartID was changed through prop from QuickStartContainer, need to init the state if it does not exist yet
|
|
2222
2169
|
if (activeQuickStartID && !allQuickStartStates[activeQuickStartID]) {
|
|
2223
2170
|
setAllQuickStartStates(Object.assign(Object.assign({}, allQuickStartStates), { [activeQuickStartID]: getDefaultQuickStartState() }));
|
|
2224
2171
|
}
|
|
2225
2172
|
}, [activeQuickStartID, allQuickStartStates, setAllQuickStartStates]);
|
|
2226
|
-
const [modalOpen, setModalOpen] =
|
|
2173
|
+
const [modalOpen, setModalOpen] = react.useState(false);
|
|
2227
2174
|
const onClose = () => setActiveQuickStart('');
|
|
2228
2175
|
const handleClose = (activeQuickStartStatus) => {
|
|
2229
2176
|
if (activeQuickStartStatus === exports.QuickStartStatus.IN_PROGRESS) {
|
|
@@ -2253,11 +2200,7 @@ const QuickStartDrawer = (_a) => {
|
|
|
2253
2200
|
},
|
|
2254
2201
|
}
|
|
2255
2202
|
: {};
|
|
2256
|
-
return (
|
|
2257
|
-
React__namespace.createElement(reactCore.Drawer, Object.assign({ isExpanded: !!activeQuickStartID, isInline: true }, props),
|
|
2258
|
-
React__namespace.createElement(reactCore.DrawerContent, Object.assign({ panelContent: React__namespace.createElement(QuickStartDrawerContent, { quickStarts: combinedQuickStarts, handleDrawerClose: handleClose, appendTo: appendTo, fullWidth: fullWidth }) }, fullWidthBodyStyle),
|
|
2259
|
-
React__namespace.createElement(reactCore.DrawerContentBody, null, children))),
|
|
2260
|
-
React__namespace.createElement(QuickStartCloseModal, { isOpen: modalOpen, onConfirm: onModalConfirm, onCancel: onModalCancel })));
|
|
2203
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(reactCore.Drawer, Object.assign({ isExpanded: !!activeQuickStartID, isInline: true }, props, { children: jsxRuntime.jsx(reactCore.DrawerContent, Object.assign({ panelContent: jsxRuntime.jsx(QuickStartDrawerContent, { quickStarts: combinedQuickStarts, handleDrawerClose: handleClose, appendTo: appendTo, fullWidth: fullWidth }) }, fullWidthBodyStyle, { children: jsxRuntime.jsx(reactCore.DrawerContentBody, { children: children }) })) })), jsxRuntime.jsx(QuickStartCloseModal, { isOpen: modalOpen, onConfirm: onModalConfirm, onCancel: onModalCancel })] }));
|
|
2261
2204
|
};
|
|
2262
2205
|
|
|
2263
2206
|
const QuickStartContainer = (_a) => {
|
|
@@ -2272,13 +2215,13 @@ const QuickStartContainer = (_a) => {
|
|
|
2272
2215
|
useQueryParams,
|
|
2273
2216
|
markdown,
|
|
2274
2217
|
alwaysShowTaskReview }, contextProps));
|
|
2275
|
-
|
|
2218
|
+
react.useEffect(() => {
|
|
2276
2219
|
if (quickStarts &&
|
|
2277
2220
|
JSON.stringify(quickStarts) !== JSON.stringify(valuesForQuickstartContext.allQuickStarts)) {
|
|
2278
2221
|
valuesForQuickstartContext.setAllQuickStarts(quickStarts);
|
|
2279
2222
|
}
|
|
2280
2223
|
}, [quickStarts, valuesForQuickstartContext]);
|
|
2281
|
-
|
|
2224
|
+
react.useEffect(() => {
|
|
2282
2225
|
if (loading !== valuesForQuickstartContext.loading) {
|
|
2283
2226
|
valuesForQuickstartContext.setLoading(loading);
|
|
2284
2227
|
}
|
|
@@ -2287,7 +2230,7 @@ const QuickStartContainer = (_a) => {
|
|
|
2287
2230
|
fullWidth,
|
|
2288
2231
|
onCloseInProgress,
|
|
2289
2232
|
onCloseNotInProgress }, props);
|
|
2290
|
-
return (
|
|
2233
|
+
return (jsxRuntime.jsx(QuickStartContext.Provider, Object.assign({ value: valuesForQuickstartContext }, { children: isManagedDrawer ? (jsxRuntime.jsx(QuickStartDrawer, Object.assign({}, drawerProps, { children: children }))) : (children) })));
|
|
2291
2234
|
};
|
|
2292
2235
|
|
|
2293
2236
|
const HelpTopicContextDefaults = {
|
|
@@ -2299,14 +2242,14 @@ const HelpTopicContextDefaults = {
|
|
|
2299
2242
|
setFilteredHelpTopics: () => { },
|
|
2300
2243
|
loading: false,
|
|
2301
2244
|
};
|
|
2302
|
-
const HelpTopicContext =
|
|
2245
|
+
const HelpTopicContext = react.createContext(HelpTopicContextDefaults);
|
|
2303
2246
|
const useValuesForHelpTopicContext = (value = {}) => {
|
|
2304
2247
|
const combinedValue = Object.assign(Object.assign({}, HelpTopicContextDefaults), value);
|
|
2305
|
-
const [loading, setLoading] =
|
|
2248
|
+
const [loading, setLoading] = react.useState(combinedValue.loading);
|
|
2306
2249
|
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
|
2307
|
-
const [helpTopics, setHelpTopics] =
|
|
2308
|
-
const [activeHelpTopic, setActiveHelpTopic] =
|
|
2309
|
-
const setActiveHelpTopicByName =
|
|
2250
|
+
const [helpTopics, setHelpTopics] = react.useState(combinedValue.helpTopics || []);
|
|
2251
|
+
const [activeHelpTopic, setActiveHelpTopic] = react.useState(combinedValue.activeHelpTopic || null);
|
|
2252
|
+
const setActiveHelpTopicByName = react.useCallback((helpTopicName) => {
|
|
2310
2253
|
const topic = helpTopics.find((t) => t.name === helpTopicName);
|
|
2311
2254
|
if (!helpTopicName) {
|
|
2312
2255
|
setActiveHelpTopic(null);
|
|
@@ -2314,7 +2257,7 @@ const useValuesForHelpTopicContext = (value = {}) => {
|
|
|
2314
2257
|
}
|
|
2315
2258
|
setActiveHelpTopic(topic);
|
|
2316
2259
|
}, [helpTopics]);
|
|
2317
|
-
const [filteredHelpTopics, setFilteredHelpTopics] =
|
|
2260
|
+
const [filteredHelpTopics, setFilteredHelpTopics] = react.useState(combinedValue.filteredHelpTopics || []);
|
|
2318
2261
|
return {
|
|
2319
2262
|
helpTopics,
|
|
2320
2263
|
setHelpTopics,
|
|
@@ -2330,8 +2273,8 @@ const useValuesForHelpTopicContext = (value = {}) => {
|
|
|
2330
2273
|
const HelpTopicPanelContent = (_a) => {
|
|
2331
2274
|
var _b, _c;
|
|
2332
2275
|
var { activeHelpTopic = null, filteredHelpTopics = [], isResizable = true, onClose } = _a, props = tslib.__rest(_a, ["activeHelpTopic", "filteredHelpTopics", "isResizable", "onClose"]);
|
|
2333
|
-
const { setActiveHelpTopicByName } =
|
|
2334
|
-
const [isHelpTopicMenuOpen, setIsHelpTopicMenuOpen] =
|
|
2276
|
+
const { setActiveHelpTopicByName } = react.useContext(HelpTopicContext);
|
|
2277
|
+
const [isHelpTopicMenuOpen, setIsHelpTopicMenuOpen] = react.useState(false);
|
|
2335
2278
|
const toggleHelpTopicMenu = () => {
|
|
2336
2279
|
setIsHelpTopicMenuOpen(!isHelpTopicMenuOpen);
|
|
2337
2280
|
};
|
|
@@ -2341,24 +2284,10 @@ const HelpTopicPanelContent = (_a) => {
|
|
|
2341
2284
|
toggleHelpTopicMenu();
|
|
2342
2285
|
};
|
|
2343
2286
|
const helpTopicOptions = filteredHelpTopics.length > 1 &&
|
|
2344
|
-
filteredHelpTopics.map((topic) => (
|
|
2345
|
-
const paddingContainer = (children) =>
|
|
2346
|
-
const panelBodyItems = (
|
|
2347
|
-
|
|
2348
|
-
!!((_b = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _b === void 0 ? void 0 : _b.length) && React__namespace.createElement(reactCore.Divider, null),
|
|
2349
|
-
paddingContainer(React__namespace.createElement(reactCore.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__namespace.createElement(reactCore.StackItem, { key: index },
|
|
2350
|
-
React__namespace.createElement(reactCore.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__namespace.createElement(ExternalLinkAltIcon__default["default"], null) : null, iconPosition: "right", style: { fontSize: 'inherit' } }, text || href))))))));
|
|
2351
|
-
const content = (React__namespace.createElement(reactCore.DrawerPanelContent, Object.assign({ isResizable: isResizable }, props),
|
|
2352
|
-
React__namespace.createElement("div", null,
|
|
2353
|
-
React__namespace.createElement(reactCore.DrawerHead, null,
|
|
2354
|
-
React__namespace.createElement("div", null,
|
|
2355
|
-
helpTopicOptions && (React__namespace.createElement(reactCore.Select, { isPlain: true, id: "help-topics-select", selected: activeHelpTopic, isOpen: isHelpTopicMenuOpen, onSelect: onSelectHelpTopic, onOpenChange: (isOpen) => setIsHelpTopicMenuOpen(isOpen), toggle: (toggleRef) => (React__namespace.createElement(reactCore.MenuToggle, { isFullWidth: true, ref: toggleRef, icon: React__namespace.createElement(BarsIcon__default["default"], null), onClick: toggleHelpTopicMenu, isExpanded: isHelpTopicMenuOpen }, activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title)) },
|
|
2356
|
-
React__namespace.createElement(reactCore.SelectList, null, helpTopicOptions))),
|
|
2357
|
-
React__namespace.createElement(reactCore.Title, { headingLevel: "h1", size: "xl", style: { marginRight: 'var(--pf-t--global--spacer--md)' } }, activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title)),
|
|
2358
|
-
React__namespace.createElement(reactCore.DrawerActions, null,
|
|
2359
|
-
React__namespace.createElement(reactCore.DrawerCloseButton, { onClick: onClose, "data-testid": "qs-drawer-close" }))),
|
|
2360
|
-
React__namespace.createElement(reactCore.Divider, null),
|
|
2361
|
-
React__namespace.createElement(reactCore.DrawerPanelBody, { "data-test": "content" }, panelBodyItems))));
|
|
2287
|
+
filteredHelpTopics.map((topic) => (jsxRuntime.jsx(reactCore.SelectOption, Object.assign({ value: topic.name }, { children: topic.title }), topic.name)));
|
|
2288
|
+
const paddingContainer = (children) => jsxRuntime.jsx("div", Object.assign({ style: { padding: '24px' } }, { children: children }));
|
|
2289
|
+
const panelBodyItems = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [paddingContainer(jsxRuntime.jsx(QuickStartMarkdownView, { content: activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.content })), !!((_b = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _b === void 0 ? void 0 : _b.length) && jsxRuntime.jsx(reactCore.Divider, {}), paddingContainer(jsxRuntime.jsx(reactCore.Stack, Object.assign({ hasGutter: true }, { children: (_c = activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.links) === null || _c === void 0 ? void 0 : _c.map(({ href, text, newTab, isExternal }, index) => (jsxRuntime.jsx(reactCore.StackItem, { children: jsxRuntime.jsx(reactCore.Button, Object.assign({ component: "a", href: href, target: newTab ? '_blank' : '', rel: "noopener noreferrer", variant: "link", "aria-label": `Open documentation in new window`, isInline: true, icon: isExternal ? jsxRuntime.jsx(ExternalLinkAltIcon__default["default"], {}) : null, iconPosition: "right", style: { fontSize: 'inherit' } }, { children: text || href })) }, index))) })))] }));
|
|
2290
|
+
const content = (jsxRuntime.jsx(reactCore.DrawerPanelContent, Object.assign({ isResizable: isResizable }, props, { children: jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs(reactCore.DrawerHead, { children: [jsxRuntime.jsxs("div", { children: [helpTopicOptions && (jsxRuntime.jsx(reactCore.Select, Object.assign({ isPlain: true, id: "help-topics-select", selected: activeHelpTopic, isOpen: isHelpTopicMenuOpen, onSelect: onSelectHelpTopic, onOpenChange: (isOpen) => setIsHelpTopicMenuOpen(isOpen), toggle: (toggleRef) => (jsxRuntime.jsx(reactCore.MenuToggle, Object.assign({ isFullWidth: true, ref: toggleRef, icon: jsxRuntime.jsx(BarsIcon__default["default"], {}), onClick: toggleHelpTopicMenu, isExpanded: isHelpTopicMenuOpen }, { children: activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title }))) }, { children: jsxRuntime.jsx(reactCore.SelectList, { children: helpTopicOptions }) }))), jsxRuntime.jsx(reactCore.Title, Object.assign({ headingLevel: "h1", size: "xl", style: { marginRight: 'var(--pf-t--global--spacer--md)' } }, { children: activeHelpTopic === null || activeHelpTopic === void 0 ? void 0 : activeHelpTopic.title }))] }), jsxRuntime.jsx(reactCore.DrawerActions, { children: jsxRuntime.jsx(reactCore.DrawerCloseButton, { onClick: onClose, "data-testid": "qs-drawer-close" }) })] }), jsxRuntime.jsx(reactCore.Divider, {}), jsxRuntime.jsx(reactCore.DrawerPanelBody, Object.assign({ "data-test": "content" }, { children: panelBodyItems }))] }) })));
|
|
2362
2291
|
return content;
|
|
2363
2292
|
};
|
|
2364
2293
|
|
|
@@ -2367,36 +2296,33 @@ const HelpTopicContainer = (_a) => {
|
|
|
2367
2296
|
const valuesForHelpTopicContext = useValuesForHelpTopicContext(Object.assign({ helpTopics,
|
|
2368
2297
|
language, resourceBundle: Object.assign({}, resourceBundle), loading,
|
|
2369
2298
|
markdown }, contextProps));
|
|
2370
|
-
|
|
2299
|
+
react.useEffect(() => {
|
|
2371
2300
|
if (loading !== valuesForHelpTopicContext.loading) {
|
|
2372
2301
|
valuesForHelpTopicContext.setLoading(loading);
|
|
2373
2302
|
}
|
|
2374
2303
|
}, [loading, valuesForHelpTopicContext]);
|
|
2375
|
-
|
|
2304
|
+
react.useEffect(() => {
|
|
2376
2305
|
if (helpTopics &&
|
|
2377
2306
|
JSON.stringify(helpTopics) !== JSON.stringify(valuesForHelpTopicContext.helpTopics)) {
|
|
2378
2307
|
valuesForHelpTopicContext.setHelpTopics(helpTopics);
|
|
2379
2308
|
}
|
|
2380
2309
|
}, [helpTopics, valuesForHelpTopicContext]);
|
|
2381
|
-
return (
|
|
2382
|
-
React__namespace.createElement(HelpTopicDrawer, Object.assign({}, props), children)));
|
|
2310
|
+
return (jsxRuntime.jsx(HelpTopicContext.Provider, Object.assign({ value: valuesForHelpTopicContext }, { children: jsxRuntime.jsx(HelpTopicDrawer, Object.assign({}, props, { children: children })) })));
|
|
2383
2311
|
};
|
|
2384
2312
|
const HelpTopicDrawer = (_a) => {
|
|
2385
2313
|
var { children } = _a, props = tslib.__rest(_a, ["children"]);
|
|
2386
|
-
const { activeHelpTopic, filteredHelpTopics, setActiveHelpTopicByName } =
|
|
2314
|
+
const { activeHelpTopic, filteredHelpTopics, setActiveHelpTopicByName } = react.useContext(HelpTopicContext);
|
|
2387
2315
|
const onClose = () => {
|
|
2388
2316
|
setActiveHelpTopicByName('');
|
|
2389
2317
|
};
|
|
2390
|
-
const panelContent = (
|
|
2391
|
-
return (
|
|
2392
|
-
React__namespace.createElement(reactCore.Drawer, Object.assign({ isExpanded: !!activeHelpTopic, isInline: true }, props), children ? (React__namespace.createElement(reactCore.DrawerContent, { panelContent: panelContent },
|
|
2393
|
-
React__namespace.createElement(reactCore.DrawerContentBody, null, children))) : (React__namespace.createElement("div", { className: "pf-v6-c-drawer__main" }, panelContent)))));
|
|
2318
|
+
const panelContent = (jsxRuntime.jsx(HelpTopicPanelContent, { activeHelpTopic: activeHelpTopic, filteredHelpTopics: filteredHelpTopics, onClose: onClose }));
|
|
2319
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(reactCore.Drawer, Object.assign({ isExpanded: !!activeHelpTopic, isInline: true }, props, { children: children ? (jsxRuntime.jsx(reactCore.DrawerContent, Object.assign({ panelContent: panelContent }, { children: jsxRuntime.jsx(reactCore.DrawerContentBody, { children: children }) }))) : (jsxRuntime.jsx("div", Object.assign({ className: "pf-v6-c-drawer__main" }, { children: panelContent }))) })) }));
|
|
2394
2320
|
};
|
|
2395
2321
|
|
|
2396
2322
|
const useLocalStorage = (key, initialValue) => {
|
|
2397
2323
|
// State to store our value
|
|
2398
2324
|
// Pass initial state function to useState so logic is only executed once
|
|
2399
|
-
const [storedValue, setStoredValue] =
|
|
2325
|
+
const [storedValue, setStoredValue] = react.useState(() => {
|
|
2400
2326
|
try {
|
|
2401
2327
|
// Get from local storage by key
|
|
2402
2328
|
const item = window.localStorage.getItem(key);
|