Skip to content

Commit a2a1771

Browse files
authored
Fix: Import Contact Improvements (#15)
* feat: qr code improvements * apply pending connection events * chore: hide import contacts for now * fix: import native contact fixes and improvements * fix: phone number parsing for Google contacts * fix: contact properties intersection * feat: format imported phone numbers * feat: sort record lists
1 parent 1d8838c commit a2a1771

File tree

5 files changed

+28
-16
lines changed

5 files changed

+28
-16
lines changed

apps/resplice/src/common/utils.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
type RecordItem = {
2+
name: string
3+
}
4+
5+
export function sortRecordsByName<T extends RecordItem>(record: T[]): T[] {
6+
return record.sort((a, b) => a.name.localeCompare(b.name))
7+
}

apps/resplice/src/modules/connection/connection.helpers.ts

-6
This file was deleted.

apps/resplice/src/modules/connection/pages/ConnectionListPage.svelte

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
} from '@resplice/components'
1111
import connectionStore from '$modules/connection/connection.store'
1212
import inviteStores from '$modules/invite/invite.store'
13-
import { connectionsList } from '$modules/connection/connection.helpers'
13+
import { sortRecordsByName } from '$common/utils'
1414
import SearchHeader from '$common/components/SearchHeader.svelte'
1515
import ConnectionList from '$modules/connection/components/ConnectionList.svelte'
1616
import PendingConnectionList from '$modules/invite/components/PendingConnectionList.svelte'
@@ -20,9 +20,9 @@
2020
2121
const inviteStore = inviteStores.invites
2222
const pendingConnectionStore = inviteStores.pendingConnections
23-
$: connections = connectionsList($connectionStore)
24-
$: invites = Array.from($inviteStore.values())
25-
$: pendingConnections = Array.from($pendingConnectionStore.values())
23+
$: connections = sortRecordsByName(Array.from($connectionStore.values()))
24+
$: invites = sortRecordsByName(Array.from($inviteStore.values()))
25+
$: pendingConnections = sortRecordsByName(Array.from($pendingConnectionStore.values()))
2626
2727
onMount(() => {
2828
// Get scroll position

apps/resplice/src/modules/invite/components/ContactImportAttribute.svelte

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
2-
import { AttributeActionIcon, Button, toast } from '@resplice/components'
2+
import { parsePhoneNumber } from 'libphonenumber-js'
33
import { AttributeAction } from '@resplice/utils'
4+
import { AttributeActionIcon, Button, toast } from '@resplice/components'
45
import useProtocol from '$common/protocol/useProtocol'
56
import type {
67
ProviderContact,
@@ -14,8 +15,8 @@
1415
export let attribute: ProviderContactAttribute
1516
let isInviting = false
1617
17-
function providerAttributeToAction(value: ProviderContactAttribute): AttributeAction {
18-
switch (value.type) {
18+
function providerAttributeToAction(attribute: ProviderContactAttribute): AttributeAction {
19+
switch (attribute.type) {
1920
case 'email':
2021
return AttributeAction.Email
2122
case 'phone':
@@ -25,6 +26,15 @@
2526
}
2627
}
2728
29+
function providerAttributeValue(attribute: ProviderContactAttribute): string {
30+
switch (attribute.type) {
31+
case 'phone':
32+
return parsePhoneNumber(attribute.value, 'US').formatNational()
33+
default:
34+
return attribute.value
35+
}
36+
}
37+
2838
async function invite(contact: ProviderContact, attribute: ProviderContactAttribute) {
2939
try {
3040
isInviting = true
@@ -60,7 +70,7 @@
6070
<p class="font-semibold text-gray-800 truncate h-6 capitalize">
6171
{attribute.name}
6272
</p>
63-
<p class="truncate">{attribute.value}</p>
73+
<p class="truncate">{providerAttributeValue(attribute)}</p>
6474
</div>
6575
</div>
6676
<Button

apps/resplice/src/modules/invite/components/ContactImportList.svelte

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import type { ProviderContact, InviteState } from '$modules/invite/services/contactProviders'
1010
import { type Invite } from '$modules/invite/invite.types'
1111
import ContactImportAttribute from '$modules/invite/components/ContactImportAttribute.svelte'
12+
import { sortRecordsByName } from '$common/utils'
1213
1314
const inviteStore = inviteStores.invites
1415
@@ -39,7 +40,7 @@
3940
4041
$: {
4142
const connectionAttributeValues = $connectionAttributeValuesStore
42-
const invites = [...$inviteStore.values()]
43+
const invites = Array.from($inviteStore.values())
4344
4445
contacts = contacts.map((contact) => ({
4546
...contact,
@@ -49,7 +50,7 @@
4950
</script>
5051

5152
{#if contacts.length}
52-
{#each contacts as contact, idx}
53+
{#each sortRecordsByName(contacts) as contact, idx}
5354
<div class="flex flex-col bg-white rounded-lg shadow-lg mb-4 divide-y-2">
5455
<div class="w-full py-2 pr-4 flex items-center">
5556
<div class="flex-1 overflow-hidden">

0 commit comments

Comments
 (0)