mirror of
https://github.com/stackblitz-labs/bolt.diy
synced 2025-06-26 18:26:38 +00:00
- Move stores/utils/types to their relative directories (i.e chat stores in chat directory) - Move utility files to shared/utils - Move component files to shared/components - Move type definitions to shared/types - Move stores to shared/stores - Update import paths across the project
97 lines
3.0 KiB
TypeScript
97 lines
3.0 KiB
TypeScript
import {
|
|
getLockedItems,
|
|
isFileLocked as isFileLockedInternal,
|
|
isFolderLocked as isFolderLockedInternal,
|
|
isPathInLockedFolder,
|
|
} from '~/shared/lib/persistence/lockedFiles';
|
|
import { createScopedLogger } from './logger';
|
|
|
|
const logger = createScopedLogger('FileLocks');
|
|
|
|
/**
|
|
* Get the current chat ID from the URL
|
|
* @returns The current chat ID or a default value if not found
|
|
*/
|
|
export function getCurrentChatId(): string {
|
|
try {
|
|
if (typeof window !== 'undefined') {
|
|
// Extract chat ID from URL (format: /chat/123)
|
|
const match = window.location.pathname.match(/\/chat\/([^/]+)/);
|
|
|
|
if (match && match[1]) {
|
|
return match[1];
|
|
}
|
|
}
|
|
|
|
// Return a default chat ID if none is found
|
|
return 'default';
|
|
} catch (error) {
|
|
logger.error('Failed to get current chat ID', error);
|
|
return 'default';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if a file is locked directly from localStorage
|
|
* This avoids circular dependencies between components and stores
|
|
* @param filePath The path of the file to check
|
|
* @param chatId Optional chat ID (will be extracted from URL if not provided)
|
|
*/
|
|
export function isFileLocked(filePath: string, chatId?: string): { locked: boolean; lockedBy?: string } {
|
|
try {
|
|
const currentChatId = chatId || getCurrentChatId();
|
|
|
|
// Use the internal function from lockedFiles.ts
|
|
const result = isFileLockedInternal(currentChatId, filePath);
|
|
|
|
// If the file itself is not locked, check if it's in a locked folder
|
|
if (!result.locked) {
|
|
const folderLockResult = isPathInLockedFolder(currentChatId, filePath);
|
|
|
|
if (folderLockResult.locked) {
|
|
return folderLockResult;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
} catch (error) {
|
|
logger.error('Failed to check if file is locked', error);
|
|
return { locked: false };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if a folder is locked directly from localStorage
|
|
* This avoids circular dependencies between components and stores
|
|
* @param folderPath The path of the folder to check
|
|
* @param chatId Optional chat ID (will be extracted from URL if not provided)
|
|
*/
|
|
export function isFolderLocked(folderPath: string, chatId?: string): { locked: boolean; lockedBy?: string } {
|
|
try {
|
|
const currentChatId = chatId || getCurrentChatId();
|
|
|
|
// Use the internal function from lockedFiles.ts
|
|
return isFolderLockedInternal(currentChatId, folderPath);
|
|
} catch (error) {
|
|
logger.error('Failed to check if folder is locked', error);
|
|
return { locked: false };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if any files are locked in the current chat
|
|
* @param chatId Optional chat ID (will be extracted from URL if not provided)
|
|
* @returns True if any files or folders are locked
|
|
*/
|
|
export function hasLockedItems(chatId?: string): boolean {
|
|
try {
|
|
const currentChatId = chatId || getCurrentChatId();
|
|
const lockedItems = getLockedItems();
|
|
|
|
return lockedItems.some((item) => item.chatId === currentChatId);
|
|
} catch (error) {
|
|
logger.error('Failed to check for locked items', error);
|
|
return false;
|
|
}
|
|
}
|