Enhance task management by adding skip functionality in TaskWorkspace and TaskPage. Implement storage methods for tracking skipped tasks, allowing users to navigate to the next task or the first skipped task seamlessly. Update polling manager configuration for improved performance.
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit
This commit is contained in:
@@ -16,8 +16,9 @@ export const STORAGE_KEYS = {
|
||||
SELECTED_TASK_ID: 'challengeSelectedTaskId',
|
||||
} as const
|
||||
|
||||
// Вспомогательная функция для ключа прогресса цепочки
|
||||
// Вспомогательные функции для ключей
|
||||
const getFurthestTaskKey = (chainId: string) => `challengeFurthestTask_${chainId}`
|
||||
const getSkippedTasksKey = (chainId: string) => `challengeSkippedTasks_${chainId}`
|
||||
|
||||
// Получение значений
|
||||
export const storage = {
|
||||
@@ -121,11 +122,11 @@ export const storage = {
|
||||
// Очистка всех прогрессов по цепочкам
|
||||
clearAllChainProgress: (): void => {
|
||||
if (!isBrowser()) return
|
||||
// Перебираем все ключи localStorage и удаляем те, что начинаются с challengeFurthestTask_
|
||||
// Перебираем все ключи localStorage и удаляем те, что начинаются с challengeFurthestTask_ или challengeSkippedTasks_
|
||||
const keysToRemove: string[] = []
|
||||
for (let i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i)
|
||||
if (key && key.startsWith('challengeFurthestTask_')) {
|
||||
if (key && (key.startsWith('challengeFurthestTask_') || key.startsWith('challengeSkippedTasks_'))) {
|
||||
keysToRemove.push(key)
|
||||
}
|
||||
}
|
||||
@@ -161,5 +162,43 @@ export const storage = {
|
||||
if (!isBrowser()) return
|
||||
localStorage.removeItem(getFurthestTaskKey(chainId))
|
||||
},
|
||||
|
||||
// Получение пропущенных заданий для цепочки
|
||||
getSkippedTasks: (chainId: string): string[] => {
|
||||
if (!isBrowser()) return []
|
||||
const value = localStorage.getItem(getSkippedTasksKey(chainId))
|
||||
return value ? JSON.parse(value) : []
|
||||
},
|
||||
|
||||
// Добавление задания в список пропущенных
|
||||
addSkippedTask: (chainId: string, taskId: string): void => {
|
||||
if (!isBrowser()) return
|
||||
const skipped = storage.getSkippedTasks(chainId)
|
||||
if (!skipped.includes(taskId)) {
|
||||
skipped.push(taskId)
|
||||
localStorage.setItem(getSkippedTasksKey(chainId), JSON.stringify(skipped))
|
||||
}
|
||||
},
|
||||
|
||||
// Удаление задания из списка пропущенных (когда оно выполнено)
|
||||
removeSkippedTask: (chainId: string, taskId: string): void => {
|
||||
if (!isBrowser()) return
|
||||
const skipped = storage.getSkippedTasks(chainId)
|
||||
const filtered = skipped.filter(id => id !== taskId)
|
||||
localStorage.setItem(getSkippedTasksKey(chainId), JSON.stringify(filtered))
|
||||
},
|
||||
|
||||
// Проверка, пропущено ли задание
|
||||
isTaskSkipped: (chainId: string, taskId: string): boolean => {
|
||||
if (!isBrowser()) return false
|
||||
const skipped = storage.getSkippedTasks(chainId)
|
||||
return skipped.includes(taskId)
|
||||
},
|
||||
|
||||
// Очистка всех пропущенных заданий цепочки
|
||||
clearSkippedTasks: (chainId: string): void => {
|
||||
if (!isBrowser()) return
|
||||
localStorage.removeItem(getSkippedTasksKey(chainId))
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user