[Glitch] Add simple language selector to collection editor

Port 806f4f1589 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
diondiondion
2026-03-20 17:02:50 +01:00
committed by Claire
parent 784f0169e2
commit b47f225c79
2 changed files with 56 additions and 4 deletions

View File

@@ -1,4 +1,4 @@
import { useCallback, useMemo, useState } from 'react';
import { Fragment, useCallback, useMemo, useState } from 'react';
import { FormattedMessage, useIntl } from 'react-intl';
@@ -6,6 +6,7 @@ import { useHistory } from 'react-router-dom';
import { isFulfilled } from '@reduxjs/toolkit';
import { languages } from '@/flavours/glitch/initial_state';
import {
hasSpecialCharacters,
inputToHashtag,
@@ -22,6 +23,7 @@ import {
Fieldset,
FormStack,
RadioButtonField,
SelectField,
TextAreaField,
} from 'flavours/glitch/components/form_fields';
import { TextInputField } from 'flavours/glitch/components/form_fields/text_input_field';
@@ -201,6 +203,8 @@ export const CollectionDetails: React.FC = () => {
<TopicField />
<LanguageField />
<Fieldset
legend={
<FormattedMessage
@@ -356,7 +360,7 @@ const TopicField: React.FC = () => {
value={topic}
items={tags}
isLoading={isLoading}
renderItem={renderItem}
renderItem={renderTagItem}
onSelectItem={handleSelectTopicSuggestion}
onChange={handleTopicChange}
autoCapitalize='off'
@@ -380,4 +384,52 @@ const TopicField: React.FC = () => {
);
};
const renderItem = (item: TagSearchResult) => item.label ?? `#${item.name}`;
const renderTagItem = (item: TagSearchResult) => item.label ?? `#${item.name}`;
const LanguageField: React.FC = () => {
const dispatch = useAppDispatch();
const initialLanguage = useAppSelector(
(state) => state.compose.get('default_language') as string,
);
const { language } = useAppSelector((state) => state.collections.editor);
const selectedLanguage = language ?? initialLanguage;
const handleLanguageChange = useCallback(
(event: React.ChangeEvent<HTMLSelectElement>) => {
dispatch(
updateCollectionEditorField({
field: 'language',
value: event.target.value,
}),
);
},
[dispatch],
);
return (
<SelectField
label={
<FormattedMessage
id='collections.collection_language'
defaultMessage='Language'
/>
}
value={selectedLanguage}
onChange={handleLanguageChange}
>
<option value=''>
<FormattedMessage
id='collections.collection_language_none'
defaultMessage='None'
tagName={Fragment}
/>
</option>
{languages?.map(([code, name, localName]) => (
<option key={code} value={code}>
{localName} ({name})
</option>
))}
</SelectField>
);
};

View File

@@ -180,7 +180,7 @@ export const languages = initialState?.languages.map((lang) => {
lang[0],
displayNames?.of(lang[0].replace('zh-YUE', 'yue')) ?? lang[1],
lang[2],
];
] as InitialStateLanguage;
});
// Glitch-soc-specific settings