Эх сурвалжийг харах

Merge pull request #1548 from Lezek123/cli-working-groups-improvements

CLI: Working-groups UX improvements
Mokhtar Naamani 4 жил өмнө
parent
commit
6a9e85fd78

+ 3 - 0
cli/src/base/StateAwareCommandBase.ts

@@ -6,11 +6,13 @@ import lockFile from 'proper-lockfile'
 import DefaultCommandBase from './DefaultCommandBase'
 import os from 'os'
 import _ from 'lodash'
+import { WorkingGroups } from '../Types'
 
 // Type for the state object (which is preserved as json in the state file)
 type StateObject = {
   selectedAccountFilename: string
   apiUri: string
+  defaultWorkingGroup: WorkingGroups
   metadataCache: Record<string, any>
 }
 
@@ -18,6 +20,7 @@ type StateObject = {
 const DEFAULT_STATE: StateObject = {
   selectedAccountFilename: '',
   apiUri: '',
+  defaultWorkingGroup: WorkingGroups.StorageProviders,
   metadataCache: {},
 }
 

+ 20 - 13
cli/src/base/WorkingGroupsCommandBase.ts

@@ -19,15 +19,21 @@ import path from 'path'
 import _ from 'lodash'
 import { ApplicationStageKeys } from '@joystream/types/hiring'
 import chalk from 'chalk'
+import { IConfig } from '@oclif/config'
 
-const DEFAULT_GROUP = WorkingGroups.StorageProviders
 const DRAFTS_FOLDER = 'opening-drafts'
 
 /**
  * Abstract base class for commands that need to use gates based on user's roles
  */
 export abstract class RolesCommandBase extends AccountsCommandBase {
-  group: WorkingGroups = DEFAULT_GROUP
+  group: WorkingGroups
+
+  constructor(argv: string[], config: IConfig) {
+    super(argv, config)
+    // Can be modified by child class constructor
+    this.group = this.getPreservedState().defaultWorkingGroup
+  }
 
   // Use when lead access is required in given command
   async getRequiredLead(): Promise<GroupMember> {
@@ -97,16 +103,21 @@ export abstract class RolesCommandBase extends AccountsCommandBase {
  * Abstract base class for commands directly related to working groups
  */
 export default abstract class WorkingGroupsCommandBase extends RolesCommandBase {
-  group: WorkingGroups = DEFAULT_GROUP
+  group: WorkingGroups
+
+  constructor(argv: string[], config: IConfig) {
+    super(argv, config)
+    this.group = this.getPreservedState().defaultWorkingGroup
+  }
 
   static flags = {
-    group: flags.string({
+    group: flags.enum({
       char: 'g',
       description:
         'The working group context in which the command should be executed\n' +
         `Available values are: ${AvailableGroups.join(', ')}.`,
-      required: true,
-      default: DEFAULT_GROUP,
+      required: false,
+      options: [...AvailableGroups],
     }),
   }
 
@@ -273,13 +284,9 @@ export default abstract class WorkingGroupsCommandBase extends RolesCommandBase
       throw this.createDataDirInitError()
     }
     const { flags } = this.parse(this.constructor as typeof WorkingGroupsCommandBase)
-    if (!AvailableGroups.includes(flags.group as any)) {
-      throw new CLIError(`Invalid group! Available values are: ${AvailableGroups.join(', ')}`, {
-        exit: ExitCodes.InvalidInput,
-      })
+    if (flags.group) {
+      this.group = flags.group
     }
-    this.group = flags.group as WorkingGroups
-
-    this.log(chalk.white('Group: ' + flags.group))
+    this.log(chalk.white('Current Group: ' + this.group))
   }
 }

+ 22 - 0
cli/src/commands/working-groups/setDefaultGroup.ts

@@ -0,0 +1,22 @@
+import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase'
+import chalk from 'chalk'
+import ExitCodes from '../../ExitCodes'
+
+export default class SetDefaultGroupCommand extends WorkingGroupsCommandBase {
+  static description = 'Change the default group context for working-groups commands.'
+  static flags = { ...WorkingGroupsCommandBase.flags }
+
+  async run() {
+    const {
+      flags: { group },
+    } = this.parse(SetDefaultGroupCommand)
+
+    if (!group) {
+      this.error('--group flag is required', { exit: ExitCodes.InvalidInput })
+    }
+
+    await this.setPreservedState({ defaultWorkingGroup: group })
+
+    this.log(chalk.green(`${chalk.white(group)} succesfully set as default working group context`))
+  }
+}

+ 2 - 2
cli/src/commands/working-groups/updateWorkerReward.ts

@@ -24,8 +24,8 @@ export default class WorkingGroupsUpdateWorkerReward extends WorkingGroupsComman
   formatReward(reward?: Reward) {
     return reward
       ? formatBalance(reward.value) +
-          (reward.interval && ` / ${reward.interval} block(s)`) +
-          (reward.nextPaymentBlock && ` (next payment: #${reward.nextPaymentBlock})`)
+          (reward.interval ? ` / ${reward.interval} block(s)` : '') +
+          (reward.nextPaymentBlock ? ` (next payment: #${reward.nextPaymentBlock})` : '')
       : 'NONE'
   }