|
@@ -1,31 +1,14 @@
|
|
|
import BN from 'bn.js'
|
|
|
import { ElectionStage, Seat } from '@joystream/types/council'
|
|
|
-import { Option, Text } from '@polkadot/types'
|
|
|
-import { Constructor, Codec } from '@polkadot/types/types'
|
|
|
-import { Struct, Vec } from '@polkadot/types/codec'
|
|
|
-import { u32 } from '@polkadot/types/primitive'
|
|
|
+import { Option } from '@polkadot/types'
|
|
|
+import { Codec } from '@polkadot/types/types'
|
|
|
import { BlockNumber, Balance, AccountId } from '@polkadot/types/interfaces'
|
|
|
import { DeriveBalancesAll } from '@polkadot/api-derive/types'
|
|
|
import { KeyringPair } from '@polkadot/keyring/types'
|
|
|
import { WorkerId, OpeningType } from '@joystream/types/working-group'
|
|
|
import { Membership, MemberId } from '@joystream/types/members'
|
|
|
-import {
|
|
|
- GenericJoyStreamRoleSchema,
|
|
|
- JobSpecifics,
|
|
|
- ApplicationDetails,
|
|
|
- QuestionSections,
|
|
|
- QuestionSection,
|
|
|
- QuestionsFields,
|
|
|
- QuestionField,
|
|
|
- EntryInMembershipModuke,
|
|
|
- HiringProcess,
|
|
|
- AdditionalRolehiringProcessDetails,
|
|
|
- CreatorDetails,
|
|
|
-} from '@joystream/types/hiring/schemas/role.schema.typings'
|
|
|
-import ajv from 'ajv'
|
|
|
import { Opening, StakingPolicy, ApplicationStageKeys } from '@joystream/types/hiring'
|
|
|
import { Validator } from 'inquirer'
|
|
|
-import { JoyStructCustom } from '@joystream/types/common'
|
|
|
|
|
|
// KeyringPair type extended with mandatory "meta.name"
|
|
|
// It's used for accounts/keys management within CLI.
|
|
@@ -187,183 +170,6 @@ export type GroupOpening = {
|
|
|
unstakingPeriods: UnstakingPeriods
|
|
|
}
|
|
|
|
|
|
-// Some helper structs for generating human_readable_text in working group opening extrinsic
|
|
|
-// Note those types are not part of the runtime etc., we just use them to simplify prompting for values
|
|
|
-// (since there exists functionality that handles that for substrate types like: Struct, Vec etc.)
|
|
|
-interface WithJSONable<T> {
|
|
|
- toJSONObj: () => T
|
|
|
-}
|
|
|
-export class HRTJobSpecificsStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- title: Text,
|
|
|
- description: Text,
|
|
|
- })
|
|
|
- implements WithJSONable<JobSpecifics> {
|
|
|
- get title(): string {
|
|
|
- return this.getField('title').toString()
|
|
|
- }
|
|
|
-
|
|
|
- get description(): string {
|
|
|
- return this.getField('description').toString()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): JobSpecifics {
|
|
|
- const { title, description } = this
|
|
|
- return { title, description }
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTEntryInMembershipModukeStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- handle: Text,
|
|
|
- })
|
|
|
- implements WithJSONable<EntryInMembershipModuke> {
|
|
|
- get handle(): string {
|
|
|
- return this.getField('handle').toString()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): EntryInMembershipModuke {
|
|
|
- const { handle } = this
|
|
|
- return { handle }
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTCreatorDetailsStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- membership: HRTEntryInMembershipModukeStruct,
|
|
|
- })
|
|
|
- implements WithJSONable<CreatorDetails> {
|
|
|
- get membership(): EntryInMembershipModuke {
|
|
|
- return this.getField('membership').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): CreatorDetails {
|
|
|
- const { membership } = this
|
|
|
- return { membership }
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTHiringProcessStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- details: Vec.with(Text),
|
|
|
- })
|
|
|
- implements WithJSONable<HiringProcess> {
|
|
|
- get details(): AdditionalRolehiringProcessDetails {
|
|
|
- return this.getField('details')
|
|
|
- .toArray()
|
|
|
- .map((v) => v.toString())
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): HiringProcess {
|
|
|
- const { details } = this
|
|
|
- return { details }
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTQuestionFieldStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- title: Text,
|
|
|
- type: Text,
|
|
|
- })
|
|
|
- implements WithJSONable<QuestionField> {
|
|
|
- get title(): string {
|
|
|
- return this.getField('title').toString()
|
|
|
- }
|
|
|
-
|
|
|
- get type(): string {
|
|
|
- return this.getField('type').toString()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): QuestionField {
|
|
|
- const { title, type } = this
|
|
|
- return { title, type }
|
|
|
- }
|
|
|
-}
|
|
|
-class HRTQuestionsFieldsVec extends Vec.with(HRTQuestionFieldStruct) implements WithJSONable<QuestionsFields> {
|
|
|
- toJSONObj(): QuestionsFields {
|
|
|
- return this.toArray().map((v) => v.toJSONObj())
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTQuestionSectionStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- title: Text,
|
|
|
- questions: HRTQuestionsFieldsVec,
|
|
|
- })
|
|
|
- implements WithJSONable<QuestionSection> {
|
|
|
- get title(): string {
|
|
|
- return this.getField('title').toString()
|
|
|
- }
|
|
|
-
|
|
|
- get questions(): QuestionsFields {
|
|
|
- return this.getField('questions').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): QuestionSection {
|
|
|
- const { title, questions } = this
|
|
|
- return { title, questions }
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTQuestionSectionsVec extends Vec.with(HRTQuestionSectionStruct)
|
|
|
- implements WithJSONable<QuestionSections> {
|
|
|
- toJSONObj(): QuestionSections {
|
|
|
- return this.toArray().map((v) => v.toJSONObj())
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTApplicationDetailsStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- sections: HRTQuestionSectionsVec,
|
|
|
- })
|
|
|
- implements WithJSONable<ApplicationDetails> {
|
|
|
- get sections(): QuestionSections {
|
|
|
- return this.getField('sections').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): ApplicationDetails {
|
|
|
- const { sections } = this
|
|
|
- return { sections }
|
|
|
- }
|
|
|
-}
|
|
|
-export class HRTStruct
|
|
|
- extends JoyStructCustom({
|
|
|
- version: u32,
|
|
|
- headline: Text,
|
|
|
- job: HRTJobSpecificsStruct,
|
|
|
- application: HRTApplicationDetailsStruct,
|
|
|
- reward: Text,
|
|
|
- creator: HRTCreatorDetailsStruct,
|
|
|
- process: HRTHiringProcessStruct,
|
|
|
- })
|
|
|
- implements WithJSONable<GenericJoyStreamRoleSchema> {
|
|
|
- get version(): number {
|
|
|
- return this.getField('version').toNumber()
|
|
|
- }
|
|
|
-
|
|
|
- get headline(): string {
|
|
|
- return this.getField('headline').toString()
|
|
|
- }
|
|
|
-
|
|
|
- get job(): JobSpecifics {
|
|
|
- return this.getField('job').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- get application(): ApplicationDetails {
|
|
|
- return this.getField('application').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- get reward(): string {
|
|
|
- return this.getField('reward').toString()
|
|
|
- }
|
|
|
-
|
|
|
- get creator(): CreatorDetails {
|
|
|
- return this.getField('creator').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- get process(): HiringProcess {
|
|
|
- return this.getField('process').toJSONObj()
|
|
|
- }
|
|
|
-
|
|
|
- toJSONObj(): GenericJoyStreamRoleSchema {
|
|
|
- const { version, headline, job, application, reward, creator, process } = this
|
|
|
- return { version, headline, job, application, reward, creator, process }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
// Api-related
|
|
|
|
|
|
// Additional options that can be passed to ApiCommandBase.promptForParam in order to override
|
|
@@ -374,10 +180,6 @@ export type ApiParamOptions<ParamType = Codec> = {
|
|
|
default: ParamType
|
|
|
locked?: boolean
|
|
|
}
|
|
|
- jsonSchema?: {
|
|
|
- struct: Constructor<Struct>
|
|
|
- schemaValidator: ajv.ValidateFunction
|
|
|
- }
|
|
|
validator?: Validator
|
|
|
nestedOptions?: ApiParamsOptions // For more complex params, like structs
|
|
|
}
|