mirror of
https://github.com/hubHarmony/servii-frontend.git
synced 2024-11-17 21:40:30 +00:00
+ajout modal confirmation suppresion
This commit is contained in:
parent
788409120a
commit
1212375d65
@ -0,0 +1,20 @@
|
|||||||
|
import styles from './DeleteConfirmationModal.module.scss';
|
||||||
|
|
||||||
|
const DeleteConfirmationModal = ({ isOpen, onClose, onDelete }) => {
|
||||||
|
if (!isOpen) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.modalOverlay}>
|
||||||
|
<div className={styles.modal}>
|
||||||
|
<h2>Êtes-vous sûr de vouloir supprimer ?</h2>
|
||||||
|
<p>Cette action est irréversible.</p>
|
||||||
|
<div className={styles.modalButtons}>
|
||||||
|
<button className={styles.cancelButton} onClick={onClose}>Annuler</button>
|
||||||
|
<button className={styles.deleteButton} onClick={onDelete}>Supprimer</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DeleteConfirmationModal;
|
@ -0,0 +1,62 @@
|
|||||||
|
.modalOverlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 0.67rem;
|
||||||
|
padding: 1.67rem;
|
||||||
|
box-shadow: 0 0.33rem 2.5rem rgba(0, 0, 0, 0.1);
|
||||||
|
max-width: 33.33rem;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin: 0 0 0.83rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0 0 1.67rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modalButtons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancelButton {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
color: #333;
|
||||||
|
border: none;
|
||||||
|
padding: 0.83rem 1.25rem;
|
||||||
|
border-radius: 0.42rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #e0e0e0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.deleteButton {
|
||||||
|
background-color: #be3939;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
padding: 0.83rem 1.25rem;
|
||||||
|
border-radius: 0.42rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: rgba(255, 59, 59, 0.76);
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,7 @@ import { getUserSubdomain } from "../../service/firebase";
|
|||||||
import serviiApi from "../../service/api.tsx";
|
import serviiApi from "../../service/api.tsx";
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import styles from './DashboardPage.module.scss';
|
import styles from './DashboardPage.module.scss';
|
||||||
|
import DeleteConfirmationModal from '../../components/DeleteConfirmationModal/DeleteConfirmationModal';
|
||||||
|
|
||||||
const CACHE_KEY_SERVERS = 'cachedServers';
|
const CACHE_KEY_SERVERS = 'cachedServers';
|
||||||
const CACHE_KEY_TIMESTAMP = 'cacheTimestamp';
|
const CACHE_KEY_TIMESTAMP = 'cacheTimestamp';
|
||||||
@ -23,6 +24,9 @@ const DashboardPage = ({ user }) => {
|
|||||||
const [loading, setLoading] = useState(servers.length === 0);
|
const [loading, setLoading] = useState(servers.length === 0);
|
||||||
const [searchTerm, setSearchTerm] = useState('');
|
const [searchTerm, setSearchTerm] = useState('');
|
||||||
const [newSubdomain, setNewSubdomain] = useState(' ');
|
const [newSubdomain, setNewSubdomain] = useState(' ');
|
||||||
|
|
||||||
|
const [isModalOpen, setModalOpen] = useState(false);
|
||||||
|
const [serverToDelete, setServerToDelete] = useState(null);
|
||||||
|
|
||||||
const updateServersFromApi = useCallback(async () => {
|
const updateServersFromApi = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
@ -69,12 +73,16 @@ const DashboardPage = ({ user }) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDeleteServer = async (serverName) => {
|
const handleDeleteServer = async () => {
|
||||||
try {
|
if (serverToDelete) {
|
||||||
await serviiApi.serverDelete(serverName);
|
try {
|
||||||
updateServersFromApi();
|
await serviiApi.serverDelete(serverToDelete);
|
||||||
} catch (error) {
|
setModalOpen(false);
|
||||||
console.error('Error deleting server:', error);
|
setServerToDelete(null);
|
||||||
|
updateServersFromApi();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error deleting server:', error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -152,71 +160,83 @@ const DashboardPage = ({ user }) => {
|
|||||||
return (
|
return (
|
||||||
<div className={styles.dashboardContainer}>
|
<div className={styles.dashboardContainer}>
|
||||||
<Navbar user={user} />
|
<Navbar user={user} />
|
||||||
<div className={styles.mainContent}>
|
<div className={styles.mainContent}>
|
||||||
<div className={styles.iptitle}>
|
<div className={styles.iptitle}>
|
||||||
Adresse de connexion à vos serveurs :
|
Adresse de connexion à vos serveurs :
|
||||||
<span onClick={handleCopyAddress} className={styles.subdomain}>
|
<span onClick={handleCopyAddress} className={styles.subdomain}>
|
||||||
{" " + subdomain}.servii.fr
|
{" " + subdomain}.servii.fr
|
||||||
</span>
|
</span>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.headerContainer}>
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
placeholder="Filtrer par nom"
|
|
||||||
value={searchTerm}
|
|
||||||
onChange={(e) => setSearchTerm(e.target.value)}
|
|
||||||
className={styles.searchInput}
|
|
||||||
/>
|
|
||||||
<button className={styles.btnCreate} onClick={handleCreateServer}>
|
|
||||||
<div className={styles.plusIcon}>+</div>
|
|
||||||
<div>Créer un nouveau serveur</div>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.FavoriteServerContainer}>
|
|
||||||
{favoriteServer ? (
|
|
||||||
<div className={styles.favoriteServerCard}>
|
|
||||||
<ServerCard
|
|
||||||
key={favoriteServer.id}
|
|
||||||
status={favoriteServer.running}
|
|
||||||
version={favoriteServer.version}
|
|
||||||
name={favoriteServer.name}
|
|
||||||
framework={favoriteServer.framework}
|
|
||||||
maxPlayers={favoriteServer.maxPlayers}
|
|
||||||
countPlayers={favoriteServer.onlinePlayers}
|
|
||||||
onRunClick={() => handleRunServer(favoriteServer.name)}
|
|
||||||
onStopClick={() => handleStopServer(favoriteServer.name)}
|
|
||||||
onDeleteClick={() => handleDeleteServer(favoriteServer.name)}
|
|
||||||
subdomain={subdomain}
|
|
||||||
favoriteServer={true}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.cardsContainer}>
|
|
||||||
{serversWithoutFavorite.length > 0 ? (
|
|
||||||
serversWithoutFavorite.filter(server =>
|
|
||||||
server.name.toLowerCase().includes(searchTerm.toLowerCase())
|
|
||||||
).map((server) => (
|
|
||||||
<ServerCard
|
|
||||||
key={server.id}
|
|
||||||
status={server.running}
|
|
||||||
version={server.version}
|
|
||||||
name={server.name}
|
|
||||||
framework={server.framework}
|
|
||||||
maxPlayers={server.maxPlayers}
|
|
||||||
countPlayers={server.onlinePlayers}
|
|
||||||
onRunClick={() => handleRunServer(server.name)}
|
|
||||||
onStopClick={() => handleStopServer(server.name)}
|
|
||||||
onDeleteClick={() => handleDeleteServer(server.name)}
|
|
||||||
subdomain={subdomain}
|
|
||||||
/>
|
|
||||||
))
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className={styles.headerContainer}>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Filtrer par nom"
|
||||||
|
value={searchTerm}
|
||||||
|
onChange={(e) => setSearchTerm(e.target.value)}
|
||||||
|
className={styles.searchInput}
|
||||||
|
/>
|
||||||
|
<button className={styles.btnCreate} onClick={handleCreateServer}>
|
||||||
|
<div className={styles.plusIcon}>+</div>
|
||||||
|
<div>Créer un nouveau serveur</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className={styles.FavoriteServerContainer}>
|
||||||
|
{favoriteServer ? (
|
||||||
|
<div className={styles.favoriteServerCard}>
|
||||||
|
<ServerCard
|
||||||
|
key={favoriteServer.id}
|
||||||
|
status={favoriteServer.running}
|
||||||
|
version={favoriteServer.version}
|
||||||
|
name={favoriteServer.name}
|
||||||
|
framework={favoriteServer.framework}
|
||||||
|
maxPlayers={favoriteServer.maxPlayers}
|
||||||
|
countPlayers={favoriteServer.onlinePlayers}
|
||||||
|
onRunClick={() => handleRunServer(favoriteServer.name)}
|
||||||
|
onStopClick={() => handleStopServer(favoriteServer.name)}
|
||||||
|
onDeleteClick={() => {
|
||||||
|
setServerToDelete(favoriteServer.name);
|
||||||
|
setModalOpen(true);
|
||||||
|
}}
|
||||||
|
subdomain={subdomain}
|
||||||
|
favoriteServer={true}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className={styles.cardsContainer}>
|
||||||
|
{serversWithoutFavorite.length > 0 ? (
|
||||||
|
serversWithoutFavorite.filter(server =>
|
||||||
|
server.name.toLowerCase().includes(searchTerm.toLowerCase())
|
||||||
|
).map((server) => (
|
||||||
|
<ServerCard
|
||||||
|
key={server.id}
|
||||||
|
status={server.running}
|
||||||
|
version={server.version}
|
||||||
|
name={server.name}
|
||||||
|
framework={server.framework}
|
||||||
|
maxPlayers={server.maxPlayers}
|
||||||
|
countPlayers={server.onlinePlayers}
|
||||||
|
onRunClick={() => handleRunServer(server.name)}
|
||||||
|
onStopClick={() => handleStopServer(server.name)}
|
||||||
|
onDeleteClick={() => {
|
||||||
|
setServerToDelete(server.name);
|
||||||
|
setModalOpen(true);
|
||||||
|
}}
|
||||||
|
subdomain={subdomain}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<DeleteConfirmationModal
|
||||||
|
isOpen={isModalOpen}
|
||||||
|
onClose={() => setModalOpen(false)}
|
||||||
|
onDelete={handleDeleteServer}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user