6.11.0: Фикс навигации и переключение типов задач
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m8s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m8s
This commit is contained in:
@@ -131,9 +131,6 @@ function AppContent() {
|
||||
// Счётчик для сброса формы товара при каждом открытии
|
||||
const [shoppingItemFormKey, setShoppingItemFormKey] = useState(0)
|
||||
|
||||
// Модальное окно выбора типа задачи
|
||||
const [showAddModal, setShowAddModal] = useState(false)
|
||||
|
||||
// Ref для функции открытия модала добавления записи в CurrentWeek
|
||||
const currentWeekAddModalRef = useRef(null)
|
||||
|
||||
@@ -334,9 +331,12 @@ function AppContent() {
|
||||
if (savedTab && validTabs.includes(savedTab) && mainTabs.includes(savedTab)) {
|
||||
setActiveTab(savedTab)
|
||||
setLoadedTabs(prev => ({ ...prev, [savedTab]: true }))
|
||||
// Сохраняем таб в history state для корректной работы кнопки "назад"
|
||||
window.history.replaceState({ tab: savedTab }, '', window.location.href)
|
||||
} else {
|
||||
// Если нет сохранённого таба — активируем current по умолчанию
|
||||
setLoadedTabs(prev => ({ ...prev, current: true }))
|
||||
window.history.replaceState({ tab: 'current' }, '', window.location.href)
|
||||
}
|
||||
// Очищаем URL от параметров таба, если это основной таб
|
||||
if (tabFromUrl && mainTabs.includes(tabFromUrl)) {
|
||||
@@ -847,9 +847,9 @@ function AppContent() {
|
||||
setSelectedProject(null)
|
||||
clearUrl(event.state.tab)
|
||||
} else {
|
||||
// Если state пустой, используем сохраненный таб из localStorage
|
||||
// Если state пустой, используем сохраненный таб из localStorage (только основные табы)
|
||||
const savedTab = window.localStorage?.getItem('activeTab')
|
||||
const validMainTab = savedTab && validTabs.includes(savedTab) ? savedTab : 'current'
|
||||
const validMainTab = savedTab && mainTabs.includes(savedTab) ? savedTab : 'current'
|
||||
setActiveTab(validMainTab)
|
||||
setTabParams({})
|
||||
markTabAsLoaded(validMainTab)
|
||||
@@ -911,8 +911,8 @@ function AppContent() {
|
||||
|
||||
{
|
||||
// Для task-form и wishlist-form явно удаляем параметры, только если нет никаких параметров
|
||||
// task-form может иметь taskId (редактирование), wishlistId (создание из желания), returnTo (возврат после создания), или isTest (создание теста)
|
||||
const isTaskFormWithNoParams = tab === 'task-form' && params.taskId === undefined && params.wishlistId === undefined && params.returnTo === undefined && params.isTest === undefined && params.isPurchase === undefined
|
||||
// task-form может иметь taskId (редактирование), wishlistId (создание из желания), returnTo (возврат после создания)
|
||||
const isTaskFormWithNoParams = tab === 'task-form' && params.taskId === undefined && params.wishlistId === undefined && params.returnTo === undefined
|
||||
// Проверяем, что boardId не null и не undefined (null означает "нет доски", но это валидное значение)
|
||||
const hasBoardId = params.boardId !== null && params.boardId !== undefined
|
||||
const isWishlistFormWithNoParams = tab === 'wishlist-form' && params.wishlistId === undefined && params.newTaskId === undefined && !hasBoardId
|
||||
@@ -1025,24 +1025,9 @@ function AppContent() {
|
||||
}
|
||||
}
|
||||
|
||||
// Обработчики для кнопки добавления задачи
|
||||
// Обработчик для кнопки добавления задачи
|
||||
const handleAddClick = () => {
|
||||
setShowAddModal(true)
|
||||
}
|
||||
|
||||
const handleAddTask = () => {
|
||||
setShowAddModal(false)
|
||||
handleNavigate('task-form', { taskId: undefined, isTest: false })
|
||||
}
|
||||
|
||||
const handleAddTest = () => {
|
||||
setShowAddModal(false)
|
||||
handleNavigate('task-form', { taskId: undefined, isTest: true })
|
||||
}
|
||||
|
||||
const handleAddPurchase = () => {
|
||||
setShowAddModal(false)
|
||||
handleNavigate('task-form', { taskId: undefined, isPurchase: true })
|
||||
handleNavigate('task-form', { taskId: undefined })
|
||||
}
|
||||
|
||||
// Обработчик навигации для компонентов
|
||||
@@ -1308,13 +1293,11 @@ function AppContent() {
|
||||
{loadedTabs['task-form'] && (
|
||||
<div className={getTabContainerClasses('task-form')}>
|
||||
<div className={getInnerContainerClasses('task-form')}>
|
||||
<TaskForm
|
||||
key={tabParams.taskId || `new-${tabParams.isTest ? 'test' : tabParams.isPurchase ? 'purchase' : 'task'}`}
|
||||
<TaskForm
|
||||
key={tabParams.taskId || 'new-task'}
|
||||
onNavigate={handleNavigate}
|
||||
taskId={tabParams.taskId}
|
||||
wishlistId={tabParams.wishlistId}
|
||||
isTest={tabParams.isTest}
|
||||
isPurchase={tabParams.isPurchase}
|
||||
returnTo={tabParams.returnTo}
|
||||
returnWishlistId={tabParams.returnWishlistId}
|
||||
/>
|
||||
@@ -1779,51 +1762,6 @@ function AppContent() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Модальное окно выбора типа задачи */}
|
||||
{showAddModal && (
|
||||
<div className="task-add-modal-overlay" onClick={() => setShowAddModal(false)}>
|
||||
<div className="task-add-modal" onClick={(e) => e.stopPropagation()}>
|
||||
<div className="task-add-modal-header">
|
||||
<h3>Что добавить?</h3>
|
||||
</div>
|
||||
<div className="task-add-modal-buttons">
|
||||
<button
|
||||
className="task-add-modal-button task-add-modal-button-task"
|
||||
onClick={handleAddTask}
|
||||
>
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
<path d="M9 11l3 3L22 4"></path>
|
||||
<path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path>
|
||||
</svg>
|
||||
Задача
|
||||
</button>
|
||||
<button
|
||||
className="task-add-modal-button task-add-modal-button-test"
|
||||
onClick={handleAddTest}
|
||||
>
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path>
|
||||
<path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path>
|
||||
<path d="M8 7h6"></path>
|
||||
<path d="M8 11h4"></path>
|
||||
</svg>
|
||||
Тест
|
||||
</button>
|
||||
<button
|
||||
className="task-add-modal-button task-add-modal-button-purchase"
|
||||
onClick={handleAddPurchase}
|
||||
>
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
<circle cx="9" cy="21" r="1"></circle>
|
||||
<circle cx="20" cy="21" r="1"></circle>
|
||||
<path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path>
|
||||
</svg>
|
||||
Закупка
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user