• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

skmtc / skmtc / 18418169259

10 Oct 2025 08:53PM UTC coverage: 37.704% (-0.2%) from 37.945%
18418169259

push

github

dmitrigrabov
Remove serve test

406 of 486 branches covered (83.54%)

Branch coverage included in aggregate %.

4186 of 11693 relevant lines covered (35.8%)

11.14 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

9.68
/deno/cli/components/AddGeneratorView.tsx
1
import React from 'react'
3✔
2
import { type ViewStateAddGenerator, useSkmtc } from '@/components/SkmtcContext.tsx'
3✔
3
import { Project } from '@/lib/project.ts'
3✔
4
import type { RemoteProject } from '@/lib/remote-project.ts'
5
import { useMemo, useState, useEffect } from 'react'
3✔
6
import { SelectTask } from './SelectTask.tsx'
3✔
7
import invariant from 'tiny-invariant'
3✔
8
import type { Task } from './TaskContext.tsx'
9
import { TaskListView } from './TaskListView.tsx'
3✔
10
import { TaskProvider } from './TaskContext.tsx'
3✔
11
import { StringTask } from './StringTask.tsx'
3✔
12

13
type AddGeneratorViewProps = {
14
  project: Project | RemoteProject
15
  view: ViewStateAddGenerator
16
}
17

18
export const AddGeneratorView = ({ project, view }: AddGeneratorViewProps) => {
×
19
  const { dispatch, dispatchMessage, state } = useSkmtc()
×
20

21
  const [adding, setAdding] = useState(false)
×
22
  const username = state.session?.user.user_metadata.user_name
×
23

24
  // Execute add generator when all inputs are collected
25
  useEffect(() => {
×
26
    if (view.generatorName && view.generatorType && project instanceof Project && !adding) {
×
27
      setAdding(true)
×
28

29
      project
×
30
        .addGenerator({ moduleName: view.generatorName, type: view.generatorType, username })
×
31
        .then(() => {
×
32
          dispatchMessage({ success: `Generator "${view.generatorName}" created successfully` })
×
33
        })
×
34
        .catch(error => {
×
35
          console.error(error)
×
36

37
          dispatchMessage({ error: `Failed to add generator "${view.generatorName}"` })
×
38
        })
×
39
        .finally(() => {
×
40
          setAdding(false)
×
41
          dispatch({ type: 'set-view', payload: { page: 'project', projectName: project.name } })
×
42
        })
×
43
    }
×
44
  }, [view.generatorName, view.generatorType, adding])
×
45

46
  const tasks: Task[] = [
×
47
    {
×
48
      key: 'generator-type-task',
×
49
      include: true,
×
50
      render: () => <GeneratorTypeTask />
×
51
    },
×
52
    {
×
53
      key: 'generator-name-task',
×
54
      include: true,
×
55
      render: () => <GeneratorNameTask />
×
56
    }
×
57
  ]
×
58

59
  return (
×
60
    <TaskProvider
×
61
      tasks={tasks}
×
62
      leave={() => {
×
63
        if (state.interactive) {
×
64
          dispatch({ type: 'set-view', payload: { page: 'project', projectName: project.name } })
×
65
        } else {
×
66
          dispatch({ type: 'set-view', payload: { page: 'exit' } })
×
67
        }
×
68
      }}
×
69
    >
70
      <TaskListView />
×
71
    </TaskProvider>
72
  )
73
}
×
74

75
const GeneratorTypeTask = () => {
×
76
  const { state, dispatch } = useSkmtc()
×
77

78
  return (
×
79
    <SelectTask
×
80
      prompt="Generator type"
×
81
      options={[
×
82
        { label: 'operation', value: 'operation' },
×
83
        { label: 'model', value: 'model' }
×
84
      ]}
×
85
      setValue={value => {
×
86
        const { view } = state
×
87

88
        invariant(view.page === 'create-generator', 'Generator type is required')
×
89

90
        dispatch({
×
91
          type: 'set-view',
×
92
          payload: {
×
93
            ...view,
×
94
            generatorType: value as 'operation' | 'model'
×
95
          }
×
96
        })
×
97
      }}
×
98
    />
99
  )
100
}
×
101

102
const GeneratorNameTask = () => {
×
103
  const { state, dispatch } = useSkmtc()
×
104

105
  return (
×
106
    <StringTask
×
107
      prompt="Generator name"
×
108
      setValue={value => {
×
109
        const { view } = state
×
110

111
        invariant(view.page === 'create-generator', 'Generator name is required')
×
112

113
        dispatch({
×
114
          type: 'set-view',
×
115
          payload: {
×
116
            ...view,
×
117
            generatorName: value
×
118
          }
×
119
        })
×
120
      }}
×
121
    />
122
  )
123
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc