stavalfi / jstream

Represent graphs, differently https://stavalfi.github.io/jstream/
2 stars 0 forks source link

redux state structure - proposal #4

Closed stavalfi closed 5 years ago

stavalfi commented 5 years ago

for example:

const initialState = {
    activeWorkflowsDetails: [
        {
            workflowId: "2873ye3787e32",
            workflow: "ref to the actual workflow",
            workflowStatuses: [
                // completed statuses only.
                {
                    flowName: "a",
                    flowStatus: "1 or 2 or 3",
                    flowStatusCompleteTime: "time in milliseconds"
                }
            ]
        }
    ],
    nonActiveWorkflowsDetails: [
        {}
    ]
};
stavalfi commented 5 years ago

Update:

Notes:

Examples of active workflows (status of workflow is equal to started):

started workflow

// workflow1: flow1
{
    workflowId: '1',
    workflowName: 'workflow1',
    workflowStatusesHistory: [
        {
            status: workflowStatuses.started,
            time: 123
        }
    ],
    head: Optional.of({
        flowDetails: {
            flowName: 'flow1',
            flowStatus: flowStatuses.started
        },
        nodeStatusesHistory: [
            {
                status: activeFlowStatus.notStarted,
                time: 123
            },
            {
                status: activeFlowStatus.shouldStart,
                time: 123
            },
            {
                status: activeFlowStatus.completed,
                time: 124
            }
        ],
        childs: [
            {
                flowDetails: {
                    flowName: 'flow1',
                    flowStatus: flowStatuses.selfResolved
                },
                nodeStatusesHistory: [
                    {
                        status: activeFlowStatus.notStarted,
                        time: 123
                    },
                    {
                        status: activeFlowStatus.shouldStart,
                        time: 124
                    },
                ],
                childs: [
                    {
                        flowDetails: {
                            flowName: 'flow1',
                            flowStatus: flowStatuses.completed
                        },
                        nodeStatusesHistory: [
                            {
                                status: activeFlowStatus.notStarted,
                                time: 123
                            }
                        ],
                        childs: []
                    }
                ]
            }
        ]
    })
}

Examples of non-active workflows (status of workflow is NOT equal to started):

completed workflow:

// workflow1: flow1
{
    workflowId: '1',
    workflowName: 'workflow1',
    workflowStatusesHistory: [
        {
            status: workflowStatuses.started,
            time: 123
        },
        {
            status: workflowStatuses.completed,
            time: 127
        }
    ],
    head: Optional.of({
        flowDetails: {
            flowName: 'flow1',
            flowStatus: flowStatuses.started
        },
        nodeStatusesHistory: [
            {
                status: activeFlowStatus.notStarted,
                time: 123
            },
            {
                status: activeFlowStatus.shouldStart,
                time: 123
            },
            {
                status: activeFlowStatus.completed,
                time: 124
            }
        ],
        childs: [
            {
                flowDetails: {
                    flowName: 'flow1',
                    flowStatus: flowStatuses.selfResolved
                },
                nodeStatusesHistory: [
                    {
                        status: activeFlowStatus.notStarted,
                        time: 123
                    },
                    {
                        status: activeFlowStatus.shouldStart,
                        time: 124
                    },
                    {
                        status: activeFlowStatus.completed,
                        time: 125
                    }
                ],
                childs: [
                    {
                        flowDetails: {
                            flowName: 'flow1',
                            flowStatus: flowStatuses.completed
                        },
                        nodeStatusesHistory: [
                            {
                                status: activeFlowStatus.notStarted,
                                time: 123
                            },
                            {
                                status: activeFlowStatus.shouldStart,
                                time: 125
                            },
                            {
                                status: activeFlowStatus.completed,
                                time: 126
                            }
                        ],
                        childs: []
                    }
                ]
            }
        ]
    })
}

canceled workflow:

// workflow1: flow1
{
    workflowId: '1',
    workflowName: 'workflow1',
    workflowStatusesHistory: [
        {
            status: workflowStatuses.started,
            time: 123
        },
        {
            status: workflowStatuses.canceled,
            time: 125
        }
    ],
    head: Optional.of({
        flowDetails: {
            flowName: 'flow1',
            flowStatus: flowStatuses.started
        },
        nodeStatusesHistory: [
            {
                status: activeFlowStatus.notStarted,
                time: 123
            },
            {
                status: activeFlowStatus.shouldStart,
                time: 123
            },
            {
                status: activeFlowStatus.completed,
                time: 124
            }
        ],
        childs: [
            {
                flowDetails: {
                    flowName: 'flow1',
                    flowStatus: flowStatuses.selfResolved
                },
                nodeStatusesHistory: [
                    {
                        status: activeFlowStatus.notStarted,
                        time: 123
                    },
                    {
                        status: activeFlowStatus.shouldStart,
                        time: 124
                    },
                    {
                        status: activeFlowStatus.canceled,
                        time: 125
                    }
                ],
                childs: [
                    {
                        flowDetails: {
                            flowName: 'flow1',
                            flowStatus: flowStatuses.completed
                        },
                        nodeStatusesHistory: [
                            {
                                status: activeFlowStatus.notStarted,
                                time: 123
                            },
                            {
                                status: activeFlowStatus.canceled,
                                time: 125
                            }
                        ],
                        childs: []
                    }
                ]
            }
        ]
    })
}
stavalfi commented 5 years ago

took a different approach.