Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libs/i18n/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,7 @@
"System image mismatch": "System image mismatch",
"Desired system image: {{ desiredOsImage }}": "Desired system image: {{ desiredOsImage }}",
"System services": "System services",
"Refreshing device": "Refreshing device",
"Connection was closed": "Connection was closed",
"Reconnect": "Reconnect",
"Show decommissioned devices": "Show decommissioned devices",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ import { getEditDisabledReason, getResumeDisabledReason, isDeviceEnrolled } from
import TabsNav from '../../TabsNav/TabsNav';
import { RESOURCE, VERB } from '../../../types/rbac';
import { usePermissionsContext } from '../../common/PermissionsContext';
import EventsCard from '../../Events/EventsCard';
import PageWithPermissions from '../../common/PageWithPermissions';
import YamlEditor from '../../common/CodeEditor/YamlEditor';
import DeviceAliasEdit from './DeviceAliasEdit';
import { SystemRestoreBanners } from '../../SystemRestore/SystemRestoreBanners';
import DeviceDetailsCatalog from './DeviceDetailsCatalog';
import EventsCard from '../../Events/EventsCard';
import DeviceAliasEdit from './DeviceAliasEdit';
import DeviceYamlTab from './DeviceYamlTab';

type DeviceDetailsPageProps = React.PropsWithChildren<{ hideTerminal?: boolean }>;

Expand Down Expand Up @@ -203,10 +203,10 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
<Route
path="yaml"
element={
<YamlEditor
apiObj={device}
<DeviceYamlTab
device={device}
refetch={refetch}
disabledEditReason={editDisabledReason}
editDisabledReason={editDisabledReason}
canEdit={hasEditPermissions}
/>
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import React from 'react';
import { Bullseye, Spinner } from '@patternfly/react-core';

import { Device } from '@flightctl/types';
import YamlEditor from '../../common/CodeEditor/YamlEditor';
import { showSpinnerBriefly } from '../../../utils/time';
import { useTranslation } from '../../../hooks/useTranslation';

const YAML_TAB_REFETCH_DELAY_MS = 500;

const DeviceYamlTab = ({
device,
refetch,
editDisabledReason,
canEdit,
}: {
device: Required<Device>;
refetch: VoidFunction;
editDisabledReason?: string;
canEdit: boolean;
}) => {
const { t } = useTranslation();
const [ready, setReady] = React.useState(false);

React.useEffect(() => {
// We want the YAML editor to open with the latest device version from the beginning.
// We add a delay that should be enough for refetch to have finished
const updateDevice = async () => {
refetch();
setReady(false);
await showSpinnerBriefly(YAML_TAB_REFETCH_DELAY_MS);
setReady(true);
};
void updateDevice();
}, [refetch]);

if (!ready) {
return (
<Bullseye>
<Spinner size="lg" aria-label={t('Refreshing device')} />
</Bullseye>
);
}

return <YamlEditor apiObj={device} refetch={refetch} disabledEditReason={editDisabledReason} canEdit={canEdit} />;
};

export default DeviceYamlTab;