INIT()

in client/client/app/components/ngbProjectInfoPanel/ngbProjectInfo/ngbProjectSummary/ngbProjectSummary.controller.js [51:140]


    INIT() {
        if (!this.projectContext.tracks)
            return;

        const files = [];
        const items = this.projectContext.tracks;
        const datasetsId = items.reduce((datasetsID, item) => {
            const id = item && item.project ? item.project.id : null;
            if (id) {
                if (!datasetsID.includes(id)) {
                    datasetsID.push(id);
                }
            }
            return datasetsID;
        }, []);
        this.datasets = this.projectContext.datasets.filter(project => datasetsId.includes(project.id)).map(dataset => {
            dataset.metadata = sortObjectByKeyValue(dataset.metadata);
            return dataset;
        });
        for (const item of items) {
            let added = false;
            const name = this.getTrackFileName(item);
            const customName = this.getCustomName(item) || '';
            const annotationFiles = this.projectContext.reference && this.projectContext.reference.annotationFiles;
            let metadata = {};
            if (
                !annotationFiles || !annotationFiles.some(el => el.id === item.id && el.format === item.format)
            ) {
                metadata = sortObjectByKeyValue(item.metadata);
            } else if (
                this.projectContext &&
                this.projectContext.datasets &&
                this.projectContext.datasets.length > 0
            ) {
                const metadataObj = this.datasets.reduce((result, dataset) => {
                    const [itemInfo] = dataset.items
                        .filter(dsItem => dsItem.format === item.format && dsItem.id === item.id);
                    if (itemInfo) {
                        result = itemInfo.metadata;
                    }
                    return result;
                }, {});
                metadata = sortObjectByKeyValue(metadataObj);
            }
            for (const file of files) {
                if (file.type === item.format) {
                    if (!file.names.some((nameObj) => nameObj.name === name && nameObj.id === item.id)) {
                        file.names.push({
                            customName,
                            name,
                            metadata,
                            id: item.id || item.name,
                            track: item
                        });
                    }
                    added = true;
                    break;
                }
            }
            if (!added) {
                files.push({
                    names: [{
                        customName,
                        name,
                        metadata,
                        id: item.id || item.name,
                        track: item
                    }],
                    type: item.format,
                });
            }
        }
        files.forEach(f => {
            f.names.sort((a, b) => {
                const {customName: aCustomName, name: aName} = a;
                const {customName: bCustomName, name: bName} = b;
                const aDisplayName = (aCustomName || aName).toLowerCase();
                const bDisplayName = (bCustomName || bName).toLowerCase();
                if (aDisplayName > bDisplayName) {
                    return 1;
                }
                if (aDisplayName < bDisplayName) {
                    return -1;
                }
                return 0;
            });
        });
        this.files = files;
        this.checkHeatmapConsistency(this.currentHeatmapId, this.files.filter(this.isHeatmapSelector));
    }