import type { Card, IconProps, HTMLChakraProps} from '@chakra-ui/react'; import { Span } from '@chakra-ui/react'; import type {PlayApiCommonDetailed} from '../../core/Api'; import { type LifecycleStep, QUEUE_STATUS_COMPLETED, QUEUE_STATUS_FAILED } from '../../core/Atomic'; export const cardHeaderSeparator: Card.HeaderProps = { borderBottomWidth: "1px", paddingBottom: "2" }; export const timelineTextFormatting: HTMLChakraProps<"span"> = { //textAlign: "left", textWrap: "balance" } export const timelineIconProps: IconProps = { fontSize: 'md' } export const TimelineItemSummaryText = (props: HTMLChakraProps<"span"> & {children: React.ReactNode}) => {props.children} export const activityTransformHasIssue = (steps: LifecycleStep[]): 'warn' | 'error' | undefined => { for(const step of steps) { if(step.flowKnownState === 'prereq') { return 'warn'; } if(step.flowKnownState === 'skip') { continue; } if(step.error !== undefined && step.error !== null && Object.keys(step.error).length > 0) { return 'error'; } } return undefined; } export const activityTimelineHasIssue = (activity: PlayApiCommonDetailed): 'warn' | 'error' | undefined => { const { queueStates = [], play: { lifecycle = [], scrobble: { error: scrobbleError, warnings: scrobbleWarnings = [] } = {}, } = {}, } = activity; const transformIssue = activityTransformHasIssue(lifecycle); if(transformIssue !== undefined) { return transformIssue; } if (scrobbleError !== undefined) { return 'error'; } if(scrobbleWarnings.length > 0) { return 'warn'; } if (queueStates.some(x => x.queueStatus === QUEUE_STATUS_FAILED) && !queueStates.some(x => x.queueStatus === QUEUE_STATUS_COMPLETED)) { return 'error'; } return undefined; }