1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { Option } from '@polkadot/types/';
- import BaseTransport from './base';
- import { ApiPromise } from '@polkadot/api';
- import MembersTransport from './members';
- import { SingleLinkedMapEntry } from '../index';
- import { Worker, WorkerId } from '@joystream/types/working-group';
- import { apiModuleByGroup } from '../consts/workingGroups';
- import { WorkingGroupKeys } from '@joystream/types/common';
- import { LeadWithProfile } from '../types/workingGroups';
- export default class WorkingGroupsTransport extends BaseTransport {
- private membersT: MembersTransport;
- constructor (api: ApiPromise, membersTransport: MembersTransport) {
- super(api);
- this.membersT = membersTransport;
- }
- protected queryByGroup (group: WorkingGroupKeys) {
- const module = apiModuleByGroup[group];
- return this.api.query[module];
- }
- public async currentLead (group: WorkingGroupKeys): Promise <LeadWithProfile | null> {
- const optLeadId = (await this.queryByGroup(group).currentLead()) as Option<WorkerId>;
- if (!optLeadId.isSome) {
- return null;
- }
- const leadWorkerId = optLeadId.unwrap();
- const leadWorkerLink = new SingleLinkedMapEntry(
- Worker,
- await this.queryByGroup(group).workerById(leadWorkerId)
- );
- const leadWorker = leadWorkerLink.value;
- if (!leadWorker.is_active) {
- return null;
- }
- return {
- worker: leadWorker,
- profile: await this.membersT.expectedMemberProfile(leadWorker.member_id)
- };
- }
- }
|