aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/view-models/workspace/tabs/inputs/resource-input/resource-inputs-view-model.ts
blob: 49fedd6e21bfc389d9c6bbfa4b69084c241c3dda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
'use strict';
import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
import {ComponentInstance, InstancesInputsOrPropertiesMapData, Resource, PropertyModel, InputModel} from "app/models";
import {ModalsHandler} from "app/utils";

export interface IInputsViewModelScope extends IWorkspaceViewModelScope {
    InstanceInputsProperties:InstancesInputsOrPropertiesMapData; //this is tha map object that hold the selected inputs and the inputs we already used
    vfInstancesList:Array<ComponentInstance>;
    component:Resource;

    onArrowPressed():void;
    getInputPropertiesForInstance(instanceId:string, instance:ComponentInstance):ng.IPromise<boolean> ;
    loadInputPropertiesForInstance(instanceId:string, input:InputModel):ng.IPromise<boolean> ;
    openEditValueModal(input:InputModel):void;
    openEditPropertyModal(property:PropertyModel):void;
}

export class ResourceInputsViewModel {

    static '$inject' = [
        '$scope',
        '$q',
        'ModalsHandler'
    ];

    constructor(private $scope:IInputsViewModelScope, private $q:ng.IQService, private ModalsHandler:ModalsHandler) {
        this.initScope();
        this.$scope.updateSelectedMenuItem();
    }

    private initScope = ():void => {

        this.$scope.InstanceInputsProperties = new InstancesInputsOrPropertiesMapData();
        this.$scope.vfInstancesList = this.$scope.component.componentInstances;

        // Need to cast all inputs to InputModel for the search to work
        let tmpInputs:Array<InputModel> = new Array<InputModel>();
        _.each(this.$scope.component.inputs, (input):void => {
            tmpInputs.push(new InputModel(input));
        });
        this.$scope.component.inputs = tmpInputs;
        // This function is not supported for resource
        //this.$scope.component.getComponentInputs();

        /*
         * When clicking on instance input in the left or right table, this function will load all properties of the selected input
         */
        this.$scope.getInputPropertiesForInstance = (instanceId:string, instance:ComponentInstance):ng.IPromise<boolean> => {
            let deferred = this.$q.defer();
            instance.properties = this.$scope.component.componentInstancesProperties[instanceId];
            deferred.resolve(true);
            return deferred.promise;
        };

        /*
         * When clicking on instance input in the left or right table, this function will load all properties of the selected input
         */
        this.$scope.loadInputPropertiesForInstance = (instanceId:string, input:InputModel):ng.IPromise<boolean> => {
            let deferred = this.$q.defer();

            let onSuccess = (properties:Array<PropertyModel>) => {
                input.properties = properties;
                deferred.resolve(true);
            };

            let onError = () => {
                deferred.resolve(false)
            };

            if (!input.properties) {
                this.$scope.component.getComponentInstanceInputProperties(instanceId, input.uniqueId).then(onSuccess, onError);
            } else {
                deferred.resolve(true);
            }
            return deferred.promise;
        };

        /*
         * When pressing the arrow, we create service inputs from the inputs selected
         */
        this.$scope.onArrowPressed = ():void => {
            let onSuccess = (inputsCreated:Array<InputModel>) => {

                //disabled  all the inputs in the left table
                _.forEach(this.$scope.InstanceInputsProperties, (properties:Array<PropertyModel>) => {
                    _.forEach(properties, (property:PropertyModel) => {
                        property.isAlreadySelected = true;
                    });
                });

                // Adding color to the new inputs (right table)
                _.forEach(inputsCreated, (input) => {
                    input.isNew = true;
                });

                // Removing color to the new inputs (right table)
                setTimeout(() => {
                    _.forEach(inputsCreated, (input) => {
                        input.isNew = false;
                    });
                    this.$scope.$apply();
                }, 3000);
            };

            this.$scope.component.createInputsFormInstances(this.$scope.InstanceInputsProperties).then(onSuccess);
        };

        this.$scope.openEditValueModal = (input:InputModel) => {
            this.ModalsHandler.openEditInputValueModal(input);
        };

        this.$scope.openEditPropertyModal = (property:PropertyModel):void => {
            this.ModalsHandler.openEditPropertyModal(property, this.$scope.component, this.$scope.component.componentInstancesProperties[property.resourceInstanceUniqueId], false).then(() => {
            });
        }
    }
}