mirror of
https://github.com/mudita/mudita-center.git
synced 2025-12-23 22:28:03 -05:00
Disabled contacts duplicates management for API version 1.0.0
This commit is contained in:
@@ -5,13 +5,18 @@
|
||||
|
||||
import { ApiDeviceSerialPort } from "devices/api-device/adapters"
|
||||
import {
|
||||
ApiConfig,
|
||||
ApiDevice,
|
||||
ApiDevicePaths,
|
||||
ApiDeviceResponseBody,
|
||||
} from "devices/api-device/models"
|
||||
import { MenuGroup, MenuIndex } from "app-routing/models"
|
||||
import semver from "semver/preload"
|
||||
|
||||
export const getApiMenuConfig = async (device: ApiDevice) => {
|
||||
export const getApiMenuConfig = async (
|
||||
device: ApiDevice,
|
||||
config?: ApiConfig
|
||||
) => {
|
||||
const response = await ApiDeviceSerialPort.request(device, {
|
||||
endpoint: "MENU_CONFIGURATION",
|
||||
method: "GET",
|
||||
@@ -24,21 +29,41 @@ export const getApiMenuConfig = async (device: ApiDevice) => {
|
||||
})
|
||||
return {
|
||||
...response,
|
||||
body: response.ok ? mapMenuConfig(response.body) : null,
|
||||
body: response.ok ? mapMenuConfig(response.body, config?.apiVersion) : null,
|
||||
}
|
||||
}
|
||||
|
||||
const mapMenuConfig = (
|
||||
menu: ApiDeviceResponseBody<"MENU_CONFIGURATION", "GET">
|
||||
menu: ApiDeviceResponseBody<"MENU_CONFIGURATION", "GET">,
|
||||
apiVersion = "1.0.0"
|
||||
): MenuGroup => {
|
||||
return {
|
||||
index: MenuIndex.Device,
|
||||
title: menu.title,
|
||||
items: menu.menuItems.map((item) => {
|
||||
const submenu = item.submenu?.map((submenu) => ({
|
||||
title: submenu.displayName,
|
||||
path: `${ApiDevicePaths.Index}/${item.feature}/${submenu.feature}`,
|
||||
}))
|
||||
const submenu = item.submenu
|
||||
?.filter((submenu) => {
|
||||
if (
|
||||
item.feature === "mc-contacts" &&
|
||||
submenu.feature === "mc-contacts-duplicates"
|
||||
) {
|
||||
return showsContactsDuplicatesManager(apiVersion)
|
||||
}
|
||||
return true
|
||||
})
|
||||
.map((submenu) => ({
|
||||
title: submenu.displayName,
|
||||
path: `${ApiDevicePaths.Index}/${item.feature}/${submenu.feature}`,
|
||||
}))
|
||||
|
||||
if (submenu && submenu.length === 1) {
|
||||
return {
|
||||
title: item.displayName,
|
||||
icon: item.icon,
|
||||
path: submenu[0].path,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
title: item.displayName,
|
||||
icon: item.icon,
|
||||
@@ -48,3 +73,11 @@ const mapMenuConfig = (
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
const showsContactsDuplicatesManager = (apiVersion?: string) => {
|
||||
if (!apiVersion) {
|
||||
return false
|
||||
}
|
||||
const minVersion = "1.0.1"
|
||||
return semver.gte(apiVersion, minVersion)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import { useQuery } from "@tanstack/react-query"
|
||||
import { devicesQueryKeys } from "./devices-query-keys"
|
||||
import { getApiMenuConfig } from "devices/api-device/feature"
|
||||
import { ApiDeviceSerialPort } from "devices/api-device/adapters"
|
||||
import { ApiDeviceErrorType } from "devices/api-device/models"
|
||||
import { ApiConfig, ApiDeviceErrorType } from "devices/api-device/models"
|
||||
import { MenuGroup } from "app-routing/models"
|
||||
import { HarmonySerialPort } from "devices/harmony/adapters"
|
||||
import { getHarmonyMenu } from "devices/harmony/feature"
|
||||
@@ -16,13 +16,17 @@ import { PureSerialPort } from "devices/pure/adapters"
|
||||
import { getPureMenu } from "devices/pure/feature"
|
||||
import { HarmonyMscSerialPort } from "devices/harmony-msc/adapters"
|
||||
import { getHarmonyMscMenu } from "devices/harmony-msc/feature"
|
||||
import { useDeviceConfigQuery } from "./use-device-config.query"
|
||||
|
||||
const queryFn = async (device?: Device): Promise<MenuGroup | null> => {
|
||||
const queryFn = async (
|
||||
device?: Device,
|
||||
config?: unknown
|
||||
): Promise<MenuGroup | null> => {
|
||||
if (!device) {
|
||||
return null
|
||||
}
|
||||
if (ApiDeviceSerialPort.isCompatible(device)) {
|
||||
const menu = await getApiMenuConfig(device)
|
||||
const menu = await getApiMenuConfig(device, config as ApiConfig)
|
||||
if (menu.ok) {
|
||||
return menu.body
|
||||
} else if (menu.status === ApiDeviceErrorType.DeviceLocked) {
|
||||
@@ -44,9 +48,10 @@ const queryFn = async (device?: Device): Promise<MenuGroup | null> => {
|
||||
}
|
||||
|
||||
export const useDeviceMenuQuery = <ErrorType = Error>(device?: Device) => {
|
||||
const { data: config } = useDeviceConfigQuery(device)
|
||||
return useQuery<MenuGroup | null, ErrorType>({
|
||||
queryKey: useDeviceMenuQuery.queryKey(device?.id),
|
||||
queryFn: () => queryFn(device),
|
||||
queryFn: () => queryFn(device, config),
|
||||
retry: ApiDeviceSerialPort.isCompatible(device)
|
||||
? (failureCount, error) => {
|
||||
return error === ApiDeviceErrorType.DeviceLocked || failureCount < 3
|
||||
|
||||
Reference in New Issue
Block a user