2019-10-21 10:13:23 +00:00
import { Theme } from "@material-ui/core/styles" ;
2019-06-19 14:40:52 +00:00
import Typography from "@material-ui/core/Typography" ;
2019-10-21 10:13:23 +00:00
import { makeStyles } from "@material-ui/styles" ;
2019-08-09 10:26:22 +00:00
import React from "react" ;
2019-08-26 21:39:21 +00:00
import { FormattedMessage , useIntl } from "react-intl" ;
2019-06-19 14:40:52 +00:00
import AppHeader from "@saleor/components/AppHeader" ;
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton" ;
import Container from "@saleor/components/Container" ;
import Form from "@saleor/components/Form" ;
import Grid from "@saleor/components/Grid" ;
2019-10-21 10:13:23 +00:00
import Hr from "@saleor/components/Hr" ;
2019-06-19 14:40:52 +00:00
import PageHeader from "@saleor/components/PageHeader" ;
import SaveButtonBar from "@saleor/components/SaveButtonBar" ;
2019-08-09 11:14:35 +00:00
import useStateFromProps from "@saleor/hooks/useStateFromProps" ;
2019-08-26 21:39:21 +00:00
import { commonMessages , sectionNames } from "@saleor/intl" ;
2019-08-09 11:14:35 +00:00
import { UserError } from "@saleor/types" ;
import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler" ;
import { mapCountriesToChoices } from "@saleor/utils/maps" ;
2019-06-19 14:40:52 +00:00
import { maybe } from "../../../misc" ;
import { AuthorizationKeyType } from "../../../types/globalTypes" ;
import { SiteSettings_shop } from "../../types/SiteSettings" ;
2019-08-09 11:14:35 +00:00
import SiteSettingsAddress from "../SiteSettingsAddress/SiteSettingsAddress" ;
2019-06-19 14:40:52 +00:00
import SiteSettingsDetails from "../SiteSettingsDetails/SiteSettingsDetails" ;
import SiteSettingsKeys from "../SiteSettingsKeys/SiteSettingsKeys" ;
2019-10-21 11:11:05 +00:00
import SiteSettingsMailing , {
SiteSettingsMailingFormData
} from "../SiteSettingsMailing" ;
2019-06-19 14:40:52 +00:00
2019-08-09 11:14:35 +00:00
export interface SiteSettingsPageAddressFormData {
city : string ;
companyName : string ;
country : string ;
countryArea : string ;
phone : string ;
postalCode : string ;
streetAddress1 : string ;
streetAddress2 : string ;
}
export interface SiteSettingsPageFormData
2019-10-21 11:11:05 +00:00
extends SiteSettingsPageAddressFormData ,
SiteSettingsMailingFormData {
2019-06-19 14:40:52 +00:00
description : string ;
domain : string ;
name : string ;
}
export interface SiteSettingsPageProps {
disabled : boolean ;
2019-08-09 11:14:35 +00:00
errors : UserError [ ] ;
2019-06-19 14:40:52 +00:00
shop : SiteSettings_shop ;
saveButtonBarState : ConfirmButtonTransitionState ;
onBack : ( ) = > void ;
onKeyAdd : ( ) = > void ;
onKeyRemove : ( keyType : AuthorizationKeyType ) = > void ;
onSubmit : ( data : SiteSettingsPageFormData ) = > void ;
}
2019-10-21 10:13:23 +00:00
const useStyles = makeStyles (
( theme : Theme ) = > ( {
hr : {
gridColumnEnd : "span 2" ,
margin : ` ${ theme . spacing . unit } px 0 `
}
} ) ,
{
name : "SiteSettingsPage"
}
) ;
const SiteSettingsPage : React.FC < SiteSettingsPageProps > = props = > {
const {
disabled ,
errors ,
saveButtonBarState ,
shop ,
onBack ,
onKeyAdd ,
onKeyRemove ,
onSubmit
} = props ;
const classes = useStyles ( props ) ;
2019-08-26 21:39:21 +00:00
const intl = useIntl ( ) ;
2019-08-09 11:14:35 +00:00
const [ displayCountry , setDisplayCountry ] = useStateFromProps (
maybe ( ( ) = > shop . companyAddress . country . code , "" )
) ;
2019-06-19 14:40:52 +00:00
const initialForm : SiteSettingsPageFormData = {
2019-08-09 11:14:35 +00:00
city : maybe ( ( ) = > shop . companyAddress . city , "" ) ,
companyName : maybe ( ( ) = > shop . companyAddress . companyName , "" ) ,
country : maybe ( ( ) = > shop . companyAddress . country . code , "" ) ,
countryArea : maybe ( ( ) = > shop . companyAddress . countryArea , "" ) ,
2019-06-19 14:40:52 +00:00
description : maybe ( ( ) = > shop . description , "" ) ,
domain : maybe ( ( ) = > shop . domain . host , "" ) ,
2019-08-09 11:14:35 +00:00
name : maybe ( ( ) = > shop . name , "" ) ,
phone : maybe ( ( ) = > shop . companyAddress . phone , "" ) ,
postalCode : maybe ( ( ) = > shop . companyAddress . postalCode , "" ) ,
streetAddress1 : maybe ( ( ) = > shop . companyAddress . streetAddress1 , "" ) ,
streetAddress2 : maybe ( ( ) = > shop . companyAddress . streetAddress2 , "" )
2019-06-19 14:40:52 +00:00
} ;
2019-08-09 11:14:35 +00:00
2019-06-19 14:40:52 +00:00
return (
< Form
errors = { errors }
initial = { initialForm }
onSubmit = { onSubmit }
confirmLeave
>
2019-08-09 11:14:35 +00:00
{ ( { change , data , errors : formErrors , hasChanged , submit } ) = > {
const countryChoices = mapCountriesToChoices (
maybe ( ( ) = > shop . countries , [ ] )
) ;
const handleCountryChange = createSingleAutocompleteSelectHandler (
change ,
setDisplayCountry ,
countryChoices
) ;
return (
< Container >
2019-08-26 21:39:21 +00:00
< AppHeader onBack = { onBack } >
{ intl . formatMessage ( sectionNames . configuration ) }
< / AppHeader >
2019-08-09 11:14:35 +00:00
< PageHeader
2019-08-26 21:39:21 +00:00
title = { intl . formatMessage ( commonMessages . generalInformations ) }
2019-06-19 14:40:52 +00:00
/ >
2019-08-09 11:14:35 +00:00
< Grid variant = "inverted" >
2019-10-21 10:13:23 +00:00
< div >
< Typography >
{ intl . formatMessage ( sectionNames . siteSettings ) }
< / Typography >
< Typography variant = "body1" >
< FormattedMessage defaultMessage = "These are general information about your store. They define what is the URL of your store and what is shown in browsers taskbar." / >
< / Typography >
< / div >
2019-08-09 11:14:35 +00:00
< SiteSettingsDetails
data = { data }
errors = { formErrors }
disabled = { disabled }
onChange = { change }
/ >
2019-10-21 10:13:23 +00:00
< Hr className = { classes . hr } / >
< div >
< Typography >
< FormattedMessage
defaultMessage = "Mailing Configuration"
description = "section header"
/ >
< / Typography >
< Typography variant = "body1" >
< FormattedMessage defaultMessage = "This where you will find all of the settings determining your stores e-mails. You can determine main email address and some of the contents of your emails." / >
< / Typography >
< / div >
< SiteSettingsMailing
data = { data }
errors = { formErrors }
disabled = { disabled }
onChange = { change }
/ >
< Hr className = { classes . hr } / >
< div >
< Typography >
< FormattedMessage
defaultMessage = "Company Information"
description = "section header"
/ >
< / Typography >
< Typography variant = "body1" >
< FormattedMessage defaultMessage = "This adress will be used to generate invoices and calculate shipping rates." / >
< FormattedMessage defaultMessage = "Email adress you provide here will be used as a contact adress for your customers." / >
< / Typography >
< / div >
2019-08-09 11:14:35 +00:00
< SiteSettingsAddress
data = { data }
displayCountry = { displayCountry }
countries = { countryChoices }
errors = { formErrors }
disabled = { disabled }
onChange = { change }
onCountryChange = { handleCountryChange }
/ >
2019-10-21 10:13:23 +00:00
< Hr className = { classes . hr } / >
< div >
< Typography >
< FormattedMessage
defaultMessage = "Authentication Methods"
description = "section header"
/ >
< / Typography >
< Typography variant = "body1" >
< FormattedMessage defaultMessage = "Authentication method defines additional ways that customers can log in to your ecommerce. " / >
< / Typography >
< / div >
2019-08-09 11:14:35 +00:00
< SiteSettingsKeys
disabled = { disabled }
keys = { maybe ( ( ) = > shop . authorizationKeys ) }
onAdd = { onKeyAdd }
onRemove = { onKeyRemove }
/ >
< / Grid >
< SaveButtonBar
state = { saveButtonBarState }
disabled = { disabled || ! hasChanged }
onCancel = { onBack }
onSave = { submit }
2019-06-19 14:40:52 +00:00
/ >
2019-08-09 11:14:35 +00:00
< / Container >
) ;
} }
2019-06-19 14:40:52 +00:00
< / Form >
) ;
} ;
2019-10-21 10:13:23 +00:00
2019-06-19 14:40:52 +00:00
SiteSettingsPage . displayName = "SiteSettingsPage" ;
export default SiteSettingsPage ;