Skip to content

Commit

Permalink
Features/projects creation (#382)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kitenite committed Sep 18, 2024
1 parent 28b4e63 commit ce26e5a
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 26 deletions.
12 changes: 12 additions & 0 deletions app/common/models/project.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export interface Project {
id: string;
name: string;
folderPath: string;
url: string;

previewImg?: string;
onlookEnabled: boolean;

createdAt: string; // ISO 8601
updatedAt: string; // ISO 8601
}
14 changes: 7 additions & 7 deletions app/electron/main/analytics/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ipcMain } from 'electron';
import * as Mixpanel from 'mixpanel';
import { nanoid } from 'nanoid';
import { PersistenStorage } from '../storage';
import { PersistentStorage } from '../storage';
import { MainChannels } from '/common/constants';
import { UserMetadata } from '/common/models/settings';

Expand All @@ -26,12 +26,12 @@ class Analytics {
}

private restoreSettings() {
const settings = PersistenStorage.USER_SETTINGS.read() || {};
const settings = PersistentStorage.USER_SETTINGS.read() || {};
const enable = settings.enableAnalytics;
this.id = settings.id;
if (!this.id) {
this.id = nanoid();
PersistenStorage.USER_SETTINGS.write({ enableAnalytics: enable, id: this.id });
PersistentStorage.USER_SETTINGS.write({ enableAnalytics: enable, id: this.id });
}

if (enable) {
Expand All @@ -42,7 +42,7 @@ class Analytics {
}

public toggleSetting(enable: boolean) {
const settings = PersistenStorage.USER_SETTINGS.read() || {};
const settings = PersistentStorage.USER_SETTINGS.read() || {};
if (settings.enableAnalytics === enable) {
return;
}
Expand All @@ -54,7 +54,7 @@ class Analytics {
this.track('disable analytics');
this.disable();
}
PersistenStorage.USER_SETTINGS.write({ enableAnalytics: enable, id: this.id });
PersistentStorage.USER_SETTINGS.write({ enableAnalytics: enable, id: this.id });
}

private enable() {
Expand Down Expand Up @@ -84,7 +84,7 @@ class Analytics {
if (this.mixpanel && this.id) {
if (user.id !== this.id) {
this.mixpanel.alias(user.id, this.id);
PersistenStorage.USER_SETTINGS.update({ id: user.id });
PersistentStorage.USER_SETTINGS.update({ id: user.id });
}

this.mixpanel.people.set(this.id, {
Expand All @@ -96,7 +96,7 @@ class Analytics {
}

public signOut() {
PersistenStorage.USER_SETTINGS.write({ id: undefined });
PersistentStorage.USER_SETTINGS.write({ id: undefined });
}
}

Expand Down
6 changes: 3 additions & 3 deletions app/electron/main/auth/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { User } from '@supabase/supabase-js';
import { mainWindow } from '..';
import analytics from '../analytics';
import { PersistenStorage } from '../storage';
import { PersistentStorage } from '../storage';
import { APP_SCHEMA, MainChannels } from '/common/constants';
import { AuthTokens, UserMetadata } from '/common/models/settings';
import supabase from '/common/supabase';
Expand All @@ -12,7 +12,7 @@ export async function handleAuthCallback(url: string) {
}

const authTokens = getToken(url);
PersistenStorage.AUTH_TOKENS.write(authTokens);
PersistentStorage.AUTH_TOKENS.write(authTokens);

if (!supabase) {
throw new Error('No backend connected');
Expand All @@ -32,7 +32,7 @@ export async function handleAuthCallback(url: string) {
}

const userMetadata = getUserMetadata(user);
PersistenStorage.USER_METADATA.write(userMetadata);
PersistentStorage.USER_METADATA.write(userMetadata);

analytics.identify(userMetadata);
emitAuthEvent();
Expand Down
4 changes: 2 additions & 2 deletions app/electron/main/code/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { dialog, shell } from 'electron';
import { PersistenStorage } from '../storage';
import { PersistentStorage } from '../storage';
import { formatContent, readFile, writeFile } from './files';
import { IDE, IdeType } from '/common/ide';
import { CodeDiff } from '/common/models/code';
Expand Down Expand Up @@ -69,7 +69,7 @@ export async function writeCode(codeDiffs: CodeDiff[]): Promise<boolean> {
}

function getIdeFromUserSettings(): IDE {
const userSettings = PersistenStorage.USER_SETTINGS.read() || {};
const userSettings = PersistentStorage.USER_SETTINGS.read() || {};
return IDE.fromType(userSettings.ideType || IdeType.VS_CODE);
}

Expand Down
6 changes: 3 additions & 3 deletions app/electron/main/events/auth.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { ipcMain } from 'electron';
import { mainWindow } from '..';
import analytics from '../analytics';
import { PersistenStorage } from '../storage';
import { PersistentStorage } from '../storage';
import { MainChannels } from '/common/constants';

export function listenForAuthMessages() {
ipcMain.handle(MainChannels.SIGN_OUT, (e: Electron.IpcMainInvokeEvent, args) => {
PersistenStorage.USER_METADATA.clear();
PersistenStorage.AUTH_TOKENS.clear();
PersistentStorage.USER_METADATA.clear();
PersistentStorage.AUTH_TOKENS.clear();
analytics.signOut();
mainWindow?.webContents.send(MainChannels.USER_SIGNED_OUT);
});
Expand Down
12 changes: 6 additions & 6 deletions app/electron/main/events/storage.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
import { ipcMain } from 'electron';
import { PersistenStorage } from '../storage';
import { PersistentStorage } from '../storage';
import { MainChannels } from '/common/constants';
import { ProjectSettings, UserSettings } from '/common/models/settings';

export function listenForStorageMessages() {
ipcMain.handle(MainChannels.GET_USER_SETTINGS, (e: Electron.IpcMainInvokeEvent) => {
return PersistenStorage.USER_SETTINGS.read();
return PersistentStorage.USER_SETTINGS.read();
});

ipcMain.handle(
MainChannels.UPDATE_USER_SETTINGS,
(e: Electron.IpcMainInvokeEvent, args: UserSettings) => {
PersistenStorage.USER_SETTINGS.update(args);
PersistentStorage.USER_SETTINGS.update(args);
},
);

ipcMain.handle(MainChannels.GET_PROJECT_SETTINGS, (e: Electron.IpcMainInvokeEvent) => {
return PersistenStorage.PROJECT_SETTINGS.read();
return PersistentStorage.PROJECT_SETTINGS.read();
});

ipcMain.handle(
MainChannels.UPDATE_PROJECT_SETTINGS,
(e: Electron.IpcMainInvokeEvent, args: ProjectSettings) => {
PersistenStorage.PROJECT_SETTINGS.update(args);
PersistentStorage.PROJECT_SETTINGS.update(args);
},
);

ipcMain.handle(MainChannels.GET_USER_METADATA, (e: Electron.IpcMainInvokeEvent) => {
return PersistenStorage.USER_METADATA.read();
return PersistentStorage.USER_METADATA.read();
});
}
10 changes: 5 additions & 5 deletions app/electron/main/storage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import { app, safeStorage } from 'electron';
import { existsSync, readFileSync, writeFileSync } from 'fs';
import { AuthTokens, ProjectSettings, UserSettings } from '/common/models/settings';

export class PersistenStorage<T> {
export class PersistentStorage<T> {
public readonly FILE_PATH: string;
static readonly USER_SETTINGS = new PersistenStorage<UserSettings>('user-settings');
static readonly PROJECT_SETTINGS = new PersistenStorage<ProjectSettings>('project-settings');
static readonly USER_METADATA = new PersistenStorage<UserMetadata>('user-metadata');
static readonly AUTH_TOKENS = new PersistenStorage<AuthTokens>('auth-tokens', true);
static readonly USER_SETTINGS = new PersistentStorage<UserSettings>('user-settings');
static readonly PROJECT_SETTINGS = new PersistentStorage<ProjectSettings>('project-settings');
static readonly USER_METADATA = new PersistentStorage<UserMetadata>('user-metadata');
static readonly AUTH_TOKENS = new PersistentStorage<AuthTokens>('auth-tokens', true);

private constructor(
public readonly fileName: string,
Expand Down
5 changes: 5 additions & 0 deletions app/src/components/Context/Projects.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { ProjectsManager } from '@/lib/projects';
import { createContext, useContext } from 'react';

const ProjectsContext = createContext(new ProjectsManager());
export const useProjectManager = () => useContext(ProjectsContext);
23 changes: 23 additions & 0 deletions app/src/lib/projects/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { makeAutoObservable } from 'mobx';
import { Project } from '/common/models/project';

export class ProjectsManager {
private activeProject: Project | null = null;
private allProjects: Project[] = [];

constructor() {
makeAutoObservable(this);
}

get project() {
return this.activeProject;
}

set project(newProject: Project | null) {
this.activeProject = newProject;
}

get projects() {
return this.allProjects;
}
}

0 comments on commit ce26e5a

Please sign in to comment.