Improve user search, DB nulls, and chat UI
Change username filter to use icontains for partial/case-insensitive matching. In CustomUser.save, introduce _NULLABLE_CHAR_FIELDS and convert empty string char fields to None to ensure nullable fields are stored consistently. Update CreateChatModal to always show a subtitle combining the user's full name and account creation date (joined with " · "), improving UI information.
This commit is contained in:
@@ -4,7 +4,7 @@ from django.contrib.auth import get_user_model
|
||||
User = get_user_model()
|
||||
|
||||
class UserFilter(django_filters.FilterSet):
|
||||
username = django_filters.CharFilter(field_name="username", lookup_expr="exact")
|
||||
username = django_filters.CharFilter(field_name="username", lookup_expr="icontains")
|
||||
role = django_filters.CharFilter(field_name="role", lookup_expr="exact")
|
||||
email = django_filters.CharFilter(field_name="email", lookup_expr="icontains")
|
||||
phone_number = django_filters.CharFilter(field_name="phone_number", lookup_expr="icontains")
|
||||
|
||||
@@ -116,7 +116,13 @@ class CustomUser(SoftDeleteModel, AbstractUser):
|
||||
|
||||
return super().delete(*args, **kwargs)
|
||||
|
||||
_NULLABLE_CHAR_FIELDS = ('phone_number', 'city', 'street', 'country', 'postal_code', 'email_verification_token')
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
for field in self._NULLABLE_CHAR_FIELDS:
|
||||
if not getattr(self, field):
|
||||
setattr(self, field, None)
|
||||
|
||||
is_new = self._state.adding # True if object hasn't been saved yet
|
||||
|
||||
# Pre-save flags for new users
|
||||
|
||||
@@ -292,13 +292,16 @@ export default function CreateChatModal({ open, onClose }: Props) {
|
||||
<div className="text-sm font-medium text-brand-text">
|
||||
{user.username}
|
||||
</div>
|
||||
{(user.first_name || user.last_name) && (
|
||||
<div className="truncate text-xs text-brand-text/50">
|
||||
{[user.first_name, user.last_name]
|
||||
{[
|
||||
[user.first_name, user.last_name].filter(Boolean).join(" "),
|
||||
user.create_time
|
||||
? new Date(user.create_time).toLocaleDateString()
|
||||
: null,
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join(" ")}
|
||||
.join(" · ")}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
{selectedUsers.some((s) => s.id === user.id) && (
|
||||
<FiCheck size={14} className="shrink-0 text-brand-accent" />
|
||||
|
||||
Reference in New Issue
Block a user