@@ -4,9 +4,7 @@ import { LanguageModality } from '@entities/language/LanguageModality';
44import { LanguageData } from '@entities/language/LanguageTypes' ;
55import ResponsiveGrid from '@widgets/cardlists/ResponsiveGrid' ;
66
7- import {
8- getLanguageRootLanguageFamily ,
9- } from '@entities/language/LanguageFamilyUtils' ;
7+ import { getLanguageRootLanguageFamily } from '@entities/language/LanguageFamilyUtils' ;
108import { useDataContext } from '@features/data/context/useDataContext' ;
119import HoverableObjectName from '@features/layers/hovercard/HoverableObjectName' ;
1210import LimitInput from '@features/pagination/LimitInput' ;
@@ -23,79 +21,81 @@ import CountOfPeople from '@shared/ui/CountOfPeople';
2321import Deemphasized from '@shared/ui/Deemphasized' ;
2422
2523const LanguagesMissingWritingSystems : React . FC = ( ) => {
26- const { languagesInSelectedSource } = useDataContext ( ) ;
27- const filterBySubstring = getFilterBySubstring ( ) ;
28- const filterByConnections = getFilterByConnections ( ) ;
29- const filterByScope = getScopeFilter ( ) ;
30- const sortFunction = getSortFunction ( ) ;
31- const { getCurrentObjects } = usePagination < LanguageData > ( ) ;
24+ const { languagesInSelectedSource } = useDataContext ( ) ;
25+ const filterBySubstring = getFilterBySubstring ( ) ;
26+ const filterByConnections = getFilterByConnections ( ) ;
27+ const filterByScope = getScopeFilter ( ) ;
28+ const sortFunction = getSortFunction ( ) ;
29+ const { getCurrentObjects } = usePagination < LanguageData > ( ) ;
3230
33- const languagesFiltered = useMemo (
34- ( ) =>
35- languagesInSelectedSource
36- . filter ( filterBySubstring )
37- . filter ( filterByConnections )
38- . filter ( filterByScope )
39- . filter ( ( lang ) => ! lang . writingSystems || Object . keys ( lang . writingSystems ) . length === 0 )
40- . filter ( ( lang ) => lang . modality !== LanguageModality . Sign ) ,
41- [ languagesInSelectedSource , filterBySubstring , filterByConnections , filterByScope ] ,
42- ) ;
31+ const languagesFiltered = useMemo (
32+ ( ) =>
33+ languagesInSelectedSource
34+ . filter ( filterBySubstring )
35+ . filter ( filterByConnections )
36+ . filter ( filterByScope )
37+ . filter ( ( lang ) => ! lang . writingSystems || Object . keys ( lang . writingSystems ) . length === 0 )
38+ . filter ( ( lang ) => lang . modality !== LanguageModality . Sign ) ,
39+ [ languagesInSelectedSource , filterBySubstring , filterByConnections , filterByScope ] ,
40+ ) ;
4341
44- return (
45- < CollapsibleReport title = { `Languages missing writing systems (${ languagesFiltered . length } )` } >
46- This report identifies languages without associated writing systems. Languages may be missing
47- writing system data due to data gaps, incomplete ingestion from upstream sources, or because
48- they are primarily oral. Extinct and historical languages often have harder-to-find writing system
49- information. Sign languages are excluded from this report.
50-
51- < div style = { { display : 'flex' , alignItems : 'center' , gap : '1em' , marginTop : '1em' } } >
52- < LimitInput />
42+ return (
43+ < CollapsibleReport title = { `Languages missing writing systems (${ languagesFiltered . length } )` } >
44+ This report identifies languages without associated writing systems. Languages may be missing
45+ writing system data due to data gaps, incomplete ingestion from upstream sources, or because
46+ they are primarily oral. Extinct and historical languages often have harder-to-find writing
47+ system information. Sign languages are excluded from this report.
48+ < div style = { { display : 'flex' , alignItems : 'center' , gap : '1em' , marginTop : '1em' } } >
49+ < LimitInput />
50+ < div >
51+ < PaginationControls itemCount = { languagesFiltered . length } />
52+ </ div >
53+ </ div >
54+ < div style = { { marginTop : '1em' , marginBottom : '1em' } } >
55+ < ResponsiveGrid >
56+ { getCurrentObjects ( languagesFiltered . sort ( sortFunction ) ) . map ( ( lang ) => {
57+ const family = getLanguageRootLanguageFamily ( lang ) ;
58+ return (
59+ < ViewCard key = { lang . ID } >
5360 < div >
54- < PaginationControls itemCount = { languagesFiltered . length } />
61+ < label > Language ID:</ label >
62+ { lang . ID }
5563 </ div >
56- </ div >
57-
58- < div style = { { marginTop : '1em' , marginBottom : '1em' } } >
59- < ResponsiveGrid >
60- { getCurrentObjects ( languagesFiltered . sort ( sortFunction ) ) . map ( ( lang ) => {
61- const family = getLanguageRootLanguageFamily ( lang ) ;
62- return (
63- < ViewCard key = { lang . ID } >
64- < div >
65- < label > Language ID:</ label >
66- { lang . ID }
67- </ div >
68- < div >
69- < label > Language Name:</ label >
70- < HoverableObjectName object = { lang } />
71- </ div >
72- < div >
73- < label > Language Family:</ label >
74- { family ? < HoverableObjectName object = { family } /> : < Deemphasized > None</ Deemphasized > }
75- </ div >
76- < div >
77- < label > ISO Status:</ label >
78- { lang . ISO . status || < Deemphasized > Unknown</ Deemphasized > }
79- </ div >
80- < div >
81- < label > Modality:</ label >
82- { lang . modality || < Deemphasized > Unknown</ Deemphasized > }
83- </ div >
84- < div >
85- < label > Population:</ label >
86- { lang . populationEstimate ? (
87- < CountOfPeople count = { lang . populationEstimate } />
88- ) : (
89- < Deemphasized > no population</ Deemphasized >
90- ) }
91- </ div >
92- </ ViewCard >
93- ) ;
94- } ) }
95- </ ResponsiveGrid >
96- </ div >
97- </ CollapsibleReport >
98- ) ;
64+ < div >
65+ < label > Language Name:</ label >
66+ < HoverableObjectName object = { lang } />
67+ </ div >
68+ < div >
69+ < label > Language Family:</ label >
70+ { family ? (
71+ < HoverableObjectName object = { family } />
72+ ) : (
73+ < Deemphasized > None</ Deemphasized >
74+ ) }
75+ </ div >
76+ < div >
77+ < label > ISO Status:</ label >
78+ { lang . ISO . status || < Deemphasized > Unknown</ Deemphasized > }
79+ </ div >
80+ < div >
81+ < label > Modality:</ label >
82+ { lang . modality || < Deemphasized > Unknown</ Deemphasized > }
83+ </ div >
84+ < div >
85+ < label > Population:</ label >
86+ { lang . populationEstimate ? (
87+ < CountOfPeople count = { lang . populationEstimate } />
88+ ) : (
89+ < Deemphasized > no population</ Deemphasized >
90+ ) }
91+ </ div >
92+ </ ViewCard >
93+ ) ;
94+ } ) }
95+ </ ResponsiveGrid >
96+ </ div >
97+ </ CollapsibleReport >
98+ ) ;
9999} ;
100100
101- export default LanguagesMissingWritingSystems ;
101+ export default LanguagesMissingWritingSystems ;
0 commit comments