// Copyright (c) 2025, Huawei Technologies Co., Ltd.
// All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { useSetAtom } from 'jotai';
import {
dynamicNodesAtom,
searchResultAtom,
thumbnailInfoAtom,
useSelectionHistory,
} from './stores';
import WebWorker from './worker';
import { useEffect } from 'react';
const useWorkerMessage = (): void => {
const setSearchResult = useSetAtom(searchResultAtom);
const setDynamicNodes = useSetAtom(dynamicNodesAtom);
const setThumbnailInfo = useSetAtom(thumbnailInfoAtom);
const { update, clear } = useSelectionHistory();
useEffect(() => {
WebWorker.onmessage = ({ data: payload }): void => {
switch (payload.type) {
case 'search/ret':
setSearchResult(payload.nodes);
break;
case 'hit-test/ret': {
const { type = null, data: hitData } = payload.data;
if (type === 'node') {
update(hitData.id);
} else if (type === 'edge') {
update({ source: hitData.source, target: hitData.target });
} else { clear(); }
break;
}
case 'dynamic-nodes':
setDynamicNodes(payload.dynamicNodes);
break;
case 'thumbnail/info':
setThumbnailInfo(payload.thumbnailInfo);
break;
}
};
}, []);
};
export default useWorkerMessage;