summaryrefslogtreecommitdiffstats
path: root/static/config-manager.js
blob: edb46b2b5f77deeed02f5daff2d221e8ac998ade (plain) (blame)
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
/* jshint esversion: 2024, module: true */

import { ApiClient } from './api-client.js';
import { ValidationState } from './enums.js';

/**
 * Static Configuration Manager for handling config files
 * @class ConfigManager
 */
class ConfigManager {
    /**
     * Refresh configuration file list
     * @static
     * @returns {Promise<Array>} Array of file names
     */
    static async refreshConfigs() {
        try {
            const data = await ApiClient.getConfigFiles();
            return data.files || [];
        } catch (error) {
            throw new Error(`Failed to list configs: ${error.message}`);
        }
    }

    /**
     * Load selected configuration file
     * @static
     * @param {string} name - File name
     * @returns {Promise<string>} File content
     */
    static async loadConfig(name) {
        try {
            return await ApiClient.getConfigFile(name);
        } catch (error) {
            throw new Error(`Failed to load: ${error.message}`);
        }
    }

    /**
     * Validate current configuration
     * @static
     * @param {string} name - File name
     * @param {string} content - File content
     * @returns {Promise<Object>} Validation result
     */
    static async validateConfig(name, content) {
        try {
            return await ApiClient.validateConfig(name, content);
        } catch (error) {
            throw new Error(`Validation failed: ${error.message}`);
        }
    }

    /**
     * Save current configuration
     * @static
     * @param {string} name - File name
     * @param {string} content - File content
     * @param {boolean} restart - Restart service
     * @returns {Promise<Object>} Save result
     */
    static async saveConfig(name, content, restart) {
        try {
            return await ApiClient.saveConfig(name, content, restart);
        } catch (error) {
            throw new Error(`Save failed: ${error.message}`);
        }
    }

    /**
     * Get validation state class
     * @static
     * @param {Symbol} state - Validation state
     * @returns {string} CSS class
     */
    static getValidationClass(state) {
        switch (state) {
            case ValidationState.SUCCESS: return 'validation-success';
            case ValidationState.ERROR: return 'validation-error';
            case ValidationState.PENDING: return 'validation-pending';
            default: return '';
        }
    }

    /**
     * Get validation message
     * @static
     * @param {Symbol} state - Validation state
     * @param {string} [message] - Additional message
     * @returns {string} Validation message
     */
    static getValidationMessage(state, message = '') {
        switch (state) {
            case ValidationState.SUCCESS: return '✓ Configuration is valid';
            case ValidationState.ERROR: return `${message || 'Validation failed'}`;
            case ValidationState.PENDING: return 'Validating...';
            default: return '';
        }
    }
}

export { ConfigManager };