Add automated upgrade for menu style & position.
This commit is contained in:
+89
-14
@@ -19,6 +19,8 @@ import {
|
|||||||
CONF_LIVE_WEBRTC_CARD,
|
CONF_LIVE_WEBRTC_CARD,
|
||||||
CONF_MENU,
|
CONF_MENU,
|
||||||
CONF_MENU_BUTTON_SIZE,
|
CONF_MENU_BUTTON_SIZE,
|
||||||
|
CONF_MENU_POSITION,
|
||||||
|
CONF_MENU_STYLE,
|
||||||
CONF_OVERRIDES,
|
CONF_OVERRIDES,
|
||||||
CONF_VIEW_DEFAULT,
|
CONF_VIEW_DEFAULT,
|
||||||
CONF_VIEW_TIMEOUT_SECONDS,
|
CONF_VIEW_TIMEOUT_SECONDS,
|
||||||
@@ -202,7 +204,7 @@ const toPixelsOrDelete = function (value: unknown): number | null | undefined {
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const deleteProperty = function (_value: unknown): number | null | undefined {
|
const deleteProperty = function (_value: unknown): number | null | undefined {
|
||||||
return null;
|
return null;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move a property from one location to another.
|
* Move a property from one location to another.
|
||||||
@@ -217,6 +219,7 @@ export const moveConfigValue = (
|
|||||||
oldPath: string,
|
oldPath: string,
|
||||||
newPath: string,
|
newPath: string,
|
||||||
transform?: (valueIn: unknown) => unknown,
|
transform?: (valueIn: unknown) => unknown,
|
||||||
|
keepOriginal?: boolean,
|
||||||
): boolean => {
|
): boolean => {
|
||||||
const inValue = getConfigValue(obj, oldPath);
|
const inValue = getConfigValue(obj, oldPath);
|
||||||
if (inValue === undefined) {
|
if (inValue === undefined) {
|
||||||
@@ -227,11 +230,16 @@ export const moveConfigValue = (
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (outValue === null) {
|
if (outValue === null) {
|
||||||
deleteConfigValue(obj, oldPath);
|
if (!keepOriginal) {
|
||||||
return true;
|
deleteConfigValue(obj, oldPath);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (outValue !== undefined) {
|
if (outValue !== undefined) {
|
||||||
deleteConfigValue(obj, oldPath);
|
if (!keepOriginal) {
|
||||||
|
deleteConfigValue(obj, oldPath);
|
||||||
|
}
|
||||||
setConfigValue(obj, newPath, outValue);
|
setConfigValue(obj, newPath, outValue);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -259,9 +267,10 @@ const upgradeMoveTo = function (
|
|||||||
oldPath: string,
|
oldPath: string,
|
||||||
newPath: string,
|
newPath: string,
|
||||||
transform?: (valueIn: unknown) => unknown,
|
transform?: (valueIn: unknown) => unknown,
|
||||||
|
keepOriginal?: boolean,
|
||||||
): (obj: RawFrigateCardConfig) => boolean {
|
): (obj: RawFrigateCardConfig) => boolean {
|
||||||
return function (obj: RawFrigateCardConfig): boolean {
|
return function (obj: RawFrigateCardConfig): boolean {
|
||||||
return moveConfigValue(obj, oldPath, newPath, transform);
|
return moveConfigValue(obj, oldPath, newPath, transform, keepOriginal);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -277,13 +286,14 @@ const upgradeMoveToWithOverrides = function (
|
|||||||
oldPath: string,
|
oldPath: string,
|
||||||
newPath: string,
|
newPath: string,
|
||||||
transform?: (valueIn: unknown) => unknown,
|
transform?: (valueIn: unknown) => unknown,
|
||||||
|
keepOriginal?: boolean,
|
||||||
): (obj: RawFrigateCardConfig) => boolean {
|
): (obj: RawFrigateCardConfig) => boolean {
|
||||||
return function (obj: RawFrigateCardConfig): boolean {
|
return function (obj: RawFrigateCardConfig): boolean {
|
||||||
let modified = upgradeMoveTo(oldPath, newPath, transform)(obj);
|
let modified = upgradeMoveTo(oldPath, newPath, transform, keepOriginal)(obj);
|
||||||
modified =
|
modified =
|
||||||
upgradeArrayValue(
|
upgradeArrayValue(
|
||||||
CONF_OVERRIDES,
|
CONF_OVERRIDES,
|
||||||
upgradeMoveTo(oldPath, newPath, transform),
|
upgradeMoveTo(oldPath, newPath, transform, keepOriginal),
|
||||||
(obj) => obj.overrides as RawFrigateCardConfig | undefined,
|
(obj) => obj.overrides as RawFrigateCardConfig | undefined,
|
||||||
)(obj) || modified;
|
)(obj) || modified;
|
||||||
return modified;
|
return modified;
|
||||||
@@ -333,8 +343,7 @@ const upgradeArrayValue = function (
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Upgrade from a singular camera model to multiple.
|
* Upgrade from a singular camera model to multiple.
|
||||||
* @param key A string key.
|
* @returns An upgrade function.
|
||||||
* @returns A safe key.
|
|
||||||
*/
|
*/
|
||||||
const upgradeToMultipleCameras = (): ((obj: RawFrigateCardConfig) => boolean) => {
|
const upgradeToMultipleCameras = (): ((obj: RawFrigateCardConfig) => boolean) => {
|
||||||
return function (obj: RawFrigateCardConfig): boolean {
|
return function (obj: RawFrigateCardConfig): boolean {
|
||||||
@@ -365,6 +374,74 @@ const upgradeToMultipleCameras = (): ((obj: RawFrigateCardConfig) => boolean) =>
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Upgrade from a menu-mode to a style & position.
|
||||||
|
* @returns An upgrade function.
|
||||||
|
*/
|
||||||
|
const upgradeMenuModeToStyleAndPosition = (): ((
|
||||||
|
obj: RawFrigateCardConfig,
|
||||||
|
) => boolean) => {
|
||||||
|
return function (obj: RawFrigateCardConfig): boolean {
|
||||||
|
let modified = false;
|
||||||
|
|
||||||
|
// Change the 'start' of the mode into a style.
|
||||||
|
modified =
|
||||||
|
upgradeMoveToWithOverrides(
|
||||||
|
'menu.mode',
|
||||||
|
CONF_MENU_STYLE,
|
||||||
|
(mode: unknown): string | undefined => {
|
||||||
|
if (typeof mode === 'string') {
|
||||||
|
const result = mode.match(/^(hover|hidden|overlay|above|below|none)/);
|
||||||
|
if (result) {
|
||||||
|
switch (result[1]) {
|
||||||
|
case 'hover':
|
||||||
|
case 'hidden':
|
||||||
|
case 'overlay':
|
||||||
|
case 'none':
|
||||||
|
return result[1];
|
||||||
|
case 'above':
|
||||||
|
case 'below':
|
||||||
|
return 'outside';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
},
|
||||||
|
true,
|
||||||
|
)(obj) || modified;
|
||||||
|
|
||||||
|
// Change the 'end' of the mode into a position.
|
||||||
|
modified =
|
||||||
|
upgradeMoveToWithOverrides(
|
||||||
|
'menu.mode',
|
||||||
|
CONF_MENU_POSITION,
|
||||||
|
(mode: unknown): string | undefined => {
|
||||||
|
if (typeof mode === 'string') {
|
||||||
|
const result = mode.match(/(above|below|left|right|top|bottom)$/);
|
||||||
|
if (result) {
|
||||||
|
switch (result[1]) {
|
||||||
|
case 'left':
|
||||||
|
case 'right':
|
||||||
|
case 'top':
|
||||||
|
case 'bottom':
|
||||||
|
return result[1];
|
||||||
|
case 'above':
|
||||||
|
return 'top';
|
||||||
|
case 'below':
|
||||||
|
return 'bottom';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
},
|
||||||
|
true,
|
||||||
|
)(obj) || modified;
|
||||||
|
|
||||||
|
// Delete the old `menu.mode` .
|
||||||
|
return upgradeWithOverrides('menu.mode', deleteProperty)(obj) || modified;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upgrade from a condition on the menu (to allow rendering) to a menu mode
|
* Upgrade from a condition on the menu (to allow rendering) to a menu mode
|
||||||
* override instead.
|
* override instead.
|
||||||
@@ -414,7 +491,7 @@ const UPGRADES = [
|
|||||||
upgradeMoveTo('autoplay_clip', 'event_viewer.autoplay_clip'),
|
upgradeMoveTo('autoplay_clip', 'event_viewer.autoplay_clip'),
|
||||||
upgradeMoveTo('controls.nextprev', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_STYLE),
|
upgradeMoveTo('controls.nextprev', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_STYLE),
|
||||||
upgradeMoveTo('controls.nextprev_size', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_SIZE),
|
upgradeMoveTo('controls.nextprev_size', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_SIZE),
|
||||||
upgradeMoveTo('menu_mode', "menu.mode"),
|
upgradeMoveTo('menu_mode', 'menu.mode'),
|
||||||
upgradeMoveTo('menu_buttons', 'menu.buttons'),
|
upgradeMoveTo('menu_buttons', 'menu.buttons'),
|
||||||
upgradeMoveTo('menu_button_size', CONF_MENU_BUTTON_SIZE),
|
upgradeMoveTo('menu_button_size', CONF_MENU_BUTTON_SIZE),
|
||||||
upgradeMoveTo('image', 'image.src', isNotObject),
|
upgradeMoveTo('image', 'image.src', isNotObject),
|
||||||
@@ -460,8 +537,6 @@ const UPGRADES = [
|
|||||||
CONF_MENU_BUTTON_SIZE,
|
CONF_MENU_BUTTON_SIZE,
|
||||||
createRangedTransform(toPixelsOrDelete, BUTTON_SIZE_MIN),
|
createRangedTransform(toPixelsOrDelete, BUTTON_SIZE_MIN),
|
||||||
),
|
),
|
||||||
upgradeWithOverrides(
|
upgradeWithOverrides('event_gallery.min_columns', deleteProperty),
|
||||||
'event_gallery.min_columns',
|
upgradeMenuModeToStyleAndPosition(),
|
||||||
deleteProperty
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user