Skip to content

Commit 8e41504

Browse files
norbusankhangoncweitatHieu Lam - TMAmariobehling
authored
Merge to master (#8814)
* feature-8783:Add type rich text links custom from field (#8795) * feature-8783:Add type rich text links custom from field * feature-8783: Add type rich text links custom from field * Update custom-form-input.hbs --------- Co-authored-by: cweitat <[email protected]> * fix-7984:Show test/live key of Stripe under Payments section (#8786) Co-authored-by: cweitat <[email protected]> * feature-8782:Add type Yes/No custom from field (#8794) * feature-8782:Add type Yes/No custom from field * feature-8782:Update code add type Yes/No custom from field * feature-8782: update code Add type Yes/No custom from field * feature-8785:Implement dropdown with a number in custom forms (#8802) * feature-8785:Implement dropdown with a number in custom forms * Remove min in custom form input hbs --------- Co-authored-by: Mario Behling <[email protected]> * feature-8784:Add type year drop down custom from field (#8796) * feature-8784:Add type year drop down custom from field * feature-8784: Update code Add type year drop down custom from field * feature-8784: Add type year drop down custom from field * feature-8784:Add type year drop down custom from field * feature-8784:Add type year drop down custom from field * feature-8784: Change start year in dropdown list --------- Co-authored-by: cweitat <[email protected]> * feature-8740: Make attendee form ticket specific (#8804) * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * Demo-20230616: Merge code * Demo-20230616: Merge code * Demo-20230616: Merge code * feature-8470: Revert code demo * feature-8470: Revert code demo * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Merge code development * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8787: Change the "age" field of the custom form (#8806) * feature-8787: Change the "age" field of the custom form * feature-8787 translate text on register form for age input --------- Co-authored-by: cweitat <[email protected]> * feature-8787:add translate the age field of the custom form (#8811) * feature-8789: Add option "home wiki" to attendee form (#8805) * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * Demo-20230616: Merge code * Demo-20230616: Merge code * Demo-20230616: Merge code * feature-8470: Revert code demo * feature-8470: Revert code demo * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Merge code development * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8789: Add option 'home wiki' to attendee form * feature-8789: Add option 'home wiki' to attendee form * feature-8789:translate * feature-8789: Merge code development * feature-8789: Fix git comment * feature-8789: Fix git comment --------- Co-authored-by: Khang On - TMA <[email protected]> Co-authored-by: khangon <[email protected]> * feature-8788: Implement language form fields in the attendee form (#8808) * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * Demo-20230616: Merge code * Demo-20230616: Merge code * Demo-20230616: Merge code * feature-8470: Revert code demo * feature-8470: Revert code demo * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8470: Merge code development * feature-8470: Make attendee form ticket specific * feature-8470: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8740: Make attendee form ticket specific * feature-8788: Implement language form fields in the attendee form * feature-8788: Merge code development * feature-8788: Add translate * feature-8788: Implement language form fields in the attendee form * feature-8788: Implement language form fields in the attendee form --------- Co-authored-by: Khang On - TMA <[email protected]> Co-authored-by: khangon <[email protected]> --------- Co-authored-by: Khang On - TMA <[email protected]> Co-authored-by: cweitat <[email protected]> Co-authored-by: Hieu Lam - TMA <[email protected]> Co-authored-by: Mario Behling <[email protected]> Co-authored-by: khangon <[email protected]>
1 parent b6f8058 commit 8e41504

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+5403
-7212
lines changed

app/components/forms/orders/attendee-list.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { action, computed } from '@ember/object';
44
import { groupBy } from 'lodash-es';
55
import { or } from '@ember/object/computed';
66
import { tracked } from '@glimmer/tracking';
7+
import { languageForms } from 'open-event-frontend/utils/dictionary/language-form';
78

89
@classic
910
export default class AttendeeList extends Component {
@@ -17,9 +18,30 @@ export default class AttendeeList extends Component {
1718

1819
@computed('data.attendees')
1920
get holders() {
21+
this.data.attendees.forEach(attendee => {
22+
if (attendee.language_form_1) {
23+
this.languageFormMapCodeToName(attendee, 'language_form_1');
24+
}
25+
if (attendee.language_form_2) {
26+
this.languageFormMapCodeToName(attendee, 'language_form_2');
27+
}
28+
});
2029
return this.data.attendees;
2130
}
2231

32+
languageFormMapCodeToName(attendee, key) {
33+
const languageFormMap = [];
34+
const languageFormList = attendee[key].split(',');
35+
languageForms.forEach(languageForm => {
36+
languageFormList.forEach(item => {
37+
if (item === languageForm.code) {
38+
languageFormMap.push(languageForm.name);
39+
}
40+
});
41+
});
42+
return attendee.set(key, languageFormMap.map(select => select).join(', '));
43+
}
44+
2345
@or('event.isBillingInfoMandatory', 'data.isBillingEnabled')
2446
showBillingInfo;
2547

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

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import {
1313
import { genders } from 'open-event-frontend/utils/dictionary/genders';
1414
import { ageGroups } from 'open-event-frontend/utils/dictionary/age-groups';
1515
import { countries } from 'open-event-frontend/utils/dictionary/demography';
16-
16+
import { years } from 'open-event-frontend/utils/dictionary/year-list';
17+
import { languageForms } from 'open-event-frontend/utils/dictionary/language-form';
18+
import { homeWikis } from 'open-event-frontend/utils/dictionary/home-wikis';
1719

1820
export default Component.extend(FormMixin, {
1921
router : service(),
@@ -238,6 +240,15 @@ export default Component.extend(FormMixin, {
238240
]
239241
};
240242

243+
const homeWikiValidation = {
244+
rules: [
245+
{
246+
type : 'empty',
247+
prompt : this.l10n.t('Please enter your home wiki.')
248+
}
249+
]
250+
};
251+
241252
const shippingAddressValidation = {
242253
rules: [
243254
{
@@ -449,6 +460,24 @@ export default Component.extend(FormMixin, {
449460
]
450461
};
451462

463+
const languageForm1Validation = {
464+
rules: [
465+
{
466+
type : 'empty',
467+
prompt : this.l10n.t('Please enter Language Form.')
468+
}
469+
]
470+
};
471+
472+
const languageForm2Validation = {
473+
rules: [
474+
{
475+
type : 'empty',
476+
prompt : this.l10n.t('Please enter Language Form.')
477+
}
478+
]
479+
};
480+
452481
const validationRules = {
453482
inline : true,
454483
delay : false,
@@ -551,6 +580,7 @@ export default Component.extend(FormMixin, {
551580
validationRules.fields[`taxBusinessInfo_required_${ index}`] = taxBusinessInfoValidation;
552581
validationRules.fields[`billingAddress_required_${ index}`] = billingAddressValidation;
553582
validationRules.fields[`homeAddress_required_${ index}`] = homeAddressValidation;
583+
validationRules.fields[`homeWiki_required_${ index}`] = homeWikiValidation;
554584
validationRules.fields[`shippingAddress_required_${ index}`] = shippingAddressValidation;
555585
validationRules.fields[`company_required_${ index}`] = companyValidation;
556586
validationRules.fields[`workAddress_required_${ index}`] = workAddressValidation;
@@ -569,6 +599,8 @@ export default Component.extend(FormMixin, {
569599
validationRules.fields[`instagram_required_${ index}`] = instagramRequiredValidation;
570600
validationRules.fields[`linkedin_${ index}`] = linkedinValidation;
571601
validationRules.fields[`linkedin_required_${ index}`] = linkedinRequiredValidation;
602+
validationRules.fields[`language_form_1_required_${ index}`] = languageForm1Validation;
603+
validationRules.fields[`language_form_2_required_${ index}`] = languageForm2Validation;
572604
this.allFields.attendee.filter(field => field.isComplex && field.isRequired).forEach(field => {
573605
validationRules.fields[`${field.fieldIdentifier}_required_${index}`] = {
574606
rules: [
@@ -590,9 +622,12 @@ export default Component.extend(FormMixin, {
590622
return groupBy(requiredFixed.concat(customFields), field => field.get('form'));
591623
}),
592624

593-
genders : orderBy(genders, 'name'),
594-
ageGroups : orderBy(ageGroups, 'age'),
595-
countries : orderBy(countries, 'name'),
625+
genders : orderBy(genders, 'name'),
626+
ageGroups : orderBy(ageGroups, 'position'),
627+
countries : orderBy(countries, 'name'),
628+
years : orderBy(years, 'year'),
629+
languageForms : orderBy(languageForms, 'item'),
630+
homeWikis : orderBy(homeWikis, 'item'),
596631

597632
actions: {
598633
submit(data) {
@@ -613,6 +648,9 @@ export default Component.extend(FormMixin, {
613648
holder.set('lastname', '');
614649
holder.set('email', '');
615650
}
651+
},
652+
updateLanguageFormsSelection(checked, changed, selectedOptions, holder, field) {
653+
holder.set(field.fieldIdentifier, selectedOptions.map(select => select.value).join(','));
616654
}
617655
}
618656
});

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

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,98 @@ import { computed, observer } from '@ember/object';
33
import FormMixin from 'open-event-frontend/mixins/form';
44
import EventWizardMixin from 'open-event-frontend/mixins/event-wizard';
55
import { sortBy } from 'lodash-es';
6+
import { v4 } from 'ember-uuid';
7+
import { A } from '@ember/array';
68

79
export default Component.extend(FormMixin, EventWizardMixin, {
10+
tickets : [],
11+
excludeTickets : A(),
12+
isOldFormMode : false,
13+
isInit : false,
14+
15+
init() {
16+
this._super(...arguments);
17+
this.prepareCustomFormsForShow();
18+
},
19+
20+
prepareCustomFormsForShow() {
21+
const { tickets, customForms, forms } = this.data;
22+
if (this.isInit || forms.length) {return}
23+
this.isInit = true;
24+
const noForm = tickets.filter(_ticket => _ticket.formID).length === 0;
25+
if (noForm) {
26+
const _formID = v4();
27+
const _fields = customForms?.filter(field => {
28+
if (!field.isFixed && !field.isDeleted) {
29+
field.formID = _formID;
30+
return true;
31+
}
32+
return false;
33+
});
34+
if (_fields.length > 0) {
35+
tickets.forEach(_ticket => {
36+
_ticket.formID = _formID;
37+
this.excludeTickets.pushObject(_ticket);
38+
});
39+
forms.pushObject(this.store.createRecord('custom-form-ticket', {
40+
formID : _formID,
41+
customForms : _fields,
42+
ticketsDetails : tickets
43+
}));
44+
}
45+
} else {
46+
const _forms = {};
47+
tickets.forEach(ticket => {
48+
const { formID } = ticket;
49+
if (formID) {
50+
if (_forms[formID]) {
51+
_forms[formID].ticketsDetails.pushObject(ticket);
52+
} else {
53+
_forms[formID] = {
54+
ticketsDetails: [ticket]
55+
};
56+
}
57+
this.excludeTickets.pushObject(ticket);
58+
}
59+
});
60+
61+
Object.keys(_forms).forEach(_id => {
62+
const selectedTicket = _forms[_id].ticketsDetails;
63+
forms.pushObject({
64+
formID : _id,
65+
ticketsDetails : selectedTicket,
66+
customForms : customForms.filter(_field => _field.formID === _id)
67+
});
68+
});
69+
}
70+
},
71+
72+
prepareCustomFormsForSave() {
73+
this.data.forms.forEach(_form => {
74+
const { formID, customForms, ticketsDetails } = _form;
75+
customForms.forEach(field => {
76+
if (!field.isDeleted) {
77+
field.formID = formID;
78+
}
79+
if (!field.id) {
80+
this.data.customForms.pushObject(field);
81+
}
82+
});
83+
84+
ticketsDetails.forEach(ticket => {
85+
ticket.formID = formID;
86+
});
87+
});
88+
},
889

990
fixedFields: computed('data.customForms.@each', function() {
1091
return this.data.customForms?.filter(field => field.isFixed);
1192
}),
1293

94+
selectableTickets: computed('excludeTickets.@each', 'form.@each', function() {
95+
return this.data.tickets.filter(ticket => !this.excludeTickets.includes(ticket));
96+
}),
97+
1398
editableFields: computed('data.customForms.@each', function() {
1499
const filteredFields = this.data.customForms?.filter(field => !field.isFixed);
15100
const fields = sortBy(filteredFields, ['isComplex', 'name']);
@@ -26,9 +111,56 @@ export default Component.extend(FormMixin, EventWizardMixin, {
26111
return this.editableFields?.some(field => field.isComplex);
27112
}),
28113

114+
29115
actions: {
30116
removeField(field) {
31117
field.deleteRecord();
118+
},
119+
addMoreForm(ticketsDetails = []) {
120+
const _formID = v4();
121+
this.data.forms.pushObject(this.store.createRecord('custom-form-ticket', {
122+
formID : _formID,
123+
customForms : this.getCustomAttendeeForm(this.data.event, _formID),
124+
ticketsDetails
125+
}));
126+
},
127+
128+
onFormUpdateTicket(changedData) {
129+
const { added, changed, formID } = changedData;
130+
changed.forEach(ticket => {
131+
ticket.formID = added ? formID : '';
132+
});
133+
if (added) {
134+
this.excludeTickets.pushObjects(changed);
135+
} else {
136+
this.excludeTickets.removeObjects(changed);
137+
}
138+
},
139+
saveDraft() {
140+
this.prepareCustomFormsForSave();
141+
this._super();
142+
},
143+
saveForm() {
144+
this.prepareCustomFormsForSave();
145+
this._super();
146+
},
147+
move(direction) {
148+
this.prepareCustomFormsForSave();
149+
this._super(direction);
150+
},
151+
onRemoveForm(_id) {
152+
const deleteForm = this.data.forms.find(_form => _form.formID === _id);
153+
if (deleteForm) {
154+
const { ticketsDetails, customForms } = deleteForm;
155+
ticketsDetails.forEach(ticket => {
156+
ticket.formID = '';
157+
});
158+
customForms.forEach(field => {
159+
field.deleteRecord();
160+
});
161+
this.excludeTickets.removeObjects(deleteForm.ticketsDetails);
162+
this.data.forms.removeObject(deleteForm);
163+
}
32164
}
33165
}
34166
});

app/components/forms/wizard/custom-form-input.hbs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,24 @@
66
</span>
77
</div>
88
<div {{did-update this.updated @field}} class="ui action input" style="width: inherit;">
9-
<Input type="text" placeholder={{t "Field Name"}} @value={{this.name}} />
10-
<UiDropdown class="ui selection dropdown" @selected={{this.type}} @onChange={{action (mut this.type)}}>
9+
<Input type="text" placeholder={{t "Field Name"}} @value={{this.name}} style="width: 25%"/>
10+
{{#if (eq this.type "number")}}
11+
<div class="ui action input input-attendee-custom-form">
12+
<Input
13+
@type="number"
14+
@name="min_price"
15+
placeholder={{t "Min"}}
16+
@value={{this.min}} />
17+
</div>
18+
<div class="ui action input input-attendee-custom-form">
19+
<Input
20+
@type="number"
21+
@name="max_price"
22+
placeholder={{t "Max"}}
23+
@value={{this.max}} />
24+
</div>
25+
{{/if}}
26+
<UiDropdown class="ui selection dropdown custom-form-dropdown-attendee" @selected={{this.type}} @onChange={{action (mut this.type)}}>
1127
<div class="default text">
1228
{{ this.type }}
1329
</div>
@@ -16,6 +32,9 @@
1632
<div class="item" data-value="text">{{t "Short Answer"}}</div>
1733
<div class="item" data-value="paragraph">{{t "Paragraph"}}</div>
1834
<div class="item" data-value="number">{{t "Number"}}</div>
35+
<div class="item" data-value="year">{{t "Year"}}</div>
36+
<div class="item" data-value="boolean">{{t "Yes/No"}}</div>
37+
<div class="item" data-value="richtextlink">{{t "Rich Text Links"}}</div>
1938
</div>
2039
</UiDropdown>
2140
<div>

app/components/forms/wizard/custom-form-input.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { inject as service } from '@ember/service';
55
import DS from 'ember-data';
66
import { tracked } from '@glimmer/tracking';
77

8-
interface CustomForm { fieldIdentifier: string, name: string, type: string }
8+
interface CustomForm { fieldIdentifier: string, name: string, type: string, min: number, max: number, formIdentifier: string}
99

1010
function getIdentifier(name: string, fields: CustomForm[]): string {
1111
const fieldIdentifiers = new Set(fields.map(field => field.fieldIdentifier));
@@ -22,6 +22,9 @@ interface Args {
2222
customForms: CustomForm[],
2323
form: string,
2424
event: any,
25+
formIdentifier: string | '',
26+
min: number | 0,
27+
max: number | 10,
2528
onSave: (() => void) | null
2629
}
2730

@@ -36,13 +39,23 @@ export default class CustomFormInput extends Component<Args> {
3639
@service
3740
store!: DS.Store;
3841

42+
@tracked
43+
min = 0;
44+
45+
@tracked
46+
max = 10;
47+
3948
@action
4049
updated(): void {
4150
if (this.args.field) {
4251
this.name = this.args.field.name;
4352
this.type = this.args.field.type;
53+
this.min = this.args.field.min;
54+
this.max = this.args.field.max;
4455
} else {
4556
this.name = '';
57+
this.min = 0;
58+
this.max = 10;
4659
}
4760
}
4861

@@ -66,7 +79,10 @@ export default class CustomFormInput extends Component<Args> {
6679
isRequired : false,
6780
isIncluded : false,
6881
isComplex : true,
69-
event : this.args.event
82+
event : this.args.event,
83+
formID : this.args.formIdentifier,
84+
min : this.min,
85+
max : this.max
7086
});
7187
}
7288

@@ -79,10 +95,14 @@ export default class CustomFormInput extends Component<Args> {
7995
this.args.field.name = this.name;
8096
this.args.field.type = this.type;
8197
this.args.field.fieldIdentifier = this.identifier;
98+
this.args.field.min = this.min;
99+
this.args.field.max = this.max;
82100
} else {
83101
this.args.customForms.pushObject(this.field);
84102
}
85103
this.name = '';
104+
this.min = 0;
105+
this.max = 10;
86106

87107
this.args.onSave && this.args.onSave();
88108
}

0 commit comments

Comments
 (0)