From 8cd73977bb4798e32b56644737b60cb9d2d4081e Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Mon, 22 Apr 2024 11:09:57 +1000 Subject: [PATCH] add theme transfer --- src/interface/components/ThemeCover.tsx | 18 +++++++++---- src/interface/components/ThemeSelector.tsx | 18 +++++++++++-- src/interface/hooks/ThemeManagment.ts | 30 +++++++++++++++++++--- src/interface/types/CustomThemes.ts | 4 +++ src/seqta/ui/themes/downloadTheme.ts | 11 +++++--- 5 files changed, 67 insertions(+), 14 deletions(-) diff --git a/src/interface/components/ThemeCover.tsx b/src/interface/components/ThemeCover.tsx index 33d20177..d1dc6ddf 100644 --- a/src/interface/components/ThemeCover.tsx +++ b/src/interface/components/ThemeCover.tsx @@ -1,18 +1,21 @@ import React, { useState } from 'react'; -import { CustomTheme } from '../types/CustomThemes'; +import { CustomTheme, DownloadedTheme } from '../types/CustomThemes'; import browser from 'webextension-polyfill'; import { ArrowUpOnSquareIcon, PencilIcon } from '@heroicons/react/24/outline'; +import { sendThemeUpdate } from '../hooks/ThemeManagment'; type ThemeCoverProps = { - theme: Omit; + theme: Omit | DownloadedTheme; isSelected: boolean; isEditMode: boolean; + downloaded?: boolean; onThemeSelect: (themeId: string) => void; onThemeDelete: (themeId: string) => void; }; export const ThemeCover: React.FC = ({ theme, + downloaded, isSelected, isEditMode, onThemeSelect, @@ -21,7 +24,12 @@ export const ThemeCover: React.FC = ({ const [uploading, setUploading] = useState(false); const handleThemeClick = () => { if (isEditMode) return; - onThemeSelect(theme.id); + if (downloaded) { + sendThemeUpdate(theme as DownloadedTheme, true) + } else { + console.log(theme) + onThemeSelect(theme.id); + } }; const handleDeleteClick = (e: React.MouseEvent) => { @@ -54,7 +62,7 @@ export const ThemeCover: React.FC = ({ )} - { isEditMode ? <> : + { !isEditMode || !downloaded && <>
= ({
{theme.coverImage && {theme.name} diff --git a/src/interface/components/ThemeSelector.tsx b/src/interface/components/ThemeSelector.tsx index 8c4b9639..a5d55b63 100644 --- a/src/interface/components/ThemeSelector.tsx +++ b/src/interface/components/ThemeSelector.tsx @@ -1,8 +1,8 @@ import React, { useEffect, useState, useCallback, forwardRef, useImperativeHandle, ForwardRefExoticComponent, RefAttributes } from 'react'; -import { listThemes, deleteTheme, setTheme, disableTheme } from '../hooks/ThemeManagment'; +import { listThemes, deleteTheme, setTheme, disableTheme, getDownloadedThemes } from '../hooks/ThemeManagment'; import { ThemeCover } from './ThemeCover'; import Browser from 'webextension-polyfill'; -import { CustomTheme } from '../types/CustomThemes'; +import { CustomTheme, DownloadedTheme } from '../types/CustomThemes'; import { useSettingsContext } from '../SettingsContext'; import { SettingsState } from '../types/AppProps'; @@ -13,6 +13,7 @@ interface ThemeSelectorProps { const ThemeSelector: ForwardRefExoticComponent & RefAttributes> = forwardRef(({ isEditMode = false }, ref) => { const [themes, setThemes] = useState[]>([]); + const [downloadedThemes, setDownloadedThemes] = useState([]); const [isLoading, setIsLoading] = useState(true); const { settingsState, setSettingsState } = useSettingsContext(); @@ -56,6 +57,7 @@ const ThemeSelector: ForwardRefExoticComponent & const { themes, selectedTheme } = await listThemes(); setThemes(themes); + setDownloadedThemes(await getDownloadedThemes()); setSelectedTheme(selectedTheme ? selectedTheme : ''); } catch (error) { console.error('Error fetching themes:', error); @@ -118,6 +120,18 @@ const ThemeSelector: ForwardRefExoticComponent & /> ))} + {downloadedThemes.map((theme) => ( + + ))} +