Browse Source

fix working group landing tab

Paul M Fox 5 years ago
parent
commit
492408502b

+ 1 - 1
packages/apps-routing/src/joy-roles.ts

@@ -14,6 +14,6 @@ export default ([
       defaultValue: 'Working groups'
     },
     icon: 'users',
-    name: 'roles'
+    name: 'working-groups'
   }
 ] as Routes);

+ 2 - 2
packages/joy-roles/src/flows/apply.tsx

@@ -1022,7 +1022,7 @@ export function DoneStage(props: DoneStageProps) {
 	  </p>
       <p>
         You can track the progress of your
-              application in the <Link to="#roles/my-roles">My roles</Link> section. If you have any issues,
+              application in the <Link to="#working-group/my-roles">My roles</Link> section. If you have any issues,
                   you can raise them in in the <Link to="#forum">Forum</Link> or contact the group lead
 directly.
 	  </p>
@@ -1115,7 +1115,7 @@ export const FlowModal = Loadable<FlowModalProps>(
       if (history.length > 1) {
         history.goBack()
       }
-      history.push('/roles/')
+      history.push('/working-groups/')
     }
 
     const scrollToTop = () => window.scrollTo(0, 0)

+ 2 - 2
packages/joy-roles/src/tabs/Admin.controller.tsx

@@ -343,7 +343,7 @@ export const AdminView = View<AdminController, State>(
                   <Card.Content>
                     <Card.Header>
                       <Label attached="top right">Opening</Label>
-                      <Link to={"/roles/opportunities/" + key}>
+                      <Link to={"/working-groups/opportunities/" + key}>
                         {opening.title}
                       </Link>
 
@@ -404,7 +404,7 @@ export const AdminView = View<AdminController, State>(
                         </Grid.Column>
                         <Grid.Column align="right">
                           <Button onClick={() => { controller.applyAsACurator(address, key) }}>Apply as curator</Button>
-                          <Button onClick={() => { controller.acceptCuratorApplications(address, key, [0]) }}>Accept curator applications</Button>
+                          <Button onClick={() => { controller.acceptCuratorApplications(address, key, [1]) }}>Accept curator applications</Button>
                         </Grid.Column>
                       </Grid.Row>
                     </Grid>

+ 2 - 2
packages/joy-roles/src/tabs/Opportunities.tsx

@@ -82,7 +82,7 @@ export function OpeningHeader(props: OpeningStage) {
           </Label.Detail>
         </Label>
         <a>
-          <CopyToClipboard text={window.location.origin + "/#/roles/opportunities/" + props.meta.group + "/" + props.meta.id}>
+          <CopyToClipboard text={window.location.origin + "/#/working-groups/opportunities/" + props.meta.group + "/" + props.meta.id}>
             <Label>
               <Icon name="copy" /> Copy link
                         </Label>
@@ -128,7 +128,7 @@ function OpeningBodyCTAView(props: OpeningBodyCTAProps) {
   }
 
   let applyButton = (
-    <Link to={"/roles/opportunities/" + props.meta.group + "/" + props.meta.id + "/apply"}>
+    <Link to={"/working-groups/opportunities/" + props.meta.group + "/" + props.meta.id + "/apply"}>
       <Button icon fluid positive size="huge">
         APPLY NOW
         <Icon name="angle right" />

+ 1 - 1
packages/joy-roles/src/tabs/WorkingGroup.tsx

@@ -32,7 +32,7 @@ export const ContentCurators = Loadable<WorkingGroupMembership>(
           <p>
             Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
           </p>
-          <Link to="/roles/opportunities">
+          <Link to="/working-groups/opportunities">
             <Button icon labelPosition="right" color="green" positive>
               Find out more
 			  <Icon name={'right arrow' as SemanticICONS} />

+ 22 - 18
packages/joy-roles/src/transport.polkadot.ts

@@ -28,7 +28,7 @@ import {
 import { Application, Opening, OpeningId } from '@joystream/types/hiring';
 import { Stake, StakeId } from '@joystream/types/stake';
 import { Recipient, RewardRelationship, RewardRelationshipId } from '@joystream/types/recurring-rewards';
-import { Profile, MemberId } from '@joystream/types/members';
+import { ActorInRole, Profile, MemberId, Role as MemberRole, RoleKeys } from '@joystream/types/members';
 import { createAccount, generateSeed } from '@polkadot/joy-utils/accounts'
 
 import { WorkingGroupMembership, StorageAndDistributionMembership } from "./tabs/WorkingGroup"
@@ -108,19 +108,17 @@ export class Transport extends TransportBase implements ITransport {
     return recipient.value.total_reward_received
   }
 
-  protected async groupMember(curator: IRoleAccounter, lead: boolean = false): Promise<GroupMember> {
+  protected async groupMember(id: CuratorId, curator: IRoleAccounter, lead: boolean = false): Promise<GroupMember> {
     return new Promise<GroupMember>(async (resolve, reject) => {
       const account = curator.role_account
-
-      const memberIds = await this.api.query.members.memberIdsByRootAccountId(account) as Vec<MemberId>
-      if (memberIds.length == 0) {
-        reject("no member account found")
-      }
-
-      const memberId = memberIds[0]
-      if (!memberId) {
-        reject("no member id")
-      }
+      const memberId = (
+        await this.api.query.members.membershipIdByActorInRole(
+          new ActorInRole({
+            role: new MemberRole(RoleKeys.Curator),
+            actor_id: id,
+          })
+        )
+      ) as MemberId
 
       const profile = await this.api.query.members.memberProfile(memberId) as Option<Profile>
       if (profile.isNone) {
@@ -177,7 +175,10 @@ export class Transport extends TransportBase implements ITransport {
       await this.api.query.contentWorkingGroup.curatorById(),
     )
 
-    const members = values.linked_values.toArray().reverse()
+    const members = values.linked_values.filter(value => value.is_active).reverse()
+    const memberIds = values.linked_keys.filter((v, k) => values.linked_values[k].is_active).reverse()
+
+    let leadExists = false
 
     // If there's a lead ID, then make sure they're promoted to the top
     const leadId = (await this.api.query.contentWorkingGroup.currentLeadId()) as Option<LeadId>
@@ -188,17 +189,20 @@ export class Transport extends TransportBase implements ITransport {
           leadId.unwrap(),
         ),
       )
+
       const id = members.findIndex(
         member => member.role_account.eq(lead.value.role_account)
       )
-      members.unshift(...members.splice(id, 1))
+      if (id >= 0) {
+        leadExists = true
+        members.unshift(...members.splice(id, 1))
+        memberIds.unshift(...memberIds.splice(id, 1))
+      }
     }
 
     return {
       members: await Promise.all(
-        members
-          .filter(value => value.is_active)
-          .map((result, k) => this.groupMember(result, k === 0))
+        members.map((member, k) => this.groupMember(memberIds[k], member, leadExists && k === 0))
       ),
       rolesAvailable: await this.areAnyCuratorRolesOpen(),
     }
@@ -300,7 +304,7 @@ export class Transport extends TransportBase implements ITransport {
       const stakes = classifyOpeningStakes(opening)
 
       resolve({
-        creator: await this.groupMember(lead.value, true),
+        creator: await this.groupMember(currentLeadId.unwrap(), lead.value, true),
         opening: opening,
         meta: {
           id: id.toString(),

+ 11 - 4
packages/joy-types/src/members.ts

@@ -22,13 +22,20 @@ export class EntryMethod extends Enum {
   }
 }
 
+export enum RoleKeys {
+  StorageProvider = 'StorageProvider',
+    ChannelOwner = 'ChannelOwner',
+    CuratorLead = 'CuratorLead',
+    Curator = 'Curator', 
+}
+
 export class Role extends Enum {
   constructor (value?: any, index?: number) {
     super([
-      'StorageProvider',
-      'ChannelOwner',
-      'CuratorLead',
-      'Curator',
+      RoleKeys.StorageProvider,
+      RoleKeys.ChannelOwner,
+      RoleKeys.CuratorLead,
+      RoleKeys.Curator,
     ], value, index);
   }
 }