123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import { __assign, __awaiter, __generator, __spreadArray } from "tslib";
- import { PINYIN_MAP } from './constants';
- import { RareWordsKeyboardProps } from './props';
- import { formatZDatas, loadFontFace, matchWordsRecommend } from './utils';
- import { ZDATAS } from './zdatas';
- import '../_util/assert-component2';
- import { useEffect, useEvent, useState } from 'functional-mini/component';
- import { useComponentEvent } from '../_util/hooks/useComponentEvent';
- import { useEvent as useStableCallback } from '../_util/hooks/useEvent';
- import { mountComponent } from '../_util/component';
- import { useInstanceBoundingClientRect } from '../_util/hooks/useInstanceBoundingClientRect';
- var wordsData = formatZDatas(ZDATAS.datas);
- var RareWordsKeyboard = function (props) {
- var _a = useState({
- showErrorPage: false,
- loading: false,
- }), fontState = _a[0], setFontState = _a[1];
- var _b = useState(0), maxDisplayNum = _b[0], setMaxDisplayNum = _b[1];
- var _c = useState({
- inputValue: [],
- displayStr: '',
- matchWordsList: [],
- showMoreWords: false, // 是否展示更多候选字
- }), keyboardState = _c[0], setKeyboardState = _c[1];
- var _d = useComponentEvent(props), triggerEvent = _d.triggerEvent, triggerEventOnly = _d.triggerEventOnly;
- var handleHide = useStableCallback(function () {
- setKeyboardState({
- inputValue: [],
- matchWordsList: [],
- displayStr: '',
- showMoreWords: false,
- });
- triggerEventOnly('close');
- });
- // 计算展示值和候选字列表
- function computeMatchWords(inputValue) {
- var displayStr = Array.isArray(inputValue)
- ? inputValue.join('')
- : inputValue;
- var curMatchWords = matchWordsRecommend(wordsData, displayStr);
- return {
- displayStr: displayStr,
- matchWordsList: curMatchWords,
- };
- }
- function loadFont() {
- setFontState(function (pre) {
- return __assign(__assign({}, pre), { loading: true });
- });
- loadFontFace()
- .then(function () {
- setFontState({ showErrorPage: false, loading: false });
- })
- .catch(function (err) {
- setFontState({ showErrorPage: true, loading: false });
- triggerEvent('error', err);
- });
- }
- var getBoundingClientRect = useInstanceBoundingClientRect().getBoundingClientRect;
- function computeMaxDisplayNum() {
- return __awaiter(this, void 0, void 0, function () {
- var _a, singleWords, wordsWrap, maxDisplayNumInOneLine;
- return __generator(this, function (_b) {
- switch (_b.label) {
- case 0: return [4 /*yield*/, Promise.all([
- getBoundingClientRect('.ant-rare-words-keyboard-match_words_hidden'),
- getBoundingClientRect('.ant-rare-words-keyboard-match_words_inner'),
- ])];
- case 1:
- _a = _b.sent(), singleWords = _a[0], wordsWrap = _a[1];
- if (!(wordsWrap === null || wordsWrap === void 0 ? void 0 : wordsWrap.width) || !(singleWords === null || singleWords === void 0 ? void 0 : singleWords.width))
- return [2 /*return*/];
- maxDisplayNumInOneLine = parseInt(((wordsWrap === null || wordsWrap === void 0 ? void 0 : wordsWrap.width) / (singleWords === null || singleWords === void 0 ? void 0 : singleWords.width)).toString(), 10);
- setMaxDisplayNum(maxDisplayNumInOneLine);
- return [2 /*return*/];
- }
- });
- });
- }
- useEffect(function () {
- loadFont();
- computeMaxDisplayNum();
- }, []);
- useEvent('handleRetry', function () {
- loadFont();
- });
- useEvent('handleWordClick', function (e) {
- var _a = e.currentTarget.dataset.value, value = _a === void 0 ? '' : _a;
- if (!value)
- return;
- triggerEvent('change', value);
- handleHide();
- });
- useEvent('hanleLookMore', function () {
- if (keyboardState.matchWordsList.length <= maxDisplayNum) {
- handleHide();
- return;
- }
- setKeyboardState(function (old) {
- return __assign(__assign({}, old), { showMoreWords: !old.showMoreWords });
- });
- });
- // 隐藏键盘,失去焦点
- useEvent('handleHide', function () {
- handleHide();
- });
- // 点击键盘key值
- useEvent('handleKeyClick', function (e) {
- if (fontState.loading) {
- return;
- }
- var _a = e.target.dataset.value, value = _a === void 0 ? '' : _a;
- if (!value) {
- return;
- }
- setKeyboardState(function (old) {
- var inputValue = __spreadArray(__spreadArray([], old.inputValue, true), [value], false);
- return __assign(__assign(__assign({}, old), { inputValue: inputValue }), computeMatchWords(inputValue));
- });
- });
- // 点击删除
- useEvent('handleDelete', function () {
- if (keyboardState.inputValue.length === 0) {
- return;
- }
- setKeyboardState(function (old) {
- var inputValue = __spreadArray([], old.inputValue, true);
- inputValue.pop();
- return __assign(__assign(__assign({}, old), { inputValue: __spreadArray([], inputValue, true) }), computeMatchWords(inputValue));
- });
- });
- return __assign(__assign(__assign(__assign({}, fontState), { maxDisplayNum: maxDisplayNum }), keyboardState), { pinyinMaps: PINYIN_MAP });
- };
- mountComponent(RareWordsKeyboard, RareWordsKeyboardProps);
|