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
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "Sie haben kein Backup",
"pci_instances_dashboard_backup_title": "Verwaltung des Backups",
"pci_instances_dashboard_backup_number_of_backups": "Anzahl der Backups der Instanz",
"pci_instances_dashboard_backup_last_updated_backups": "Datum des letzten Backups"
"pci_instances_dashboard_backup_last_updated_backups": "Datum des letzten Backups",
"pci_instances_dashboard_tab_vnc_disabled_text": "Der Status dieser Instanz erlaubt keine Verbindung über die VNC-Konsole."
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "You do not have a backup",
"pci_instances_dashboard_backup_title": "Backup management",
"pci_instances_dashboard_backup_number_of_backups": "Instance backup count",
"pci_instances_dashboard_backup_last_updated_backups": "Date of last backup"
"pci_instances_dashboard_backup_last_updated_backups": "Date of last backup",
"pci_instances_dashboard_tab_vnc_disabled_text": "The state of this instance does not allow connection via the VNC console."
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "No tiene backup",
"pci_instances_dashboard_backup_title": "Gestión del backup",
"pci_instances_dashboard_backup_number_of_backups": "Número de backups de la instancia",
"pci_instances_dashboard_backup_last_updated_backups": "Fecha del último backup"
"pci_instances_dashboard_backup_last_updated_backups": "Fecha del último backup",
"pci_instances_dashboard_tab_vnc_disabled_text": "El estado de esta instancia no permite la conexión a través de la consola VNC"
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "Vous n'avez pas de backup",
"pci_instances_dashboard_backup_title": "Gestion du backup",
"pci_instances_dashboard_backup_number_of_backups": "Nombre de backups de l'instance",
"pci_instances_dashboard_backup_last_updated_backups": "Date du dernier backup"
"pci_instances_dashboard_backup_last_updated_backups": "Date du dernier backup",
"pci_instances_dashboard_tab_vnc_disabled_text": "L'état de cette instance ne permet pas la connexion via la console VNC"
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "Vous n'avez pas de backup",
"pci_instances_dashboard_backup_title": "Gestion du backup",
"pci_instances_dashboard_backup_number_of_backups": "Nombre de backups de l'instance",
"pci_instances_dashboard_backup_last_updated_backups": "Date du dernier backup"
"pci_instances_dashboard_backup_last_updated_backups": "Date du dernier backup",
"pci_instances_dashboard_tab_vnc_disabled_text": "L'état de cette instance ne permet pas la connexion via la console VNC"
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "Non hai backup",
"pci_instances_dashboard_backup_title": "Gestione del backup",
"pci_instances_dashboard_backup_number_of_backups": "Numero di backup dell’istanza",
"pci_instances_dashboard_backup_last_updated_backups": "Data dell'ultimo backup"
"pci_instances_dashboard_backup_last_updated_backups": "Data dell'ultimo backup",
"pci_instances_dashboard_tab_vnc_disabled_text": "Lo stato di questa istanza non consente la connessione tramite la console VNC"
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "Nie posiadasz kopii zapasowej",
"pci_instances_dashboard_backup_title": "Zarządzanie kopiami zapasowymi",
"pci_instances_dashboard_backup_number_of_backups": "Liczba kopii zapasowych instancji",
"pci_instances_dashboard_backup_last_updated_backups": "Data ostatniego backupu"
"pci_instances_dashboard_backup_last_updated_backups": "Data ostatniego backupu",
"pci_instances_dashboard_tab_vnc_disabled_text": "Stan tej instancji nie pozwala na połączenie przez konsolę VNC."
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"pci_instances_dashboard_backup_empty_message": "Não possui backups",
"pci_instances_dashboard_backup_title": "Gestão do backup",
"pci_instances_dashboard_backup_number_of_backups": "Número de backups da instância",
"pci_instances_dashboard_backup_last_updated_backups": "Data do último backup"
"pci_instances_dashboard_backup_last_updated_backups": "Data do último backup",
"pci_instances_dashboard_tab_vnc_disabled_text": "O estado desta instância não permite a conexão via console VNC"
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import { FC, useEffect, useState } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { Tabs, TabList, Tab, TabsValueChangeEvent } from '@ovhcloud/ods-react';
import {
Tabs,
TabList,
Tab,
TabsValueChangeEvent,
Tooltip,
TooltipTrigger,
TooltipContent,
} from '@ovhcloud/ods-react';

type TTabItem = {
label: string;
to: string;
badge?: string;
disabled?: boolean;
tooltipText?: string | null;
};

type TTabsPanelProps = {
Expand All @@ -30,9 +40,16 @@ const TabsPanel: FC<TTabsPanelProps> = ({ tabs }) => {
<Tabs value={activeTab} onValueChange={handleTabChange}>
<TabList>
{tabs.map((tab) => (
<Tab key={tab.to} value={tab.to}>
{tab.label}
</Tab>
<Tooltip key={tab.to}>
<TooltipTrigger asChild>
<Tab value={tab.to} disabled={tab.disabled}>
{tab.label}
</Tab>
</TooltipTrigger>
{tab.tooltipText && (
<TooltipContent>{tab.tooltipText}</TooltipContent>
)}
</Tooltip>
))}
</TabList>
</Tabs>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,21 +120,27 @@ const mapInstanceAddresses = (instance: TAggregatedInstanceDto) =>
return acc.set(type, [rest]);
}, new Map<TInstanceAddressType, TAggregatedInstanceAddress[]>());

const isActionToDisplay = (name: TActionName) => name !== 'vnc';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We must find later another way to achieve this and thus to prevent from having this business rule into the client logic ;)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree :)


const mapInstanceActions = (
instance: TAggregatedInstanceDto,
projectUrl: string,
): TAggregatedInstanceActions =>
instance.actions.reduce<TAggregatedInstanceActions>((acc, action) => {
const { group, name } = action;
const newAction = {
label: `pci_instances_list_action_${name}`,
link: getActionHrefByName(projectUrl, name, instance),
};
const foundAction = acc.get(group);
if (!foundAction) return acc.set(group, [newAction]);
foundAction.push(newAction);

if (isActionToDisplay(name)) {
const newAction = {
label: `pci_instances_list_action_${name}`,
link: getActionHrefByName(projectUrl, name, instance),
};
const foundAction = acc.get(group);
if (!foundAction) return acc.set(group, [newAction]);
foundAction.push(newAction);
}

return acc;
}, new Map() as TAggregatedInstanceActions);
}, new Map());

export const instancesSelector = (
{ pages }: InfiniteData<TAggregatedInstanceDto[], number>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,23 @@ const Instance: FC = () => {
instanceId,
});

const tabs = useMemo(() => {
const defaultTab = [
const tabs = useMemo(
() => [
{
label: t('general_information'),
to: dashboardPath.pathname,
},
];

return instance?.isEditEnabled
? [
...defaultTab,
{
label: t('dashboard:pci_instances_dashboard_tab_vnc_title'),
to: vncPath.pathname,
},
]
: defaultTab;
}, [dashboardPath.pathname, vncPath.pathname, t, instance?.isEditEnabled]);
{
label: t('dashboard:pci_instances_dashboard_tab_vnc_title'),
to: vncPath.pathname,
disabled: !instance?.isVncEnabled,
tooltipText: !instance?.isVncEnabled
? t('dashboard:pci_instances_dashboard_tab_vnc_disabled_text')
: null,
},
],
[dashboardPath.pathname, vncPath.pathname, t, instance?.isVncEnabled],
);

return (
<InstanceWrapper>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,15 @@ export type TInstanceDashboardViewModel = {
isDeleteEnabled: boolean;
isEditEnabled: boolean;
isBackupEnabled: boolean;
isVncEnabled: boolean;
} | null;

const isEditionEnabled = (actions: TInstanceAction[]) =>
actions.some(({ name }) => name === 'edit');

const isVncEnabled = (actions: TInstanceAction[]) =>
actions.some(({ name }) => name === 'vnc');

const mapFlavor = ({ name, specs }: TInstanceFlavor) => ({
name,
ram: specs ? `${specs.ram.value} ${specs.ram.unit}` : '-',
Expand Down Expand Up @@ -187,6 +191,7 @@ const isAdditionalAction = ({ name }: { name: TActionName }) => {
'delete',
'activate_monthly_billing',
'create_backup',
'vnc',
];

return !excludeActions.includes(name);
Expand Down Expand Up @@ -299,5 +304,6 @@ export const selectInstanceDashboard = (
isDeleteEnabled: canDeleteInstance(instance.actions),
isEditEnabled: isEditionEnabled(instance.actions),
isBackupEnabled: canCreateBackup(instance.actions),
isVncEnabled: isVncEnabled(instance.actions),
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ export type TActionName =
| 'unshelve'
| 'resume'
| 'reinstall'
| 'delete';
| 'delete'
| 'vnc';

export type TStatus =
| 'ACTIVE'
Expand Down
Loading