2022-09-29 10:02:41 +00:00
/ *
GoToSocial
2023-01-05 11:43:00 +00:00
Copyright ( C ) 2021 - 2023 GoToSocial Authors admin @ gotosocial . org
2022-09-29 10:02:41 +00:00
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
You should have received a copy of the GNU Affero General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
"use strict" ;
const React = require ( "react" ) ;
2023-01-18 13:45:14 +00:00
const query = require ( "../lib/query" ) ;
2022-09-29 10:02:41 +00:00
2023-01-18 13:45:14 +00:00
const {
useTextInput ,
useFileInput
} = require ( "../lib/form" ) ;
2022-09-29 10:02:41 +00:00
2023-01-18 13:45:14 +00:00
const useFormSubmit = require ( "../lib/form/submit" ) ;
2022-09-29 10:02:41 +00:00
const {
TextInput ,
TextArea ,
2023-01-18 13:45:14 +00:00
FileInput
} = require ( "../components/form/inputs" ) ;
2022-09-29 10:02:41 +00:00
2023-01-18 13:45:14 +00:00
const FormWithData = require ( "../lib/form/form-with-data" ) ;
const MutationButton = require ( "../components/form/mutation-button" ) ;
2022-09-29 10:02:41 +00:00
2023-01-18 13:45:14 +00:00
module . exports = function AdminSettings ( ) {
return (
< FormWithData
dataQuery = { query . useInstanceQuery }
DataForm = { AdminSettingsForm }
/ >
2022-09-29 10:02:41 +00:00
) ;
2023-01-18 13:45:14 +00:00
} ;
function AdminSettingsForm ( { data : instance } ) {
const form = {
2023-02-06 08:19:56 +00:00
title : useTextInput ( "title" , {
source : instance ,
validator : ( val ) => val . length <= 40 ? "" : "Instance title must be 40 characters or less"
} ) ,
2023-01-18 13:45:14 +00:00
thumbnail : useFileInput ( "thumbnail" , { withPreview : true } ) ,
2023-02-06 08:19:56 +00:00
thumbnailDesc : useTextInput ( "thumbnail_description" , { source : instance } ) ,
shortDesc : useTextInput ( "short_description" , { source : instance } ) ,
description : useTextInput ( "description" , { source : instance } ) ,
contactUser : useTextInput ( "contact_username" , { source : instance , valueSelector : ( s ) => s . contact _account ? . username } ) ,
contactEmail : useTextInput ( "contact_email" , { source : instance , valueSelector : ( s ) => s . email } ) ,
terms : useTextInput ( "terms" , { source : instance } )
2023-01-18 13:45:14 +00:00
} ;
const [ submitForm , result ] = useFormSubmit ( form , query . useUpdateInstanceMutation ( ) ) ;
2022-09-29 10:02:41 +00:00
return (
2023-01-18 13:45:14 +00:00
< form onSubmit = { submitForm } >
2022-09-29 10:02:41 +00:00
< h1 > Instance Settings < / h 1 >
< TextInput
2023-01-18 13:45:14 +00:00
field = { form . title }
label = "Title"
placeholder = "My GoToSocial instance"
2022-09-29 10:02:41 +00:00
/ >
2022-11-08 17:11:06 +00:00
< div className = "file-upload" >
< h3 > Instance thumbnail < / h 3 >
< div >
2023-01-18 13:45:14 +00:00
< img className = "preview avatar" src = { form . thumbnail . previewValue ? ? instance . thumbnail } alt = { form . thumbnailDesc . value ? ? ( instance . thumbnail ? ` Thumbnail image for the instance ` : "No instance thumbnail image set" ) } / >
< FileInput
field = { form . thumbnail }
accept = "image/*"
2022-11-08 17:11:06 +00:00
/ >
< / d i v >
< / d i v >
< TextInput
2023-01-18 13:45:14 +00:00
field = { form . thumbnailDesc }
label = "Instance thumbnail description"
placeholder = "A cute drawing of a smiling sloth."
2022-11-08 17:11:06 +00:00
/ >
2022-09-29 10:02:41 +00:00
< TextArea
2023-01-18 13:45:14 +00:00
field = { form . shortDesc }
label = "Short description"
placeholder = "A small testing instance for the GoToSocial alpha software."
2022-09-29 10:02:41 +00:00
/ >
2023-01-18 13:45:14 +00:00
2022-09-29 10:02:41 +00:00
< TextArea
2023-01-18 13:45:14 +00:00
field = { form . description }
label = "Full description"
placeholder = "A small testing instance for the GoToSocial alpha software. Just trying it out, my main instance is https://example.com"
2022-09-29 10:02:41 +00:00
/ >
< TextInput
2023-01-18 13:45:14 +00:00
field = { form . contactUser }
label = "Contact user (local account username)"
placeholder = "admin"
2022-09-29 10:02:41 +00:00
/ >
2023-01-18 13:45:14 +00:00
2022-09-29 10:02:41 +00:00
< TextInput
2023-01-18 13:45:14 +00:00
field = { form . contactEmail }
label = "Contact email"
placeholder = "admin@example.com"
2022-09-29 10:02:41 +00:00
/ >
< TextArea
2023-01-18 13:45:14 +00:00
field = { form . terms }
label = "Terms & Conditions"
placeholder = ""
2022-09-29 10:02:41 +00:00
/ >
2023-01-18 13:45:14 +00:00
< MutationButton label = "Save" result = { result } / >
< / f o r m >
2022-09-29 10:02:41 +00:00
) ;
2023-01-18 13:45:14 +00:00
}