mirror of https://github.com/msgbyte/tailchat
				
				
				
			feat: 增加修改面板属性的功能
							parent
							
								
									b243f64227
								
							
						
					
					
						commit
						4c9f5ec5f2
					
				@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					import { LoadingSpinner } from '@/components/LoadingSpinner';
 | 
				
			||||||
 | 
					import React, { useEffect, useLayoutEffect, useState } from 'react';
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  t,
 | 
				
			||||||
 | 
					  useAsyncRequest,
 | 
				
			||||||
 | 
					  modifyGroupPanel,
 | 
				
			||||||
 | 
					  createFastFormSchema,
 | 
				
			||||||
 | 
					  fieldSchema,
 | 
				
			||||||
 | 
					  showToasts,
 | 
				
			||||||
 | 
					  useGroupPanel,
 | 
				
			||||||
 | 
					} from 'tailchat-shared';
 | 
				
			||||||
 | 
					import { ModalWrapper } from '../../Modal';
 | 
				
			||||||
 | 
					import { WebFastForm } from '../../WebFastForm';
 | 
				
			||||||
 | 
					import { buildDataFromValues, pickValuesFromGroupPanelInfo } from './helper';
 | 
				
			||||||
 | 
					import type { GroupPanelValues } from './types';
 | 
				
			||||||
 | 
					import { useGroupPanelFields } from './useGroupPanelFields';
 | 
				
			||||||
 | 
					import _omit from 'lodash/omit';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const schema = createFastFormSchema({
 | 
				
			||||||
 | 
					  name: fieldSchema
 | 
				
			||||||
 | 
					    .string()
 | 
				
			||||||
 | 
					    .required(t('面板名不能为空'))
 | 
				
			||||||
 | 
					    .max(20, t('面板名过长')),
 | 
				
			||||||
 | 
					  type: fieldSchema.string().required(t('面板类型不能为空')),
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 修改群组面板
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export const ModalModifyGroupPanel: React.FC<{
 | 
				
			||||||
 | 
					  groupId: string;
 | 
				
			||||||
 | 
					  groupPanelId: string;
 | 
				
			||||||
 | 
					  onSuccess?: () => void;
 | 
				
			||||||
 | 
					}> = React.memo((props) => {
 | 
				
			||||||
 | 
					  const groupPanelInfo = useGroupPanel(props.groupId, props.groupPanelId);
 | 
				
			||||||
 | 
					  const [currentValues, setValues] = useState<Partial<GroupPanelValues>>({});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const [, handleSubmit] = useAsyncRequest(
 | 
				
			||||||
 | 
					    async (values: GroupPanelValues) => {
 | 
				
			||||||
 | 
					      await modifyGroupPanel(
 | 
				
			||||||
 | 
					        props.groupId,
 | 
				
			||||||
 | 
					        props.groupPanelId,
 | 
				
			||||||
 | 
					        _omit(buildDataFromValues(values), 'type') // 发送时不传type
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      showToasts(t('修改成功'), 'success');
 | 
				
			||||||
 | 
					      typeof props.onSuccess === 'function' && props.onSuccess();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    [props.groupId, props.groupPanelId, props.onSuccess]
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const fields = useGroupPanelFields(props.groupId, currentValues);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!groupPanelInfo) {
 | 
				
			||||||
 | 
					    return <LoadingSpinner />;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <ModalWrapper title={t('创建群组面板')} style={{ maxWidth: 440 }}>
 | 
				
			||||||
 | 
					      <WebFastForm
 | 
				
			||||||
 | 
					        schema={schema}
 | 
				
			||||||
 | 
					        fields={fields.filter((f) => f.type !== 'type')} // 变更时不显示类型
 | 
				
			||||||
 | 
					        initialValues={pickValuesFromGroupPanelInfo(groupPanelInfo)}
 | 
				
			||||||
 | 
					        onChange={setValues}
 | 
				
			||||||
 | 
					        onSubmit={handleSubmit}
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </ModalWrapper>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					ModalModifyGroupPanel.displayName = 'ModalModifyGroupPanel';
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue