import cs from 'classnames'
import _ from 'lodash'
import { observer } from 'mobx-react'
import React from 'react'
import { FileDetails } from '@packages/ui-components'
import appState, { AppState } from '../lib/app-state'
import Command from '../commands/command'
import Collapsible from '../collapsible/collapsible'
import HookModel, { HookName } from './hook-model'
import FileOpener from '../lib/file-opener'
export interface HookHeaderProps {
model: HookModel
number?: number
}
const HookHeader = ({ model, number }: HookHeaderProps) => (
{model.hookName} {number && `(${number})`} (failed)
)
export interface HookOpenInIDEProps {
invocationDetails: FileDetails
}
const HookOpenInIDE = ({ invocationDetails }: HookOpenInIDEProps) => (
Open in IDE
)
const StudioNoCommands = () => (
Interact with your site to add test commands. Right click to add assertions.
)
export interface HookProps {
model: HookModel
showNumber: boolean
}
const Hook = observer(({ model, showNumber }: HookProps) => (
}
headerClass='hook-header'
headerExtras={model.invocationDetails && }
isOpen={true}
>
{_.map(model.commands, (command) => )}
{model.showStudioPrompt && }
))
export interface HooksModel {
hooks: HookModel[]
hookCount: { [name in HookName]: number }
state: string
}
export interface HooksProps {
state?: AppState
model: HooksModel
}
const Hooks = observer(({ state = appState, model }: HooksProps) => (
{_.map(model.hooks, (hook) => {
if (hook.commands.length || (hook.isStudio && state.studioActive && model.state === 'passed')) {
return 1} />
}
return null
})}
))
export { Hook, HookHeader }
export default Hooks