Conversation
| @@ -0,0 +1,10 @@ | |||
| # Introduction | |||
| Пример сторонних контролов для вебклиента с использованием Webpack Module Federation и React | |||
| name: 'Tree', | ||
| // Загрузчики контрола. Загрузчик - это функция, принимающая информацию о контексте и точку доступа к API. | ||
| // Задача загрузчика - смонтировать корневой UI-компонент контрола в указанный DOM-элемент. | ||
| // Один и тот же контрол может отображаться в разных контекстах (карточка и обложка модуля). Если контрол должен отображаться и в карточке и в обложке, |
There was a problem hiding this comment.
пропущена запятая: и в карточке, и в обложке
| // то для него следует создать разные загрузчики для этих контекстов (*-cover-loader и *-card-loader). | ||
| loaders: [ | ||
| { | ||
| // Имя загручика должно соответствовать имени загрузчика в файле component.loaders.ts. |
iam-ktn
left a comment
There was a problem hiding this comment.
- В целом ничего криминального нет, есть несколько рекомендаций
- Платформа рекомендует webpack использовать? Если будет время можно попробовать перевести на vite - сильно быстрее будет собираться
- Можно попробовать использовать библиотеку стилей (но это так, в качестве упражнения)
| @@ -0,0 +1,25 @@ | |||
| { | |||
| "gantt": { | |||
There was a problem hiding this comment.
@vadimpain Локализация, да и сам пакет не используется? Лучше убрать
There was a problem hiding this comment.
- .ts?
- По разделению файлов. У тебя есть 2 ответственности в файле сейчас - базовые REST-запросы и специальная логика для получения дерева поручений. Предлагаю такую структуру:
/src/utils/request.ts // Тут будет базовый метод
/src/action-items/action-items.client.ts // Тут запросы к конкретным endpoint-ам
There was a problem hiding this comment.
добавить типизацию
| return response.json(); | ||
| } | ||
|
|
||
| function executeGetRequest(url: string, async: boolean = false) { |
There was a problem hiding this comment.
@vadimpain Предлагаю оставить только асинхронные вызовы
| return request; | ||
| } | ||
|
|
||
| export function GetAllActionItemExecutionTaskForLeadTask(taskId: number) { |
There was a problem hiding this comment.
@vadimpain camelCase. И в следующем методе тоже
| @@ -0,0 +1,43 @@ | |||
| export const GetIntServiceUrl = () => window.location.origin + "/integration/OData/"; | |||
There was a problem hiding this comment.
@vadimpain Лучше baseUrl хранить в конфиге ну или в крайнем случае запрашивать отдельным get-ом. Есть какие-то рекомендации от платформы?
| const response = await executeGetRequestAsync(url); | ||
| console.log(response); | ||
| return response.value; | ||
| } catch (error) { |
There was a problem hiding this comment.
@vadimpain NBD: потом желательно обработку ошибок сделать визуальной - через попапы (как в самой системе). И тут же тоже могут быть разные причины (сетевая проблемы, в ответе пришел не JSON и т.п.)
There was a problem hiding this comment.
@vadimpain Предлагаю обсудить стилизацию. Можно попробовать какой-нибудь фреймворк, где стили встроены в код компоненты - antd, MUI
| }; | ||
|
|
||
| // Компоненты | ||
| const NodeContent: React.FC<{ |
There was a problem hiding this comment.
@vadimpain Давай вынесем в отдельную компоненту?
| type StatusKey = 'Completed' | 'InProcess' | 'InProcessCurrent' | 'Aborted'; | ||
|
|
||
| // Конфигурация стилей и иконок для статусов | ||
| const STATUS_CONFIG = { |
There was a problem hiding this comment.
@vadimpain Map<StatusKey, { border: string; icon: string | null }> ?
| } as const satisfies Record<StatusKey, { border: string; icon: string | null }>; | ||
|
|
||
| // Хуки и утилиты | ||
| const useTreeData = (entityId: number) => { |
There was a problem hiding this comment.
@vadimpain NBD: Для читаемости можно вынести в store. Тогда в коде загрузка будет выглядеть как-то так:
useEffect(() => {
itemsStore.loadItems(entityId)
}, [entityId]);
...
if (itemsStore.isLoading) return <Spin />; // Или другой лоадер
itemsStore.data.forEach(item => {
// Render
})
Сейчас, конечно, выгода не очевидна этого. Давай обсудим
| const [isLoading, setIsLoading] = useState(false); | ||
|
|
||
| const fetchData = useCallback(async () => { | ||
| setIsLoading(true); |
There was a problem hiding this comment.
@vadimpain Еще тут бы хорошо делать setError(null); Сейчас этот стейт нигде не сбрасывается
No description provided.