Merge branch 'main' into bcrypt-error-states

This commit is contained in:
lionel-rowe 2024-08-09 08:17:47 +08:00 committed by GitHub
commit 52f498695d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 4 deletions

View file

@ -138,5 +138,6 @@
"vitest": "^0.34.0", "vitest": "^0.34.0",
"workbox-window": "^7.0.0", "workbox-window": "^7.0.0",
"zx": "^7.2.1" "zx": "^7.2.1"
} },
"packageManager": "pnpm@8.15.3"
} }

View file

@ -0,0 +1,21 @@
import _ from 'lodash';
function useDebouncedRef<T>(initialValue: T, delay: number, immediate: boolean = false) {
const state = ref(initialValue);
const debouncedRef = customRef((track, trigger) => ({
get() {
track();
return state.value;
},
set: _.debounce(
(value) => {
state.value = value;
trigger();
},
delay,
{ leading: immediate },
),
}));
return debouncedRef;
}
export default useDebouncedRef;

View file

@ -4,6 +4,7 @@ import emojiKeywords from 'emojilib';
import _ from 'lodash'; import _ from 'lodash';
import type { EmojiInfo } from './emoji.types'; import type { EmojiInfo } from './emoji.types';
import { useFuzzySearch } from '@/composable/fuzzySearch'; import { useFuzzySearch } from '@/composable/fuzzySearch';
import useDebouncedRef from '@/composable/debouncedref';
const escapeUnicode = ({ emoji }: { emoji: string }) => emoji.split('').map(unit => `\\u${unit.charCodeAt(0).toString(16).padStart(4, '0')}`).join(''); const escapeUnicode = ({ emoji }: { emoji: string }) => emoji.split('').map(unit => `\\u${unit.charCodeAt(0).toString(16).padStart(4, '0')}`).join('');
const getEmojiCodePoints = ({ emoji }: { emoji: string }) => emoji.codePointAt(0) ? `0x${emoji.codePointAt(0)?.toString(16)}` : undefined; const getEmojiCodePoints = ({ emoji }: { emoji: string }) => emoji.codePointAt(0) ? `0x${emoji.codePointAt(0)?.toString(16)}` : undefined;
@ -23,7 +24,7 @@ const emojisGroups: { emojiInfos: EmojiInfo[]; group: string }[] = _
.map((emojiInfos, group) => ({ group, emojiInfos })) .map((emojiInfos, group) => ({ group, emojiInfos }))
.value(); .value();
const searchQuery = ref(''); const searchQuery = useDebouncedRef('', 500);
const { searchResult } = useFuzzySearch({ const { searchResult } = useFuzzySearch({
search: searchQuery, search: searchQuery,

View file

@ -2,6 +2,7 @@
import { generateLoremIpsum } from './lorem-ipsum-generator.service'; import { generateLoremIpsum } from './lorem-ipsum-generator.service';
import { useCopy } from '@/composable/copy'; import { useCopy } from '@/composable/copy';
import { randIntFromInterval } from '@/utils/random'; import { randIntFromInterval } from '@/utils/random';
import { computedRefreshable } from '@/composable/computedRefreshable';
const paragraphs = ref(1); const paragraphs = ref(1);
const sentences = ref([3, 8]); const sentences = ref([3, 8]);
@ -9,7 +10,7 @@ const words = ref([8, 15]);
const startWithLoremIpsum = ref(true); const startWithLoremIpsum = ref(true);
const asHTML = ref(false); const asHTML = ref(false);
const loremIpsumText = computed(() => const [loremIpsumText, refreshLoremIpsum] = computedRefreshable(() =>
generateLoremIpsum({ generateLoremIpsum({
paragraphCount: paragraphs.value, paragraphCount: paragraphs.value,
asHTML: asHTML.value, asHTML: asHTML.value,
@ -18,6 +19,7 @@ const loremIpsumText = computed(() =>
startWithLoremIpsum: startWithLoremIpsum.value, startWithLoremIpsum: startWithLoremIpsum.value,
}), }),
); );
const { copy } = useCopy({ source: loremIpsumText, text: 'Lorem ipsum copied to the clipboard' }); const { copy } = useCopy({ source: loremIpsumText, text: 'Lorem ipsum copied to the clipboard' });
</script> </script>
@ -41,10 +43,13 @@ const { copy } = useCopy({ source: loremIpsumText, text: 'Lorem ipsum copied to
<c-input-text :value="loremIpsumText" multiline placeholder="Your lorem ipsum..." readonly mt-5 rows="5" /> <c-input-text :value="loremIpsumText" multiline placeholder="Your lorem ipsum..." readonly mt-5 rows="5" />
<div mt-5 flex justify-center> <div mt-5 flex justify-center gap-3>
<c-button autofocus @click="copy()"> <c-button autofocus @click="copy()">
Copy Copy
</c-button> </c-button>
<c-button @click="refreshLoremIpsum">
Refresh
</c-button>
</div> </div>
</c-card> </c-card>
</template> </template>