diff --git a/client/src/api.ts b/client/src/api.ts
index 63c3754..3d681e6 100644
--- a/client/src/api.ts
+++ b/client/src/api.ts
@@ -362,12 +362,19 @@ export enum IntegrationType {
spotify = "spotify",
}
+export interface SpotifyIntegrationDetails {
+ clientId: string,
+ clientSecret: string,
+}
+
+export type IntegrationDetails = SpotifyIntegrationDetails;
+
// Create a new integration (POST).
export const CreateIntegrationEndpoint = '/integration';
export interface CreateIntegrationRequest {
name: string,
type: IntegrationType,
- details: any,
+ details: IntegrationDetails,
}
export interface CreateIntegrationResponse {
id: number;
@@ -385,7 +392,7 @@ export const ModifyIntegrationEndpoint = '/integration/:id';
export interface ModifyIntegrationRequest {
name?: string,
type?: IntegrationType,
- details?: any,
+ details?: IntegrationDetails,
}
export interface ModifyIntegrationResponse { }
export function checkModifyIntegrationRequest(req: any): boolean {
@@ -399,12 +406,21 @@ export interface IntegrationDetailsRequest { }
export interface IntegrationDetailsResponse {
name: string,
type: IntegrationType,
- details: any,
+ details: IntegrationDetails,
}
export function checkIntegrationDetailsRequest(req: any): boolean {
return true;
}
+// List integrations (GET).
+export const ListIntegrationsEndpoint = '/integration';
+export interface ListIntegrationsRequest { }
+export interface ListIntegrationsItem extends IntegrationDetailsResponse { id: number }
+export type ListIntegrationsResponse = ListIntegrationsItem[];
+export function checkListIntegrationsRequest(req: any): boolean {
+ return true;
+}
+
// Delete integration (DELETE).
export const DeleteIntegrationEndpoint = '/integration/:id';
export interface DeleteIntegrationRequest { }
diff --git a/client/src/assets/spotify_icon.svg b/client/src/assets/spotify_icon.svg
new file mode 100644
index 0000000..cfc993b
--- /dev/null
+++ b/client/src/assets/spotify_icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/src/components/MainWindow.tsx b/client/src/components/MainWindow.tsx
index 2241615..32ae543 100644
--- a/client/src/components/MainWindow.tsx
+++ b/client/src/components/MainWindow.tsx
@@ -12,6 +12,7 @@ import { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom';
import LoginWindow from './windows/login/LoginWindow';
import { useAuth } from '../lib/useAuth';
import RegisterWindow from './windows/register/RegisterWindow';
+import SettingsWindow from './windows/settings/SettingsWindow';
const darkTheme = createMuiTheme({
palette: {
@@ -57,6 +58,10 @@ export default function MainWindow(props: any) {
+
+
+
+
diff --git a/client/src/components/appbar/AppBar.tsx b/client/src/components/appbar/AppBar.tsx
index b39601f..7b6f394 100644
--- a/client/src/components/appbar/AppBar.tsx
+++ b/client/src/components/appbar/AppBar.tsx
@@ -28,6 +28,8 @@ export function UserMenu(props: {
onClose: () => void,
}) {
let auth = useAuth();
+ let history = useHistory();
+
const pos = props.open && props.position ?
{ left: props.position[0], top: props.position[1] }
: { left: 0, top: 0 }
@@ -41,6 +43,12 @@ export function UserMenu(props: {
>
{auth.user?.email || "Unknown user"}
+