Kaynağa Gözat

Final touch + easier draft creation

Leszek Wiesner 4 yıl önce
ebeveyn
işleme
bd19a7c5c5

+ 14 - 7
cli/src/base/ApiCommandBase.ts

@@ -279,16 +279,17 @@ export default abstract class ApiCommandBase extends StateAwareCommandBase {
                         .filter(({ event: { section } }): boolean => section === 'system')
                         .forEach(({ event: { method } }): void => {
                           if (method === 'ExtrinsicFailed') {
-                            reject(new ExtrinsicFailedError('Extrinsic failed!'));
+                            reject(new ExtrinsicFailedError('Extrinsic execution error!'));
                           } else if (method === 'ExtrinsicSuccess') {
                             resolve();
                           }
                         });
                     } else if (result.isError) {
-                        reject(new ExtrinsicFailedError('Extrinsic failed!'));
+                        reject(new ExtrinsicFailedError('Extrinsic execution error!'));
                     }
                 })
-                .then(unsubFunc => unsubscribe = unsubFunc);
+                .then(unsubFunc => unsubscribe = unsubFunc)
+                .catch(e => reject(new ExtrinsicFailedError(`Cannot send the extrinsic: ${e.message ? e.message : JSON.stringify(e)}`)));
         });
 
     }
@@ -298,7 +299,8 @@ export default abstract class ApiCommandBase extends StateAwareCommandBase {
         module: string,
         method: string,
         jsonArgs?: JSONArgsMapping, // Special JSON arguments (ie. human_readable_text of worker opening)
-        defaultValues?: ApiMethodInputArg[]
+        defaultValues?: ApiMethodInputArg[],
+        warnOnly: boolean = false // If specified - only warning will be displayed (instead of error beeing thrown)
     ): Promise<ApiMethodInputArg[]> {
         const params = await this.promptForExtrinsicParams(module, method, jsonArgs, defaultValues);
         try {
@@ -306,10 +308,15 @@ export default abstract class ApiCommandBase extends StateAwareCommandBase {
             await this.sendExtrinsic(account, module, method, params);
             this.log(chalk.green(`Extrinsic successful!`));
         } catch (e) {
-            if (e instanceof ExtrinsicFailedError) {
-                throw new CLIError(`${ module }.${ method } extrinsic failed!`, { exit: ExitCodes.ApiError });
+            if (e instanceof ExtrinsicFailedError && warnOnly) {
+                this.warn(`${ module }.${ method } extrinsic failed! ${ e.message }`);
+            }
+            else if (e instanceof ExtrinsicFailedError) {
+                throw new CLIError(`${ module }.${ method } extrinsic failed! ${ e.message }`, { exit: ExitCodes.ApiError });
+            }
+            else {
+                throw e;
             }
-            throw e;
         }
 
         return params;

+ 33 - 13
cli/src/commands/working-groups/createOpening.ts

@@ -22,11 +22,17 @@ export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase
                 'Name of the draft to create the opening from.',
             dependsOn: ['useDraft']
         }),
+        createDraftOnly: flags.boolean({
+            char: 'c',
+            description:
+                'If provided - the extrinsic will not be executed. Use this flag if you only want to create a draft.'
+        }),
         skipPrompts: flags.boolean({
             char: 's',
             description:
                 "Whether to skip all prompts when adding from draft (will use all default values)",
-            dependsOn: ['useDraft']
+            dependsOn: ['useDraft'],
+            exclusive: ['createDraftOnly']
         })
     };
 
@@ -43,20 +49,33 @@ export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase
             defaultValues =  await this.loadOpeningDraftParams(draftName);
         }
 
-        await this.requestAccountDecoding(account); // Prompt for password
         if (!flags.skipPrompts) {
-            const params = await this.buildAndSendExtrinsic(
-                account,
-                apiModuleByGroup[this.group],
-                'addWorkerOpening',
-                { 'human_readable_text': { struct: HRTStruct, schemaValidator } },
-                defaultValues
-            );
+            const module = apiModuleByGroup[this.group];
+            const method = 'addWorkerOpening';
+            const jsonArgsMapping = { 'human_readable_text': { struct: HRTStruct, schemaValidator } };
 
-            const saveDraft = await this.simplePrompt({
-                message: 'Do you wish to save this opportunity as draft?',
-                type: 'confirm'
-            });
+            let saveDraft = false, params: ApiMethodInputArg[];
+            if (flags.createDraftOnly) {
+                params = await this.promptForExtrinsicParams(module, method, jsonArgsMapping, defaultValues);
+                saveDraft = true;
+            }
+            else {
+                await this.requestAccountDecoding(account); // Prompt for password
+
+                params = await this.buildAndSendExtrinsic(
+                    account,
+                    module,
+                    method,
+                    jsonArgsMapping,
+                    defaultValues,
+                    true
+                );
+
+                saveDraft = await this.simplePrompt({
+                    message: 'Do you wish to save this opportunity as draft?',
+                    type: 'confirm'
+                });
+            }
 
             if (saveDraft) {
                 const draftName = await this.promptForNewOpeningDraftName();
@@ -66,6 +85,7 @@ export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase
             }
         }
         else {
+            await this.requestAccountDecoding(account); // Prompt for password
             this.log(chalk.white('Sending the extrinsic...'));
             await this.sendExtrinsic(account, apiModuleByGroup[this.group], 'addWorkerOpening', defaultValues!);
             this.log(chalk.green('Opening succesfully created!'));

+ 2 - 6
types/src/hiring/index.ts

@@ -379,18 +379,14 @@ export class Opening extends JoyStruct<IOpening> {
 
     const str = hrt.toString()
 
-    console.log('Parse hrt string:', str);
-
-
     try {
       const obj = JSON.parse(str)
       if (schemaValidator(obj) === true) {
-        console.log('HRT success', obj);
         return obj as unknown as GenericJoyStreamRoleSchema
       }
-      console.log('HRT fail', obj);
+      console.log("parse_human_readable_text JSON schema validation failed:", schemaValidator.errors);
     } catch (e) {
-      console.log("JSON schema validation failed:", e.toString())
+      console.log("parse_human_readable_text JSON schema validation failed:", e.toString())
     }
 
     return str