Preload: refactor actions, add MASTODON_PRELOAD_IMPORT action

v1.x.x
Alex Gleason 2021-09-15 12:55:21 -05:00
rodzic 1763934c3e
commit 06ed4e9096
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
1 zmienionych plików z 43 dodań i 11 usunięć

Wyświetl plik

@ -1,25 +1,57 @@
import { mapValues } from 'lodash'; import { mapValues } from 'lodash';
export const PLEROMA_PRELOAD_IMPORT = 'PLEROMA_PRELOAD_IMPORT'; export const PLEROMA_PRELOAD_IMPORT = 'PLEROMA_PRELOAD_IMPORT';
export const MASTODON_PRELOAD_IMPORT = 'MASTODON_PRELOAD_IMPORT';
// https://git.pleroma.social/pleroma/pleroma-fe/-/merge_requests/1176/diffs // https://git.pleroma.social/pleroma/pleroma-fe/-/merge_requests/1176/diffs
const decodeUTF8Base64 = (data) => { const decodeUTF8Base64 = data => {
const rawData = atob(data); const rawData = atob(data);
const array = Uint8Array.from(rawData.split('').map((char) => char.charCodeAt(0))); const array = Uint8Array.from(rawData.split('').map((char) => char.charCodeAt(0)));
const text = new TextDecoder().decode(array); const text = new TextDecoder().decode(array);
return text; return text;
}; };
const decodeData = data => const decodePleromaData = data => {
mapValues(data, base64string => return mapValues(data, base64string => JSON.parse(decodeUTF8Base64(base64string)));
JSON.parse(decodeUTF8Base64(base64string))); };
export function preload() { const pleromaDecoder = json => decodePleromaData(JSON.parse(json));
const element = document.getElementById('initial-results');
const data = element ? JSON.parse(element.textContent) : {};
return { // This will throw if it fails.
type: PLEROMA_PRELOAD_IMPORT, // Should be called inside a try-catch.
data: decodeData(data), const decodeFromMarkup = (elementId, decoder) => {
const { textContent } = document.getElementById(elementId);
return decoder(textContent);
};
function preloadFromMarkup(elementId, decoder, action) {
return (dispatch, getState) => {
try {
const data = decodeFromMarkup(elementId, decoder);
dispatch(action(data));
} catch {
// Do nothing
}
};
}
export function preload() {
return (dispatch, getState) => {
dispatch(preloadFromMarkup('initial-results', pleromaDecoder, preloadPleroma));
dispatch(preloadFromMarkup('initial-state', JSON.parse, preloadMastodon));
};
}
export function preloadPleroma(data) {
return {
type: PLEROMA_PRELOAD_IMPORT,
data,
};
}
export function preloadMastodon(data) {
return {
type: MASTODON_PRELOAD_IMPORT,
data,
}; };
} }