Opetushallitus/eperusteet-frontend-utils

View on GitHub
components/lokalisointi/kieli.ts

Summary

Maintainability
A
35 mins
Test Coverage
module KieliService {
    let _$rootScope, _$state, _$stateParams, _$translate;

    export const init = ($rootScope, $state, $stateParams, $translate) => {
       _$rootScope = $rootScope;
       _$state = $state;
       _$stateParams = $stateParams;
       _$translate = $translate;
    };

    export let SISALTOKIELET = [
        "fi",
        "sv",
        "se",
        "en"
    ];

    let
        sisaltokieli = "fi",
        uikieli = "fi",
        stateInited = false;

    export let SISALTOKIELETMAP = {};

    export const orderFn = (kielikoodi) => _.indexOf(SISALTOKIELET, kielikoodi);
    export const isValidKielikoodi = (kielikoodi) => _.indexOf(SISALTOKIELET, kielikoodi) > -1;
    export const getSisaltokieli = () => sisaltokieli;
    export const getSisaltokielet = () => SISALTOKIELET;
    export const getUiKieli = () => uikieli;
    export const UIKIELET = [
        "fi",
        "sv",
        "en"
    ];

    export const setSisaltokielet = (kielikoodit) => {
        SISALTOKIELET = kielikoodit;
        SISALTOKIELETMAP = _.zipObject(kielikoodit, _.map(kielikoodit, _.constant(true)));
        _$rootScope.$broadcast("update:sisaltokielet");
    };

    export const setSisaltokieli = (kielikoodi) => {
        if (_.indexOf(SISALTOKIELET, kielikoodi) > -1) {
            const old = sisaltokieli;
            sisaltokieli = kielikoodi;
            if (old !== kielikoodi) {
                _$rootScope.$broadcast("changed:sisaltokieli", kielikoodi);
            }
        }
    };

    export const setUiKieli = (kielikoodi, doStateChange?) => {
        if (isValidKielikoodi(kielikoodi) &&
                (kielikoodi !== uikieli || (stateInited && _$stateParams.lang !== kielikoodi))) {
            if (_.isUndefined(doStateChange) || doStateChange === true) {
                _$state.go(_$state.current.name, _.merge(_$stateParams, {lang: kielikoodi}), {reload: true});
            }
            uikieli = kielikoodi;
            moment.lang(kielikoodi);
            _$translate.use(kielikoodi);
            _$rootScope.$broadcast("changed:uikieli", kielikoodi);
        }
    };

    export const validoi = (olio) => {
        let errors = [];
        if (!olio) {
            errors.push("tekstikentalla-ei-lainkaan-sisaltoa");
        }
        else {
            _.each(SISALTOKIELET, (kieli) => {
                if (!olio[kieli]) {
                    errors.push("tekstikentalla-ei-sisaltoa-kielella-" + kieli);
                }
            });
        }
        return errors;
    };
}

angular.module("app")
.run(($injector) => $injector.invoke(KieliService.init));