Browse Source

Lead openings proposals - filter out non-lead openings

Leszek Wiesner 4 years ago
parent
commit
8eb6934e36

+ 3 - 3
pioneer/packages/joy-proposals/src/forms/BeginReviewLeaderApplicationsForm.tsx

@@ -41,12 +41,12 @@ const BeginReviewLeadeApplicationsForm: React.FunctionComponent<FormInnerProps>
   const { handleChange, values, myMemberId, errors, touched } = props;
   const errorLabelsProps = getFormErrorLabelsProps<FormValues>(errors, touched);
   const transport = useTransport();
-  const [allOpenings, openingsError, openingsLoading] = usePromise(
-    () => transport.workingGroups.activeOpenings(values.workingGroup, 'AcceptingApplications'),
+  const [openings, openingsError, openingsLoading] = usePromise(
+    () => transport.workingGroups.activeOpenings(values.workingGroup, 'AcceptingApplications', 'Leader'),
     [] as OpeningData[],
     [values.workingGroup]
   );
-  const openingsOptions = allOpenings
+  const openingsOptions = openings
     // Map to options
     .map(od => {
       const hrt = od.hiringOpening.parse_human_readable_text_with_fallback();

+ 3 - 3
pioneer/packages/joy-proposals/src/forms/FillWorkingGroupLeaderOpeningForm.tsx

@@ -84,12 +84,12 @@ const FillWorkingGroupLeaderOpeningForm: React.FunctionComponent<FormInnerProps>
   const { handleChange, setFieldValue, values, myMemberId, errors, touched } = props;
   const errorLabelsProps = getFormErrorLabelsProps<FormValues>(errors, touched);
   const transport = useTransport();
-  const [allOpenings, openingsError, openingsLoading] = usePromise<OpeningData[]>(
-    () => transport.workingGroups.activeOpenings(values.workingGroup, 'ReviewPeriod'),
+  const [openings, openingsError, openingsLoading] = usePromise<OpeningData[]>(
+    () => transport.workingGroups.activeOpenings(values.workingGroup, 'ReviewPeriod', 'Leader'),
     [],
     [values.workingGroup]
   );
-  const openingsOptions: DropdownItemProps[] = allOpenings
+  const openingsOptions: DropdownItemProps[] = openings
     // Map to options
     .map(od => {
       const hrt = od.hiringOpening.parse_human_readable_text_with_fallback();

+ 6 - 5
pioneer/packages/joy-utils/src/transport/workingGroups.ts

@@ -4,7 +4,7 @@ import BaseTransport from './base';
 import { ApiPromise } from '@polkadot/api';
 import MembersTransport from './members';
 import { SingleLinkedMapEntry } from '../index';
-import { Worker, WorkerId, Opening as WGOpening, Application as WGApplication } from '@joystream/types/working-group';
+import { Worker, WorkerId, Opening as WGOpening, Application as WGApplication, OpeningTypeKey } from '@joystream/types/working-group';
 import { apiModuleByGroup } from '../consts/workingGroups';
 import { WorkingGroupKey } from '@joystream/types/common';
 import { WorkerData, OpeningData, ParsedApplication } from '../types/workingGroups';
@@ -62,7 +62,7 @@ export default class WorkingGroupsTransport extends BaseTransport {
     return this.groupMemberById(group, leadWorkerId);
   }
 
-  public async allOpenings (group: WorkingGroupKey): Promise<OpeningData[]> {
+  public async allOpenings (group: WorkingGroupKey, type?: OpeningTypeKey): Promise<OpeningData[]> {
     const nextId = (await this.queryByGroup(group).nextOpeningId()) as OpeningId;
 
     if (nextId.eq(0)) {
@@ -79,11 +79,12 @@ export default class WorkingGroupsTransport extends BaseTransport {
         const opening = openings[index];
         const hiringOpening = (new SingleLinkedMapEntry(Opening, hiringOpeningRes)).value;
         return { id, opening, hiringOpening };
-      });
+      })
+      .filter(openingData => !type || openingData.opening.opening_type.isOfType(type));
   }
 
-  public async activeOpenings (group: WorkingGroupKey, substage?: ActiveOpeningStageKey) {
-    return (await this.allOpenings(group))
+  public async activeOpenings (group: WorkingGroupKey, substage?: ActiveOpeningStageKey, type?: OpeningTypeKey) {
+    return (await this.allOpenings(group, type))
       .filter(od =>
         od.hiringOpening.stage.isOfType('Active') &&
         (!substage || od.hiringOpening.stage.asType('Active').stage.isOfType(substage))

+ 4 - 2
types/src/working-group/index.ts

@@ -243,10 +243,12 @@ export class WorkingGroupOpeningPolicyCommitment extends JoyStruct<IWorkingGroup
 
 export class OpeningType_Leader extends Null { };
 export class OpeningType_Worker extends Null { };
-export class OpeningType extends JoyEnum({
+export const OpeningTypeDef = {
   Leader: OpeningType_Leader,
   Worker: OpeningType_Worker
-} as const) { };
+} as const;
+export type OpeningTypeKey = keyof typeof OpeningTypeDef;
+export class OpeningType extends JoyEnum(OpeningTypeDef) { };
 
 export type IOpening = {
   hiring_opening_id: OpeningId,