@red-hat-developer-hub/backstage-plugin-quickstart 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +35 -0
- package/app-config.dynamic.yaml +9 -0
- package/dist/components/QuickstartDrawerContent.esm.js +37 -0
- package/dist/components/QuickstartDrawerContent.esm.js.map +1 -0
- package/dist/components/QuickstartDrawerProvider.esm.js +0 -18
- package/dist/components/QuickstartDrawerProvider.esm.js.map +1 -1
- package/dist/components/QuickstartDrawerStateExposer.esm.js +32 -0
- package/dist/components/QuickstartDrawerStateExposer.esm.js.map +1 -0
- package/dist/index.d.ts +42 -3
- package/dist/index.esm.js +2 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +22 -2
- package/dist/plugin.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +37 -38
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/index.esm.js +3 -1
- package/dist/translations/index.esm.js.map +1 -1
- package/dist/translations/it.esm.js +61 -0
- package/dist/translations/it.esm.js.map +1 -0
- package/dist/translations/ja.esm.js +61 -0
- package/dist/translations/ja.esm.js.map +1 -0
- package/package.json +2 -2
- package/dist/components/QuickstartDrawer.esm.js +0 -62
- package/dist/components/QuickstartDrawer.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @red-hat-developer-hub/backstage-plugin-quickstart
|
|
2
2
|
|
|
3
|
+
## 1.8.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bb8ef80: Added drawer state management utilities for integration with application drawers.
|
|
8
|
+
|
|
9
|
+
## 1.8.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- f74564d: Added 'it' and 'ja' i18n support and updated 'fr' translation strings.
|
|
14
|
+
- 98abe8b: Updated dependency `@red-hat-developer-hub/backstage-plugin-theme` to `^0.11.0`.
|
|
15
|
+
- 04630bf: Updated dependency `@red-hat-developer-hub/backstage-plugin-theme` to `^0.12.0`.
|
|
16
|
+
|
|
3
17
|
## 1.8.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -13,6 +13,41 @@ The Quickstart plugin provides a guided onboarding experience for new users of R
|
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
16
|
+
### Installing as a dynamic plugin
|
|
17
|
+
|
|
18
|
+
If you want to install the plugin as a dynamic plugin in Red Hat Developer Hub:
|
|
19
|
+
|
|
20
|
+
- Follow the [Installing plugins guide](https://github.com/redhat-developer/rhdh/blob/main/docs/dynamic-plugins/installing-plugins.md)
|
|
21
|
+
- Add the content of `app-config.dynamic.yaml` into your `app-config.local.yaml`
|
|
22
|
+
|
|
23
|
+
#### Dynamic plugin configuration
|
|
24
|
+
|
|
25
|
+
Add the extension point inside your `app-config.yaml` or `app-config.local.yaml` file:
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
dynamicPlugins:
|
|
29
|
+
frontend:
|
|
30
|
+
red-hat-developer-hub.backstage-plugin-quickstart:
|
|
31
|
+
translationResources:
|
|
32
|
+
- importName: quickstartTranslations
|
|
33
|
+
ref: quickstartTranslationRef
|
|
34
|
+
mountPoints:
|
|
35
|
+
- mountPoint: application/provider
|
|
36
|
+
importName: QuickstartDrawerProvider
|
|
37
|
+
- mountPoint: application/drawer-state
|
|
38
|
+
importName: QuickstartDrawerStateExposer
|
|
39
|
+
- mountPoint: application/drawer-content
|
|
40
|
+
importName: QuickstartDrawerContent
|
|
41
|
+
config:
|
|
42
|
+
id: quickstart
|
|
43
|
+
- mountPoint: global.header/help
|
|
44
|
+
importName: QuickstartButton
|
|
45
|
+
config:
|
|
46
|
+
priority: 100
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Static Installation
|
|
50
|
+
|
|
16
51
|
1. Install the plugin package:
|
|
17
52
|
|
|
18
53
|
```bash
|
package/app-config.dynamic.yaml
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
dynamicPlugins:
|
|
2
2
|
frontend:
|
|
3
3
|
red-hat-developer-hub.backstage-plugin-quickstart:
|
|
4
|
+
translationResources:
|
|
5
|
+
- importName: quickstartTranslations
|
|
6
|
+
ref: quickstartTranslationRef
|
|
4
7
|
mountPoints:
|
|
5
8
|
- mountPoint: application/provider
|
|
6
9
|
importName: QuickstartDrawerProvider
|
|
10
|
+
- mountPoint: application/drawer-state
|
|
11
|
+
importName: QuickstartDrawerStateExposer
|
|
12
|
+
- mountPoint: application/drawer-content
|
|
13
|
+
importName: QuickstartDrawerContent
|
|
14
|
+
config:
|
|
15
|
+
id: quickstart
|
|
7
16
|
- mountPoint: global.header/help
|
|
8
17
|
importName: QuickstartButton
|
|
9
18
|
config:
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { useApi, configApiRef } from '@backstage/core-plugin-api';
|
|
4
|
+
import { Quickstart } from './Quickstart.esm.js';
|
|
5
|
+
import { useQuickstartDrawerContext } from '../hooks/useQuickstartDrawerContext.esm.js';
|
|
6
|
+
import { filterQuickstartItemsByRole } from '../utils/filterQuickstartItems.esm.js';
|
|
7
|
+
|
|
8
|
+
const QuickstartDrawerContent = () => {
|
|
9
|
+
const { isDrawerOpen, closeDrawer, userRole, roleLoading } = useQuickstartDrawerContext();
|
|
10
|
+
const config = useApi(configApiRef);
|
|
11
|
+
const quickstartItems = useMemo(() => {
|
|
12
|
+
return config?.has("app.quickstart") ? config.get("app.quickstart") : [];
|
|
13
|
+
}, [config]);
|
|
14
|
+
const eligibleItems = useMemo(() => {
|
|
15
|
+
return !roleLoading && userRole ? filterQuickstartItemsByRole(quickstartItems, userRole) : [];
|
|
16
|
+
}, [roleLoading, userRole, quickstartItems]);
|
|
17
|
+
const filteredItems = useMemo(() => {
|
|
18
|
+
return isDrawerOpen ? eligibleItems : [];
|
|
19
|
+
}, [isDrawerOpen, eligibleItems]);
|
|
20
|
+
if (quickstartItems.length === 0) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (!roleLoading && eligibleItems.length === 0) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
27
|
+
Quickstart,
|
|
28
|
+
{
|
|
29
|
+
quickstartItems: filteredItems,
|
|
30
|
+
handleDrawerClose: closeDrawer,
|
|
31
|
+
isLoading: roleLoading
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { QuickstartDrawerContent };
|
|
37
|
+
//# sourceMappingURL=QuickstartDrawerContent.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickstartDrawerContent.esm.js","sources":["../../src/components/QuickstartDrawerContent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo } from 'react';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { Quickstart } from './Quickstart';\nimport { useQuickstartDrawerContext } from '../hooks/useQuickstartDrawerContext';\nimport { QuickstartItemData } from '../types';\nimport { filterQuickstartItemsByRole } from '../utils';\n\nexport const QuickstartDrawerContent = () => {\n const { isDrawerOpen, closeDrawer, userRole, roleLoading } =\n useQuickstartDrawerContext();\n\n const config = useApi(configApiRef);\n const quickstartItems: QuickstartItemData[] = useMemo(() => {\n return config?.has('app.quickstart')\n ? (config.get('app.quickstart') as QuickstartItemData[])\n : [];\n }, [config]);\n\n // Items available to the user based on role from context\n const eligibleItems = useMemo(() => {\n return !roleLoading && userRole\n ? filterQuickstartItemsByRole(quickstartItems, userRole)\n : [];\n }, [roleLoading, userRole, quickstartItems]);\n\n // Only expose items to the body when drawer is open to avoid re-renders during close\n const filteredItems = useMemo(() => {\n return isDrawerOpen ? eligibleItems : [];\n }, [isDrawerOpen, eligibleItems]);\n\n // No auto-open logic here; the provider initializes per user (visited/open)\n\n // If no quickstart items are configured at all, don't render the drawer to avoid reserving space\n if (quickstartItems.length === 0) {\n return null;\n }\n\n // If there are no items for the user, hide the drawer entirely\n if (!roleLoading && eligibleItems.length === 0) {\n return null;\n }\n\n // No role-fetching or filtering here when the drawer is closed\n\n return (\n <Quickstart\n quickstartItems={filteredItems}\n handleDrawerClose={closeDrawer}\n isLoading={roleLoading}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAuBO,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,EAAE,YAAc,EAAA,WAAA,EAAa,QAAU,EAAA,WAAA,KAC3C,0BAA2B,EAAA;AAE7B,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,eAAA,GAAwC,QAAQ,MAAM;AAC1D,IAAO,OAAA,MAAA,EAAQ,IAAI,gBAAgB,CAAA,GAC9B,OAAO,GAAI,CAAA,gBAAgB,IAC5B,EAAC;AAAA,GACP,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO,CAAC,WAAe,IAAA,QAAA,GACnB,4BAA4B,eAAiB,EAAA,QAAQ,IACrD,EAAC;AAAA,GACJ,EAAA,CAAC,WAAa,EAAA,QAAA,EAAU,eAAe,CAAC,CAAA;AAG3C,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAO,OAAA,YAAA,GAAe,gBAAgB,EAAC;AAAA,GACtC,EAAA,CAAC,YAAc,EAAA,aAAa,CAAC,CAAA;AAKhC,EAAI,IAAA,eAAA,CAAgB,WAAW,CAAG,EAAA;AAChC,IAAO,OAAA,IAAA;AAAA;AAIT,EAAA,IAAI,CAAC,WAAA,IAAe,aAAc,CAAA,MAAA,KAAW,CAAG,EAAA;AAC9C,IAAO,OAAA,IAAA;AAAA;AAKT,EACE,uBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,eAAiB,EAAA,aAAA;AAAA,MACjB,iBAAmB,EAAA,WAAA;AAAA,MACnB,SAAW,EAAA;AAAA;AAAA,GACb;AAEJ;;;;"}
|
|
@@ -5,7 +5,6 @@ import Snackbar from '@mui/material/Snackbar';
|
|
|
5
5
|
import CloseIcon from '@mui/icons-material/Close';
|
|
6
6
|
import IconButton from '@mui/material/IconButton';
|
|
7
7
|
import { QuickstartDrawerContext } from './QuickstartDrawerContext.esm.js';
|
|
8
|
-
import { QuickstartDrawer } from './QuickstartDrawer.esm.js';
|
|
9
8
|
import { filterQuickstartItemsByRole } from '../utils/filterQuickstartItems.esm.js';
|
|
10
9
|
import { useQuickstartRole } from '../hooks/useQuickstartRole.esm.js';
|
|
11
10
|
|
|
@@ -18,22 +17,6 @@ const QuickstartDrawerProvider = ({ children }) => {
|
|
|
18
17
|
const identityApi = useApi(identityApiRef);
|
|
19
18
|
const configApi = useApi(configApiRef);
|
|
20
19
|
const { isLoading: roleLoading, userRole } = useQuickstartRole();
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (isDrawerOpen) {
|
|
23
|
-
document.body.classList.add("quickstart-drawer-open");
|
|
24
|
-
document.body.style.setProperty(
|
|
25
|
-
"--quickstart-drawer-width",
|
|
26
|
-
`${drawerWidth}px`
|
|
27
|
-
);
|
|
28
|
-
} else {
|
|
29
|
-
document.body.classList.remove("quickstart-drawer-open");
|
|
30
|
-
document.body.style.removeProperty("--quickstart-drawer-width");
|
|
31
|
-
}
|
|
32
|
-
return () => {
|
|
33
|
-
document.body.classList.remove("quickstart-drawer-open");
|
|
34
|
-
document.body.style.removeProperty("--quickstart-drawer-width");
|
|
35
|
-
};
|
|
36
|
-
}, [isDrawerOpen, drawerWidth]);
|
|
37
20
|
useEffect(() => {
|
|
38
21
|
let cancelled = false;
|
|
39
22
|
(async () => {
|
|
@@ -135,7 +118,6 @@ const QuickstartDrawerProvider = ({ children }) => {
|
|
|
135
118
|
},
|
|
136
119
|
children: [
|
|
137
120
|
children,
|
|
138
|
-
/* @__PURE__ */ jsx(QuickstartDrawer, {}),
|
|
139
121
|
/* @__PURE__ */ jsx(
|
|
140
122
|
Snackbar,
|
|
141
123
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuickstartDrawerProvider.esm.js","sources":["../../src/components/QuickstartDrawerProvider.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, PropsWithChildren, useState } from 'react';\nimport {\n configApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport Snackbar from '@mui/material/Snackbar';\nimport CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton';\nimport { QuickstartDrawerContext } from './QuickstartDrawerContext';\nimport { QuickstartDrawer } from './QuickstartDrawer';\nimport { QuickstartItemData } from '../types';\nimport { filterQuickstartItemsByRole } from '../utils';\nimport { useQuickstartRole } from '../hooks/useQuickstartRole';\n\n/**\n * Provider component for the Quickstart Drawer functionality\n * @public\n */\nexport const QuickstartDrawerProvider = ({ children }: PropsWithChildren) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState<boolean>(false);\n const [showNotification, setShowNotification] = useState(false);\n const [hasShownNotification, setHasShownNotification] = useState(false);\n const [drawerWidth, setDrawerWidth] = useState<number>(500);\n const [userKey, setUserKey] = useState<string>('guest');\n const identityApi = useApi(identityApiRef);\n const configApi = useApi(configApiRef);\n\n // Determine role once at provider level to avoid re-fetching on drawer open/close\n const { isLoading: roleLoading, userRole } = useQuickstartRole();\n\n // Single useEffect - sets class on document.body\n useEffect(() => {\n if (isDrawerOpen) {\n document.body.classList.add('quickstart-drawer-open');\n document.body.style.setProperty(\n '--quickstart-drawer-width',\n `${drawerWidth}px`,\n );\n } else {\n document.body.classList.remove('quickstart-drawer-open');\n document.body.style.removeProperty('--quickstart-drawer-width');\n }\n\n return () => {\n document.body.classList.remove('quickstart-drawer-open');\n document.body.style.removeProperty('--quickstart-drawer-width');\n };\n }, [isDrawerOpen, drawerWidth]);\n\n // Resolve the current user's identity to scope localStorage keys per user\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const identity = await identityApi.getBackstageIdentity();\n const ref = identity?.userEntityRef?.toLowerCase() || 'guest';\n if (!cancelled) setUserKey(ref);\n } catch (e) {\n if (!cancelled) setUserKey('guest');\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [identityApi]);\n\n // Initialize drawer state based on per-user keys and only when quickstarts exist\n useEffect(() => {\n if (!userKey) return;\n\n // Determine if there are any quickstart items configured globally\n const hasAnyQuickstarts = (() => {\n try {\n if (!configApi?.has('app.quickstart')) return false;\n const items = configApi.get('app.quickstart') as unknown;\n return Array.isArray(items) && items.length > 0;\n } catch {\n return false;\n }\n })();\n\n const openKey = `quickstart-open:${userKey}`;\n const visitedKey = `quickstart-visited:${userKey}`;\n const notificationKey = `quickstart-notification-shown:${userKey}`;\n\n // If no quickstarts are configured, ensure the drawer is closed and don't mark as visited\n if (!hasAnyQuickstarts) {\n setIsDrawerOpen(false);\n // Avoid persisting visited so future addition of items can auto-open\n localStorage.setItem(openKey, 'false');\n return;\n }\n\n // Check if user has any eligible quickstart items\n const quickstartItems: QuickstartItemData[] = configApi?.has(\n 'app.quickstart',\n )\n ? (configApi.get('app.quickstart') as QuickstartItemData[])\n : [];\n\n const eligibleItems =\n !roleLoading && userRole\n ? filterQuickstartItemsByRole(quickstartItems, userRole)\n : [];\n\n // If user has no eligible items, close the drawer and don't mark as visited\n if (!roleLoading && eligibleItems.length === 0) {\n setIsDrawerOpen(false);\n localStorage.setItem(openKey, 'false');\n return;\n }\n\n // Only proceed with drawer logic if user has eligible items\n const wasOpen = localStorage.getItem(openKey);\n const hasVisited = localStorage.getItem(visitedKey);\n const notificationShown = localStorage.getItem(notificationKey);\n\n if (!hasVisited) {\n setIsDrawerOpen(true);\n localStorage.setItem(visitedKey, 'true');\n localStorage.setItem(openKey, 'true');\n } else if (wasOpen === 'true') {\n setIsDrawerOpen(true);\n } else {\n setIsDrawerOpen(false);\n }\n\n setHasShownNotification(notificationShown === 'true');\n }, [userKey, configApi, roleLoading, userRole]);\n\n const openDrawer = () => {\n // Check if user has eligible items before opening\n const quickstartItems: QuickstartItemData[] = configApi?.has(\n 'app.quickstart',\n )\n ? (configApi.get('app.quickstart') as QuickstartItemData[])\n : [];\n\n const eligibleItems =\n !roleLoading && userRole\n ? filterQuickstartItemsByRole(quickstartItems, userRole)\n : [];\n\n // Only open if user has eligible items\n if (!roleLoading && eligibleItems.length > 0) {\n setIsDrawerOpen(true);\n const openKey = `quickstart-open:${userKey}`;\n localStorage.setItem(openKey, 'true');\n }\n };\n\n const closeDrawer = () => {\n setIsDrawerOpen(false);\n if (!hasShownNotification) {\n setShowNotification(true);\n setHasShownNotification(true);\n const notificationKey = `quickstart-notification-shown:${userKey}`;\n localStorage.setItem(notificationKey, 'true');\n }\n const openKey = `quickstart-open:${userKey}`;\n localStorage.setItem(openKey, 'false');\n };\n\n const toggleDrawer = () => {\n const next = !isDrawerOpen;\n setIsDrawerOpen(next);\n const openKey = `quickstart-open:${userKey}`;\n localStorage.setItem(openKey, next.toString());\n };\n\n const handleNotificationClose = () => setShowNotification(false);\n\n return (\n <QuickstartDrawerContext.Provider\n value={{\n isDrawerOpen,\n openDrawer,\n closeDrawer,\n toggleDrawer,\n setDrawerWidth,\n drawerWidth,\n userRole,\n roleLoading,\n }}\n >\n {children}\n <QuickstartDrawer />\n <Snackbar\n sx={{ top: '80px !important' }}\n open={showNotification}\n autoHideDuration={10000}\n onClose={handleNotificationClose}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n message=\"Need help? Visit the Quick Start Guide by clicking on this (?) icon in the header!\"\n action={\n <IconButton\n size=\"small\"\n aria-label=\"close\"\n color=\"inherit\"\n onClick={handleNotificationClose}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n }\n />\n </QuickstartDrawerContext.Provider>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QuickstartDrawerProvider.esm.js","sources":["../../src/components/QuickstartDrawerProvider.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, PropsWithChildren, useState } from 'react';\nimport {\n configApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport Snackbar from '@mui/material/Snackbar';\nimport CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton';\nimport { QuickstartDrawerContext } from './QuickstartDrawerContext';\nimport { QuickstartItemData } from '../types';\nimport { filterQuickstartItemsByRole } from '../utils';\nimport { useQuickstartRole } from '../hooks/useQuickstartRole';\n\n/**\n * Provider component for the Quickstart Drawer functionality\n * @public\n */\nexport const QuickstartDrawerProvider = ({ children }: PropsWithChildren) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState<boolean>(false);\n const [showNotification, setShowNotification] = useState(false);\n const [hasShownNotification, setHasShownNotification] = useState(false);\n const [drawerWidth, setDrawerWidth] = useState<number>(500);\n const [userKey, setUserKey] = useState<string>('guest');\n const identityApi = useApi(identityApiRef);\n const configApi = useApi(configApiRef);\n\n // Determine role once at provider level to avoid re-fetching on drawer open/close\n const { isLoading: roleLoading, userRole } = useQuickstartRole();\n\n // Resolve the current user's identity to scope localStorage keys per user\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const identity = await identityApi.getBackstageIdentity();\n const ref = identity?.userEntityRef?.toLowerCase() || 'guest';\n if (!cancelled) setUserKey(ref);\n } catch (e) {\n if (!cancelled) setUserKey('guest');\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [identityApi]);\n\n // Initialize drawer state based on per-user keys and only when quickstarts exist\n useEffect(() => {\n if (!userKey) return;\n\n // Determine if there are any quickstart items configured globally\n const hasAnyQuickstarts = (() => {\n try {\n if (!configApi?.has('app.quickstart')) return false;\n const items = configApi.get('app.quickstart') as unknown;\n return Array.isArray(items) && items.length > 0;\n } catch {\n return false;\n }\n })();\n\n const openKey = `quickstart-open:${userKey}`;\n const visitedKey = `quickstart-visited:${userKey}`;\n const notificationKey = `quickstart-notification-shown:${userKey}`;\n\n // If no quickstarts are configured, ensure the drawer is closed and don't mark as visited\n if (!hasAnyQuickstarts) {\n setIsDrawerOpen(false);\n // Avoid persisting visited so future addition of items can auto-open\n localStorage.setItem(openKey, 'false');\n return;\n }\n\n // Check if user has any eligible quickstart items\n const quickstartItems: QuickstartItemData[] = configApi?.has(\n 'app.quickstart',\n )\n ? (configApi.get('app.quickstart') as QuickstartItemData[])\n : [];\n\n const eligibleItems =\n !roleLoading && userRole\n ? filterQuickstartItemsByRole(quickstartItems, userRole)\n : [];\n\n // If user has no eligible items, close the drawer and don't mark as visited\n if (!roleLoading && eligibleItems.length === 0) {\n setIsDrawerOpen(false);\n localStorage.setItem(openKey, 'false');\n return;\n }\n\n // Only proceed with drawer logic if user has eligible items\n const wasOpen = localStorage.getItem(openKey);\n const hasVisited = localStorage.getItem(visitedKey);\n const notificationShown = localStorage.getItem(notificationKey);\n\n if (!hasVisited) {\n setIsDrawerOpen(true);\n localStorage.setItem(visitedKey, 'true');\n localStorage.setItem(openKey, 'true');\n } else if (wasOpen === 'true') {\n setIsDrawerOpen(true);\n } else {\n setIsDrawerOpen(false);\n }\n\n setHasShownNotification(notificationShown === 'true');\n }, [userKey, configApi, roleLoading, userRole]);\n\n const openDrawer = () => {\n // Check if user has eligible items before opening\n const quickstartItems: QuickstartItemData[] = configApi?.has(\n 'app.quickstart',\n )\n ? (configApi.get('app.quickstart') as QuickstartItemData[])\n : [];\n\n const eligibleItems =\n !roleLoading && userRole\n ? filterQuickstartItemsByRole(quickstartItems, userRole)\n : [];\n\n // Only open if user has eligible items\n if (!roleLoading && eligibleItems.length > 0) {\n setIsDrawerOpen(true);\n const openKey = `quickstart-open:${userKey}`;\n localStorage.setItem(openKey, 'true');\n }\n };\n\n const closeDrawer = () => {\n setIsDrawerOpen(false);\n if (!hasShownNotification) {\n setShowNotification(true);\n setHasShownNotification(true);\n const notificationKey = `quickstart-notification-shown:${userKey}`;\n localStorage.setItem(notificationKey, 'true');\n }\n const openKey = `quickstart-open:${userKey}`;\n localStorage.setItem(openKey, 'false');\n };\n\n const toggleDrawer = () => {\n const next = !isDrawerOpen;\n setIsDrawerOpen(next);\n const openKey = `quickstart-open:${userKey}`;\n localStorage.setItem(openKey, next.toString());\n };\n\n const handleNotificationClose = () => setShowNotification(false);\n\n return (\n <QuickstartDrawerContext.Provider\n value={{\n isDrawerOpen,\n openDrawer,\n closeDrawer,\n toggleDrawer,\n setDrawerWidth,\n drawerWidth,\n userRole,\n roleLoading,\n }}\n >\n {children}\n <Snackbar\n sx={{ top: '80px !important' }}\n open={showNotification}\n autoHideDuration={10000}\n onClose={handleNotificationClose}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n message=\"Need help? Visit the Quick Start Guide by clicking on this (?) icon in the header!\"\n action={\n <IconButton\n size=\"small\"\n aria-label=\"close\"\n color=\"inherit\"\n onClick={handleNotificationClose}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n }\n />\n </QuickstartDrawerContext.Provider>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useRef, useCallback, useEffect } from 'react';
|
|
2
|
+
import { useQuickstartDrawerContext } from '../hooks/useQuickstartDrawerContext.esm.js';
|
|
3
|
+
|
|
4
|
+
const QuickstartDrawerStateExposer = ({
|
|
5
|
+
onStateChange
|
|
6
|
+
}) => {
|
|
7
|
+
const { isDrawerOpen, drawerWidth, setDrawerWidth, closeDrawer } = useQuickstartDrawerContext();
|
|
8
|
+
const closeDrawerRef = useRef(closeDrawer);
|
|
9
|
+
closeDrawerRef.current = closeDrawer;
|
|
10
|
+
const closeQuickstart = useCallback(() => {
|
|
11
|
+
closeDrawerRef.current();
|
|
12
|
+
}, []);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
onStateChange({
|
|
15
|
+
id: "quickstart",
|
|
16
|
+
isDrawerOpen,
|
|
17
|
+
drawerWidth,
|
|
18
|
+
setDrawerWidth,
|
|
19
|
+
closeDrawer: closeQuickstart
|
|
20
|
+
});
|
|
21
|
+
}, [
|
|
22
|
+
isDrawerOpen,
|
|
23
|
+
drawerWidth,
|
|
24
|
+
setDrawerWidth,
|
|
25
|
+
onStateChange,
|
|
26
|
+
closeQuickstart
|
|
27
|
+
]);
|
|
28
|
+
return null;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { QuickstartDrawerStateExposer };
|
|
32
|
+
//# sourceMappingURL=QuickstartDrawerStateExposer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickstartDrawerStateExposer.esm.js","sources":["../../src/components/QuickstartDrawerStateExposer.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useQuickstartDrawerContext } from '../hooks/useQuickstartDrawerContext';\n\n/**\n * Partial drawer state exposed to the ApplicationDrawer\n *\n * @public\n */\nexport type DrawerPartialState = {\n id: string;\n isDrawerOpen: boolean;\n drawerWidth: number;\n setDrawerWidth: (width: number) => void;\n closeDrawer: () => void;\n};\n\n/**\n * Props for drawer state exposer components\n *\n * @public\n */\nexport type DrawerStateExposerProps = {\n /**\n * Callback called whenever the drawer state changes\n */\n onStateChange: (state: DrawerPartialState) => void;\n};\n\n/**\n * This exposes Quickstart Drawer's partial context to the ApplicationDrawer\n *\n * It reads the QuickstartDrawerContext and calls the onStateChange callback with the\n * partial state (id, isDrawerOpen, drawerWidth, setDrawerWidth).\n *\n * @public\n */\nexport const QuickstartDrawerStateExposer = ({\n onStateChange,\n}: DrawerStateExposerProps) => {\n const { isDrawerOpen, drawerWidth, setDrawerWidth, closeDrawer } =\n useQuickstartDrawerContext();\n\n const closeDrawerRef = useRef(closeDrawer);\n closeDrawerRef.current = closeDrawer;\n\n const closeQuickstart = useCallback(() => {\n closeDrawerRef.current();\n }, []);\n\n useEffect(() => {\n onStateChange({\n id: 'quickstart',\n isDrawerOpen,\n drawerWidth,\n setDrawerWidth,\n closeDrawer: closeQuickstart,\n });\n }, [\n isDrawerOpen,\n drawerWidth,\n setDrawerWidth,\n onStateChange,\n closeQuickstart,\n ]);\n\n return null;\n};\n"],"names":[],"mappings":";;;AAoDO,MAAM,+BAA+B,CAAC;AAAA,EAC3C;AACF,CAA+B,KAAA;AAC7B,EAAA,MAAM,EAAE,YAAc,EAAA,WAAA,EAAa,cAAgB,EAAA,WAAA,KACjD,0BAA2B,EAAA;AAE7B,EAAM,MAAA,cAAA,GAAiB,OAAO,WAAW,CAAA;AACzC,EAAA,cAAA,CAAe,OAAU,GAAA,WAAA;AAEzB,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,cAAA,CAAe,OAAQ,EAAA;AAAA,GACzB,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAc,aAAA,CAAA;AAAA,MACZ,EAAI,EAAA,YAAA;AAAA,MACJ,YAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACA,EAAA;AAAA,IACD,YAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAO,OAAA,IAAA;AACT;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
3
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
4
4
|
import { CSSProperties, PropsWithChildren } from 'react';
|
|
5
5
|
export { quickstartTranslationRef, quickstartTranslations } from './alpha.js';
|
|
6
6
|
import '@backstage/core-plugin-api/alpha';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Partial drawer state exposed to the ApplicationDrawer
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
type DrawerPartialState = {
|
|
14
|
+
id: string;
|
|
15
|
+
isDrawerOpen: boolean;
|
|
16
|
+
drawerWidth: number;
|
|
17
|
+
setDrawerWidth: (width: number) => void;
|
|
18
|
+
closeDrawer: () => void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Props for drawer state exposer components
|
|
22
|
+
*
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
type DrawerStateExposerProps = {
|
|
26
|
+
/**
|
|
27
|
+
* Callback called whenever the drawer state changes
|
|
28
|
+
*/
|
|
29
|
+
onStateChange: (state: DrawerPartialState) => void;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* This exposes Quickstart Drawer's partial context to the ApplicationDrawer
|
|
33
|
+
*
|
|
34
|
+
* It reads the QuickstartDrawerContext and calls the onStateChange callback with the
|
|
35
|
+
* partial state (id, isDrawerOpen, drawerWidth, setDrawerWidth).
|
|
36
|
+
*
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
declare const QuickstartDrawerStateExposer: ({ onStateChange, }: DrawerStateExposerProps) => null;
|
|
40
|
+
|
|
8
41
|
/**
|
|
9
42
|
* Props for the QuickstartButton component
|
|
10
43
|
* @public
|
|
@@ -36,6 +69,12 @@ declare const QuickstartButton: ({ title, style, onClick, }: QuickstartButtonPro
|
|
|
36
69
|
* @public
|
|
37
70
|
*/
|
|
38
71
|
declare const quickstartPlugin: _backstage_core_plugin_api.BackstagePlugin<{}, {}, {}>;
|
|
72
|
+
/**
|
|
73
|
+
* Quickstart Drawer Content component extension
|
|
74
|
+
*
|
|
75
|
+
* @public
|
|
76
|
+
*/
|
|
77
|
+
declare const QuickstartDrawerContent: () => react_jsx_runtime.JSX.Element | null;
|
|
39
78
|
|
|
40
79
|
/**
|
|
41
80
|
* Call-to-action data for quickstart items
|
|
@@ -139,5 +178,5 @@ declare const QuickstartDrawerProvider: ({ children }: PropsWithChildren) => rea
|
|
|
139
178
|
*/
|
|
140
179
|
declare const filterQuickstartItemsByRole: (items: QuickstartItemData[], userRole: string) => QuickstartItemData[];
|
|
141
180
|
|
|
142
|
-
export { QuickstartButton, QuickstartDrawerProvider, filterQuickstartItemsByRole, quickstartPlugin, useQuickstartDrawerContext };
|
|
143
|
-
export type { QuickstartButtonProps, QuickstartDrawerContextType, QuickstartItemCtaData, QuickstartItemData, UserRole };
|
|
181
|
+
export { QuickstartButton, QuickstartDrawerContent, QuickstartDrawerProvider, QuickstartDrawerStateExposer, filterQuickstartItemsByRole, quickstartPlugin, useQuickstartDrawerContext };
|
|
182
|
+
export type { DrawerPartialState, DrawerStateExposerProps, QuickstartButtonProps, QuickstartDrawerContextType, QuickstartItemCtaData, QuickstartItemData, UserRole };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { unstable_ClassNameGenerator } from '@mui/material/className';
|
|
2
|
-
export { quickstartPlugin } from './plugin.esm.js';
|
|
2
|
+
export { QuickstartDrawerContent, quickstartPlugin } from './plugin.esm.js';
|
|
3
3
|
export { useQuickstartDrawerContext } from './hooks/useQuickstartDrawerContext.esm.js';
|
|
4
|
+
export { QuickstartDrawerStateExposer } from './components/QuickstartDrawerStateExposer.esm.js';
|
|
4
5
|
export { QuickstartButton } from './components/QuickstartButton/QuickstartButton.esm.js';
|
|
5
6
|
export { QuickstartDrawerProvider } from './components/QuickstartDrawerProvider.esm.js';
|
|
6
7
|
export { quickstartTranslations } from './translations/index.esm.js';
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';\n\nClassNameGenerator.configure(componentName => {\n return componentName.startsWith('v5-')\n ? componentName\n : `v5-${componentName}`;\n});\n\nexport * from './plugin';\n\nexport { useQuickstartDrawerContext } from './hooks/useQuickstartDrawerContext';\nexport type { QuickstartDrawerContextType } from './components/QuickstartDrawerContext';\n/**\n * @public\n */\nexport type {\n UserRole,\n QuickstartItemData,\n QuickstartItemCtaData,\n} from './types';\nexport { QuickstartButton } from './components/QuickstartButton/QuickstartButton';\nexport type { QuickstartButtonProps } from './components/QuickstartButton/QuickstartButton';\n/**\n * @public\n */\nexport { QuickstartDrawerProvider } from './components/QuickstartDrawerProvider';\n\nexport {\n quickstartTranslations,\n quickstartTranslationRef,\n} from './translations';\n\nexport { filterQuickstartItemsByRole } from './utils';\n"],"names":["ClassNameGenerator"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';\n\nClassNameGenerator.configure(componentName => {\n return componentName.startsWith('v5-')\n ? componentName\n : `v5-${componentName}`;\n});\n\nexport * from './plugin';\n\nexport { useQuickstartDrawerContext } from './hooks/useQuickstartDrawerContext';\nexport type { QuickstartDrawerContextType } from './components/QuickstartDrawerContext';\nexport { QuickstartDrawerStateExposer } from './components/QuickstartDrawerStateExposer';\nexport type {\n DrawerStateExposerProps,\n DrawerPartialState,\n} from './components/QuickstartDrawerStateExposer';\n/**\n * @public\n */\nexport type {\n UserRole,\n QuickstartItemData,\n QuickstartItemCtaData,\n} from './types';\nexport { QuickstartButton } from './components/QuickstartButton/QuickstartButton';\nexport type { QuickstartButtonProps } from './components/QuickstartButton/QuickstartButton';\n/**\n * @public\n */\nexport { QuickstartDrawerProvider } from './components/QuickstartDrawerProvider';\n\nexport {\n quickstartTranslations,\n quickstartTranslationRef,\n} from './translations';\n\nexport { filterQuickstartItemsByRole } from './utils';\n"],"names":["ClassNameGenerator"],"mappings":";;;;;;;;;;AAkBAA,2BAAA,CAAmB,UAAU,CAAiB,aAAA,KAAA;AAC5C,EAAA,OAAO,cAAc,UAAW,CAAA,KAAK,CACjC,GAAA,aAAA,GACA,MAAM,aAAa,CAAA,CAAA;AACzB,CAAC,CAAA"}
|
package/dist/plugin.esm.js
CHANGED
|
@@ -5,7 +5,7 @@ import { quickstartTranslationRef } from './translations/ref.esm.js';
|
|
|
5
5
|
const quickstartPlugin = createPlugin({
|
|
6
6
|
id: "quickstart",
|
|
7
7
|
__experimentalTranslations: {
|
|
8
|
-
availableLanguages: ["en", "de", "fr", "
|
|
8
|
+
availableLanguages: ["en", "de", "es", "fr", "it", "ja"],
|
|
9
9
|
resources: [quickstartTranslationRef]
|
|
10
10
|
}
|
|
11
11
|
});
|
|
@@ -19,6 +19,16 @@ quickstartPlugin.provide(
|
|
|
19
19
|
}
|
|
20
20
|
})
|
|
21
21
|
);
|
|
22
|
+
const QuickstartDrawerContent = quickstartPlugin.provide(
|
|
23
|
+
createComponentExtension({
|
|
24
|
+
name: "QuickstartDrawerContent",
|
|
25
|
+
component: {
|
|
26
|
+
lazy: () => import('./components/QuickstartDrawerContent.esm.js').then(
|
|
27
|
+
(m) => m.QuickstartDrawerContent
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
);
|
|
22
32
|
quickstartPlugin.provide(
|
|
23
33
|
createComponentExtension({
|
|
24
34
|
name: "QuickstartButton",
|
|
@@ -29,6 +39,16 @@ quickstartPlugin.provide(
|
|
|
29
39
|
}
|
|
30
40
|
})
|
|
31
41
|
);
|
|
42
|
+
quickstartPlugin.provide(
|
|
43
|
+
createComponentExtension({
|
|
44
|
+
name: "QuickstartDrawerStateExposer",
|
|
45
|
+
component: {
|
|
46
|
+
lazy: () => import('./components/QuickstartDrawerStateExposer.esm.js').then(
|
|
47
|
+
(m) => m.QuickstartDrawerStateExposer
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
);
|
|
32
52
|
|
|
33
|
-
export { quickstartPlugin };
|
|
53
|
+
export { QuickstartDrawerContent, quickstartPlugin };
|
|
34
54
|
//# sourceMappingURL=plugin.esm.js.map
|
package/dist/plugin.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createComponentExtension,\n createPlugin,\n} from '@backstage/core-plugin-api';\nimport { PropsWithChildren } from 'react';\nimport { QuickstartButtonProps } from './components/QuickstartButton/QuickstartButton';\nimport { quickstartTranslationRef } from './translations';\n\nexport type { QuickstartButtonProps } from './components/QuickstartButton/QuickstartButton';\n\n/**\n * Quick start plugin\n *\n * @public\n */\nexport const quickstartPlugin = createPlugin({\n id: 'quickstart',\n __experimentalTranslations: {\n availableLanguages: ['en', 'de', 'fr', '
|
|
1
|
+
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createComponentExtension,\n createPlugin,\n} from '@backstage/core-plugin-api';\nimport { PropsWithChildren } from 'react';\nimport { QuickstartButtonProps } from './components/QuickstartButton/QuickstartButton';\nimport { quickstartTranslationRef } from './translations';\n\nexport type { QuickstartButtonProps } from './components/QuickstartButton/QuickstartButton';\n\n/**\n * Quick start plugin\n *\n * @public\n */\nexport const quickstartPlugin = createPlugin({\n id: 'quickstart',\n __experimentalTranslations: {\n availableLanguages: ['en', 'de', 'es', 'fr', 'it', 'ja'],\n resources: [quickstartTranslationRef],\n },\n} as any);\n\n/**\n * Quick start drawer provider\n *\n * @public\n */\nexport const QuickstartDrawerProvider: React.ComponentType<PropsWithChildren> =\n quickstartPlugin.provide(\n createComponentExtension({\n name: 'QuickstartDrawerProvider',\n component: {\n lazy: () =>\n import('./components/QuickstartDrawerProvider').then(\n m => m.QuickstartDrawerProvider,\n ),\n },\n }),\n );\n\n/**\n * Quickstart Drawer Content component extension\n *\n * @public\n */\nexport const QuickstartDrawerContent = quickstartPlugin.provide(\n createComponentExtension({\n name: 'QuickstartDrawerContent',\n component: {\n lazy: () =>\n import('./components/QuickstartDrawerContent').then(\n m => m.QuickstartDrawerContent,\n ),\n },\n }),\n);\n\n/**\n * Quick start button for global header help dropdown\n *\n * @public\n */\nexport const QuickstartButton: React.ComponentType<QuickstartButtonProps> =\n quickstartPlugin.provide(\n createComponentExtension({\n name: 'QuickstartButton',\n component: {\n lazy: () =>\n import('./components/QuickstartButton/QuickstartButton').then(\n m => m.QuickstartButton,\n ),\n },\n }),\n );\n\n/**\n * Quickstart Drawer State Exposer exposes its drawer state\n *\n * @public\n */\nexport const QuickstartDrawerStateExposer = quickstartPlugin.provide(\n createComponentExtension({\n name: 'QuickstartDrawerStateExposer',\n component: {\n lazy: () =>\n import('./components/QuickstartDrawerStateExposer').then(\n m => m.QuickstartDrawerStateExposer,\n ),\n },\n }),\n);\n"],"names":[],"mappings":";;;;AA+BO,MAAM,mBAAmB,YAAa,CAAA;AAAA,EAC3C,EAAI,EAAA,YAAA;AAAA,EACJ,0BAA4B,EAAA;AAAA,IAC1B,oBAAoB,CAAC,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,IACvD,SAAA,EAAW,CAAC,wBAAwB;AAAA;AAExC,CAAQ;AAQN,gBAAiB,CAAA,OAAA;AAAA,EACf,wBAAyB,CAAA;AAAA,IACvB,IAAM,EAAA,0BAAA;AAAA,IACN,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,MACJ,OAAO,8CAAuC,CAAE,CAAA,IAAA;AAAA,QAC9C,OAAK,CAAE,CAAA;AAAA;AACT;AACJ,GACD;AACH;AAOK,MAAM,0BAA0B,gBAAiB,CAAA,OAAA;AAAA,EACtD,wBAAyB,CAAA;AAAA,IACvB,IAAM,EAAA,yBAAA;AAAA,IACN,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,MACJ,OAAO,6CAAsC,CAAE,CAAA,IAAA;AAAA,QAC7C,OAAK,CAAE,CAAA;AAAA;AACT;AACJ,GACD;AACH;AAQE,gBAAiB,CAAA,OAAA;AAAA,EACf,wBAAyB,CAAA;AAAA,IACvB,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,MACJ,OAAO,uDAAgD,CAAE,CAAA,IAAA;AAAA,QACvD,OAAK,CAAE,CAAA;AAAA;AACT;AACJ,GACD;AACH;AAO0C,gBAAiB,CAAA,OAAA;AAAA,EAC3D,wBAAyB,CAAA;AAAA,IACvB,IAAM,EAAA,8BAAA;AAAA,IACN,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,MACJ,OAAO,kDAA2C,CAAE,CAAA,IAAA;AAAA,QAClD,OAAK,CAAE,CAAA;AAAA;AACT;AACJ,GACD;AACH;;;;"}
|
|
@@ -4,57 +4,56 @@ import { quickstartTranslationRef } from './ref.esm.js';
|
|
|
4
4
|
const quickstartTranslationFr = createTranslationMessages({
|
|
5
5
|
ref: quickstartTranslationRef,
|
|
6
6
|
messages: {
|
|
7
|
-
"button.closeDrawer": "Fermer le tiroir",
|
|
8
|
-
"button.openQuickstartGuide": "Ouvrir le guide de d\xE9marrage rapide",
|
|
9
|
-
"button.quickstart": "D\xE9marrage rapide",
|
|
10
|
-
"content.emptyState.title": "Le contenu de d\xE9marrage rapide n'est pas disponible pour votre r\xF4le.",
|
|
11
|
-
"dev.currentState": "\xC9tat actuel du tiroir\xA0: {{state}}",
|
|
12
|
-
"dev.drawerControls": "Commandes des tiroirs",
|
|
13
|
-
"dev.instructions": "Instructions",
|
|
14
|
-
"dev.pageDescription": "Ceci est une page de test pour le plugin Quickstart. Utilisez les boutons ci-dessous pour interagir avec le tiroir de d\xE9marrage rapide.",
|
|
15
|
-
"dev.pageTitle": "Page de test du plugin de d\xE9marrage rapide",
|
|
16
|
-
"dev.stateClosed": "Ferm\xE9",
|
|
17
|
-
"dev.stateOpen": "Ouvrir",
|
|
18
|
-
"dev.step1": "1. Cliquez sur \xAB\xA0Ouvrir le guide de d\xE9marrage rapide\xA0\xBB pour ouvrir le tiroir",
|
|
19
|
-
"dev.step2": "2. Parcourez les \xE9tapes de d\xE9marrage rapide",
|
|
20
|
-
"dev.step3": "3. Testez le suivi de la progression en compl\xE9tant les \xE9tapes",
|
|
21
|
-
"dev.step4": "4. Le tiroir peut \xEAtre ferm\xE9 \xE0 l'aide du bouton de fermeture ou des commandes du tiroir",
|
|
22
|
-
"dev.step5": "5. La progression est automatiquement enregistr\xE9e dans le stockage local",
|
|
23
|
-
"footer.hide": "Cacher",
|
|
24
|
-
"footer.notStarted": "Non d\xE9marr\xE9",
|
|
25
|
-
"footer.progress": "{{progress}}% de progr\xE8s",
|
|
26
|
-
"header.subtitle": "Nous vous guiderons \xE0 travers quelques \xE9tapes rapides",
|
|
27
7
|
"header.title": "Commen\xE7ons par vous familiariser avec Developer Hub",
|
|
28
|
-
"
|
|
29
|
-
"item.collapseButtonAriaLabel": "R\xE9duire l'\xE9l\xE9ment",
|
|
30
|
-
"item.expandAriaLabel": "D\xE9velopper les d\xE9tails de {{title}}",
|
|
31
|
-
"item.expandButtonAriaLabel": "D\xE9velopper l'\xE9l\xE9ment",
|
|
32
|
-
// New keys https://github.com/redhat-developer/rhdh-plugins/pull/1514
|
|
33
|
-
"button.gotIt": "Compris !",
|
|
8
|
+
"header.subtitle": "Nous vous guiderons \xE0 travers quelques \xE9tapes rapides",
|
|
34
9
|
"steps.setupAuthentication.title": "Configurer l'authentification",
|
|
35
|
-
"steps.setupAuthentication.description": "Configurez des
|
|
10
|
+
"steps.setupAuthentication.description": "Configurez des informations de connexion s\xE9curis\xE9es pour prot\xE9ger votre compte contre tout acc\xE8s non autoris\xE9.",
|
|
36
11
|
"steps.setupAuthentication.ctaTitle": "En savoir plus",
|
|
37
12
|
"steps.configureRbac.title": "Configurer RBAC",
|
|
38
|
-
"steps.configureRbac.description": "Attribuez des r\xF4les et des
|
|
13
|
+
"steps.configureRbac.description": "Attribuez des r\xF4les et des autorisations pour contr\xF4ler qui peut afficher, cr\xE9er ou modifier des ressources, garantissant ainsi une collaboration s\xE9curis\xE9e et efficace.",
|
|
39
14
|
"steps.configureRbac.ctaTitle": "G\xE9rer l'acc\xE8s",
|
|
40
15
|
"steps.configureGit.title": "Configurer Git",
|
|
41
|
-
"steps.configureGit.description": "Connectez vos fournisseurs Git,
|
|
16
|
+
"steps.configureGit.description": "Connectez vos fournisseurs Git, tels que GitHub pour g\xE9rer le code, automatiser les flux de travail et int\xE9grer les fonctionnalit\xE9s de la plateforme.",
|
|
42
17
|
"steps.configureGit.ctaTitle": "En savoir plus",
|
|
43
18
|
"steps.managePlugins.title": "G\xE9rer les plugins",
|
|
44
|
-
"steps.managePlugins.description": "Parcourez et installez des extensions pour ajouter des fonctionnalit\xE9s, connecter
|
|
19
|
+
"steps.managePlugins.description": "Parcourez et installez des extensions pour ajouter des fonctionnalit\xE9s, vous connecter \xE0 des outils externes et personnaliser votre exp\xE9rience.",
|
|
45
20
|
"steps.managePlugins.ctaTitle": "Explorer les plugins",
|
|
46
|
-
"steps.importApplication.title": "
|
|
47
|
-
"steps.importApplication.description": "Importez votre code et vos services existants dans le catalogue pour les organiser et y acc\xE9der via votre portail d\xE9veloppeur.",
|
|
21
|
+
"steps.importApplication.title": "Demande d'importation",
|
|
22
|
+
"steps.importApplication.description": "Importez votre code et vos services existants dans le catalogue pour les organiser et y acc\xE9der via votre portail de d\xE9veloppeur.",
|
|
48
23
|
"steps.importApplication.ctaTitle": "Importer",
|
|
49
|
-
"steps.learnAboutCatalog.title": "
|
|
50
|
-
"steps.learnAboutCatalog.description": "D\
|
|
24
|
+
"steps.learnAboutCatalog.title": "En savoir plus sur le catalogue",
|
|
25
|
+
"steps.learnAboutCatalog.description": "D\xE9couvrir tous les composants logiciels, services et API, et affichez leurs propri\xE9taires et leur documentation.",
|
|
51
26
|
"steps.learnAboutCatalog.ctaTitle": "Voir le catalogue",
|
|
52
27
|
"steps.exploreSelfServiceTemplates.title": "Explorer les mod\xE8les en libre-service",
|
|
53
|
-
"steps.exploreSelfServiceTemplates.description": "
|
|
28
|
+
"steps.exploreSelfServiceTemplates.description": "Utiliser nos mod\xE8les en libre-service pour configurer rapidement de nouveaux projets, services ou documentations.",
|
|
54
29
|
"steps.exploreSelfServiceTemplates.ctaTitle": "Explorer les mod\xE8les",
|
|
55
|
-
"steps.findAllLearningPaths.title": "Trouver tous les
|
|
56
|
-
"steps.findAllLearningPaths.description": "Int\xE9grez l
|
|
57
|
-
"steps.findAllLearningPaths.ctaTitle": "Voir
|
|
30
|
+
"steps.findAllLearningPaths.title": "Trouver tous les Learning Paths",
|
|
31
|
+
"steps.findAllLearningPaths.description": "Int\xE9grez l\u2019apprentissage en ligne personnalis\xE9 dans vos flux de travail avec Learning Paths pour acc\xE9l\xE9rer l\u2019int\xE9gration, combler les lacunes en mati\xE8re de comp\xE9tences et promouvoir les meilleures pratiques.",
|
|
32
|
+
"steps.findAllLearningPaths.ctaTitle": "Voir Learning Paths",
|
|
33
|
+
"button.quickstart": "D\xE9marrage rapide",
|
|
34
|
+
"button.openQuickstartGuide": "Ouvrir le guide de d\xE9marrage rapide",
|
|
35
|
+
"button.closeDrawer": "Fermer le tiroir",
|
|
36
|
+
"button.gotIt": "J'ai compris!",
|
|
37
|
+
"footer.progress": "{{progress}}% de progr\xE8s",
|
|
38
|
+
"footer.notStarted": "Non d\xE9marr\xE9",
|
|
39
|
+
"footer.hide": "Cacher",
|
|
40
|
+
"content.emptyState.title": "Le contenu de d\xE9marrage rapide n'est pas disponible pour votre r\xF4le.",
|
|
41
|
+
"item.expandAriaLabel": "D\xE9velopper les d\xE9tails de {{title}}",
|
|
42
|
+
"item.collapseAriaLabel": "R\xE9duire les d\xE9tails de {{title}}",
|
|
43
|
+
"item.expandButtonAriaLabel": "D\xE9velopper l'\xE9l\xE9ment",
|
|
44
|
+
"item.collapseButtonAriaLabel": "R\xE9duire l'\xE9l\xE9ment",
|
|
45
|
+
"dev.pageTitle": "Page de test du plugin de d\xE9marrage rapide",
|
|
46
|
+
"dev.pageDescription": "Ceci est une page de test pour le plugin Quickstart. Utilisez les boutons ci-dessous pour interagir avec le tiroir de d\xE9marrage rapide.",
|
|
47
|
+
"dev.drawerControls": "Commandes des tiroirs",
|
|
48
|
+
"dev.currentState": "\xC9tat actuel du tiroir\xA0: {{state}}",
|
|
49
|
+
"dev.stateOpen": "Ouvrir",
|
|
50
|
+
"dev.stateClosed": "Ferm\xE9",
|
|
51
|
+
"dev.instructions": "Instructions",
|
|
52
|
+
"dev.step1": "1. Cliquez sur \xAB\xA0Ouvrir le guide de d\xE9marrage rapide\xA0\xBB pour ouvrir le tiroir",
|
|
53
|
+
"dev.step2": "2. Parcourez les \xE9tapes de d\xE9marrage rapide",
|
|
54
|
+
"dev.step3": "3. Testez le suivi de la progression en compl\xE9tant les \xE9tapes",
|
|
55
|
+
"dev.step4": "4. Le tiroir peut \xEAtre ferm\xE9 \xE0 l'aide du bouton de fermeture ou des commandes du tiroir",
|
|
56
|
+
"dev.step5": "5. La progression est automatiquement enregistr\xE9e dans le stockage local"
|
|
58
57
|
}
|
|
59
58
|
});
|
|
60
59
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr.esm.js","sources":["../../src/translations/fr.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { quickstartTranslationRef } from './ref';\n\nconst quickstartTranslationFr = createTranslationMessages({\n ref: quickstartTranslationRef,\n messages: {\n '
|
|
1
|
+
{"version":3,"file":"fr.esm.js","sources":["../../src/translations/fr.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { quickstartTranslationRef } from './ref';\n\n/**\n * fr translation for plugin.quickstart.\n * @public\n */\nconst quickstartTranslationFr = createTranslationMessages({\n ref: quickstartTranslationRef,\n messages: {\n 'header.title': 'Commençons par vous familiariser avec Developer Hub',\n 'header.subtitle': 'Nous vous guiderons à travers quelques étapes rapides',\n 'steps.setupAuthentication.title': \"Configurer l'authentification\",\n 'steps.setupAuthentication.description':\n 'Configurez des informations de connexion sécurisées pour protéger votre compte contre tout accès non autorisé.',\n 'steps.setupAuthentication.ctaTitle': 'En savoir plus',\n 'steps.configureRbac.title': 'Configurer RBAC',\n 'steps.configureRbac.description':\n 'Attribuez des rôles et des autorisations pour contrôler qui peut afficher, créer ou modifier des ressources, garantissant ainsi une collaboration sécurisée et efficace.',\n 'steps.configureRbac.ctaTitle': \"Gérer l'accès\",\n 'steps.configureGit.title': 'Configurer Git',\n 'steps.configureGit.description':\n 'Connectez vos fournisseurs Git, tels que GitHub pour gérer le code, automatiser les flux de travail et intégrer les fonctionnalités de la plateforme.',\n 'steps.configureGit.ctaTitle': 'En savoir plus',\n 'steps.managePlugins.title': 'Gérer les plugins',\n 'steps.managePlugins.description':\n 'Parcourez et installez des extensions pour ajouter des fonctionnalités, vous connecter à des outils externes et personnaliser votre expérience.',\n 'steps.managePlugins.ctaTitle': 'Explorer les plugins',\n 'steps.importApplication.title': \"Demande d'importation\",\n 'steps.importApplication.description':\n 'Importez votre code et vos services existants dans le catalogue pour les organiser et y accéder via votre portail de développeur.',\n 'steps.importApplication.ctaTitle': 'Importer',\n 'steps.learnAboutCatalog.title': 'En savoir plus sur le catalogue',\n 'steps.learnAboutCatalog.description':\n 'Découvrir tous les composants logiciels, services et API, et affichez leurs propriétaires et leur documentation.',\n 'steps.learnAboutCatalog.ctaTitle': 'Voir le catalogue',\n 'steps.exploreSelfServiceTemplates.title':\n 'Explorer les modèles en libre-service',\n 'steps.exploreSelfServiceTemplates.description':\n 'Utiliser nos modèles en libre-service pour configurer rapidement de nouveaux projets, services ou documentations.',\n 'steps.exploreSelfServiceTemplates.ctaTitle': 'Explorer les modèles',\n 'steps.findAllLearningPaths.title': 'Trouver tous les Learning Paths',\n 'steps.findAllLearningPaths.description':\n 'Intégrez l’apprentissage en ligne personnalisé dans vos flux de travail avec Learning Paths pour accélérer l’intégration, combler les lacunes en matière de compétences et promouvoir les meilleures pratiques.',\n 'steps.findAllLearningPaths.ctaTitle': 'Voir Learning Paths',\n 'button.quickstart': 'Démarrage rapide',\n 'button.openQuickstartGuide': 'Ouvrir le guide de démarrage rapide',\n 'button.closeDrawer': 'Fermer le tiroir',\n 'button.gotIt': \"J'ai compris!\",\n 'footer.progress': '{{progress}}% de progrès',\n 'footer.notStarted': 'Non démarré',\n 'footer.hide': 'Cacher',\n 'content.emptyState.title':\n \"Le contenu de démarrage rapide n'est pas disponible pour votre rôle.\",\n 'item.expandAriaLabel': 'Développer les détails de {{title}}',\n 'item.collapseAriaLabel': 'Réduire les détails de {{title}}',\n 'item.expandButtonAriaLabel': \"Développer l'élément\",\n 'item.collapseButtonAriaLabel': \"Réduire l'élément\",\n 'dev.pageTitle': 'Page de test du plugin de démarrage rapide',\n 'dev.pageDescription':\n 'Ceci est une page de test pour le plugin Quickstart. Utilisez les boutons ci-dessous pour interagir avec le tiroir de démarrage rapide.',\n 'dev.drawerControls': 'Commandes des tiroirs',\n 'dev.currentState': 'État actuel du tiroir : {{state}}',\n 'dev.stateOpen': 'Ouvrir',\n 'dev.stateClosed': 'Fermé',\n 'dev.instructions': 'Instructions',\n 'dev.step1':\n '1. Cliquez sur « Ouvrir le guide de démarrage rapide » pour ouvrir le tiroir',\n 'dev.step2': '2. Parcourez les étapes de démarrage rapide',\n 'dev.step3':\n '3. Testez le suivi de la progression en complétant les étapes',\n 'dev.step4':\n \"4. Le tiroir peut être fermé à l'aide du bouton de fermeture ou des commandes du tiroir\",\n 'dev.step5':\n '5. La progression est automatiquement enregistrée dans le stockage local',\n },\n});\n\nexport default quickstartTranslationFr;\n"],"names":[],"mappings":";;;AAuBA,MAAM,0BAA0B,yBAA0B,CAAA;AAAA,EACxD,GAAK,EAAA,wBAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,cAAgB,EAAA,wDAAA;AAAA,IAChB,iBAAmB,EAAA,6DAAA;AAAA,IACnB,iCAAmC,EAAA,+BAAA;AAAA,IACnC,uCACE,EAAA,+HAAA;AAAA,IACF,oCAAsC,EAAA,gBAAA;AAAA,IACtC,2BAA6B,EAAA,iBAAA;AAAA,IAC7B,iCACE,EAAA,yLAAA;AAAA,IACF,8BAAgC,EAAA,qBAAA;AAAA,IAChC,0BAA4B,EAAA,gBAAA;AAAA,IAC5B,gCACE,EAAA,gKAAA;AAAA,IACF,6BAA+B,EAAA,gBAAA;AAAA,IAC/B,2BAA6B,EAAA,sBAAA;AAAA,IAC7B,iCACE,EAAA,0JAAA;AAAA,IACF,8BAAgC,EAAA,sBAAA;AAAA,IAChC,+BAAiC,EAAA,uBAAA;AAAA,IACjC,qCACE,EAAA,yIAAA;AAAA,IACF,kCAAoC,EAAA,UAAA;AAAA,IACpC,+BAAiC,EAAA,iCAAA;AAAA,IACjC,qCACE,EAAA,wHAAA;AAAA,IACF,kCAAoC,EAAA,mBAAA;AAAA,IACpC,yCACE,EAAA,0CAAA;AAAA,IACF,+CACE,EAAA,sHAAA;AAAA,IACF,4CAA8C,EAAA,yBAAA;AAAA,IAC9C,kCAAoC,EAAA,iCAAA;AAAA,IACpC,wCACE,EAAA,gPAAA;AAAA,IACF,qCAAuC,EAAA,qBAAA;AAAA,IACvC,mBAAqB,EAAA,qBAAA;AAAA,IACrB,4BAA8B,EAAA,wCAAA;AAAA,IAC9B,oBAAsB,EAAA,kBAAA;AAAA,IACtB,cAAgB,EAAA,eAAA;AAAA,IAChB,iBAAmB,EAAA,6BAAA;AAAA,IACnB,mBAAqB,EAAA,mBAAA;AAAA,IACrB,aAAe,EAAA,QAAA;AAAA,IACf,0BACE,EAAA,4EAAA;AAAA,IACF,sBAAwB,EAAA,2CAAA;AAAA,IACxB,wBAA0B,EAAA,wCAAA;AAAA,IAC1B,4BAA8B,EAAA,+BAAA;AAAA,IAC9B,8BAAgC,EAAA,4BAAA;AAAA,IAChC,eAAiB,EAAA,+CAAA;AAAA,IACjB,qBACE,EAAA,4IAAA;AAAA,IACF,oBAAsB,EAAA,uBAAA;AAAA,IACtB,kBAAoB,EAAA,yCAAA;AAAA,IACpB,eAAiB,EAAA,QAAA;AAAA,IACjB,iBAAmB,EAAA,UAAA;AAAA,IACnB,kBAAoB,EAAA,cAAA;AAAA,IACpB,WACE,EAAA,6FAAA;AAAA,IACF,WAAa,EAAA,mDAAA;AAAA,IACb,WACE,EAAA,qEAAA;AAAA,IACF,WACE,EAAA,kGAAA;AAAA,IACF,WACE,EAAA;AAAA;AAEN,CAAC;;;;"}
|
|
@@ -5,8 +5,10 @@ const quickstartTranslations = createTranslationResource({
|
|
|
5
5
|
ref: quickstartTranslationRef,
|
|
6
6
|
translations: {
|
|
7
7
|
de: () => import('./de.esm.js'),
|
|
8
|
+
es: () => import('./es.esm.js'),
|
|
8
9
|
fr: () => import('./fr.esm.js'),
|
|
9
|
-
|
|
10
|
+
it: () => import('./it.esm.js'),
|
|
11
|
+
ja: () => import('./ja.esm.js')
|
|
10
12
|
}
|
|
11
13
|
});
|
|
12
14
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/translations/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationResource } from '@backstage/core-plugin-api/alpha';\nimport { quickstartTranslationRef } from './ref';\n\n/**\n * Translation Resource for Quickstart\n * @public\n */\nexport const quickstartTranslations = createTranslationResource({\n ref: quickstartTranslationRef,\n translations: {\n de: () => import('./de'),\n fr: () => import('./fr'),\n
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/translations/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationResource } from '@backstage/core-plugin-api/alpha';\nimport { quickstartTranslationRef } from './ref';\n\n/**\n * Translation Resource for Quickstart\n * @public\n */\nexport const quickstartTranslations = createTranslationResource({\n ref: quickstartTranslationRef,\n translations: {\n de: () => import('./de'),\n es: () => import('./es'),\n fr: () => import('./fr'),\n it: () => import('./it'),\n ja: () => import('./ja'),\n },\n});\n\nexport { quickstartTranslationRef };\n"],"names":[],"mappings":";;;AAuBO,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EAC9D,GAAK,EAAA,wBAAA;AAAA,EACL,YAAc,EAAA;AAAA,IACZ,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM;AAAA;AAE3B,CAAC;;;;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
|
|
2
|
+
import { quickstartTranslationRef } from './ref.esm.js';
|
|
3
|
+
|
|
4
|
+
const quickstartTranslationIt = createTranslationMessages({
|
|
5
|
+
ref: quickstartTranslationRef,
|
|
6
|
+
messages: {
|
|
7
|
+
"header.title": "Muoviamo insieme i primi passi con Developer Hub",
|
|
8
|
+
"header.subtitle": "Ti guideremo attraverso alcuni rapidi passaggi",
|
|
9
|
+
"steps.setupAuthentication.title": "Impostazione dell'autenticazione",
|
|
10
|
+
"steps.setupAuthentication.description": "Impostazione di credenziali di accesso sicure per proteggere l'account da accessi non autorizzati.",
|
|
11
|
+
"steps.setupAuthentication.ctaTitle": "Per saperne di pi\xF9",
|
|
12
|
+
"steps.configureRbac.title": "Configurazione di RBAC",
|
|
13
|
+
"steps.configureRbac.description": "Assegnare ruoli e autorizzazioni per controllare chi pu\xF2 visualizzare, creare o modificare le risorse, per garantire una collaborazione sicura ed efficiente.",
|
|
14
|
+
"steps.configureRbac.ctaTitle": "Gestisci l'accesso",
|
|
15
|
+
"steps.configureGit.title": "Configurazione di Git",
|
|
16
|
+
"steps.configureGit.description": "Collegare i provider Git, come GitHub, per gestire il codice, automatizzare i flussi di lavoro e integrare le funzionalit\xE0 della piattaforma.",
|
|
17
|
+
"steps.configureGit.ctaTitle": "Per saperne di pi\xF9",
|
|
18
|
+
"steps.managePlugins.title": "Gestione dei plugin",
|
|
19
|
+
"steps.managePlugins.description": "Sfogliare e installare le estensioni per aggiungere funzionalit\xE0, connettersi a strumenti esterni e personalizzare l'esperienza utente.",
|
|
20
|
+
"steps.managePlugins.ctaTitle": "Esplora i plugin",
|
|
21
|
+
"steps.importApplication.title": "Importare l'applicazione",
|
|
22
|
+
"steps.importApplication.description": "Importare il codice e i servizi esistenti nel catalogo per organizzarli e accedervi tramite il portale per sviluppatori.",
|
|
23
|
+
"steps.importApplication.ctaTitle": "Importa",
|
|
24
|
+
"steps.learnAboutCatalog.title": "Analisi del catalogo",
|
|
25
|
+
"steps.learnAboutCatalog.description": "Scoprire tutti i componenti software, i servizi e le API e visualizzarne proprietari e documentazione.",
|
|
26
|
+
"steps.learnAboutCatalog.ctaTitle": "Visualizza catalogo",
|
|
27
|
+
"steps.exploreSelfServiceTemplates.title": "Esplorare i modelli self-service",
|
|
28
|
+
"steps.exploreSelfServiceTemplates.description": "Utilizzare i nostri modelli self-service per configurare rapidamente nuovi progetti, servizi o documentazione.",
|
|
29
|
+
"steps.exploreSelfServiceTemplates.ctaTitle": "Esplora i modelli",
|
|
30
|
+
"steps.findAllLearningPaths.title": "Individuare tutti i percorsi di apprendimento",
|
|
31
|
+
"steps.findAllLearningPaths.description": "Integrare l'e-learning personalizzato nei flussi di lavoro con i percorsi di apprendimento per accelerare l'onboarding, colmare le lacune di competenze e promuovere le best practice.",
|
|
32
|
+
"steps.findAllLearningPaths.ctaTitle": "Visualizzare i percorsi di apprendimento",
|
|
33
|
+
"button.quickstart": "Avvio rapido",
|
|
34
|
+
"button.openQuickstartGuide": "Apri la Guida all'avvio rapido",
|
|
35
|
+
"button.closeDrawer": "Chiudi riquadro",
|
|
36
|
+
"button.gotIt": "Ho capito!",
|
|
37
|
+
"footer.progress": "{{progress}}% di avanzamento",
|
|
38
|
+
"footer.notStarted": "Non iniziato",
|
|
39
|
+
"footer.hide": "Nascondi",
|
|
40
|
+
"content.emptyState.title": "Contenuto di avvio rapido non disponibile per il ruolo utente.",
|
|
41
|
+
"item.expandAriaLabel": "Espandi i dettagli di {{title}}",
|
|
42
|
+
"item.collapseAriaLabel": "Comprimi i dettagli di {{title}}",
|
|
43
|
+
"item.expandButtonAriaLabel": "Espandi elemento",
|
|
44
|
+
"item.collapseButtonAriaLabel": "Comprimi elemento",
|
|
45
|
+
"dev.pageTitle": "Pagina di prova del plugin di avvio rapido",
|
|
46
|
+
"dev.pageDescription": "Questa \xE8 una pagina di prova per il plugin di avvio rapido. Utilizzare i pulsanti sottostanti per interagire con il riquadro di avvio rapido.",
|
|
47
|
+
"dev.drawerControls": "Comandi del riquadro",
|
|
48
|
+
"dev.currentState": "Stato attuale del riquadro: {{state}}",
|
|
49
|
+
"dev.stateOpen": "Aperto",
|
|
50
|
+
"dev.stateClosed": "Chiuso",
|
|
51
|
+
"dev.instructions": "Istruzioni",
|
|
52
|
+
"dev.step1": `1. Fare clic su "Apri la Guida all'avvio rapido" per aprire il riquadro`,
|
|
53
|
+
"dev.step2": "2. Navigare tra i passaggi di avvio rapido",
|
|
54
|
+
"dev.step3": "3. Testare il monitoraggio dei progressi completando i passaggi",
|
|
55
|
+
"dev.step4": "4. \xC8 possibile chiudere il riquadro utilizzando il pulsante di chiusura o i comandi del riquadro stesso",
|
|
56
|
+
"dev.step5": "5. I progressi vengono salvati automaticamente su localStorage"
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
export { quickstartTranslationIt as default };
|
|
61
|
+
//# sourceMappingURL=it.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"it.esm.js","sources":["../../src/translations/it.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { quickstartTranslationRef } from './ref';\n\n/**\n * Italian translation for plugin.quickstart.\n * @public\n */\nconst quickstartTranslationIt = createTranslationMessages({\n ref: quickstartTranslationRef,\n messages: {\n 'header.title': 'Muoviamo insieme i primi passi con Developer Hub',\n 'header.subtitle': 'Ti guideremo attraverso alcuni rapidi passaggi',\n 'steps.setupAuthentication.title': \"Impostazione dell'autenticazione\",\n 'steps.setupAuthentication.description':\n \"Impostazione di credenziali di accesso sicure per proteggere l'account da accessi non autorizzati.\",\n 'steps.setupAuthentication.ctaTitle': 'Per saperne di più',\n 'steps.configureRbac.title': 'Configurazione di RBAC',\n 'steps.configureRbac.description':\n 'Assegnare ruoli e autorizzazioni per controllare chi può visualizzare, creare o modificare le risorse, per garantire una collaborazione sicura ed efficiente.',\n 'steps.configureRbac.ctaTitle': \"Gestisci l'accesso\",\n 'steps.configureGit.title': 'Configurazione di Git',\n 'steps.configureGit.description':\n 'Collegare i provider Git, come GitHub, per gestire il codice, automatizzare i flussi di lavoro e integrare le funzionalità della piattaforma.',\n 'steps.configureGit.ctaTitle': 'Per saperne di più',\n 'steps.managePlugins.title': 'Gestione dei plugin',\n 'steps.managePlugins.description':\n \"Sfogliare e installare le estensioni per aggiungere funzionalità, connettersi a strumenti esterni e personalizzare l'esperienza utente.\",\n 'steps.managePlugins.ctaTitle': 'Esplora i plugin',\n 'steps.importApplication.title': \"Importare l'applicazione\",\n 'steps.importApplication.description':\n 'Importare il codice e i servizi esistenti nel catalogo per organizzarli e accedervi tramite il portale per sviluppatori.',\n 'steps.importApplication.ctaTitle': 'Importa',\n 'steps.learnAboutCatalog.title': 'Analisi del catalogo',\n 'steps.learnAboutCatalog.description':\n 'Scoprire tutti i componenti software, i servizi e le API e visualizzarne proprietari e documentazione.',\n 'steps.learnAboutCatalog.ctaTitle': 'Visualizza catalogo',\n 'steps.exploreSelfServiceTemplates.title':\n 'Esplorare i modelli self-service',\n 'steps.exploreSelfServiceTemplates.description':\n 'Utilizzare i nostri modelli self-service per configurare rapidamente nuovi progetti, servizi o documentazione.',\n 'steps.exploreSelfServiceTemplates.ctaTitle': 'Esplora i modelli',\n 'steps.findAllLearningPaths.title':\n 'Individuare tutti i percorsi di apprendimento',\n 'steps.findAllLearningPaths.description':\n \"Integrare l'e-learning personalizzato nei flussi di lavoro con i percorsi di apprendimento per accelerare l'onboarding, colmare le lacune di competenze e promuovere le best practice.\",\n 'steps.findAllLearningPaths.ctaTitle':\n 'Visualizzare i percorsi di apprendimento',\n 'button.quickstart': 'Avvio rapido',\n 'button.openQuickstartGuide': \"Apri la Guida all'avvio rapido\",\n 'button.closeDrawer': 'Chiudi riquadro',\n 'button.gotIt': 'Ho capito!',\n 'footer.progress': '{{progress}}% di avanzamento',\n 'footer.notStarted': 'Non iniziato',\n 'footer.hide': 'Nascondi',\n 'content.emptyState.title':\n 'Contenuto di avvio rapido non disponibile per il ruolo utente.',\n 'item.expandAriaLabel': 'Espandi i dettagli di {{title}}',\n 'item.collapseAriaLabel': 'Comprimi i dettagli di {{title}}',\n 'item.expandButtonAriaLabel': 'Espandi elemento',\n 'item.collapseButtonAriaLabel': 'Comprimi elemento',\n 'dev.pageTitle': 'Pagina di prova del plugin di avvio rapido',\n 'dev.pageDescription':\n 'Questa è una pagina di prova per il plugin di avvio rapido. Utilizzare i pulsanti sottostanti per interagire con il riquadro di avvio rapido.',\n 'dev.drawerControls': 'Comandi del riquadro',\n 'dev.currentState': 'Stato attuale del riquadro: {{state}}',\n 'dev.stateOpen': 'Aperto',\n 'dev.stateClosed': 'Chiuso',\n 'dev.instructions': 'Istruzioni',\n 'dev.step1':\n '1. Fare clic su \"Apri la Guida all\\'avvio rapido\" per aprire il riquadro',\n 'dev.step2': '2. Navigare tra i passaggi di avvio rapido',\n 'dev.step3':\n '3. Testare il monitoraggio dei progressi completando i passaggi',\n 'dev.step4':\n '4. È possibile chiudere il riquadro utilizzando il pulsante di chiusura o i comandi del riquadro stesso',\n 'dev.step5':\n '5. I progressi vengono salvati automaticamente su localStorage',\n },\n});\n\nexport default quickstartTranslationIt;\n"],"names":[],"mappings":";;;AAuBA,MAAM,0BAA0B,yBAA0B,CAAA;AAAA,EACxD,GAAK,EAAA,wBAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,cAAgB,EAAA,kDAAA;AAAA,IAChB,iBAAmB,EAAA,gDAAA;AAAA,IACnB,iCAAmC,EAAA,kCAAA;AAAA,IACnC,uCACE,EAAA,oGAAA;AAAA,IACF,oCAAsC,EAAA,uBAAA;AAAA,IACtC,2BAA6B,EAAA,wBAAA;AAAA,IAC7B,iCACE,EAAA,kKAAA;AAAA,IACF,8BAAgC,EAAA,oBAAA;AAAA,IAChC,0BAA4B,EAAA,uBAAA;AAAA,IAC5B,gCACE,EAAA,kJAAA;AAAA,IACF,6BAA+B,EAAA,uBAAA;AAAA,IAC/B,2BAA6B,EAAA,qBAAA;AAAA,IAC7B,iCACE,EAAA,4IAAA;AAAA,IACF,8BAAgC,EAAA,kBAAA;AAAA,IAChC,+BAAiC,EAAA,0BAAA;AAAA,IACjC,qCACE,EAAA,0HAAA;AAAA,IACF,kCAAoC,EAAA,SAAA;AAAA,IACpC,+BAAiC,EAAA,sBAAA;AAAA,IACjC,qCACE,EAAA,wGAAA;AAAA,IACF,kCAAoC,EAAA,qBAAA;AAAA,IACpC,yCACE,EAAA,kCAAA;AAAA,IACF,+CACE,EAAA,gHAAA;AAAA,IACF,4CAA8C,EAAA,mBAAA;AAAA,IAC9C,kCACE,EAAA,+CAAA;AAAA,IACF,wCACE,EAAA,wLAAA;AAAA,IACF,qCACE,EAAA,0CAAA;AAAA,IACF,mBAAqB,EAAA,cAAA;AAAA,IACrB,4BAA8B,EAAA,gCAAA;AAAA,IAC9B,oBAAsB,EAAA,iBAAA;AAAA,IACtB,cAAgB,EAAA,YAAA;AAAA,IAChB,iBAAmB,EAAA,8BAAA;AAAA,IACnB,mBAAqB,EAAA,cAAA;AAAA,IACrB,aAAe,EAAA,UAAA;AAAA,IACf,0BACE,EAAA,gEAAA;AAAA,IACF,sBAAwB,EAAA,iCAAA;AAAA,IACxB,wBAA0B,EAAA,kCAAA;AAAA,IAC1B,4BAA8B,EAAA,kBAAA;AAAA,IAC9B,8BAAgC,EAAA,mBAAA;AAAA,IAChC,eAAiB,EAAA,4CAAA;AAAA,IACjB,qBACE,EAAA,kJAAA;AAAA,IACF,oBAAsB,EAAA,sBAAA;AAAA,IACtB,kBAAoB,EAAA,uCAAA;AAAA,IACpB,eAAiB,EAAA,QAAA;AAAA,IACjB,iBAAmB,EAAA,QAAA;AAAA,IACnB,kBAAoB,EAAA,YAAA;AAAA,IACpB,WACE,EAAA,CAAA,uEAAA,CAAA;AAAA,IACF,WAAa,EAAA,4CAAA;AAAA,IACb,WACE,EAAA,iEAAA;AAAA,IACF,WACE,EAAA,4GAAA;AAAA,IACF,WACE,EAAA;AAAA;AAEN,CAAC;;;;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
|
|
2
|
+
import { quickstartTranslationRef } from './ref.esm.js';
|
|
3
|
+
|
|
4
|
+
const quickstartTranslationJa = createTranslationMessages({
|
|
5
|
+
ref: quickstartTranslationRef,
|
|
6
|
+
messages: {
|
|
7
|
+
"header.title": "Developer Hub \u3092\u4F7F\u3044\u59CB\u3081\u307E\u3057\u3087\u3046",
|
|
8
|
+
"header.subtitle": "\u3044\u304F\u3064\u304B\u306E\u7C21\u5358\u306A\u30B9\u30C6\u30C3\u30D7\u3092\u3054\u6848\u5185\u3057\u307E\u3059",
|
|
9
|
+
"steps.setupAuthentication.title": "\u8A8D\u8A3C\u306E\u8A2D\u5B9A",
|
|
10
|
+
"steps.setupAuthentication.description": "\u4E0D\u6B63\u30A2\u30AF\u30BB\u30B9\u304B\u3089\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4FDD\u8B77\u3059\u308B\u305F\u3081\u306B\u3001\u30BB\u30AD\u30E5\u30A2\u306A\u30ED\u30B0\u30A4\u30F3\u8A8D\u8A3C\u60C5\u5831\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002",
|
|
11
|
+
"steps.setupAuthentication.ctaTitle": "\u8A73\u7D30",
|
|
12
|
+
"steps.configureRbac.title": "RBAC \u306E\u8A2D\u5B9A",
|
|
13
|
+
"steps.configureRbac.description": "\u30ED\u30FC\u30EB\u3068\u6A29\u9650\u3092\u5272\u308A\u5F53\u3066\u3066\u3001\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A\u3001\u4F5C\u6210\u3001\u307E\u305F\u306F\u7DE8\u96C6\u3067\u304D\u308B\u30E6\u30FC\u30B6\u30FC\u3092\u5236\u5FA1\u3057\u3001\u30BB\u30AD\u30E5\u30A2\u3067\u52B9\u7387\u7684\u306A\u30B3\u30E9\u30DC\u30EC\u30FC\u30B7\u30E7\u30F3\u3092\u5B9F\u73FE\u3067\u304D\u307E\u3059\u3002",
|
|
14
|
+
"steps.configureRbac.ctaTitle": "\u30A2\u30AF\u30BB\u30B9\u306E\u7BA1\u7406",
|
|
15
|
+
"steps.configureGit.title": "Git \u306E\u8A2D\u5B9A",
|
|
16
|
+
"steps.configureGit.description": "GitHub \u306A\u3069\u306E Git \u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u63A5\u7D9A\u3057\u3066\u3001\u30B3\u30FC\u30C9\u306E\u7BA1\u7406\u3001\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u306E\u81EA\u52D5\u5316\u3001\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u6A5F\u80FD\u3068\u306E\u7D71\u5408\u3092\u884C\u3044\u307E\u3059\u3002",
|
|
17
|
+
"steps.configureGit.ctaTitle": "\u8A73\u7D30",
|
|
18
|
+
"steps.managePlugins.title": "\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u7BA1\u7406",
|
|
19
|
+
"steps.managePlugins.description": "\u62E1\u5F35\u6A5F\u80FD\u3092\u95B2\u89A7\u3057\u3066\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3001\u6A5F\u80FD\u3092\u8FFD\u52A0\u3057\u305F\u308A\u3001\u5916\u90E8\u30C4\u30FC\u30EB\u3068\u63A5\u7D9A\u3057\u305F\u308A\u3001\u30A8\u30AF\u30B9\u30DA\u30EA\u30A8\u30F3\u30B9\u3092\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3057\u305F\u308A\u3067\u304D\u307E\u3059\u3002",
|
|
20
|
+
"steps.managePlugins.ctaTitle": "\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u63A2\u7D22",
|
|
21
|
+
"steps.importApplication.title": "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30A4\u30F3\u30DD\u30FC\u30C8",
|
|
22
|
+
"steps.importApplication.description": "\u65E2\u5B58\u306E\u30B3\u30FC\u30C9\u3084\u30B5\u30FC\u30D3\u30B9\u3092\u30AB\u30BF\u30ED\u30B0\u306B\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u3066\u6574\u7406\u3057\u3001\u958B\u767A\u8005\u30DD\u30FC\u30BF\u30EB\u304B\u3089\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u3059\u3002",
|
|
23
|
+
"steps.importApplication.ctaTitle": "\u30A4\u30F3\u30DD\u30FC\u30C8",
|
|
24
|
+
"steps.learnAboutCatalog.title": "\u30AB\u30BF\u30ED\u30B0\u306B\u3064\u3044\u3066\u5B66\u3076",
|
|
25
|
+
"steps.learnAboutCatalog.description": "\u3059\u3079\u3066\u306E\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3001\u30B5\u30FC\u30D3\u30B9\u3001API \u3092\u63A2\u7D22\u3057\u3001\u305D\u306E\u6240\u6709\u8005\u3084\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
|
|
26
|
+
"steps.learnAboutCatalog.ctaTitle": "\u30AB\u30BF\u30ED\u30B0\u306E\u8868\u793A",
|
|
27
|
+
"steps.exploreSelfServiceTemplates.title": "\u30BB\u30EB\u30D5\u30B5\u30FC\u30D3\u30B9\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u63A2\u7D22\u3059\u308B",
|
|
28
|
+
"steps.exploreSelfServiceTemplates.description": "\u30BB\u30EB\u30D5\u30B5\u30FC\u30D3\u30B9\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u4F7F\u7528\u3057\u3066\u3001\u65B0\u3057\u3044\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3001\u30B5\u30FC\u30D3\u30B9\u3001\u307E\u305F\u306F\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u3059\u3070\u3084\u304F\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002",
|
|
29
|
+
"steps.exploreSelfServiceTemplates.ctaTitle": "\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u63A2\u7D22",
|
|
30
|
+
"steps.findAllLearningPaths.title": "\u3059\u3079\u3066\u306E\u30E9\u30FC\u30CB\u30F3\u30B0\u30D1\u30B9\u3092\u898B\u308B",
|
|
31
|
+
"steps.findAllLearningPaths.description": "\u30E9\u30FC\u30CB\u30F3\u30B0\u30D1\u30B9\u3092\u5229\u7528\u3057\u3066\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3057\u305F e \u30E9\u30FC\u30CB\u30F3\u30B0\u3092\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u306B\u7D71\u5408\u3057\u3001\u30AA\u30F3\u30DC\u30FC\u30C7\u30A3\u30F3\u30B0\u306E\u52A0\u901F\u3001\u30B9\u30AD\u30EB\u30AE\u30E3\u30C3\u30D7\u306E\u89E3\u6D88\u3001\u30D9\u30B9\u30C8\u30D7\u30E9\u30AF\u30C6\u30A3\u30B9\u306E\u6D78\u900F\u3092\u5B9F\u73FE\u3067\u304D\u307E\u3059\u3002",
|
|
32
|
+
"steps.findAllLearningPaths.ctaTitle": "\u30E9\u30FC\u30CB\u30F3\u30B0\u30D1\u30B9\u306E\u8868\u793A",
|
|
33
|
+
"button.quickstart": "\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8",
|
|
34
|
+
"button.openQuickstartGuide": "\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u30AC\u30A4\u30C9\u3092\u958B\u304F",
|
|
35
|
+
"button.closeDrawer": "\u30C9\u30ED\u30EF\u30FC\u3092\u9589\u3058\u308B",
|
|
36
|
+
"button.gotIt": "\u4E86\u89E3\u3057\u307E\u3057\u305F!",
|
|
37
|
+
"footer.progress": "\u9032\u6357 {{progress}}%",
|
|
38
|
+
"footer.notStarted": "\u958B\u59CB\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
|
|
39
|
+
"footer.hide": "\u975E\u8868\u793A",
|
|
40
|
+
"content.emptyState.title": "\u73FE\u5728\u306E\u30ED\u30FC\u30EB\u3067\u306F\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002",
|
|
41
|
+
"item.expandAriaLabel": "{{title}} \u306E\u8A73\u7D30\u3092\u5C55\u958B",
|
|
42
|
+
"item.collapseAriaLabel": "{{title}} \u306E\u8A73\u7D30\u3092\u6298\u308A\u305F\u305F\u3080",
|
|
43
|
+
"item.expandButtonAriaLabel": "\u9805\u76EE\u3092\u5C55\u958B",
|
|
44
|
+
"item.collapseButtonAriaLabel": "\u9805\u76EE\u3092\u6298\u308A\u305F\u305F\u3080",
|
|
45
|
+
"dev.pageTitle": "\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30C6\u30B9\u30C8\u30DA\u30FC\u30B8",
|
|
46
|
+
"dev.pageDescription": "\u3053\u308C\u306F\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30C6\u30B9\u30C8\u30DA\u30FC\u30B8\u3067\u3059\u3002\u4EE5\u4E0B\u306E\u30DC\u30BF\u30F3\u3092\u4F7F\u7528\u3057\u3001\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u30C9\u30ED\u30EF\u30FC\u3092\u64CD\u4F5C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
47
|
+
"dev.drawerControls": "\u30C9\u30ED\u30EF\u30FC\u306E\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB",
|
|
48
|
+
"dev.currentState": "\u73FE\u5728\u306E\u30C9\u30ED\u30EF\u30FC\u306E\u72B6\u614B: {{state}}",
|
|
49
|
+
"dev.stateOpen": "\u958B",
|
|
50
|
+
"dev.stateClosed": "\u9589",
|
|
51
|
+
"dev.instructions": "\u624B\u9806",
|
|
52
|
+
"dev.step1": '1."\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u30AC\u30A4\u30C9\u3092\u958B\u304F" \u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C9\u30ED\u30EF\u30FC\u3092\u958B\u304D\u307E\u3059',
|
|
53
|
+
"dev.step2": "2.\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u306E\u30B9\u30C6\u30C3\u30D7\u3092\u9806\u306B\u9032\u3081\u307E\u3059",
|
|
54
|
+
"dev.step3": "3.\u30B9\u30C6\u30C3\u30D7\u3092\u5B8C\u4E86\u3057\u3066\u9032\u6357\u306E\u8FFD\u8DE1\u3092\u30C6\u30B9\u30C8\u3057\u307E\u3059",
|
|
55
|
+
"dev.step4": "4.\u9589\u3058\u308B\u30DC\u30BF\u30F3\u307E\u305F\u306F\u30C9\u30ED\u30EF\u30FC\u81EA\u4F53\u306E\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066\u3001\u30C9\u30ED\u30EF\u30FC\u3092\u9589\u3058\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059",
|
|
56
|
+
"dev.step5": "5.\u9032\u6357\u304C\u81EA\u52D5\u7684\u306B localStorage \u306B\u4FDD\u5B58\u3055\u308C\u307E\u3059"
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
export { quickstartTranslationJa as default };
|
|
61
|
+
//# sourceMappingURL=ja.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ja.esm.js","sources":["../../src/translations/ja.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { quickstartTranslationRef } from './ref';\n\n/**\n * Japanese translation for plugin.quickstart.\n * @public\n */\nconst quickstartTranslationJa = createTranslationMessages({\n ref: quickstartTranslationRef,\n messages: {\n 'header.title': 'Developer Hub を使い始めましょう',\n 'header.subtitle': 'いくつかの簡単なステップをご案内します',\n 'steps.setupAuthentication.title': '認証の設定',\n 'steps.setupAuthentication.description':\n '不正アクセスからアカウントを保護するために、セキュアなログイン認証情報を設定します。',\n 'steps.setupAuthentication.ctaTitle': '詳細',\n 'steps.configureRbac.title': 'RBAC の設定',\n 'steps.configureRbac.description':\n 'ロールと権限を割り当てて、リソースを表示、作成、または編集できるユーザーを制御し、セキュアで効率的なコラボレーションを実現できます。',\n 'steps.configureRbac.ctaTitle': 'アクセスの管理',\n 'steps.configureGit.title': 'Git の設定',\n 'steps.configureGit.description':\n 'GitHub などの Git プロバイダーを接続して、コードの管理、ワークフローの自動化、プラットフォーム機能との統合を行います。',\n 'steps.configureGit.ctaTitle': '詳細',\n 'steps.managePlugins.title': 'プラグインの管理',\n 'steps.managePlugins.description':\n '拡張機能を閲覧してインストールし、機能を追加したり、外部ツールと接続したり、エクスペリエンスをカスタマイズしたりできます。',\n 'steps.managePlugins.ctaTitle': 'プラグインの探索',\n 'steps.importApplication.title': 'アプリケーションのインポート',\n 'steps.importApplication.description':\n '既存のコードやサービスをカタログにインポートして整理し、開発者ポータルからアクセスできます。',\n 'steps.importApplication.ctaTitle': 'インポート',\n 'steps.learnAboutCatalog.title': 'カタログについて学ぶ',\n 'steps.learnAboutCatalog.description':\n 'すべてのソフトウェアコンポーネント、サービス、API を探索し、その所有者やドキュメントを確認できます。',\n 'steps.learnAboutCatalog.ctaTitle': 'カタログの表示',\n 'steps.exploreSelfServiceTemplates.title':\n 'セルフサービステンプレートを探索する',\n 'steps.exploreSelfServiceTemplates.description':\n 'セルフサービステンプレートを使用して、新しいプロジェクト、サービス、またはドキュメントをすばやく設定できます。',\n 'steps.exploreSelfServiceTemplates.ctaTitle': 'テンプレートの探索',\n 'steps.findAllLearningPaths.title': 'すべてのラーニングパスを見る',\n 'steps.findAllLearningPaths.description':\n 'ラーニングパスを利用してカスタマイズした e ラーニングをワークフローに統合し、オンボーディングの加速、スキルギャップの解消、ベストプラクティスの浸透を実現できます。',\n 'steps.findAllLearningPaths.ctaTitle': 'ラーニングパスの表示',\n 'button.quickstart': 'クイックスタート',\n 'button.openQuickstartGuide': 'クイックスタートガイドを開く',\n 'button.closeDrawer': 'ドロワーを閉じる',\n 'button.gotIt': '了解しました!',\n 'footer.progress': '進捗 {{progress}}%',\n 'footer.notStarted': '開始されていません',\n 'footer.hide': '非表示',\n 'content.emptyState.title':\n '現在のロールではクイックスタートコンテンツを利用できません。',\n 'item.expandAriaLabel': '{{title}} の詳細を展開',\n 'item.collapseAriaLabel': '{{title}} の詳細を折りたたむ',\n 'item.expandButtonAriaLabel': '項目を展開',\n 'item.collapseButtonAriaLabel': '項目を折りたたむ',\n 'dev.pageTitle': 'クイックスタートプラグインのテストページ',\n 'dev.pageDescription':\n 'これはクイックスタートプラグインのテストページです。以下のボタンを使用し、クイックスタートドロワーを操作してください。',\n 'dev.drawerControls': 'ドロワーのコントロール',\n 'dev.currentState': '現在のドロワーの状態: {{state}}',\n 'dev.stateOpen': '開',\n 'dev.stateClosed': '閉',\n 'dev.instructions': '手順',\n 'dev.step1':\n '1.\"クイックスタートガイドを開く\" をクリックしてドロワーを開きます',\n 'dev.step2': '2.クイックスタートのステップを順に進めます',\n 'dev.step3': '3.ステップを完了して進捗の追跡をテストします',\n 'dev.step4':\n '4.閉じるボタンまたはドロワー自体のコントロールを使用して、ドロワーを閉じることができます',\n 'dev.step5': '5.進捗が自動的に localStorage に保存されます',\n },\n});\n\nexport default quickstartTranslationJa;\n"],"names":[],"mappings":";;;AAuBA,MAAM,0BAA0B,yBAA0B,CAAA;AAAA,EACxD,GAAK,EAAA,wBAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,cAAgB,EAAA,sEAAA;AAAA,IAChB,iBAAmB,EAAA,oHAAA;AAAA,IACnB,iCAAmC,EAAA,gCAAA;AAAA,IACnC,uCACE,EAAA,8PAAA;AAAA,IACF,oCAAsC,EAAA,cAAA;AAAA,IACtC,2BAA6B,EAAA,yBAAA;AAAA,IAC7B,iCACE,EAAA,8YAAA;AAAA,IACF,8BAAgC,EAAA,4CAAA;AAAA,IAChC,0BAA4B,EAAA,wBAAA;AAAA,IAC5B,gCACE,EAAA,4UAAA;AAAA,IACF,6BAA+B,EAAA,cAAA;AAAA,IAC/B,2BAA6B,EAAA,kDAAA;AAAA,IAC7B,iCACE,EAAA,gXAAA;AAAA,IACF,8BAAgC,EAAA,kDAAA;AAAA,IAChC,+BAAiC,EAAA,sFAAA;AAAA,IACjC,qCACE,EAAA,sRAAA;AAAA,IACF,kCAAoC,EAAA,gCAAA;AAAA,IACpC,+BAAiC,EAAA,8DAAA;AAAA,IACjC,qCACE,EAAA,sSAAA;AAAA,IACF,kCAAoC,EAAA,4CAAA;AAAA,IACpC,yCACE,EAAA,8GAAA;AAAA,IACF,+CACE,EAAA,4UAAA;AAAA,IACF,4CAA8C,EAAA,wDAAA;AAAA,IAC9C,kCAAoC,EAAA,sFAAA;AAAA,IACpC,wCACE,EAAA,qeAAA;AAAA,IACF,qCAAuC,EAAA,8DAAA;AAAA,IACvC,mBAAqB,EAAA,kDAAA;AAAA,IACrB,4BAA8B,EAAA,sFAAA;AAAA,IAC9B,oBAAsB,EAAA,kDAAA;AAAA,IACtB,cAAgB,EAAA,uCAAA;AAAA,IAChB,iBAAmB,EAAA,4BAAA;AAAA,IACnB,mBAAqB,EAAA,wDAAA;AAAA,IACrB,aAAe,EAAA,oBAAA;AAAA,IACf,0BACE,EAAA,sLAAA;AAAA,IACF,sBAAwB,EAAA,gDAAA;AAAA,IACxB,wBAA0B,EAAA,kEAAA;AAAA,IAC1B,4BAA8B,EAAA,gCAAA;AAAA,IAC9B,8BAAgC,EAAA,kDAAA;AAAA,IAChC,eAAiB,EAAA,0HAAA;AAAA,IACjB,qBACE,EAAA,oWAAA;AAAA,IACF,oBAAsB,EAAA,oEAAA;AAAA,IACtB,kBAAoB,EAAA,yEAAA;AAAA,IACpB,eAAiB,EAAA,QAAA;AAAA,IACjB,iBAAmB,EAAA,QAAA;AAAA,IACnB,kBAAoB,EAAA,cAAA;AAAA,IACpB,WACE,EAAA,2LAAA;AAAA,IACF,WAAa,EAAA,4HAAA;AAAA,IACb,WAAa,EAAA,kIAAA;AAAA,IACb,WACE,EAAA,sQAAA;AAAA,IACF,WAAa,EAAA;AAAA;AAEjB,CAAC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-quickstart",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.esm.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@backstage/theme": "^0.7.0",
|
|
38
38
|
"@mui/icons-material": "5.18.0",
|
|
39
39
|
"@mui/material": "5.18.0",
|
|
40
|
-
"@red-hat-developer-hub/backstage-plugin-theme": "^0.
|
|
40
|
+
"@red-hat-developer-hub/backstage-plugin-theme": "^0.12.0",
|
|
41
41
|
"react-use": "^17.6.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import Drawer from '@mui/material/Drawer';
|
|
3
|
-
import { useApiHolder, configApiRef } from '@backstage/core-plugin-api';
|
|
4
|
-
import { Quickstart } from './Quickstart.esm.js';
|
|
5
|
-
import { useQuickstartDrawerContext } from '../hooks/useQuickstartDrawerContext.esm.js';
|
|
6
|
-
import { filterQuickstartItemsByRole } from '../utils/filterQuickstartItems.esm.js';
|
|
7
|
-
import { useMemo } from 'react';
|
|
8
|
-
|
|
9
|
-
const QuickstartDrawer = () => {
|
|
10
|
-
const { isDrawerOpen, closeDrawer, drawerWidth, userRole, roleLoading } = useQuickstartDrawerContext();
|
|
11
|
-
const apiHolder = useApiHolder();
|
|
12
|
-
const config = apiHolder.get(configApiRef);
|
|
13
|
-
const quickstartItems = useMemo(() => {
|
|
14
|
-
return config?.has("app.quickstart") ? config.get("app.quickstart") : [];
|
|
15
|
-
}, [config]);
|
|
16
|
-
const eligibleItems = useMemo(() => {
|
|
17
|
-
return !roleLoading && userRole ? filterQuickstartItemsByRole(quickstartItems, userRole) : [];
|
|
18
|
-
}, [roleLoading, userRole, quickstartItems]);
|
|
19
|
-
const filteredItems = useMemo(() => {
|
|
20
|
-
return isDrawerOpen ? eligibleItems : [];
|
|
21
|
-
}, [isDrawerOpen, eligibleItems]);
|
|
22
|
-
if (quickstartItems.length === 0) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
if (!roleLoading && eligibleItems.length === 0) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
return /* @__PURE__ */ jsx(
|
|
29
|
-
Drawer,
|
|
30
|
-
{
|
|
31
|
-
sx: {
|
|
32
|
-
"& .v5-MuiDrawer-paper": {
|
|
33
|
-
width: drawerWidth,
|
|
34
|
-
boxSizing: "border-box",
|
|
35
|
-
backgroundColor: (theme) => `${theme.palette?.rhdh?.general.sidebarBackgroundColor}`,
|
|
36
|
-
justifyContent: "space-between"
|
|
37
|
-
},
|
|
38
|
-
// Only apply header offset when global header exists
|
|
39
|
-
"body:has(#global-header) &": {
|
|
40
|
-
"& .v5-MuiDrawer-paper": {
|
|
41
|
-
top: "64px !important",
|
|
42
|
-
height: "calc(100vh - 64px) !important"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
variant: "persistent",
|
|
47
|
-
anchor: "right",
|
|
48
|
-
open: isDrawerOpen,
|
|
49
|
-
children: /* @__PURE__ */ jsx(
|
|
50
|
-
Quickstart,
|
|
51
|
-
{
|
|
52
|
-
quickstartItems: filteredItems,
|
|
53
|
-
handleDrawerClose: closeDrawer,
|
|
54
|
-
isLoading: roleLoading
|
|
55
|
-
}
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
);
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export { QuickstartDrawer };
|
|
62
|
-
//# sourceMappingURL=QuickstartDrawer.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QuickstartDrawer.esm.js","sources":["../../src/components/QuickstartDrawer.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Drawer from '@mui/material/Drawer';\nimport { ThemeConfig } from '@red-hat-developer-hub/backstage-plugin-theme';\nimport { configApiRef, useApiHolder } from '@backstage/core-plugin-api';\nimport { Quickstart } from './Quickstart';\nimport { useQuickstartDrawerContext } from '../hooks/useQuickstartDrawerContext';\nimport { QuickstartItemData } from '../types';\nimport { filterQuickstartItemsByRole } from '../utils';\n// Role is now provided through context to avoid re-fetching on drawer open/close\nimport { useMemo } from 'react';\n\nexport const QuickstartDrawer = () => {\n const { isDrawerOpen, closeDrawer, drawerWidth, userRole, roleLoading } =\n useQuickstartDrawerContext();\n\n const apiHolder = useApiHolder();\n const config = apiHolder.get(configApiRef);\n const quickstartItems: QuickstartItemData[] = useMemo(() => {\n return config?.has('app.quickstart')\n ? (config.get('app.quickstart') as QuickstartItemData[])\n : [];\n }, [config]);\n\n // Items available to the user based on role from context\n const eligibleItems = useMemo(() => {\n return !roleLoading && userRole\n ? filterQuickstartItemsByRole(quickstartItems, userRole)\n : [];\n }, [roleLoading, userRole, quickstartItems]);\n\n // Only expose items to the body when drawer is open to avoid re-renders during close\n const filteredItems = useMemo(() => {\n return isDrawerOpen ? eligibleItems : [];\n }, [isDrawerOpen, eligibleItems]);\n\n // No auto-open logic here; the provider initializes per user (visited/open)\n\n // If no quickstart items are configured at all, don't render the drawer to avoid reserving space\n if (quickstartItems.length === 0) {\n return null;\n }\n\n // If there are no items for the user, hide the drawer entirely\n if (!roleLoading && eligibleItems.length === 0) {\n return null;\n }\n\n // No role-fetching or filtering here when the drawer is closed\n\n return (\n <Drawer\n sx={{\n '& .v5-MuiDrawer-paper': {\n width: drawerWidth,\n boxSizing: 'border-box',\n backgroundColor: theme =>\n `${\n (theme as ThemeConfig).palette?.rhdh?.general\n .sidebarBackgroundColor\n }`,\n justifyContent: 'space-between',\n },\n // Only apply header offset when global header exists\n 'body:has(#global-header) &': {\n '& .v5-MuiDrawer-paper': {\n top: '64px !important',\n height: 'calc(100vh - 64px) !important',\n },\n },\n }}\n variant=\"persistent\"\n anchor=\"right\"\n open={isDrawerOpen}\n >\n <Quickstart\n quickstartItems={filteredItems}\n handleDrawerClose={closeDrawer}\n isLoading={roleLoading}\n />\n </Drawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AA0BO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,EAAE,YAAc,EAAA,WAAA,EAAa,aAAa,QAAU,EAAA,WAAA,KACxD,0BAA2B,EAAA;AAE7B,EAAA,MAAM,YAAY,YAAa,EAAA;AAC/B,EAAM,MAAA,MAAA,GAAS,SAAU,CAAA,GAAA,CAAI,YAAY,CAAA;AACzC,EAAM,MAAA,eAAA,GAAwC,QAAQ,MAAM;AAC1D,IAAO,OAAA,MAAA,EAAQ,IAAI,gBAAgB,CAAA,GAC9B,OAAO,GAAI,CAAA,gBAAgB,IAC5B,EAAC;AAAA,GACP,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO,CAAC,WAAe,IAAA,QAAA,GACnB,4BAA4B,eAAiB,EAAA,QAAQ,IACrD,EAAC;AAAA,GACJ,EAAA,CAAC,WAAa,EAAA,QAAA,EAAU,eAAe,CAAC,CAAA;AAG3C,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAO,OAAA,YAAA,GAAe,gBAAgB,EAAC;AAAA,GACtC,EAAA,CAAC,YAAc,EAAA,aAAa,CAAC,CAAA;AAKhC,EAAI,IAAA,eAAA,CAAgB,WAAW,CAAG,EAAA;AAChC,IAAO,OAAA,IAAA;AAAA;AAIT,EAAA,IAAI,CAAC,WAAA,IAAe,aAAc,CAAA,MAAA,KAAW,CAAG,EAAA;AAC9C,IAAO,OAAA,IAAA;AAAA;AAKT,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,uBAAyB,EAAA;AAAA,UACvB,KAAO,EAAA,WAAA;AAAA,UACP,SAAW,EAAA,YAAA;AAAA,UACX,iBAAiB,CACf,KAAA,KAAA,CAAA,EACG,MAAsB,OAAS,EAAA,IAAA,EAAM,QACnC,sBACL,CAAA,CAAA;AAAA,UACF,cAAgB,EAAA;AAAA,SAClB;AAAA;AAAA,QAEA,4BAA8B,EAAA;AAAA,UAC5B,uBAAyB,EAAA;AAAA,YACvB,GAAK,EAAA,iBAAA;AAAA,YACL,MAAQ,EAAA;AAAA;AACV;AACF,OACF;AAAA,MACA,OAAQ,EAAA,YAAA;AAAA,MACR,MAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,YAAA;AAAA,MAEN,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,eAAiB,EAAA,aAAA;AAAA,UACjB,iBAAmB,EAAA,WAAA;AAAA,UACnB,SAAW,EAAA;AAAA;AAAA;AACb;AAAA,GACF;AAEJ;;;;"}
|