mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-29 01:08:59 +00:00
FIX - suggest compatible EasyShare destinations
This commit is contained in:
@@ -24,10 +24,14 @@ import { useNotesStore } from '@/stores/notes'
|
||||
import { usePhoneStore } from '@/stores/phone'
|
||||
import type {
|
||||
EasyShareChatApp,
|
||||
EasyShareDestinationApp,
|
||||
EasyShareTransfer,
|
||||
EasyShareVisibility,
|
||||
} from '@/types/easyshare'
|
||||
import { openEasySharePayload } from '@/utils/easyshare'
|
||||
import {
|
||||
easyShareDestinationAppIds,
|
||||
openEasySharePayload,
|
||||
} from '@/utils/easyshare'
|
||||
|
||||
const phone = usePhoneStore()
|
||||
const appStore = useAppStoreStore()
|
||||
@@ -45,7 +49,6 @@ let dragPointerId: number | null = null
|
||||
let dragStartTime = 0
|
||||
let dragStartY = 0
|
||||
const visibilityOptions: EasyShareVisibility[] = ['everyone', 'contacts', 'hidden']
|
||||
type EasyShareDestinationAppId = 'darkchat' | 'flare' | 'messages' | 'notes'
|
||||
const app = computed(() =>
|
||||
easyShare.payload ? getPhoneApp(easyShare.payload.appId) : undefined,
|
||||
)
|
||||
@@ -105,14 +108,8 @@ const sharePeople = computed(() => {
|
||||
|
||||
return people
|
||||
})
|
||||
const shareAppIds: EasyShareDestinationAppId[] = [
|
||||
'messages',
|
||||
'darkchat',
|
||||
'flare',
|
||||
'notes',
|
||||
]
|
||||
const shareApps = computed(() =>
|
||||
shareAppIds
|
||||
(easyShare.payload ? easyShareDestinationAppIds(easyShare.payload) : [])
|
||||
.filter((id) => !appStore.homeLayout.hidden.includes(id))
|
||||
.flatMap((id) => {
|
||||
const app = getPhoneApp(id)
|
||||
@@ -201,7 +198,7 @@ function openChatApp(kind: EasyShareChatApp): void {
|
||||
void router.push(`/apps/${kind}`)
|
||||
}
|
||||
|
||||
function openShareApp(appId: EasyShareDestinationAppId): void {
|
||||
function openShareApp(appId: EasyShareDestinationApp): void {
|
||||
if (appId === 'messages' || appId === 'darkchat' || appId === 'flare') {
|
||||
openChatApp(appId)
|
||||
return
|
||||
@@ -211,8 +208,12 @@ function openShareApp(appId: EasyShareDestinationAppId): void {
|
||||
|
||||
function saveAsNote(): void {
|
||||
if (!easyShare.payload) return
|
||||
const body = [easyShare.payload.copyText.trim(), easyShare.payload.link?.trim()]
|
||||
.filter((part): part is string => Boolean(part))
|
||||
.filter((part, index, parts) => parts.indexOf(part) === index)
|
||||
.join('\n')
|
||||
notes.createNote({
|
||||
body: easyShare.payload.copyText,
|
||||
body,
|
||||
title: easyShare.payload.title,
|
||||
})
|
||||
feedback.value = label('savedToNotes')
|
||||
|
||||
@@ -16,6 +16,7 @@ export type EasyShareKind =
|
||||
|
||||
export type EasyShareVisibility = 'contacts' | 'everyone' | 'hidden'
|
||||
export type EasyShareChatApp = 'darkchat' | 'flare' | 'messages'
|
||||
export type EasyShareDestinationApp = EasyShareChatApp | 'notes'
|
||||
export type EasyShareChatDraft = {
|
||||
appId: EasyShareChatApp
|
||||
body: string
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import type { EasySharePayload } from '@/types/easyshare'
|
||||
import { easyShareRoute } from '@/utils/easyshare'
|
||||
import {
|
||||
easyShareDestinationAppIds,
|
||||
easyShareRoute,
|
||||
} from '@/utils/easyshare'
|
||||
|
||||
function payload(overrides: Partial<EasySharePayload>): EasySharePayload {
|
||||
return {
|
||||
@@ -72,3 +75,41 @@ describe('EasyShare deep links', () => {
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('EasyShare destination suggestions', () => {
|
||||
it.each([
|
||||
'document',
|
||||
'link',
|
||||
'location',
|
||||
'note',
|
||||
'text',
|
||||
] as const)('offers Notes for %s content from another app', (kind) => {
|
||||
expect(
|
||||
easyShareDestinationAppIds(payload({ appId: 'calendar', kind })),
|
||||
).toEqual(['messages', 'darkchat', 'flare', 'notes'])
|
||||
})
|
||||
|
||||
it.each([
|
||||
'contact',
|
||||
'photo',
|
||||
'playlist',
|
||||
'post',
|
||||
'profile',
|
||||
'track',
|
||||
'video',
|
||||
] as const)('does not suggest lossy Notes conversion for %s content', (kind) => {
|
||||
expect(easyShareDestinationAppIds(payload({ kind }))).toEqual([
|
||||
'messages',
|
||||
'darkchat',
|
||||
'flare',
|
||||
])
|
||||
})
|
||||
|
||||
it('does not suggest saving a Notes item back into Notes', () => {
|
||||
expect(easyShareDestinationAppIds(payload({}))).toEqual([
|
||||
'messages',
|
||||
'darkchat',
|
||||
'flare',
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,7 +1,24 @@
|
||||
import type { Router } from 'vue-router'
|
||||
|
||||
import { getPhoneApp } from '@/config/apps'
|
||||
import type { EasySharePayload } from '@/types/easyshare'
|
||||
import type {
|
||||
EasyShareDestinationApp,
|
||||
EasyShareKind,
|
||||
EasySharePayload,
|
||||
} from '@/types/easyshare'
|
||||
|
||||
const chatDestinations: EasyShareDestinationApp[] = [
|
||||
'messages',
|
||||
'darkchat',
|
||||
'flare',
|
||||
]
|
||||
const noteCompatibleKinds = new Set<EasyShareKind>([
|
||||
'document',
|
||||
'link',
|
||||
'location',
|
||||
'note',
|
||||
'text',
|
||||
])
|
||||
|
||||
const schemeRoutes: Record<string, string> = {
|
||||
location: '/apps/map',
|
||||
@@ -9,6 +26,16 @@ const schemeRoutes: Record<string, string> = {
|
||||
phone: '/apps/phone',
|
||||
}
|
||||
|
||||
export function easyShareDestinationAppIds(
|
||||
payload: EasySharePayload,
|
||||
): EasyShareDestinationApp[] {
|
||||
const destinations = [...chatDestinations]
|
||||
if (payload.appId !== 'notes' && noteCompatibleKinds.has(payload.kind)) {
|
||||
destinations.push('notes')
|
||||
}
|
||||
return destinations
|
||||
}
|
||||
|
||||
export function easyShareRoute(payload: EasySharePayload): {
|
||||
path: string
|
||||
query: Record<string, string>
|
||||
|
||||
Reference in New Issue
Block a user