зеркало из https://github.com/nextcloud/forms.git
Merge pull request #520 from nextcloud/fix/dropdown-insert
Fix dropdown submission insert
This commit is contained in:
Коммит
67dd17575a
|
@ -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) {
|
||||
|
|
|
@ -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)])
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -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()
|
||||
},
|
||||
|
|
Загрузка…
Ссылка в новой задаче