feat: add admin pinned messages section

- API client with full CRUD, broadcast, activate/deactivate, unpin endpoints
- List page with active/inactive badges, action buttons, pagination
- Create/edit form with content editor, media upload, display settings toggles
- Routes and navigation in admin marketing group
- i18n translations for ru, en, fa, zh
This commit is contained in:
Fringg
2026-02-12 19:33:18 +03:00
parent a0b10e688c
commit aa5113b8e3
9 changed files with 1203 additions and 8 deletions

View File

@@ -73,6 +73,8 @@ const AdminTrafficUsage = lazy(() => import('./pages/AdminTrafficUsage'));
const AdminUpdates = lazy(() => import('./pages/AdminUpdates'));
const AdminUserDetail = lazy(() => import('./pages/AdminUserDetail'));
const AdminBroadcastDetail = lazy(() => import('./pages/AdminBroadcastDetail'));
const AdminPinnedMessages = lazy(() => import('./pages/AdminPinnedMessages'));
const AdminPinnedMessageCreate = lazy(() => import('./pages/AdminPinnedMessageCreate'));
const AdminEmailTemplatePreview = lazy(() => import('./pages/AdminEmailTemplatePreview'));
function ProtectedRoute({ children }: { children: React.ReactNode }) {
@@ -687,6 +689,36 @@ function App() {
</AdminRoute>
}
/>
<Route
path="/admin/pinned-messages"
element={
<AdminRoute>
<LazyPage>
<AdminPinnedMessages />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/pinned-messages/create"
element={
<AdminRoute>
<LazyPage>
<AdminPinnedMessageCreate />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/pinned-messages/:id/edit"
element={
<AdminRoute>
<LazyPage>
<AdminPinnedMessageCreate />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/email-templates/preview/:type/:lang"
element={