Optimizasyon ölü kodlar kaldırıldı
This commit is contained in:
parent
343bdc2c5d
commit
42d3c55ae3
24 changed files with 11 additions and 226 deletions
|
|
@ -136,7 +136,7 @@ DevExtreme bileşenleri bu metadata'ya göre kendini kurar.
|
||||||
| Form | Formik + Yup, DevExtreme Form |
|
| Form | Formik + Yup, DevExtreme Form |
|
||||||
| Kod editörü | Monaco Editor |
|
| Kod editörü | Monaco Editor |
|
||||||
| Runtime derleme | @babel/standalone (Custom Component) |
|
| Runtime derleme | @babel/standalone (Custom Component) |
|
||||||
| Takvim/Gantt | FullCalendar, DevExtreme Scheduler/Gantt |
|
| Takvim/Gantt | DevExtreme Scheduler/Gantt |
|
||||||
| Gerçek zamanlı | @microsoft/signalr |
|
| Gerçek zamanlı | @microsoft/signalr |
|
||||||
| PWA | vite-plugin-pwa (Workbox) |
|
| PWA | vite-plugin-pwa (Workbox) |
|
||||||
| Node | 24.13 / npm 11 (`volta` ile sabitlenmiş) |
|
| Node | 24.13 / npm 11 (`volta` ile sabitlenmiş) |
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
@import './components/index.css';
|
@import './components/index.css';
|
||||||
@import './template/index.css';
|
@import './template/index.css';
|
||||||
@import './vendors/index.css';
|
|
||||||
@import './tailwind/index.css';
|
@import './tailwind/index.css';
|
||||||
|
|
|
||||||
152
ui/src/assets/styles/vendors/_full-calendar.css
vendored
152
ui/src/assets/styles/vendors/_full-calendar.css
vendored
|
|
@ -1,152 +0,0 @@
|
||||||
.calendar {
|
|
||||||
@apply h-full;
|
|
||||||
|
|
||||||
.fc {
|
|
||||||
@apply h-full;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-theme-standard .fc-scrollgrid {
|
|
||||||
@apply border-0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-theme-standard td,
|
|
||||||
.fc-theme-standard th {
|
|
||||||
@apply border-gray-200 dark:border-gray-600;
|
|
||||||
|
|
||||||
&:last-child {
|
|
||||||
border-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-col-header-cell-cushion {
|
|
||||||
@apply text-gray-900 dark:text-gray-100 py-3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-col-header-cell {
|
|
||||||
border-width: 0px 0px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-daygrid-day-number {
|
|
||||||
@apply font-semibold p-2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-view {
|
|
||||||
@apply rounded-lg border border-gray-200 dark:border-gray-600 bg-white dark:bg-gray-800;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-daygrid-dot-event .fc-event-title {
|
|
||||||
@apply text-gray-900 dark:text-gray-100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-button {
|
|
||||||
@apply rounded-md py-2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-toolbar {
|
|
||||||
@apply lg:flex-row flex-col items-start lg:items-center gap-2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-button-primary {
|
|
||||||
@apply bg-white border border-gray-300 dark:bg-gray-700 dark:border-gray-700 text-gray-600 dark:text-gray-100 font-semibold;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
@apply shadow-none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
@apply hover:bg-gray-50 dark:hover:bg-gray-600 hover:border-gray-300 dark:hover:border-gray-700 hover:text-gray-900 hover:dark:text-gray-100;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:disabled {
|
|
||||||
@apply cursor-not-allowed bg-white border border-gray-300 dark:bg-gray-700 dark:border-gray-700 text-gray-600 dark:text-gray-100;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
@apply bg-white border border-gray-300 dark:bg-gray-700 dark:border-gray-700 text-gray-600 dark:text-gray-100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-button-primary:not(:disabled):active:focus,
|
|
||||||
.fc .fc-button-primary:not(:disabled).fc-button-active:focus {
|
|
||||||
@apply shadow-none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-button-primary:not(:disabled):active,
|
|
||||||
.fc .fc-button-primary:not(:disabled).fc-button-active {
|
|
||||||
@apply bg-gray-100 border border-gray-300 dark:bg-gray-500 dark:border-gray-500 text-gray-600 dark:text-gray-100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc {
|
|
||||||
.fc-dayGridMonth-button,
|
|
||||||
.fc-timeGridDay-button,
|
|
||||||
.fc-timeGridWeek-button,
|
|
||||||
.fc-today-button {
|
|
||||||
@apply px-8 capitalize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-highlight {
|
|
||||||
@apply bg-transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-daygrid-dot-event:hover,
|
|
||||||
.fc-daygrid-dot-event.fc-event-mirror {
|
|
||||||
@apply bg-transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-daygrid-event {
|
|
||||||
@apply p-0 rounded-md mb-2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-h-event {
|
|
||||||
@apply bg-transparent border-0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-event-selected,
|
|
||||||
.fc-event:focus {
|
|
||||||
@apply shadow-none;
|
|
||||||
|
|
||||||
&:after {
|
|
||||||
@apply bg-transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-cell-shaded,
|
|
||||||
.fc .fc-day-disabled {
|
|
||||||
@apply bg-gray-200 dark:bg-gray-500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-daygrid-bg-harness {
|
|
||||||
.fc-highlight {
|
|
||||||
@apply bg-gray-100 dark:bg-gray-700;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-daygrid-event {
|
|
||||||
@apply text-xs;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .custom-calendar-event {
|
|
||||||
@apply flex items-center min-h-[28px] p-1.5 rounded-md w-full overflow-hidden text-ellipsis h-full;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-v-event {
|
|
||||||
@apply border-0 bg-transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-scrollgrid-section table {
|
|
||||||
@apply !w-full;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc .fc-daygrid-body {
|
|
||||||
@apply !w-full;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-direction-ltr .fc-toolbar > * > :not(:first-child) {
|
|
||||||
@apply mx-0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fc-toolbar-chunk {
|
|
||||||
@apply flex flex-col sm:flex-row gap-2 w-full sm:w-auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
ui/src/assets/styles/vendors/index.css
vendored
1
ui/src/assets/styles/vendors/index.css
vendored
|
|
@ -1 +0,0 @@
|
||||||
@import './_full-calendar.css';
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import { HEADER_HEIGHT_CLASS } from '@/constants/theme.constant'
|
|
||||||
import type { ReactNode } from 'react'
|
import type { ReactNode } from 'react'
|
||||||
import type { CommonProps } from '@/proxy/common'
|
import type { CommonProps } from '@/proxy/common'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import { useStoreState, useStoreActions } from '@/store'
|
||||||
import { FaCheck } from 'react-icons/fa'
|
import { FaCheck } from 'react-icons/fa'
|
||||||
import type { CommonProps } from '@/proxy/common'
|
import type { CommonProps } from '@/proxy/common'
|
||||||
import appConfig from '@/proxy/configs/app.config'
|
import appConfig from '@/proxy/configs/app.config'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
|
||||||
|
|
||||||
const _LanguageSelector = ({ className }: CommonProps) => {
|
const _LanguageSelector = ({ className }: CommonProps) => {
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
|
|
@ -22,8 +21,6 @@ const _LanguageSelector = ({ className }: CommonProps) => {
|
||||||
return languageList?.find((lang) => lang.cultureName === currentLang)?.cultureName
|
return languageList?.find((lang) => lang.cultureName === currentLang)?.cultureName
|
||||||
}, [currentLang, languageList])
|
}, [currentLang, languageList])
|
||||||
|
|
||||||
const { translate } = useLocalization()
|
|
||||||
|
|
||||||
const selectedLanguage = (
|
const selectedLanguage = (
|
||||||
<div className={classNames(className, 'flex items-center')}>
|
<div className={classNames(className, 'flex items-center')}>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ const ListItem = (props: {
|
||||||
keyWord: string
|
keyWord: string
|
||||||
onNavigate: () => void
|
onNavigate: () => void
|
||||||
}) => {
|
}) => {
|
||||||
const { icon, label, url = '', isLast, keyWord, onNavigate } = props
|
const { label, url = '', isLast, keyWord, onNavigate } = props
|
||||||
|
|
||||||
const { textTheme } = useThemeClass()
|
const { textTheme } = useThemeClass()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import Button from '@/components/ui/Button'
|
import Button from '@/components/ui/Button'
|
||||||
import ScrollBar from '@/components/ui/ScrollBar'
|
import ScrollBar from '@/components/ui/ScrollBar'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import { HEADER_HEIGHT_CLASS, DIR_LTR, DIR_RTL } from '@/constants/theme.constant'
|
import { DIR_LTR, DIR_RTL } from '@/constants/theme.constant'
|
||||||
import VerticalMenuContent from '@/components/template/VerticalMenuContent'
|
import VerticalMenuContent from '@/components/template/VerticalMenuContent'
|
||||||
import { FaArrowLeft, FaArrowRight } from 'react-icons/fa'
|
import { FaArrowLeft, FaArrowRight } from 'react-icons/fa'
|
||||||
import type { NavigationTree } from '@/proxy/menus/navigation'
|
import type { NavigationTree } from '@/proxy/menus/navigation'
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import {
|
||||||
LAYOUT_TYPE_SIMPLE,
|
LAYOUT_TYPE_SIMPLE,
|
||||||
LAYOUT_TYPE_DECKED,
|
LAYOUT_TYPE_DECKED,
|
||||||
LAYOUT_TYPE_BLANK,
|
LAYOUT_TYPE_BLANK,
|
||||||
NAV_MODE_TRANSPARENT,
|
|
||||||
} from '@/constants/theme.constant'
|
} from '@/constants/theme.constant'
|
||||||
import type { LayoutType } from '@/proxy/theme/models'
|
import type { LayoutType } from '@/proxy/theme/models'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
|
|
@ -58,7 +57,7 @@ const layouts = [
|
||||||
|
|
||||||
const LayoutSwitcher = () => {
|
const LayoutSwitcher = () => {
|
||||||
const type = useStoreState((state) => state.theme.layout.type)
|
const type = useStoreState((state) => state.theme.layout.type)
|
||||||
const { setLayout, setNavMode } = useStoreActions((actions) => actions.theme)
|
const { setLayout } = useStoreActions((actions) => actions.theme)
|
||||||
|
|
||||||
const onLayoutSelect = (val: LayoutType) => {
|
const onLayoutSelect = (val: LayoutType) => {
|
||||||
setLayout(val)
|
setLayout(val)
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>((props, ref
|
||||||
clearable = true,
|
clearable = true,
|
||||||
name,
|
name,
|
||||||
field,
|
field,
|
||||||
form,
|
form: _form,
|
||||||
minChars = 1,
|
minChars = 1,
|
||||||
...rest
|
...rest
|
||||||
} = props
|
} = props
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ const Chips = forwardRef<HTMLDivElement, ChipsProps>((props, ref) => {
|
||||||
onRemove,
|
onRemove,
|
||||||
name,
|
name,
|
||||||
field,
|
field,
|
||||||
form,
|
form: _form,
|
||||||
...rest
|
...rest
|
||||||
} = props
|
} = props
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -118,10 +118,6 @@ const Knob = forwardRef<SVGSVGElement, KnobProps>((props, ref) => {
|
||||||
const fullArcLength = (KNOB_RANGE / 360) * circumference
|
const fullArcLength = (KNOB_RANGE / 360) * circumference
|
||||||
|
|
||||||
// Çember yayını SVG stroke-dashoffset ile çiziyoruz
|
// Çember yayını SVG stroke-dashoffset ile çiziyoruz
|
||||||
// SVG default: 0 derece = sağ (3 saat), CW pozitif
|
|
||||||
// Bizim 0 = üst → rotate(-90) + açı offset
|
|
||||||
const startAngleRad = ((KNOB_START_ANGLE - 90) * Math.PI) / 180
|
|
||||||
|
|
||||||
const resolveValueColor = () =>
|
const resolveValueColor = () =>
|
||||||
valueColor ?? `var(--color-${themeColor}-${primaryColorLevel}, #6366f1)`
|
valueColor ?? `var(--color-${themeColor}-${primaryColorLevel}, #6366f1)`
|
||||||
const resolveRangeColor = () => rangeColor ?? `currentColor`
|
const resolveRangeColor = () => rangeColor ?? `currentColor`
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ const MenuCollapse = (props: MenuCollapseProps) => {
|
||||||
|
|
||||||
const [isExpanded, setIsExpanded] = useState(expanded)
|
const [isExpanded, setIsExpanded] = useState(expanded)
|
||||||
|
|
||||||
const { menuItemHeight, variant, sideCollapsed, defaultExpandedKeys } = useContext(MenuContext)
|
const { variant, sideCollapsed, defaultExpandedKeys } = useContext(MenuContext)
|
||||||
|
|
||||||
const { direction } = useConfig()
|
const { direction } = useConfig()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ const Tooltip = (props: TooltipProps) => {
|
||||||
placement = 'top',
|
placement = 'top',
|
||||||
title,
|
title,
|
||||||
wrapperClass,
|
wrapperClass,
|
||||||
...rest
|
|
||||||
} = props
|
} = props
|
||||||
|
|
||||||
const [tooltipOpen, setTooltipOpen] = useState<boolean>(isOpen)
|
const [tooltipOpen, setTooltipOpen] = useState<boolean>(isOpen)
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import Widget, { type colorType } from './Widget'
|
import Widget, { type colorType } from './Widget'
|
||||||
import { WidgetEditDto, WidgetGroupDto } from '@/proxy/form/models'
|
import { WidgetEditDto, WidgetGroupDto } from '@/proxy/form/models'
|
||||||
import { useNavigate } from 'react-router-dom'
|
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
|
|
||||||
export default function WidgetGroup({ widgetGroups }: { widgetGroups: WidgetGroupDto[] }) {
|
export default function WidgetGroup({ widgetGroups }: { widgetGroups: WidgetGroupDto[] }) {
|
||||||
const navigate = useNavigate()
|
|
||||||
const { translate } = useLocalization()
|
const { translate } = useLocalization()
|
||||||
|
|
||||||
// Sorgudan gelen basliklar dil anahtaridir; karsiligi yoksa translate metni aynen dondurur,
|
// Sorgudan gelen basliklar dil anahtaridir; karsiligi yoksa translate metni aynen dondurur,
|
||||||
|
|
@ -54,4 +52,3 @@ export default function WidgetGroup({ widgetGroups }: { widgetGroups: WidgetGrou
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { AuditedEntityDto } from '@/proxy/abp'
|
import { SummaryTypeEnum } from '@/proxy/form/models'
|
||||||
import { PermissionCrudDto, SummaryTypeEnum } from '@/proxy/form/models'
|
|
||||||
|
|
||||||
export interface BreakDto {
|
export interface BreakDto {
|
||||||
endValue: number
|
endValue: number
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
export type ItemType = 'service' | 'support'
|
|
||||||
|
|
||||||
export interface Service {
|
|
||||||
tenantId?: string
|
|
||||||
icon?: string
|
|
||||||
title: string
|
|
||||||
description?: string
|
|
||||||
type: ItemType
|
|
||||||
features: string[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ServiceDto {
|
|
||||||
tenantId?: string
|
|
||||||
icon?: string
|
|
||||||
title: string
|
|
||||||
description?: string
|
|
||||||
type: ItemType
|
|
||||||
features: string[]
|
|
||||||
}
|
|
||||||
|
|
@ -139,9 +139,6 @@ const DATE_EDITORS = ['dxDateBox', 'dxCalendar', 'dxDateRangeBox']
|
||||||
const IMAGE_EDITORS = ['dxImageUpload', 'dxImageViewer']
|
const IMAGE_EDITORS = ['dxImageUpload', 'dxImageViewer']
|
||||||
const SLIDER_EDITORS = ['dxSlider', 'dxRangeSlider']
|
const SLIDER_EDITORS = ['dxSlider', 'dxRangeSlider']
|
||||||
|
|
||||||
/** Metin girişi olmayan editörlerde placeholder/mask alanlarını gizlemek için. */
|
|
||||||
const NON_INPUT_EDITORS = ['dxCheckBox', 'dxSwitch', 'dxRadioGroup', ...SLIDER_EDITORS]
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------ *
|
/* ------------------------------------------------------------------ *
|
||||||
* Ayar sözlüğü
|
* Ayar sözlüğü
|
||||||
* ------------------------------------------------------------------ */
|
* ------------------------------------------------------------------ */
|
||||||
|
|
|
||||||
|
|
@ -250,23 +250,6 @@ const OrganizationUnits = () => {
|
||||||
setDialogItem(undefined)
|
setDialogItem(undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onDropdownItemClick = (node: NodeApi<TreeViewData>, eventKey: string) => {
|
|
||||||
if (eventKey == 'edit') {
|
|
||||||
setDialogItem({
|
|
||||||
id: node.data.id,
|
|
||||||
displayName: node.data.name,
|
|
||||||
parentId: node.parent?.isRoot ? undefined : node.parent?.data.id,
|
|
||||||
})
|
|
||||||
} else if (eventKey == 'add-sub-unit') {
|
|
||||||
setDialogItem({
|
|
||||||
displayName: '',
|
|
||||||
parentId: node.data.id,
|
|
||||||
})
|
|
||||||
} else if (eventKey == 'delete') {
|
|
||||||
setDeleteRow({ id: node.data.id, name: 'Organization Unit' })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const onSelect = async (nodes: NodeApi<TreeViewData>[]) => {
|
const onSelect = async (nodes: NodeApi<TreeViewData>[]) => {
|
||||||
if (nodes.length === 0) {
|
if (nodes.length === 0) {
|
||||||
setActiveOu(undefined)
|
setActiveOu(undefined)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import { FormContainer, FormItem } from '@/components/ui/Form'
|
||||||
import Input from '@/components/ui/Input'
|
import Input from '@/components/ui/Input'
|
||||||
import PlatformLoginResultType from '@/constants/login.result.enum'
|
import PlatformLoginResultType from '@/constants/login.result.enum'
|
||||||
import { ROUTES_ENUM } from '@/routes/route.constant'
|
import { ROUTES_ENUM } from '@/routes/route.constant'
|
||||||
import { useStoreActions, useStoreState } from '@/store'
|
import { useStoreActions } from '@/store'
|
||||||
import useAuth from '@/utils/hooks/useAuth'
|
import useAuth from '@/utils/hooks/useAuth'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import useTimeOutMessage from '@/utils/hooks/useTimeOutMessage'
|
import useTimeOutMessage from '@/utils/hooks/useTimeOutMessage'
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ import {
|
||||||
orColumnCount,
|
orColumnCount,
|
||||||
quoteLiteral,
|
quoteLiteral,
|
||||||
type CriteriaRow,
|
type CriteriaRow,
|
||||||
type GroupMode,
|
|
||||||
type ViewSource,
|
type ViewSource,
|
||||||
} from './viewModel'
|
} from './viewModel'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ interface SchedulerViewProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
const SchedulerView = (props: SchedulerViewProps) => {
|
const SchedulerView = (props: SchedulerViewProps) => {
|
||||||
const { listFormCode, searchParams, isSubForm, level, gridDto: extGridDto } = props
|
const { listFormCode, searchParams, isSubForm, gridDto: extGridDto } = props
|
||||||
const { translate } = useLocalization()
|
const { translate } = useLocalization()
|
||||||
const isPwaMode = usePWA()
|
const isPwaMode = usePWA()
|
||||||
const useMobileEditPopup = shouldUseMobileEditPopup()
|
const useMobileEditPopup = shouldUseMobileEditPopup()
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ const priorityLabel = (
|
||||||
}
|
}
|
||||||
|
|
||||||
const TodoBoard = (props: TodoBoardProps) => {
|
const TodoBoard = (props: TodoBoardProps) => {
|
||||||
const { listFormCode, searchParams, isSubForm, gridDto: extGridDto } = props
|
const { listFormCode, gridDto: extGridDto } = props
|
||||||
// Alt form olarak açıldığında tanım dışarıdan gelmez; kendisi yükler.
|
// Alt form olarak açıldığında tanım dışarıdan gelmez; kendisi yükler.
|
||||||
const gridDto = useListFormGridDto(listFormCode, extGridDto)
|
const gridDto = useListFormGridDto(listFormCode, extGridDto)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,13 +92,6 @@ const Blog: React.FC = () => {
|
||||||
setCurrentPage(1)
|
setCurrentPage(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
const categoryButtonClass = (isActive: boolean) =>
|
|
||||||
`px-4 py-2 text-sm font-medium rounded-lg transition-colors ${
|
|
||||||
isActive
|
|
||||||
? 'bg-blue-600 text-white hover:bg-blue-700 dark:bg-blue-900 dark:hover:bg-blue-800'
|
|
||||||
: 'bg-gray-200 text-gray-700 hover:bg-gray-300 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700'
|
|
||||||
}`
|
|
||||||
|
|
||||||
if (loading && posts.length === 0) {
|
if (loading && posts.length === 0) {
|
||||||
return <PublicPageLoader />
|
return <PublicPageLoader />
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue