Skip to content

Commit

Permalink
Merge branch 'main' of github.com:cnpem/sophys-web
Browse files Browse the repository at this point in the history
  • Loading branch information
matyson committed Jan 28, 2025
2 parents b13bcbc + 3613cc5 commit c17323b
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { CameraIcon } from "lucide-react";
import { useForm } from "react-hook-form";
import { useQueue } from "@sophys-web/api-client/hooks";
import { api } from "@sophys-web/api-client/react";
import { cn } from "@sophys-web/ui";
import { Button } from "@sophys-web/ui/button";
import { Checkbox } from "@sophys-web/ui/checkbox";
Expand Down Expand Up @@ -46,6 +47,7 @@ export function SingleAcquitision({
className?: string;
}) {
const [open, setOpen] = useState(false);
const { data } = api.auth.getUser.useQuery();

return (
<Dialog open={open} onOpenChange={setOpen}>
Expand Down Expand Up @@ -78,6 +80,7 @@ export function SingleAcquitision({
</DialogHeader>
{lastSampleParams !== undefined && (
<SingleAcquisitionForm
proposal={data?.proposal}
lastSampleParams={lastSampleParams}
onSubmitSuccess={() => {
setOpen(false);
Expand All @@ -90,11 +93,13 @@ export function SingleAcquitision({
}

function SingleAcquisitionForm({
className,
lastSampleParams,
proposal,
className,
onSubmitSuccess,
}: {
lastSampleParams: LastSampleParams;
proposal?: string;
className?: string;
onSubmitSuccess: () => void;
}) {
Expand All @@ -103,6 +108,7 @@ function SingleAcquisitionForm({
const form = useForm<z.infer<typeof schema>>({
resolver: zodResolver(schema),
defaultValues: {
proposal: proposal,
isRef: false,
metadata: {
row: lastSampleParams.row,
Expand Down
47 changes: 16 additions & 31 deletions apps/spu-ui/src/app/_components/queue/upload.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
"use client";

import React, { useCallback, useState } from "react";
import React, { useState } from "react";
import { zodResolver } from "@hookform/resolvers/zod";
import { CheckIcon, MoveRightIcon, UploadIcon } from "lucide-react";
import { useForm } from "react-hook-form";
import { z } from "zod";
import type { Session } from "@sophys-web/auth";
import { useQueue } from "@sophys-web/api-client/hooks";
import { api } from "@sophys-web/api-client/react";
import { cn } from "@sophys-web/ui";
Expand Down Expand Up @@ -228,40 +227,32 @@ const stepsMap = [
] as const;

function StepByStepForm({ onSubmitSuccess }: { onSubmitSuccess?: () => void }) {
const { data: session, isLoading } = api.auth.getSession.useQuery();
const { data: user } = api.auth.getUser.useQuery();

const { addBatch } = useQueue();

const [cleaningParams, setCleaningParams] =
useState<z.infer<typeof cleaningKwargsSchema>>();
const [acquisitionParams, setAcquisitionParams] =
useState<z.infer<typeof acquisitionTableSchema>[]>();
const [capillaryParams, setCapillaryParams] =
useState<z.infer<typeof cleanCapillaryKwargsSchema>>();
const [proposal, setProposal] = useState<string>("");
const [formProposal, setFormProposal] = useState<string | undefined>();
const [useCapillary, setUseCapillary] = useState(false);

const { addBatch } = useQueue();

const getProposal = useCallback(() => {
if (!proposal && session) {
const user = session.user as unknown as Session["user"];
return user.proposal;
}
return proposal;
}, [proposal, session]);

const { step, currentStepIdx, next, goTo } = useStepForm([
<ProposalForm
key="proposal"
initialValues={{
proposal: getProposal(),
proposal: formProposal ?? user?.proposal ?? "",
useCapillary,
}}
onSubmit={onSubmitProposal}
/>,
<CleanCapillaryForm
key="capillary"
initialValues={{
proposal,
proposal: formProposal,
...capillaryParams,
sampleType: "buffer",
bufferTag: "NA",
Expand All @@ -279,7 +270,7 @@ function StepByStepForm({ onSubmitSuccess }: { onSubmitSuccess?: () => void }) {
<AcquisitionTableForm key="acquisition" onSubmit={onSubmitAcquisition} />,
<div className="text-xs text-muted-foreground">
<div className="text-lg font-bold">Step 1: Proposal</div>
<p>Proposal: {proposal}</p>
<p>Proposal: {formProposal}</p>
<p>Use Capillary: {useCapillary ? "Yes" : "No"}</p>
{!!useCapillary && (
<>
Expand Down Expand Up @@ -342,15 +333,8 @@ function StepByStepForm({ onSubmitSuccess }: { onSubmitSuccess?: () => void }) {
</div>,
]);

if (isLoading) {
return <div>Loading...</div>;
}
if (!session) {
return <div>Not authenticated</div>;
}

function onSubmitProposal(data: z.infer<typeof proposalSchema>) {
setProposal(data.proposal);
setFormProposal(data.proposal);
setUseCapillary(data.useCapillary);
if (data.useCapillary) {
next();
Expand Down Expand Up @@ -386,7 +370,7 @@ function StepByStepForm({ onSubmitSuccess }: { onSubmitSuccess?: () => void }) {
args: [],
kwargs: {
...params,
proposal,
proposal: formProposal,
...cleaningParams,
},
itemType: "plan",
Expand All @@ -399,7 +383,7 @@ function StepByStepForm({ onSubmitSuccess }: { onSubmitSuccess?: () => void }) {
args: [],
kwargs: {
...capillaryParams,
proposal,
proposal: formProposal,
},
itemType: "plan",
},
Expand Down Expand Up @@ -454,22 +438,23 @@ function StepByStepForm({ onSubmitSuccess }: { onSubmitSuccess?: () => void }) {
{
label: "Capillary",
onClick: () => goTo(1),
isDisabled: !useCapillary || !proposal || currentStepIdx < 1,
isDisabled: !useCapillary || !formProposal || currentStepIdx < 1,
},
{
label: "Cleaning",
onClick: () => goTo(2),
isDisabled: !proposal || currentStepIdx < 2,
isDisabled: !formProposal || currentStepIdx < 2,
},
{
label: "Acquisition",
onClick: () => goTo(3),
isDisabled: !proposal || currentStepIdx < 3,
isDisabled: !formProposal || currentStepIdx < 3,
},
{
label: "Check",
onClick: () => goTo(4),
isDisabled: !proposal || !acquisitionParams || currentStepIdx < 4,
isDisabled:
!formProposal || !acquisitionParams || currentStepIdx < 4,
},
]}
currentStep={currentStepIdx}
Expand Down
19 changes: 19 additions & 0 deletions packages/api/src/router/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,29 @@ const principalSchema = z.object({
apiKeyScopes: z.array(z.string()).nullable(),
});

const userSchema = z.object({
name: z.string(),
roles: z.array(z.string()).optional().nullable(),
scopes: z.array(z.string()).optional().nullable(),
proposal: z.string(),
});

export const authRouter = {
getSession: protectedProcedure.query(({ ctx }) => {
return ctx.session;
}),
getUser: protectedProcedure.query(({ ctx }) => {
const user = userSchema.safeParse({
name: ctx.session.user.name,
roles: ctx.session.user.roles,
scopes: ctx.session.user.scopes,
proposal: ctx.session.user.proposal,
});
if (!user.success) {
throw new Error("Invalid user session:", user.error);
}
return user.data;
}),
whoAmI: protectedProcedure.query(async ({ ctx }) => {
const fetchURL = `${env.BLUESKY_HTTPSERVER_URL}/api/auth/whoami`;
const blueskyAccessToken = ctx.session.user.blueskyAccessToken;
Expand Down

0 comments on commit c17323b

Please sign in to comment.