@@ -143,44 +143,43 @@ function calculateCountryColors() {
143143 areaToCountryCode [ country [ 'alpha-3' ] . toLowerCase ( ) ] = country [ 'country-code' ] ;
144144 } ) ;
145145
146- // メンバーの国コードを収集
147- const memberData = members . map ( member => {
148- const area = member . area . toLowerCase ( ) ;
149- console . log ( 'Processing member area:' , member . area , 'Available areas:' , Object . keys ( AREA_DATA ) ) ;
150-
151- // 特別な地域の処理(例:usa_texas)
152- if ( area . includes ( '_' ) ) {
153- const [ countryPart , regionPart ] = area . split ( '_' ) ;
154- const countryCode = areaToCountryCode [ countryPart ] ;
155- const areaKey = `${ countryCode } _${ regionPart } ` ;
156- if ( AREA_DATA [ areaKey ] ) {
157- return {
158- country : getCountryAlpha3 ( countryCode ) ,
159- area : member . area
160- } ;
146+ // メンバーの国コードを収集(areaが設定されているメンバーのみ)
147+ const memberData = members
148+ . filter ( member => member . area && member . area !== 'Other' ) // Other や undefined を除外
149+ . map ( member => {
150+ const area = member . area . toLowerCase ( ) ;
151+
152+ // 特別な地域の処理(例:usa_texas)
153+ if ( area . includes ( '_' ) ) {
154+ const [ countryPart , regionPart ] = area . split ( '_' ) ;
155+ const countryCode = areaToCountryCode [ countryPart ] ;
156+ const areaKey = `${ countryCode } _${ regionPart } ` ;
157+ if ( AREA_DATA [ areaKey ] ) {
158+ return {
159+ country : getCountryAlpha3 ( countryCode ) ,
160+ area : member . area
161+ } ;
162+ }
161163 }
162- }
163164
164- // 通常の国の処理
165- const countryCode = areaToCountryCode [ area ] ;
166- if ( ! countryCode ) {
167- console . warn ( `Area data not found for member area: ${ member . area } ` ) ;
168- return null ;
169- }
170-
171- // 国コードで直接AREA_DATAを検索
172- if ( ! AREA_DATA [ countryCode ] ) {
173- console . warn ( `Area data not found for country code: ${ countryCode } ` ) ;
174- return null ;
175- }
165+ // 通常の国の処理
166+ const countryCode = areaToCountryCode [ area ] ;
167+ if ( ! countryCode ) {
168+ console . warn ( `Area data not found for member area: ${ member . area } ` ) ;
169+ return null ;
170+ }
176171
177- return {
178- country : getCountryAlpha3 ( countryCode ) ,
179- area : member . area
180- } ;
181- } ) . filter ( Boolean ) ;
172+ // 国コードで直接AREA_DATAを検索
173+ if ( ! AREA_DATA [ countryCode ] ) {
174+ console . warn ( `Area data not found for country code: ${ countryCode } ` ) ;
175+ return null ;
176+ }
182177
183- console . log ( 'Member data:' , memberData ) ;
178+ return {
179+ country : getCountryAlpha3 ( countryCode ) ,
180+ area : member . area
181+ } ;
182+ } ) . filter ( Boolean ) ;
184183
185184 return ( { id } ) => {
186185 const countryData = countryCodesData . find ( c => c [ 'country-code' ] === id ) ;
@@ -206,17 +205,20 @@ function updateMembersList() {
206205 // 地域ごとにメンバーをグループ化
207206 const groupedMembers = { } ;
208207 members . forEach ( member => {
209- if ( ! groupedMembers [ member . area ] ) {
210- groupedMembers [ member . area ] = [ ] ;
208+ const area = member . area || 'Other' ; // エリアが未設定の場合は 'Other' を使用
209+ if ( ! groupedMembers [ area ] ) {
210+ groupedMembers [ area ] = [ ] ;
211211 }
212- groupedMembers [ member . area ] . push ( member ) ;
212+ groupedMembers [ area ] . push ( member ) ;
213213 } ) ;
214214
215215 // アクティブな地域を追跡
216216 let activeCard = null ;
217217
218- // エリアをアルファベット順にソート
218+ // エリアをアルファベット順にソート(Otherは最後に配置)
219219 const sortedAreas = Object . keys ( groupedMembers ) . sort ( ( a , b ) => {
220+ if ( a === 'Other' ) return 1 ;
221+ if ( b === 'Other' ) return - 1 ;
220222 return a . toLowerCase ( ) . localeCompare ( b . toLowerCase ( ) ) ;
221223 } ) ;
222224
@@ -226,29 +228,30 @@ function updateMembersList() {
226228 const regionCard = document . createElement ( 'div' ) ;
227229 regionCard . className = 'region-card' ;
228230
229- // エリアコードを取得
231+ // エリアコードを取得(Otherの場合はスキップ)
230232 let areaData ;
231233 let countryCode ;
232234
233- if ( area . includes ( '_' ) ) {
234- // 地域の場合(例:840_texas)
235- [ countryCode ] = area . split ( '_' ) ;
236- areaData = AREA_DATA [ area ] ;
237- } else {
238- // 国の場合
239- countryCode = areaToCountryCode [ area . toLowerCase ( ) ] ;
240- areaData = AREA_DATA [ countryCode ] ;
235+ if ( area !== 'Other' ) {
236+ if ( area . includes ( '_' ) ) {
237+ // 地域の場合(例:840_texas)
238+ [ countryCode ] = area . split ( '_' ) ;
239+ areaData = AREA_DATA [ area ] ;
240+ } else {
241+ // 国の場合
242+ countryCode = areaToCountryCode [ area . toLowerCase ( ) ] ;
243+ areaData = AREA_DATA [ countryCode ] ;
244+ }
241245 }
242246
243- if ( ! areaData ) {
244- console . warn ( `Area data not found for: ${ area } ` ) ;
245- return ;
246- }
247-
248247 // データ属性とIDを追加
249248 regionCard . setAttribute ( 'data-area' , area ) ;
250- regionCard . setAttribute ( 'data-country-code' , countryCode ) ;
251- regionCard . id = `region-${ countryCode } ` ;
249+ if ( countryCode ) {
250+ regionCard . setAttribute ( 'data-country-code' , countryCode ) ;
251+ regionCard . id = `region-${ countryCode } ` ;
252+ } else {
253+ regionCard . id = 'region-other' ;
254+ }
252255
253256 // メンバーを役職でソート
254257 const sortedMembers = areaMembers . sort ( ( a , b ) => {
@@ -274,7 +277,7 @@ function updateMembersList() {
274277 } ) ;
275278
276279 regionCard . innerHTML = `
277- <h3>${ areaData . name || area } </h3>
280+ <h3>${ area === 'Other' ? 'Other' : ( areaData ? .name || area ) } </h3>
278281 <div class="member-count">${ sortedMembers . length } member(s)</div>
279282 <div class="member-list">
280283 ${ sortedMembers . map ( member => `
@@ -315,8 +318,8 @@ function updateMembersList() {
315318 regionCard . classList . add ( 'active' ) ;
316319 activeCard = regionCard ;
317320
318- if ( areaData && areaData . center ) {
319- // 地球儀を該当地域に移動
321+ if ( area !== 'Other' && areaData && areaData . center ) {
322+ // 地球儀を該当地域に移動(Otherの場合は移動しない)
320323 globe . pointOfView ( {
321324 lat : areaData . center [ 1 ] ,
322325 lng : areaData . center [ 0 ] ,
0 commit comments