mirror of
https://github.com/responsively-org/responsively-app
synced 2024-09-20 22:31:59 +00:00
Migrated device manager to work with device id instead of name
This commit is contained in:
parent
23c1fbeb20
commit
c9f0c58973
6 changed files with 734 additions and 611 deletions
|
@ -285,7 +285,8 @@
|
|||
"patterns": [
|
||||
"!**/**",
|
||||
"src/main/**/*",
|
||||
"src/store/**/*"
|
||||
"src/store/**/*",
|
||||
"src/common/**/*"
|
||||
],
|
||||
"logLevel": "quiet"
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -8,7 +8,7 @@ import {
|
|||
setDevices,
|
||||
} from 'renderer/store/features/device-manager';
|
||||
import { APP_VIEWS, setAppView } from 'renderer/store/features/ui';
|
||||
import defaultDevices, { Device } from 'common/deviceList';
|
||||
import { defaultDevices, Device } from 'common/deviceList';
|
||||
|
||||
import Button from '../Button';
|
||||
import DeviceLabel, { DND_TYPE } from './DeviceLabel';
|
||||
|
|
|
@ -2,12 +2,12 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|||
import { getDevicesMap, Device } from 'common/deviceList';
|
||||
import type { RootState } from '../..';
|
||||
|
||||
const activeDeviceNames: string[] = window.electron.store.get(
|
||||
const activeDeviceIds: string[] = window.electron.store.get(
|
||||
'deviceManager.activeDevices'
|
||||
);
|
||||
|
||||
const DEFAULT_DEVICES: Device[] = activeDeviceNames.map(
|
||||
(name) => getDevicesMap()[name]
|
||||
const DEFAULT_DEVICES: Device[] = activeDeviceIds.map(
|
||||
(id) => getDevicesMap()[id]
|
||||
);
|
||||
|
||||
export interface DeviceManagerState {
|
||||
|
@ -26,7 +26,7 @@ export const deviceManagerSlice = createSlice({
|
|||
state.devices = action.payload;
|
||||
window.electron.store.set(
|
||||
'deviceManager.activeDevices',
|
||||
action.payload.map((device) => device.name)
|
||||
action.payload.map((device) => device.id)
|
||||
);
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { DOCK_POSITION, PREVIEW_LAYOUTS } from '../common/constants';
|
||||
import { migrations } from './migrations';
|
||||
|
||||
const Store = require('electron-store');
|
||||
|
||||
|
@ -44,13 +45,16 @@ const schema = {
|
|||
items: {
|
||||
type: 'string',
|
||||
},
|
||||
default: ['iPhone 12 Pro', 'iPad', 'Macbook Pro'],
|
||||
default: ['10008', '10013', '10015'],
|
||||
},
|
||||
customDevices: {
|
||||
type: 'array',
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
},
|
||||
|
@ -158,8 +162,8 @@ const schema = {
|
|||
},
|
||||
default: [],
|
||||
},
|
||||
};
|
||||
} as const;
|
||||
|
||||
const store = new Store({ schema, watch: true });
|
||||
const store = new Store({ schema, watch: true, migrations });
|
||||
|
||||
export default store;
|
||||
|
|
41
desktop-app/src/store/migrations.ts
Normal file
41
desktop-app/src/store/migrations.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
import Store from 'electron-store';
|
||||
import { randomUUID } from 'crypto';
|
||||
|
||||
import { defaultDevices, Device } from '../common/deviceList';
|
||||
|
||||
export const migrations = {
|
||||
'1.2.0': (store: Store) => {
|
||||
try {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('Migrating from 1.0.1', store.get('deviceManager'));
|
||||
const previousActiveDevices: string[] = store.get(
|
||||
'deviceManager.activeDevices'
|
||||
) as string[];
|
||||
const previousCustomDevices: Device[] = store.get(
|
||||
'deviceManager.customDevices'
|
||||
) as Device[];
|
||||
const newActiveDevices = previousActiveDevices
|
||||
.map((name) => {
|
||||
return defaultDevices.find((device) => device.name === name)?.id;
|
||||
})
|
||||
.filter(Boolean);
|
||||
|
||||
const newCustomDevices: Device[] = previousCustomDevices.map((device) => {
|
||||
const newDevice = {
|
||||
...device,
|
||||
id: randomUUID(),
|
||||
};
|
||||
return newDevice;
|
||||
});
|
||||
|
||||
store.set('deviceManager.activeDevices', newActiveDevices);
|
||||
store.set('deviceManager.customDevices', newCustomDevices);
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('Migration failed', e);
|
||||
return;
|
||||
}
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('Migration successful', store.get('deviceManager'));
|
||||
},
|
||||
};
|
Loading…
Reference in a new issue