Finally DRY this saving status code

pull/47/head
Lim Chee Aun 2023-01-09 19:11:34 +08:00
rodzic 522dd08925
commit 13c3b8fa3b
4 zmienionych plików z 27 dodań i 51 usunięć

Wyświetl plik

@ -20,7 +20,7 @@ import Settings from './pages/settings';
import Status from './pages/status';
import Welcome from './pages/welcome';
import { getAccessToken } from './utils/auth';
import states from './utils/states';
import states, { saveStatus } from './utils/states';
import store from './utils/store';
const { VITE_CLIENT_NAME: CLIENT_NAME } = import.meta.env;
@ -300,18 +300,12 @@ async function startStream() {
});
}
states.statuses[status.id] = status;
if (status.reblog) {
states.statuses[status.reblog.id] = status.reblog;
}
saveStatus(status);
}, 5000);
stream.on('update', handleNewStatus);
stream.on('status.update', (status) => {
console.log('STATUS.UPDATE', status);
states.statuses[status.id] = status;
if (status.reblog) {
states.statuses[status.reblog.id] = status.reblog;
}
saveStatus(status);
});
stream.on('delete', (statusID) => {
console.log('DELETE', statusID);
@ -332,16 +326,7 @@ async function startStream() {
states.notificationsNew.unshift(notification);
}
if (notification.status && !states.statuses[notification.status.id]) {
states.statuses[notification.status.id] = notification.status;
if (
notification.status.reblog &&
!states.statuses[notification.status.reblog.id]
) {
states.statuses[notification.status.reblog.id] =
notification.status.reblog;
}
}
saveStatus(notification.status, { override: false });
});
stream.ws.onclose = () => {
@ -393,10 +378,7 @@ function startVisibility() {
newStatuses[0].id !== states.home[0].id
) {
states.homeNew = newStatuses.map((status) => {
states.statuses[status.id] = status;
if (status.reblog) {
states.statuses[status.reblog.id] = status.reblog;
}
saveStatus(status);
return {
id: status.id,
reblog: status.reblog?.id,
@ -418,19 +400,7 @@ function startVisibility() {
states.notificationsNew.unshift(notification);
}
if (
notification.status &&
!states.statuses[notification.status.id]
) {
states.statuses[notification.status.id] = notification.status;
if (
notification.status.reblog &&
!states.statuses[notification.status.reblog.id]
) {
states.statuses[notification.status.reblog.id] =
notification.status.reblog;
}
}
saveStatus(notification.status, { override: false });
}
} catch (e) {
// Silently fail

Wyświetl plik

@ -22,7 +22,7 @@ import NameText from '../components/name-text';
import enhanceContent from '../utils/enhance-content';
import htmlContentLength from '../utils/html-content-length';
import shortenNumber from '../utils/shorten-number';
import states from '../utils/states';
import states, { saveStatus } from '../utils/states';
import store from '../utils/store';
import useDebouncedCallback from '../utils/useDebouncedCallback';
import visibilityIconsMap from '../utils/visibility-icons-map';
@ -531,12 +531,10 @@ function Status({
const newStatus = await masto.v1.statuses.unreblog(
id,
);
states.statuses[newStatus.id] = newStatus;
saveStatus(newStatus);
} else {
const newStatus = await masto.v1.statuses.reblog(id);
states.statuses[newStatus.id] = newStatus;
states.statuses[newStatus.reblog.id] =
newStatus.reblog;
saveStatus(newStatus);
}
} catch (e) {
console.error(e);
@ -568,10 +566,10 @@ function Status({
const newStatus = await masto.v1.statuses.unfavourite(
id,
);
states.statuses[newStatus.id] = newStatus;
saveStatus(newStatus);
} else {
const newStatus = await masto.v1.statuses.favourite(id);
states.statuses[newStatus.id] = newStatus;
saveStatus(newStatus);
}
} catch (e) {
console.error(e);
@ -599,10 +597,10 @@ function Status({
const newStatus = await masto.v1.statuses.unbookmark(
id,
);
states.statuses[newStatus.id] = newStatus;
saveStatus(newStatus);
} else {
const newStatus = await masto.v1.statuses.bookmark(id);
states.statuses[newStatus.id] = newStatus;
saveStatus(newStatus);
}
} catch (e) {
console.error(e);

Wyświetl plik

@ -7,7 +7,7 @@ import { useSnapshot } from 'valtio';
import Icon from '../components/icon';
import Loader from '../components/loader';
import Status from '../components/status';
import states from '../utils/states';
import states, { saveStatus } from '../utils/states';
import useDebouncedCallback from '../utils/useDebouncedCallback';
import useScroll from '../utils/useScroll';
@ -38,10 +38,7 @@ function Home({ hidden }) {
return { done: true };
}
const homeValues = allStatuses.value.map((status) => {
states.statuses[status.id] = status;
if (status.reblog) {
states.statuses[status.reblog.id] = status.reblog;
}
saveStatus(status);
return {
id: status.id,
reblog: status.reblog?.id,

Wyświetl plik

@ -1,6 +1,6 @@
import { proxy } from 'valtio';
export default proxy({
const states = proxy({
history: [],
statuses: {},
home: [],
@ -19,3 +19,14 @@ export default proxy({
showAccount: false,
composeCharacterCount: 0,
});
export default states;
export function saveStatus(status, opts) {
const { override } = Object.assign({ override: true }, opts);
if (!status) return;
if (!override && states.statuses[status.id]) return;
states.statuses[status.id] = status;
if (status.reblog) {
states.statuses[status.reblog.id] = status.reblog;
}
}