mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-11-04 13:31:13 +00:00
fix metadata and style dialogs
This commit is contained in:
@@ -4,12 +4,12 @@
|
||||
import { Textarea } from '$lib/components/ui/textarea';
|
||||
import { Label } from '$lib/components/ui/label/index.js';
|
||||
import * as Popover from '$lib/components/ui/popover';
|
||||
import { dbUtils } from '$lib/db';
|
||||
import { Save } from '@lucide/svelte';
|
||||
import { ListFileItem, ListTrackItem, type ListItem } from '../file-list';
|
||||
import { GPXTreeElement, Track, type AnyGPXTreeElement, Waypoint, GPXFile } from 'gpx';
|
||||
import { i18n } from '$lib/i18n.svelte';
|
||||
import { editMetadata } from '$lib/components/file-list/metadata/utils.svelte';
|
||||
import { fileActionManager } from '$lib/logic/file-action-manager';
|
||||
|
||||
let {
|
||||
node,
|
||||
@@ -53,7 +53,7 @@
|
||||
<Button
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
dbUtils.applyToFile(item.getFileId(), (file) => {
|
||||
fileActionManager.applyToFile(item.getFileId(), (file) => {
|
||||
if (item instanceof ListFileItem && node instanceof GPXFile) {
|
||||
file.metadata.name = name;
|
||||
file.metadata.desc = description;
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
import { Label } from '$lib/components/ui/label/index.js';
|
||||
import { Slider } from '$lib/components/ui/slider';
|
||||
import * as Popover from '$lib/components/ui/popover';
|
||||
import { dbUtils, getFile, settings } from '$lib/db';
|
||||
import { Save } from '@lucide/svelte';
|
||||
import {
|
||||
ListFileItem,
|
||||
@@ -12,10 +11,14 @@
|
||||
type ListItem,
|
||||
} from '$lib/components/file-list/file-list';
|
||||
import { editStyle } from '$lib/components/file-list/style/utils.svelte';
|
||||
import { selection } from '../Selection';
|
||||
import { gpxLayers } from '$lib/stores';
|
||||
import { i18n } from '$lib/i18n.svelte';
|
||||
import type { LineStyleExtension } from 'gpx';
|
||||
import { settings } from '$lib/logic/settings';
|
||||
import { selection } from '$lib/logic/selection';
|
||||
import { fileStateCollection } from '$lib/logic/file-state';
|
||||
import { gpxLayers } from '$lib/components/map/gpx-layer/gpx-layers';
|
||||
import { untrack } from 'svelte';
|
||||
import { fileActions } from '$lib/logic/file-actions';
|
||||
|
||||
let {
|
||||
item,
|
||||
@@ -40,8 +43,8 @@
|
||||
|
||||
$selection.forEach((item) => {
|
||||
if (item instanceof ListFileItem) {
|
||||
let file = getFile(item.getFileId());
|
||||
let layer = gpxLayers.get(item.getFileId());
|
||||
let file = fileStateCollection.getFile(item.getFileId());
|
||||
let layer = gpxLayers.getLayer(item.getFileId());
|
||||
if (file && layer) {
|
||||
let style = file.getStyle();
|
||||
color = layer.layerColor;
|
||||
@@ -53,8 +56,8 @@
|
||||
}
|
||||
}
|
||||
} else if (item instanceof ListTrackItem) {
|
||||
let file = getFile(item.getFileId());
|
||||
let layer = gpxLayers.get(item.getFileId());
|
||||
let file = fileStateCollection.getFile(item.getFileId());
|
||||
let layer = gpxLayers.getLayer(item.getFileId());
|
||||
if (file && layer) {
|
||||
color = layer.layerColor;
|
||||
let track = file.trk[item.getTrackIndex()];
|
||||
@@ -81,7 +84,7 @@
|
||||
|
||||
$effect(() => {
|
||||
if ($selection && open) {
|
||||
setStyleInputs();
|
||||
untrack(() => setStyleInputs());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -102,9 +105,9 @@
|
||||
if (widthChanged) {
|
||||
style['gpx_style:width'] = width;
|
||||
}
|
||||
dbUtils.setStyleToSelection(style);
|
||||
fileActions.setStyleToSelection(style);
|
||||
|
||||
if (item instanceof ListFileItem && $selection.size === gpxLayers.size) {
|
||||
if (item instanceof ListFileItem && $selection.size === fileStateCollection.size) {
|
||||
if (style['gpx_style:opacity']) {
|
||||
$defaultOpacity = style['gpx_style:opacity'];
|
||||
}
|
||||
|
||||
@@ -35,6 +35,10 @@ export class GPXLayerCollection {
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
getLayer(fileId: string): GPXLayer | undefined {
|
||||
return this._layers.get(fileId);
|
||||
}
|
||||
}
|
||||
|
||||
export const gpxLayers = new GPXLayerCollection();
|
||||
|
||||
@@ -153,7 +153,7 @@ export class FileActionManager {
|
||||
.filter((file) => file !== undefined) as GPXFile[];
|
||||
updatedFileIds = updatedFiles.map((file) => file._data.id);
|
||||
|
||||
selection.update(updatedFiles, deletedFileIds);
|
||||
selection.updateFiles(updatedFiles, deletedFileIds);
|
||||
|
||||
// @ts-ignore
|
||||
return db.transaction('rw', db.fileids, db.files, async () => {
|
||||
|
||||
@@ -33,6 +33,10 @@ export class Selection {
|
||||
return this._selection.subscribe(run, invalidate);
|
||||
}
|
||||
|
||||
update(updater: (value: SelectionTreeType) => SelectionTreeType) {
|
||||
this._selection.update(updater);
|
||||
}
|
||||
|
||||
selectItem(item: ListItem) {
|
||||
this._selection.update(($selection) => {
|
||||
$selection.clear();
|
||||
@@ -119,7 +123,7 @@ export class Selection {
|
||||
});
|
||||
}
|
||||
|
||||
update(updatedFiles: GPXFile[], deletedFileIds: string[]) {
|
||||
updateFiles(updatedFiles: GPXFile[], deletedFileIds: string[]) {
|
||||
let removedItems: ListItem[] = [];
|
||||
applyToOrderedItemsFromFile(get(this._selection).getSelected(), (fileId, level, items) => {
|
||||
let file = updatedFiles.find((file) => file._data.id === fileId);
|
||||
|
||||
Reference in New Issue
Block a user