grouping msg_type choices makes forms look so much better
This commit is contained in:
parent
f98f5053ef
commit
1e2bd01aff
4 changed files with 23 additions and 5 deletions
|
@ -22,6 +22,7 @@ from c3nav.mapdata.models.access import (AccessPermission, AccessPermissionToken
|
|||
AccessRestriction, AccessRestrictionGroup)
|
||||
from c3nav.mesh.messages import MeshMessageType
|
||||
from c3nav.mesh.models import MeshNode
|
||||
from c3nav.mesh.utils import group_msg_type_choices
|
||||
from c3nav.site.models import Announcement
|
||||
|
||||
|
||||
|
@ -302,7 +303,7 @@ class MapUpdateForm(ModelForm):
|
|||
|
||||
class MeshMessageFilterForm(Form):
|
||||
message_types = MultipleChoiceField(
|
||||
choices=[(msgtype.value, msgtype.name) for msgtype in MeshMessageType],
|
||||
choices=group_msg_type_choices(list(MeshMessageType)),
|
||||
required=False,
|
||||
label=_('message types'),
|
||||
)
|
||||
|
|
|
@ -17,8 +17,12 @@
|
|||
{% csrf_token %}
|
||||
<select name="send_msg_type" style="display: inline-block; width: auto;" required>
|
||||
<option value="">select type</option>
|
||||
{% for msg_type in send_msg_types %}
|
||||
<option value="{{ msg_type.name }}">{{ msg_type.pretty_name }}</option>
|
||||
{% for category, msg_types in send_msg_types %}
|
||||
<optgroup label="{{ category }}">
|
||||
{% for value, label in msg_types %}
|
||||
<option value="{{ value }}">{{ label }}</option>
|
||||
{% endfor %}
|
||||
</optgroup>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button type="submit">{% trans 'Send message' %}</button>
|
||||
|
|
|
@ -15,7 +15,7 @@ from c3nav.control.views.base import ControlPanelMixin
|
|||
from c3nav.mesh.forms import MeshMessageForm, MeshNodeForm
|
||||
from c3nav.mesh.messages import MeshMessage, MeshMessageType
|
||||
from c3nav.mesh.models import MeshNode, NodeMessage
|
||||
from c3nav.mesh.utils import get_node_names
|
||||
from c3nav.mesh.utils import get_node_names, group_msg_type_choices
|
||||
|
||||
|
||||
class MeshNodeListView(ControlPanelMixin, ListView):
|
||||
|
@ -30,7 +30,7 @@ class MeshNodeListView(ControlPanelMixin, ListView):
|
|||
def get_context_data(self, *args, **kwargs):
|
||||
return {
|
||||
**super().get_context_data(*args, **kwargs),
|
||||
"send_msg_types": {msg_type for msg_type in MeshMessageForm.msg_types.keys()}
|
||||
"send_msg_types": group_msg_type_choices({msg_type for msg_type in MeshMessageForm.msg_types.keys()})
|
||||
}
|
||||
|
||||
def post(self, request):
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
from operator import attrgetter
|
||||
|
||||
|
||||
def get_mesh_comm_group(address):
|
||||
return 'mesh_comm_%s' % address.replace(':', '-')
|
||||
|
||||
|
@ -14,3 +17,13 @@ def get_node_names():
|
|||
'00:00:00:ff:ff:ff': "direct parent",
|
||||
'00:00:00:00:00:00': "root",
|
||||
}
|
||||
|
||||
|
||||
def group_msg_type_choices(msg_types):
|
||||
msg_types = sorted(msg_types, key=attrgetter('value'))
|
||||
choices = {}
|
||||
for msg_type in msg_types:
|
||||
choices.setdefault(msg_type.name.split('_')[0].lower(), []).append(
|
||||
(msg_type.name, msg_type.pretty_name)
|
||||
)
|
||||
return tuple(choices.items())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue