Розробка кастомних компонентів Retool

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка кастомних компонентів Retool
Середня
~3-5 робочих днів
Часті питання

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

Етапи розробки

Останні роботи

  • 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

Розробка користувацьких компонентів Retool

Retool охоплює більшість завдань внутрішніх інструментів вбудованими віджетами. Однак рано чи пізно виникає вимога, для якої немає готового компонента: специфічна візуалізація даних, інтерактивна карта з користувацькими маркерами, складний drag-and-drop з бізнес-логікою. Для цього Retool надає механізм Custom Components — ізольовані iframe React-додатки, вбудовані в інтерфейс через postMessage API.

Як працює механізм Custom Components

Користувацький компонент у Retool — це повнофункціональний React-додаток, який живе у ізольованому iframe. Взаємодія з хостом будується через Retool.useStateValue та Retool.useEventCallback. Дані передаються з Retool у компонент через model, компонент відправляє події назад через triggerQuery або довільні event-callback'и.

Середовище розробки — локальний сервер (Vite або CRA), код розгортається на будь-якому статичному хостингу або завантажується безпосередньо в Retool.

Структура компонента

// src/index.tsx — точка входу користувацького компонента
import { Retool } from '@tryretool/custom-component-support';

interface ModelData {
  items: Array<{ id: string; label: string; value: number; color: string }>;
  selectedId: string | null;
}

export const BubbleChart: FC = () => {
  const [items] = Retool.useStateValue<ModelData['items']>({
    name: 'items',
    initialValue: [],
    label: 'Chart items',
    inspector: 'array',
  });

  const [selectedId, setSelectedId] = Retool.useStateValue<string | null>({
    name: 'selectedId',
    initialValue: null,
    label: 'Selected item ID',
    inspector: 'string',
  });

  const onSelect = Retool.useEventCallback({ name: 'onItemSelect' });

  const handleBubbleClick = (id: string) => {
    setSelectedId(id);
    onSelect({ id });
  };

  return (
    <BubbleChartRenderer
      items={items}
      selectedId={selectedId}
      onSelect={handleBubbleClick}
    />
  );
};

Пакет @tryretool/custom-component-support — обов'язкова залежність. Він абстрагує postMessage і надає React-hook'и для синхронізації стану.

Збірка та розгортання

Компонент збирається в один бандл і розгортається на статичний хостинг. Retool підтримує два способи підключення: через URL (CDN/S3/Vercel) та через Retool Toolbox для self-hosted екземплярів.

// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  build: {
    lib: {
      entry: 'src/index.tsx',
      name: 'RetoolCustomComponent',
      fileName: 'index',
      formats: ['umd'],
    },
    rollupOptions: {
      external: ['react', 'react-dom'],
      output: {
        globals: {
          react: 'React',
          'react-dom': 'ReactDOM',
        },
      },
    },
  },
});

Після vite builddist/index.umd.js завантажується в CDN або Retool Cloud Storage. У інтерфейсі Retool створюється Custom Component, вказується URL бандла та iframe-URL сторінки.

Передача складних даних

Retool обмежує модель даних серіалізованими типами. Для складних структур (вкладені об'єкти, файли) використовується JSON-серіалізація всередині рядкового поля:

const [rawConfig] = Retool.useStateValue<string>({
  name: 'config',
  initialValue: '{}',
  label: 'JSON Config',
  inspector: 'text',
});

const config = useMemo(() => {
  try {
    return JSON.parse(rawConfig);
  } catch {
    return {};
  }
}, [rawConfig]);

Для великих наборів даних (тисячі рядків) дані передаються через Retool Query, яка повертає JSON — компонент отримує їх безпосередньо без дублювання стану в моделі.

Типові завдання для користувацьких компонентів

Візуалізації: D3.js графіки (chord diagram, force-directed graph, sankey), ECharts з користувацькими рядами, Three.js попередні перегляди 3D-моделей.

Інтерактивні таблиці: віртуалізовані списки через @tanstack/virtual для 50k+ рядків, вбудоване редагування з користувацькими валідаторами, drag-and-drop сортування через @dnd-kit/core.

Карти: Mapbox GL JS / Leaflet з динамічними кластерами, інструменти малювання для геозон, ізохрони через Mapbox Isochrone API.

Специфічні UI-паттерни: Kanban-дошка з бізнес-обмеженнями, шкала часу Gantt, редактор коду на основі Monaco.

Що відбувається під час розробки

День 1–2: налаштування проекту (Vite + React + TypeScript + Retool SDK), домовленість про data contract — які поля в моделі, які події виводити. Мінімальний робочий компонент з mock-даними.

День 3–4: реалізація логіки та рендерингу. Паралельно — тестування інтеграції з реальним середовищем Retool (cloud або self-hosted — має значення, версії SDK відрізняються).

День 5: обробка граничних випадків, завантаження даних, стилізація відповідно до системи дизайну клієнта, розгортання в CDN, передача компонента з документацією.

Компонент середньої складності (користувацький графік або інтерактивна карта без складної логіки) — 3–5 днів. Kanban або Gantt з drag-and-drop та персистентністю — 1–2 тижні.