@patternfly/quickstarts 6.3.0-prerelease.3 → 6.3.0-prerelease.4
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-render-extension.d.ts +2 -2
- 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 +2 -2
- package/dist/ConsoleShared/src/components/spotlight/Spotlight.d.ts +2 -2
- package/dist/ConsoleShared/src/components/spotlight/StaticSpotlight.d.ts +2 -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 +299 -459
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +310 -472
- package/dist/index.js.map +1 -1
- package/dist/quickstarts-full.es.js +1693 -511
- package/dist/quickstarts-full.es.js.map +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 +3 -4
- package/src/ConsoleInternal/components/markdown-view.tsx +20 -18
- 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/accordion-extension.tsx +2 -2
- package/src/ConsoleShared/src/components/markdown-extensions/accordion-render-extension.tsx +4 -4
- package/src/ConsoleShared/src/components/markdown-extensions/admonition-extension.tsx +2 -2
- 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 +5 -5
- package/src/ConsoleShared/src/components/spotlight/Spotlight.tsx +3 -3
- package/src/ConsoleShared/src/components/spotlight/StaticSpotlight.tsx +3 -3
- 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 +3 -3
- 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 +16 -16
- 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 +4 -4
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
2
|
import { HelpTopic } from './help-topic-types';
|
|
3
3
|
export interface HelpTopicContextValues {
|
|
4
4
|
helpTopics?: HelpTopic[];
|
|
@@ -19,5 +19,5 @@ export declare const HelpTopicContextDefaults: {
|
|
|
19
19
|
setFilteredHelpTopics: () => void;
|
|
20
20
|
loading: boolean;
|
|
21
21
|
};
|
|
22
|
-
export declare const HelpTopicContext:
|
|
22
|
+
export declare const HelpTopicContext: import("react").Context<HelpTopicContextValues>;
|
|
23
23
|
export declare const useValuesForHelpTopicContext: (value?: HelpTopicContextValues) => HelpTopicContextValues;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC } from 'react';
|
|
2
2
|
import { AllQuickStartStates, QuickStart, QuickStartState, QuickStartStatus, QuickStartTaskStatus } from './quick-start-types';
|
|
3
3
|
export interface FooterProps {
|
|
4
4
|
show?: boolean;
|
|
@@ -74,10 +74,10 @@ export declare const QuickStartContextDefaults: {
|
|
|
74
74
|
alwaysShowTaskReview: boolean;
|
|
75
75
|
focusOnQuickStart: boolean;
|
|
76
76
|
};
|
|
77
|
-
export declare const QuickStartContext:
|
|
77
|
+
export declare const QuickStartContext: import("react").Context<QuickStartContextValues>;
|
|
78
78
|
export declare const getResource: (resource: string, options: any, resourceBundle: any, lng: string) => any;
|
|
79
79
|
export declare const useValuesForQuickStartContext: (value?: QuickStartContextValues) => QuickStartContextValues;
|
|
80
|
-
export declare const QuickStartContextProvider:
|
|
80
|
+
export declare const QuickStartContextProvider: FC<{
|
|
81
81
|
children: React.ReactNode;
|
|
82
82
|
value: QuickStartContextValues;
|
|
83
83
|
}>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/quickstarts",
|
|
3
|
-
"version": "6.3.0-prerelease.
|
|
3
|
+
"version": "6.3.0-prerelease.4",
|
|
4
4
|
"description": "PatternFly quick starts",
|
|
5
5
|
"files": [
|
|
6
6
|
"src",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"@patternfly/react-core": "^6.0.0",
|
|
49
|
-
"react": "^17 || ^18",
|
|
50
|
-
"react-dom": "^17 || ^18",
|
|
49
|
+
"react": "^17 || ^18 || ^19",
|
|
50
|
+
"react-dom": "^17 || ^18 || ^19",
|
|
51
51
|
"marked": "^15.0.6"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
@@ -88,7 +88,6 @@
|
|
|
88
88
|
"react-axe": "^3.5.4",
|
|
89
89
|
"react-docgen-typescript-loader": "^3.7.2",
|
|
90
90
|
"react-dom": "^18.2.0",
|
|
91
|
-
"react-monaco-editor": "0.51.0",
|
|
92
91
|
"regenerator-runtime": "^0.13.7",
|
|
93
92
|
"rimraf": "^3.0.2",
|
|
94
93
|
"rollup": "^2.79.2",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import { marked } from 'marked';
|
|
4
4
|
import { useForceRender } from '@console/shared';
|
|
@@ -121,7 +121,7 @@ type InnerSyncMarkdownProps = Pick<SyncMarkdownProps, 'renderExtension' | 'exact
|
|
|
121
121
|
className?: string;
|
|
122
122
|
};
|
|
123
123
|
|
|
124
|
-
export const SyncMarkdownView:
|
|
124
|
+
export const SyncMarkdownView: FC<SyncMarkdownProps> = ({
|
|
125
125
|
content,
|
|
126
126
|
emptyMsg,
|
|
127
127
|
extensions,
|
|
@@ -130,10 +130,10 @@ export const SyncMarkdownView: React.FC<SyncMarkdownProps> = ({
|
|
|
130
130
|
inline,
|
|
131
131
|
className,
|
|
132
132
|
}) => {
|
|
133
|
-
const { getResource } =
|
|
134
|
-
const [markup, setMarkup] =
|
|
133
|
+
const { getResource } = useContext<QuickStartContextValues>(QuickStartContext);
|
|
134
|
+
const [markup, setMarkup] = useState<string>('');
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
useEffect(() => {
|
|
137
137
|
async function getMd() {
|
|
138
138
|
const md = await markdownConvert(
|
|
139
139
|
content || emptyMsg || getResource('Not available'),
|
|
@@ -176,8 +176,8 @@ const RenderExtension: React.FC<RenderExtensionProps> = ({
|
|
|
176
176
|
docContext,
|
|
177
177
|
}) => {
|
|
178
178
|
const forceRender = useForceRender();
|
|
179
|
-
const markupRef =
|
|
180
|
-
const shouldRenderExtension =
|
|
179
|
+
const markupRef = useRef<string>(null);
|
|
180
|
+
const shouldRenderExtension = useCallback(() => {
|
|
181
181
|
if (markupRef.current === markup) {
|
|
182
182
|
return true;
|
|
183
183
|
}
|
|
@@ -190,7 +190,7 @@ const RenderExtension: React.FC<RenderExtensionProps> = ({
|
|
|
190
190
|
* which causes the component rendered by renderExtension to receive old copy of document
|
|
191
191
|
* use forceRender to delay the rendering of extension by one render cycle
|
|
192
192
|
*/
|
|
193
|
-
|
|
193
|
+
useEffect(() => {
|
|
194
194
|
if (renderExtension) {
|
|
195
195
|
forceRender();
|
|
196
196
|
}
|
|
@@ -201,13 +201,13 @@ const RenderExtension: React.FC<RenderExtensionProps> = ({
|
|
|
201
201
|
);
|
|
202
202
|
};
|
|
203
203
|
|
|
204
|
-
const InlineMarkdownView:
|
|
204
|
+
const InlineMarkdownView: FC<InnerSyncMarkdownProps> = ({
|
|
205
205
|
markup,
|
|
206
206
|
isEmpty,
|
|
207
207
|
renderExtension,
|
|
208
208
|
className,
|
|
209
209
|
}) => {
|
|
210
|
-
const id =
|
|
210
|
+
const id = useMemo(() => uniqueId('markdown'), []);
|
|
211
211
|
return (
|
|
212
212
|
<div className={css({ 'is-empty': isEmpty } as any, className)} id={id}>
|
|
213
213
|
<div dangerouslySetInnerHTML={{ __html: markup }} />
|
|
@@ -218,18 +218,18 @@ const InlineMarkdownView: React.FC<InnerSyncMarkdownProps> = ({
|
|
|
218
218
|
);
|
|
219
219
|
};
|
|
220
220
|
|
|
221
|
-
const IFrameMarkdownView:
|
|
221
|
+
const IFrameMarkdownView: FC<InnerSyncMarkdownProps> = ({
|
|
222
222
|
exactHeight,
|
|
223
223
|
markup,
|
|
224
224
|
isEmpty,
|
|
225
225
|
renderExtension,
|
|
226
226
|
className,
|
|
227
227
|
}) => {
|
|
228
|
-
const [frame, setFrame] =
|
|
229
|
-
const [loaded, setLoaded] =
|
|
230
|
-
const updateTimeoutHandle =
|
|
228
|
+
const [frame, setFrame] = useState<HTMLIFrameElement>();
|
|
229
|
+
const [loaded, setLoaded] = useState(false);
|
|
230
|
+
const updateTimeoutHandle = useRef<NodeJS.Timeout>(null);
|
|
231
231
|
|
|
232
|
-
const updateDimensions =
|
|
232
|
+
const updateDimensions = useCallback(() => {
|
|
233
233
|
if (!frame?.contentWindow?.document.body.firstChild) {
|
|
234
234
|
return;
|
|
235
235
|
}
|
|
@@ -248,14 +248,14 @@ const IFrameMarkdownView: React.FC<InnerSyncMarkdownProps> = ({
|
|
|
248
248
|
});
|
|
249
249
|
}, [frame, exactHeight]);
|
|
250
250
|
|
|
251
|
-
|
|
251
|
+
useEffect(
|
|
252
252
|
() => () => {
|
|
253
253
|
clearTimeout(updateTimeoutHandle.current);
|
|
254
254
|
},
|
|
255
255
|
[],
|
|
256
256
|
);
|
|
257
257
|
|
|
258
|
-
const onLoad =
|
|
258
|
+
const onLoad = useCallback(() => {
|
|
259
259
|
updateDimensions();
|
|
260
260
|
setLoaded(true);
|
|
261
261
|
}, [updateDimensions]);
|
|
@@ -302,7 +302,9 @@ const IFrameMarkdownView: React.FC<InnerSyncMarkdownProps> = ({
|
|
|
302
302
|
sandbox="allow-popups allow-popups-to-escape-sandbox allow-same-origin"
|
|
303
303
|
srcDoc={contents}
|
|
304
304
|
style={{ border: '0px', display: 'block', width: '100%', height: '0' }}
|
|
305
|
-
ref={(r) =>
|
|
305
|
+
ref={(r) => {
|
|
306
|
+
setFrame(r);
|
|
307
|
+
}}
|
|
306
308
|
onLoad={() => onLoad()}
|
|
307
309
|
className={className}
|
|
308
310
|
/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Fragment } from 'react';
|
|
2
2
|
|
|
3
3
|
const MEMO = {};
|
|
4
4
|
|
|
@@ -16,10 +16,10 @@ export const CamelCaseWrap: React.FC<CamelCaseWrapProps> = ({ value, dataTest })
|
|
|
16
16
|
const rendered = (
|
|
17
17
|
<span data-test={dataTest}>
|
|
18
18
|
{words.map((word, i) => (
|
|
19
|
-
<
|
|
19
|
+
<Fragment key={i}>
|
|
20
20
|
{word}
|
|
21
21
|
{i !== words.length - 1 && <wbr />}
|
|
22
|
-
</
|
|
22
|
+
</Fragment>
|
|
23
23
|
))}
|
|
24
24
|
</span>
|
|
25
25
|
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, useContext } from 'react';
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import { QuickStartContext, QuickStartContextValues } from '../../../utils/quick-start-context';
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ export const Box: React.FC<BoxProps> = ({ children, className }) => (
|
|
|
6
6
|
<div className={css('pfext-status-box', className)}>{children}</div>
|
|
7
7
|
);
|
|
8
8
|
|
|
9
|
-
export const Loading:
|
|
9
|
+
export const Loading: FC<LoadingProps> = ({ className }) => (
|
|
10
10
|
<div className={css('pfext-m-loader', className)}>
|
|
11
11
|
<div className="pfext-m-loader-dot__one" />
|
|
12
12
|
<div className="pfext-m-loader-dot__two" />
|
|
@@ -15,7 +15,7 @@ export const Loading: React.FC<LoadingProps> = ({ className }) => (
|
|
|
15
15
|
);
|
|
16
16
|
Loading.displayName = 'Loading';
|
|
17
17
|
|
|
18
|
-
export const LoadingBox:
|
|
18
|
+
export const LoadingBox: FC<LoadingBoxProps> = ({ className, message }) => (
|
|
19
19
|
<Box className={css('pfext-status-box--loading', className)}>
|
|
20
20
|
<Loading />
|
|
21
21
|
{message && <div className="pfext-status-box__loading-message">{message}</div>}
|
|
@@ -24,7 +24,7 @@ export const LoadingBox: React.FC<LoadingBoxProps> = ({ className, message }) =>
|
|
|
24
24
|
LoadingBox.displayName = 'LoadingBox';
|
|
25
25
|
|
|
26
26
|
export const EmptyBox: React.FC<EmptyBoxProps> = ({ label }) => {
|
|
27
|
-
const { getResource } =
|
|
27
|
+
const { getResource } = useContext<QuickStartContextValues>(QuickStartContext);
|
|
28
28
|
return (
|
|
29
29
|
<Box>
|
|
30
30
|
<div data-test="empty-message" className="text-center">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, useCallback, useContext, useMemo, useState } from 'react';
|
|
2
2
|
import { Tooltip } from '@patternfly/react-core';
|
|
3
3
|
import { QuickStartContext, QuickStartContextValues } from '@quickstarts/utils/quick-start-context';
|
|
4
4
|
import { useEventListener } from '../../hooks';
|
|
@@ -10,14 +10,10 @@ interface CopyClipboardProps {
|
|
|
10
10
|
docContext: Document;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export const CopyClipboard:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}) => {
|
|
18
|
-
const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
|
|
19
|
-
const [showSuccessContent, setShowSuccessContent] = React.useState<boolean>(false);
|
|
20
|
-
const textToCopy = React.useMemo(() => {
|
|
13
|
+
export const CopyClipboard: FC<CopyClipboardProps> = ({ element, rootSelector, docContext }) => {
|
|
14
|
+
const { getResource } = useContext<QuickStartContextValues>(QuickStartContext);
|
|
15
|
+
const [showSuccessContent, setShowSuccessContent] = useState<boolean>(false);
|
|
16
|
+
const textToCopy = useMemo(() => {
|
|
21
17
|
const copyTextId = element.getAttribute(MARKDOWN_COPY_BUTTON_ID);
|
|
22
18
|
return (
|
|
23
19
|
docContext.querySelector(
|
|
@@ -29,7 +25,7 @@ export const CopyClipboard: React.FC<CopyClipboardProps> = ({
|
|
|
29
25
|
useEventListener(
|
|
30
26
|
element,
|
|
31
27
|
'click',
|
|
32
|
-
|
|
28
|
+
useCallback(() => {
|
|
33
29
|
navigator.clipboard
|
|
34
30
|
.writeText(textToCopy.trim())
|
|
35
31
|
.then(() => {
|
|
@@ -42,7 +38,7 @@ export const CopyClipboard: React.FC<CopyClipboardProps> = ({
|
|
|
42
38
|
useEventListener(
|
|
43
39
|
element,
|
|
44
40
|
'mouseleave',
|
|
45
|
-
|
|
41
|
+
useCallback(() => {
|
|
46
42
|
setShowSuccessContent(false);
|
|
47
43
|
}, []),
|
|
48
44
|
);
|
|
@@ -70,10 +66,7 @@ interface MarkdownCopyClipboardProps {
|
|
|
70
66
|
rootSelector: string;
|
|
71
67
|
}
|
|
72
68
|
|
|
73
|
-
const MarkdownCopyClipboard:
|
|
74
|
-
docContext,
|
|
75
|
-
rootSelector,
|
|
76
|
-
}) => {
|
|
69
|
+
const MarkdownCopyClipboard: FC<MarkdownCopyClipboardProps> = ({ docContext, rootSelector }) => {
|
|
77
70
|
const elements = docContext.querySelectorAll(`${rootSelector} [${MARKDOWN_COPY_BUTTON_ID}]`);
|
|
78
71
|
return elements.length > 0 ? (
|
|
79
72
|
<>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
Accordion,
|
|
4
4
|
AccordionItem,
|
|
@@ -10,7 +10,7 @@ import { removeTemplateWhitespace } from './utils';
|
|
|
10
10
|
import { ACCORDION_MARKDOWN_BUTTON_ID, ACCORDION_MARKDOWN_CONTENT_ID } from './const';
|
|
11
11
|
|
|
12
12
|
const useAccordionShowdownExtension = () =>
|
|
13
|
-
|
|
13
|
+
useMemo(
|
|
14
14
|
() => ({
|
|
15
15
|
type: 'lang',
|
|
16
16
|
regex: /\[(.+)]{{(accordion) ("(.*?)")}}/g,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, useState } from 'react';
|
|
2
2
|
import { useEventListener } from '../../hooks';
|
|
3
3
|
import { ACCORDION_MARKDOWN_BUTTON_ID, ACCORDION_MARKDOWN_CONTENT_ID } from './const';
|
|
4
4
|
|
|
@@ -7,11 +7,11 @@ interface AccordionShowdownComponentProps {
|
|
|
7
7
|
contentElement: HTMLElement;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
const AccordionShowdownHandler:
|
|
10
|
+
const AccordionShowdownHandler: FC<AccordionShowdownComponentProps> = ({
|
|
11
11
|
buttonElement,
|
|
12
12
|
contentElement,
|
|
13
13
|
}) => {
|
|
14
|
-
const [expanded, setExpanded] =
|
|
14
|
+
const [expanded, setExpanded] = useState<boolean>(false);
|
|
15
15
|
|
|
16
16
|
const handleClick = () => {
|
|
17
17
|
const expandedModifier = 'pf-m-expanded';
|
|
@@ -33,7 +33,7 @@ interface accordionRenderExtensionProps {
|
|
|
33
33
|
docContext: Document;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
const AccordionRenderExtension:
|
|
36
|
+
const AccordionRenderExtension: FC<accordionRenderExtensionProps> = ({ docContext }) => {
|
|
37
37
|
const buttonElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_BUTTON_ID}]`);
|
|
38
38
|
const contentElements = docContext.querySelectorAll(`[id ^= ${ACCORDION_MARKDOWN_CONTENT_ID}]`);
|
|
39
39
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
2
|
import { removeTemplateWhitespace } from './utils';
|
|
3
3
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
4
4
|
import { Alert } from '@patternfly/react-core';
|
|
@@ -24,7 +24,7 @@ const admonitionToAlertVariantMap = {
|
|
|
24
24
|
|
|
25
25
|
const useAdmonitionShowdownExtension = () =>
|
|
26
26
|
// const { getResource } = React.useContext<QuickStartContextValues>(QuickStartContext);
|
|
27
|
-
|
|
27
|
+
useMemo(
|
|
28
28
|
() => ({
|
|
29
29
|
type: 'lang',
|
|
30
30
|
regex: /\[(.+)]{{(admonition) ([\w-]+)}}/g,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
2
|
import { removeTemplateWhitespace } from './utils';
|
|
3
3
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
4
4
|
import { CodeBlock } from '@patternfly/react-core';
|
|
5
5
|
|
|
6
6
|
const useCodeShowdownExtension = () =>
|
|
7
|
-
|
|
7
|
+
useMemo(
|
|
8
8
|
() => ({
|
|
9
9
|
type: 'output',
|
|
10
10
|
regex: /<pre><code>(.*?)\n?<\/code><\/pre>/g,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useContext, useMemo } from 'react';
|
|
2
2
|
import { QuickStartContext, QuickStartContextValues } from '@quickstarts/utils/quick-start-context';
|
|
3
3
|
import { MARKDOWN_COPY_BUTTON_ID, MARKDOWN_SNIPPET_ID } from './const';
|
|
4
4
|
import { removeTemplateWhitespace } from './utils';
|
|
@@ -6,8 +6,8 @@ import { renderToStaticMarkup } from 'react-dom/server';
|
|
|
6
6
|
import CopyIcon from '@patternfly/react-icons/dist/js/icons/copy-icon';
|
|
7
7
|
|
|
8
8
|
const useInlineCopyClipboardShowdownExtension = () => {
|
|
9
|
-
const { getResource } =
|
|
10
|
-
return
|
|
9
|
+
const { getResource } = useContext<QuickStartContextValues>(QuickStartContext);
|
|
10
|
+
return useMemo(
|
|
11
11
|
() => ({
|
|
12
12
|
type: 'lang',
|
|
13
13
|
regex: /`([^`](.*?)[^`])`{{copy}}/g,
|
package/src/ConsoleShared/src/components/markdown-extensions/multiline-clipboard-extension.tsx
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* eslint-disable max-len */
|
|
2
|
-
import
|
|
2
|
+
import { useContext, useMemo } from 'react';
|
|
3
3
|
import { QuickStartContext, QuickStartContextValues } from '@quickstarts/utils/quick-start-context';
|
|
4
4
|
import { MARKDOWN_COPY_BUTTON_ID, MARKDOWN_SNIPPET_ID } from './const';
|
|
5
5
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
6
6
|
import CopyIcon from '@patternfly/react-icons/dist/js/icons/copy-icon';
|
|
7
7
|
|
|
8
8
|
const useMultilineCopyClipboardShowdownExtension = () => {
|
|
9
|
-
const { getResource } =
|
|
10
|
-
return
|
|
9
|
+
const { getResource } = useContext<QuickStartContextValues>(QuickStartContext);
|
|
10
|
+
return useMemo(
|
|
11
11
|
() => ({
|
|
12
12
|
type: 'lang',
|
|
13
13
|
regex: /```[\n]\s*((((?!```).)*?\n)+)\s*```{{copy}}/g,
|
package/src/ConsoleShared/src/components/markdown-highlight-extension/MarkdownHighlightExtension.tsx
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, useEffect, useState } from 'react';
|
|
2
2
|
import { Spotlight } from '../spotlight';
|
|
3
3
|
|
|
4
4
|
interface MarkdownHighlightExtensionProps {
|
|
5
5
|
docContext: Document;
|
|
6
6
|
rootSelector: string;
|
|
7
7
|
}
|
|
8
|
-
const MarkdownHighlightExtension:
|
|
8
|
+
const MarkdownHighlightExtension: FC<MarkdownHighlightExtensionProps> = ({
|
|
9
9
|
docContext,
|
|
10
10
|
rootSelector,
|
|
11
11
|
}) => {
|
|
12
|
-
const [selector, setSelector] =
|
|
13
|
-
|
|
12
|
+
const [selector, setSelector] = useState<string>(null);
|
|
13
|
+
useEffect(() => {
|
|
14
14
|
const elements = docContext.querySelectorAll(`${rootSelector} [data-highlight]`);
|
|
15
15
|
let timeoutId: NodeJS.Timeout;
|
|
16
16
|
function startHighlight(e) {
|
|
@@ -29,7 +29,7 @@ const MarkdownHighlightExtension: React.FC<MarkdownHighlightExtensionProps> = ({
|
|
|
29
29
|
elements && elements.forEach((elm) => elm.removeEventListener('click', startHighlight));
|
|
30
30
|
};
|
|
31
31
|
}, [docContext, rootSelector]);
|
|
32
|
-
|
|
32
|
+
useEffect(() => {
|
|
33
33
|
const elements = docContext.querySelectorAll(`${rootSelector} [class^=data-highlight__]`);
|
|
34
34
|
let timeoutId: NodeJS.Timeout;
|
|
35
35
|
function startHighlight(e) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, Ref } from 'react';
|
|
2
2
|
import { Modal as PfModal, ModalProps as PfModalProps } from '@patternfly/react-core/deprecated';
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
4
|
|
|
5
5
|
type ModalProps = {
|
|
6
6
|
isFullScreen?: boolean;
|
|
7
|
-
ref?:
|
|
7
|
+
ref?: Ref<PfModal>;
|
|
8
8
|
} & PfModalProps;
|
|
9
9
|
|
|
10
|
-
const Modal:
|
|
10
|
+
const Modal: FC<ModalProps> = ({ isFullScreen = false, className, ...props }) => (
|
|
11
11
|
<PfModal
|
|
12
12
|
{...props}
|
|
13
13
|
className={css('pfext-modal', className)}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { useIsomorphicLayoutEffect } from '@patternfly/react-core';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { useState, ReactNode } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
4
|
|
|
5
5
|
type GetContainer = Element | null | undefined | (() => Element);
|
|
6
6
|
|
|
7
7
|
interface PortalProps {
|
|
8
|
-
children:
|
|
8
|
+
children: ReactNode;
|
|
9
9
|
container?: GetContainer;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -13,13 +13,13 @@ const getContainer = (container: GetContainer): Element | null | undefined =>
|
|
|
13
13
|
typeof container === 'function' ? container() : container;
|
|
14
14
|
|
|
15
15
|
const Portal = ({ children, container }: PortalProps) => {
|
|
16
|
-
const [containerNode, setContainerNode] =
|
|
16
|
+
const [containerNode, setContainerNode] = useState<Element>();
|
|
17
17
|
|
|
18
18
|
useIsomorphicLayoutEffect(() => {
|
|
19
19
|
setContainerNode(getContainer(container) || document.body);
|
|
20
20
|
}, [container]);
|
|
21
21
|
|
|
22
|
-
return containerNode ?
|
|
22
|
+
return containerNode ? createPortal(children, containerNode) : null;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
export default Portal;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactNode, useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import Portal from './Portal';
|
|
3
3
|
|
|
4
4
|
interface SimplePopperProps {
|
|
5
|
-
children:
|
|
5
|
+
children: ReactNode;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
const SimplePopper = ({ children }: SimplePopperProps) => {
|
|
9
9
|
const openProp = true;
|
|
10
|
-
const nodeRef =
|
|
11
|
-
const popperRef =
|
|
12
|
-
const [isOpen, setOpenState] =
|
|
10
|
+
const nodeRef = useRef<Element>(null);
|
|
11
|
+
const popperRef = useRef(null);
|
|
12
|
+
const [isOpen, setOpenState] = useState(openProp);
|
|
13
13
|
|
|
14
|
-
const setOpen =
|
|
14
|
+
const setOpen = useCallback((newOpen: boolean) => {
|
|
15
15
|
setOpenState(newOpen);
|
|
16
16
|
}, []);
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
useEffect(() => {
|
|
19
19
|
setOpen(openProp);
|
|
20
20
|
}, [openProp, setOpen]);
|
|
21
21
|
|
|
22
|
-
const onKeyDown =
|
|
22
|
+
const onKeyDown = useCallback(
|
|
23
23
|
(e: KeyboardEvent) => {
|
|
24
24
|
if (e.keyCode === 27) {
|
|
25
25
|
setOpen(false);
|
|
@@ -28,7 +28,7 @@ const SimplePopper = ({ children }: SimplePopperProps) => {
|
|
|
28
28
|
[setOpen],
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
const onClickOutside =
|
|
31
|
+
const onClickOutside = useCallback(
|
|
32
32
|
(e: MouseEvent) => {
|
|
33
33
|
if (!nodeRef.current || (e.target instanceof Node && !nodeRef.current.contains(e.target))) {
|
|
34
34
|
setOpen(false);
|
|
@@ -37,7 +37,7 @@ const SimplePopper = ({ children }: SimplePopperProps) => {
|
|
|
37
37
|
[setOpen],
|
|
38
38
|
);
|
|
39
39
|
|
|
40
|
-
const destroy =
|
|
40
|
+
const destroy = useCallback(() => {
|
|
41
41
|
if (popperRef.current) {
|
|
42
42
|
popperRef.current.destroy();
|
|
43
43
|
document.removeEventListener('keydown', onKeyDown, true);
|
|
@@ -46,7 +46,7 @@ const SimplePopper = ({ children }: SimplePopperProps) => {
|
|
|
46
46
|
}
|
|
47
47
|
}, [onClickOutside, onKeyDown]);
|
|
48
48
|
|
|
49
|
-
const initialize =
|
|
49
|
+
const initialize = useCallback(() => {
|
|
50
50
|
if (!nodeRef.current || !isOpen) {
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
@@ -54,7 +54,7 @@ const SimplePopper = ({ children }: SimplePopperProps) => {
|
|
|
54
54
|
destroy();
|
|
55
55
|
}, [isOpen, destroy]);
|
|
56
56
|
|
|
57
|
-
const nodeRefCallback =
|
|
57
|
+
const nodeRefCallback = useCallback(
|
|
58
58
|
(node) => {
|
|
59
59
|
nodeRef.current = node;
|
|
60
60
|
initialize();
|
|
@@ -62,18 +62,18 @@ const SimplePopper = ({ children }: SimplePopperProps) => {
|
|
|
62
62
|
[initialize],
|
|
63
63
|
);
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
useEffect(() => {
|
|
66
66
|
initialize();
|
|
67
67
|
}, [initialize]);
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
useEffect(
|
|
70
70
|
() => () => {
|
|
71
71
|
destroy();
|
|
72
72
|
},
|
|
73
73
|
[destroy],
|
|
74
74
|
);
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
useEffect(() => {
|
|
77
77
|
if (!isOpen) {
|
|
78
78
|
destroy();
|
|
79
79
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import './spotlight.scss';
|
|
2
|
-
import
|
|
2
|
+
import { CSSProperties, FC, useEffect, useState } from 'react';
|
|
3
3
|
import { Portal, SimplePopper } from '../popper';
|
|
4
4
|
|
|
5
5
|
interface InteractiveSpotlightProps {
|
|
@@ -16,9 +16,9 @@ const isInViewport = (elementToCheck: Element) => {
|
|
|
16
16
|
);
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
const InteractiveSpotlight:
|
|
19
|
+
const InteractiveSpotlight: FC<InteractiveSpotlightProps> = ({ element }) => {
|
|
20
20
|
const { top, bottom, left, right, height, width } = element.getBoundingClientRect();
|
|
21
|
-
const style:
|
|
21
|
+
const style: CSSProperties = {
|
|
22
22
|
height,
|
|
23
23
|
width,
|
|
24
24
|
top,
|
|
@@ -26,9 +26,9 @@ const InteractiveSpotlight: React.FC<InteractiveSpotlightProps> = ({ element })
|
|
|
26
26
|
bottom,
|
|
27
27
|
right,
|
|
28
28
|
};
|
|
29
|
-
const [clicked, setClicked] =
|
|
29
|
+
const [clicked, setClicked] = useState(false);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
useEffect(() => {
|
|
32
32
|
if (!clicked) {
|
|
33
33
|
if (!isInViewport(element)) {
|
|
34
34
|
element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, useMemo } from 'react';
|
|
2
2
|
import InteractiveSpotlight from './InteractiveSpotlight';
|
|
3
3
|
import StaticSpotlight from './StaticSpotlight';
|
|
4
4
|
|
|
@@ -7,9 +7,9 @@ interface SpotlightProps {
|
|
|
7
7
|
interactive?: boolean;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
const Spotlight:
|
|
10
|
+
const Spotlight: FC<SpotlightProps> = ({ selector, interactive }) => {
|
|
11
11
|
// if target element is a hidden one return null
|
|
12
|
-
const element =
|
|
12
|
+
const element = useMemo(() => {
|
|
13
13
|
const highlightElement = document.querySelector(selector);
|
|
14
14
|
let hiddenElement = highlightElement;
|
|
15
15
|
while (hiddenElement) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import './spotlight.scss';
|
|
2
|
-
import
|
|
2
|
+
import { CSSProperties, FC } from 'react';
|
|
3
3
|
import { useBoundingClientRect } from '../../hooks';
|
|
4
4
|
import Portal from '../popper/Portal';
|
|
5
5
|
|
|
@@ -7,9 +7,9 @@ interface StaticSpotlightProps {
|
|
|
7
7
|
element: Element;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
const StaticSpotlight:
|
|
10
|
+
const StaticSpotlight: FC<StaticSpotlightProps> = ({ element }) => {
|
|
11
11
|
const clientRect = useBoundingClientRect(element as HTMLElement);
|
|
12
|
-
const style:
|
|
12
|
+
const style: CSSProperties = clientRect
|
|
13
13
|
? {
|
|
14
14
|
top: clientRect.top,
|
|
15
15
|
left: clientRect.left,
|