diff --git a/ui/src/store/base.model.ts b/ui/src/store/base.model.ts index b7190a55..33b140f4 100644 --- a/ui/src/store/base.model.ts +++ b/ui/src/store/base.model.ts @@ -27,6 +27,12 @@ export interface StoreError { statusCode?: string } +export interface ListState { + listFormCode: string + layout: 'grid' | 'card' | 'pivot' + cardLayoutColumn?: number +} + export interface BaseStoreModel { common: { currentRouteKey: string @@ -38,6 +44,9 @@ export interface BaseStoreModel { warning: string[] aiPosts: Message[] } + lists: { + states: ListState[] + } } export interface BaseStoreActions { @@ -53,6 +62,9 @@ export interface BaseStoreActions { addAiPost: Action setAiPosts: Action } + lists: { + setStates: Action + } } export type BaseModel = BaseStoreModel & BaseStoreActions @@ -65,6 +77,9 @@ const initialState: BaseStoreModel = { warning: [], aiPosts: [], }, + lists: { + states: [], + }, } export const baseModel: BaseModel = { @@ -94,11 +109,21 @@ export const baseModel: BaseModel = { }), addAiPost: action((state, payload) => { state.aiPosts = [...state.aiPosts, payload] - localStorage.setItem('AiPosts', JSON.stringify(state.aiPosts)) }), - + setAiPosts: action((state, payload) => { state.aiPosts = payload - }) + }), + }, + lists: { + ...initialState.lists, + setStates: action((state, payload) => { + const stateId = state.states.findIndex((s) => s.listFormCode === payload.listFormCode) + if (stateId !== -1) { + state.states[stateId] = payload + } else { + state.states = [...state.states, payload] + } + }), }, } diff --git a/ui/src/store/store.ts b/ui/src/store/store.ts index b77998f0..4b1f9033 100644 --- a/ui/src/store/store.ts +++ b/ui/src/store/store.ts @@ -65,7 +65,7 @@ export const store = createStore( admin: adminModel, }, { - allow: ['auth', 'theme', 'locale'], + allow: ['auth', 'theme', 'locale', 'base'], storage: 'localStorage', }, ), diff --git a/ui/src/views/list/Card.tsx b/ui/src/views/list/Card.tsx index 1644e256..6a01a7ef 100644 --- a/ui/src/views/list/Card.tsx +++ b/ui/src/views/list/Card.tsx @@ -19,6 +19,7 @@ import { useLookupDataSource } from '../form/useLookupDataSource' import { Container, Loading } from '@/components/shared' import WidgetGroup from '@/components/common/WidgetGroup' import { GridExtraFilterState } from './Utils' +import { useStoreActions, useStoreState } from '@/store/store' interface CardProps { listFormCode: string @@ -203,6 +204,9 @@ const Card = (props: CardProps) => { const [loading, setLoading] = useState(false) const [extraFilters, setExtraFilters] = useState([]) + const { states } = useStoreState((state) => state.base.lists) + const { setStates } = useStoreActions((a) => a.base.lists) + const lookupCache = useRef>(new Map()) const getCachedLookupDataSource = useCallback( (editorOptions: any, colData: any) => { @@ -272,8 +276,7 @@ const Card = (props: CardProps) => { newParams.delete('filter') } - setUrlSearchParams(newParams) // ✅ state güncelleniyor - console.log('Applied filter:', filter) + setUrlSearchParams(newParams) }, [gridDto, urlSearchParams, searchText], ) @@ -283,7 +286,12 @@ const Card = (props: CardProps) => { const dataSource = createSelectDataSource(gridDto.gridOptions, listFormCode, urlSearchParams) setGridDataSource(dataSource) - setLayoutCount(gridDto.gridOptions.layoutDto.cardLayoutColumn || 4) + const listFormStates = states.find((a) => a.listFormCode === listFormCode) + if (listFormStates) { + setLayoutCount(listFormStates.cardLayoutColumn || 4) + } else { + setLayoutCount(gridDto.gridOptions.layoutDto.cardLayoutColumn || 4) + } } }, [gridDto, listFormCode, urlSearchParams, createSelectDataSource]) @@ -367,7 +375,10 @@ const Card = (props: CardProps) => { size="xs" variant={layoutCount === 1 ? 'solid' : 'default'} className="text-sm" - onClick={() => setLayoutCount(1)} + onClick={() => { + setLayoutCount(1) + setStates({ listFormCode, layout: 'card', cardLayoutColumn: 1 }) + }} title="1 Sütunda Göster" > 1 @@ -376,7 +387,10 @@ const Card = (props: CardProps) => { size="xs" variant={layoutCount === 2 ? 'solid' : 'default'} className="text-sm" - onClick={() => setLayoutCount(2)} + onClick={() => { + setLayoutCount(2) + setStates({ listFormCode, layout: 'card', cardLayoutColumn: 2 }) + }} title="2 Sütunda Göster" > 2 @@ -385,7 +399,10 @@ const Card = (props: CardProps) => { size="xs" variant={layoutCount === 3 ? 'solid' : 'default'} className="text-sm" - onClick={() => setLayoutCount(3)} + onClick={() => { + setLayoutCount(3) + setStates({ listFormCode, layout: 'card', cardLayoutColumn: 3 }) + }} title="3 Sütunda Göster" > 3 @@ -394,7 +411,10 @@ const Card = (props: CardProps) => { size="xs" variant={layoutCount === 4 ? 'solid' : 'default'} className="text-sm" - onClick={() => setLayoutCount(4)} + onClick={() => { + setLayoutCount(4) + setStates({ listFormCode, layout: 'card', cardLayoutColumn: 4 }) + }} title="4 Sütunda Göster" > 4 @@ -403,7 +423,10 @@ const Card = (props: CardProps) => { size="xs" variant={layoutCount === 5 ? 'solid' : 'default'} className="text-sm" - onClick={() => setLayoutCount(5)} + onClick={() => { + setLayoutCount(5) + setStates({ listFormCode, layout: 'card', cardLayoutColumn: 5 }) + }} title="5 Sütunda Göster" > 5 diff --git a/ui/src/views/list/List.tsx b/ui/src/views/list/List.tsx index 244ffa4a..2d7cf37e 100644 --- a/ui/src/views/list/List.tsx +++ b/ui/src/views/list/List.tsx @@ -3,7 +3,7 @@ import { useEffect, useState } from 'react' import Container from '@/components/shared/Container' import Grid from './Grid' import { FaList, FaTable, FaTh, FaUser } from 'react-icons/fa' -import { useStoreState } from '@/store/store' +import { useStoreActions, useStoreState } from '@/store/store' import classNames from 'classnames' import { useLocalization } from '@/utils/hooks/useLocalization' import { GridDto } from '@/proxy/form/models' @@ -19,11 +19,15 @@ const List = () => { const { translate } = useLocalization() const [searchParams] = useSearchParams() const listFormCode = params?.listFormCode ?? '' - const [viewMode, setViewMode] = useState<'grid' | 'card' | 'pivot'>() const mode = useStoreState((state) => state.theme.mode) + const [viewMode, setViewMode] = useState<'grid' | 'card' | 'pivot'>() + const [gridDto, setGridDto] = useState() const MenuIcon = useCurrentMenuIcon('w-5 h-5') + const { states } = useStoreState((state) => state.base.lists) + const { setStates } = useStoreActions((a) => a.base.lists) + const initializeGridAsync = async () => { const response = await getList({ listFormCode }) setGridDto(response.data) @@ -38,7 +42,13 @@ const List = () => { return } - setViewMode(gridDto?.gridOptions?.layoutDto.defaultLayout) + //base içerisine kaydedilen state içerisinden bakılacak + const listFormStates = states.find((a) => a.listFormCode === listFormCode) + if (listFormStates) { + setViewMode(listFormStates.layout) + } else { + setViewMode(gridDto?.gridOptions?.layoutDto.defaultLayout) + } }, [gridDto]) if (!listFormCode) { @@ -77,7 +87,10 @@ const List = () => {