Fix dropdown submission insert

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ (skjnldsv) 2020-07-28 08:18:59 +02:00
parent 52cfe8c177
commit d9ff7a180a
No known key found for this signature in database
GPG key ID: 60C25B8C072916CF
3 changed files with 20 additions and 17 deletions

View file

@ -40,14 +40,15 @@ use OCA\Forms\Db\SubmissionMapper;
use OCA\Forms\Service\FormsService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\IMapperException;
use OCP\AppFramework\Http;
use OCP\ILogger;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\Security\ISecureRandom;
class ApiController extends Controller {
@ -725,7 +726,11 @@ class ApiController extends Controller {
}
foreach ($answerArray as $answer) {
if ($question['type'] === 'multiple' || $question['type'] === 'multiple_unique') {
// Are we using answer ids as values
if ($question['type'] === 'multiple'
|| $question['type'] === 'multiple_unique'
|| $question['type'] === 'dropdown') {
// Search corresponding option, skip processing if not found
$optionIndex = array_search($answer, array_column($question['options'], 'id'));
if ($optionIndex === false) {

View file

@ -40,13 +40,15 @@
:name="text"
:multiple="isMultiple"
:required="mandatory"
class="question__content">
class="question__content"
@change="onChange">
<option value="">
{{ selectOptionPlaceholder }}
</option>
<option v-for="answer in options"
:key="answer.id"
:value="answer.id">
:value="answer.id"
:selected="isChecked(answer.id)">
{{ answer.text }}
</option>
</select>
@ -152,25 +154,20 @@ export default {
},
methods: {
onChange(event, answerId) {
const isChecked = event.target.checked === true
let values = this.values.slice()
onChange(event) {
// Get all selected options
const answerIds = [...event.target.options]
.filter(option => option.selected)
.map(option => parseInt(option.value, 10))
// Simple select
if (!this.isMultiple) {
this.$emit('update:values', [answerId])
this.$emit('update:values', [answerIds[0]])
return
}
// Select with multiple
if (isChecked) {
values.push(answerId)
} else {
values = values.filter(id => id !== answerId)
}
// Emit values and remove duplicates
this.$emit('update:values', [...new Set(values)])
this.$emit('update:values', [...new Set(answerIds)])
},
/**

View file

@ -167,6 +167,7 @@ export default {
onKeydownEnter(event) {
const formInputs = Array.from(this.$refs.form)
const sourceInputIndex = formInputs.findIndex(input => input === event.originalTarget)
// Focus next form element
formInputs[sourceInputIndex + 1].focus()
},