@knpkv/codecommit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +216 -0
- package/dist/package.json +50 -0
- package/dist/src/bin.d.ts +3 -0
- package/dist/src/bin.d.ts.map +1 -0
- package/dist/src/bin.js +204 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/main.d.ts +2 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +25 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/tui/App.d.ts +6 -0
- package/dist/src/tui/App.d.ts.map +1 -0
- package/dist/src/tui/App.js +40 -0
- package/dist/src/tui/App.js.map +1 -0
- package/dist/src/tui/Constants.d.ts +11 -0
- package/dist/src/tui/Constants.d.ts.map +1 -0
- package/dist/src/tui/Constants.js +40 -0
- package/dist/src/tui/Constants.js.map +1 -0
- package/dist/src/tui/ListBuilder.d.ts +32 -0
- package/dist/src/tui/ListBuilder.d.ts.map +1 -0
- package/dist/src/tui/ListBuilder.js +145 -0
- package/dist/src/tui/ListBuilder.js.map +1 -0
- package/dist/src/tui/atoms/actions.d.ts +39 -0
- package/dist/src/tui/atoms/actions.d.ts.map +1 -0
- package/dist/src/tui/atoms/actions.js +149 -0
- package/dist/src/tui/atoms/actions.js.map +1 -0
- package/dist/src/tui/atoms/app.d.ts +42 -0
- package/dist/src/tui/atoms/app.d.ts.map +1 -0
- package/dist/src/tui/atoms/app.js +69 -0
- package/dist/src/tui/atoms/app.js.map +1 -0
- package/dist/src/tui/atoms/index.d.ts +6 -0
- package/dist/src/tui/atoms/index.d.ts.map +1 -0
- package/dist/src/tui/atoms/index.js +7 -0
- package/dist/src/tui/atoms/index.js.map +1 -0
- package/dist/src/tui/atoms/runtime.d.ts +9 -0
- package/dist/src/tui/atoms/runtime.d.ts.map +1 -0
- package/dist/src/tui/atoms/runtime.js +22 -0
- package/dist/src/tui/atoms/runtime.js.map +1 -0
- package/dist/src/tui/atoms/ui.d.ts +103 -0
- package/dist/src/tui/atoms/ui.d.ts.map +1 -0
- package/dist/src/tui/atoms/ui.js +97 -0
- package/dist/src/tui/atoms/ui.js.map +1 -0
- package/dist/src/tui/components/Badge.d.ts +13 -0
- package/dist/src/tui/components/Badge.d.ts.map +1 -0
- package/dist/src/tui/components/Badge.js +48 -0
- package/dist/src/tui/components/Badge.js.map +1 -0
- package/dist/src/tui/components/DetailsView.d.ts +6 -0
- package/dist/src/tui/components/DetailsView.d.ts.map +1 -0
- package/dist/src/tui/components/DetailsView.js +81 -0
- package/dist/src/tui/components/DetailsView.js.map +1 -0
- package/dist/src/tui/components/ErrorBoundary.d.ts +20 -0
- package/dist/src/tui/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/src/tui/components/ErrorBoundary.js +33 -0
- package/dist/src/tui/components/ErrorBoundary.js.map +1 -0
- package/dist/src/tui/components/Footer.d.ts +6 -0
- package/dist/src/tui/components/Footer.d.ts.map +1 -0
- package/dist/src/tui/components/Footer.js +29 -0
- package/dist/src/tui/components/Footer.js.map +1 -0
- package/dist/src/tui/components/Header.d.ts +6 -0
- package/dist/src/tui/components/Header.d.ts.map +1 -0
- package/dist/src/tui/components/Header.js +58 -0
- package/dist/src/tui/components/Header.js.map +1 -0
- package/dist/src/tui/components/ListItemRow.d.ts +13 -0
- package/dist/src/tui/components/ListItemRow.d.ts.map +1 -0
- package/dist/src/tui/components/ListItemRow.js +52 -0
- package/dist/src/tui/components/ListItemRow.js.map +1 -0
- package/dist/src/tui/components/MainList.d.ts +11 -0
- package/dist/src/tui/components/MainList.d.ts.map +1 -0
- package/dist/src/tui/components/MainList.js +124 -0
- package/dist/src/tui/components/MainList.js.map +1 -0
- package/dist/src/tui/components/NotificationsTable.d.ts +12 -0
- package/dist/src/tui/components/NotificationsTable.d.ts.map +1 -0
- package/dist/src/tui/components/NotificationsTable.js +72 -0
- package/dist/src/tui/components/NotificationsTable.js.map +1 -0
- package/dist/src/tui/components/QuickFilters.d.ts +6 -0
- package/dist/src/tui/components/QuickFilters.d.ts.map +1 -0
- package/dist/src/tui/components/QuickFilters.js +74 -0
- package/dist/src/tui/components/QuickFilters.js.map +1 -0
- package/dist/src/tui/components/SettingsTable.d.ts +12 -0
- package/dist/src/tui/components/SettingsTable.d.ts.map +1 -0
- package/dist/src/tui/components/SettingsTable.js +62 -0
- package/dist/src/tui/components/SettingsTable.js.map +1 -0
- package/dist/src/tui/components/Spinner.d.ts +11 -0
- package/dist/src/tui/components/Spinner.d.ts.map +1 -0
- package/dist/src/tui/components/Spinner.js +24 -0
- package/dist/src/tui/components/Spinner.js.map +1 -0
- package/dist/src/tui/components/StatusRow.d.ts +11 -0
- package/dist/src/tui/components/StatusRow.d.ts.map +1 -0
- package/dist/src/tui/components/StatusRow.js +11 -0
- package/dist/src/tui/components/StatusRow.js.map +1 -0
- package/dist/src/tui/components/Table.d.ts +20 -0
- package/dist/src/tui/components/Table.d.ts.map +1 -0
- package/dist/src/tui/components/Table.js +38 -0
- package/dist/src/tui/components/Table.js.map +1 -0
- package/dist/src/tui/components/index.d.ts +14 -0
- package/dist/src/tui/components/index.d.ts.map +1 -0
- package/dist/src/tui/components/index.js +14 -0
- package/dist/src/tui/components/index.js.map +1 -0
- package/dist/src/tui/components/mainlist-utils.d.ts +22 -0
- package/dist/src/tui/components/mainlist-utils.d.ts.map +1 -0
- package/dist/src/tui/components/mainlist-utils.js +71 -0
- package/dist/src/tui/components/mainlist-utils.js.map +1 -0
- package/dist/src/tui/components/table-utils.d.ts +25 -0
- package/dist/src/tui/components/table-utils.d.ts.map +1 -0
- package/dist/src/tui/components/table-utils.js +25 -0
- package/dist/src/tui/components/table-utils.js.map +1 -0
- package/dist/src/tui/context/dialog.d.ts +32 -0
- package/dist/src/tui/context/dialog.d.ts.map +1 -0
- package/dist/src/tui/context/dialog.js +41 -0
- package/dist/src/tui/context/dialog.js.map +1 -0
- package/dist/src/tui/context/theme.d.ts +25 -0
- package/dist/src/tui/context/theme.d.ts.map +1 -0
- package/dist/src/tui/context/theme.js +31 -0
- package/dist/src/tui/context/theme.js.map +1 -0
- package/dist/src/tui/hooks/index.d.ts +2 -0
- package/dist/src/tui/hooks/index.d.ts.map +1 -0
- package/dist/src/tui/hooks/index.js +2 -0
- package/dist/src/tui/hooks/index.js.map +1 -0
- package/dist/src/tui/hooks/useKeyboardNav.d.ts +16 -0
- package/dist/src/tui/hooks/useKeyboardNav.d.ts.map +1 -0
- package/dist/src/tui/hooks/useKeyboardNav.js +429 -0
- package/dist/src/tui/hooks/useKeyboardNav.js.map +1 -0
- package/dist/src/tui/hooks/useListNavigation.d.ts +3 -0
- package/dist/src/tui/hooks/useListNavigation.d.ts.map +1 -0
- package/dist/src/tui/hooks/useListNavigation.js +123 -0
- package/dist/src/tui/hooks/useListNavigation.js.map +1 -0
- package/dist/src/tui/mocks.d.ts +6 -0
- package/dist/src/tui/mocks.d.ts.map +1 -0
- package/dist/src/tui/mocks.js +36 -0
- package/dist/src/tui/mocks.js.map +1 -0
- package/dist/src/tui/theme/Resolver.d.ts +6 -0
- package/dist/src/tui/theme/Resolver.d.ts.map +1 -0
- package/dist/src/tui/theme/Resolver.js +73 -0
- package/dist/src/tui/theme/Resolver.js.map +1 -0
- package/dist/src/tui/theme/ThemeRegistry.d.ts +3 -0
- package/dist/src/tui/theme/ThemeRegistry.d.ts.map +1 -0
- package/dist/src/tui/theme/ThemeRegistry.js +70 -0
- package/dist/src/tui/theme/ThemeRegistry.js.map +1 -0
- package/dist/src/tui/theme/data/aura.json +69 -0
- package/dist/src/tui/theme/data/ayu.json +80 -0
- package/dist/src/tui/theme/data/carbonfox.json +248 -0
- package/dist/src/tui/theme/data/catppuccin-frappe.json +233 -0
- package/dist/src/tui/theme/data/catppuccin-macchiato.json +233 -0
- package/dist/src/tui/theme/data/catppuccin.json +112 -0
- package/dist/src/tui/theme/data/cobalt2.json +228 -0
- package/dist/src/tui/theme/data/cursor.json +249 -0
- package/dist/src/tui/theme/data/dracula.json +219 -0
- package/dist/src/tui/theme/data/everforest.json +241 -0
- package/dist/src/tui/theme/data/flexoki.json +237 -0
- package/dist/src/tui/theme/data/github.json +233 -0
- package/dist/src/tui/theme/data/gruvbox.json +242 -0
- package/dist/src/tui/theme/data/kanagawa.json +77 -0
- package/dist/src/tui/theme/data/lucent-orng.json +237 -0
- package/dist/src/tui/theme/data/material.json +235 -0
- package/dist/src/tui/theme/data/matrix.json +77 -0
- package/dist/src/tui/theme/data/mercury.json +245 -0
- package/dist/src/tui/theme/data/monokai.json +221 -0
- package/dist/src/tui/theme/data/nightowl.json +221 -0
- package/dist/src/tui/theme/data/nord.json +223 -0
- package/dist/src/tui/theme/data/one-dark.json +84 -0
- package/dist/src/tui/theme/data/opencode.json +245 -0
- package/dist/src/tui/theme/data/orng.json +249 -0
- package/dist/src/tui/theme/data/osaka-jade.json +93 -0
- package/dist/src/tui/theme/data/palenight.json +222 -0
- package/dist/src/tui/theme/data/rosepine.json +234 -0
- package/dist/src/tui/theme/data/solarized.json +223 -0
- package/dist/src/tui/theme/data/synthwave84.json +226 -0
- package/dist/src/tui/theme/data/tokyonight.json +243 -0
- package/dist/src/tui/theme/data/vercel.json +245 -0
- package/dist/src/tui/theme/data/vesper.json +218 -0
- package/dist/src/tui/theme/data/zenburn.json +223 -0
- package/dist/src/tui/theme/default.d.ts +40 -0
- package/dist/src/tui/theme/default.d.ts.map +1 -0
- package/dist/src/tui/theme/default.js +35 -0
- package/dist/src/tui/theme/default.js.map +1 -0
- package/dist/src/tui/theme/resolver-utils.d.ts +28 -0
- package/dist/src/tui/theme/resolver-utils.d.ts.map +1 -0
- package/dist/src/tui/theme/resolver-utils.js +19 -0
- package/dist/src/tui/theme/resolver-utils.js.map +1 -0
- package/dist/src/tui/theme/themes.d.ts +3 -0
- package/dist/src/tui/theme/themes.d.ts.map +1 -0
- package/dist/src/tui/theme/themes.js +13 -0
- package/dist/src/tui/theme/themes.js.map +1 -0
- package/dist/src/tui/ui/Dialog.d.ts +19 -0
- package/dist/src/tui/ui/Dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/Dialog.js +39 -0
- package/dist/src/tui/ui/Dialog.js.map +1 -0
- package/dist/src/tui/ui/DialogCommand.d.ts +2 -0
- package/dist/src/tui/ui/DialogCommand.d.ts.map +1 -0
- package/dist/src/tui/ui/DialogCommand.js +182 -0
- package/dist/src/tui/ui/DialogCommand.js.map +1 -0
- package/dist/src/tui/ui/DialogCreatePR.d.ts +2 -0
- package/dist/src/tui/ui/DialogCreatePR.d.ts.map +1 -0
- package/dist/src/tui/ui/DialogCreatePR.js +397 -0
- package/dist/src/tui/ui/DialogCreatePR.js.map +1 -0
- package/dist/src/tui/ui/DialogHelp.d.ts +6 -0
- package/dist/src/tui/ui/DialogHelp.d.ts.map +1 -0
- package/dist/src/tui/ui/DialogHelp.js +93 -0
- package/dist/src/tui/ui/DialogHelp.js.map +1 -0
- package/dist/src/tui/ui/DialogTheme.d.ts +2 -0
- package/dist/src/tui/ui/DialogTheme.d.ts.map +1 -0
- package/dist/src/tui/ui/DialogTheme.js +124 -0
- package/dist/src/tui/ui/DialogTheme.js.map +1 -0
- package/dist/src/tui/ui/index.d.ts +6 -0
- package/dist/src/tui/ui/index.d.ts.map +1 -0
- package/dist/src/tui/ui/index.js +6 -0
- package/dist/src/tui/ui/index.js.map +1 -0
- package/dist/src/tui/utils/prTemplates.d.ts +19 -0
- package/dist/src/tui/utils/prTemplates.d.ts.map +1 -0
- package/dist/src/tui/utils/prTemplates.js +46 -0
- package/dist/src/tui/utils/prTemplates.js.map +1 -0
- package/dist/test/ConfigService.test.d.ts +2 -0
- package/dist/test/ConfigService.test.d.ts.map +1 -0
- package/dist/test/ConfigService.test.js +40 -0
- package/dist/test/ConfigService.test.js.map +1 -0
- package/dist/test/ListBuilder.test.d.ts +2 -0
- package/dist/test/ListBuilder.test.d.ts.map +1 -0
- package/dist/test/ListBuilder.test.js +246 -0
- package/dist/test/ListBuilder.test.js.map +1 -0
- package/dist/test/MainList.test.d.ts +2 -0
- package/dist/test/MainList.test.d.ts.map +1 -0
- package/dist/test/MainList.test.js +228 -0
- package/dist/test/MainList.test.js.map +1 -0
- package/dist/test/Resolver.test.d.ts +2 -0
- package/dist/test/Resolver.test.d.ts.map +1 -0
- package/dist/test/Resolver.test.js +81 -0
- package/dist/test/Resolver.test.js.map +1 -0
- package/dist/test/Table.test.d.ts +2 -0
- package/dist/test/Table.test.d.ts.map +1 -0
- package/dist/test/Table.test.js +100 -0
- package/dist/test/Table.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { Result, useAtomSet, useAtomValue } from "@effect-atom/atom-react";
|
|
3
|
+
import { useKeyboard } from "@opentui/react";
|
|
4
|
+
import { useMemo, useRef } from "react";
|
|
5
|
+
import { loginToAwsAtom } from "../atoms/actions.js";
|
|
6
|
+
import { appStateAtom, clearNotificationsAtom, notificationsAtom, refreshAtom, setAllAccountsAtom } from "../atoms/app.js";
|
|
7
|
+
import { currentPRAtom, currentUserAtom, exitPendingAtom, filterTextAtom, isFilteringAtom, isSettingsFilteringAtom, quickFilterTypeAtom, quickFilterValuesAtom, selectedIndexAtom, settingsFilterAtom, viewAtom } from "../atoms/ui.js";
|
|
8
|
+
import { useDialog } from "../context/dialog.js";
|
|
9
|
+
import { extractScope } from "../ListBuilder.js";
|
|
10
|
+
import { DialogCommand } from "../ui/DialogCommand.js";
|
|
11
|
+
import { DialogCreatePR } from "../ui/DialogCreatePR.js";
|
|
12
|
+
import { DialogHelp } from "../ui/DialogHelp.js";
|
|
13
|
+
import { DialogTheme } from "../ui/DialogTheme.js";
|
|
14
|
+
const defaultState = {
|
|
15
|
+
status: "loading",
|
|
16
|
+
pullRequests: [],
|
|
17
|
+
accounts: []
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Keyboard navigation hook for the TUI
|
|
21
|
+
* Handles global keybindings for view switching, filtering, help, etc.
|
|
22
|
+
* @category hooks
|
|
23
|
+
*/
|
|
24
|
+
export function useKeyboardNav({ onOpenInBrowser, onQuit }) {
|
|
25
|
+
const view = useAtomValue(viewAtom);
|
|
26
|
+
const setView = useAtomSet(viewAtom);
|
|
27
|
+
const filterText = useAtomValue(filterTextAtom);
|
|
28
|
+
const setFilterText = useAtomSet(filterTextAtom);
|
|
29
|
+
const isFiltering = useAtomValue(isFilteringAtom);
|
|
30
|
+
const setIsFiltering = useAtomSet(isFilteringAtom);
|
|
31
|
+
const currentPR = useAtomValue(currentPRAtom);
|
|
32
|
+
const selectedIndex = useAtomValue(selectedIndexAtom);
|
|
33
|
+
const refresh = useAtomSet(refreshAtom);
|
|
34
|
+
const clearNotifications = useAtomSet(clearNotificationsAtom);
|
|
35
|
+
const notificationsResult = useAtomValue(notificationsAtom);
|
|
36
|
+
const notifications = Result.getOrElse(notificationsResult, () => ({ items: [] }));
|
|
37
|
+
const loginToAws = useAtomSet(loginToAwsAtom);
|
|
38
|
+
const exitPending = useAtomValue(exitPendingAtom);
|
|
39
|
+
const setExitPending = useAtomSet(exitPendingAtom);
|
|
40
|
+
const exitTimeoutRef = useRef(null);
|
|
41
|
+
// Quick filter state
|
|
42
|
+
const quickFilterType = useAtomValue(quickFilterTypeAtom);
|
|
43
|
+
const setQuickFilterType = useAtomSet(quickFilterTypeAtom);
|
|
44
|
+
const quickFilterValues = useAtomValue(quickFilterValuesAtom);
|
|
45
|
+
const setQuickFilterValues = useAtomSet(quickFilterValuesAtom);
|
|
46
|
+
const currentUser = useAtomValue(currentUserAtom);
|
|
47
|
+
const setCurrentUser = useAtomSet(currentUserAtom);
|
|
48
|
+
const appStateResult = useAtomValue(appStateAtom);
|
|
49
|
+
const appState = Result.getOrElse(appStateResult, () => defaultState);
|
|
50
|
+
// Settings filter state
|
|
51
|
+
const settingsFilter = useAtomValue(settingsFilterAtom);
|
|
52
|
+
const setSettingsFilter = useAtomSet(settingsFilterAtom);
|
|
53
|
+
const isSettingsFiltering = useAtomValue(isSettingsFilteringAtom);
|
|
54
|
+
const setIsSettingsFiltering = useAtomSet(isSettingsFilteringAtom);
|
|
55
|
+
const setAllAccounts = useAtomSet(setAllAccountsAtom);
|
|
56
|
+
// Extract unique authors, accounts, scopes, and repos
|
|
57
|
+
const { accounts, authors, myScopes, repos, scopes } = useMemo(() => {
|
|
58
|
+
const authorSet = new Set();
|
|
59
|
+
const accountSet = new Set();
|
|
60
|
+
const scopeSet = new Set();
|
|
61
|
+
const myScopeSet = new Set();
|
|
62
|
+
const repoSet = new Set();
|
|
63
|
+
for (const pr of appState.pullRequests) {
|
|
64
|
+
authorSet.add(pr.author);
|
|
65
|
+
accountSet.add(pr.account.id);
|
|
66
|
+
repoSet.add(pr.repositoryName);
|
|
67
|
+
const scope = extractScope(pr.title);
|
|
68
|
+
if (scope) {
|
|
69
|
+
scopeSet.add(scope);
|
|
70
|
+
if (currentUser && pr.author === currentUser) {
|
|
71
|
+
myScopeSet.add(scope);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
authors: Array.from(authorSet).sort(),
|
|
77
|
+
accounts: Array.from(accountSet).sort(),
|
|
78
|
+
scopes: Array.from(scopeSet).sort(),
|
|
79
|
+
myScopes: Array.from(myScopeSet).sort(),
|
|
80
|
+
repos: Array.from(repoSet).sort()
|
|
81
|
+
};
|
|
82
|
+
}, [appState.pullRequests, currentUser]);
|
|
83
|
+
// Sync currentUser from appState (set via STS getCallerIdentity)
|
|
84
|
+
useMemo(() => {
|
|
85
|
+
if (appState.currentUser && appState.currentUser !== currentUser) {
|
|
86
|
+
setCurrentUser(appState.currentUser);
|
|
87
|
+
}
|
|
88
|
+
}, [appState.currentUser, currentUser, setCurrentUser]);
|
|
89
|
+
const dialog = useDialog();
|
|
90
|
+
useKeyboard((key) => {
|
|
91
|
+
// If a dialog is open, don't process global keys (except command palette trigger)
|
|
92
|
+
if (dialog.current) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Handle Ctrl+P, Cmd+P, or ":" for command palette
|
|
96
|
+
if ((key.name === "p" && (key.meta || key.ctrl)) || key.char === ":" || key.name === ":") {
|
|
97
|
+
dialog.show(() => _jsx(DialogCommand, {}));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Handle Ctrl+C (Double press to exit)
|
|
101
|
+
if (key.name === "c" && key.ctrl) {
|
|
102
|
+
if (exitPending) {
|
|
103
|
+
onQuit();
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
setExitPending(true);
|
|
107
|
+
if (exitTimeoutRef.current)
|
|
108
|
+
clearTimeout(exitTimeoutRef.current);
|
|
109
|
+
exitTimeoutRef.current = setTimeout(() => {
|
|
110
|
+
setExitPending(false);
|
|
111
|
+
}, 3000);
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Handle filter mode input (PRs)
|
|
116
|
+
if (isFiltering) {
|
|
117
|
+
if (key.name === "escape") {
|
|
118
|
+
setIsFiltering(false);
|
|
119
|
+
setFilterText("");
|
|
120
|
+
}
|
|
121
|
+
else if (key.name === "return") {
|
|
122
|
+
setIsFiltering(false);
|
|
123
|
+
}
|
|
124
|
+
else if (key.name === "backspace") {
|
|
125
|
+
setFilterText(filterText.slice(0, -1));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Try key.char first, fallback to key.name for single printable chars
|
|
129
|
+
const char = key.char || (key.name?.length === 1 ? key.name : null);
|
|
130
|
+
if (char && char.length === 1) {
|
|
131
|
+
setFilterText(filterText + char);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Handle settings filter mode input
|
|
137
|
+
if (isSettingsFiltering) {
|
|
138
|
+
if (key.name === "escape") {
|
|
139
|
+
setIsSettingsFiltering(false);
|
|
140
|
+
setSettingsFilter("");
|
|
141
|
+
}
|
|
142
|
+
else if (key.name === "return") {
|
|
143
|
+
setIsSettingsFiltering(false);
|
|
144
|
+
}
|
|
145
|
+
else if (key.name === "backspace") {
|
|
146
|
+
setSettingsFilter(settingsFilter.slice(0, -1));
|
|
147
|
+
}
|
|
148
|
+
else if (key.name === "left" || key.name === "right") {
|
|
149
|
+
// Cycle through filter modes: "" <-> "on:" <-> "off:"
|
|
150
|
+
const modes = ["", "on:", "off:"];
|
|
151
|
+
const currentPrefix = settingsFilter.startsWith("on:") ? "on:" : settingsFilter.startsWith("off:") ? "off:" : "";
|
|
152
|
+
const nameFilter = currentPrefix ? settingsFilter.slice(currentPrefix.length) : settingsFilter;
|
|
153
|
+
const idx = modes.indexOf(currentPrefix);
|
|
154
|
+
const nextIdx = key.name === "right" ? (idx + 1) % modes.length : (idx - 1 + modes.length) % modes.length;
|
|
155
|
+
const nextMode = modes[nextIdx] ?? "";
|
|
156
|
+
setSettingsFilter(nextMode + nameFilter);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const char = key.char || (key.name?.length === 1 ? key.name : null);
|
|
161
|
+
if (char && char.length === 1) {
|
|
162
|
+
setSettingsFilter(settingsFilter + char);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// Handle "/" or "f" filter shortcut
|
|
168
|
+
if (key.name === "/" || key.char === "/" || key.name === "f") {
|
|
169
|
+
if (view === "settings") {
|
|
170
|
+
setIsSettingsFiltering(true);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
setIsFiltering(true);
|
|
174
|
+
setView("prs");
|
|
175
|
+
}
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Handle settings view shortcuts
|
|
179
|
+
if (view === "settings") {
|
|
180
|
+
if (key.name === "a") {
|
|
181
|
+
// Get filtered profiles if filter is active
|
|
182
|
+
const profiles = settingsFilter
|
|
183
|
+
? appState.accounts
|
|
184
|
+
.filter((a) => a.profile.toLowerCase().includes(settingsFilter.toLowerCase()))
|
|
185
|
+
.map((a) => a.profile)
|
|
186
|
+
: null;
|
|
187
|
+
setAllAccounts({ enabled: true, ...(profiles && { profiles }) });
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (key.name === "d") {
|
|
191
|
+
const profiles = settingsFilter
|
|
192
|
+
? appState.accounts
|
|
193
|
+
.filter((a) => a.profile.toLowerCase().includes(settingsFilter.toLowerCase()))
|
|
194
|
+
.map((a) => a.profile)
|
|
195
|
+
: null;
|
|
196
|
+
setAllAccounts({ enabled: false, ...(profiles && { profiles }) });
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// Cycle filter modes with arrows (even when not in filter input mode)
|
|
200
|
+
if (key.name === "left" || key.name === "right") {
|
|
201
|
+
const modes = ["", "on:", "off:"];
|
|
202
|
+
const currentPrefix = settingsFilter.startsWith("on:") ? "on:" : settingsFilter.startsWith("off:") ? "off:" : "";
|
|
203
|
+
const nameFilter = currentPrefix ? settingsFilter.slice(currentPrefix.length) : settingsFilter;
|
|
204
|
+
const idx = modes.indexOf(currentPrefix);
|
|
205
|
+
const nextIdx = key.name === "right" ? (idx + 1) % modes.length : (idx - 1 + modes.length) % modes.length;
|
|
206
|
+
const nextMode = modes[nextIdx] ?? "";
|
|
207
|
+
setSettingsFilter(nextMode + nameFilter);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Handle details view
|
|
212
|
+
if (view === "details") {
|
|
213
|
+
if (key.name === "escape") {
|
|
214
|
+
setView("prs");
|
|
215
|
+
}
|
|
216
|
+
else if (key.name === "return" && currentPR && onOpenInBrowser) {
|
|
217
|
+
onOpenInBrowser(currentPR);
|
|
218
|
+
}
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Global keybindings
|
|
222
|
+
switch (key.name) {
|
|
223
|
+
case "q":
|
|
224
|
+
onQuit();
|
|
225
|
+
break;
|
|
226
|
+
case "h":
|
|
227
|
+
dialog.show(() => _jsx(DialogHelp, {}));
|
|
228
|
+
break;
|
|
229
|
+
case "r":
|
|
230
|
+
refresh();
|
|
231
|
+
break;
|
|
232
|
+
case "l": {
|
|
233
|
+
const authError = notifications.items.find((e) => /ExpiredToken|Unauthorized|AuthFailure|SSO|token|credentials/i.test(e.message));
|
|
234
|
+
if (authError) {
|
|
235
|
+
const profile = authError.title.replace(/\s*\(.*$/, "");
|
|
236
|
+
if (profile)
|
|
237
|
+
loginToAws(profile);
|
|
238
|
+
}
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
case "c":
|
|
242
|
+
if (view === "notifications") {
|
|
243
|
+
clearNotifications();
|
|
244
|
+
}
|
|
245
|
+
else if (view === "prs") {
|
|
246
|
+
dialog.show(() => _jsx(DialogCreatePR, {}));
|
|
247
|
+
}
|
|
248
|
+
break;
|
|
249
|
+
case "t":
|
|
250
|
+
dialog.show(() => _jsx(DialogTheme, {}));
|
|
251
|
+
break;
|
|
252
|
+
case "escape":
|
|
253
|
+
if (filterText) {
|
|
254
|
+
setFilterText("");
|
|
255
|
+
}
|
|
256
|
+
else if (view !== "prs") {
|
|
257
|
+
setView("prs");
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
case "s":
|
|
261
|
+
setView(view === "settings" ? "prs" : "settings");
|
|
262
|
+
break;
|
|
263
|
+
case "n":
|
|
264
|
+
setView(view === "notifications" ? "prs" : "notifications");
|
|
265
|
+
break;
|
|
266
|
+
case "return":
|
|
267
|
+
if (view === "prs" && currentPR) {
|
|
268
|
+
setView("details");
|
|
269
|
+
}
|
|
270
|
+
else if (view === "notifications") {
|
|
271
|
+
const selected = notifications.items[selectedIndex];
|
|
272
|
+
if (selected) {
|
|
273
|
+
const profile = selected.title.replace(/\s*\(.*$/, "");
|
|
274
|
+
if (/ExpiredToken|Unauthorized|AuthFailure|SSO|token|credentials/i.test(selected.message)) {
|
|
275
|
+
loginToAws((profile || selected.title));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
break;
|
|
280
|
+
case "o":
|
|
281
|
+
if (view === "prs" && currentPR && onOpenInBrowser) {
|
|
282
|
+
onOpenInBrowser(currentPR);
|
|
283
|
+
}
|
|
284
|
+
break;
|
|
285
|
+
// Quick filter shortcuts (1-4)
|
|
286
|
+
case "1":
|
|
287
|
+
if (view === "prs")
|
|
288
|
+
setQuickFilterType("all");
|
|
289
|
+
break;
|
|
290
|
+
case "2":
|
|
291
|
+
if (view === "prs") {
|
|
292
|
+
setQuickFilterType("mine");
|
|
293
|
+
if (!quickFilterValues.mine && myScopes.length > 0) {
|
|
294
|
+
setQuickFilterValues({ ...quickFilterValues, mine: myScopes[0] });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
case "3":
|
|
299
|
+
if (view === "prs") {
|
|
300
|
+
setQuickFilterType("account");
|
|
301
|
+
// Initialize value for this type if empty
|
|
302
|
+
if (!quickFilterValues.account && accounts.length > 0) {
|
|
303
|
+
setQuickFilterValues({ ...quickFilterValues, account: accounts[0] });
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
break;
|
|
307
|
+
case "4":
|
|
308
|
+
if (view === "prs") {
|
|
309
|
+
setQuickFilterType("author");
|
|
310
|
+
if (!quickFilterValues.author && authors.length > 0) {
|
|
311
|
+
setQuickFilterValues({ ...quickFilterValues, author: authors[0] });
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
break;
|
|
315
|
+
case "5":
|
|
316
|
+
if (view === "prs") {
|
|
317
|
+
setQuickFilterType("scope");
|
|
318
|
+
if (!quickFilterValues.scope && scopes.length > 0) {
|
|
319
|
+
setQuickFilterValues({ ...quickFilterValues, scope: scopes[0] });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
break;
|
|
323
|
+
case "6":
|
|
324
|
+
if (view === "prs") {
|
|
325
|
+
setQuickFilterType("date");
|
|
326
|
+
// date already has default "today"
|
|
327
|
+
}
|
|
328
|
+
break;
|
|
329
|
+
case "7":
|
|
330
|
+
if (view === "prs") {
|
|
331
|
+
setQuickFilterType("repo");
|
|
332
|
+
if (!quickFilterValues.repo && repos.length > 0) {
|
|
333
|
+
setQuickFilterValues({ ...quickFilterValues, repo: repos[0] });
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
break;
|
|
337
|
+
case "8":
|
|
338
|
+
if (view === "prs") {
|
|
339
|
+
setQuickFilterType("status");
|
|
340
|
+
// status already has default "approved"
|
|
341
|
+
}
|
|
342
|
+
break;
|
|
343
|
+
// Cycle quick filter values with left/right
|
|
344
|
+
case "left":
|
|
345
|
+
if (view === "prs") {
|
|
346
|
+
if (quickFilterType === "date") {
|
|
347
|
+
const dateValues = ["today", "week", "month", "older"];
|
|
348
|
+
const currentVal = quickFilterValues.date || "today";
|
|
349
|
+
const idx = dateValues.indexOf(currentVal);
|
|
350
|
+
const nextIdx = idx <= 0 ? dateValues.length - 1 : idx - 1;
|
|
351
|
+
setQuickFilterValues({ ...quickFilterValues, date: dateValues[nextIdx] });
|
|
352
|
+
}
|
|
353
|
+
else if (quickFilterType === "status") {
|
|
354
|
+
const statusValues = ["approved", "pending", "mergeable", "conflicts"];
|
|
355
|
+
const currentVal = quickFilterValues.status || "approved";
|
|
356
|
+
const idx = statusValues.indexOf(currentVal);
|
|
357
|
+
const nextIdx = idx <= 0 ? statusValues.length - 1 : idx - 1;
|
|
358
|
+
setQuickFilterValues({ ...quickFilterValues, status: statusValues[nextIdx] });
|
|
359
|
+
}
|
|
360
|
+
else if (quickFilterType === "mine" ||
|
|
361
|
+
quickFilterType === "account" ||
|
|
362
|
+
quickFilterType === "author" ||
|
|
363
|
+
quickFilterType === "scope" ||
|
|
364
|
+
quickFilterType === "repo") {
|
|
365
|
+
const list = quickFilterType === "mine"
|
|
366
|
+
? myScopes
|
|
367
|
+
: quickFilterType === "account"
|
|
368
|
+
? accounts
|
|
369
|
+
: quickFilterType === "author"
|
|
370
|
+
? authors
|
|
371
|
+
: quickFilterType === "repo"
|
|
372
|
+
? repos
|
|
373
|
+
: scopes;
|
|
374
|
+
const currentVal = quickFilterValues[quickFilterType];
|
|
375
|
+
if (list.length > 0) {
|
|
376
|
+
const idx = list.indexOf(currentVal);
|
|
377
|
+
const nextIdx = idx <= 0 ? list.length - 1 : idx - 1;
|
|
378
|
+
setQuickFilterValues({ ...quickFilterValues, [quickFilterType]: list[nextIdx] });
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
break;
|
|
383
|
+
case "right":
|
|
384
|
+
if (view === "prs") {
|
|
385
|
+
if (quickFilterType === "date") {
|
|
386
|
+
const dateValues = ["today", "week", "month", "older"];
|
|
387
|
+
const currentVal = quickFilterValues.date || "today";
|
|
388
|
+
const idx = dateValues.indexOf(currentVal);
|
|
389
|
+
const nextIdx = idx >= dateValues.length - 1 ? 0 : idx + 1;
|
|
390
|
+
setQuickFilterValues({ ...quickFilterValues, date: dateValues[nextIdx] });
|
|
391
|
+
}
|
|
392
|
+
else if (quickFilterType === "status") {
|
|
393
|
+
const statusValues = ["approved", "pending", "mergeable", "conflicts"];
|
|
394
|
+
const currentVal = quickFilterValues.status || "approved";
|
|
395
|
+
const idx = statusValues.indexOf(currentVal);
|
|
396
|
+
const nextIdx = idx >= statusValues.length - 1 ? 0 : idx + 1;
|
|
397
|
+
setQuickFilterValues({ ...quickFilterValues, status: statusValues[nextIdx] });
|
|
398
|
+
}
|
|
399
|
+
else if (quickFilterType === "mine" ||
|
|
400
|
+
quickFilterType === "account" ||
|
|
401
|
+
quickFilterType === "author" ||
|
|
402
|
+
quickFilterType === "scope" ||
|
|
403
|
+
quickFilterType === "repo") {
|
|
404
|
+
const list = quickFilterType === "mine"
|
|
405
|
+
? myScopes
|
|
406
|
+
: quickFilterType === "account"
|
|
407
|
+
? accounts
|
|
408
|
+
: quickFilterType === "author"
|
|
409
|
+
? authors
|
|
410
|
+
: quickFilterType === "repo"
|
|
411
|
+
? repos
|
|
412
|
+
: scopes;
|
|
413
|
+
const currentVal = quickFilterValues[quickFilterType];
|
|
414
|
+
if (list.length > 0) {
|
|
415
|
+
const idx = list.indexOf(currentVal);
|
|
416
|
+
const nextIdx = idx >= list.length - 1 ? 0 : idx + 1;
|
|
417
|
+
setQuickFilterValues({ ...quickFilterValues, [quickFilterType]: list[nextIdx] });
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
return {
|
|
425
|
+
view,
|
|
426
|
+
isFiltering
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=useKeyboardNav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardNav.js","sourceRoot":"","sources":["../../../../src/tui/hooks/useKeyboardNav.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useListNavigation.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/useListNavigation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAOjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,QA6F5G"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { useAtomSet, useAtomValue } from "@effect-atom/atom-react";
|
|
2
|
+
import { useKeyboard } from "@opentui/react";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { selectedIndexAtom, selectedPrIdAtom, viewAtom } from "../atoms/ui.js";
|
|
5
|
+
import { useDialog } from "../context/dialog.js";
|
|
6
|
+
function isSelectable(item) {
|
|
7
|
+
if (!item)
|
|
8
|
+
return false;
|
|
9
|
+
return item.type === "pr" || item.type === "account" || item.type === "notification";
|
|
10
|
+
}
|
|
11
|
+
export function useListNavigation(items, onSelect, onToggle) {
|
|
12
|
+
const selectedIndex = useAtomValue(selectedIndexAtom);
|
|
13
|
+
const setSelectedIndex = useAtomSet(selectedIndexAtom);
|
|
14
|
+
const setSelectedPrId = useAtomSet(selectedPrIdAtom);
|
|
15
|
+
const view = useAtomValue(viewAtom);
|
|
16
|
+
const dialog = useDialog();
|
|
17
|
+
// Helper to update both index and PR ID atomically
|
|
18
|
+
const navigate = (newIndex) => {
|
|
19
|
+
setSelectedIndex(newIndex);
|
|
20
|
+
const item = items[newIndex];
|
|
21
|
+
if (item?.type === "pr") {
|
|
22
|
+
setSelectedPrId(item.pr.id);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
// Sync selected index when items change or become unselectable
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (items.length === 0)
|
|
28
|
+
return;
|
|
29
|
+
let index = selectedIndex;
|
|
30
|
+
if (index >= items.length)
|
|
31
|
+
index = items.length - 1;
|
|
32
|
+
if (index < 0)
|
|
33
|
+
index = 0;
|
|
34
|
+
// If current item is not selectable, find nearest
|
|
35
|
+
if (items[index] && !isSelectable(items[index])) {
|
|
36
|
+
// Search down
|
|
37
|
+
let found = -1;
|
|
38
|
+
for (let i = index; i < items.length; i++) {
|
|
39
|
+
if (items[i] && isSelectable(items[i])) {
|
|
40
|
+
found = i;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Search up if not found down
|
|
45
|
+
if (found === -1) {
|
|
46
|
+
for (let i = index; i >= 0; i--) {
|
|
47
|
+
if (items[i] && isSelectable(items[i])) {
|
|
48
|
+
found = i;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (found !== -1)
|
|
54
|
+
index = found;
|
|
55
|
+
}
|
|
56
|
+
if (index !== selectedIndex) {
|
|
57
|
+
setSelectedIndex(index);
|
|
58
|
+
}
|
|
59
|
+
}, [items, selectedIndex, setSelectedIndex]);
|
|
60
|
+
useKeyboard((key) => {
|
|
61
|
+
if (dialog.current)
|
|
62
|
+
return;
|
|
63
|
+
if (view === "details")
|
|
64
|
+
return;
|
|
65
|
+
if (key.name === "down") {
|
|
66
|
+
let next = selectedIndex + 1;
|
|
67
|
+
while (next < items.length && (!items[next] || !isSelectable(items[next]))) {
|
|
68
|
+
next++;
|
|
69
|
+
}
|
|
70
|
+
if (next < items.length)
|
|
71
|
+
navigate(next);
|
|
72
|
+
}
|
|
73
|
+
else if (key.name === "up") {
|
|
74
|
+
let prev = selectedIndex - 1;
|
|
75
|
+
while (prev >= 0 && (!items[prev] || !isSelectable(items[prev]))) {
|
|
76
|
+
prev--;
|
|
77
|
+
}
|
|
78
|
+
if (prev >= 0)
|
|
79
|
+
navigate(prev);
|
|
80
|
+
}
|
|
81
|
+
else if (key.name === "pageup") {
|
|
82
|
+
let prev = Math.max(selectedIndex - 10, 0);
|
|
83
|
+
while (prev > 0 && (!items[prev] || !isSelectable(items[prev])))
|
|
84
|
+
prev--;
|
|
85
|
+
if (prev >= 0 && items[prev] && isSelectable(items[prev]))
|
|
86
|
+
navigate(prev);
|
|
87
|
+
}
|
|
88
|
+
else if (key.name === "pagedown") {
|
|
89
|
+
let next = Math.min(selectedIndex + 10, items.length - 1);
|
|
90
|
+
while (next < items.length && (!items[next] || !isSelectable(items[next])))
|
|
91
|
+
next++;
|
|
92
|
+
if (next >= items.length) {
|
|
93
|
+
next = items.length - 1;
|
|
94
|
+
while (next > selectedIndex && (!items[next] || !isSelectable(items[next])))
|
|
95
|
+
next--;
|
|
96
|
+
}
|
|
97
|
+
if (next >= 0 && items[next] && isSelectable(items[next]))
|
|
98
|
+
navigate(next);
|
|
99
|
+
}
|
|
100
|
+
else if (key.name === "home") {
|
|
101
|
+
let next = 0;
|
|
102
|
+
while (next < items.length && (!items[next] || !isSelectable(items[next])))
|
|
103
|
+
next++;
|
|
104
|
+
if (next < items.length)
|
|
105
|
+
navigate(next);
|
|
106
|
+
}
|
|
107
|
+
else if (key.name === "end") {
|
|
108
|
+
let prev = items.length - 1;
|
|
109
|
+
while (prev >= 0 && (!items[prev] || !isSelectable(items[prev])))
|
|
110
|
+
prev--;
|
|
111
|
+
if (prev >= 0)
|
|
112
|
+
navigate(prev);
|
|
113
|
+
}
|
|
114
|
+
else if (key.name === "return") {
|
|
115
|
+
onSelect();
|
|
116
|
+
}
|
|
117
|
+
else if (key.name === "space") {
|
|
118
|
+
if (onToggle)
|
|
119
|
+
onToggle();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=useListNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useListNavigation.js","sourceRoot":"","sources":["../../../../src/tui/hooks/useListNavigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Domain } from "@knpkv/codecommit-core";
|
|
2
|
+
export declare const mockAccount: Domain.Account;
|
|
3
|
+
export declare const mockPR: Domain.PullRequest;
|
|
4
|
+
export declare const mockPRConflict: Domain.PullRequest;
|
|
5
|
+
export declare const mockPRList: Array<Domain.PullRequest>;
|
|
6
|
+
//# sourceMappingURL=mocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../../src/tui/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAM/C,eAAO,MAAM,WAAW,gBAGtB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAejB,CAAA;AAEF,eAAO,MAAM,cAAc,oBAIzB,CAAA;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAOhD,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Domain } from "@knpkv/codecommit-core";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
const decodeAccount = Schema.decodeSync(Domain.Account);
|
|
4
|
+
const decodePullRequest = Schema.decodeSync(Domain.PullRequest);
|
|
5
|
+
export const mockAccount = decodeAccount({
|
|
6
|
+
id: "123456789012",
|
|
7
|
+
region: "us-east-1"
|
|
8
|
+
});
|
|
9
|
+
export const mockPR = decodePullRequest({
|
|
10
|
+
id: "pr-1",
|
|
11
|
+
title: "Update README.md",
|
|
12
|
+
description: "Fixing typos in documentation",
|
|
13
|
+
author: "jdoe",
|
|
14
|
+
repositoryName: "my-repo",
|
|
15
|
+
creationDate: new Date("2023-10-25T10:00:00Z"),
|
|
16
|
+
lastModifiedDate: new Date("2023-10-25T11:00:00Z"),
|
|
17
|
+
link: "https://console.aws.amazon.com/codesuite/codecommit/repositories/my-repo/pull-requests/1",
|
|
18
|
+
account: mockAccount,
|
|
19
|
+
status: "OPEN",
|
|
20
|
+
sourceBranch: "feature/docs",
|
|
21
|
+
destinationBranch: "main",
|
|
22
|
+
isMergeable: true,
|
|
23
|
+
isApproved: false
|
|
24
|
+
});
|
|
25
|
+
export const mockPRConflict = decodePullRequest({
|
|
26
|
+
...mockPR,
|
|
27
|
+
id: "pr-conflict",
|
|
28
|
+
isMergeable: false
|
|
29
|
+
});
|
|
30
|
+
export const mockPRList = Array.from({ length: 10 }).map((_, i) => decodePullRequest({
|
|
31
|
+
...mockPR,
|
|
32
|
+
id: `pr-${i + 1}`,
|
|
33
|
+
title: `Feature ${i + 1}`,
|
|
34
|
+
author: i % 2 === 0 ? "jdoe" : "alice"
|
|
35
|
+
}));
|
|
36
|
+
//# sourceMappingURL=mocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/tui/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACvD,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,EAAE,EAAE,cAAc;IAClB,MAAM,EAAE,WAAW;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,iBAAiB,CAAC;IACtC,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,kBAAkB;IACzB,WAAW,EAAE,+BAA+B;IAC5C,MAAM,EAAE,MAAM;IACd,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;IAC9C,gBAAgB,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;IAClD,IAAI,EAAE,0FAA0F;IAChG,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,MAAM;IACzB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,KAAK;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;IAC9C,GAAG,MAAM;IACT,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,KAAK;CACnB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAA8B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3F,iBAAiB,CAAC;IAChB,GAAG,MAAM;IACT,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;IACjB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;IACzB,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;CACvC,CAAC,CACH,CAAA"}
|