Skip to content

Commit 0882446

Browse files
refactor: address pr comments.
1 parent 5fc4dde commit 0882446

8 files changed

Lines changed: 14 additions & 112 deletions

File tree

docs/localstorage-state.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,17 @@ This document is the source of truth for what `@knighted/develop` stores in `loc
88

99
1. `knighted:develop:github-pat`
1010
- GitHub personal access token used for API calls.
11-
2. `knighted:develop:github-repository`
12-
- Last selected repository full name (for example: `owner/repo`).
13-
3. `knighted-develop:render-mode`
11+
2. `knighted-develop:render-mode`
1412
- Last selected render mode (`dom` or `react`).
15-
4. Theme/UI preference keys managed by layout theme modules.
13+
3. Theme/UI preference keys managed by layout theme modules.
1614

1715
## Not Allowed In localStorage
1816

1917
Do not store pull request context in `localStorage`.
2018

2119
Examples that must stay out of `localStorage`:
2220

21+
- Selected repository preference (`owner/repo`)
2322
- PR context state (`active`, `disconnected`, `closed`, `inactive`)
2423
- PR number and URL
2524
- PR base/head/title/body
@@ -31,3 +30,5 @@ Examples that must stay out of `localStorage`:
3130
`localStorage` is for lightweight bootstrap preferences only.
3231

3332
If data is needed to restore workspace or pull request workflow state, it belongs in IndexedDB workspace records.
33+
34+
Repository selection is derived from in-memory BYOT controls and IndexedDB-backed workspace records, not from a dedicated localStorage key.

playwright/github-pr-drawer/open-pr-create.spec.ts

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -445,36 +445,6 @@ test('Open PR success normalizes trailing newline without showing Edited indicat
445445
expect(String(stylesBlob?.content).endsWith('\n')).toBe(true)
446446
})
447447

448-
test('Open PR drawer can filter stored local contexts by search', async ({ page }) => {
449-
await waitForAppReady(page, `${appEntryPath}`)
450-
451-
await seedLocalWorkspaceContexts(page, [
452-
{
453-
id: 'repo_knightedcodemonkey_develop_feat-alpha',
454-
repo: 'knightedcodemonkey/develop',
455-
head: 'feat/alpha',
456-
prTitle: 'Alpha local context',
457-
},
458-
{
459-
id: 'repo_knightedcodemonkey_develop_feat-beta',
460-
repo: 'knightedcodemonkey/develop',
461-
head: 'feat/beta',
462-
prTitle: 'Beta local context',
463-
},
464-
])
465-
466-
await connectByotWithSingleRepo(page)
467-
await page.getByRole('button', { name: 'Workspaces' }).click()
468-
await page.getByLabel('Workspace repository filter').selectOption('__local__')
469-
470-
const search = page.getByLabel('Search stored local contexts')
471-
await expect(search).toBeEnabled()
472-
await search.fill('beta')
473-
474-
const labels = await getLocalContextOptionLabels(page)
475-
expect(labels).toEqual(['Select a stored local context', 'local:Beta local context'])
476-
})
477-
478448
test('Workspaces repository selector filters contexts and keeps local-only contexts under Local', async ({
479449
page,
480450
}) => {

src/app.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ const workspacesDrawer = document.getElementById('workspaces-drawer')
141141
const workspacesClose = document.getElementById('workspaces-close')
142142
const workspacesStatus = document.getElementById('workspaces-status')
143143
const workspacesRepository = document.getElementById('workspaces-repository')
144-
const workspacesSearch = document.getElementById('workspaces-search')
145144
const workspacesSelect = document.getElementById('workspaces-select')
146145
const workspacesOpen = document.getElementById('workspaces-open')
147146
const workspacesRemove = document.getElementById('workspaces-remove')
@@ -1066,7 +1065,6 @@ const githubWorkflows = createGitHubWorkflowsSetup({
10661065
workspacesClose,
10671066
workspacesStatus,
10681067
workspacesRepository,
1069-
workspacesSearch,
10701068
workspacesSelect,
10711069
workspacesOpen,
10721070
workspacesRemove,

src/index.html

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -822,18 +822,6 @@ <h2 id="workspaces-title">Workspaces</h2>
822822
</select>
823823
</label>
824824

825-
<label class="github-pr-field github-pr-field--full" for="workspaces-search">
826-
<span>Search local contexts</span>
827-
<input
828-
id="workspaces-search"
829-
type="search"
830-
autocomplete="off"
831-
spellcheck="false"
832-
placeholder="Search local contexts"
833-
aria-label="Search stored local contexts"
834-
/>
835-
</label>
836-
837825
<label class="github-pr-field github-pr-field--full" for="workspaces-select">
838826
<span>Stored contexts</span>
839827
<select id="workspaces-select" aria-label="Stored local editor contexts">

src/modules/app-core/github-workflows.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { repositoryStarterSelectionIdPrefix } from '../constants.js'
2+
13
const initializeGitHubWorkflows = ({
24
createGitHubPrEditorSyncController,
35
createGitHubChatDrawer,
@@ -40,7 +42,6 @@ const initializeGitHubWorkflows = ({
4042
workspacesClose,
4143
workspacesStatus,
4244
workspacesRepository,
43-
workspacesSearch,
4445
workspacesSelect,
4546
workspacesOpen,
4647
workspacesRemove,
@@ -101,8 +102,6 @@ const initializeGitHubWorkflows = ({
101102
return collectTopLevelDeclarations({ source, transformJsxSource })
102103
}
103104

104-
const repositoryStarterSelectionIdPrefix = '__create_repository_context__:'
105-
106105
const parseRepositoryStarterSelectionId = value => {
107106
const normalizedValue = typeof value === 'string' ? value.trim() : ''
108107
if (!normalizedValue.startsWith(repositoryStarterSelectionIdPrefix)) {
@@ -316,7 +315,6 @@ const initializeGitHubWorkflows = ({
316315
closeButton: workspacesClose,
317316
statusNode: workspacesStatus,
318317
repositorySelect: workspacesRepository,
319-
searchInput: workspacesSearch,
320318
selectInput: workspacesSelect,
321319
openButton: workspacesOpen,
322320
removeButton: workspacesRemove,

src/modules/constants.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const repositoryStarterSelectionIdPrefix = '__create_repository_context__:'

src/modules/workspace/workspaces-drawer/drawer.js

Lines changed: 6 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1+
import { repositoryStarterSelectionIdPrefix } from '../../constants.js'
2+
13
const toSafeText = value => (typeof value === 'string' ? value.trim() : '')
24

3-
const normalizeQuery = value => toSafeText(value).toLowerCase()
45
const localRepositoryFilterValue = '__local__'
5-
const createRepositoryStarterIdPrefix = '__create_repository_context__:'
66

77
const toRepositoryStarterSelectionId = repositoryFullName => {
88
const repository = toSafeText(repositoryFullName)
99
if (!repository || repository === localRepositoryFilterValue) {
1010
return ''
1111
}
1212

13-
return `${createRepositoryStarterIdPrefix}${repository}`
13+
return `${repositoryStarterSelectionIdPrefix}${repository}`
1414
}
1515

1616
const isRepositoryStarterSelectionId = value =>
17-
toSafeText(value).startsWith(createRepositoryStarterIdPrefix)
17+
toSafeText(value).startsWith(repositoryStarterSelectionIdPrefix)
1818

1919
const isLocalWorkspaceEntry = workspace => {
2020
const repository = toSafeText(workspace?.repo)
@@ -44,34 +44,12 @@ const toWorkspaceLabel = workspace => {
4444
return isLocalOnlyInactive ? `local:${fallbackLabel}` : fallbackLabel
4545
}
4646

47-
const matchesQuery = (workspace, query) => {
48-
if (!query) {
49-
return true
50-
}
51-
52-
const haystack = [
53-
workspace?.id,
54-
workspace?.repo,
55-
workspace?.base,
56-
workspace?.head,
57-
workspace?.prTitle,
58-
toWorkspaceLabel(workspace),
59-
]
60-
.map(toSafeText)
61-
.filter(Boolean)
62-
.join(' ')
63-
.toLowerCase()
64-
65-
return haystack.includes(query)
66-
}
67-
6847
export const createWorkspacesDrawer = ({
6948
toggleButton,
7049
drawer,
7150
closeButton,
7251
statusNode,
7352
repositorySelect,
74-
searchInput,
7553
selectInput,
7654
openButton,
7755
removeButton,
@@ -85,7 +63,6 @@ export const createWorkspacesDrawer = ({
8563
} = {}) => {
8664
let open = false
8765
let entries = []
88-
let query = ''
8966
let selectedId = ''
9067
let selectedRepositoryFilter = localRepositoryFilterValue
9168
let hasUserSelectedRepositoryFilter = false
@@ -147,9 +124,7 @@ export const createWorkspacesDrawer = ({
147124
}
148125

149126
const repositoryFilteredEntries = getFilteredEntriesByRepository()
150-
const filteredEntries = repositoryFilteredEntries.filter(entry =>
151-
matchesQuery(entry, normalizeQuery(query)),
152-
)
127+
const filteredEntries = repositoryFilteredEntries
153128
const normalizedRepositoryFilter = getNormalizedRepositoryFilter(
154129
selectedRepositoryFilter,
155130
)
@@ -168,9 +143,7 @@ export const createWorkspacesDrawer = ({
168143
? hasStarterSelection
169144
? 'Select to start a new local context'
170145
: 'No saved local contexts'
171-
: filteredEntries.length > 0
172-
? 'Select a stored local context'
173-
: 'No matching local contexts'
146+
: 'Select a stored local context'
174147
placeholder.disabled = filteredEntries.length > 0 || hasStarterSelection
175148
placeholder.selected = !filteredEntries.some(entry => entry.id === selectedId)
176149
selectInput.append(placeholder)
@@ -191,10 +164,6 @@ export const createWorkspacesDrawer = ({
191164
selectInput.append(option)
192165
}
193166

194-
if (searchInput instanceof HTMLInputElement) {
195-
searchInput.disabled = repositoryFilteredEntries.length === 0
196-
}
197-
198167
const hasSelectedFilteredEntry = filteredEntries.some(
199168
entry => entry.id === selectedId,
200169
)
@@ -329,11 +298,6 @@ export const createWorkspacesDrawer = ({
329298
return
330299
}
331300

332-
if (searchInput instanceof HTMLInputElement && !searchInput.disabled) {
333-
searchInput.focus()
334-
return
335-
}
336-
337301
selectInput?.focus()
338302
}
339303

@@ -345,24 +309,14 @@ export const createWorkspacesDrawer = ({
345309
void setOpen(false)
346310
})
347311

348-
searchInput?.addEventListener('input', () => {
349-
query = searchInput.value
350-
renderOptions()
351-
})
352-
353312
repositorySelect?.addEventListener('change', async () => {
354313
selectedRepositoryFilter = getNormalizedRepositoryFilter(repositorySelect.value)
355314
hasUserSelectedRepositoryFilter = true
356-
query = ''
357315

358316
if (typeof onRepositoryFilterChange === 'function') {
359317
await onRepositoryFilterChange(selectedRepositoryFilter)
360318
}
361319

362-
if (searchInput instanceof HTMLInputElement) {
363-
searchInput.value = ''
364-
}
365-
366320
await refresh({ preserveSelection: false })
367321
})
368322

src/styles/ai-controls.css

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -722,14 +722,6 @@
722722
grid-column: 1 / -1;
723723
}
724724

725-
.github-pr-field--local-context {
726-
gap: 8px;
727-
}
728-
729-
.github-pr-field--local-context input[type='search'] {
730-
width: 100%;
731-
}
732-
733725
.github-pr-local-context-row {
734726
display: grid;
735727
grid-template-columns: minmax(0, 1fr) auto;

0 commit comments

Comments
 (0)