Skip to content

Commit

Permalink
Merge pull request #31 from gemini-hlsw/SCHED-617
Browse files Browse the repository at this point in the history
SCHED 617:   Add Program File button.
  • Loading branch information
stroncod authored Feb 22, 2024
2 parents 06f49d4 + bb8f99f commit 488a4e9
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 21 deletions.
54 changes: 38 additions & 16 deletions src/components/ControlPanel/ControlPanel.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
import React, { useState, useRef, useEffect, useContext, SetStateAction } from 'react'
import { useLazyQuery } from '@apollo/client'
import { scheduleQuery } from './query'
import { GlobalStateContext } from '../GlobalState/GlobalState'
import "./ControlPanel.scss"
import React, { useState, useRef, useEffect, useContext, SetStateAction } from 'react';
import { useLazyQuery } from '@apollo/client';
import { scheduleQuery } from './query';
import { GlobalStateContext } from '../GlobalState/GlobalState';
import "./ControlPanel.scss";

//PrimeReact components
import { Button } from 'primereact/button'
import { Panel } from 'primereact/panel'
import { Calendar } from 'primereact/calendar'
import { SelectButton } from 'primereact/selectbutton'
import { Toast } from 'primereact/toast'
import { Button } from 'primereact/button';
import { Panel } from 'primereact/panel';
import { Calendar } from 'primereact/calendar';
import { SelectButton } from 'primereact/selectbutton';
import { Toast } from 'primereact/toast';
import { FileUpload, FileUploadHandlerEvent } from 'primereact/fileupload';
import { InputNumber, InputNumberValueChangeEvent } from 'primereact/inputnumber';
import { Nullable } from "primereact/ts-helpers";
import { NightPlanType } from '../../types'

import { NightPlanType } from '../../types';


export default function ControlPanel() {

const defaultDate: Date = new Date('2018-10-01');
const toast = useRef<Toast>(null)
const fileToast = useRef<Toast>(null)
const [saveState, setSaveState] = useState(false)
const [datesState, setDates] = useState<Nullable<(Date | null)[]>>([defaultDate]);
const [siteState, setSite] = useState(undefined)
const [fileData, setFileData] = useState<any | null>(null);
const sites = [
{ label: "GN", value: "GN" },
{ label: "GS", value: "GS" },
Expand All @@ -35,6 +37,17 @@ export default function ControlPanel() {

const { setNightPlans, setPlansSummary, thesis, power, metPower, whaPower, visPower } = useContext(GlobalStateContext)


const customBase64Uploader = async (event: FileUploadHandlerEvent) => {
// convert file to base64 encoded
const file = event.files[0];
const reader = new FileReader();
reader.readAsArrayBuffer(file)
reader.onloadend = function () {
setFileData(reader.result);
};
};

const onSaveClick = () => {
// Creates a json file with all the
setSaveState(true)
Expand All @@ -45,13 +58,13 @@ export default function ControlPanel() {
setTimeout(() => {
setSaveState(false)
}, 2000)
}
};

const onLoadClick = () => {
// TODO: Idealistcally shows a list of saved runs.
console.log("Load Clicked")
}

};
const onRunClick = () => {
// call GraphQL endpoint for new schedule acording to parameters
if (siteState && datesState !== null
Expand All @@ -68,9 +81,11 @@ export default function ControlPanel() {
power: power,
metPower: metPower,
visPower: visPower,
whaPower: whaPower
whaPower: whaPower,
programFile: fileData
}
})
console.log(fileData)
} else {
toast.current?.show({
severity: 'error',
Expand Down Expand Up @@ -125,6 +140,13 @@ export default function ControlPanel() {
<label htmlFor="minmax">Num of Nights: </label>
<InputNumber inputId="minmax" value={numNight} onValueChange={(e: InputNumberValueChangeEvent) => setNumNight(e.value)} min={1} max={365} />
</div>
<div>
<FileUpload mode="basic"
name="demo[]"
accept="text/*" maxFileSize={1000000}
customUpload uploadHandler={customBase64Uploader}
chooseLabel="Programs Selection" />
</div>
</Panel>
</>
)
Expand Down
7 changes: 5 additions & 2 deletions src/components/ControlPanel/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ export const scheduleQuery = graphql(`
$power: Int,
$metPower: Float,
$visPower: Float,
$whaPower: Float ) {
$whaPower: Float,
$programFile: Upload ) {
schedule(
newScheduleInput: {
startTime: $startTime,
Expand All @@ -23,7 +24,9 @@ export const scheduleQuery = graphql(`
power: $power,
visPower: $visPower,
metPower: $metPower,
whaPower: $whaPower}
whaPower: $whaPower,
programFile: $programFile
}
) {
nightPlans{
nightTimeline{
Expand Down
4 changes: 2 additions & 2 deletions src/gql/gql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
* Therefore it is highly recommended to use the babel-plugin for production.
*/
const documents = {
"\n query schedule($startTime: String!,\n $endTime: String!,\n $sites: Sites!,\n $mode: SchedulerModes!,\n $numNightsToSchedule: Int!,\n $thesisFactor: Float,\n $power: Int,\n $metPower: Float,\n $visPower: Float,\n $whaPower: Float ) {\n schedule(\n newScheduleInput: {\n startTime: $startTime, \n numNightsToSchedule: $numNightsToSchedule , \n sites: $sites, \n mode: $mode, \n endTime: $endTime,\n semesterVisibility:false,\n thesisFactor: $thesisFactor,\n power: $power,\n visPower: $visPower,\n metPower: $metPower,\n whaPower: $whaPower}\n ) {\n nightPlans{\n nightTimeline{\n nightIndex\n timeEntriesBySite{\n site,\n mornTwilight,\n eveTwilight,\n timeEntries{\n startTimeSlots,\n event,\n plan{\n startTime,\n visits{\n obsId,\n endTime,\n altitude,\n atomEndIdx,\n atomStartIdx,\n startTime,\n instrument,\n score,\n obsClass,\n completion,\n peakScore,\n },\n nightStats{\n timeloss,\n planScore,\n timeloss,\n nToos,\n completionFraction,\n programCompletion\n }\n }\n }\n }\n }\n },\n plansSummary\n }\n }\n": types.ScheduleDocument,
"\n query schedule($startTime: String!,\n $endTime: String!,\n $sites: Sites!,\n $mode: SchedulerModes!,\n $numNightsToSchedule: Int!,\n $thesisFactor: Float,\n $power: Int,\n $metPower: Float,\n $visPower: Float,\n $whaPower: Float,\n $programFile: Upload ) {\n schedule(\n newScheduleInput: {\n startTime: $startTime, \n numNightsToSchedule: $numNightsToSchedule , \n sites: $sites, \n mode: $mode, \n endTime: $endTime,\n semesterVisibility:false,\n thesisFactor: $thesisFactor,\n power: $power,\n visPower: $visPower,\n metPower: $metPower,\n whaPower: $whaPower,\n programFile: $programFile\n }\n ) {\n nightPlans{\n nightTimeline{\n nightIndex\n timeEntriesBySite{\n site,\n mornTwilight,\n eveTwilight,\n timeEntries{\n startTimeSlots,\n event,\n plan{\n startTime,\n visits{\n obsId,\n endTime,\n altitude,\n atomEndIdx,\n atomStartIdx,\n startTime,\n instrument,\n score,\n obsClass,\n completion,\n peakScore,\n },\n nightStats{\n timeloss,\n planScore,\n timeloss,\n nToos,\n completionFraction,\n programCompletion\n }\n }\n }\n }\n }\n },\n plansSummary\n }\n }\n": types.ScheduleDocument,
};

/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query schedule($startTime: String!,\n $endTime: String!,\n $sites: Sites!,\n $mode: SchedulerModes!,\n $numNightsToSchedule: Int!,\n $thesisFactor: Float,\n $power: Int,\n $metPower: Float,\n $visPower: Float,\n $whaPower: Float ) {\n schedule(\n newScheduleInput: {\n startTime: $startTime, \n numNightsToSchedule: $numNightsToSchedule , \n sites: $sites, \n mode: $mode, \n endTime: $endTime,\n semesterVisibility:false,\n thesisFactor: $thesisFactor,\n power: $power,\n visPower: $visPower,\n metPower: $metPower,\n whaPower: $whaPower}\n ) {\n nightPlans{\n nightTimeline{\n nightIndex\n timeEntriesBySite{\n site,\n mornTwilight,\n eveTwilight,\n timeEntries{\n startTimeSlots,\n event,\n plan{\n startTime,\n visits{\n obsId,\n endTime,\n altitude,\n atomEndIdx,\n atomStartIdx,\n startTime,\n instrument,\n score,\n obsClass,\n completion,\n peakScore,\n },\n nightStats{\n timeloss,\n planScore,\n timeloss,\n nToos,\n completionFraction,\n programCompletion\n }\n }\n }\n }\n }\n },\n plansSummary\n }\n }\n"): (typeof documents)["\n query schedule($startTime: String!,\n $endTime: String!,\n $sites: Sites!,\n $mode: SchedulerModes!,\n $numNightsToSchedule: Int!,\n $thesisFactor: Float,\n $power: Int,\n $metPower: Float,\n $visPower: Float,\n $whaPower: Float ) {\n schedule(\n newScheduleInput: {\n startTime: $startTime, \n numNightsToSchedule: $numNightsToSchedule , \n sites: $sites, \n mode: $mode, \n endTime: $endTime,\n semesterVisibility:false,\n thesisFactor: $thesisFactor,\n power: $power,\n visPower: $visPower,\n metPower: $metPower,\n whaPower: $whaPower}\n ) {\n nightPlans{\n nightTimeline{\n nightIndex\n timeEntriesBySite{\n site,\n mornTwilight,\n eveTwilight,\n timeEntries{\n startTimeSlots,\n event,\n plan{\n startTime,\n visits{\n obsId,\n endTime,\n altitude,\n atomEndIdx,\n atomStartIdx,\n startTime,\n instrument,\n score,\n obsClass,\n completion,\n peakScore,\n },\n nightStats{\n timeloss,\n planScore,\n timeloss,\n nToos,\n completionFraction,\n programCompletion\n }\n }\n }\n }\n }\n },\n plansSummary\n }\n }\n"];
export function graphql(source: "\n query schedule($startTime: String!,\n $endTime: String!,\n $sites: Sites!,\n $mode: SchedulerModes!,\n $numNightsToSchedule: Int!,\n $thesisFactor: Float,\n $power: Int,\n $metPower: Float,\n $visPower: Float,\n $whaPower: Float,\n $programFile: Upload ) {\n schedule(\n newScheduleInput: {\n startTime: $startTime, \n numNightsToSchedule: $numNightsToSchedule , \n sites: $sites, \n mode: $mode, \n endTime: $endTime,\n semesterVisibility:false,\n thesisFactor: $thesisFactor,\n power: $power,\n visPower: $visPower,\n metPower: $metPower,\n whaPower: $whaPower,\n programFile: $programFile\n }\n ) {\n nightPlans{\n nightTimeline{\n nightIndex\n timeEntriesBySite{\n site,\n mornTwilight,\n eveTwilight,\n timeEntries{\n startTimeSlots,\n event,\n plan{\n startTime,\n visits{\n obsId,\n endTime,\n altitude,\n atomEndIdx,\n atomStartIdx,\n startTime,\n instrument,\n score,\n obsClass,\n completion,\n peakScore,\n },\n nightStats{\n timeloss,\n planScore,\n timeloss,\n nToos,\n completionFraction,\n programCompletion\n }\n }\n }\n }\n }\n },\n plansSummary\n }\n }\n"): (typeof documents)["\n query schedule($startTime: String!,\n $endTime: String!,\n $sites: Sites!,\n $mode: SchedulerModes!,\n $numNightsToSchedule: Int!,\n $thesisFactor: Float,\n $power: Int,\n $metPower: Float,\n $visPower: Float,\n $whaPower: Float,\n $programFile: Upload ) {\n schedule(\n newScheduleInput: {\n startTime: $startTime, \n numNightsToSchedule: $numNightsToSchedule , \n sites: $sites, \n mode: $mode, \n endTime: $endTime,\n semesterVisibility:false,\n thesisFactor: $thesisFactor,\n power: $power,\n visPower: $visPower,\n metPower: $metPower,\n whaPower: $whaPower,\n programFile: $programFile\n }\n ) {\n nightPlans{\n nightTimeline{\n nightIndex\n timeEntriesBySite{\n site,\n mornTwilight,\n eveTwilight,\n timeEntries{\n startTimeSlots,\n event,\n plan{\n startTime,\n visits{\n obsId,\n endTime,\n altitude,\n atomEndIdx,\n atomStartIdx,\n startTime,\n instrument,\n score,\n obsClass,\n completion,\n peakScore,\n },\n nightStats{\n timeloss,\n planScore,\n timeloss,\n nToos,\n completionFraction,\n programCompletion\n }\n }\n }\n }\n }\n },\n plansSummary\n }\n }\n"];

/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
Expand Down
Loading

0 comments on commit 488a4e9

Please sign in to comment.