coze-studio/frontend/packages/data/knowledge/common/stores/src/knowledge-preview.ts

110 lines
3.0 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 { devtools } from 'zustand/middleware';
import { create } from 'zustand';
import { type DocumentInfo, type Dataset } from '@coze-arch/bot-api/knowledge';
import {
createLevelSegmentsSlice,
getDefaultLevelSegmentsState,
type ILevelSegmentsSlice,
} from './level-segments-slice';
export enum FilterPhotoType {
/**
* all
*/
All = 'All',
/**
* marked
*/
HasCaption = 'HasCaption',
/**
* unmarked
*/
NoCaption = 'NoCaption',
}
export interface KnowledgePreviewState {
canEdit?: boolean;
dataSetDetail: Dataset;
documentList: DocumentInfo[];
searchValue: string;
curDocId: string;
/**
* Is the image type marked?
*/
photoFilterValue: FilterPhotoType;
}
export interface KnowledgePreviewAction {
setCanEdit: (editable: boolean) => void;
setDataSetDetail: (dataSet: Dataset) => void;
setDocumentList: (documentList: DocumentInfo[]) => void;
setSearchValue: (v: string) => void;
setPhotoFilterValue: (v: FilterPhotoType) => void;
setCurDocId: (curDocId: string) => void;
}
const getInitialState = (options?: { version?: string }) => ({
canEdit: !options?.version,
dataSetDetail: {},
documentList: [],
curDocId: '',
searchValue: '',
photoFilterValue: FilterPhotoType.All,
});
export const createKnowledgePreviewStore = (options?: { version?: string }) =>
create<
KnowledgePreviewState & KnowledgePreviewAction & ILevelSegmentsSlice
>()(
devtools(
(set, get, ...args) => ({
...getInitialState(options),
...getDefaultLevelSegmentsState(),
...createLevelSegmentsSlice(set, get, ...args),
setDataSetDetail: (dataSetDetail: Dataset) => {
set({ dataSetDetail });
set({ canEdit: dataSetDetail?.can_edit && !options?.version });
},
setDocumentList: (documentList: DocumentInfo[]) => {
set({ documentList });
},
setSearchValue: (v: string) => {
set({ searchValue: v });
},
setPhotoFilterValue: (v: FilterPhotoType) => {
set({ photoFilterValue: v });
},
setCanEdit: editable => {
set({ canEdit: editable });
},
setCurDocId: (curDocId: string) => {
set({ curDocId });
},
reset: () => {
set(getInitialState(options));
},
}),
{ name: 'DEV_TOOLS_NAME_SPACE', enabled: IS_DEV_MODE },
),
);
export type KnowledgePreviewStore = ReturnType<
typeof createKnowledgePreviewStore
>;