IU_Sviridov
@IU_Sviridov
Развиваюсь в направлении web-разработки

Как улучшить модуль обработки дерева?

updateChildren(model, modes) {
        model.get('children').forEach(child => {
            if (child.has('children')) {
                modes.forEach(mode => this[mode.actionName](child, mode));
                this.applyTreeModes(child, modes);
            }
        });
    },

    setCollapsed(model, options) {
        const { value, expandedConfiguration, save, reqres } = options;
        const currentValue = (typeof value === 'boolean') ? value : NavigationItemFactory.getCollapsed(expandedConfiguration, model.get('id'));
        model.set('collapsed', currentValue);
        if (save) {
            reqres.request('configuration:collapsed:save', model);
        }
    },

    setCurrentEdited(model, options) {
        const { value } = options;
        model.set('currentEdited', value);
    },

    setChecked(model, options) {
        const { value } = options;
        model.set('checked', value);
    },

    setFilterChecked(model, options) {
        const { value, filter } = options;
        if (filter.length === 0 || filter.indexOf(model.get('id')) !== -1) {
            model.set('checked', value);
        }
    },

    formSelectedConfiguration(model, options) {
        const { selectedConfiguration } = options;
        if (model.get('checked')) {
            selectedConfiguration.push(model.get('id'));
        }
    }

Модуль для обработки древесной структуры.
Вынесен отдельно, требуется переиспользование кода.

async __editMode() {
        this.model.set('editMode', !this.model.get('editMode'));
        const editMode = this.model.get('editMode');

        if (editMode) {
            await this.reload({ editMode: editMode });
            TreeService.updateChildren(this.model, [
                { actionName: 'setFilterChecked', value: true, filter: this.configuration.selectedConfiguration || [] },
                { actionName: 'setCurrentEdited', value: true },
                { actionName: 'setCollapsed', value: false, save: true, reqres: this.reqres }
            ]);
        } else {
            const selectedConfiguration = [];

            TreeService.updateChildren(this.model, [
                { actionName: 'setCurrentEdited', value: false },
                { actionName: 'formSelectedConfiguration', selectedConfiguration }
            ]);
            this.__applyConfigurationChanges(selectedConfiguration, false);
        }
    }

Пример использования модуля.

Хотелось бы получить оценку с точки зрения:
- дальнейшей поддержки кода (другим разработчиком)
- масштабируемости
- скорости

Что происходит в модуле?
Нужно пройти по children и произвести действия с каждым child (операции не зависимы)
Передается узел дерева / массив. Для каждого child применяются все методы обработки из массива на 1 итерации DFS.

Массив содержит в себе:
- actionName для выбора метода обработки child
- options для child
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы