Skip to content

Commit 6134940

Browse files
fix: Handle www and value changes in link-field (#5597)
1 parent 2ff1f35 commit 6134940

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

app/components/widgets/forms/link-field.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
</div>
77
<Input
88
{{did-update this.prefixUpdated @prefix}}
9+
{{did-update this.valueUpdated @value}}
910
@id={{@inputId}}
1011
@type="text"
1112
value={{this.fixedValue}}

app/components/widgets/forms/link-field.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Component from '@glimmer/component';
22
import { tracked } from '@glimmer/tracking';
33
import { action } from '@ember/object';
4+
import { socialMediaExtraPrefixes } from 'open-event-frontend/utils/dictionary/social-media';
45

56
interface Args {
67
prefix: string | undefined,
@@ -48,6 +49,13 @@ export default class LinkField extends Component<Args> {
4849
*/
4950
fixValue(value: string): string {
5051
const splitted = value.split(this.prefix);
52+
if (!splitted[1]) {
53+
const extraPrefix = socialMediaExtraPrefixes[this.prefix];
54+
const extraSplit = value.split(extraPrefix);
55+
if (extraSplit[1]) {
56+
return extraSplit[1];
57+
}
58+
}
5159
return splitted[1] || splitted[0];
5260
}
5361

@@ -63,4 +71,10 @@ export default class LinkField extends Component<Args> {
6371
this.args.onChange(this.finalValue);
6472
}
6573

74+
@action
75+
valueUpdated(): void {
76+
this.value = this.parseValue();
77+
this.args.onChange(this.finalValue);
78+
}
79+
6680
}

app/models/social-link.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,19 @@ export default ModelBase.extend({
1313

1414
event: belongsTo('event'),
1515

16-
normalizedName: computed('name', function() {
16+
normalizedName: computed('site', function() {
17+
return this.site === 'website' ? 'globe' : this.site;
18+
}),
19+
20+
site: computed('name', function() {
1721
// Even though name is required for social links and is non-nullable
1822
// and non-null name is being sent from API, for some reason, for certain events,
1923
// this throws an error, so we check first if name exists
2024
// https://github.com/fossasia/open-event-frontend/issues/4777
2125

2226
const normalizedName = this.name?.trim().toLowerCase();
2327
if (!socialMediaIdentifiers.includes(normalizedName)) {
24-
return 'globe';
28+
return 'website';
2529
}
2630
return normalizedName;
2731
}),

app/templates/components/forms/wizard/other-details-step.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
{{#each this.socialMediaLinks as |socialLink|}}
1616
<Widgets::Forms::SocialLinkField
17-
@site={{socialLink.name}}
17+
@site={{socialLink.site}}
1818
@onSiteChange={{action (mut socialLink.name)}}
1919
@value={{socialLink.link}}
2020
@onChange={{action (mut socialLink.link)}}>
@@ -36,7 +36,7 @@
3636
{{#each this.customLinks as |socialLink|}}
3737
<Widgets::Forms::SocialLinkField
3838
@custom={{true}}
39-
@site={{socialLink.name}}
39+
@site={{socialLink.site}}
4040
@onSiteChange={{action (mut socialLink.name)}}
4141
@value={{socialLink.link}}
4242
@onChange={{action (mut socialLink.link)}}>

app/utils/dictionary/social-media.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ export const socialMediaMap: SocialMediaMap = socialMediaIdentifiers.reduce((obj
3131
obj[identifier] = socialMediaSites[index];
3232
return obj;
3333
}, {});
34+
35+
export const socialMediaExtraPrefixes = Object.values(socialMediaMap).reduce((obj: { [key: string]: string}, media: SocialMedia) => {
36+
obj[media.prefix ?? media.identifier] = `https://www.${media.identifier}.com/`;
37+
return obj;
38+
}, {});

0 commit comments

Comments
 (0)