split out new folder into two separate forms

move_to_new_folder and add_new_folder are now two separate html fields
and form items - so that we can more easily manipulate them on the
front end
This commit is contained in:
Leo Hemsted
2018-11-20 18:03:57 +00:00
parent 6743bd11fa
commit d07de58cd9
7 changed files with 215 additions and 72 deletions

View File

@@ -1135,6 +1135,18 @@ class TemplateFolderForm(StripWhitespaceForm):
name = StringField('Folder name', validators=[DataRequired(message='Cant be empty')])
def required_for_ops(*operations):
operations = set(operations)
def validate(form, field):
if form.op not in operations and field.data:
# super weird
raise ValidationError('Must be empty')
if form.op in operations and not field.data:
raise ValidationError('Cant be empty')
return validate
class TemplateAndFoldersSelectionForm(Form):
ALL_TEMPLATES_FOLDER = {
@@ -1155,6 +1167,7 @@ class TemplateAndFoldersSelectionForm(Form):
self.templates_and_folders.choices = template_list.as_id_and_name
self.op = None
self.is_move_op = self.is_add_op = False
self.move_to.choices = [
@@ -1164,24 +1177,29 @@ class TemplateAndFoldersSelectionForm(Form):
]
def validate(self):
op = request.form.get('operation')
self.op = request.form.get('operation')
self.is_move_op = op in {'move_to_existing_folder', 'move_to_new_folder'}
self.is_add_op = op in {'add_new_folder', 'move_to_new_folder'}
self.is_move_op = self.op in {'move_to_existing_folder', 'move_to_new_folder'}
self.is_add_op = self.op in {'add_new_folder', 'move_to_new_folder'}
if not (self.is_add_op or self.is_move_op):
return False
return super().validate()
def validate_move_to(self, field):
if self.is_move_op and not field.data:
raise ValidationError('Cant be empty')
def get_folder_name(self):
if self.op == 'add_new_folder':
return self.add_new_folder_name.data
elif self.op == 'move_to_new_folder':
return self.move_to_new_folder_name.data
return None
def validate_new_folder_name(self, field):
if self.is_add_op and not field.data:
raise ValidationError('Cant be empty')
templates_and_folders = MultiCheckboxField('Choose templates or folders')
move_to = RadioFieldWithNoneOption('Choose a folder', validators=[Optional()])
new_folder_name = StringField('Folder name')
templates_and_folders = MultiCheckboxField('Choose templates or folders', validators=[
required_for_ops('move_to_new_folder', 'move_to_existing_folder')
])
move_to = RadioFieldWithNoneOption('Choose a folder', validators=[
Optional(),
required_for_ops('move_to_new_folder', 'move_to_existing_folder')
])
add_new_folder_name = StringField('Folder name', validators=[required_for_ops('add_new_folder')])
move_to_new_folder_name = StringField('Folder name', validators=[required_for_ops('move_to_new_folder')])

View File

@@ -118,7 +118,9 @@ def choose_template(service_id, template_type='all', template_folder_id=None):
current_folder_id=template_folder_id,
)
if request.method == 'POST' and can_manage_folders() and templates_and_folders_form.validate_on_submit():
if request.method == 'POST' and templates_and_folders_form.validate_on_submit():
if not can_manage_folders():
abort(403)
return process_folder_management_form(templates_and_folders_form, template_folder_id)
return render_template(
@@ -145,7 +147,7 @@ def process_folder_management_form(form, current_folder_id):
if form.is_add_op:
new_folder_id = template_folder_api_client.create_template_folder(
current_service.id,
name=form.new_folder_name.data,
name=form.get_folder_name(),
parent_id=current_folder_id
)