createOpening.ts 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase';
  2. import { ApiMethodArg, ApiMethodNamedArgs } from '../../Types';
  3. import chalk from 'chalk';
  4. import { flags } from '@oclif/command';
  5. import { apiModuleByGroup } from '../../Api';
  6. import WorkerOpeningOptions from '../../promptOptions/addWorkerOpening';
  7. import { setDefaults } from '../../helpers/promptOptions';
  8. export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase {
  9. static description = 'Create working group opening (requires lead access)';
  10. static flags = {
  11. ...WorkingGroupsCommandBase.flags,
  12. useDraft: flags.boolean({
  13. char: 'd',
  14. description:
  15. "Whether to create the opening from existing draft.\n"+
  16. "If provided without --draftName - the list of choices will be displayed."
  17. }),
  18. draftName: flags.string({
  19. char: 'n',
  20. description:
  21. 'Name of the draft to create the opening from.',
  22. dependsOn: ['useDraft']
  23. }),
  24. createDraftOnly: flags.boolean({
  25. char: 'c',
  26. description:
  27. 'If provided - the extrinsic will not be executed. Use this flag if you only want to create a draft.'
  28. }),
  29. skipPrompts: flags.boolean({
  30. char: 's',
  31. description:
  32. "Whether to skip all prompts when adding from draft (will use all default values)",
  33. dependsOn: ['useDraft'],
  34. exclusive: ['createDraftOnly']
  35. })
  36. };
  37. async run() {
  38. const account = await this.getRequiredSelectedAccount();
  39. // lead-only gate
  40. await this.getRequiredLead();
  41. const { flags } = this.parse(WorkingGroupsCreateOpening);
  42. let promptOptions = new WorkerOpeningOptions(), defaultValues: ApiMethodNamedArgs | undefined;
  43. if (flags.useDraft) {
  44. const draftName = flags.draftName || await this.promptForOpeningDraft();
  45. defaultValues = await this.loadOpeningDraftParams(draftName);
  46. setDefaults(promptOptions, defaultValues);
  47. }
  48. if (!flags.skipPrompts) {
  49. const module = apiModuleByGroup[this.group];
  50. const method = 'addOpening';
  51. let saveDraft = false, params: ApiMethodArg[];
  52. if (flags.createDraftOnly) {
  53. params = await this.promptForExtrinsicParams(module, method, promptOptions);
  54. saveDraft = true;
  55. }
  56. else {
  57. await this.requestAccountDecoding(account); // Prompt for password
  58. params = await this.buildAndSendExtrinsic(account, module, method, promptOptions, true);
  59. saveDraft = await this.simplePrompt({
  60. message: 'Do you wish to save this opening as draft?',
  61. type: 'confirm'
  62. });
  63. }
  64. if (saveDraft) {
  65. const draftName = await this.promptForNewOpeningDraftName();
  66. this.saveOpeningDraft(draftName, params);
  67. this.log(chalk.green(`Opening draft ${ chalk.white(draftName) } succesfully saved!`));
  68. }
  69. }
  70. else {
  71. await this.requestAccountDecoding(account); // Prompt for password
  72. this.log(chalk.white('Sending the extrinsic...'));
  73. await this.sendExtrinsic(account, apiModuleByGroup[this.group], 'addOpening', defaultValues!.map(v => v.value));
  74. this.log(chalk.green('Opening succesfully created!'));
  75. }
  76. }
  77. }