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

skmtc / skmtc / 18428577923

11 Oct 2025 11:06AM UTC coverage: 37.834% (+0.04%) from 37.796%
18428577923

push

github

dmitrigrabov
Clean up cli

406 of 486 branches covered (83.54%)

Branch coverage included in aggregate %.

5 of 58 new or added lines in 13 files covered. (8.62%)

8 existing lines in 3 files now uncovered.

4175 of 11622 relevant lines covered (35.92%)

11.2 hits per line

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

12.5
/deno/cli/components/RemoveGeneratorView.tsx
1
import React from 'react'
3✔
2
import { type ViewStateRemoveGenerator, 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 { Box, Text } from 'ink'
3✔
6
import { useState } from 'react'
3✔
7
import SelectInput from 'ink-select-input'
3✔
8
import { useShortcut } from './useShortcut.tsx'
3✔
9
import { ConfirmInput } from '@inkjs/ui'
3✔
10

11
type RemoveGeneratorViewProps = {
12
  project: Project | RemoteProject
13
  view: ViewStateRemoveGenerator
14
}
15

16
export const RemoveGeneratorView = ({ project, view }: RemoveGeneratorViewProps) => {
×
17
  const { dispatch, dispatchMessage } = useSkmtc()
×
18
  const [selectedGenerator, setSelectedGenerator] = useState<string | null>(
×
19
    view.generatorName ?? null
×
20
  )
21
  const [confirmed, setConfirmed] = useState(false)
×
22

23
  const generators = project instanceof Project ? project.toGeneratorIds() : []
×
24

25
  useShortcut({
×
26
    key: 'esc',
×
27
    name: project.name,
×
28
    action: (input, key) => {
×
29
      if (key.escape && !selectedGenerator) {
×
30
        dispatch({ type: 'set-view', payload: { page: 'project', projectName: project.name } })
×
31
      }
×
32
    }
×
33
  })
×
34

35
  if (generators.length === 0) {
×
36
    return (
×
37
      <Box flexDirection="column">
×
38
        <Text color="yellow">No generators found to remove</Text>
×
39
      </Box>
40
    )
41
  }
×
42

43
  if (!selectedGenerator) {
×
44
    return (
×
45
      <Box flexDirection="column">
×
46
        <Text>Select generator to remove:</Text>
×
47

48
        <SelectInput
×
49
          items={generators.map(gen => ({ label: gen, value: gen }))}
×
50
          onSelect={item => setSelectedGenerator(item.value)}
×
51
        />
52
      </Box>
53
    )
54
  }
×
55

56
  if (!confirmed) {
×
57
    return (
×
58
      <Box flexDirection="column">
×
59
        <Text>Are you sure you want to remove "{selectedGenerator}"?</Text>
×
60
        <ConfirmInput
×
61
          onConfirm={() => {
×
62
            setConfirmed(true)
×
63
          }}
×
64
          onCancel={() => {
×
65
            dispatch({ type: 'set-view', payload: { page: 'project', projectName: project.name } })
×
66
          }}
×
67
        />
68
      </Box>
69
    )
70
  }
×
71

72
  // Execute removal
73
  if (project instanceof Project) {
×
74
    project
×
NEW
75
      .removeGenerator({ moduleName: selectedGenerator })
×
76
      .then(() => {
×
77
        dispatchMessage({ success: `Generator "${selectedGenerator}" removed successfully` })
×
78
      })
×
79
      .catch(error => {
×
80
        console.error(error)
×
81

82
        dispatchMessage({ error: `Failed to remove generator "${selectedGenerator}"` })
×
83
      })
×
84
      .finally(() => {
×
85
        dispatch({ type: 'set-view', payload: { page: 'project', projectName: project.name } })
×
86
      })
×
87
  }
×
88

89
  return <Box></Box>
×
90
}
×
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