2020-08-31 02:59:47 +02:00
import { UIElement } from "../UIElement" ;
import { UIEventSource } from "../../Logic/UIEventSource" ;
import { LayoutConfigJson } from "../../Customizations/JSON/LayoutConfigJson" ;
import Combine from "../Base/Combine" ;
import SettingsTable from "./SettingsTable" ;
import SingleSetting from "./SingleSetting" ;
import { TextField } from "../Input/TextField" ;
import MultiLingualTextFields from "../Input/MultiLingualTextFields" ;
2020-09-25 12:44:04 +02:00
import ValidatedTextField from "../Input/ValidatedTextField" ;
2020-08-31 02:59:47 +02:00
export default class GeneralSettingsPanel extends UIElement {
private panel : Combine ;
public languages : UIEventSource < string [ ] > ;
constructor ( configuration : UIEventSource < LayoutConfigJson > , currentSetting : UIEventSource < SingleSetting < any > > ) {
super ( undefined ) ;
2020-09-25 12:44:04 +02:00
const languagesField =
ValidatedTextField . Mapped (
2020-09-25 17:57:01 +02:00
str = > {
console . log ( "Language from str" , str ) ;
return str ? . split ( ";" ) ? . map ( str = > str . trim ( ) . toLowerCase ( ) ) ;
} ,
2020-09-25 12:44:04 +02:00
languages = > languages . join ( ";" ) ) ;
2020-08-31 02:59:47 +02:00
this . languages = languagesField . GetValue ( ) ;
2020-09-25 12:44:04 +02:00
const version = new TextField ( ) ;
2020-08-31 02:59:47 +02:00
const current_datetime = new Date ( ) ;
let formatted_date = current_datetime . getFullYear ( ) + "-" + ( current_datetime . getMonth ( ) + 1 ) + "-" + current_datetime . getDate ( ) + " " + current_datetime . getHours ( ) + ":" + current_datetime . getMinutes ( ) + ":" + current_datetime . getSeconds ( )
version . GetValue ( ) . setData ( formatted_date ) ;
const locationRemark = "<br/>Note that, as soon as an URL-parameter sets the location or a location is known due to a previous visit, that the theme-set location is ignored"
const settingsTable = new SettingsTable (
[
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , new TextField ( { placeholder : "id" } ) , "id" ,
2020-08-31 02:59:47 +02:00
"Identifier" , "The identifier of this theme. This should be a lowercase, unique string" ) ,
new SingleSetting ( configuration , version , "version" , "Version" ,
"A version to indicate the theme version. Ideal is the date you created or updated the theme" ) ,
new SingleSetting ( configuration , languagesField , "language" ,
"Supported languages" , "Which languages do you want to support in this theme? Type the two letter code representing your language, seperated by <span class='literal-code'>;</span>. For example:<span class='literal-code'>en;nl</span> " ) ,
new SingleSetting ( configuration , new MultiLingualTextFields ( this . languages ) , "title" ,
"Title" , "The title as shown in the welcome message, in the browser title bar, in the more screen, ..." ) ,
2020-09-17 13:13:02 +02:00
new SingleSetting ( configuration , new MultiLingualTextFields ( this . languages ) , "shortDescription" , "Short description" ,
"The short description is shown as subtext in the social preview and on the 'more screen'-buttons. It should be at most one sentence of around ~25words" ) ,
2020-08-31 02:59:47 +02:00
new SingleSetting ( configuration , new MultiLingualTextFields ( this . languages , true ) ,
2020-09-17 13:13:02 +02:00
"description" , "Description" , "The description is shown in the welcome-message when opening MapComplete. It is a small text welcoming users" ) ,
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , new TextField ( { placeholder : "URL to icon" } ) , "icon" ,
2020-08-31 02:59:47 +02:00
"Icon" , "A visual representation for your theme; used as logo in the welcomeMessage. If your theme is official, used as favicon and webapp logo" ,
{
showIconPreview : true
} ) ,
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , ValidatedTextField . NumberInput ( "nat" , n = > n < 23 ) , "startZoom" , "Initial zoom level" ,
2020-08-31 02:59:47 +02:00
"When a user first loads MapComplete, this zoomlevel is shown." + locationRemark ) ,
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , ValidatedTextField . NumberInput ( "float" , n = > ( n < 90 && n > - 90 ) ) , "startLat" , "Initial latitude" ,
2020-08-31 02:59:47 +02:00
"When a user first loads MapComplete, this latitude is shown as location." + locationRemark ) ,
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , ValidatedTextField . NumberInput ( "float" , n = > ( n < 180 && n > - 180 ) ) , "startLon" , "Initial longitude" ,
2020-08-31 02:59:47 +02:00
"When a user first loads MapComplete, this longitude is shown as location." + locationRemark ) ,
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , ValidatedTextField . NumberInput ( "pfloat" , n = > ( n < 0.5 ) ) , "widenFactor" , "Query widening" ,
2020-08-31 02:59:47 +02:00
"When a query is run, the data within bounds of the visible map is loaded.\n" +
"However, users tend to pan and zoom a lot. It is pretty annoying if every single pan means a reloading of the data.\n" +
"For this, the bounds are widened in order to make a small pan still within bounds of the loaded data.\n" +
"IF widenfactor is 0, this feature is disabled. A recommended value is between 0.5 and 0.01 (the latter for very dense queries)" ) ,
2020-09-25 12:44:04 +02:00
new SingleSetting ( configuration , new TextField ( { placeholder : "URL to social image" } ) , "socialImage" ,
2020-08-31 02:59:47 +02:00
"og:image (aka Social Image)" , "<span class='alert'>Only works on incorporated themes</span>" +
"The Social Image is set as og:image for the HTML-site and helps social networks to show a preview" , { showIconPreview : true } )
] , currentSetting ) ;
this . panel = new Combine ( [
"<h3>General theme settings</h3>" ,
settingsTable
] ) ;
}
InnerRender ( ) : string {
return this . panel . Render ( ) ;
}
}