forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			88 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import Combine from "../Base/Combine";
							 | 
						||
| 
								 | 
							
								import * as welcome_messages from "../../assets/welcome_message.json"
							 | 
						||
| 
								 | 
							
								import BaseUIElement from "../BaseUIElement";
							 | 
						||
| 
								 | 
							
								import {FixedUiElement} from "../Base/FixedUiElement";
							 | 
						||
| 
								 | 
							
								import MoreScreen from "./MoreScreen";
							 | 
						||
| 
								 | 
							
								import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts";
							 | 
						||
| 
								 | 
							
								import Translations from "../i18n/Translations";
							 | 
						||
| 
								 | 
							
								import Title from "../Base/Title";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default class FeaturedMessage extends Combine {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    constructor() {
							 | 
						||
| 
								 | 
							
								        const now = new Date()
							 | 
						||
| 
								 | 
							
								        let welcome_message = undefined;
							 | 
						||
| 
								 | 
							
								        for (const wm of FeaturedMessage.WelcomeMessages()) {
							 | 
						||
| 
								 | 
							
								            if (wm.start_date >= now) {
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (wm.end_date <= now) {
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								           
							 | 
						||
| 
								 | 
							
								            if (welcome_message !== undefined) {
							 | 
						||
| 
								 | 
							
								                console.warn("Multiple applicable messages today:", welcome_message.featured_theme)
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            welcome_message = wm;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        welcome_message = welcome_message ?? undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        super([FeaturedMessage.CreateFeaturedBox(welcome_message)]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static WelcomeMessages(): { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] {
							 | 
						||
| 
								 | 
							
								        const all_messages: { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] = []
							 | 
						||
| 
								 | 
							
								        console.log("Constructing the list...", welcome_messages)
							 | 
						||
| 
								 | 
							
								        for (const i in welcome_messages) {
							 | 
						||
| 
								 | 
							
								            console.log(i)
							 | 
						||
| 
								 | 
							
								            if (isNaN(Number(i))) {
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            console.log("> ", i)
							 | 
						||
| 
								 | 
							
								            const wm = welcome_messages[i]
							 | 
						||
| 
								 | 
							
								            console.log(wm)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (wm === null) {
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (AllKnownLayouts.allKnownLayouts.get(wm.featured_theme) === undefined) {
							 | 
						||
| 
								 | 
							
								                console.error("Unkown featured theme for ", wm)
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (!wm.message) {
							 | 
						||
| 
								 | 
							
								                console.error("Featured message is missing for", wm)
							 | 
						||
| 
								 | 
							
								                continue
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            all_messages.push({
							 | 
						||
| 
								 | 
							
								                start_date: new Date(wm.start_date),
							 | 
						||
| 
								 | 
							
								                end_date: new Date(wm.end_date),
							 | 
						||
| 
								 | 
							
								                message: wm.message,
							 | 
						||
| 
								 | 
							
								                featured_theme: wm.featured_theme
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return all_messages
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static CreateFeaturedBox(welcome_message: { message: string, featured_theme?: string }): BaseUIElement {
							 | 
						||
| 
								 | 
							
								        const els: BaseUIElement[] = []
							 | 
						||
| 
								 | 
							
								        if (welcome_message === undefined) {
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const title = new Title(Translations.t.index.featuredThemeTitle.Clone())
							 | 
						||
| 
								 | 
							
								        const msg = new FixedUiElement(welcome_message.message).SetClass("link-underline font-lg")
							 | 
						||
| 
								 | 
							
								        els.push(new Combine([title, msg]).SetClass("m-4"))
							 | 
						||
| 
								 | 
							
								        if (welcome_message.featured_theme !== undefined) {
							 | 
						||
| 
								 | 
							
								            els.push(MoreScreen.createLinkButton({}, AllKnownLayouts.allKnownLayouts.get(welcome_message.featured_theme))
							 | 
						||
| 
								 | 
							
								                .SetClass("m-4 self-center md:w-160")
							 | 
						||
| 
								 | 
							
								                .SetStyle("height: min-content;"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return new Combine(els).SetClass("border-2 border-grey-400 rounded-xl flex flex-col md:flex-row");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |