Skip to content

Commit

Permalink
feat: Search and Filter definition for Instrument Picker done.
Browse files Browse the repository at this point in the history
  • Loading branch information
yoganandaness committed May 31, 2023
1 parent 92493cd commit 3fa8944
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/* eslint-disable quotes */
import { GraphQLError } from 'graphql';

import { InstrumentPickerConfig } from '../../resolvers/types/FieldConfig';
import { QuestionFilterCompareOperator } from '../Questionary';
import { DataType, QuestionTemplateRelation } from '../Template';
import { Question } from './QuestionRegistry';

Expand All @@ -23,4 +25,15 @@ export const instrumentPickerDefinition: Question = {
return config;
},
getDefaultAnswer: () => null,
filterQuery: (queryBuilder, filter) => {
const value = JSON.parse(filter.value).value;
switch (filter.compareOperator) {
case QuestionFilterCompareOperator.EQUALS:
return queryBuilder.andWhereRaw("answers.answer->>'value'=?", value);
default:
throw new GraphQLError(
`Unsupported comparator for SelectionFromOptions ${filter.compareOperator}`
);
}
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import React, { FC, useEffect, useState } from 'react';

import { getQuestionaryComponentDefinition } from 'components/questionary/QuestionaryComponentRegistry';
import {
Call,
GetTemplateQuery,
InputMaybe,
QuestionFilterCompareOperator,
QuestionFilterInput,
QuestionTemplateRelation,
Expand All @@ -25,6 +27,7 @@ export interface SearchCriteria {

interface QuestionaryFilterProps {
templateId: number;
callId?: InputMaybe<Call['id']>;
onSubmit?: (questionFilter?: QuestionFilterInput) => void;
}

Expand Down Expand Up @@ -68,7 +71,11 @@ const useStyles = makeStyles((theme) => ({
},
}));

function QuestionaryFilter({ templateId, onSubmit }: QuestionaryFilterProps) {
function QuestionaryFilter({
templateId,
onSubmit,
callId,
}: QuestionaryFilterProps) {
const { template, isLoadingTemplate } = useTemplate(templateId);
const classes = useStyles();

Expand Down Expand Up @@ -163,6 +170,7 @@ function QuestionaryFilter({ templateId, onSubmit }: QuestionaryFilterProps) {
});
}}
questionTemplateRelation={selectedQuestion}
callId={callId}
/>
)}
</Collapse>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ const ProposalFilterBar: React.FC<ProposalFilterBarProps> = ({
{selectedCallTemplateId && (
<Collapse in={showQuestionFilter}>
<QuestionaryFilter
callId={filter.callId}
templateId={selectedCallTemplateId}
onSubmit={(questionFilter) => {
setProposalFilter({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import {
Call,
InputMaybe,
QuestionFilterCompareOperator,
QuestionTemplateRelationFragment,
} from 'generated/sdk';
Expand All @@ -12,4 +14,5 @@ export interface SearchCriteriaInputProps {
value: string | number | boolean | unknown[] | null
) => unknown;
questionTemplateRelation: QuestionTemplateRelationFragment;
callId?: InputMaybe<Call['id']>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import defaultRenderer from 'components/questionary/DefaultQuestionRenderer';
import { DataType } from 'generated/sdk';

import { QuestionaryComponentDefinition } from '../../QuestionaryComponentRegistry';
import MultipleChoiceSearchCriteriaComponent from '../MultipleChoice/MultipleChoiceSearchCriteriaComponent';
import InstrumentPickerAnswerRenderer from './InstrumentPickerAnswerRenderer';
import InstrumentPickerSearchCriteriaComponent from './InstrumentPickerSearchCriteriaComponent';
import { QuestionaryComponentInstrumentPicker } from './QuestionaryComponentInstrumentPicker';
import { QuestionInstrumentPickerForm } from './QuestionInstrumentPickerForm';
import { QuestionTemplateRelationInstrumentPickerForm } from './QuestionTemplateRelationInstrumentPickerForm';
Expand All @@ -28,7 +28,7 @@ export const instrumentPickerDefinition: QuestionaryComponentDefinition = {
},
createYupValidationSchema: instrumentPickerValidationSchema,
getYupInitialValue: ({ answer }) => answer.value || null,
searchCriteriaComponent: MultipleChoiceSearchCriteriaComponent,
searchCriteriaComponent: InstrumentPickerSearchCriteriaComponent,
};

export {};
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Grid, TextField, Autocomplete } from '@mui/material';
import React, { useState } from 'react';

import {
Call,
InstrumentWithAvailabilityTime,
QuestionFilterCompareOperator,
} from 'generated/sdk';
import { useCallData } from 'hooks/call/useCallData';

import { SearchCriteriaInputProps } from '../../../proposal/SearchCriteriaInputProps';

function InstrumentPickerSearchCriteriaComponent({
onChange,
callId,
}: SearchCriteriaInputProps) {
const [value, setValue] = useState<InstrumentWithAvailabilityTime | null>(
null
);

const { call } = useCallData(callId);

return (
<Grid container spacing={2}>
<Grid item xs={12}>
<Autocomplete
id="answer"
options={call?.instruments ?? []}
getOptionLabel={(option) => option.name as string}
renderInput={(params) => (
<TextField {...params} margin="none" label="Answer" />
)}
onChange={(_event, newValue) => {
setValue(newValue);
if (!newValue) return;
onChange(
QuestionFilterCompareOperator.EQUALS,
newValue.id as Call['id']
);
}}
value={value}
data-cy="value"
/>
</Grid>
</Grid>
);
}

export default InstrumentPickerSearchCriteriaComponent;
4 changes: 2 additions & 2 deletions apps/user-office-frontend/src/hooks/call/useCallData.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { useEffect, useState } from 'react';

import { Call } from 'generated/sdk';
import { Call, InputMaybe } from 'generated/sdk';
import { useDataApi } from 'hooks/common/useDataApi';

export function useCallData(callId: number | undefined) {
export function useCallData(callId?: InputMaybe<Call['id']>) {
const [call, setCall] = useState<Call | null>(null);
const [loading, setLoading] = useState(true);

Expand Down

0 comments on commit 3fa8944

Please sign in to comment.