mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-04-19 22:19:49 -04:00
* WIP * Some minor fixes for light theme - Fix `useIsDark` not reading the initial theme value (only reacting to theme changes) - Fix `Inspector` always showing a dark image when no item was selected - Fix `Thumb` video extension using black text on light theme * Improve form error messages - Fix `addLocationDialog` not registering the path input - Remove `@hookform/error-message` * Fix Dialog not respecting max-width - Fix ErrorMessage animation jumping * A lot of misc fixes - Implement an `useExplorerItemData` (cleaner fix for thumbnail flicker) - Fix broken image showing for `Thumb` due a rece condition when props are updated - Implement an `ExternalObject` component that hacks an alternative for `onLoad` and `onError` events for <object> - Fix `Overview` broken layout when `Inspector` is open and window is small - Improve `IndexerRuleEditor` UX in `AddLocationDialog` - Improve the way `IndexerRuleEditor` handles rules deletion - Fix `IndexerRuleEditor` closing the the new rule form even when the rule creation fails - Add an editable prop to `IndexerRuleEditor` to disable all editable functions - Fix `getIcon` fallbacking to Document instead of the dark version of an icon if it exists - Add some missing colors to white theme * Format * Fix Backup restore key dialog not resetting after error * Feedback * Format * Normalize imports * Fix ColorPicker export * Fix Thumb video ext not showing in MediaView with show square thumbnails - Fix AddLocationDialog Error resetting when changing IndexRules
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
import { proxy, useSnapshot } from 'valtio';
|
|
import { ExplorerItem, Ordering } from '@sd/client';
|
|
import { resetStore } from '@sd/client/src/stores/util';
|
|
|
|
type UnionKeys<T> = T extends any ? keyof T : never;
|
|
|
|
export type ExplorerLayoutMode = 'rows' | 'grid' | 'columns' | 'media';
|
|
|
|
export enum ExplorerKind {
|
|
Location,
|
|
Tag,
|
|
Space
|
|
}
|
|
|
|
export type CutCopyType = 'Cut' | 'Copy';
|
|
|
|
export type ExplorerOrderByKeys = UnionKeys<Ordering> | 'none';
|
|
|
|
export type ExplorerDirection = 'asc' | 'desc';
|
|
|
|
const state = {
|
|
locationId: null as number | null,
|
|
layoutMode: 'grid' as ExplorerLayoutMode,
|
|
gridItemSize: 100,
|
|
listItemSize: 40,
|
|
selectedRowIndex: 1 as number | null,
|
|
showBytesInGridView: true,
|
|
tagAssignMode: false,
|
|
showInspector: false,
|
|
multiSelectIndexes: [] as number[],
|
|
contextMenuObjectId: null as number | null,
|
|
contextMenuActiveObject: null as object | null,
|
|
newThumbnails: {} as Record<string, boolean | undefined>,
|
|
cutCopyState: {
|
|
sourcePath: '', // this is used solely for preventing copy/cutting to the same path (as that will truncate the file)
|
|
sourceLocationId: 0,
|
|
sourcePathId: 0,
|
|
actionType: 'Cut',
|
|
active: false
|
|
},
|
|
quickViewObject: null as ExplorerItem | null,
|
|
isRenaming: false,
|
|
mediaColumns: 8,
|
|
mediaAspectSquare: true,
|
|
orderBy: 'dateCreated' as ExplorerOrderByKeys,
|
|
orderByDirection: 'desc' as ExplorerDirection,
|
|
groupBy: 'none'
|
|
};
|
|
|
|
// Keep the private and use `useExplorerState` or `getExplorerStore` or you will get production build issues.
|
|
const explorerStore = proxy({
|
|
...state,
|
|
reset: () => resetStore(explorerStore, state),
|
|
addNewThumbnail: (casId: string) => {
|
|
explorerStore.newThumbnails[casId] = true;
|
|
}
|
|
});
|
|
|
|
export function useExplorerStore() {
|
|
return useSnapshot(explorerStore);
|
|
}
|
|
|
|
export function getExplorerStore() {
|
|
return explorerStore;
|
|
}
|