Skip to content

Commit 1d7214d

Browse files
committed
Revert "Add full-text user search and search UI"
This reverts commit f0d7367.
1 parent f0d7367 commit 1d7214d

30 files changed

Lines changed: 7 additions & 239 deletions

File tree

app/Http/Requests/UserListRequest.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ public function rules()
2121
{
2222
return [
2323
'orderBy' => 'in:first_name,last_name,organisation,industry_type,created_at,last_logged_in_at',
24-
'sort' => 'in:asc,desc',
25-
'filters.search' => 'nullable|string|min:3|max:191'
24+
'sort' => 'in:asc,desc'
2625
];
2726
}
2827

@@ -37,10 +36,8 @@ public function getUserQuery(): UserQuery
3736
$userQuery->setOrderBy($orderBy);
3837
$userQuery->setSort($sort);
3938

40-
$filters = $this->get('filters', $this->get('filters\\', []));
41-
42-
foreach ($filters as $column => $value) {
43-
$userQuery->addFilter(rtrim($column, '\\'), $value);
39+
foreach ($this->get('filters', []) as $column => $value) {
40+
$userQuery->addFilter($column, $value);
4441
}
4542

4643
return $userQuery;

app/Repositories/Access/UserRepository.php

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,6 @@ public function queryUsers(UserQuery $userQuery): Builder
186186
});
187187
});
188188

189-
$search = trim($userQuery->getFilters()->get('search', ''));
190-
if (mb_strlen($search) >= 3) {
191-
$this->applySearchFilter($builder, $search);
192-
}
193-
194189
$society = $userQuery->getFilters()->only(['society'])->first();
195190
if ($society) {
196191
$builder->whereHas('organisations', function ($query) use ($society) {
@@ -219,25 +214,12 @@ public function queryUsers(UserQuery $userQuery): Builder
219214
}
220215

221216
if (in_array($userQuery->getOrderBy(), ['first_name', 'last_name', 'organisation', 'industry_type'])) {
222-
$builder->orderByRaw('(SELECT ' . $userQuery->getOrderBy() . ' FROM user_profiles WHERE user_profiles.user_id = users.id AND user_profiles.deleted_at IS NULL ORDER BY user_profiles.id DESC LIMIT 1) ' . $userQuery->getSort());
217+
$builder->orderByRaw('(SELECT ' . $userQuery->getOrderBy() . ' FROM user_profiles WHERE user_profiles.user_id = users.id) ' . $userQuery->getSort());
223218
}
224219

225220
return $builder;
226221
}
227222

228-
private function applySearchFilter(Builder $builder, string $search)
229-
{
230-
$profileMatch = 'MATCH(user_profiles.first_name, user_profiles.last_name, user_profiles.organisation) AGAINST (? IN NATURAL LANGUAGE MODE)';
231-
$emailMatch = 'MATCH(users.email) AGAINST (? IN NATURAL LANGUAGE MODE)';
232-
$profileScore = "(SELECT {$profileMatch} FROM user_profiles WHERE user_profiles.user_id = users.id AND user_profiles.deleted_at IS NULL ORDER BY user_profiles.id DESC LIMIT 1)";
233-
$score = "({$emailMatch} + COALESCE({$profileScore}, 0))";
234-
235-
$builder->select('users.*')
236-
->selectRaw("{$score} as search_score", [$search, $search])
237-
->whereRaw("({$emailMatch} > 0 OR EXISTS (SELECT 1 FROM user_profiles WHERE user_profiles.user_id = users.id AND user_profiles.deleted_at IS NULL AND {$profileMatch} > 0))", [$search, $search])
238-
->orderBy('search_score', 'desc');
239-
}
240-
241223
public function deactivate(User $user)
242224
{
243225
$user->activated = false;

database/migrations/2026_05_29_000000_add_fulltext_indexes_for_user_search.php

Lines changed: 0 additions & 51 deletions
This file was deleted.

resources/assets/js/pages/users/list.vue

Lines changed: 3 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,6 @@
6767
:staynull="true"
6868
v-if="!apiUsers"/>
6969
</b-col>
70-
<b-col cols="12" md="6" lg="4" xl="3" class="ml-lg-auto">
71-
<p class="select-header"> {{ $t('users.list.search') }}</p>
72-
<b-form-input
73-
v-model.trim="searchFilter"
74-
class="search-filter-input"
75-
type="text"
76-
:disabled="fetchingUsers"
77-
:placeholder="$t('users.list.search_placeholder')">
78-
</b-form-input>
79-
</b-col>
8070
<b-col class="text-right">
8171
<b-button @click="clearFilters" :disabled="noFilters" class="btn-outline-primary clear-filter-btn">
8272
{{ $t('users.list.clear_filters') }}
@@ -236,7 +226,6 @@ export default {
236226
fetchingUsers: false,
237227
roles: null,
238228
locationOptions: null,
239-
searchDebounce: null,
240229
countries: require('country-list')()
241230
}
242231
},
@@ -250,21 +239,6 @@ export default {
250239
deep: true
251240
},
252241
activatedFilter: fetchHandler,
253-
searchFilter: {
254-
handler (val, oldVal) {
255-
if (val !== oldVal) {
256-
clearTimeout(this.searchDebounce)
257-
const search = val ? val.trim() : ''
258-
if (search.length > 0 && search.length < 3) {
259-
return
260-
}
261-
this.searchDebounce = setTimeout(() => {
262-
this.currentPage = 1
263-
this.fetchUsers()
264-
}, 350)
265-
}
266-
}
267-
},
268242
roleFilter: fetchHandler,
269243
countryFilter: fetchHandler,
270244
termsFilter: fetchHandler,
@@ -285,9 +259,6 @@ export default {
285259
this.fetchUsers()
286260
this.fetchTerms()
287261
},
288-
beforeDestroy () {
289-
clearTimeout(this.searchDebounce)
290-
},
291262
metaInfo () {
292263
return { title: this.$t('users.list.manage') }
293264
},
@@ -297,7 +268,6 @@ export default {
297268
this.roleFilter = null
298269
this.countryFilter = null
299270
this.selectedSoc = null
300-
this.searchFilter = ''
301271
this.termsFilter = termsDefault
302272
},
303273
getSocietyByCode (code) {
@@ -340,14 +310,12 @@ export default {
340310
},
341311
async fetchUsers () {
342312
this.fetchingUsers = true
343-
if (this.rolesEmpty) {
344-
await this.fetchRoles()
345-
}
313+
await this.fetchRoles()
346314
347-
const apiUserRole = this.roleOptions.find(role => role.name === 'API User')
315+
let apiUserRole = this.roleOptions.find(role => role.name === 'API User')
348316
let filterRoleId = this.roleFilter
349317
if (filterRoleId === null) {
350-
filterRoleId = this.apiUsers && apiUserRole ? apiUserRole.id : null
318+
filterRoleId = this.apiUsers ? apiUserRole.id : null
351319
}
352320
353321
if (!apiUserRole && this.apiUsers) {
@@ -362,7 +330,6 @@ export default {
362330
role: filterRoleId,
363331
society: this.selectedSoc ? this.selectedSoc.countryCode : null,
364332
country_code: this.countryFilter,
365-
search: this.searchFilter,
366333
terms_version: this.termsFilter === termsDefault ? null : this.termsFilter
367334
},
368335
admin: !this.apiUsers && filterRoleId === null,
@@ -441,14 +408,6 @@ export default {
441408
return this.$store.state.users.filters.roleFilter
442409
}
443410
},
444-
searchFilter: {
445-
set: function (newVal) {
446-
this.$store.dispatch('users/setFilter', { searchFilter: newVal })
447-
},
448-
get: function () {
449-
return this.$store.state.users.filters.searchFilter
450-
}
451-
},
452411
countryFilter: {
453412
set: function(newVal) {
454413
this.$store.dispatch('users/setFilter', { countryFilter: newVal })
@@ -492,7 +451,6 @@ export default {
492451
this.roleFilter === null &&
493452
this.countryFilter === null &&
494453
this.selectedSoc === null &&
495-
!this.searchFilter &&
496454
this.termsFilter === termsDefault
497455
},
498456
...mapGetters({
@@ -529,11 +487,5 @@ export default {
529487
.text-nowrap {
530488
white-space: nowrap;
531489
}
532-
.search-filter-input {
533-
background: #E9E9E9;
534-
border: none;
535-
border-radius: 10px;
536-
height: 2.45rem;
537-
}
538490
539491
</style>

resources/assets/js/plugins/axios.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ axios.interceptors.request.use(request => {
2323

2424
// Response interceptor
2525
axios.interceptors.response.use(response => response, error => {
26-
if (axios.isCancel(error)) {
27-
return Promise.reject(error)
28-
}
29-
3026
if (error.response && error.response.status) {
3127
const { status } = error.response
3228

resources/assets/js/store/modules/users.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import axios from 'axios'
22
import * as types from '../mutation-types'
33
import querystring from 'querystring'
44

5-
let latestFetchUsersRequest = 0
6-
75
// state
86
export const state = {
97
users: {
@@ -26,7 +24,6 @@ export const state = {
2624
roleFilter: null,
2725
countryFilter: null,
2826
selectedSoc: null,
29-
searchFilter: '',
3027
termsFilter: 'Terms and Conditions'
3128
}
3229
}
@@ -107,7 +104,6 @@ export const actions = {
107104
roleFilter: null,
108105
countryFilter: null,
109106
selectedSoc: null,
110-
searchFilter: '',
111107
termsFilter: 'Terms and Conditions'
112108
})
113109
commit(types.SET_ORDER_BY, null)
@@ -124,7 +120,6 @@ export const actions = {
124120
commit(types.SET_SORT_DESC, sortDesc)
125121
},
126122
async fetchUsers ({ commit }, { page, filters, excludes, admin, orderBy, sort }) {
127-
const requestId = ++latestFetchUsersRequest
128123
const queryOptions = { page }
129124
if (orderBy !== null) {
130125
queryOptions.orderBy = orderBy
@@ -136,19 +131,11 @@ export const actions = {
136131
filterString += filters.society !== null ? `&filters[society]=${filters.society}` : ''
137132
filterString += filters.country_code !== null ? `&filters[country_code]=${filters.country_code}` : ''
138133
filterString += filters.terms_version !== null ? `&filters[terms_version]=${filters.terms_version}` : ''
139-
const search = filters.search ? filters.search.trim() : ''
140-
filterString += search.length >= 3 ? `&filters[search]=${encodeURIComponent(search)}` : ''
141134

142135
const url = admin ? '/api/users/admins' : '/api/users'
143136
const { data } = await axios.get(`${url}?${querystring.stringify(queryOptions)}${filterString}`)
144-
if (requestId !== latestFetchUsersRequest) {
145-
return
146-
}
147137
commit(types.FETCH_USERS_SUCCESS, { users: data })
148138
} catch (e) {
149-
if (requestId !== latestFetchUsersRequest) {
150-
return
151-
}
152139
commit(types.FETCH_USERS_FAILURE, { error: e })
153140
}
154141
},

resources/lang/am.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,6 @@
343343
"select_country": "ሀገር ምረጥ",
344344
"select_terms": "የውሎች ስሪት ምረጥ",
345345
"select_society": "የብሔራዊ ማህበር ምረጥ",
346-
"search": "ፈልግ",
347-
"search_placeholder": "ስም፣ ኢሜይል ወይም ድርጅት (ቢያንስ 3 ቁምፊዎች)",
348346
"create": "አዲስ መጠቀሚያ ይፍጠሩ፤",
349347
"download_report": "ሪፖርት ያውርዱ፤",
350348
"empty": "ምንም መጠቀሚያ ማግኘት አልተቻለም፤",

resources/lang/ar.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,6 @@
349349
"select_country": "اختر بلدًا",
350350
"select_terms": "اختر إصدار الشروط",
351351
"select_society": "اختر جمعية وطنية",
352-
"search": "بحث",
353-
"search_placeholder": "الاسم أو البريد الإلكتروني أو المؤسسة (3 أحرف على الأقل)",
354352
"create": "إنشاء مستخدم جديد",
355353
"download_report": "تنزيل التقرير",
356354
"empty": "لم يتم العثور على أي مستخدمين",

resources/lang/bn.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,6 @@
343343
"select_country": "একটি দেশ নির্বাচন করুন",
344344
"select_terms": "একটি শর্তাবলী সংস্করণ নির্বাচন করুন",
345345
"select_society": "জাতীয় সমিতি নির্বাচন করুন",
346-
"search": "অনুসন্ধান",
347-
"search_placeholder": "নাম, ইমেল বা সংস্থা (কমপক্ষে ৩ অক্ষর)",
348346
"create": "নতুন ব্যবহারকারী তৈরি করুন",
349347
"download_report": "রিপোর্ট ডাউনলোড করুন",
350348
"empty": "কোন ব্যবহারকারী খুঁজে পাইনি",

resources/lang/de.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,6 @@
343343
"select_country": "Land auswählen",
344344
"select_terms": "Version der Bedingungen auswählen",
345345
"select_society": "Nationale Gesellschaft auswählen",
346-
"search": "Suchen",
347-
"search_placeholder": "Name, E-Mail oder Organisation (mind. 3 Zeichen)",
348346
"create": "Neuen Benutzer anlegen",
349347
"download_report": "Bericht herunterladen",
350348
"empty": "Es konnten keine Benutzer gefunden werden",

0 commit comments

Comments
 (0)