mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-14 03:43:50 +00:00
Fix/195 (#200)
* refactor: add typescript dependencies * chore: update chakra-ui * refactor: typescript config * refactor: convert <MenuBar> component to typescript * refactor: convert <TooltipActionBtn> component to typescript * refactor: improve UX in file upload * refactor: upgrade dependencies * refactor: prepare data provider * refactor: prevent importing bad fields * refactor: extract merge to provider * refactor(upload): parser merges only given fields * refactor(upload): add event fields to excel * refactor(upload): improve styling on modal open * style: improve styling in menu * style: prevent global pollution * feat(upload): add upload options * fix: avoid potential bug in log queue
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Class Event Provider adds functions specific for handling event data
|
||||
*/
|
||||
export class DataProvider {
|
||||
/**
|
||||
* Merges two data objects
|
||||
* @param {object} existing
|
||||
* @param {object} newData
|
||||
*/
|
||||
static safeMerge(existing, newData) {
|
||||
const mergedData = { ...existing };
|
||||
|
||||
if (typeof newData?.events !== 'undefined') {
|
||||
mergedData.events = newData.events;
|
||||
}
|
||||
if (typeof newData?.event !== 'undefined') {
|
||||
mergedData.event = { ...newData.event };
|
||||
}
|
||||
if (typeof newData?.settings !== 'undefined') {
|
||||
mergedData.settings = { ...newData.settings };
|
||||
}
|
||||
if (typeof newData?.osc !== 'undefined') {
|
||||
mergedData.osc = { ...newData.osc };
|
||||
}
|
||||
if (typeof newData?.http !== 'undefined') {
|
||||
mergedData.http = { ...newData.http };
|
||||
}
|
||||
if (typeof newData?.aliases !== 'undefined') {
|
||||
mergedData.aliases = [...newData.aliases];
|
||||
}
|
||||
if (typeof newData?.userFields !== 'undefined') {
|
||||
mergedData.userFields = { ...existing.userFields, ...newData.userFields };
|
||||
}
|
||||
return mergedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
import { DataProvider } from '../DataProvider';
|
||||
|
||||
describe('DataProvider', () => {
|
||||
describe('safeMerge()', () => {
|
||||
it('merges two objects ', () => {
|
||||
const oldData = {
|
||||
events: [{ event: 'old event' }],
|
||||
event: {
|
||||
title: 'old title',
|
||||
url: 'old url',
|
||||
endMessage: 'old end message',
|
||||
},
|
||||
osc: {
|
||||
port: 'old port',
|
||||
},
|
||||
settings: {
|
||||
app: 'ontime',
|
||||
version: 1,
|
||||
serverPort: 4001,
|
||||
lock: null,
|
||||
pinCode: null,
|
||||
timeFormat: '24',
|
||||
},
|
||||
userFields: {
|
||||
user0: 'old 0',
|
||||
user1: 'old 1',
|
||||
user2: 'old 2',
|
||||
user3: 'old 3',
|
||||
user4: 'old 4',
|
||||
user5: 'old 5',
|
||||
user6: 'old 6',
|
||||
user7: 'old 7',
|
||||
user8: 'old 8',
|
||||
user9: 'old 9',
|
||||
},
|
||||
};
|
||||
const newData = {
|
||||
events: [{ event: 'new event' }],
|
||||
event: {
|
||||
title: 'new title',
|
||||
url: 'new url',
|
||||
endMessage: 'old end message',
|
||||
publicInfo: 'new public info',
|
||||
},
|
||||
settings: {
|
||||
app: 'ontime',
|
||||
version: 1,
|
||||
serverPort: 4001,
|
||||
lock: null,
|
||||
pinCode: null,
|
||||
timeFormat: '24',
|
||||
},
|
||||
userFields: {
|
||||
user6: 'new 6',
|
||||
user7: 'new 7',
|
||||
user8: 'new 8',
|
||||
user9: 'new 9',
|
||||
},
|
||||
};
|
||||
|
||||
const expected = {
|
||||
events: [{ event: 'new event' }],
|
||||
event: {
|
||||
title: 'new title',
|
||||
url: 'new url',
|
||||
publicInfo: 'new public info',
|
||||
endMessage: 'old end message',
|
||||
},
|
||||
osc: {
|
||||
port: 'old port',
|
||||
},
|
||||
settings: {
|
||||
app: 'ontime',
|
||||
version: 1,
|
||||
serverPort: 4001,
|
||||
lock: null,
|
||||
pinCode: null,
|
||||
timeFormat: '24',
|
||||
},
|
||||
userFields: {
|
||||
user0: 'old 0',
|
||||
user1: 'old 1',
|
||||
user2: 'old 2',
|
||||
user3: 'old 3',
|
||||
user4: 'old 4',
|
||||
user5: 'old 5',
|
||||
user6: 'new 6',
|
||||
user7: 'new 7',
|
||||
user8: 'new 8',
|
||||
user9: 'new 9',
|
||||
},
|
||||
};
|
||||
const merged = DataProvider.safeMerge(oldData, newData);
|
||||
expect(merged).toStrictEqual(expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user