Skip to content

Commit

Permalink
Add delete to context menu (#360)
Browse files Browse the repository at this point in the history
* chore: bump version

* refactor: remove unused code

* feat: add delete to context menu

* feat: add confirm delete setting
  • Loading branch information
decaf-dev authored Sep 13, 2024
1 parent 47d11c5 commit d392918
Show file tree
Hide file tree
Showing 25 changed files with 493 additions and 52 deletions.
2 changes: 1 addition & 1 deletion manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "vault-explorer",
"name": "Vault Explorer",
"version": "1.44.6",
"version": "1.45.0",
"minAppVersion": "1.4.13",
"description": "Explore your vault in visual format",
"author": "DecafDev",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "obsidian-vault-explorer",
"version": "1.44.6",
"version": "1.45.0",
"description": "Explore your vault in visual format",
"main": "main.js",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const DEFAULT_SETTINGS: VaultExplorerPluginSettings = {
isEnabled: false,
},
},
confirmBeforeDelete: true,
currentView: TExplorerView.GRID,
titleWrapping: "normal",
enableClockUpdates: true,
Expand Down
6 changes: 6 additions & 0 deletions src/migrations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import Migrate_1_39_0 from "./migrate_1_39_0";
import Migrate_1_40_0 from "./migrate_1_40_0";
import Migrate_1_41_0 from "./migrate_1_41_0";
import Migrate_1_42_0 from "./migrate_1_42_0";
import Migrate_1_45_0 from "./migrate_1_45_0";

const migrations: TMigration[] = [
{
Expand Down Expand Up @@ -189,6 +190,11 @@ const migrations: TMigration[] = [
to: "1.42.0",
migrate: Migrate_1_42_0,
},
{
from: "1.44.6",
to: "1.45.0",
migrate: Migrate_1_45_0,
},
];

export const preformMigrations = (
Expand Down
4 changes: 2 additions & 2 deletions src/migrations/migrate_1_41_0.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { VaultExplorerPluginSettings } from "src/types";
import MigrationInterface from "./migration_interface";
import { VaultExplorerPluginSettings_1_40_2 } from "src/types/types-1.40.2";
import { VaultExplorerPluginSettings_1_41_1 } from "src/types/types-1.41.1";

export default class Migrate_1_41_0 implements MigrationInterface {
migrate(data: Record<string, unknown>) {
const typedData = data as unknown as VaultExplorerPluginSettings_1_40_2;
const newData: VaultExplorerPluginSettings = {
const newData: VaultExplorerPluginSettings_1_41_1 = {
...typedData,
properties: {
...typedData.properties,
Expand Down
4 changes: 2 additions & 2 deletions src/migrations/migrate_1_42_0.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { VaultExplorerPluginSettings } from "src/types";
import MigrationInterface from "./migration_interface";
import { VaultExplorerPluginSettings_1_41_1 } from "src/types/types-1.41.1";
import { VaultExplorerPluginSettings_1_44_6 } from "src/types/types-1.44.6";

export default class Migrate_1_42_0 implements MigrationInterface {
migrate(data: Record<string, unknown>) {
const typedData = data as unknown as VaultExplorerPluginSettings_1_41_1;
const newData: VaultExplorerPluginSettings = {
const newData: VaultExplorerPluginSettings_1_44_6 = {
...typedData,
properties: {
...typedData.properties,
Expand Down
30 changes: 30 additions & 0 deletions src/migrations/migrate_1_45_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { VaultExplorerPluginSettings_1_44_6 } from "src/types/types-1.44.6";
import MigrationInterface from "./migration_interface";
import { TExplorerView, VaultExplorerPluginSettings } from "src/types";

export default class Migrate_1_45_0 implements MigrationInterface {
migrate(data: Record<string, unknown>) {
const typedData = data as unknown as VaultExplorerPluginSettings_1_44_6;

let viewOrder = [];
if (typedData.views.grid.isEnabled) {
viewOrder.push(TExplorerView.GRID);
}
if (typedData.views.list.isEnabled) {
viewOrder.push(TExplorerView.LIST);
}
if (typedData.views.feed.isEnabled) {
viewOrder.push(TExplorerView.FEED);
}
if (typedData.views.table.isEnabled) {
viewOrder.push(TExplorerView.TABLE);
}

const newData: VaultExplorerPluginSettings = {
...typedData,
confirmBeforeDelete: true,
viewOrder,
};
return newData as unknown as Record<string, unknown>;
}
}
18 changes: 14 additions & 4 deletions src/obsidian/vault-explorer-settings-tab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,6 @@ export default class VaultExplorerSettingsTab extends PluginSettingTab {
this.app,
"datetime"
);
const checkboxProperties = getObsidianPropertiesByType(
this.app,
"checkbox"
);

new Setting(containerEl).setName("General").setHeading();

Expand Down Expand Up @@ -108,6 +104,20 @@ export default class VaultExplorerSettingsTab extends PluginSettingTab {
})
);

new Setting(containerEl).setName("Context menu").setHeading();

new Setting(containerEl)
.setName("Confirm before delete")
.setDesc("Ask for confirmation before deleting a file.")
.addToggle((toggle) =>
toggle
.setValue(this.plugin.settings.confirmBeforeDelete)
.onChange(async (value) => {
this.plugin.settings.confirmBeforeDelete = value;
await this.plugin.saveSettings();
})
);

new Setting(containerEl).setName("Filters").setHeading();

new Setting(containerEl).setName("Search filter").addToggle((toggle) =>
Expand Down
15 changes: 11 additions & 4 deletions src/svelte/app/components/feed-card.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts">
import { createEventDispatcher, onMount } from "svelte";
import { onMount } from "svelte";
import { CollapseStyle } from "src/types";
import EventManager from "src/event/event-manager";
import VaultExplorerPlugin from "src/main";
Expand Down Expand Up @@ -35,6 +35,7 @@
export let path: string;
export let createdMillis: number;
export let content: string | null;
export let enablePremiumFeatures: boolean;
let ref: HTMLElement | null = null;
let enableFileIcons = false;
Expand All @@ -45,8 +46,6 @@
let collapseStyle: CollapseStyle = "no-new-lines";
let currentLineClamp: number = lineClampLarge;
const dispatch = createEventDispatcher();
let plugin: VaultExplorerPlugin;
store.plugin.subscribe((p) => {
plugin = p;
Expand Down Expand Up @@ -147,7 +146,15 @@
function handleCardContextMenu(e: Event) {
const nativeEvent = e as MouseEvent;
openContextMenu(plugin, path, nativeEvent, {});
const { app, settings } = plugin;
openContextMenu(
nativeEvent,
path,
app,
settings,
enablePremiumFeatures,
{},
);
}
function handleCardMouseOver(e: MouseEvent) {
Expand Down
2 changes: 2 additions & 0 deletions src/svelte/app/components/feed-view.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
export let data: FileRenderData[] = [];
export let startIndex;
export let pageLength;
export let enablePremiumFeatures: boolean;
let filteredItems: FileRenderData[] = [];
Expand All @@ -23,6 +24,7 @@
<div class="vault-explorer-feed-view">
{#each filteredItems as fileRenderData (fileRenderData.id)}
<FeedCard
{enablePremiumFeatures}
displayName={fileRenderData.displayName}
extension={fileRenderData.extension}
baseName={fileRenderData.baseName}
Expand Down
23 changes: 17 additions & 6 deletions src/svelte/app/components/grid-card.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
export let custom2: string | null;
export let custom3: string | null;
export let coverImageFit: CoverImageFit;
export let enablePremiumFeatures: boolean;
let plugin: VaultExplorerPlugin;
let enableFileIcons: boolean = false;
Expand Down Expand Up @@ -108,12 +109,22 @@
const nativeEvent = e as MouseEvent;
const showCoverImageOptions = path.endsWith(".md");
openContextMenu(plugin, path, nativeEvent, {
coverImageFit: showCoverImageOptions ? coverImageFit : undefined,
onCoverImageFitChange: showCoverImageOptions
? handleCoverImageFitChange
: undefined,
});
const { app, settings } = plugin;
openContextMenu(
nativeEvent,
path,
app,
settings,
enablePremiumFeatures,
{
coverImageFit: showCoverImageOptions
? coverImageFit
: undefined,
onCoverImageFitChange: showCoverImageOptions
? handleCoverImageFitChange
: undefined,
},
);
}
function handleCardMouseOver(e: MouseEvent) {
Expand Down
2 changes: 2 additions & 0 deletions src/svelte/app/components/grid-view.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
export let data: FileRenderData[];
export let startIndex: number;
export let pageLength: number;
export let enablePremiumFeatures: boolean;
let filteredItems: FileRenderData[] = [];
Expand All @@ -24,6 +25,7 @@
<div class="vault-explorer-grid-view__container">
{#each filteredItems as fileRenderData (fileRenderData.id)}
<GridCard
{enablePremiumFeatures}
displayName={fileRenderData.displayName}
path={fileRenderData.path}
coverImageFit={fileRenderData.coverImageFit}
Expand Down
11 changes: 10 additions & 1 deletion src/svelte/app/components/list-item.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
export let tags: string[] | null;
export let showTags: boolean;
export let isSmallScreenSize: boolean;
export let enablePremiumFeatures: boolean;
let enableFileIcons: boolean = false;
let ref: HTMLElement | null = null;
Expand Down Expand Up @@ -75,7 +76,15 @@
function handleItemContextMenu(e: Event) {
const nativeEvent = e as MouseEvent;
openContextMenu(plugin, path, nativeEvent, {});
const { app, settings } = plugin;
openContextMenu(
nativeEvent,
path,
app,
settings,
enablePremiumFeatures,
{},
);
}
function handleItemMouseOver(e: MouseEvent) {
Expand Down
2 changes: 2 additions & 0 deletions src/svelte/app/components/list-view.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
export let pageLength: number;
export let showTags: boolean;
export let isSmallScreenSize: boolean;
export let enablePremiumFeatures: boolean;
let filteredItems: FileRenderData[] = [];
Expand All @@ -26,6 +27,7 @@
<div class="vault-explorer-list-view">
{#each filteredItems as fileRenderData (fileRenderData.id)}
<ListItem
{enablePremiumFeatures}
{showTags}
displayName={fileRenderData.displayName}
extension={fileRenderData.extension}
Expand Down
15 changes: 11 additions & 4 deletions src/svelte/app/components/table-view.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts">
import { createEventDispatcher, onMount } from "svelte";
import { onMount } from "svelte";
import { openContextMenu } from "../services/context-menu";
import { formatAsBearTimeString } from "../services/time-string";
import { FileRenderData } from "../types";
Expand All @@ -25,6 +25,7 @@
export let data: FileRenderData[];
export let startIndex: number;
export let pageLength: number;
export let enablePremiumFeatures: boolean;
let filteredItems: FileRenderData[] = [];
let plugin: VaultExplorerPlugin | null = null;
Expand Down Expand Up @@ -54,8 +55,6 @@
},
];
const dispatch = createEventDispatcher();
store.plugin.subscribe((p) => {
plugin = p;
enableFileIcons = plugin.settings.enableFileIcons;
Expand Down Expand Up @@ -103,7 +102,15 @@
if (plugin === null) return;
const nativeEvent = e as MouseEvent;
openContextMenu(plugin, path, nativeEvent, {});
const { app, settings } = plugin;
openContextMenu(
nativeEvent,
path,
app,
settings,
enablePremiumFeatures,
{},
);
}
function getValue(item: FileRenderData, column: TColumn): unknown {
Expand Down
28 changes: 24 additions & 4 deletions src/svelte/app/index.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import Flex from "../shared/components/flex.svelte";
import TabList from "../shared/components/tab-list.svelte";
import Tab from "../shared/components/tab.svelte";
import { Notice, TFile } from "obsidian";
import { TFile } from "obsidian";
import {
TCustomFilter,
TSearchFilter,
Expand Down Expand Up @@ -57,7 +57,7 @@
} from "./services/favorites-store";
import TableView from "./components/table-view.svelte";
import Spacer from "../shared/components/spacer.svelte";
import Divider from "../shared/components/divider.svelte";
import License from "../shared/services/license";
// ============================================
// Variables
Expand Down Expand Up @@ -104,10 +104,18 @@
let viewOrder: TExplorerView[] = [];
let showListViewTags: boolean = false;
let isSmallScreenSize: boolean = false;
let enablePremiumFeatures: boolean = false;
// ============================================
// Lifecycle hooks
// ============================================
License.getInstance()
.getHasValidKeyStore()
.subscribe((hasValidKey) => {
enablePremiumFeatures = hasValidKey;
});
randomFileSortStore.subscribe((value) => {
randomSortCache = value;
});
Expand Down Expand Up @@ -967,6 +975,7 @@
data={renderData}
{startIndex}
{pageLength}
{enablePremiumFeatures}
on:coverImageFitChange={handleCoverImageFitChange}
/>
{:else if currentView === "list"}
Expand All @@ -976,11 +985,22 @@
showTags={showListViewTags}
{startIndex}
{pageLength}
{enablePremiumFeatures}
/>
{:else if currentView === "table"}
<TableView data={renderData} {startIndex} {pageLength} />
<TableView
data={renderData}
{startIndex}
{pageLength}
{enablePremiumFeatures}
/>
{:else if currentView === "feed"}
<FeedView data={renderData} {startIndex} {pageLength} />
<FeedView
data={renderData}
{startIndex}
{pageLength}
{enablePremiumFeatures}
/>
{/if}
<PaginationIndicator
{startIndex}
Expand Down
Loading

0 comments on commit d392918

Please sign in to comment.