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

ResourceSelect.stories.tsx 5.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import ResourceSelect, {
  2. ParameterInputValue,
  3. requiredValidator,
  4. ResourceSelectorType,
  5. } from '@/components/ResourceSelect';
  6. import { action } from '@storybook/addon-actions';
  7. import { useArgs } from '@storybook/preview-api';
  8. import type { Meta, StoryObj } from '@storybook/react';
  9. import { fn } from '@storybook/test';
  10. import { Button, Col, Form, Row } from 'antd';
  11. import { http, HttpResponse } from 'msw';
  12. import {
  13. datasetDetailData,
  14. datasetListData,
  15. datasetVersionData,
  16. mirrorListData,
  17. mirrorVerionData,
  18. modelDetailData,
  19. modelListData,
  20. modelVersionData,
  21. } from './mockData';
  22. // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
  23. const meta = {
  24. title: 'Components/ResourceSelect 资源选择器',
  25. component: ResourceSelect,
  26. parameters: {
  27. // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
  28. // layout: 'centered',
  29. msw: {
  30. handlers: [
  31. http.get('/api/mmp/newdataset/queryDatasets', () => {
  32. return HttpResponse.json(datasetListData);
  33. }),
  34. http.get('/api/mmp/newdataset/getVersionList', () => {
  35. return HttpResponse.json(datasetVersionData);
  36. }),
  37. http.get('/api/mmp/newdataset/getDatasetDetail', () => {
  38. return HttpResponse.json(datasetDetailData);
  39. }),
  40. http.get('/api/mmp/newmodel/queryModels', () => {
  41. return HttpResponse.json(modelListData);
  42. }),
  43. http.get('/api/mmp/newmodel/getVersionList', () => {
  44. return HttpResponse.json(modelVersionData);
  45. }),
  46. http.get('/api/mmp/newmodel/getModelDetail', () => {
  47. return HttpResponse.json(modelDetailData);
  48. }),
  49. http.get('/api/mmp/image', () => {
  50. return HttpResponse.json(mirrorListData);
  51. }),
  52. http.get('/api/mmp/imageVersion', () => {
  53. return HttpResponse.json(mirrorVerionData);
  54. }),
  55. ],
  56. },
  57. },
  58. // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
  59. tags: ['autodocs'],
  60. // More on argTypes: https://storybook.js.org/docs/api/argtypes
  61. argTypes: {
  62. type: { control: 'radio', options: Object.values(ResourceSelectorType) },
  63. },
  64. // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args
  65. args: { onChange: fn() },
  66. } satisfies Meta<typeof ResourceSelect>;
  67. export default meta;
  68. type Story = StoryObj<typeof meta>;
  69. // More on writing stories with args: https://storybook.js.org/docs/writing-stories/args
  70. export const Primary: Story = {
  71. args: {
  72. type: ResourceSelectorType.Dataset,
  73. canInput: false,
  74. textArea: false,
  75. size: 'large',
  76. placeholder: '请选择数据集',
  77. style: { width: 400 },
  78. },
  79. render: function Render(args) {
  80. const [{ value }, updateArgs] = useArgs();
  81. function handleChange(value?: ParameterInputValue) {
  82. updateArgs({ value: value });
  83. args.onChange?.(value);
  84. }
  85. return <ResourceSelect {...args} value={value} onChange={handleChange}></ResourceSelect>;
  86. },
  87. };
  88. export const InForm: Story = {
  89. args: {
  90. type: ResourceSelectorType.Dataset,
  91. },
  92. render: ({ onChange }) => {
  93. return (
  94. <Form
  95. name="resource-select-form"
  96. labelCol={{ flex: '80px' }}
  97. labelAlign="left"
  98. size="large"
  99. autoComplete="off"
  100. onFinish={action('onFinish')}
  101. >
  102. <Row gutter={8}>
  103. <Col span={10}>
  104. <Form.Item
  105. label="数据集"
  106. name="dataset"
  107. rules={[
  108. {
  109. validator: requiredValidator,
  110. message: '请选择数据集',
  111. },
  112. ]}
  113. required
  114. >
  115. <ResourceSelect
  116. type={ResourceSelectorType.Dataset}
  117. placeholder="请选择"
  118. canInput={false}
  119. onChange={onChange}
  120. />
  121. </Form.Item>
  122. </Col>
  123. </Row>
  124. <Row gutter={8}>
  125. <Col span={10}>
  126. <Form.Item label="模型" name="model">
  127. <ResourceSelect
  128. type={ResourceSelectorType.Model}
  129. placeholder="请选择"
  130. canInput={false}
  131. onChange={onChange}
  132. />
  133. </Form.Item>
  134. </Col>
  135. </Row>
  136. <Row gutter={8}>
  137. <Col span={10}>
  138. <Form.Item label="镜像" name="image">
  139. <ResourceSelect
  140. type={ResourceSelectorType.Mirror}
  141. placeholder="请选择"
  142. canInput={false}
  143. onChange={onChange}
  144. />
  145. </Form.Item>
  146. </Col>
  147. </Row>
  148. <Row gutter={8}>
  149. <Button htmlType="submit" type="primary">
  150. 提交
  151. </Button>
  152. </Row>
  153. </Form>
  154. );
  155. },
  156. };