[feat] add case insensitive search for users (#3413)
Co-authored-by: Arc <33088785+arcbtc@users.noreply.github.com>
This commit is contained in:
parent
4cf9fae3e3
commit
40c065708a
2 changed files with 20 additions and 2 deletions
|
|
@ -424,6 +424,7 @@ class Operator(Enum):
|
||||||
LE = "le"
|
LE = "le"
|
||||||
INCLUDE = "in"
|
INCLUDE = "in"
|
||||||
EXCLUDE = "ex"
|
EXCLUDE = "ex"
|
||||||
|
LIKE = "like"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def as_sql(self):
|
def as_sql(self):
|
||||||
|
|
@ -443,6 +444,8 @@ class Operator(Enum):
|
||||||
return ">="
|
return ">="
|
||||||
elif self == Operator.LE:
|
elif self == Operator.LE:
|
||||||
return "<="
|
return "<="
|
||||||
|
elif self == Operator.LIKE:
|
||||||
|
return "LIKE"
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unknown SQL Operator")
|
raise ValueError("Unknown SQL Operator")
|
||||||
|
|
||||||
|
|
@ -499,7 +502,7 @@ class Filter(BaseModel, Generic[TFilterModel]):
|
||||||
return cls(field=field, op=op, values=values, model=model)
|
return cls(field=field, op=op, values=values, model=model)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def statement(self):
|
def statement(self) -> str:
|
||||||
stmt = []
|
stmt = []
|
||||||
for key in self.values.keys() if self.values else []:
|
for key in self.values.keys() if self.values else []:
|
||||||
clean_key = key.split("__")[0]
|
clean_key = key.split("__")[0]
|
||||||
|
|
@ -582,6 +585,9 @@ class Filters(BaseModel, Generic[TFilterModel]):
|
||||||
for page_filter in self.filters:
|
for page_filter in self.filters:
|
||||||
if page_filter.values:
|
if page_filter.values:
|
||||||
for key, value in page_filter.values.items():
|
for key, value in page_filter.values.items():
|
||||||
|
if page_filter.op == Operator.LIKE:
|
||||||
|
values[key] = f"%{value}%"
|
||||||
|
else:
|
||||||
values[key] = value
|
values[key] = value
|
||||||
if self.search and self.model:
|
if self.search and self.model:
|
||||||
values["search"] = f"%{self.search.lower()}%"
|
values["search"] = f"%{self.search.lower()}%"
|
||||||
|
|
|
||||||
|
|
@ -335,6 +335,7 @@ window.UsersPageLogic = {
|
||||||
},
|
},
|
||||||
|
|
||||||
fetchUsers(props) {
|
fetchUsers(props) {
|
||||||
|
this.relaxFilterForFields(['username', 'email'])
|
||||||
const params = LNbits.utils.prepareFilterQuery(this.usersTable, props)
|
const params = LNbits.utils.prepareFilterQuery(this.usersTable, props)
|
||||||
LNbits.api
|
LNbits.api
|
||||||
.request('GET', `/users/api/v1/user?${params}`)
|
.request('GET', `/users/api/v1/user?${params}`)
|
||||||
|
|
@ -355,6 +356,17 @@ window.UsersPageLogic = {
|
||||||
})
|
})
|
||||||
.catch(LNbits.utils.notifyApiError)
|
.catch(LNbits.utils.notifyApiError)
|
||||||
},
|
},
|
||||||
|
relaxFilterForFields(fieldNames = []) {
|
||||||
|
fieldNames.forEach(fieldName => {
|
||||||
|
const fieldValue = this.usersTable?.filter?.[fieldName]
|
||||||
|
if (fieldValue) {
|
||||||
|
if (this.usersTable.filter[fieldName]) {
|
||||||
|
this.usersTable.filter[`${fieldName}[like]`] = fieldValue
|
||||||
|
delete this.usersTable.filter[fieldName]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
toggleAdmin(userId) {
|
toggleAdmin(userId) {
|
||||||
LNbits.api
|
LNbits.api
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue