@backstage/plugin-devtools 0.1.43-next.1 → 0.1.43-next.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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @backstage/plugin-devtools
2
2
 
3
+ ## 0.1.43-next.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 38441ff: Migrate to toastApi from deprecated alertApi
8
+ - Updated dependencies
9
+ - @backstage/ui@0.18.0-next.2
10
+ - @backstage/core-components@0.18.14-next.2
11
+ - @backstage/core-plugin-api@1.12.10-next.1
12
+ - @backstage/frontend-plugin-api@0.18.1-next.1
13
+ - @backstage/plugin-permission-react@0.5.5-next.1
14
+ - @backstage/plugin-devtools-common@0.1.26-next.0
15
+
3
16
  ## 0.1.43-next.1
4
17
 
5
18
  ### Patch Changes
@@ -11,10 +11,11 @@ import { Progress, ErrorPanel, Table } from '@backstage/core-components';
11
11
  import Alert from '@material-ui/lab/Alert';
12
12
  import '../../../api/DevToolsApi.esm.js';
13
13
  import '@backstage/errors';
14
- import { useApi, configApiRef, alertApiRef } from '@backstage/core-plugin-api';
14
+ import { useApi, configApiRef } from '@backstage/core-plugin-api';
15
15
  import 'react-use/esm/useAsync';
16
16
  import { useScheduledTasks } from '../../../hooks/useScheduledTasks.esm.js';
17
17
  import { useScheduledTasksOperations } from '../../../hooks/useScheduledTasksOperations.esm.js';
18
+ import { devToolsTaskSchedulerCreatePermission } from '@backstage/plugin-devtools-common/alpha';
18
19
  import RefreshIcon from '@material-ui/icons/Refresh';
19
20
  import StopIcon from '@material-ui/icons/Stop';
20
21
  import NightsStay from '@material-ui/icons/NightsStay';
@@ -23,7 +24,7 @@ import BlockIcon from '@material-ui/icons/Block';
23
24
  import CircularProgress from '@material-ui/core/CircularProgress';
24
25
  import { ScheduledTaskDetailPanel } from './ScheduledTaskDetailedPanel.esm.js';
25
26
  import { RequirePermission } from '@backstage/plugin-permission-react';
26
- import { devToolsTaskSchedulerCreatePermission } from '@backstage/plugin-devtools-common/alpha';
27
+ import { toastApiRef } from '@backstage/frontend-plugin-api';
27
28
 
28
29
  const useStyles = makeStyles(
29
30
  (theme) => createStyles({
@@ -69,7 +70,7 @@ const CreateNotAllowed = () => /* @__PURE__ */ jsx(Tooltip, { title: "You are no
69
70
  const ScheduledTasksContent = () => {
70
71
  const classes = useStyles();
71
72
  const configApi = useApi(configApiRef);
72
- const alertApi = useApi(alertApiRef);
73
+ const toastApi = useApi(toastApiRef);
73
74
  const plugins = configApi.getOptionalStringArray("devTools.scheduledTasks.plugins") || [];
74
75
  const [selectedPlugin, setSelectedPlugin] = useState(plugins[0] || "");
75
76
  const { scheduledTasks, loading, error, refresh } = useScheduledTasks(selectedPlugin);
@@ -159,14 +160,14 @@ const ScheduledTasksContent = () => {
159
160
  onClick: async () => {
160
161
  try {
161
162
  await triggerTask(selectedPlugin, rowData.taskId);
162
- alertApi.post({
163
- message: `Successfully triggered task ${rowData.taskId}`,
164
- severity: "success"
163
+ toastApi.post({
164
+ title: `Successfully triggered task ${rowData.taskId}`,
165
+ status: "success"
165
166
  });
166
167
  } catch (e) {
167
- alertApi.post({
168
- message: `Error triggering task ${rowData.taskId}: ${e.message}`,
169
- severity: "error"
168
+ toastApi.post({
169
+ title: `Error triggering task ${rowData.taskId}: ${e.message}`,
170
+ status: "danger"
170
171
  });
171
172
  } finally {
172
173
  refresh();
@@ -183,14 +184,14 @@ const ScheduledTasksContent = () => {
183
184
  onClick: async () => {
184
185
  try {
185
186
  await cancelTask(selectedPlugin, rowData.taskId);
186
- alertApi.post({
187
- message: `Successfully cancelled task ${rowData.taskId}`,
188
- severity: "success"
187
+ toastApi.post({
188
+ title: `Successfully cancelled task ${rowData.taskId}`,
189
+ status: "success"
189
190
  });
190
191
  } catch (e) {
191
- alertApi.post({
192
- message: `Error cancelling task ${rowData.taskId}: ${e.message}`,
193
- severity: "error"
192
+ toastApi.post({
193
+ title: `Error cancelling task ${rowData.taskId}: ${e.message}`,
194
+ status: "danger"
194
195
  });
195
196
  } finally {
196
197
  refresh();
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledTasksContent.esm.js","sources":["../../../../src/components/Content/ScheduledTasksContent/ScheduledTasksContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\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 { useState } from 'react';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport {\n ErrorPanel,\n Progress,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport Alert from '@material-ui/lab/Alert';\nimport { useScheduledTasks, useScheduledTasksOperations } from '../../../hooks';\nimport { TaskApiTasksResponse } from '@backstage/plugin-devtools-common/alpha';\nimport { alertApiRef, configApiRef, useApi } from '@backstage/core-plugin-api';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport StopIcon from '@material-ui/icons/Stop';\nimport NightsStay from '@material-ui/icons/NightsStay';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport BlockIcon from '@material-ui/icons/Block';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { ScheduledTaskDetailPanel } from './ScheduledTaskDetailedPanel';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { devToolsTaskSchedulerCreatePermission } from '@backstage/plugin-devtools-common/alpha';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n paperStyle: {\n display: 'flex',\n marginBottom: theme.spacing(2),\n },\n flexContainer: {\n display: 'flex',\n flexDirection: 'row',\n padding: 0,\n },\n formControl: {\n minWidth: 240,\n marginBottom: theme.spacing(2),\n },\n detailPanel: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n },\n detailLabel: {\n fontWeight: 'bold',\n marginRight: theme.spacing(1),\n },\n errorIcon: {\n color: theme.palette.error.main,\n marginRight: theme.spacing(1),\n fontSize: '1.2rem',\n },\n detailPanelAlert: {\n marginBottom: theme.spacing(2),\n },\n }),\n);\n\nconst StatusDisplay = ({\n icon,\n text,\n}: {\n icon: React.ReactNode;\n text: string;\n}) => (\n <Box display=\"flex\" alignItems=\"center\">\n {icon}\n <Typography variant=\"body2\" style={{ marginLeft: 8 }}>\n {text}\n </Typography>\n </Box>\n);\n\nconst CreateNotAllowed = () => (\n <Tooltip title=\"You are not allowed to perform this action\">\n <BlockIcon color=\"disabled\" />\n </Tooltip>\n);\n\n/** @public */\nexport const ScheduledTasksContent = () => {\n const classes = useStyles();\n const configApi = useApi(configApiRef);\n const alertApi = useApi(alertApiRef);\n const plugins =\n configApi.getOptionalStringArray('devTools.scheduledTasks.plugins') || [];\n const [selectedPlugin, setSelectedPlugin] = useState(plugins[0] || '');\n const { scheduledTasks, loading, error, refresh } =\n useScheduledTasks(selectedPlugin);\n const { triggerTask, cancelTask, isLoading } = useScheduledTasksOperations();\n\n const [inputValue, setInputValue] = useState('');\n\n const handleAutocompleteChange = (_event: any, newValue: string | null) => {\n setSelectedPlugin(newValue || '');\n };\n\n const handleCommitChange = () => {\n if (inputValue !== selectedPlugin) {\n setSelectedPlugin(inputValue);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n handleCommitChange();\n // Prevent Autocomplete's default behavior (which might select a filtered item)\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n if (!plugins || plugins.length === 0) {\n return (\n <Alert severity=\"info\">\n No plugins configured for scheduled tasks. Please configure\n `devTools.scheduledTasks.plugins` in app-config.yaml.\n </Alert>\n );\n }\n\n const columns: TableColumn<TaskApiTasksResponse>[] = [\n {\n title: 'Task ID',\n field: 'taskId',\n width: '35%',\n render: (rowData: TaskApiTasksResponse) => {\n const errorIconStyle: React.CSSProperties = {\n color: '#f44336',\n marginRight: '8px',\n fontSize: '1.2rem',\n verticalAlign: 'middle',\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\">\n {rowData.taskState?.lastRunError && (\n <ErrorIcon style={errorIconStyle} />\n )}\n <Typography>{rowData.taskId}</Typography>\n </Box>\n );\n },\n },\n {\n title: 'Status',\n field: 'taskState.status',\n width: '15%',\n render: (rowData: TaskApiTasksResponse) => {\n const status = rowData.taskState?.status;\n\n if (status === 'idle') {\n return (\n <StatusDisplay icon={<NightsStay fontSize=\"small\" />} text=\"Idle\" />\n );\n }\n\n if (status === 'running') {\n return (\n <StatusDisplay\n icon={<CircularProgress color=\"inherit\" size=\"30px\" />}\n text=\"Running\"\n />\n );\n }\n\n return <Typography variant=\"body2\">{status || 'N/A'}</Typography>;\n },\n },\n {\n title: 'Last Run',\n field: 'taskState.lastRunEndedAt',\n width: '25%',\n render: (rowData: TaskApiTasksResponse) =>\n rowData.taskState?.lastRunEndedAt\n ? new Date(rowData.taskState.lastRunEndedAt).toLocaleString()\n : 'N/A',\n },\n {\n title: 'Next Run',\n width: '15%',\n render: (rowData: TaskApiTasksResponse) =>\n rowData.taskState?.status === 'idle' && rowData.taskState.startsAt\n ? new Date(rowData.taskState.startsAt).toLocaleString()\n : 'N/A',\n },\n {\n title: 'Actions',\n render: (rowData: TaskApiTasksResponse) => (\n <RequirePermission\n permission={devToolsTaskSchedulerCreatePermission}\n errorPage={<CreateNotAllowed />}\n >\n <Box display=\"flex\" justifyContent=\"center\">\n <Tooltip title=\"Run Task\">\n <IconButton\n aria-label=\"Trigger\"\n disabled={isLoading}\n onClick={async () => {\n try {\n await triggerTask(selectedPlugin, rowData.taskId);\n alertApi.post({\n message: `Successfully triggered task ${rowData.taskId}`,\n severity: 'success',\n });\n } catch (e) {\n alertApi.post({\n message: `Error triggering task ${rowData.taskId}: ${e.message}`,\n severity: 'error',\n });\n } finally {\n refresh();\n }\n }}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Cancel Task\">\n <IconButton\n aria-label=\"Cancel\"\n disabled={isLoading}\n onClick={async () => {\n try {\n await cancelTask(selectedPlugin, rowData.taskId);\n alertApi.post({\n message: `Successfully cancelled task ${rowData.taskId}`,\n severity: 'success',\n });\n } catch (e) {\n alertApi.post({\n message: `Error cancelling task ${rowData.taskId}: ${e.message}`,\n severity: 'error',\n });\n } finally {\n refresh();\n }\n }}\n >\n <StopIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </RequirePermission>\n ),\n sorting: false,\n width: '10%',\n align: 'center',\n },\n ];\n\n return (\n <Box>\n <Autocomplete\n className={classes.formControl}\n classes={{ root: classes.formControl }}\n freeSolo\n options={plugins}\n value={selectedPlugin}\n inputValue={inputValue}\n onChange={handleAutocompleteChange}\n onInputChange={(_event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Select Plugin\"\n variant=\"outlined\"\n onKeyDown={handleKeyDown}\n onBlur={handleCommitChange}\n />\n )}\n />\n\n {loading && !scheduledTasks && <Progress />}\n\n {error && (\n <ErrorPanel\n error={new Error(`No scheduled tasks found for \"${selectedPlugin}\"`)}\n title=\"No Scheduled Tasks Found\"\n >\n <Typography variant=\"body2\">\n The plugin ID \"{selectedPlugin}\" doesn't have any scheduled tasks or\n may contain a typo.\n </Typography>\n <Typography variant=\"body2\" style={{ marginTop: 8 }}>\n Please verify:\n </Typography>\n <ul>\n <li>\n <Typography variant=\"body2\">\n The plugin ID is spelled correctly\n </Typography>\n </li>\n <li>\n <Typography variant=\"body2\">\n The plugin has registered scheduled tasks\n </Typography>\n </li>\n </ul>\n </ErrorPanel>\n )}\n\n {scheduledTasks && (\n <Table\n title={`Scheduled Tasks (${selectedPlugin})`}\n options={{\n paging: true,\n search: true,\n sorting: true,\n searchFieldAlignment: 'right',\n padding: 'dense',\n }}\n columns={columns}\n data={scheduledTasks || []}\n emptyContent={\n <Alert severity=\"info\">\n No scheduled tasks found for {selectedPlugin}.\n </Alert>\n }\n detailPanel={({ rowData }) => {\n return <ScheduledTaskDetailPanel rowData={rowData} />;\n }}\n />\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScheduledTasksContent.esm.js","sources":["../../../../src/components/Content/ScheduledTasksContent/ScheduledTasksContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\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 { useState } from 'react';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport {\n ErrorPanel,\n Progress,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport Alert from '@material-ui/lab/Alert';\nimport { useScheduledTasks, useScheduledTasksOperations } from '../../../hooks';\nimport {\n devToolsTaskSchedulerCreatePermission,\n TaskApiTasksResponse,\n} from '@backstage/plugin-devtools-common/alpha';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport StopIcon from '@material-ui/icons/Stop';\nimport NightsStay from '@material-ui/icons/NightsStay';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport BlockIcon from '@material-ui/icons/Block';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { ScheduledTaskDetailPanel } from './ScheduledTaskDetailedPanel';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n paperStyle: {\n display: 'flex',\n marginBottom: theme.spacing(2),\n },\n flexContainer: {\n display: 'flex',\n flexDirection: 'row',\n padding: 0,\n },\n formControl: {\n minWidth: 240,\n marginBottom: theme.spacing(2),\n },\n detailPanel: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n },\n detailLabel: {\n fontWeight: 'bold',\n marginRight: theme.spacing(1),\n },\n errorIcon: {\n color: theme.palette.error.main,\n marginRight: theme.spacing(1),\n fontSize: '1.2rem',\n },\n detailPanelAlert: {\n marginBottom: theme.spacing(2),\n },\n }),\n);\n\nconst StatusDisplay = ({\n icon,\n text,\n}: {\n icon: React.ReactNode;\n text: string;\n}) => (\n <Box display=\"flex\" alignItems=\"center\">\n {icon}\n <Typography variant=\"body2\" style={{ marginLeft: 8 }}>\n {text}\n </Typography>\n </Box>\n);\n\nconst CreateNotAllowed = () => (\n <Tooltip title=\"You are not allowed to perform this action\">\n <BlockIcon color=\"disabled\" />\n </Tooltip>\n);\n\n/** @public */\nexport const ScheduledTasksContent = () => {\n const classes = useStyles();\n const configApi = useApi(configApiRef);\n const toastApi = useApi(toastApiRef);\n const plugins =\n configApi.getOptionalStringArray('devTools.scheduledTasks.plugins') || [];\n const [selectedPlugin, setSelectedPlugin] = useState(plugins[0] || '');\n const { scheduledTasks, loading, error, refresh } =\n useScheduledTasks(selectedPlugin);\n const { triggerTask, cancelTask, isLoading } = useScheduledTasksOperations();\n\n const [inputValue, setInputValue] = useState('');\n\n const handleAutocompleteChange = (_event: any, newValue: string | null) => {\n setSelectedPlugin(newValue || '');\n };\n\n const handleCommitChange = () => {\n if (inputValue !== selectedPlugin) {\n setSelectedPlugin(inputValue);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n handleCommitChange();\n // Prevent Autocomplete's default behavior (which might select a filtered item)\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n if (!plugins || plugins.length === 0) {\n return (\n <Alert severity=\"info\">\n No plugins configured for scheduled tasks. Please configure\n `devTools.scheduledTasks.plugins` in app-config.yaml.\n </Alert>\n );\n }\n\n const columns: TableColumn<TaskApiTasksResponse>[] = [\n {\n title: 'Task ID',\n field: 'taskId',\n width: '35%',\n render: (rowData: TaskApiTasksResponse) => {\n const errorIconStyle: React.CSSProperties = {\n color: '#f44336',\n marginRight: '8px',\n fontSize: '1.2rem',\n verticalAlign: 'middle',\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\">\n {rowData.taskState?.lastRunError && (\n <ErrorIcon style={errorIconStyle} />\n )}\n <Typography>{rowData.taskId}</Typography>\n </Box>\n );\n },\n },\n {\n title: 'Status',\n field: 'taskState.status',\n width: '15%',\n render: (rowData: TaskApiTasksResponse) => {\n const status = rowData.taskState?.status;\n\n if (status === 'idle') {\n return (\n <StatusDisplay icon={<NightsStay fontSize=\"small\" />} text=\"Idle\" />\n );\n }\n\n if (status === 'running') {\n return (\n <StatusDisplay\n icon={<CircularProgress color=\"inherit\" size=\"30px\" />}\n text=\"Running\"\n />\n );\n }\n\n return <Typography variant=\"body2\">{status || 'N/A'}</Typography>;\n },\n },\n {\n title: 'Last Run',\n field: 'taskState.lastRunEndedAt',\n width: '25%',\n render: (rowData: TaskApiTasksResponse) =>\n rowData.taskState?.lastRunEndedAt\n ? new Date(rowData.taskState.lastRunEndedAt).toLocaleString()\n : 'N/A',\n },\n {\n title: 'Next Run',\n width: '15%',\n render: (rowData: TaskApiTasksResponse) =>\n rowData.taskState?.status === 'idle' && rowData.taskState.startsAt\n ? new Date(rowData.taskState.startsAt).toLocaleString()\n : 'N/A',\n },\n {\n title: 'Actions',\n render: (rowData: TaskApiTasksResponse) => (\n <RequirePermission\n permission={devToolsTaskSchedulerCreatePermission}\n errorPage={<CreateNotAllowed />}\n >\n <Box display=\"flex\" justifyContent=\"center\">\n <Tooltip title=\"Run Task\">\n <IconButton\n aria-label=\"Trigger\"\n disabled={isLoading}\n onClick={async () => {\n try {\n await triggerTask(selectedPlugin, rowData.taskId);\n toastApi.post({\n title: `Successfully triggered task ${rowData.taskId}`,\n status: 'success',\n });\n } catch (e) {\n toastApi.post({\n title: `Error triggering task ${rowData.taskId}: ${e.message}`,\n status: 'danger',\n });\n } finally {\n refresh();\n }\n }}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Cancel Task\">\n <IconButton\n aria-label=\"Cancel\"\n disabled={isLoading}\n onClick={async () => {\n try {\n await cancelTask(selectedPlugin, rowData.taskId);\n toastApi.post({\n title: `Successfully cancelled task ${rowData.taskId}`,\n status: 'success',\n });\n } catch (e) {\n toastApi.post({\n title: `Error cancelling task ${rowData.taskId}: ${e.message}`,\n status: 'danger',\n });\n } finally {\n refresh();\n }\n }}\n >\n <StopIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </RequirePermission>\n ),\n sorting: false,\n width: '10%',\n align: 'center',\n },\n ];\n\n return (\n <Box>\n <Autocomplete\n className={classes.formControl}\n classes={{ root: classes.formControl }}\n freeSolo\n options={plugins}\n value={selectedPlugin}\n inputValue={inputValue}\n onChange={handleAutocompleteChange}\n onInputChange={(_event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Select Plugin\"\n variant=\"outlined\"\n onKeyDown={handleKeyDown}\n onBlur={handleCommitChange}\n />\n )}\n />\n\n {loading && !scheduledTasks && <Progress />}\n\n {error && (\n <ErrorPanel\n error={new Error(`No scheduled tasks found for \"${selectedPlugin}\"`)}\n title=\"No Scheduled Tasks Found\"\n >\n <Typography variant=\"body2\">\n The plugin ID \"{selectedPlugin}\" doesn't have any scheduled tasks or\n may contain a typo.\n </Typography>\n <Typography variant=\"body2\" style={{ marginTop: 8 }}>\n Please verify:\n </Typography>\n <ul>\n <li>\n <Typography variant=\"body2\">\n The plugin ID is spelled correctly\n </Typography>\n </li>\n <li>\n <Typography variant=\"body2\">\n The plugin has registered scheduled tasks\n </Typography>\n </li>\n </ul>\n </ErrorPanel>\n )}\n\n {scheduledTasks && (\n <Table\n title={`Scheduled Tasks (${selectedPlugin})`}\n options={{\n paging: true,\n search: true,\n sorting: true,\n searchFieldAlignment: 'right',\n padding: 'dense',\n }}\n columns={columns}\n data={scheduledTasks || []}\n emptyContent={\n <Alert severity=\"info\">\n No scheduled tasks found for {selectedPlugin}.\n </Alert>\n }\n detailPanel={({ rowData }) => {\n return <ScheduledTaskDetailPanel rowData={rowData} />;\n }}\n />\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-devtools";
2
- var version = "0.1.43-next.1";
2
+ var version = "0.1.43-next.2";
3
3
  var backstage = {
4
4
  role: "frontend-plugin",
5
5
  pluginId: "devtools",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-devtools",
3
- "version": "0.1.43-next.1",
3
+ "version": "0.1.43-next.2",
4
4
  "backstage": {
5
5
  "role": "frontend-plugin",
6
6
  "pluginId": "devtools",
@@ -66,13 +66,13 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@backstage/core-compat-api": "0.5.15-next.1",
69
- "@backstage/core-components": "0.18.14-next.1",
70
- "@backstage/core-plugin-api": "1.12.10-next.0",
69
+ "@backstage/core-components": "0.18.14-next.2",
70
+ "@backstage/core-plugin-api": "1.12.10-next.1",
71
71
  "@backstage/errors": "1.3.1",
72
- "@backstage/frontend-plugin-api": "0.18.1-next.0",
73
- "@backstage/plugin-devtools-common": "0.1.25",
74
- "@backstage/plugin-permission-react": "0.5.5-next.0",
75
- "@backstage/ui": "0.18.0-next.1",
72
+ "@backstage/frontend-plugin-api": "0.18.1-next.1",
73
+ "@backstage/plugin-devtools-common": "0.1.26-next.0",
74
+ "@backstage/plugin-permission-react": "0.5.5-next.1",
75
+ "@backstage/ui": "0.18.0-next.2",
76
76
  "@material-ui/core": "^4.9.13",
77
77
  "@material-ui/icons": "^4.9.1",
78
78
  "@material-ui/lab": "^4.0.0-alpha.57",
@@ -81,7 +81,7 @@
81
81
  "react-use": "^17.2.4"
82
82
  },
83
83
  "devDependencies": {
84
- "@backstage/cli": "0.36.6-next.0",
84
+ "@backstage/cli": "0.36.6-next.1",
85
85
  "@backstage/dev-utils": "1.1.27-next.1",
86
86
  "@testing-library/jest-dom": "^6.0.0",
87
87
  "@types/lodash": "^4.14.151",