Skip to content

Commit c2b6b8a

Browse files
committed
refactor: merge setInitialCorpora() into intializeCorpusSelection()
1 parent 5e09a8b commit c2b6b8a

File tree

4 files changed

+29
-45
lines changed

4 files changed

+29
-45
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
- Corpus selector: expand partially selected folders by default [#431](https://github.com/spraakbanken/korp-frontend/issues/431)
99
- Statistics: link cells to corpus-filtered search [#455](https://github.com/spraakbanken/korp-frontend/issues/455)
1010

11+
### Changed
12+
13+
- Setting `preselected_corpora` to empty list used to select all, now it selects none. To select all, leave it unset.
14+
1115
## [9.11.4] – 2025-09-29
1216

1317
### Fixed

app/scripts/app.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,23 @@ korpApp.run([
172172
let waitForLogin = false
173173

174174
async function initializeCorpusSelection(ids: string[], skipLogin?: boolean): Promise<void> {
175-
if (!ids || ids.length == 0) ids = settings["preselected_corpora"] || []
176-
177-
// Resolve any folder ids to the contained corpus ids
178-
ids = ids.flatMap((id) => getAllCorporaInFolders(settings.folders, id))
179-
180-
const hasAccess = (corpus: CorpusTransformed) => auth.hasCredential(corpus.id.toUpperCase())
181-
182-
const deniedCorpora = ids
183-
.map((id) => settings.corpora[id])
184-
.filter((corpus) => corpus?.limited_access && !hasAccess(corpus))
175+
const isDenied = (corpus?: CorpusTransformed) =>
176+
corpus?.limited_access && !auth.hasCredential(corpus.id.toUpperCase())
177+
178+
// If no id is given, use default
179+
if (!ids || ids.length == 0) {
180+
if (settings["preselected_corpora"]) ids = settings["preselected_corpora"]
181+
else {
182+
// If the default setting is not given, fallback to selecting all non-protected corpora. If all are protected, select all.
183+
const nonhidden = corpusListing.corpora.filter((corpus) => !corpus.hide)
184+
const allowed = nonhidden.filter((corpus) => !isDenied(corpus))
185+
ids = (allowed.length ? allowed : nonhidden).map((corpus) => corpus.id)
186+
}
187+
}
185188

189+
const deniedCorpora = ids.map((id) => settings.corpora[id]).filter((corpus) => isDenied(corpus))
186190
const allowedIds = ids.filter((id) => !deniedCorpora.find((corpus) => corpus.id == id))
187191

188-
const allCorpusIds = corpusListing.map((corpus) => corpus.id)
189-
190192
if (settings.initialization_checks && (await settings.initialization_checks())) {
191193
// custom initialization code called
192194
} else if (isEmpty(settings.corpora)) {
@@ -234,12 +236,12 @@ korpApp.run([
234236
// Login dismissed, fall back to allowed corpora
235237
initializeCorpusSelection(allowedIds)
236238
}
237-
} else if (!ids.every((r) => allCorpusIds.includes(r))) {
239+
} else if (!ids.every((id) => id in settings.corpora)) {
238240
// some corpora missing
239241
openErrorModal({
240242
content: `{{'corpus_not_available' | loc:$root.lang}}`,
241243
onClose: () => {
242-
const validIds = ids.filter((corpusId) => allCorpusIds.includes(corpusId))
244+
const validIds = ids.filter((corpusId) => corpusId in settings.corpora)
243245
initializeCorpusSelection(validIds)
244246
},
245247
})

app/scripts/corpora/corpus-set.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export class CorpusSet {
6060
return ""
6161
}
6262

63-
/** Corpus ids in uppercase */
63+
/** Lowercase corpus ids */
6464
getIds() {
6565
return this.map((corpus) => corpus.id)
6666
}

app/scripts/data_init.ts

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { keyBy, mapValues, omit, pick } from "lodash"
22
import settings, { setDefaultConfigValues } from "@/settings"
33
import currentMode from "@/mode"
4-
import { getAllCorporaInFolders } from "@/corpora/corpus-chooser"
54
import { corpusListing, setCorpusListing } from "@/corpora/corpus_listing"
65
import { CorpusSet } from "@/corpora/corpus-set"
76
import { CorpusSetParallel } from "@/parallel/corpus-set-parallel"
@@ -13,6 +12,7 @@ import { ConfigTransformed, CorpusTransformed } from "@/settings/config-transfor
1312
import { korpRequest } from "@/backend/common"
1413
import { getLocData } from "@/i18n/loc-data"
1514
import moment from "moment"
15+
import { getAllCorporaInFolders } from "./corpora/corpus-chooser"
1616

1717
type InfoData = Record<string, Pick<CorpusTransformed, "info" | "private_struct_attributes">>
1818

@@ -107,39 +107,19 @@ function transformConfig(config: Config, infos: InfoData): ConfigTransformed {
107107

108108
const modes = config.modes.map((mode) => ({ ...mode, selected: mode.mode == currentMode }))
109109

110+
// Resolve folder names in the default corpus selection.
111+
// Compat added in October 2025: from now on this setting doesn't need to prepend folder names with "__"
112+
const preselectedCorpora = config.preselected_corpora?.flatMap((id) =>
113+
getAllCorporaInFolders(config.folders || {}, id.replace(/^__/, "")),
114+
)
115+
110116
return {
111117
folders: {},
112118
...omit(config, "pos_attributes", "corpora"),
113119
corpora: mapValues(config.corpora, transformCorpus),
114120
modes,
115121
mode: modes.find((mode) => mode.selected)!,
116-
}
117-
}
118-
119-
/** Determine initial corpus selection. */
120-
function setInitialCorpora(): void {
121-
// if no preselectedCorpora is defined, use all of them
122-
if (!settings.preselected_corpora?.length) {
123-
// if all corpora in mode is limited_access, make them all preselected
124-
if (corpusListing.corpora.filter((corpus) => !corpus.limited_access).length == 0) {
125-
settings.preselected_corpora = corpusListing.corpora
126-
.filter((corpus) => !corpus.hide)
127-
.map((corpus) => corpus.id)
128-
129-
// else filter out the ones with limited_access
130-
} else {
131-
settings.preselected_corpora = corpusListing.corpora
132-
.filter((corpus) => !(corpus.hide || corpus.limited_access))
133-
.map((corpus) => corpus.id)
134-
}
135-
} else {
136-
let expandedCorpora: string[] = []
137-
for (let preItem of settings.preselected_corpora) {
138-
preItem = preItem.replace(/^__/g, "")
139-
expandedCorpora.push(...getAllCorporaInFolders(settings.folders, preItem))
140-
}
141-
// folders expanded, save
142-
settings.preselected_corpora = expandedCorpora
122+
preselected_corpora: preselectedCorpora,
143123
}
144124
}
145125

@@ -179,8 +159,6 @@ export async function fetchInitialData(authDef: Promise<boolean>) {
179159
? new CorpusSetParallel(corpora as CorpusTransformed<CorpusParallel>[])
180160
: new CorpusSet(corpora)
181161
setCorpusListing(corpusListing)
182-
183-
setInitialCorpora()
184162
}
185163

186164
/** Find most recently updated corpora. */

0 commit comments

Comments
 (0)