Skip to content

Commit 7fbb4c9

Browse files
committed
Implement new phone input into phone field
1 parent ff2cedc commit 7fbb4c9

File tree

5 files changed

+67
-75
lines changed

5 files changed

+67
-75
lines changed

packages/experiments-realm/Contact/a01fc5c9-d70d-4b9c-aae4-384cf2b79b25.json

+16-8
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,24 @@
99
"primaryEmail": "david@gmail.com",
1010
"secondaryEmail": "david23232@gmail.com",
1111
"phoneMobile": {
12-
"type": "office",
13-
"country": 1,
14-
"area": 415,
15-
"number": 123456
12+
"phoneNumber": {
13+
"number": "1158524828",
14+
"countryCode": "60"
15+
},
16+
"type": {
17+
"index": 0,
18+
"label": "Mobile"
19+
}
1620
},
1721
"phoneOffice": {
18-
"type": null,
19-
"country": null,
20-
"area": null,
21-
"number": null
22+
"phoneNumber": {
23+
"number": null,
24+
"countryCode": null
25+
},
26+
"type": {
27+
"index": null,
28+
"label": null
29+
}
2230
},
2331
"socialLinks": [
2432
{

packages/experiments-realm/ExperimentsFieldsPreview/de720f57-964b-4a09-8d52-80cd8bb4b739.json

+2-14
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,8 @@
2626
"dan@email.com"
2727
],
2828
"phone": {
29-
"type": null,
30-
"country": null,
31-
"area": null,
32-
"number": null
33-
},
34-
"phoneNumber": {
35-
"phoneNumber": {
36-
"number": "1158524727",
37-
"countryCode": "60"
38-
},
39-
"type": {
40-
"index": 0,
41-
"label": "Mobile"
42-
}
29+
"number": "1159292211",
30+
"countryCode": "60"
4331
},
4432
"percentage": 100.159393,
4533
"currency": {

packages/experiments-realm/crm/contact.gts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import StringField from 'https://cardstack.com/base/string';
2-
import { PhoneField } from '../phone';
2+
import { ContactPhoneNumber } from '../phone-number';
33
import { EmailField } from '../email';
44
import { ContactLinkField } from '../fields/contact-link';
55
import {
@@ -701,8 +701,8 @@ export class Contact extends CardDef {
701701
@field department = contains(StringField);
702702
@field primaryEmail = contains(EmailField);
703703
@field secondaryEmail = contains(EmailField);
704-
@field phoneMobile = contains(PhoneField);
705-
@field phoneOffice = contains(PhoneField);
704+
@field phoneMobile = contains(ContactPhoneNumber);
705+
@field phoneOffice = contains(ContactPhoneNumber);
706706
@field socialLinks = containsMany(SocialLinkField);
707707
@field statusTag = contains(StatusTagField); //this is an empty field that gets computed in subclasses
708708

packages/experiments-realm/experiments_fields_preview.gts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { FeaturedImageField } from './fields/featured-image';
22
import { ContactLinkField } from './fields/contact-link';
33
import { EmailField } from './email';
4-
import { PhoneField } from './phone';
5-
import { ContactPhoneNumber as PhoneNumberField } from './phone-number';
4+
import { PhoneField } from './phone-number';
65
import { UrlField } from './url';
76
import { WebsiteField } from './website';
87
import { Address as AddressField } from './address';
@@ -32,7 +31,6 @@ export class ExperimentsFieldsPreview extends CardDef {
3231
@field email = contains(EmailField);
3332
@field emails = containsMany(EmailField);
3433
@field phone = contains(PhoneField);
35-
@field phoneNumber = contains(PhoneNumberField);
3634
@field percentage = contains(PercentageField);
3735
@field currency = contains(CurrencyField);
3836
@field amountWithCurrency = contains(AmountWithCurrencyField);

packages/experiments-realm/phone-number.gts

+45-47
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { LooseGooseyField, LooseyGooseyData } from './loosey-goosey';
99
import { PhoneInput, Pill } from '@cardstack/boxel-ui/components';
1010
import { RadioInput } from '@cardstack/boxel-ui/components';
11+
import { EntityDisplay } from './components/entity-display';
1112
import { tracked } from '@glimmer/tracking';
1213
import { fn } from '@ember/helper';
1314
import { action } from '@ember/object';
@@ -58,7 +59,7 @@ export class PhoneNumberType extends LooseGooseyField {
5859
static edit = PhoneNumberTypeEdit;
5960
}
6061

61-
export class PhoneNumber extends FieldDef {
62+
export class PhoneField extends FieldDef {
6263
static displayName = 'Phone Number';
6364
@field number = contains(StringField);
6465
@field countryCode = contains(StringField);
@@ -71,7 +72,7 @@ export class PhoneNumber extends FieldDef {
7172
this.countryCode = code;
7273
};
7374

74-
static edit = class Edit extends Component<typeof PhoneNumber> {
75+
static edit = class Edit extends Component<typeof PhoneField> {
7576
<template>
7677
<PhoneInput
7778
@countryCode={{@model.countryCode}}
@@ -82,33 +83,29 @@ export class PhoneNumber extends FieldDef {
8283
</template>
8384
};
8485

85-
static atom = class Atom extends Component<typeof PhoneNumber> {
86+
static atom = class Atom extends Component<typeof PhoneField> {
8687
<template>
87-
<div class='row'>
88-
<PhoneIcon class='icon gray' />
89-
{{#if @model.countryCode}}
90-
<span>+{{@model.countryCode}}{{@model.number}}</span>
91-
{{else}}
92-
<span>{{@model.number}}</span>
93-
{{/if}}
94-
</div>
88+
<EntityDisplay @underline={{false}}>
89+
<:title>
90+
{{#if @model.countryCode}}
91+
+{{@model.countryCode}}{{@model.number}}
92+
{{else}}
93+
{{@model.number}}
94+
{{/if}}
95+
</:title>
96+
<:thumbnail>
97+
<PhoneIcon class='icon' />
98+
</:thumbnail>
99+
</EntityDisplay>
95100
<style scoped>
96-
.row {
97-
display: flex;
98-
align-items: center;
99-
word-break: break-all;
100-
gap: var(--boxel-sp-xxs);
101-
}
102101
.icon {
103-
width: var(--boxel-icon-xs);
104-
height: var(--boxel-icon-xs);
105-
flex-shrink: 0;
102+
color: var(--boxel-400);
106103
}
107104
</style>
108105
</template>
109106
};
110107

111-
static embedded = class Embedded extends Component<typeof PhoneNumber> {
108+
static embedded = class Embedded extends Component<typeof PhoneField> {
112109
<template>
113110
{{#if @model.countryCode}}
114111
<span>+{{@model.countryCode}}{{@model.number}}</span>
@@ -120,32 +117,38 @@ export class PhoneNumber extends FieldDef {
120117
}
121118

122119
export class ContactPhoneNumber extends FieldDef {
123-
@field phoneNumber = contains(PhoneNumber);
120+
@field phoneNumber = contains(PhoneField);
124121
@field type = contains(PhoneNumberType);
125122

126123
static atom = class Atom extends Component<typeof ContactPhoneNumber> {
127124
<template>
128-
<div class='row'>
129-
<@fields.phoneNumber @format='atom' />
130-
{{#if @model.type.label}}
131-
<Pill class='gray'>
132-
{{@model.type.label}}
133-
</Pill>
134-
{{/if}}
135-
</div>
125+
<EntityDisplay @underline={{false}}>
126+
<:title>
127+
{{#if @model.phoneNumber.countryCode}}
128+
+{{@model.phoneNumber.countryCode}}{{@model.phoneNumber.number}}
129+
{{else}}
130+
{{@model.phoneNumber.number}}
131+
{{/if}}
132+
</:title>
133+
<:thumbnail>
134+
<PhoneIcon class='icon' />
135+
</:thumbnail>
136+
<:tag>
137+
{{#if @model.type.label}}
138+
<Pill class='pill-gray'>
139+
{{@model.type.label}}
140+
</Pill>
141+
{{/if}}
142+
</:tag>
143+
</EntityDisplay>
136144
<style scoped>
137-
.row {
138-
display: flex;
139-
align-items: center;
140-
gap: var(--boxel-sp-xxs);
141-
word-break: break-all;
145+
.icon {
146+
color: var(--boxel-400);
142147
}
143-
.gray {
144-
font-weight: 300;
145-
font-size: 10px;
146-
word-break: keep-all;
147-
--pill-background-color: var(--boxel-200);
148-
border: none;
148+
.pill-gray {
149+
--default-pill-padding: 0 var(--boxel-sp-xxxs);
150+
background-color: var(--boxel-200);
151+
border-color: transparent;
149152
}
150153
</style>
151154
</template>
@@ -155,12 +158,7 @@ export class ContactPhoneNumber extends FieldDef {
155158
typeof ContactPhoneNumber
156159
> {
157160
<template>
158-
{{#if @model.phoneNumber.countryCode}}
159-
<span
160-
>+{{@model.phoneNumber.countryCode}}{{@model.phoneNumber.number}}</span>
161-
{{else}}
162-
<span>{{@model.phoneNumber.number}}</span>
163-
{{/if}}
161+
<@fields.phoneNumber @format='embedded' />
164162
</template>
165163
};
166164
}

0 commit comments

Comments
 (0)