fix(xo-web/job): properly handle array arguments (#5944)

See https://xcp-ng.org/forum/topic/5010

When creating/editing a job, properties of type `array` must not go through the
cross product builder, they must be saved as arrays.
This commit is contained in:
Pierre Donias 2021-10-15 10:42:33 +02:00 committed by GitHub
parent 84dccd800f
commit e2e453985f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 4 deletions

View File

@ -14,6 +14,7 @@
> Users must be able to say: “I had this issue, happy to know it's fixed”
- [Backups] Delete unused snapshots related to other schedules (even no longer existing) (PR [#5949](https://github.com/vatesfr/xen-orchestra/pull/5949))
- [Jobs] Fix `job.runSequence` method (PR [#5944](https://github.com/vatesfr/xen-orchestra/pull/5944))
### Packages to release

View File

@ -92,10 +92,10 @@ const reduceObject = (value, propertyName = 'id') => (value != null && value[pro
/**
* Adapts all data "arrayed" by UI-multiple-selectors to job's cross-product trick
*/
const dataToParamVectorItems = function (params, data) {
const dataToParamVectorItems = function (params, data, properties) {
const items = []
forEach(params, (param, name) => {
if (Array.isArray(data[name]) && param.items) {
if (properties[name].multi && param.items) {
// We have an array for building cross product, the "real" type was $type
const values = []
if (data[name].length === 1) {
@ -286,8 +286,9 @@ export default class Jobs extends Component {
_handleSubmit = () => {
const { name, method, params } = this.refs
const { action, actions, job, owner, timeout } = this.state
const { job, owner, timeout } = this.state
const _action = job === undefined ? action : find(actions, { method: job.method })
const _job = {
type: 'call',
name: name.value,
@ -295,7 +296,7 @@ export default class Jobs extends Component {
method: method.value.method,
paramsVector: {
type: 'crossProduct',
items: dataToParamVectorItems(method.value.info.properties, params.value),
items: dataToParamVectorItems(method.value.info.properties, params.value, _action.uiSchema.properties),
},
userId: owner !== undefined ? owner : this.props.currentUser.id,
timeout: timeout ? timeout * 1e3 : undefined,