Skip to content

Commit

Permalink
feat: query submission_services_summary and log result (#2885)
Browse files Browse the repository at this point in the history
Co-authored-by: Dafydd Llŷr Pearson <[email protected]>
  • Loading branch information
Mike-Heneghan and DafyddLlyr authored Mar 15, 2024
1 parent 04d3d22 commit 0786cd5
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import List from "@mui/material/List";
import ListItem from "@mui/material/ListItem";
import Typography from "@mui/material/Typography";
import DelayedLoadingIndicator from "components/DelayedLoadingIndicator";
import ErrorFallback from "components/ErrorFallback";
import React from "react";

import { SubmissionData } from "./submissionData";

interface SubmissionsViewProps {
applications: SubmissionData[];
loading: boolean;
error: Error | undefined;
}

const SubmissionsView: React.FC<SubmissionsViewProps> = ({
applications,
loading,
error,
}) => {
if (loading) return <DelayedLoadingIndicator msDelayBeforeVisible={500} />;
if (error) return <ErrorFallback error={error} />;
if (applications.length === 0)
return (
<Typography variant="body1">
No submitted applications found for this service.
</Typography>
);
return (
<List>
{applications.map((application, index) => (
<ListItem key={index}>{application.sessionId}</ListItem>
))}
</List>
);
};

export default SubmissionsView;
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography";
import React from "react";
import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder";

import { useStore } from "../../../lib/store";
import { useSubmittedApplications } from "./submissionData";
import SubmissionsView from "./SubmissionsView";

const Submissions: React.FC = () => {
const [flowSlug, teamSlug] = useStore((state) => [
state.flowSlug,
state.teamSlug,
]);
const { applications, loading, error } = useSubmittedApplications({
flowSlug,
teamSlug,
});

return (
<Box>
<Typography variant="h2" component="h3" gutterBottom>
Expand All @@ -13,7 +25,11 @@ const Submissions: React.FC = () => {
View data on the user submitted applications for this service.
</Typography>
<Box py={5}>
<FeaturePlaceholder title="Feature in development" />
<SubmissionsView
applications={applications}
loading={loading}
error={error}
/>
</Box>
</Box>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { useQuery } from "@apollo/client";
import gql from "graphql-tag";
import { useMemo } from "react";

type PaymentRequest = {
id: string;
createdAt: string;
paidAt: string;
govPaymentId: string;
};

type PaymentStatus = {
govPaymentId: string;
createdAt: string;
status: string;
};

type BopsApplication = {
id: string;
submittedAt: string;
destinationUrl: string;
};

type EmailApplication = {
id: string;
recipient: string;
submittedAt: string;
};

type UniformApplication = {
id: string;
submittedAt: string;
};

export type SubmissionData = {
sessionId: string;
submittedAt: Date | string;
paymentRequests: PaymentRequest[] | null;
paymentStatus: PaymentStatus[] | null;
bopsApplications: BopsApplication[] | null;
uniformApplications: UniformApplication[] | null;
emailApplications: EmailApplication[] | null;
};

export type SubmittedApplicationsQueryResult = {
submissionServicesSummary: SubmissionData[];
};

export const SUBMITTED_APPLICATIONS_QUERY = gql`
query SubmittedApplications($service_slug: String!, $team_slug: String!) {
submissionServicesSummary: submission_services_summary(
where: {
service_slug: { _eq: $service_slug }
team_slug: { _eq: $team_slug }
submitted_at: { _is_null: false }
}
order_by: { submitted_at: desc }
) {
sessionId: session_id
submittedAt: submitted_at
paymentRequests: payment_requests
paymentStatus: payment_status
bopsApplications: bops_applications
uniformApplications: uniform_applications
emailApplications: email_applications
}
}
`;

type UseSubmittedApplicationsParams = {
flowSlug?: string;
teamSlug?: string;
};

export const useSubmittedApplications = ({
flowSlug,
teamSlug,
}: UseSubmittedApplicationsParams) => {
const { data, loading, error } = useQuery<SubmittedApplicationsQueryResult>(
SUBMITTED_APPLICATIONS_QUERY,
{
variables: { service_slug: flowSlug, team_slug: teamSlug },
skip: !flowSlug || !teamSlug,
},
);

const applications = useMemo(
() => data?.submissionServicesSummary || [],
[data],
);

return { applications, loading, error };
};

0 comments on commit 0786cd5

Please sign in to comment.