Mini Kabibi Habibi

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

"use strict";

DXWorkout.createExerciseGroupViewModel = function(allGroups) {
    var PATTERNS = [
            { name: "Standard set", count: 1 },
            { name: "Superset / Compound set", count: 2 },
            { name: "Giant set", count: 3 }
        ],
        pattern,
        restInterval = ko.observable(60),
        exercises = ko.observableArray();

    function exerciseViewModelFromData(data) {
        var vm = DXWorkout.createExerciseViewModel();
        vm.fromJS(data);
        return vm;
    }

    function fromJS(data) {
        restInterval(data.restInterval);
        exercises($.map(data.exercises, exerciseViewModelFromData));
    }

    function toJS() {
        return {
            pattern: pattern(),
            restInterval: restInterval(),
            exercises: $.map(exercises(), function(item) { return item.toJS(); })
        };
    }

    function canDelete() {
        return allGroups().length > 1;
    };

    function handleAddExerciseGroup() {
        var context = ko.contextFor(event.target || event.srcElement);
        var index = context.$index() + 1;

        var newGroup = DXWorkout.createExerciseGroupViewModel(allGroups);
        newGroup.adding = true;
        allGroups.splice(index, 0, newGroup);
    }

    function handleDeleteExerciseGroup() {
        var context = ko.contextFor(event.target || event.srcElement);
        var index = context.$index();

        allGroups.splice(index, 1);
    }

    pattern = ko.computed({
        read: function() {
            return exercises().length;
        },

        write: function(newCount) {
            var prevCount = exercises().length,
                diff = newCount - prevCount,
                i;

            if(!diff)
                return;

            for(i = 0; i < Math.abs(diff) ; i++) {
                if(diff > 0) {
                    var exercise = DXWorkout.createExerciseViewModel();
                    exercise.fromJS({
                        sets: [{ }]
                    });
                    exercises.push(exercise);
                } else {
                    exercises.pop();
                }
            }
        }
    });

    return {
        PATTERNS: PATTERNS,

        pattern: pattern,
        restInterval: restInterval,
        exercises: exercises,            

        canDelete: canDelete,
        handleAddExerciseGroup: handleAddExerciseGroup,
        handleDeleteExerciseGroup: handleDeleteExerciseGroup,

        toJS: toJS,
        fromJS: fromJS
    };
};