useRuleChainI18n.ts 1.16 KB
import { RuleNodeTypeEnum } from '../packages/index.type';
import {
  ActionNodeType,
  EnrichmentNodeType,
  EntryNodeType,
  ExternalNodeType,
  FilterNodeType,
  FlowNodeType,
  TransformationNodeType,
} from '../types/node';
import { useI18n } from '/@/hooks/web/useI18n';

type PlaceholderType = 'choose' | 'input';

interface RuleNodeWidthNodeType {
  [RuleNodeTypeEnum.ACTION]: ActionNodeType;
  [RuleNodeTypeEnum.ENRICHMENT]: EnrichmentNodeType;
  [RuleNodeTypeEnum.ENTRY]: EntryNodeType;
  [RuleNodeTypeEnum.EXTERNAL]: ExternalNodeType;
  [RuleNodeTypeEnum.FILTER]: FilterNodeType;
  [RuleNodeTypeEnum.FLOW]: FlowNodeType;
  [RuleNodeTypeEnum.TRANSFORMATION]: TransformationNodeType;
}

export function useRuleChainI18n<T extends RuleNodeTypeEnum>(
  category: Lowercase<`${T}`>,
  node: Uncapitalize<RuleNodeWidthNodeType[T]>
) {
  const { t, ...reset } = useI18n();

  function tPlaceholder(field: string, type: PlaceholderType = 'input') {
    return `${t(`common.${type}Text`)}${tLabel(field)}`;
  }

  function tLabel(field: string) {
    return t(`rule.chain.${category}.${node}.fields.${field}`);
  }

  return {
    ...reset,
    t,
    tLabel,
    tPlaceholder,
  };
}