From d5435439c0d6d62676e8a57d4a89b2b76e24a01e Mon Sep 17 00:00:00 2001
From: Fredrik Jonsson <frjo@xdeb.org>
Date: Mon, 10 Sep 2018 10:43:05 +0200
Subject: [PATCH] Issue #515 Make CategoryQuestionBlock use
 Select2MultipleWidget if more than 32 option to maintain usability.

---
 opentech/apply/categories/blocks.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/opentech/apply/categories/blocks.py b/opentech/apply/categories/blocks.py
index 35e9a51f1..ffa193a4e 100644
--- a/opentech/apply/categories/blocks.py
+++ b/opentech/apply/categories/blocks.py
@@ -6,6 +6,7 @@ from wagtail.core.blocks import BooleanBlock, CharBlock, ChooserBlock, TextBlock
 from wagtail.core.utils import resolve_model_string
 
 from opentech.apply.stream_forms.blocks import OptionalFormFieldBlock
+from django_select2.forms import Select2MultipleWidget
 
 
 class ModelChooserBlock(ChooserBlock):
@@ -63,7 +64,13 @@ class CategoryQuestionBlock(OptionalFormFieldBlock):
 
     def get_widget(self, struct_value):
         if struct_value['multi']:
-            return forms.CheckboxSelectMultiple
+            category = struct_value['category']
+            category_size = category.options.count()
+            # Pick widget according to number of options to maintain good usability.
+            if category_size < 32:
+                return forms.CheckboxSelectMultiple
+            else:
+                return Select2MultipleWidget
         else:
             return forms.RadioSelect
 
-- 
GitLab