Разработка кастомных Views KeystoneJS

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка кастомных Views KeystoneJS
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Разработка кастомных Views KeystoneJS

KeystoneJS Admin UI построен на React и позволяет полностью заменять или расширять интерфейс через кастомные Views. Это не просто тема — можно переопределить компоненты для конкретных List, добавить собственные страницы, изменить навигацию и дашборд.

Типы View-расширений

1. Custom Pages — полностью кастомные страницы в Admin UI на произвольных путях.

2. Custom Navigation — замена стандартного меню.

3. List Views — переопределение компонентов для конкретного List.

4. Field Views — компоненты для полей (рассматриваются в разделе Custom Fields).

Custom Navigation

// keystone.ts
ui: {
  getAdditionalFiles: async () => [
    {
      mode: 'write',
      src: `
        export { default } from '../admin/navigation';
      `,
      outputPath: 'admin/config.js',
    },
  ],
},
// admin/navigation.tsx
import { NavigationContainer, NavItem, ListNavItems } from '@keystone-6/core/admin-ui/components';
import type { NavigationProps } from '@keystone-6/core/admin-ui/components';

export default function CustomNavigation({ authenticatedItem, lists }: NavigationProps) {
  return (
    <NavigationContainer authenticatedItem={authenticatedItem}>
      <NavItem href="/">Dashboard</NavItem>

      {/* Группировка по разделам */}
      <div className="mt-4 mb-1 px-3 text-xs font-semibold text-gray-400 uppercase">
        Контент
      </div>
      <ListNavItems lists={lists} include={['Post', 'Category', 'Tag']} />

      <div className="mt-4 mb-1 px-3 text-xs font-semibold text-gray-400 uppercase">
        Пользователи
      </div>
      <ListNavItems lists={lists} include={['User', 'Role']} />

      <NavItem href="/admin/analytics">Аналитика</NavItem>
    </NavigationContainer>
  );
}

Custom Dashboard

// admin/pages/index.tsx — переопределяет стандартный дашборд
import { PageContainer } from '@keystone-6/core/admin-ui/components';
import { useQuery, gql } from '@keystone-6/core/admin-ui/apollo';

const STATS_QUERY = gql`
  query AdminStats {
    postsCount(where: { status: { equals: "published" } })
    draftsCount: postsCount(where: { status: { equals: "draft" } })
    usersCount
  }
`;

export default function CustomDashboard() {
  const { data, loading } = useQuery(STATS_QUERY);

  return (
    <PageContainer header="Панель управления">
      <div className="grid grid-cols-3 gap-4 mb-8">
        <StatCard label="Опубликованных постов" value={data?.postsCount} loading={loading} />
        <StatCard label="Черновиков" value={data?.draftsCount} loading={loading} />
        <StatCard label="Пользователей" value={data?.usersCount} loading={loading} />
      </div>

      <RecentPostsTable />
    </PageContainer>
  );
}

Custom Pages с произвольными маршрутами

// admin/pages/analytics.tsx
import { PageContainer } from '@keystone-6/core/admin-ui/components';

export default function AnalyticsPage() {
  return (
    <PageContainer header="Аналитика">
      {/* Встраиваем Recharts, Chart.js или iframe Metabase */}
      <SalesChart />
      <TopContentTable />
    </PageContainer>
  );
}

Маршрут будет доступен по /admin/analytics автоматически — Next.js файловая маршрутизация работает в Admin UI.

Переопределение Item View для конкретного List

Можно полностью заменить страницу редактирования конкретного элемента:

// В конфиге List:
ui: {
  itemView: {
    // Кастомный компонент через путь к файлу
    // Используется экспериментальная фича KeystoneJS
    defaultFieldMode: 'read', // 'hidden' | 'read' | 'edit'
  },
},

Добавление кастомных экшенов в список

Через extendGraphqlSchema + кастомный UI-компонент:

// Кнопка "Опубликовать всё" в ListPage
import { useMutation, gql } from '@keystone-6/core/admin-ui/apollo';

const PUBLISH_ALL = gql`
  mutation PublishAllDrafts {
    publishAllDrafts { count }
  }
`;

export function PublishAllButton() {
  const [publishAll, { loading }] = useMutation(PUBLISH_ALL);
  return (
    <button
      onClick={() => publishAll().then(() => window.location.reload())}
      disabled={loading}
    >
      {loading ? 'Публикуем...' : 'Опубликовать все черновики'}
    </button>
  );
}

Сроки разработки

Задача Время
Custom Navigation 0.5 дня
Custom Dashboard со статистикой 1–2 дня
Custom Page (аналитика, импорт, etc.) 1–3 дня
Полный редизайн Admin UI 1–2 недели