refactor: remove userFields (#791)

* refactor: process custom fields on cache generate

* refactor: remove userFields
This commit is contained in:
Carlos Valente
2024-02-27 13:23:12 +01:00
committed by GitHub
parent 429df21557
commit d7392b93d2
73 changed files with 1580 additions and 2290 deletions
@@ -3,7 +3,6 @@ import { ProjectData } from './core/ProjectData.type.js';
import { OntimeRundown } from './core/Rundown.type.js';
import { OSCSettings } from './core/OscSettings.type.js';
import { Settings } from './core/Settings.type.js';
import { UserFields } from './core/UserFields.type.js';
import { ViewSettings } from './core/Views.type.js';
import { CustomFields, HttpSettings } from '../index.js';
@@ -13,7 +12,6 @@ export type DatabaseModel = {
settings: Settings;
viewSettings: ViewSettings;
aliases: Alias[];
userFields: UserFields;
customFields: CustomFields;
osc: OSCSettings;
http: HttpSettings;
@@ -39,16 +39,6 @@ export type OntimeEvent = OntimeBaseEvent & {
isPublic: boolean;
skip: boolean;
colour: string;
user0: string;
user1: string;
user2: string;
user3: string;
user4: string;
user5: string;
user6: string;
user7: string;
user8: string;
user9: string;
revision: number;
delay?: number; // calculated at runtime
timeWarning: number;
@@ -1,12 +0,0 @@
export type UserFields = {
user0: string;
user1: string;
user2: string;
user3: string;
user4: string;
user5: string;
user6: string;
user7: string;
user8: string;
user9: string;
};
-3
View File
@@ -27,9 +27,6 @@ export type { TimeFormat } from './definitions/core/TimeFormat.type.js';
// ---> Aliases
export type { Alias } from './definitions/core/Alias.type.js';
// ---> User Fields
export type { UserFields } from './definitions/core/UserFields.type.js';
// ---> Custom Fields
export type {
CustomFields,
+8 -6
View File
@@ -55,6 +55,7 @@ export { deepmerge } from './src/externals/deepmerge.js';
export { deleteAtIndex, insertAtIndex, reorderArray, sortArrayByProperty } from './src/array-utils/arrayUtils.js';
// generic utilities
export { unpackError } from './src/generic/generic.js';
export { isNumeric } from './src/types/types.js';
// model validation
@@ -62,10 +63,11 @@ export { validateEndAction, validateTimerType } from './src/validate-events/vali
// feature business logic
// feature business logic - excel import
// feature business logic - spreadsheet import
export {
type ExcelImportMap,
type ExcelImportOptions,
defaultExcelImportMap,
isExcelImportMap,
} from './src/feature/excel-import/excelImport.js';
type ImportCustom,
type ImportMap,
type ImportOptions,
defaultImportMap,
isImportMap,
} from './src/feature/spreadsheet-import/spreadsheetImport.js';
@@ -1,42 +0,0 @@
import { isExcelImportMap } from '../excelImport';
describe('isExcelImportMap', () => {
test('migrate v2 map', () => {
const v2ImportMap = {
worksheet: 'event schedule',
projectName: 'project name',
projectDescription: 'project description',
publicUrl: 'public url',
publicInfo: 'public info',
backstageUrl: 'backstage url',
backstageInfo: 'backstage info',
timeStart: 'time start',
timeEnd: 'time end',
duration: 'duration',
cue: 'cue',
title: 'title',
presenter: 'presenter',
subtitle: 'subtitle',
isPublic: 'public',
skip: 'skip',
note: 'notes',
colour: 'colour',
endAction: 'end action',
timerType: 'timer type',
user0: 'header',
user1: 'user1',
user2: 'user2',
user3: 'user3',
user4: 'user4',
user5: 'user5',
user6: 'user6',
user7: 'user7',
user8: 'user8',
user9: 'user9',
timeWarning: 'warning time',
timeDanger: 'danger time',
};
expect(isExcelImportMap(v2ImportMap)).toBe(true);
});
});
@@ -0,0 +1,54 @@
import { isImportMap } from '../spreadsheetImport';
describe('isImportMap()', () => {
it('validates a v3 default import map', () => {
const v3ImportMap = {
worksheet: 'event schedule',
timeStart: 'time start',
timeEnd: 'time end',
duration: 'duration',
cue: 'cue',
title: 'title',
presenter: 'presenter',
subtitle: 'subtitle',
isPublic: 'public',
skip: 'skip',
note: 'notes',
colour: 'colour',
endAction: 'end action',
timerType: 'timer type',
timeWarning: 'warning time',
timeDanger: 'danger time',
custom: {},
};
expect(isImportMap(v3ImportMap)).toBe(true);
});
it('handles custom properties', () => {
const v3ImportMap = {
worksheet: 'event schedule',
timeStart: 'time start',
timeEnd: 'time end',
duration: 'duration',
cue: 'cue',
title: 'title',
presenter: 'presenter',
subtitle: 'subtitle',
isPublic: 'public',
skip: 'skip',
note: 'notes',
colour: 'colour',
endAction: 'end action',
timerType: 'timer type',
timeWarning: 'warning time',
timeDanger: 'danger time',
custom: {
userDefined: 'userDefined',
anotherOne: 'anotherOne',
},
};
expect(isImportMap(v3ImportMap)).toBe(true);
});
});
@@ -1,7 +1,9 @@
export type ExcelImportOptions = keyof typeof defaultExcelImportMap;
export type ExcelImportMap = typeof defaultExcelImportMap;
export type ImportOptions = keyof typeof defaultImportMap | 'custom';
export type ImportCustom = Record<string, string>;
export type ImportMap = typeof defaultImportMap & { custom: ImportCustom };
export const defaultExcelImportMap = {
// Record of ontime name and import name
export const defaultImportMap = {
worksheet: 'event schedule',
timeStart: 'time start',
timeEnd: 'time end',
@@ -16,25 +18,20 @@ export const defaultExcelImportMap = {
colour: 'colour',
endAction: 'end action',
timerType: 'timer type',
user0: 'user0',
user1: 'user1',
user2: 'user2',
user3: 'user3',
user4: 'user4',
user5: 'user5',
user6: 'user6',
user7: 'user7',
user8: 'user8',
user9: 'user9',
timeWarning: 'warning time',
timeDanger: 'danger time',
custom: {},
};
export function isExcelImportMap(obj: unknown): obj is ExcelImportMap {
/**
* Validates whether an object is an Import Map
* @param obj
*/
export function isImportMap(obj: unknown): obj is ImportMap {
if (typeof obj !== 'object' || obj === null) {
return false;
}
const keys = Object.keys(defaultExcelImportMap);
const keys = Object.keys(defaultImportMap);
return keys.every((key) => Object.hasOwn(obj, key));
}
+6
View File
@@ -0,0 +1,6 @@
export function unpackError(error: unknown): string {
if (error instanceof Error) {
return error.message;
}
return String(error);
}