You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.9 KiB
TypeScript

/*
* @Author: donghao donghao@supervision.ltd
* @Date: 2024-08-06 16:50:48
* @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2024-08-06 17:07:30
* @FilePath: \General-AI-Platform-Web-Client\src\hooks\select.ts
* @Description: useSelect 类型待优化
*/
import { inject, onBeforeMount, onMounted, reactive } from "vue";
import { SelectEvent, SelectMode, SelectOneType } from "@/utils/event/types";
interface Selector {
mSelectMode: SelectMode;
mSelectOneType: SelectOneType;
mSelectId: string[] | "";
mSelectIds: string[];
mSelectActive: unknown[];
}
export default function useSelect() {
const state = reactive<Selector>({
mSelectMode: SelectMode.EMPTY,
mSelectOneType: SelectOneType.EMPTY,
mSelectId: "", // 选择id
mSelectIds: [], // 选择id
mSelectActive: []
});
const fabric = inject("fabric");
// const canvas = inject('canvas');
const canvasEditor = inject("canvasEditor");
const event = inject("event");
const selectOne = e => {
state.mSelectMode = SelectMode.ONE;
state.mSelectId = e[0].id;
state.mSelectOneType = e[0].type;
state.mSelectIds = e.map(item => item.id);
};
const selectMulti = e => {
state.mSelectMode = SelectMode.MULTI;
state.mSelectId = "";
state.mSelectIds = e.map(item => item.id);
};
const selectCancel = () => {
state.mSelectId = "";
state.mSelectIds = [];
state.mSelectMode = SelectMode.EMPTY;
state.mSelectOneType = SelectOneType.EMPTY;
};
onMounted(() => {
event.on(SelectEvent.ONE, selectOne);
event.on(SelectEvent.MULTI, selectMulti);
event.on(SelectEvent.CANCEL, selectCancel);
});
onBeforeMount(() => {
event.off(SelectEvent.ONE, selectOne);
event.off(SelectEvent.MULTI, selectMulti);
event.off(SelectEvent.CANCEL, selectCancel);
});
return {
fabric,
// canvas,
canvasEditor,
mixinState: state
};
}