Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions src/components/map-projects/AdvancedSettings.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,24 @@ import { useTranslation } from 'react-i18next'
import TextField from '@mui/material/TextField'
import Collapse from '@mui/material/Collapse'
import Button from '@mui/material/Button'
import FormControlLabel from '@mui/material/FormControlLabel'
import Checkbox from '@mui/material/Checkbox'
import FormHelperText from '@mui/material/FormHelperText'
import UpIcon from '@mui/icons-material/ArrowDropUp';
import DownIcon from '@mui/icons-material/ArrowDropDown';


const AdvancedSettings = ({ namespaceValue, setNamespace, defaultNamespace }) => {
const AdvancedSettings = ({ namespaceValue, setNamespace, defaultNamespace, isCoreUser, useLexicalVariants, setUseLexicalVariants }) => {
const { t } = useTranslation()
const [open, setOpen] = React.useState(false)

return (
<div className='col-xs-12 padding-0' style={{marginBottom: '16px', marginTop: '4px'}}>
<Button size='small' variant='text' color={open ? 'primary' : 'secondary'} endIcon={open ? <UpIcon fontSize='inherit' /> : <DownIcon fontSize='inherit' />} onClick={() => setOpen(!open)} sx={{textTransform: 'none'}}>
{t('map_project.advanced_settings')}
</Button>
<Button size='small' variant='text' color={open ? 'primary' : 'secondary'} endIcon={open ? <UpIcon fontSize='inherit' /> : <DownIcon fontSize='inherit' />} onClick={() => setOpen(!open)} sx={{textTransform: 'none'}}>
{t('map_project.advanced_settings')}
</Button>
<Collapse in={open}>
<div className='col-xs-12 padding-0' style={{marginTop: '4px'}}>
<div className='col-xs-12 padding-0' style={{marginTop: '4px'}}>
<TextField
fullWidth
size='small'
Expand All @@ -31,6 +34,23 @@ const AdvancedSettings = ({ namespaceValue, setNamespace, defaultNamespace }) =>
defaultValue: 'Namespace passed to $resolveReference. When blank, defaults to {{owner}}. Drives which URL Registry entries apply when resolving canonical URLs.'
})}
/>
{
isCoreUser &&
<>
<FormControlLabel
sx={{marginTop: '8px'}}
control={
<Checkbox
size='small'
checked={Boolean(useLexicalVariants)}
onChange={event => setUseLexicalVariants(event.target.checked)}
/>
}
label={t('map_project.use_lexical_variants')}
/>
<FormHelperText sx={{marginTop: 0}}>{t('map_project.use_lexical_variants_description')}</FormHelperText>
</>
}
</div>
</Collapse>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/components/map-projects/ConfigurationForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const VisuallyHiddenInput = styled('input')({

const deriveCanonicalUrl = relativeUrl => relativeUrl ? `https://ns.openconceptlab.org${relativeUrl}` : ''

const ConfigurationForm = ({ project, handleFileUpload, file, owner, setOwner, name, setName, description, setDescription, repo, onRepoChange, repoVersion, setRepoVersion, versions, mappedSources, targetSourcesFromRows, algosSelected, setAlgosSelected, sx, algos, validColumns, columns, isValidColumnValue, updateColumn, configure, setConfigure, columnVisibilityModel, setColumnVisibilityModel, onSave, isSaving, candidatesScore, onScoreChange, includeDefaultFilter, setIncludeDefaultFilter, filters, setFilters, locales, isLoadingLocales, setAIAssistantColumns, AIAssistantColumns, inAIAssistantGroup, lookupConfig, setLookupConfig, encoderModel, setEncoderModel, isCoreUser, canBridge, canScispacy, promptTemplates, promptTemplate, onPromptTemplateChange, AIModels, AIModel, setAIModel, namespace, setNamespace, promptOutputLocale, setPromptOutputLocale }) => {
const ConfigurationForm = ({ project, handleFileUpload, file, owner, setOwner, name, setName, description, setDescription, repo, onRepoChange, repoVersion, setRepoVersion, versions, mappedSources, targetSourcesFromRows, algosSelected, setAlgosSelected, sx, algos, validColumns, columns, isValidColumnValue, updateColumn, configure, setConfigure, columnVisibilityModel, setColumnVisibilityModel, onSave, isSaving, candidatesScore, onScoreChange, includeDefaultFilter, setIncludeDefaultFilter, filters, setFilters, locales, isLoadingLocales, setAIAssistantColumns, AIAssistantColumns, inAIAssistantGroup, lookupConfig, setLookupConfig, encoderModel, setEncoderModel, isCoreUser, canBridge, canScispacy, promptTemplates, promptTemplate, onPromptTemplateChange, AIModels, AIModel, setAIModel, namespace, setNamespace, promptOutputLocale, setPromptOutputLocale, useLexicalVariants, setUseLexicalVariants }) => {
const { t } = useTranslation();
const isLLMAlgoNotAllowed = !repoVersion?.match_algorithms?.includes('llm')
const appliedLocales = filters?.locale ? filters?.locale?.split(',') : []
Expand Down Expand Up @@ -308,7 +308,7 @@ const ConfigurationForm = ({ project, handleFileUpload, file, owner, setOwner, n
<LookupConfig value={lookupConfig} onChange={setLookupConfig}/>
{
setNamespace &&
<AdvancedSettings namespaceValue={namespaceValue} setNamespace={setNamespace} defaultNamespace={defaultNamespace} />
<AdvancedSettings namespaceValue={namespaceValue} setNamespace={setNamespace} defaultNamespace={defaultNamespace} isCoreUser={isCoreUser} useLexicalVariants={useLexicalVariants} setUseLexicalVariants={setUseLexicalVariants} />
}
{
inAIAssistantGroup && isCoreUser && promptTemplates?.length > 0 &&
Expand Down
9 changes: 8 additions & 1 deletion src/components/map-projects/MapProject.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ const MapProject = () => {
const [lookupConfig, setLookupConfig] = React.useState({})
const [encoderModel, setEncoderModel] = React.useState(DEFAULT_ENCODER_MODEL)
const [promptOutputLocale, setPromptOutputLocale] = React.useState(null)
const [useLexicalVariants, setUseLexicalVariants] = React.useState(false)
// Project canonical-resolution context (plans/unified-mapper-model.md
// "Project configuration: explicit canonical context"). Empty = use the
// project owner as the default resolution namespace.
Expand Down Expand Up @@ -555,6 +556,7 @@ const MapProject = () => {
setRetired(Boolean(copiedProject.include_retired || false))
setAlgosSelected(copiedProject.algorithms || [])
setEncoderModel(copiedProject.encoder_model || DEFAULT_ENCODER_MODEL)
setUseLexicalVariants(Boolean(copiedProject.use_lexical_variants))
if(copiedProject.target_repo_url) {
const repoParams = URIToParentParams(copiedProject.target_repo_url, true)
fetchRepo(dropVersion(copiedProject.target_repo_url))
Expand Down Expand Up @@ -747,6 +749,7 @@ const MapProject = () => {
setEncoderModel(response.data?.encoder_model || DEFAULT_ENCODER_MODEL)
setProjectPromptTemplateKey(response.data?.prompt_template_key || '')
setPromptOutputLocale(response.data?.prompt_output_locale || null)
setUseLexicalVariants(Boolean(response.data?.use_lexical_variants))
setAnalysis(response.data?.analysis || {})
setProject(response.data)
setConfigure(false)
Expand Down Expand Up @@ -1216,6 +1219,7 @@ const MapProject = () => {
formData.append('filters', JSON.stringify(getFilters()))
formData.append('prompt_template_key', getProjectPromptTemplateKey())
formData.append('prompt_output_locale', promptOutputLocale || '')
formData.append('use_lexical_variants', useLexicalVariants)
const isUpdate = Boolean(project?.id)
let service = APIService.new().overrideURL(owner).appendToUrl('map-projects/')
if(isUpdate)
Expand Down Expand Up @@ -1328,7 +1332,8 @@ const MapProject = () => {
'source': _repo.short_code || _repo.id
},
map_config: getMapConfigs(),
filter: rows.length > 1 ? getFilters() : getFacetQueryParam(isEmpty(_filters) ? appliedFacets[rows[0].__index] : _filters)
filter: rows.length > 1 ? getFilters() : getFacetQueryParam(isEmpty(_filters) ? appliedFacets[rows[0].__index] : _filters),
variants: useLexicalVariants
}
}

Expand Down Expand Up @@ -3948,6 +3953,8 @@ const MapProject = () => {
setPromptOutputLocale={setPromptOutputLocale}
namespace={namespace}
setNamespace={setNamespace}
useLexicalVariants={useLexicalVariants}
setUseLexicalVariants={setUseLexicalVariants}
/>
)

Expand Down
4 changes: 3 additions & 1 deletion src/i18n/locales/en/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,9 @@
"create_similar": "Create similar",
"create_similar_name": "Copy of {{name}}",
"set_ai_assistant_output_language": "Set AI Assistant output language",
"ai_assistant_output_locale": "Output locale"
"ai_assistant_output_locale": "Output locale",
"use_lexical_variants": "Use Lexical Variants",
"use_lexical_variants_description": "Expand $match search to include English spelling variants (e.g. color/colour, leukemia/leukaemia) when matching concept names."
},
"app": {
"web_version": "Web Version",
Expand Down
4 changes: 3 additions & 1 deletion src/i18n/locales/es/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,9 @@
"config_error_missing_canonical": "Al algoritmo personalizado \"{{name}}\" le falta una URL canónica válida.",
"target_repo_required_on_load": "A este proyecto le falta un repositorio de destino. Configure el repositorio de destino para ver los candidatos guardados.",
"create_similar": "Crear similar",
"create_similar_name": "Copia de {{name}}"
"create_similar_name": "Copia de {{name}}",
"use_lexical_variants": "Usar variantes léxicas",
"use_lexical_variants_description": "Amplíe la búsqueda $match para incluir variantes ortográficas en inglés (p. ej. color/colour, leukemia/leukaemia) al comparar nombres de conceptos."
},
"app": {
"web_version": "Versión Web",
Expand Down
4 changes: 3 additions & 1 deletion src/i18n/locales/zh/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,9 @@
"config_error_missing_canonical": "自定义算法“{{name}}”缺少有效的规范 URL。",
"target_repo_required_on_load": "此项目缺少目标仓库。请先配置目标仓库,才能查看已保存的候选项。",
"create_similar": "创建类似项目",
"create_similar_name": "{{name}} 的副本"
"create_similar_name": "{{name}} 的副本",
"use_lexical_variants": "使用词汇变体",
"use_lexical_variants_description": "扩展 $match 搜索范围,以在匹配概念名称时包含英语拼写变体(例如 color/colour、leukemia/leukaemia)。"
},
"app": {
"web_version": "Web 版本",
Expand Down