Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXWorkout/views/
Upload File :
Current File : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXWorkout/views/GoalGraphs.js

"use strict";

DXWorkout.GoalGraphs = function(params) {
    var monthAgo,       
        goalsChartOptions,
        tabOptions,
        selectedTab = ko.observable(0),

        isGoalsDataLoaded = ko.observable(false);

    monthAgo = new Date();
    monthAgo.setMonth(monthAgo.getMonth() - 1);

    goalsChartOptions = {
        series: {
            argumentField: 'goal',
            valueField: 'count',
        },
        tooltip: {
            enabled: true,
            percentPrecision: 1,
            customizeText: function(value) {
                return value.percentText;
            }
        },
        legend: {
            horizontalAlignment: 'center',
            verticalAlignment: 'bottom'
        },
        dataSource: ko.observableArray([])
    };

    function goalDataLoaded(queryResult) {
        var goalsNumberLimit = 5,
            goalsCounts = [],
            i;

        queryResult.sort(function(i, j) {
            return j.items.length - i.items.length;
        });

        for(i = 0; i < queryResult.length; i++) {
            var el = queryResult[i];
            if(i < goalsNumberLimit) {
                goalsCounts.push({
                    goal: el.key || "(unspecified)",
                    count: el.items.length
                });
            } else {
                goalsCounts[goalsNumberLimit - 1].count += el.items.length;
            }
        }

        if(queryResult.length > goalsNumberLimit)
            goalsCounts[goalsNumberLimit - 1].goal = "other";

        goalsChartOptions.dataSource(goalsCounts);
        isGoalsDataLoaded(true);
    }

    tabOptions = {
        items: [
            { text: "Goal" },
            { text: "Weight" }
        ],
        itemClickAction: function(value) {
            if (value.itemData.text === "Weight")
                DXWorkout.app.navigate("WeightGraphs", { root: "true" }); 
        },
        selectedIndex: selectedTab
    };

    return {
        goalsChartOptions: goalsChartOptions,

        isGoalsDataLoaded: isGoalsDataLoaded,

        tabOptions: tabOptions,

        viewShowing: function() {
            isGoalsDataLoaded(false);
            selectedTab(0);
        },

        viewShown: function() {
            var workouts = DXWorkout.workouts(),
                grouped = { },
                result = [ ];

            $.each(workouts, function() {
                if (monthAgo.getTime() > new Date(this.date).getTime())
                    return;

                if (!grouped[this.goal])
                    grouped[this.goal] = [];
                grouped[this.goal].push(this);
            });

            $.each(grouped, function(key, value) {
                result.push({ key: key, items: value });
            });

            goalDataLoaded(result);
        },

        goalsChartHasData: function() {
            return goalsChartOptions.dataSource().length;
        }
    };
};