Browse Source

Merge pull request #30 from nameczz/feature/create-collection

Feature/create collection
ryjiang 4 years ago
parent
commit
84ff9d24f2

+ 4 - 0
client/src/http/Collection.ts

@@ -24,6 +24,10 @@ export class CollectionHttp extends BaseModel implements CollectionView {
     return super.findAll({ path: this.COLLECTIONS_URL, params: {} });
   }
 
+  static createCollection(data: any) {
+    return super.create({ path: this.COLLECTIONS_URL, data });
+  }
+
   static getCollectionsIndexState(): Promise<CollectionHttp[]> {
     return super.findAll({
       path: this.COLLECTIONS_INDEX_STATUS_URL,

+ 12 - 2
client/src/pages/collections/Collections.tsx

@@ -55,10 +55,12 @@ const Collections = () => {
     CollectionView[]
   >([]);
 
-  const { setDialog, handleCloseDialog } = useContext(rootContext);
+  const { setDialog, handleCloseDialog, openSnackBar } =
+    useContext(rootContext);
   const { t } = useTranslation('collection');
   const { t: btnTrans } = useTranslation('btn');
   const { t: dialogTrans } = useTranslation('dialog');
+  const { t: successTrans } = useTranslation('success');
 
   const classes = useStyles();
 
@@ -101,8 +103,16 @@ const Collections = () => {
     fetchData();
   }, [fetchData]);
 
-  const handleCreateCollection = (param: CollectionCreateParam) => {
+  const handleCreateCollection = async (param: CollectionCreateParam) => {
+    const data: CollectionCreateParam = JSON.parse(JSON.stringify(param));
+    data.fields = data.fields.map(v => ({
+      ...v,
+      type_params: [{ key: 'dim', value: v.dimension }],
+    }));
+    await CollectionHttp.createCollection(data);
     handleCloseDialog();
+    openSnackBar(successTrans('create', { name: t('collection') }));
+    fetchData();
   };
 
   const handleRelease = async (data: CollectionView) => {};

+ 14 - 14
client/src/pages/collections/Create.tsx

@@ -48,25 +48,25 @@ const CreateCollection: FC<CollectionCreateProps> = ({ handleCreate }) => {
   const { t: warningTrans } = useTranslation('warning');
 
   const [form, setForm] = useState({
-    name: '',
-    desc: '',
+    collection_name: '',
+    description: '',
     autoID: true,
   });
   const [fields, setFields] = useState<Field[]>([
     {
-      type: DataTypeEnum.Int64,
-      isPrimaryKey: true,
+      data_type: DataTypeEnum.Int64,
+      is_primary_key: true,
       name: '',
-      desc: '',
+      description: '',
       isDefault: true,
       id: generateId(),
     },
     {
-      type: DataTypeEnum.FloatVector,
-      isPrimaryKey: false,
+      data_type: DataTypeEnum.FloatVector,
+      is_primary_key: false,
       name: '',
       dimension: '',
-      desc: '',
+      description: '',
       isDefault: true,
       id: generateId(),
     },
@@ -74,8 +74,8 @@ const CreateCollection: FC<CollectionCreateProps> = ({ handleCreate }) => {
   const [fieldsAllValid, setFieldsAllValid] = useState<boolean>(true);
 
   const checkedForm = useMemo(() => {
-    const { name } = form;
-    return formatForm({ name });
+    const { collection_name } = form;
+    return formatForm({ collection_name });
   }, [form]);
   const { validation, checkIsValid, disabled } = useFormValidation(checkedForm);
 
@@ -94,8 +94,8 @@ const CreateCollection: FC<CollectionCreateProps> = ({ handleCreate }) => {
     {
       label: t('name'),
       key: 'name',
-      value: form.name,
-      onChange: (value: string) => handleInputChange('name', value),
+      value: form.collection_name,
+      onChange: (value: string) => handleInputChange('collection_name', value),
       variant: 'filled',
       validations: [
         {
@@ -108,8 +108,8 @@ const CreateCollection: FC<CollectionCreateProps> = ({ handleCreate }) => {
     {
       label: t('description'),
       key: 'description',
-      value: form.desc,
-      onChange: (value: string) => handleInputChange('desc', value),
+      value: form.description,
+      onChange: (value: string) => handleInputChange('description', value),
       variant: 'filled',
       validations: [],
       className: classes.input,

+ 22 - 16
client/src/pages/collections/CreateFields.tsx

@@ -138,9 +138,9 @@ const CreateFields: FC<CreateFieldsProps> = ({
   const handleAddNewField = () => {
     const newDefaultItem: Field = {
       name: '',
-      type: DataTypeEnum.Int16,
-      isPrimaryKey: false,
-      desc: '',
+      data_type: DataTypeEnum.Int16,
+      is_primary_key: false,
+      description: '',
       isDefault: false,
       id: generateId(),
     };
@@ -185,8 +185,8 @@ const CreateFields: FC<CreateFieldsProps> = ({
 
         {getInput(
           t('description'),
-          field.desc,
-          (value: string) => changeFields(field.id, 'desc', value),
+          field.description,
+          (value: string) => changeFields(field.id, 'description', value),
           classes.descInput
         )}
       </div>
@@ -200,8 +200,8 @@ const CreateFields: FC<CreateFieldsProps> = ({
           {getSelector(
             'vector',
             t('fieldType'),
-            field.type,
-            (value: DataTypeEnum) => changeFields(field.id, 'type', value)
+            field.data_type,
+            (value: DataTypeEnum) => changeFields(field.id, 'data_type', value)
           )}
 
           {getInput(t('fieldName'), field.name, (value: string) =>
@@ -217,8 +217,8 @@ const CreateFields: FC<CreateFieldsProps> = ({
 
           {getInput(
             t('description'),
-            field.desc,
-            (value: string) => changeFields(field.id, 'desc', value),
+            field.description,
+            (value: string) => changeFields(field.id, 'description', value),
             classes.descInput
           )}
         </div>
@@ -244,13 +244,16 @@ const CreateFields: FC<CreateFieldsProps> = ({
         {getInput(t('fieldName'), field.name, (value: string) =>
           changeFields(field.id, 'name', value)
         )}
-        {getSelector('all', t('fieldType'), field.type, (value: DataTypeEnum) =>
-          changeFields(field.id, 'type', value)
+        {getSelector(
+          'all',
+          t('fieldType'),
+          field.data_type,
+          (value: DataTypeEnum) => changeFields(field.id, 'type', value)
         )}
 
         {getInput(
           t('description'),
-          field.desc,
+          field.description,
           (value: string) => changeFields(field.id, 'desc', value),
           classes.descInput
         )}
@@ -267,8 +270,11 @@ const CreateFields: FC<CreateFieldsProps> = ({
         {getInput(t('fieldName'), field.name, (value: string) =>
           changeFields(field.id, 'name', value)
         )}
-        {getSelector('all', t('fieldType'), field.type, (value: DataTypeEnum) =>
-          changeFields(field.id, 'type', value)
+        {getSelector(
+          'all',
+          t('fieldType'),
+          field.data_type,
+          (value: DataTypeEnum) => changeFields(field.id, 'data_type', value)
         )}
         {getInput(
           t('dimension'),
@@ -279,8 +285,8 @@ const CreateFields: FC<CreateFieldsProps> = ({
 
         {getInput(
           t('description'),
-          field.desc,
-          (value: string) => changeFields(field.id, 'desc', value),
+          field.description,
+          (value: string) => changeFields(field.id, 'description', value),
           classes.descInput
         )}
       </div>

+ 6 - 5
client/src/pages/collections/Types.ts

@@ -21,8 +21,8 @@ export interface CollectionCreateProps {
 }
 
 export interface CollectionCreateParam {
-  name: string;
-  desc: string;
+  collection_name: string;
+  description: string;
   autoID: boolean;
   fields: Field[];
 }
@@ -40,12 +40,13 @@ export enum DataTypeEnum {
 
 export interface Field {
   name: string;
-  type: DataTypeEnum;
-  isPrimaryKey: boolean;
-  desc: string;
+  data_type: DataTypeEnum;
+  is_primary_key: boolean;
+  description: string;
   dimension?: number | string;
   isDefault?: boolean;
   id: string;
+  type_params?: { key: string; value: any }[];
 }
 
 export type CreateFieldType =

+ 2 - 2
client/src/utils/Format.ts

@@ -99,7 +99,7 @@ export const checkIsBinarySubstructure = (metricLabel: string): boolean => {
 };
 
 export const getCreateFieldType = (config: Field): CreateFieldType => {
-  if (config.isPrimaryKey) {
+  if (config.is_primary_key) {
     return 'primaryKey';
   }
 
@@ -108,7 +108,7 @@ export const getCreateFieldType = (config: Field): CreateFieldType => {
   }
 
   const vectorTypes = [DataTypeEnum.BinaryVector, DataTypeEnum.FloatVector];
-  if (vectorTypes.includes(config.type)) {
+  if (vectorTypes.includes(config.data_type)) {
     return 'vector';
   }