mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-09-04 17:23:25 +00:00
ADD - expand phone application platform
Add the Companies app, resilient call handling, custom app registry, vendor compatibility, storage policies, frontend bridge, tests, documentation, config, locale, and SQL migrations.
This commit is contained in:
@@ -11,7 +11,11 @@ export type HomeLayout = {
|
||||
dock: HomeSlot[]
|
||||
grid: HomeSlot[]
|
||||
hidden: LaunchablePhoneAppId[]
|
||||
version: 2
|
||||
version: 3
|
||||
}
|
||||
|
||||
function isPersistableAppId(value: unknown): value is LaunchablePhoneAppId {
|
||||
return typeof value === 'string' && /^[a-z0-9][a-z0-9._-]{1,63}$/.test(value)
|
||||
}
|
||||
|
||||
function readAppIds(
|
||||
@@ -134,7 +138,7 @@ export function createDefaultHomeLayout(
|
||||
dock[index] = id
|
||||
}
|
||||
|
||||
return { dock, grid, hidden: [], version: 2 }
|
||||
return { dock, grid, hidden: [], version: 3 }
|
||||
}
|
||||
|
||||
export function parseHomeLayout(
|
||||
@@ -146,6 +150,14 @@ export function parseHomeLayout(
|
||||
|
||||
const source = value as Partial<Record<keyof HomeLayout, unknown>>
|
||||
const availableIds = new Set(installedIds)
|
||||
if (source.version === 3) {
|
||||
for (const collection of [source.dock, source.grid, source.hidden]) {
|
||||
if (!Array.isArray(collection)) continue
|
||||
for (const appId of collection) {
|
||||
if (isPersistableAppId(appId)) availableIds.add(appId)
|
||||
}
|
||||
}
|
||||
}
|
||||
const hidden = readAppIds(source.hidden, availableIds)
|
||||
const hiddenIds = new Set(hidden)
|
||||
const persistedGridLength = Array.isArray(source.grid)
|
||||
@@ -158,7 +170,7 @@ export function parseHomeLayout(
|
||||
let grid: HomeSlot[]
|
||||
let dock: HomeSlot[]
|
||||
|
||||
if (source.version === 2) {
|
||||
if (source.version === 2 || source.version === 3) {
|
||||
grid = readSlots(source.grid, availableIds, gridLength)
|
||||
dock = readSlots(source.dock, availableIds, HOME_DOCK_CAPACITY)
|
||||
} else {
|
||||
@@ -189,7 +201,7 @@ export function parseHomeLayout(
|
||||
}
|
||||
}
|
||||
|
||||
return { dock, grid, hidden, version: 2 }
|
||||
return { dock, grid, hidden, version: 3 }
|
||||
}
|
||||
|
||||
export function removeHomeApp(
|
||||
@@ -202,7 +214,7 @@ export function removeHomeApp(
|
||||
hidden: layout.hidden.includes(appId)
|
||||
? [...layout.hidden]
|
||||
: [...layout.hidden, appId],
|
||||
version: 2,
|
||||
version: 3,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,7 +229,7 @@ export function restoreHomeApp(
|
||||
dock: [...layout.dock],
|
||||
grid,
|
||||
hidden: layout.hidden.filter((id) => id !== appId),
|
||||
version: 2,
|
||||
version: 3,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -230,7 +242,7 @@ export function addHomePage(layout: HomeLayout): HomeLayout {
|
||||
dock: [...layout.dock],
|
||||
grid: [...layout.grid, ...createSlots(HOME_GRID_PAGE_SIZE)],
|
||||
hidden: [...layout.hidden],
|
||||
version: 2,
|
||||
version: 3,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,7 +264,7 @@ export function deleteHomePage(layout: HomeLayout, page: number): HomeLayout {
|
||||
dock: [...layout.dock],
|
||||
grid,
|
||||
hidden: [...layout.hidden],
|
||||
version: 2,
|
||||
version: 3,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +279,7 @@ export function moveHomeApp(
|
||||
dock: [...layout.dock],
|
||||
grid: [...layout.grid],
|
||||
hidden: [...layout.hidden],
|
||||
version: 2,
|
||||
version: 3,
|
||||
}
|
||||
const source = next[from]
|
||||
const target = next[to]
|
||||
|
||||
Reference in New Issue
Block a user