Skip to content

Commit

Permalink
Implement "Copy from standard mode"
Browse files Browse the repository at this point in the history
  • Loading branch information
jurgelenas committed Oct 30, 2022
1 parent cc63114 commit 3dd84d7
Show file tree
Hide file tree
Showing 16 changed files with 583 additions and 169 deletions.
440 changes: 334 additions & 106 deletions graphql.schema.json

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions src/api/src/graphql/inputs/BuildUserDefinesTxtInput.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Field, InputType } from 'type-graphql';
import UserDefineInput from './UserDefineInput';

@InputType('BuildUserDefinesTxtInput')
export default class BuildUserDefinesTxtInput {
@Field(() => [UserDefineInput])
userDefines: UserDefineInput[];

constructor() {
this.userDefines = [];
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Field, ObjectType } from 'type-graphql';
import BuildFirmwareErrorType from './enum/BuildFirmwareErrorType';
import BuildFirmwareErrorType from '../../models/enum/BuildFirmwareErrorType';

@ObjectType('BuildFlashFirmwareResult')
export default class BuildFlashFirmwareResult {
Expand Down
11 changes: 11 additions & 0 deletions src/api/src/graphql/objects/BuilduserDefinesTxtResult.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Field, ObjectType } from 'type-graphql';

@ObjectType('BuildUserDefinesTxtResult')
export default class BuildUserDefinesTxtResult {
@Field({ nullable: true })
userDefinesTxt: string;

constructor(userDefinesTxt: string) {
this.userDefinesTxt = userDefinesTxt;
}
}
File renamed without changes.
18 changes: 15 additions & 3 deletions src/api/src/graphql/resolvers/Firmware.resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,24 @@ import {
import { Service } from 'typedi';
import UserDefine from '../../models/UserDefine';
import BuildFlashFirmwareInput from '../inputs/BuildFlashFirmwareInput';
import BuildFlashFirmwareResult from '../../models/BuildFlashFirmwareResult';
import BuildFlashFirmwareResult from '../objects/BuildFlashFirmwareResult';
import FirmwareService, {
BuildLogUpdatePayload,
BuildProgressNotificationPayload,
} from '../../services/Firmware';
import BuildProgressNotification from '../../models/BuildProgressNotification';
import PubSubTopic from '../../pubsub/enum/PubSubTopic';
import BuildLogUpdate from '../../models/BuildLogUpdate';
import ClearPlatformioCoreDirResult from '../../models/ClearPlatformioCoreDirResult';
import ClearPlatformioCoreDirResult from '../objects/ClearPlatformioCoreDirResult';
import TargetDeviceOptionsArgs from '../args/TargetDeviceOptions';
import UserDefinesBuilder from '../../services/UserDefinesBuilder';
import ClearFirmwareFilesResult from '../../models/ClearFirmwareFiles';
import ClearFirmwareFilesResult from '../objects/ClearFirmwareFilesResult';
import TargetsLoader from '../../services/TargetsLoader';
import TargetArgs from '../args/Target';
import Device from '../../models/Device';
import GitRepository from '../inputs/GitRepositoryInput';
import BuildUserDefinesTxtInput from '../inputs/BuildUserDefinesTxtInput';
import BuildUserDefinesTxtResult from '../objects/BuilduserDefinesTxtResult';

@Service()
@Resolver()
Expand Down Expand Up @@ -64,6 +66,16 @@ export default class FirmwareResolver {
);
}

@Mutation(() => BuildUserDefinesTxtResult)
async buildUserDefinesTxt(
@Arg('input') input: BuildUserDefinesTxtInput
): Promise<BuildUserDefinesTxtResult> {
const userDefinesTxt = await this.firmwareService.buildUserDefinesTxt(
input.userDefines
);
return new BuildUserDefinesTxtResult(userDefinesTxt);
}

@Mutation(() => ClearPlatformioCoreDirResult)
async clearPlatformioCoreDir(): Promise<ClearPlatformioCoreDirResult> {
try {
Expand Down
4 changes: 2 additions & 2 deletions src/api/src/graphql/resolvers/SerialMonitor.resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import SerialMonitorService, {
SerialMonitorLogUpdatePayload,
} from '../../services/SerialMonitor';
import SerialPortInformation from '../../models/SerialPortInformation';
import SerialPortConnectResult from '../../models/SerialPortConnectResult';
import SerialPortConnectResult from '../objects/SerialPortConnectResult';
import SerialConnectionConfigInput from '../inputs/SerialConnectionConfigInput';
import SerialPortDisconnectResult from '../../models/SerialPortDisconnectResult';
import SerialPortDisconnectResult from '../objects/SerialPortDisconnectResult';
import PubSubTopic from '../../pubsub/enum/PubSubTopic';
import SerialMonitorLogUpdate from '../../models/SerialMonitorLogUpdate';
import SerialMonitorEvent from '../../models/SerialMonitorEvent';
Expand Down
6 changes: 3 additions & 3 deletions src/api/src/models/UserDefine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ export default class UserDefine {
@Field()
enabled: boolean;

@Field()
sensitive: boolean;
@Field({ nullable: true })
sensitive?: boolean;

@Field(() => [String], { nullable: true })
enumValues?: string[];
Expand All @@ -33,7 +33,7 @@ export default class UserDefine {
value = '',
enumValues?: string[],
optionGroup?: UserDefineOptionGroup,
sensitive?: boolean
sensitive = false
) {
this.type = type;

Expand Down
7 changes: 6 additions & 1 deletion src/api/src/services/Firmware/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import BuildJobType from '../../models/enum/BuildJobType';
import UserDefinesMode from '../../models/enum/UserDefinesMode';
import UserDefine from '../../models/UserDefine';
import FirmwareSource from '../../models/enum/FirmwareSource';
import BuildFlashFirmwareResult from '../../models/BuildFlashFirmwareResult';
import BuildFlashFirmwareResult from '../../graphql/objects/BuildFlashFirmwareResult';
import Mutex from '../../library/Mutex';
import BuildFirmwareErrorType from '../../models/enum/BuildFirmwareErrorType';
import PubSubTopic from '../../pubsub/enum/PubSubTopic';
Expand Down Expand Up @@ -174,6 +174,11 @@ export default class FirmwareService {
return false;
}

async buildUserDefinesTxt(userDefines: UserDefine[]): Promise<string> {
const userDefinesBuilder = new UserDefinesTxtFactory();
return userDefinesBuilder.build(this.processUserDefines(userDefines));
}

async buildFlashFirmware(
params: BuildFlashFirmwareParams,
gitRepositoryUrl: string,
Expand Down
84 changes: 74 additions & 10 deletions src/ui/components/DeviceOptionsForm/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
Button,
FormControl,
FormControlLabel,
Grid,
Expand All @@ -7,15 +8,18 @@ import {
TextField,
Typography,
} from '@mui/material';
import React, { FunctionComponent } from 'react';
import React, { FunctionComponent, useRef } from 'react';
import { SxProps, Theme } from '@mui/system';
import UserDefinesList from '../UserDefinesList';
import {
FirmwareVersionDataInput,
useBuildUserDefinesTxtMutation,
UserDefine,
UserDefineKey,
UserDefinesMode,
} from '../../gql/generated/types';
import ShowAlerts from '../ShowAlerts';
import Loader from '../Loader';

const styles: Record<string, SxProps<Theme>> = {
categoryTitle: {
Expand Down Expand Up @@ -157,6 +161,16 @@ const userDefinesToCategories = (
return result;
};

export const cleanUserDefines = (userDefines: UserDefine[]): UserDefine[] => {
return userDefines.map((item) => ({
key: item.key,
value: item.value,
enabled: item.enabled,
enumValues: item.enumValues,
type: item.type,
}));
};

const DeviceOptionsForm: FunctionComponent<DeviceOptionsFormProps> = (
props
) => {
Expand Down Expand Up @@ -209,6 +223,45 @@ const DeviceOptionsForm: FunctionComponent<DeviceOptionsFormProps> = (
});
};

const userDefinesTxtRef = useRef<HTMLInputElement>();
const [
buildUserDefinesTxtMutation,
{ error: buildError, loading: buildLoading },
] = useBuildUserDefinesTxtMutation();
const onCopyFromStandardMode = () => {
buildUserDefinesTxtMutation({
variables: {
input: {
userDefines: cleanUserDefines(deviceOptions.userDefineOptions),
},
},
})
.then((result) => {
if (
result.data?.buildUserDefinesTxt === undefined ||
result.data?.buildUserDefinesTxt === null
) {
return;
}
const userDefinesTxt =
result.data?.buildUserDefinesTxt.userDefinesTxt || '';
onChange({
...deviceOptions,
userDefinesTxt,
});
if (
userDefinesTxtRef.current !== undefined &&
userDefinesTxtRef.current.value !== undefined
) {
userDefinesTxtRef.current.value = userDefinesTxt;
userDefinesTxtRef.current?.blur();
}
})
.catch((err) => {
console.error(err);
});
};

return (
<>
<FormControl component="fieldset" sx={styles.userDefinesMode}>
Expand All @@ -233,15 +286,26 @@ const DeviceOptionsForm: FunctionComponent<DeviceOptionsFormProps> = (
</RadioGroup>
</FormControl>
{deviceOptions.userDefinesMode === UserDefinesMode.Manual && (
<TextField
sx={styles.textarea}
multiline
label="user_defines.txt"
onBlur={onUserDefinesTxt}
defaultValue={deviceOptions.userDefinesTxt}
fullWidth
rows={10}
/>
<Grid container spacing={3}>
<Grid item xs>
<TextField
sx={styles.textarea}
multiline
InputLabelProps={{ shrink: true }}
inputRef={userDefinesTxtRef}
label="user_defines.txt"
onBlur={onUserDefinesTxt}
defaultValue={deviceOptions.userDefinesTxt}
fullWidth
rows={10}
/>
<Loader loading={buildLoading} />
<ShowAlerts severity="error" messages={buildError} />
<Button onClick={onCopyFromStandardMode} size="small">
Copy from Standard mode
</Button>
</Grid>
</Grid>
)}
{target !== null &&
categories !== null &&
Expand Down
Loading

0 comments on commit 3dd84d7

Please sign in to comment.