98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| /*
 | |
|  * Copyright 2025 coze-dev Authors
 | |
|  *
 | |
|  * 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 { useContext } from 'react';
 | |
| 
 | |
| import { useStoreWithEqualityFn } from 'zustand/traditional';
 | |
| import { shallow } from 'zustand/shallow';
 | |
| import { REPORT_EVENTS } from '@coze-arch/report-events';
 | |
| import { CustomError } from '@coze-arch/bot-error';
 | |
| 
 | |
| import {
 | |
|   type ProcessingKnowledgeInfo,
 | |
|   type ProcessingKnowledgeInfoAction,
 | |
| } from './processing-knowledge';
 | |
| import { type IParamsStore } from './params-store';
 | |
| import { type ILevelSegmentsSlice } from './level-segments-slice';
 | |
| import {
 | |
|   type KnowledgePreviewAction,
 | |
|   type KnowledgePreviewState,
 | |
| } from './knowledge-preview';
 | |
| import {
 | |
|   type CallbacksType,
 | |
|   type PluginNavType,
 | |
|   KnowledgeParamsStoreContext,
 | |
| } from './context';
 | |
| 
 | |
| export const useKnowledgeParamsStore: <T>(
 | |
|   selector: (store: IParamsStore) => T,
 | |
| ) => T = selector => {
 | |
|   const context = useContext(KnowledgeParamsStoreContext);
 | |
| 
 | |
|   if (!context.paramsStore) {
 | |
|     throw new CustomError(REPORT_EVENTS.normalError, 'params store context');
 | |
|   }
 | |
| 
 | |
|   return useStoreWithEqualityFn(context.paramsStore, selector, shallow);
 | |
| };
 | |
| 
 | |
| export const useKnowledgeParams = () => {
 | |
|   const params = useKnowledgeParamsStore(store => store.params);
 | |
|   return params;
 | |
| };
 | |
| 
 | |
| export const useDataCallbacks: () => CallbacksType = () => {
 | |
|   const {
 | |
|     callbacks: { onStatusChange, onUpdateDisplayName },
 | |
|   } = useContext(KnowledgeParamsStoreContext);
 | |
| 
 | |
|   return { onStatusChange, onUpdateDisplayName };
 | |
| };
 | |
| 
 | |
| export const useDataNavigate: () => PluginNavType = () => {
 | |
|   const { resourceNavigate } = useContext(KnowledgeParamsStoreContext);
 | |
| 
 | |
|   return resourceNavigate;
 | |
| };
 | |
| 
 | |
| export const useKnowledgeStore: <T>(
 | |
|   selector: (
 | |
|     store: KnowledgePreviewState & KnowledgePreviewAction & ILevelSegmentsSlice,
 | |
|   ) => T,
 | |
| ) => T = selector => {
 | |
|   const context = useContext(KnowledgeParamsStoreContext);
 | |
| 
 | |
|   if (!context.knowledgeStore) {
 | |
|     throw new CustomError(REPORT_EVENTS.normalError, 'params store context');
 | |
|   }
 | |
| 
 | |
|   return useStoreWithEqualityFn(context.knowledgeStore, selector, shallow);
 | |
| };
 | |
| 
 | |
| export const useProcessingStore: <T>(
 | |
|   selector: (
 | |
|     store: ProcessingKnowledgeInfo & ProcessingKnowledgeInfoAction,
 | |
|   ) => T,
 | |
| ) => T = selector => {
 | |
|   const context = useContext(KnowledgeParamsStoreContext);
 | |
| 
 | |
|   if (!context.processingKnowledge) {
 | |
|     throw new CustomError(REPORT_EVENTS.normalError, 'params store context');
 | |
|   }
 | |
| 
 | |
|   return useStoreWithEqualityFn(context.processingKnowledge, selector, shallow);
 | |
| };
 |