useSceneLinkedgeData.ts 2.35 KB
import { Ref, unref } from 'vue';
import { ExecutionAction } from '../ExecutionAction';
import { FlipFlop } from '../FlipFlop';
import { DefineComponentsBasicExpose } from '/#/utils';
import { SceneLinkageDataType, SceneLinkageFormRecordType } from './type';
import { FormActionType } from '/@/components/Form';

interface UseSceneLinkageDataParamsType {
  flipFlopElRef: Ref<InstanceType<typeof FlipFlop> | undefined>;
  executionConditionElRef: Ref<InstanceType<typeof FlipFlop> | undefined>;
  executionActionElRef: Ref<InstanceType<typeof ExecutionAction> | undefined>;
  basicFormActionType: FormActionType;
}

export function useSceneLinkageData({
  flipFlopElRef,
  executionActionElRef,
  executionConditionElRef,
  basicFormActionType,
}: UseSceneLinkageDataParamsType): DefineComponentsBasicExpose<SceneLinkageDataType> {
  const getFieldsValue = () => {
    const doActions = unref(executionActionElRef)?.getFieldsValue() || [];
    const doConditions = unref(executionConditionElRef)?.getFieldsValue() || [];
    const triggers = unref(flipFlopElRef)?.getFieldsValue() || [];
    const { name, description, organizationId, ruleChainId } =
      basicFormActionType.getFieldsValue() as SceneLinkageFormRecordType;

    return {
      name,
      description,
      organizationId,
      ruleChainId,
      doActions,
      doConditions,
      triggers,
    };
  };

  const setFieldsValue = (record: SceneLinkageDataType) => {
    const { doActions, doConditions, triggers, name, description, organizationId, ruleChainId } =
      record;

    basicFormActionType.setFieldsValue({ name, description, organizationId, ruleChainId });

    unref(flipFlopElRef)?.setFieldsValue(triggers);

    unref(executionConditionElRef)?.setFieldsValue(doConditions);

    unref(executionActionElRef)?.setFieldsValue(doActions);
  };

  const validate = async () => {
    await basicFormActionType.validate?.();
    await unref(flipFlopElRef)?.validate?.();
    await unref(executionConditionElRef)?.validate?.();
    await unref(executionActionElRef)?.validate?.();
  };

  const resetFieldsValue = () => {
    basicFormActionType.resetFields();
    unref(flipFlopElRef)?.resetFieldsValue?.();
    unref(executionConditionElRef)?.resetFieldsValue?.(true);
    unref(executionActionElRef)?.resetFieldsValue?.();
  };

  return {
    getFieldsValue,
    setFieldsValue,
    validate,
    resetFieldsValue,
  };
}