194 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			4.8 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 React from 'react';
 | 
						|
 | 
						|
import type { Meta, StoryObj } from '@storybook/react';
 | 
						|
import { useArgs } from '@storybook/client-api';
 | 
						|
 | 
						|
import { Parameters, ParamTypeAlias } from '../../src/parameters';
 | 
						|
import type { ParameterValue } from '../../src/parameters';
 | 
						|
 | 
						|
const meta: Meta<typeof Parameters> = {
 | 
						|
  title: 'Biz Components/Parameters',
 | 
						|
  component: Parameters,
 | 
						|
  parameters: {
 | 
						|
    actions: { argTypesRegex: '^on.*' },
 | 
						|
    layout: 'centered',
 | 
						|
  },
 | 
						|
  render: args => {
 | 
						|
    // eslint-disable-next-line react-hooks/rules-of-hooks -- linter-disable-autofix
 | 
						|
    const [, updateArgs] = useArgs();
 | 
						|
    const handleChange = (value: ParameterValue[]) => {
 | 
						|
      updateArgs({ ...args, value });
 | 
						|
    };
 | 
						|
    return <Parameters {...args} onChange={handleChange} />;
 | 
						|
  },
 | 
						|
  argTypes: {
 | 
						|
    value: {
 | 
						|
      description: '值',
 | 
						|
      table: {
 | 
						|
        type: { summary: 'ParameterValue[]' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    readonly: {
 | 
						|
      description: '启用只读',
 | 
						|
      type: 'boolean',
 | 
						|
      table: {
 | 
						|
        type: { summary: 'Boolean' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    withDescription: {
 | 
						|
      description: '启用描述',
 | 
						|
      defaultValue: false,
 | 
						|
      table: {
 | 
						|
        type: { summary: 'Boolean' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    errors: {
 | 
						|
      control: 'object',
 | 
						|
      description: '失焦时触发',
 | 
						|
      table: {
 | 
						|
        type: { summary: 'ParametersError[]' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    disabledTypes: {
 | 
						|
      description: '禁用可选参数类型',
 | 
						|
      control: 'multi-select',
 | 
						|
      options: {
 | 
						|
        String: ParamTypeAlias.String,
 | 
						|
        Integer: ParamTypeAlias.Integer,
 | 
						|
        Boolean: ParamTypeAlias.Boolean,
 | 
						|
        Number: ParamTypeAlias.Number,
 | 
						|
        Object: ParamTypeAlias.Object,
 | 
						|
        ArrayString: ParamTypeAlias.ArrayString,
 | 
						|
        ArrayInteger: ParamTypeAlias.ArrayInteger,
 | 
						|
        ArrayBoolean: ParamTypeAlias.ArrayBoolean,
 | 
						|
        ArrayNumber: ParamTypeAlias.ArrayNumber,
 | 
						|
      },
 | 
						|
      table: {
 | 
						|
        type: { summary: 'ParamTypeAlias' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    allowValueEmpty: {
 | 
						|
      defaultValue: false,
 | 
						|
      type: 'boolean',
 | 
						|
      table: {
 | 
						|
        type: { summary: 'Boolean' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    className: {
 | 
						|
      description: '样式类',
 | 
						|
      table: {
 | 
						|
        type: { summary: 'String' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    style: {
 | 
						|
      description: '样式对象',
 | 
						|
      table: {
 | 
						|
        type: { summary: 'CSSProperties' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    onChange: {
 | 
						|
      description: '监听值变化',
 | 
						|
      table: {
 | 
						|
        type: { summary: '(value: ParameterValue[]) => void' },
 | 
						|
      },
 | 
						|
    },
 | 
						|
  },
 | 
						|
  args: {
 | 
						|
    value: [
 | 
						|
      {
 | 
						|
        key: '1',
 | 
						|
        type: ParamTypeAlias.ArrayObject,
 | 
						|
        name: 'outputList',
 | 
						|
        description: '输出',
 | 
						|
        children: [
 | 
						|
          {
 | 
						|
            key: '1-1',
 | 
						|
            name: 'name',
 | 
						|
            type: ParamTypeAlias.ArrayString,
 | 
						|
            description: '名称',
 | 
						|
            children: [
 | 
						|
              {
 | 
						|
                key: '1-1-1',
 | 
						|
                name: 'sub-name',
 | 
						|
                type: ParamTypeAlias.String,
 | 
						|
              },
 | 
						|
            ],
 | 
						|
          },
 | 
						|
          {
 | 
						|
            key: '1-2',
 | 
						|
            name: 'type',
 | 
						|
            type: ParamTypeAlias.Integer,
 | 
						|
            description: '类型',
 | 
						|
          },
 | 
						|
          {
 | 
						|
            key: '1-3',
 | 
						|
            name: 'description',
 | 
						|
            type: ParamTypeAlias.String,
 | 
						|
            description: '描述',
 | 
						|
          },
 | 
						|
        ],
 | 
						|
      },
 | 
						|
    ],
 | 
						|
    withDescription: true,
 | 
						|
    readonly: false,
 | 
						|
    errors: [],
 | 
						|
    disabledTypes: [],
 | 
						|
    className: '',
 | 
						|
    allowValueEmpty: false,
 | 
						|
    style: {
 | 
						|
      width: 500,
 | 
						|
    },
 | 
						|
  },
 | 
						|
  tags: ['autodocs'],
 | 
						|
};
 | 
						|
 | 
						|
export default meta;
 | 
						|
 | 
						|
type Story = StoryObj<typeof Parameters>;
 | 
						|
 | 
						|
export const Base: Story = {};
 | 
						|
 | 
						|
export const WithDescription: Story = { args: { withDescription: true } };
 | 
						|
 | 
						|
export const Readonly: Story = { args: { readonly: true } };
 | 
						|
 | 
						|
export const Error: Story = {
 | 
						|
  args: { errors: [{ path: '0.children.0.name', message: '名称最小长度10' }] },
 | 
						|
  parameters: {
 | 
						|
    docs: {
 | 
						|
      description: {
 | 
						|
        story: '目前只支持名称展示错误 失焦时触发',
 | 
						|
      },
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
export const DisableTypes: Story = {
 | 
						|
  args: {
 | 
						|
    disabledTypes: [ParamTypeAlias.ArrayString, ParamTypeAlias.ArrayInteger],
 | 
						|
  },
 | 
						|
  parameters: {
 | 
						|
    docs: {
 | 
						|
      description: {
 | 
						|
        story: '可配置多个禁用类型',
 | 
						|
      },
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 |