refactor
This commit is contained in:
parent
8cc80faf20
commit
39c3995c74
@ -47,9 +47,7 @@ import { emojilist } from '@/scripts/emojilist';
|
|||||||
import { instance } from '@/instance';
|
import { instance } from '@/instance';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { miLocalStorage } from '@/local-storage';
|
import { miLocalStorage } from '@/local-storage';
|
||||||
import { getCustomEmojis } from '@/custom-emojis';
|
import { customEmojis } from '@/custom-emojis';
|
||||||
|
|
||||||
const customEmojis = await getCustomEmojis();
|
|
||||||
|
|
||||||
type EmojiDef = {
|
type EmojiDef = {
|
||||||
emoji: string;
|
emoji: string;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="omfetrab" :class="['s' + size, 'w' + width, 'h' + height, { asDrawer, asWindow }]" :style="{ maxHeight: maxHeight ? maxHeight + 'px' : undefined }">
|
<div class="omfetrab" :class="['s' + size, 'w' + width, 'h' + height, { asDrawer, asWindow }]" :style="{ maxHeight: maxHeight ? maxHeight + 'px' : undefined }">
|
||||||
<input ref="search" :value="q" class="search" data-prevent-emoji-insert :class="{ filled: q != null && q != '' }" :placeholder="i18n.ts.search" type="search" @input="input()" @paste.stop="paste" @keyup.enter="done()">
|
<input ref="search" :value="q" class="search" data-prevent-emoji-insert :class="{ filled: q != null && q != '' }" :placeholder="i18n.ts.search" type="search" @input="input()" @paste.stop="paste" @keyup.enter="done()">
|
||||||
<div v-if="customEmojis != null && customEmojiCategories != null" ref="emojisEl" class="emojis">
|
<div ref="emojisEl" class="emojis">
|
||||||
<section class="result">
|
<section class="result">
|
||||||
<div v-if="searchResultCustom.length > 0" class="body">
|
<div v-if="searchResultCustom.length > 0" class="body">
|
||||||
<button
|
<button
|
||||||
@ -88,7 +88,7 @@ import { deviceKind } from '@/scripts/device-kind';
|
|||||||
import { instance } from '@/instance';
|
import { instance } from '@/instance';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
import { getCustomEmojiCategories, getCustomEmojis } from '@/custom-emojis';
|
import { getCustomEmojiCategories, customEmojis } from '@/custom-emojis';
|
||||||
|
|
||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
showPinned?: boolean;
|
showPinned?: boolean;
|
||||||
@ -104,15 +104,7 @@ const emit = defineEmits<{
|
|||||||
(ev: 'chosen', v: string): void;
|
(ev: 'chosen', v: string): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
let customEmojis = $ref(null);
|
const customEmojiCategories = getCustomEmojiCategories();
|
||||||
getCustomEmojis().then((x) => {
|
|
||||||
customEmojis = x;
|
|
||||||
});
|
|
||||||
let customEmojiCategories = $ref(null);
|
|
||||||
getCustomEmojiCategories().then((x) => {
|
|
||||||
customEmojiCategories = x;
|
|
||||||
});
|
|
||||||
|
|
||||||
const search = shallowRef<HTMLInputElement>();
|
const search = shallowRef<HTMLInputElement>();
|
||||||
const emojisEl = shallowRef<HTMLDivElement>();
|
const emojisEl = shallowRef<HTMLDivElement>();
|
||||||
|
|
||||||
|
@ -2,25 +2,26 @@ import { api } from './os';
|
|||||||
import { miLocalStorage } from './local-storage';
|
import { miLocalStorage } from './local-storage';
|
||||||
|
|
||||||
const storageCache = miLocalStorage.getItem('emojis');
|
const storageCache = miLocalStorage.getItem('emojis');
|
||||||
let cached = storageCache ? JSON.parse(storageCache) : null;
|
export let customEmojis = storageCache ? JSON.parse(storageCache) : [];
|
||||||
export async function getCustomEmojis() {
|
|
||||||
|
fetchCustomEmojis();
|
||||||
|
|
||||||
|
export async function fetchCustomEmojis() {
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const lastFetchedAt = miLocalStorage.getItem('lastEmojisFetchedAt');
|
const lastFetchedAt = miLocalStorage.getItem('lastEmojisFetchedAt');
|
||||||
if (cached && lastFetchedAt && (now - parseInt(lastFetchedAt)) < 1000 * 60 * 60) return cached;
|
if (lastFetchedAt && (now - parseInt(lastFetchedAt)) < 1000 * 60 * 60) return;
|
||||||
|
|
||||||
const res = await api('emojis', {});
|
const res = await api('emojis', {});
|
||||||
|
|
||||||
cached = res.emojis;
|
customEmojis = res.emojis;
|
||||||
miLocalStorage.setItem('emojis', JSON.stringify(cached));
|
miLocalStorage.setItem('emojis', JSON.stringify(customEmojis));
|
||||||
miLocalStorage.setItem('lastEmojisFetchedAt', now.toString());
|
miLocalStorage.setItem('lastEmojisFetchedAt', now.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
let cachedCategories;
|
let cachedCategories;
|
||||||
export async function getCustomEmojiCategories() {
|
export function getCustomEmojiCategories() {
|
||||||
if (cachedCategories) return cachedCategories;
|
if (cachedCategories) return cachedCategories;
|
||||||
|
|
||||||
const customEmojis = await getCustomEmojis();
|
|
||||||
|
|
||||||
const categories = new Set();
|
const categories = new Set();
|
||||||
for (const emoji of customEmojis) {
|
for (const emoji of customEmojis) {
|
||||||
categories.add(emoji.category);
|
categories.add(emoji.category);
|
||||||
@ -31,11 +32,9 @@ export async function getCustomEmojiCategories() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cachedTags;
|
let cachedTags;
|
||||||
export async function getCustomEmojiTags() {
|
export function getCustomEmojiTags() {
|
||||||
if (cachedTags) return cachedTags;
|
if (cachedTags) return cachedTags;
|
||||||
|
|
||||||
const customEmojis = await getCustomEmojis();
|
|
||||||
|
|
||||||
const tags = new Set();
|
const tags = new Set();
|
||||||
for (const emoji of customEmojis) {
|
for (const emoji of customEmojis) {
|
||||||
for (const tag of emoji.aliases) {
|
for (const tag of emoji.aliases) {
|
||||||
|
@ -37,11 +37,10 @@ import MkSelect from '@/components/MkSelect.vue';
|
|||||||
import MkFoldableSection from '@/components/MkFoldableSection.vue';
|
import MkFoldableSection from '@/components/MkFoldableSection.vue';
|
||||||
import MkTab from '@/components/MkTab.vue';
|
import MkTab from '@/components/MkTab.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { getCustomEmojis, getCustomEmojiCategories, getCustomEmojiTags } from '@/custom-emojis';
|
import { customEmojis, getCustomEmojiCategories, getCustomEmojiTags } from '@/custom-emojis';
|
||||||
|
|
||||||
const customEmojis = await getCustomEmojis();
|
const customEmojiCategories = getCustomEmojiCategories();
|
||||||
const customEmojiCategories = await getCustomEmojiCategories();
|
const customEmojiTags = getCustomEmojiTags();
|
||||||
const customEmojiTags = await getCustomEmojiTags();
|
|
||||||
let q = $ref('');
|
let q = $ref('');
|
||||||
let searchEmojis = $ref(null);
|
let searchEmojis = $ref(null);
|
||||||
let selectedTags = $ref(new Set());
|
let selectedTags = $ref(new Set());
|
||||||
|
@ -46,7 +46,7 @@ let dialog = $ref(null);
|
|||||||
let name: string = $ref(props.emoji.name);
|
let name: string = $ref(props.emoji.name);
|
||||||
let category: string = $ref(props.emoji.category);
|
let category: string = $ref(props.emoji.category);
|
||||||
let aliases: string = $ref(props.emoji.aliases.join(' '));
|
let aliases: string = $ref(props.emoji.aliases.join(' '));
|
||||||
const categories = await getCustomEmojiCategories();
|
const categories = getCustomEmojiCategories();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(ev: 'done', v: { deleted?: boolean, updated?: any }): void,
|
(ev: 'done', v: { deleted?: boolean, updated?: any }): void,
|
||||||
|
@ -63,9 +63,7 @@ import number from '@/filters/number';
|
|||||||
import MkNumberDiff from '@/components/MkNumberDiff.vue';
|
import MkNumberDiff from '@/components/MkNumberDiff.vue';
|
||||||
import MkNumber from '@/components/MkNumber.vue';
|
import MkNumber from '@/components/MkNumber.vue';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { getCustomEmojis } from '@/custom-emojis';
|
import { customEmojis } from '@/custom-emojis';
|
||||||
|
|
||||||
const customEmojis = await getCustomEmojis();
|
|
||||||
|
|
||||||
let stats: any = $ref(null);
|
let stats: any = $ref(null);
|
||||||
let usersComparedToThePrevDay = $ref<number>();
|
let usersComparedToThePrevDay = $ref<number>();
|
||||||
|
@ -317,9 +317,7 @@ import MkTextarea from '@/components/MkTextarea.vue';
|
|||||||
import { definePageMetadata } from '@/scripts/page-metadata';
|
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { instance } from '@/instance';
|
import { instance } from '@/instance';
|
||||||
import { getCustomEmojis } from '@/custom-emojis';
|
import { customEmojis } from '@/custom-emojis';
|
||||||
|
|
||||||
const customEmojis = await getCustomEmojis();
|
|
||||||
|
|
||||||
let preview_mention = $ref('@example');
|
let preview_mention = $ref('@example');
|
||||||
let preview_hashtag = $ref('#test');
|
let preview_hashtag = $ref('#test');
|
||||||
|
Loading…
Reference in New Issue
Block a user