Refactor vocabulary search functionality in VocabService and update UI components
- Modified the searchVocabs method in VocabService to consolidate search parameters into a single query term for improved flexibility. - Updated VocabSearchDialog to replace separate input fields for mother tongue and learning language with a unified search term input. - Adjusted button logic to enable search only when a term is provided, enhancing user experience. - Added new translations for the search term in both German and English locales to support the updated UI.
This commit is contained in:
@@ -408,20 +408,23 @@ export default class VocabService {
|
||||
return { languageId: access.id, isOwner: access.isOwner, vocabs: rows };
|
||||
}
|
||||
|
||||
async searchVocabs(hashedUserId, languageId, { learning = '', motherTongue = '' } = {}) {
|
||||
async searchVocabs(hashedUserId, languageId, { q = '', learning = '', motherTongue = '' } = {}) {
|
||||
const user = await this._getUserByHashedId(hashedUserId);
|
||||
const access = await this._getLanguageAccess(user.id, languageId);
|
||||
|
||||
const query = typeof q === 'string' ? q.trim() : '';
|
||||
// Abwärtskompatibel: falls alte Parameter genutzt werden, zusammenfassen
|
||||
const learningTerm = typeof learning === 'string' ? learning.trim() : '';
|
||||
const motherTerm = typeof motherTongue === 'string' ? motherTongue.trim() : '';
|
||||
if (!learningTerm && !motherTerm) {
|
||||
const effective = query || learningTerm || motherTerm;
|
||||
|
||||
if (!effective) {
|
||||
const err = new Error('Missing search term');
|
||||
err.status = 400;
|
||||
throw err;
|
||||
}
|
||||
|
||||
const learningLike = learningTerm ? `%${learningTerm}%` : null;
|
||||
const motherLike = motherTerm ? `%${motherTerm}%` : null;
|
||||
const like = `%${effective}%`;
|
||||
|
||||
const rows = await sequelize.query(
|
||||
`
|
||||
@@ -436,16 +439,14 @@ export default class VocabService {
|
||||
JOIN community.vocab_lexeme l1 ON l1.id = cl.learning_lexeme_id
|
||||
JOIN community.vocab_lexeme l2 ON l2.id = cl.reference_lexeme_id
|
||||
WHERE c.language_id = :languageId
|
||||
AND (:learningLike IS NULL OR l1.text ILIKE :learningLike)
|
||||
AND (:motherLike IS NULL OR l2.text ILIKE :motherLike)
|
||||
AND (l1.text ILIKE :like OR l2.text ILIKE :like)
|
||||
ORDER BY l2.text ASC, l1.text ASC, c.title ASC
|
||||
LIMIT 200
|
||||
`,
|
||||
{
|
||||
replacements: {
|
||||
languageId: access.id,
|
||||
learningLike,
|
||||
motherLike,
|
||||
like,
|
||||
},
|
||||
type: sequelize.QueryTypes.SELECT,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user