aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/setup/components/SortableModuleFileList.js
blob: f52c2513610c81e92e087c8ce9f07d07759e9bd6 (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
118
119
120
121
122
123
124
125
126
/*
 * Copyright © 2016-2018 European Support Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import React from 'react';
import isEqual from 'lodash/isEqual';
import i18n from 'nfvo-utils/i18n/i18n.js';
import SortableListItem from './SortableListItem.js';
import { fileTypes } from '../HeatSetupConstants.js';

import Button from 'sdc-ui/lib/react/Button.js';
import ModuleFile from './ModuleFile.js';

class SortableModuleFileList extends React.Component {
    state = {
        draggingIndex: null,
        data: this.props.modules
    };

    componentDidUpdate() {
        if (!isEqual(this.state.data, this.props.modules)) {
            /* eslint-disable-next-line */
            this.setState({
                data: this.props.modules
            });
        }
    }

    render() {
        let {
            unassigned,
            onModuleRename,
            onModuleDelete,
            onModuleAdd,
            onBaseAdd,
            onModuleFileTypeChange,
            onToggleVolFilesDisplay,
            isBaseExist,
            isReadOnlyMode
        } = this.props;
        const childProps = module => ({
            module,
            onModuleRename,
            onModuleDelete,
            onModuleFileTypeChange: (value, type) => {
                if (
                    type === fileTypes.VOL.label ||
                    type === fileTypes.VOL_ENV.label
                ) {
                    onToggleVolFilesDisplay({ module, value: false });
                }
                onModuleFileTypeChange({ module, value, type });
            },

            files: unassigned,
            displayVolumes: Boolean(
                module.vol || module.volEnv || module.showVolFiles
            ),
            onToggleVolFilesDisplay: value =>
                onToggleVolFilesDisplay({ module, value })
        });

        let listItems = this.state.data.map(function(item, i) {
            return (
                <SortableListItem
                    key={i}
                    updateState={data => this.setState(data)}
                    items={this.state.data}
                    draggingIndex={this.state.draggingIndex}
                    sortId={i}
                    outline="list">
                    <ModuleFile
                        {...childProps(item)}
                        isReadOnlyMode={this.props.isReadOnlyMode}
                    />
                </SortableListItem>
            );
        }, this);

        return (
            <div
                className={`modules-list-wrapper ${
                    listItems.length > 0 ? 'modules-list-wrapper-divider' : ''
                }`}>
                <div className="modules-list-header">
                    {!isBaseExist && (
                        <div>
                            <Button
                                btnType="link"
                                onClick={onBaseAdd}
                                disabled={
                                    isReadOnlyMode || unassigned.length === 0
                                }>
                                {i18n('Add Base')}
                            </Button>
                        </div>
                    )}
                    <div>
                        <Button
                            btnType="link"
                            onClick={onModuleAdd}
                            disabled={
                                isReadOnlyMode || unassigned.length === 0
                            }>
                            {i18n('Add Module')}
                        </Button>
                    </div>
                </div>
                {listItems.length > 0 && <ul>{listItems}</ul>}
            </div>
        );
    }
}

export default SortableModuleFileList;