Skip to content

Commit 885edd7

Browse files
committed
wip
1 parent 822e5b4 commit 885edd7

File tree

7 files changed

+64
-21
lines changed

7 files changed

+64
-21
lines changed

app/components/forms/orders/order-form.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export default Component.extend(FormMixin, {
2727
attendee.set('firstname', '');
2828
attendee.set('lastname', '');
2929
attendee.set('email', '');
30+
attendee.set('complexFieldValues', {});
3031
});
3132
return this.data.attendees;
3233
}),
@@ -471,6 +472,17 @@ export default Component.extend(FormMixin, {
471472
validationRules.fields[`facebook_required_${ index}`] = facebookRequiredValidation;
472473
validationRules.fields[`github_${ index}`] = githubValidation;
473474
validationRules.fields[`github_required_${ index}`] = githubRequiredValidation;
475+
this.allFields.attendee.filter(field => field.isComplex && field.isRequired).forEach(field => {
476+
validationRules.fields[`${field.fieldIdentifier}_required_${index}`] = {
477+
rules: [
478+
{
479+
type : 'empty',
480+
prompt : this.l10n.t('Please enter ' + field.name)
481+
}
482+
]
483+
};
484+
});
485+
474486
});
475487
return validationRules;
476488
},

app/components/forms/wizard/attendee-step.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import Component from '@ember/component';
22
import FormMixin from 'open-event-frontend/mixins/form';
33

4+
function getIdentifier(name, fields) {
5+
return name.toLowerCase();
6+
}
7+
48
export default Component.extend(FormMixin, {
59
actions: {
610
saveDraft() {
@@ -19,6 +23,18 @@ export default Component.extend(FormMixin, {
1923
this.set('data.event.state', 'published');
2024
this.sendAction('save', this.data);
2125
});
26+
},
27+
addFormField() {
28+
this.data.customForms.pushObject(this.store.createRecord('custom-form', {
29+
fieldIdentifier : getIdentifier(this.data.newFormField.name),
30+
name : this.data.newFormField.name,
31+
form : 'attendee',
32+
type : this.data.newFormField.type,
33+
isRequired : false,
34+
isIncluded : false,
35+
event : this.data.event
36+
}));
37+
this.set('data.newFormField.name', '');
2238
}
2339
}
2440
});

app/models/custom-form.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export default ModelBase.extend({
88
fieldIdentifier : attr('string'),
99
form : attr('string'),
1010
type : attr('string', { defaultValue: 'text' }),
11+
name : attr('string'),
1112
isRequired : attr('boolean', { defaultValue: false }),
1213
isIncluded : attr('boolean', { defaultValue: false }),
1314
isFixed : attr('boolean', { defaultValue: false }),
@@ -83,18 +84,8 @@ export default ModelBase.extend({
8384
ageGroup : 'Age Group'
8485
},
8586

86-
name: computed('fieldIdentifier', 'form', function() {
87-
let name = this.fieldIdentifier;
88-
if (!this.isComplex) {
89-
if (this.form === 'session') {
90-
name = this.get(`session.${name}`);
91-
} else if (this.form === 'speaker') {
92-
name = this.get(`speaker.${name}`);
93-
} else {
94-
name = this.get(`attendee.${name}`);
95-
}
96-
}
97-
return name;
87+
identifierPath: computed('isComplex', function() {
88+
return !this.isComplex ? this.fieldIdentifier : 'complexFieldValues.' + this.fieldIdentifier;
9889
}),
9990

10091
isLongText: computed('type', function() {

app/routes/events/view/edit/attendee.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,19 @@ export default class AttendeeRoute extends Route.extend(CustomFormMixin) {
1515
val : 'attendee'
1616
}];
1717

18+
const event = this.modelFor('events.view');
1819
const data = {
19-
event: this.modelFor('events.view')
20+
event,
21+
customForms: await event.query('customForms', {
22+
filter : filterOptions,
23+
sort : 'id',
24+
'page[size]' : 50
25+
}),
26+
newFormField: {
27+
name : '',
28+
type : 'text'
29+
}
2030
};
21-
data.customForms = await data.event.query('customForms', {
22-
filter : filterOptions,
23-
sort : 'id',
24-
'page[size]' : 50
25-
});
2631

2732
return data;
2833
}

app/routes/orders/new.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ export default class NewRoute extends Route {
3434
event : eventDetails,
3535
tickets,
3636
form : await eventDetails.query('customForms', {
37-
'page[size]' : 50,
37+
filter: [
38+
{
39+
name : 'form',
40+
op : 'eq',
41+
val : 'attendee'
42+
}
43+
],
44+
'page[size]' : 0,
3845
sort : 'id'
3946
})
4047
};

app/templates/components/forms/orders/order-form.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@
7373
{{#if (and this.sameAsBuyer (eq index 0) (or (eq field.fieldIdentifier 'firstname') (eq field.fieldIdentifier 'lastname') (eq field.fieldIdentifier 'email')))}}
7474
<Input
7575
@type={{field.type}}
76-
@value={{mut (get holder field.fieldIdentifier)}}
76+
@value={{mut (get holder field.identifierPath)}}
7777
@name={{if field.isRequired (concat field.fieldIdentifier "_required_" index) (concat field.fieldIdentifier "_" index)}}
7878
@readonly="" />
7979
{{else}}
8080
<Input
8181
@type={{field.type}}
82-
@value={{mut (get holder field.fieldIdentifier)}}
82+
@value={{mut (get holder field.identifierPath)}}
8383
@name={{if field.isRequired (concat field.fieldIdentifier "_required_" index) (concat field.fieldIdentifier "_" index)}} />
8484
{{/if}}
8585
{{/if}}

app/templates/components/forms/wizard/attendee-step.hbs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,18 @@
9292
</div>
9393
</div>
9494
{{/if}}
95+
<Input id="firstname" @type="text" @value={{this.data.newFormField.name}} />
96+
<UiDropdown @class="label" @selected={{this.data.newFormField.type}} @onChange={{action (mut this.data.newFormField.type)}}>
97+
<div class="default text">
98+
{{ this.data.newFormField.type}}
99+
</div>
100+
<i class="dropdown icon"></i>
101+
<div class="menu">
102+
<div class="item" data-value="http">text</div>
103+
<div class="item" data-value="https">number</div>
104+
</div>
105+
</UiDropdown>
106+
<button class="ui button" {{action 'addFormField'}}>Add</button>
95107
<div class="spacer-50"></div>
96108
<div class="{{if this.device.isMobile 'mini four' 'right floated large'}} ui fields buttons">
97109
<button class="ui three field left labeled icon button {{if this.isLoading 'disabled'}}" type="button" {{action 'move' 'backwards'}}>

0 commit comments

Comments
 (0)