diff --git a/packages/web/src/appobj/FavoriteFileAppObject.svelte b/packages/web/src/appobj/FavoriteFileAppObject.svelte index 417567187..9c431432c 100644 --- a/packages/web/src/appobj/FavoriteFileAppObject.svelte +++ b/packages/web/src/appobj/FavoriteFileAppObject.svelte @@ -36,13 +36,14 @@ import { showModal } from '../modals/modalTools'; import ConfirmModal from '../modals/ConfirmModal.svelte'; import getElectron from '../utility/getElectron'; + import FavoriteModal from '../modals/FavoriteModal.svelte'; export let data; const electron = getElectron(); const editFavorite = () => { - // showModal(modalState => ); + showModal(FavoriteModal, { editingData: data }); }; const editFavoriteJson = async () => { diff --git a/packages/web/src/forms/FormValues.svelte b/packages/web/src/forms/FormValues.svelte new file mode 100644 index 000000000..c43cc2cd8 --- /dev/null +++ b/packages/web/src/forms/FormValues.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/web/src/modals/FavoriteModal.svelte b/packages/web/src/modals/FavoriteModal.svelte new file mode 100644 index 000000000..98503ab43 --- /dev/null +++ b/packages/web/src/modals/FavoriteModal.svelte @@ -0,0 +1,154 @@ + + + + + {editingData ? 'Edit favorite' : 'Share / add to favorites'} + + + + + + {#if !!savingTab && !electron && canWriteFavorite} + + {/if} + + {#if !values.shareAsLink && canWriteFavorite} + + + {/if} + + {#if !!savingTab && !!savedFile} + + {/if} + + + + {#if !values.shareAsLink && canWriteFavorite} + + {/if} + {#if values.shareAsLink || !canWriteFavorite} + + {/if} + + + + + diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index 6fb35e8be..2fe726ee9 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -37,6 +37,7 @@ export const visibleCommandPalette = writable(false); export const commands = writable({}); export const currentTheme = writableWithStorage('theme-light', 'currentTheme'); export const activeTabId = derived([openedTabs], ([$openedTabs]) => $openedTabs.find(x => x.selected)?.tabid); +export const activeTab = derived([openedTabs], ([$openedTabs]) => $openedTabs.find(x => x.selected)); export const visibleToolbar = writableWithStorage(1, 'visibleToolbar'); export const leftPanelWidth = writable(300); @@ -90,3 +91,9 @@ commands.subscribe(value => { } }); export const getCommands = () => commandsValue; + +let activeTabValue = null; +activeTab.subscribe(value => { + activeTabValue = value; +}); +export const getActiveTab = () => activeTabValue; diff --git a/packages/web/src/widgets/TabsPanel.svelte b/packages/web/src/widgets/TabsPanel.svelte index 10fd626d6..eb0571f47 100644 --- a/packages/web/src/widgets/TabsPanel.svelte +++ b/packages/web/src/widgets/TabsPanel.svelte @@ -83,6 +83,20 @@ testEnabled: () => getOpenedTabs().filter(x => !x.closedTime).length >= 1, onClick: closeAll, }); + + registerCommand({ + id: 'tabs.share', + category: 'Tabs', + name: 'Share', + icon: 'icon share', + toolbar: true, + testEnabled: () => + getActiveTab()?.tabComponent && + tabs[getActiveTab()?.tabComponent] && + tabs[getActiveTab()?.tabComponent].allowAddToFavorites && + tabs[getActiveTab()?.tabComponent].allowAddToFavorites(getActiveTab()?.props), + onClick: () => showModal(FavoriteModal, { savingTab: getActiveTab() }), + });