@@ -2,10 +2,18 @@ import React, { useEffect, useState } from 'react';
22import { ServerContext } from '@/state/server' ;
33import Modal from '@/components/elements/Modal' ;
44import tw from 'twin.macro' ;
5+ import Button from '@/components/elements/Button' ;
6+ import saveFileContents from '@/api/server/files/saveFileContents' ;
7+ import FlashMessageRender from '@/components/FlashMessageRender' ;
8+ import useFlash from '@/plugins/useFlash' ;
59
610const EulaModalFeature = ( ) => {
711 const [ visible , setVisible ] = useState ( false ) ;
12+ const [ loading , setLoading ] = useState ( false ) ;
13+
14+ const uuid = ServerContext . useStoreState ( state => state . server . data ! . uuid ) ;
815 const status = ServerContext . useStoreState ( state => state . status . value ) ;
16+ const { clearFlashes, clearAndAddHttpError } = useFlash ( ) ;
917 const { connected, instance } = ServerContext . useStoreState ( state => state . socket ) ;
1018
1119 useEffect ( ( ) => {
@@ -24,16 +32,56 @@ const EulaModalFeature = () => {
2432 } ;
2533 } , [ connected , instance , status ] ) ;
2634
35+ const onAcceptEULA = ( ) => {
36+ setLoading ( true ) ;
37+ clearFlashes ( 'feature:eula' ) ;
38+
39+ saveFileContents ( uuid , 'eula.txt' , 'eula=true' )
40+ . then ( ( ) => {
41+ if ( status === 'offline' && instance ) {
42+ instance . send ( 'set state' , 'restart' ) ;
43+ }
44+
45+ setLoading ( false ) ;
46+ setVisible ( false ) ;
47+ } )
48+ . catch ( error => {
49+ console . error ( error ) ;
50+ clearAndAddHttpError ( { key : 'feature:eula' , error } ) ;
51+ } )
52+ . then ( ( ) => setLoading ( false ) ) ;
53+ } ;
54+
55+ useEffect ( ( ) => ( ) => {
56+ clearFlashes ( 'feature:eula' ) ;
57+ } , [ ] ) ;
58+
2759 return (
2860 ! visible ?
2961 null
3062 :
31- < Modal visible onDismissed = { ( ) => setVisible ( false ) } >
32- < h2 css = { tw `text-3xl mb-4 text-neutral-100` } > EULA Not Accepted</ h2 >
63+ < Modal visible onDismissed = { ( ) => setVisible ( false ) } closeOnBackground = { false } showSpinnerOverlay = { loading } >
64+ < FlashMessageRender key = { 'feature:eula' } css = { tw `mb-4` } />
65+ < h2 css = { tw `text-2xl mb-4 text-neutral-100` } > Accept Minecraft® EULA</ h2 >
3366 < p css = { tw `text-neutral-200` } >
34- It looks like you have not yet accepted the Minecraft EULA. In order to start this server you
35- must set eula=true inside the eula.txt file in the File Manager.
67+ By pressing { '"I Accept"' } below you are indicating your agreement to the
68+ < a
69+ target = { '_blank' }
70+ css = { tw `text-primary-300 underline transition-colors duration-150 hover:text-primary-400` }
71+ rel = { 'noreferrer noopener' }
72+ href = "https://account.mojang.com/documents/minecraft_eula"
73+ >
74+ Mojang EULA
75+ </ a > .
3676 </ p >
77+ < div css = { tw `mt-8 sm:flex items-center justify-end` } >
78+ < Button isSecondary onClick = { ( ) => setVisible ( false ) } css = { tw `w-full sm:w-auto border-transparent` } >
79+ Cancel
80+ </ Button >
81+ < Button onClick = { onAcceptEULA } css = { tw `mt-4 sm:mt-0 sm:ml-4 w-full sm:w-auto` } >
82+ I Accept
83+ </ Button >
84+ </ div >
3785 </ Modal >
3886 ) ;
3987} ;
0 commit comments