@@ -7,7 +7,9 @@ import {LexEntry} from '../../../languageforge/lexicon/shared/model/lex-entry.mo
7
7
import { LexMultiValue } from '../../../languageforge/lexicon/shared/model/lex-multi-value.model' ;
8
8
import {
9
9
LexConfigFieldList ,
10
+ LexConfigMultiOptionList ,
10
11
LexConfigMultiText ,
12
+ LexConfigOptionList ,
11
13
LexiconConfig
12
14
} from '../../../languageforge/lexicon/shared/model/lexicon-config.model' ;
13
15
import { LexiconProjectSettings } from '../../../languageforge/lexicon/shared/model/lexicon-project-settings.model' ;
@@ -327,66 +329,68 @@ export class EditorDataService {
327
329
return meaning || '' ;
328
330
}
329
331
330
- getSortableValue = ( config : any , entry : any ) : string => {
332
+ getSortableValue = ( config : LexiconConfig , entry : any ) : string => {
331
333
const fieldKey = this . entryListModifiers . sortBy . value === 'default' ?
332
334
'lexeme' : this . entryListModifiers . sortBy . value ;
333
335
let sortableValue = '' ;
334
336
let field ;
335
337
let dataNode ;
336
338
const isSpecialMultitext = ( fieldKey === 'lexeme' || fieldKey === 'citationForm' ) ;
339
+ const sensesField = config . entry . fields . senses as LexConfigFieldList ;
337
340
if ( fieldKey in config . entry . fields && fieldKey in entry ) {
338
341
field = config . entry . fields [ fieldKey ] ;
339
342
dataNode = entry [ fieldKey ] ;
340
- } else if ( fieldKey in config . entry . fields . senses . fields && angular . isDefined ( entry . senses ) &&
343
+ } else if ( fieldKey in sensesField . fields && angular . isDefined ( entry . senses ) &&
341
344
entry . senses . length > 0 && fieldKey in entry . senses [ 0 ]
342
345
) {
343
- field = config . entry . fields . senses . fields [ fieldKey ] ;
346
+ field = sensesField . fields [ fieldKey ] ;
344
347
dataNode = entry . senses [ 0 ] [ fieldKey ] ;
345
348
}
346
349
347
350
if ( field || isSpecialMultitext ) {
348
- if ( isSpecialMultitext || field . type === 'multitext' ) {
349
- // special case for lexeme form / citation form. Use citation form if available, fall back to lexeme form
350
- if ( fieldKey === 'lexeme' || fieldKey === 'citationForm' ) {
351
- if ( config . entry . fields . citationForm ) {
352
- const citationFormInputSystems = config . entry . fields . citationForm . inputSystems ;
353
- if ( entry . citationForm && citationFormInputSystems . length > 0 &&
354
- citationFormInputSystems [ 0 ] in entry . citationForm
355
- ) {
356
- sortableValue = entry . citationForm [ citationFormInputSystems [ 0 ] ] . value ;
357
- }
358
- }
359
-
360
- if ( ! sortableValue ) {
361
- const lexemeInputSystems = config . entry . fields . lexeme . inputSystems ;
362
- if ( entry . lexeme && lexemeInputSystems . length > 0 && lexemeInputSystems [ 0 ] in entry . lexeme ) {
363
- sortableValue = entry . lexeme [ lexemeInputSystems [ 0 ] ] . value ;
364
- }
351
+ // special case for lexeme form / citation form. Use citation form if available, fall back to lexeme form
352
+ if ( isSpecialMultitext ) {
353
+ if ( 'citationForm' in config . entry . fields ) {
354
+ const citationFormField = config . entry . fields . citationForm as LexConfigMultiText ;
355
+ // don't sort by the first citation form if it is an "-audio" writing system
356
+ const inputSystem = citationFormField . inputSystems . find ( ( system ) => ! system . includes ( '-audio' ) ) ;
357
+ if ( entry . citationForm && inputSystem && inputSystem in entry . citationForm ) {
358
+ sortableValue = entry . citationForm [ inputSystem ] . value ;
365
359
}
360
+ }
366
361
367
- // regular multi-text field
368
- } else {
369
- if ( field . inputSystems . length > 0 && field . inputSystems [ 0 ] in dataNode ) {
370
- sortableValue = dataNode [ field . inputSystems [ 0 ] ] . value ;
362
+ if ( ! sortableValue ) {
363
+ const lexemeField = config . entry . fields . lexeme as LexConfigMultiText ;
364
+ // don't sort by the first lexeme form if it is an "-audio" writing system
365
+ const inputSystem = lexemeField . inputSystems . find ( ( system ) => ! system . includes ( '-audio' ) ) ;
366
+ if ( entry . lexeme && inputSystem && inputSystem in entry . lexeme ) {
367
+ sortableValue = entry . lexeme [ inputSystem ] . value ;
371
368
}
372
369
}
370
+ } else if ( field . type === 'multitext' ) {
371
+ const inputSystems = ( field as LexConfigMultiText ) . inputSystems ;
372
+ if ( inputSystems . length > 0 && inputSystems [ 0 ] in dataNode ) {
373
+ sortableValue = dataNode [ inputSystems [ 0 ] ] . value ;
374
+ }
373
375
} else if ( field . type === 'optionlist' ) {
374
- if ( config . optionlists && config . optionlists [ field . listCode ] ) {
376
+ const listCode = ( field as LexConfigOptionList ) . listCode ;
377
+ if ( config . optionlists && config . optionlists [ listCode ] ) {
375
378
// something weird here with config.optionlists not being set consistently when this is called - cjh 2017-07
376
- sortableValue = this . getOptionListItem ( config . optionlists [ field . listCode ] , dataNode . value ) . value ;
379
+ sortableValue = this . getOptionListItem ( config . optionlists [ listCode ] , dataNode . value ) . value ;
377
380
} else {
378
381
sortableValue = dataNode . value ;
379
382
}
380
383
} else if ( field . type === 'multioptionlist' && dataNode . values . length > 0 ) {
381
- if ( field . listCode === 'semantic-domain-ddp4' ) {
384
+ const listCode = ( field as LexConfigMultiOptionList ) . listCode ;
385
+ if ( listCode === 'semantic-domain-ddp4' ) {
382
386
if ( this . semanticDomains . data [ dataNode . values [ 0 ] ] ) {
383
387
sortableValue = this . semanticDomains . data [ dataNode . values [ 0 ] ] . value ;
384
388
} else {
385
389
sortableValue = dataNode . values [ 0 ] ;
386
390
}
387
391
} else {
388
- if ( config . optionlists && config . optionlists [ field . listCode ] ) {
389
- sortableValue = this . getOptionListItem ( config . optionlists [ field . listCode ] , dataNode . values [ 0 ] ) . value ;
392
+ if ( config . optionlists && config . optionlists [ listCode ] ) {
393
+ sortableValue = this . getOptionListItem ( config . optionlists [ listCode ] , dataNode . values [ 0 ] ) . value ;
390
394
} else {
391
395
sortableValue = dataNode . values [ 0 ] . value ;
392
396
}
0 commit comments