export function getWorkItemDisplayDetails()

in src/EpicRoadmap/redux/selectors/workItemDisplayDetailsSelector.ts [30:108]


export function getWorkItemDisplayDetails(
    rootWorkItemId: number,
    epicTree: IEpicTree,
    dependencyTree: INormalizedDependencyTree,
    pagedWorkItems: IDictionaryNumberTo<WorkItem>,
    workItemStartEndIterations: WorkItemStartEndIteration,
    backlogConfiguration: BacklogConfiguration,
    teamIterations: TeamSettingsIteration[],
    metadata: IWorkItemMetadata,
    highlightedDependency: IHighlightedDependency): IWorkItemDisplayDetails[] {

    if (!metadata || !metadata.workItemTypes || !metadata.workItemStateColors) {
        return [];
    }

    const workItems = epicTree.parentToChildrenMap[rootWorkItemId] || [];
    return workItems.map(workItemId => {
        const workItem = pagedWorkItems[workItemId];
        const workItemTypeName = workItem.fields["System.WorkItemType"];
        const state = workItem.fields["System.State"].toLowerCase();
        const title = workItem.fields["System.Title"];
        const workItemType = metadata.workItemTypes.filter((wit) => wit.name.toLowerCase() === workItemTypeName.toLowerCase())[0];
        let workItemStateColor: WorkItemStateColor = null;

        if (metadata.workItemStateColors[workItemTypeName]) {
            workItemStateColor = metadata.workItemStateColors[workItemTypeName].filter(sc => sc.name.toLowerCase() === state)[0];
        }

        const orderFieldName = backlogConfiguration.backlogFields.typeFields["Order"];
        const effortFieldName = backlogConfiguration.backlogFields.typeFields["Effort"];
        const color = workItemType && workItemType.color ? "#" + (workItemType.color.length > 6 ? workItemType.color.substr(2) : workItemType.color) : "#c2c8d1";
        const order = workItem.fields[orderFieldName] || Number.MAX_VALUE;
        const efforts = workItem.fields[effortFieldName] || 0;
        const iterationDuration = workItemStartEndIterations[workItemId];
        const children = getWorkItemDisplayDetails(
            workItemId,
            epicTree,
            dependencyTree,
            pagedWorkItems,
            workItemStartEndIterations,
            backlogConfiguration,
            teamIterations,
            metadata,
            highlightedDependency);
        const childrenWithNoEfforts = children.filter(c => c.efforts === 0).length;
        const stateCategory = getWorkItemStateCategory(workItemTypeName, state, backlogConfiguration.workItemTypeMappedStates);

        let highlighteSuccessorIcon = false;
        let highlightPredecessorIcon = false;
        if (highlightedDependency.id && highlightedDependency.highlightSuccesors && dependencyTree.allStop[workItem.id]) {
            highlighteSuccessorIcon = dependencyTree.allStop[workItem.id].findIndex(i => i === highlightedDependency.id) !== -1;
        }

        if (highlightedDependency.id && !highlightedDependency.highlightSuccesors && dependencyTree.allPtos[workItem.id]) {
            highlightPredecessorIcon = dependencyTree.allPtos[workItem.id].findIndex(i => i === highlightedDependency.id) !== -1;
        }

        const displayDetails: IWorkItemDisplayDetails = {
            id: workItem.id,
            title,
            color,
            order,
            efforts,
            workItem,
            iterationDuration,
            children,
            isRoot: false,
            workItemStateColor,
            childrenWithNoEfforts,
            isComplete: stateCategory === StateCategory.Completed,
            predecessors: (dependencyTree.allStop[workItem.id] || []).map(i => pagedWorkItems[i]).filter(w => !!w),
            successors: (dependencyTree.allPtos[workItem.id] || []).map(i => pagedWorkItems[i]).filter(w => !!w),
            highlighteSuccessorIcon,
            highlightPredecessorIcon
        };

        return displayDetails;
    });
}