forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {Review} from "../../Logic/Web/Review";
 | 
						|
import Combine from "../Base/Combine";
 | 
						|
import {FixedUiElement} from "../Base/FixedUiElement";
 | 
						|
import Translations from "../i18n/Translations";
 | 
						|
import {Utils} from "../../Utils";
 | 
						|
import BaseUIElement from "../BaseUIElement";
 | 
						|
import Img from "../Base/Img";
 | 
						|
 | 
						|
export default class SingleReview extends Combine {
 | 
						|
 | 
						|
    constructor(review: Review) {
 | 
						|
        const d = review.date;
 | 
						|
        super(
 | 
						|
            [
 | 
						|
                new Combine([
 | 
						|
                    SingleReview.GenStars(review.rating)
 | 
						|
                ]),
 | 
						|
                new FixedUiElement(review.comment),
 | 
						|
                new Combine([
 | 
						|
                    new Combine([
 | 
						|
 | 
						|
                        new FixedUiElement(review.author).SetClass("font-bold"),
 | 
						|
                        review.affiliated ? Translations.t.reviews.affiliated_reviewer_warning : "",
 | 
						|
                    ]).SetStyle("margin-right: 0.5em"),
 | 
						|
                    new FixedUiElement(`${d.getFullYear()}-${Utils.TwoDigits(d.getMonth() + 1)}-${Utils.TwoDigits(d.getDate())} ${Utils.TwoDigits(d.getHours())}:${Utils.TwoDigits(d.getMinutes())}`)
 | 
						|
                        .SetClass("subtle-lighter")
 | 
						|
                ]).SetClass("flex mb-4 justify-end")
 | 
						|
 | 
						|
            ]
 | 
						|
        );
 | 
						|
        this.SetClass("block p-2 m-4 rounded-xl subtle-background review-element");
 | 
						|
        if (review.made_by_user.data) {
 | 
						|
            this.SetClass("border-attention-catch")
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static GenStars(rating: number): BaseUIElement {
 | 
						|
        if (rating === undefined) {
 | 
						|
            return Translations.t.reviews.no_rating;
 | 
						|
        }
 | 
						|
        if (rating < 10) {
 | 
						|
            rating = 10;
 | 
						|
        }
 | 
						|
        const scoreTen = Math.round(rating / 10);
 | 
						|
        return new Combine([
 | 
						|
            ...Utils.TimesT(scoreTen / 2, _ => new Img('./assets/svg/star.svg').SetClass("'h-8 w-8 md:h-12")),
 | 
						|
            scoreTen % 2 == 1 ? new Img('./assets/svg/star_half.svg').SetClass('h-8 w-8 md:h-12') : undefined
 | 
						|
        ]).SetClass("flex w-max")
 | 
						|
    }
 | 
						|
 | 
						|
} |