workingGroups.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { Option } from '@polkadot/types/';
  2. import BaseTransport from './base';
  3. import { ApiPromise } from '@polkadot/api';
  4. import MembersTransport from './members';
  5. import { SingleLinkedMapEntry } from '../index';
  6. import { Worker, WorkerId } from '@joystream/types/working-group';
  7. import { apiModuleByGroup } from '../consts/workingGroups';
  8. import { WorkingGroupKeys } from '@joystream/types/common';
  9. import { LeadWithProfile } from '../types/workingGroups';
  10. export default class WorkingGroupsTransport extends BaseTransport {
  11. private membersT: MembersTransport;
  12. constructor (api: ApiPromise, membersTransport: MembersTransport) {
  13. super(api);
  14. this.membersT = membersTransport;
  15. }
  16. protected queryByGroup (group: WorkingGroupKeys) {
  17. const module = apiModuleByGroup[group];
  18. return this.api.query[module];
  19. }
  20. public async currentLead (group: WorkingGroupKeys): Promise <LeadWithProfile | null> {
  21. const optLeadId = (await this.queryByGroup(group).currentLead()) as Option<WorkerId>;
  22. if (!optLeadId.isSome) {
  23. return null;
  24. }
  25. const leadWorkerId = optLeadId.unwrap();
  26. const leadWorkerLink = new SingleLinkedMapEntry(
  27. Worker,
  28. await this.queryByGroup(group).workerById(leadWorkerId)
  29. );
  30. const leadWorker = leadWorkerLink.value;
  31. if (!leadWorker.is_active) {
  32. return null;
  33. }
  34. return {
  35. worker: leadWorker,
  36. profile: await this.membersT.expectedMemberProfile(leadWorker.member_id)
  37. };
  38. }
  39. }