summaryrefslogtreecommitdiff
path: root/packages/client/src/ui
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-11-17 09:31:07 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-11-17 09:31:07 +0900
commitd5aee2ea58a16e0cf65213fab9e46192882feba9 (patch)
tree037be7ad7b26abf647faa0f4ee6a6a96ba37fa95 /packages/client/src/ui
parentfix typo on CleanRemoteFilesProcessorService (#9171) (diff)
downloadsharkey-d5aee2ea58a16e0cf65213fab9e46192882feba9.tar.gz
sharkey-d5aee2ea58a16e0cf65213fab9e46192882feba9.tar.bz2
sharkey-d5aee2ea58a16e0cf65213fab9e46192882feba9.zip
improve performance
Diffstat (limited to 'packages/client/src/ui')
-rw-r--r--packages/client/src/ui/deck/deck-store.ts45
1 files changed, 21 insertions, 24 deletions
diff --git a/packages/client/src/ui/deck/deck-store.ts b/packages/client/src/ui/deck/deck-store.ts
index 67fcff4807..56db7398e5 100644
--- a/packages/client/src/ui/deck/deck-store.ts
+++ b/packages/client/src/ui/deck/deck-store.ts
@@ -4,6 +4,7 @@ import { notificationTypes } from 'misskey-js';
import { Storage } from '../../pizzax';
import { i18n } from '@/i18n';
import { api } from '@/os';
+import { deepClone } from '@/scripts/clone';
type ColumnWidget = {
name: string;
@@ -25,10 +26,6 @@ export type Column = {
tl?: 'home' | 'local' | 'social' | 'global';
};
-function copy<T>(x: T): T {
- return JSON.parse(JSON.stringify(x));
-}
-
export const deckStore = markRaw(new Storage('deck', {
profile: {
where: 'deviceAccount',
@@ -128,7 +125,7 @@ export function swapColumn(a: Column['id'], b: Column['id']) {
const aY = deckStore.state.layout[aX].findIndex(id => id === a);
const bX = deckStore.state.layout.findIndex(ids => ids.indexOf(b) !== -1);
const bY = deckStore.state.layout[bX].findIndex(id => id === b);
- const layout = copy(deckStore.state.layout);
+ const layout = deepClone(deckStore.state.layout);
layout[aX][aY] = b;
layout[bX][bY] = a;
deckStore.set('layout', layout);
@@ -136,7 +133,7 @@ export function swapColumn(a: Column['id'], b: Column['id']) {
}
export function swapLeftColumn(id: Column['id']) {
- const layout = copy(deckStore.state.layout);
+ const layout = deepClone(deckStore.state.layout);
deckStore.state.layout.some((ids, i) => {
if (ids.includes(id)) {
const left = deckStore.state.layout[i - 1];
@@ -152,7 +149,7 @@ export function swapLeftColumn(id: Column['id']) {
}
export function swapRightColumn(id: Column['id']) {
- const layout = copy(deckStore.state.layout);
+ const layout = deepClone(deckStore.state.layout);
deckStore.state.layout.some((ids, i) => {
if (ids.includes(id)) {
const right = deckStore.state.layout[i + 1];
@@ -168,9 +165,9 @@ export function swapRightColumn(id: Column['id']) {
}
export function swapUpColumn(id: Column['id']) {
- const layout = copy(deckStore.state.layout);
+ const layout = deepClone(deckStore.state.layout);
const idsIndex = deckStore.state.layout.findIndex(ids => ids.includes(id));
- const ids = copy(deckStore.state.layout[idsIndex]);
+ const ids = deepClone(deckStore.state.layout[idsIndex]);
ids.some((x, i) => {
if (x === id) {
const up = ids[i - 1];
@@ -188,9 +185,9 @@ export function swapUpColumn(id: Column['id']) {
}
export function swapDownColumn(id: Column['id']) {
- const layout = copy(deckStore.state.layout);
+ const layout = deepClone(deckStore.state.layout);
const idsIndex = deckStore.state.layout.findIndex(ids => ids.includes(id));
- const ids = copy(deckStore.state.layout[idsIndex]);
+ const ids = deepClone(deckStore.state.layout[idsIndex]);
ids.some((x, i) => {
if (x === id) {
const down = ids[i + 1];
@@ -208,7 +205,7 @@ export function swapDownColumn(id: Column['id']) {
}
export function stackLeftColumn(id: Column['id']) {
- let layout = copy(deckStore.state.layout);
+ let layout = deepClone(deckStore.state.layout);
const i = deckStore.state.layout.findIndex(ids => ids.includes(id));
layout = layout.map(ids => ids.filter(_id => _id !== id));
layout[i - 1].push(id);
@@ -218,7 +215,7 @@ export function stackLeftColumn(id: Column['id']) {
}
export function popRightColumn(id: Column['id']) {
- let layout = copy(deckStore.state.layout);
+ let layout = deepClone(deckStore.state.layout);
const i = deckStore.state.layout.findIndex(ids => ids.includes(id));
const affected = layout[i];
layout = layout.map(ids => ids.filter(_id => _id !== id));
@@ -226,7 +223,7 @@ export function popRightColumn(id: Column['id']) {
layout = layout.filter(ids => ids.length > 0);
deckStore.set('layout', layout);
- const columns = copy(deckStore.state.columns);
+ const columns = deepClone(deckStore.state.columns);
for (const column of columns) {
if (affected.includes(column.id)) {
column.active = true;
@@ -238,9 +235,9 @@ export function popRightColumn(id: Column['id']) {
}
export function addColumnWidget(id: Column['id'], widget: ColumnWidget) {
- const columns = copy(deckStore.state.columns);
+ const columns = deepClone(deckStore.state.columns);
const columnIndex = deckStore.state.columns.findIndex(c => c.id === id);
- const column = copy(deckStore.state.columns[columnIndex]);
+ const column = deepClone(deckStore.state.columns[columnIndex]);
if (column == null) return;
if (column.widgets == null) column.widgets = [];
column.widgets.unshift(widget);
@@ -250,9 +247,9 @@ export function addColumnWidget(id: Column['id'], widget: ColumnWidget) {
}
export function removeColumnWidget(id: Column['id'], widget: ColumnWidget) {
- const columns = copy(deckStore.state.columns);
+ const columns = deepClone(deckStore.state.columns);
const columnIndex = deckStore.state.columns.findIndex(c => c.id === id);
- const column = copy(deckStore.state.columns[columnIndex]);
+ const column = deepClone(deckStore.state.columns[columnIndex]);
if (column == null) return;
column.widgets = column.widgets.filter(w => w.id !== widget.id);
columns[columnIndex] = column;
@@ -261,9 +258,9 @@ export function removeColumnWidget(id: Column['id'], widget: ColumnWidget) {
}
export function setColumnWidgets(id: Column['id'], widgets: ColumnWidget[]) {
- const columns = copy(deckStore.state.columns);
+ const columns = deepClone(deckStore.state.columns);
const columnIndex = deckStore.state.columns.findIndex(c => c.id === id);
- const column = copy(deckStore.state.columns[columnIndex]);
+ const column = deepClone(deckStore.state.columns[columnIndex]);
if (column == null) return;
column.widgets = widgets;
columns[columnIndex] = column;
@@ -272,9 +269,9 @@ export function setColumnWidgets(id: Column['id'], widgets: ColumnWidget[]) {
}
export function updateColumnWidget(id: Column['id'], widgetId: string, widgetData: any) {
- const columns = copy(deckStore.state.columns);
+ const columns = deepClone(deckStore.state.columns);
const columnIndex = deckStore.state.columns.findIndex(c => c.id === id);
- const column = copy(deckStore.state.columns[columnIndex]);
+ const column = deepClone(deckStore.state.columns[columnIndex]);
if (column == null) return;
column.widgets = column.widgets.map(w => w.id === widgetId ? {
...w,
@@ -286,9 +283,9 @@ export function updateColumnWidget(id: Column['id'], widgetId: string, widgetDat
}
export function updateColumn(id: Column['id'], column: Partial<Column>) {
- const columns = copy(deckStore.state.columns);
+ const columns = deepClone(deckStore.state.columns);
const columnIndex = deckStore.state.columns.findIndex(c => c.id === id);
- const currentColumn = copy(deckStore.state.columns[columnIndex]);
+ const currentColumn = deepClone(deckStore.state.columns[columnIndex]);
if (currentColumn == null) return;
for (const [k, v] of Object.entries(column)) {
currentColumn[k] = v;