@evergis/react 4.0.149 → 4.0.150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Dashboard/containers/AttachmentContainer/components/ShowMoreButton.d.ts +3 -0
- package/dist/components/Dashboard/containers/AttachmentContainer/styled.d.ts +6 -0
- package/dist/components/Dashboard/containers/AttachmentContainer/useAttachmentContainer.d.ts +3 -9
- package/dist/components/Dashboard/containers/StructuredDataContainer/types.d.ts +4 -0
- package/dist/components/Dashboard/elements/ElementTable/components/AttachmentsCell.d.ts +4 -1
- package/dist/components/Dashboard/elements/ElementTable/components/AttachmentsCellPopup/index.d.ts +10 -0
- package/dist/components/Dashboard/elements/ElementTable/components/AttachmentsCellPopup/styled.d.ts +9 -0
- package/dist/components/Dashboard/elements/ElementTable/components/AttachmentsCellPopup.d.ts +10 -0
- package/dist/components/Dashboard/elements/ElementTable/constants.d.ts +12 -0
- package/dist/components/Dashboard/elements/ElementTable/hooks/useAttachmentsCell.d.ts +5 -20
- package/dist/components/Dashboard/elements/ElementTable/hooks/useAttachmentsCellEdit.d.ts +28 -0
- package/dist/components/Dashboard/elements/ElementTable/styled.d.ts +17 -1
- package/dist/components/Dashboard/elements/ElementTable/types.d.ts +44 -0
- package/dist/components/Dashboard/hooks/index.d.ts +1 -0
- package/dist/components/Dashboard/hooks/useAttachmentsView.d.ts +25 -0
- package/dist/components/Dashboard/types.d.ts +10 -0
- package/dist/components/Dashboard/utils/interpolateTranslation.d.ts +8 -0
- package/dist/components/Dashboard/utils/sliceShownOtherItems.d.ts +5 -0
- package/dist/index.js +347 -59
- package/dist/index.js.map +1 -1
- package/dist/react.esm.js +346 -60
- package/dist/react.esm.js.map +1 -1
- package/package.json +2 -2
- package/dist/components/Dashboard/grid/components/GridResizer/styled.d.ts +0 -11
package/dist/react.esm.js
CHANGED
|
@@ -5594,12 +5594,22 @@ const ServerNotificationsProvider = ({ url, initialized, apiClient, children })
|
|
|
5594
5594
|
}, children: children }));
|
|
5595
5595
|
};
|
|
5596
5596
|
|
|
5597
|
+
const INTERPOLATION_PATTERN = /\{\{\s*(\w+)\s*\}\}/g;
|
|
5598
|
+
/**
|
|
5599
|
+
* Подставляет в строку перевода переменные вида `{{total}}` — так, как это делает i18next.
|
|
5600
|
+
*
|
|
5601
|
+
* Нужна запасному переводчику, когда хост не передал свой `t` (например, в Storybook): без неё
|
|
5602
|
+
* `defaultValue` с переменными уходит в интерфейс как есть. Переменная без значения остаётся
|
|
5603
|
+
* в тексте, чтобы пропуск был виден.
|
|
5604
|
+
*/
|
|
5605
|
+
const interpolateTranslation = (text, values = {}) => text.replace(INTERPOLATION_PATTERN, (match, name) => values[name] === undefined || values[name] === null ? match : String(values[name]));
|
|
5606
|
+
|
|
5597
5607
|
const useGlobalContext = () => {
|
|
5598
5608
|
const { t, language, themeName, api, ewktGeometry, ewktExtent, zoomLevel, projectName, projectAlias, notification } = useContext(GlobalContext) || {};
|
|
5599
5609
|
const translate = useCallback((value, options) => {
|
|
5600
5610
|
if (t)
|
|
5601
5611
|
return t(value, options);
|
|
5602
|
-
return options?.defaultValue ?? value;
|
|
5612
|
+
return interpolateTranslation(options?.defaultValue ?? value, options);
|
|
5603
5613
|
}, [t]);
|
|
5604
5614
|
return useMemo(() => ({
|
|
5605
5615
|
t: translate,
|
|
@@ -6025,6 +6035,30 @@ const useAttachmentPreviewImages = ({ items, active, }) => {
|
|
|
6025
6035
|
}), [items, blobUrls, failedLinks]);
|
|
6026
6036
|
};
|
|
6027
6037
|
|
|
6038
|
+
/**
|
|
6039
|
+
* Вид списка вложений: плитка или строки и сколько файлов из списка показано.
|
|
6040
|
+
*
|
|
6041
|
+
* Общий для контейнера вложений и колонки таблицы: список у них один и тот же, и считать
|
|
6042
|
+
* видимое дважды незачем. Предел приходит числом, а не опциями конфига, — у колонки опций
|
|
6043
|
+
* вида нет, он у неё зашит константой.
|
|
6044
|
+
*/
|
|
6045
|
+
const useAttachmentsView = ({ items, limit, initialViewMode = "grid", }) => {
|
|
6046
|
+
const [viewMode, setViewMode] = useState(initialViewMode);
|
|
6047
|
+
const [showMore, setShowMore] = useState(false);
|
|
6048
|
+
const visibleItems = useMemo(() => (limit && !showMore ? items.slice(0, limit) : items), [items, limit, showMore]);
|
|
6049
|
+
const hiddenCount = items.length - visibleItems.length;
|
|
6050
|
+
const handleSetViewMode = useCallback((mode) => setViewMode(mode), []);
|
|
6051
|
+
return {
|
|
6052
|
+
visibleItems,
|
|
6053
|
+
hiddenCount,
|
|
6054
|
+
hasMore: hiddenCount > 0,
|
|
6055
|
+
showMore,
|
|
6056
|
+
setShowMore,
|
|
6057
|
+
viewMode,
|
|
6058
|
+
setViewMode: handleSetViewMode,
|
|
6059
|
+
};
|
|
6060
|
+
};
|
|
6061
|
+
|
|
6028
6062
|
const useAutoCompleteControl = (items) => {
|
|
6029
6063
|
const [value, setValue] = useState("");
|
|
6030
6064
|
const [options, setOptions] = useState([]);
|
|
@@ -8565,9 +8599,23 @@ const AttachmentsViewControls = styled.div.withConfig({ displayName: "Attachment
|
|
|
8565
8599
|
font-size: 1rem;
|
|
8566
8600
|
}
|
|
8567
8601
|
`;
|
|
8602
|
+
/**
|
|
8603
|
+
* Счётчик файлов у подписи — плоский чип в строку подписи.
|
|
8604
|
+
*
|
|
8605
|
+
* Шрифт ставится на текст чипа, а не на корень: текст задаёт себе шрифт шорткатом `font` из темы,
|
|
8606
|
+
* и размер с корня до цифры не доходит — чип выходил высоким, во весь шрифт описания.
|
|
8607
|
+
*/
|
|
8568
8608
|
const AttachmentsCountChip = styled(Chip).withConfig({ displayName: "AttachmentsCountChip", componentId: "sc-117ib6u" }) `
|
|
8569
|
-
|
|
8570
|
-
|
|
8609
|
+
&& {
|
|
8610
|
+
padding: 0.0625rem 0.25rem;
|
|
8611
|
+
border-radius: 0.75rem;
|
|
8612
|
+
}
|
|
8613
|
+
|
|
8614
|
+
span {
|
|
8615
|
+
font-size: 0.625rem;
|
|
8616
|
+
line-height: 0.75rem;
|
|
8617
|
+
font-weight: bold;
|
|
8618
|
+
}
|
|
8571
8619
|
`;
|
|
8572
8620
|
const AttachmentsContent = styled.div.withConfig({ displayName: "AttachmentsContent", componentId: "sc-1j2thff" }) `
|
|
8573
8621
|
width: 100%;
|
|
@@ -8850,38 +8898,30 @@ const AttachmentsList = ({ items, isEdit, onPreview, onDelete, }) => {
|
|
|
8850
8898
|
return (jsx(ListContainer, { children: items.map(item => (jsx(AttachmentItem, { item: item, viewMode: "list", isEdit: isEdit, onPreview: onPreview, onDelete: onDelete }, item.link))) }));
|
|
8851
8899
|
};
|
|
8852
8900
|
|
|
8853
|
-
const ShowMoreButton = ({ hiddenCount, onClick, }) => {
|
|
8901
|
+
const ShowMoreButton = ({ hiddenCount, iconKind = "arrow_down", onClick, }) => {
|
|
8854
8902
|
const { t } = useGlobalContext();
|
|
8855
|
-
return (jsxs(ShowMoreButton$1, { onClick: onClick, children: [t("showMore", { ns: "dashboard", defaultValue: "Показать ещё" }), " ", hiddenCount, jsx(Icon, { kind:
|
|
8903
|
+
return (jsxs(ShowMoreButton$1, { onClick: onClick, children: [t("showMore", { ns: "dashboard", defaultValue: "Показать ещё" }), " ", hiddenCount, jsx(Icon, { kind: iconKind })] }));
|
|
8856
8904
|
};
|
|
8857
8905
|
|
|
8906
|
+
/**
|
|
8907
|
+
* Сколько элементов показывать сразу. Заданы обе опции — выигрывает меньшая, не задана ни одна —
|
|
8908
|
+
* предела нет и список показывается целиком.
|
|
8909
|
+
*/
|
|
8910
|
+
const getShownItemsLimit = ({ shownItems, otherItems } = {}) => shownItems && otherItems ? Math.min(shownItems, otherItems) : shownItems || otherItems;
|
|
8858
8911
|
const sliceShownOtherItems = (data, options = {}, showMore) => {
|
|
8859
|
-
const
|
|
8860
|
-
|
|
8861
|
-
return (shownItems || otherItems) && !showMore ? (data?.slice(0, limit) || []) : data;
|
|
8912
|
+
const limit = getShownItemsLimit(options);
|
|
8913
|
+
return limit && !showMore ? (data?.slice(0, limit) || []) : data;
|
|
8862
8914
|
};
|
|
8863
8915
|
|
|
8864
8916
|
const useAttachmentContainer = ({ type, elementConfig, valueOverride, }) => {
|
|
8865
8917
|
const { items, attributeName } = useAttachmentItems({ type, elementConfig, valueOverride });
|
|
8866
8918
|
const { options } = elementConfig || {};
|
|
8867
|
-
const
|
|
8868
|
-
const [viewMode, setViewMode] = useState(initialViewMode);
|
|
8869
|
-
const [showMore, setShowMore] = useState(false);
|
|
8870
|
-
const visibleItems = useMemo(() => sliceShownOtherItems(items, options, showMore), [items, options, showMore]);
|
|
8871
|
-
const hiddenCount = items.length - visibleItems.length;
|
|
8872
|
-
const hasMore = hiddenCount > 0;
|
|
8873
|
-
const handleSetViewMode = useCallback((mode) => setViewMode(mode), []);
|
|
8874
|
-
return {
|
|
8919
|
+
const view = useAttachmentsView({
|
|
8875
8920
|
items,
|
|
8876
|
-
|
|
8877
|
-
|
|
8878
|
-
|
|
8879
|
-
|
|
8880
|
-
setShowMore,
|
|
8881
|
-
viewMode,
|
|
8882
|
-
setViewMode: handleSetViewMode,
|
|
8883
|
-
attributeName,
|
|
8884
|
-
};
|
|
8921
|
+
limit: getShownItemsLimit(options),
|
|
8922
|
+
initialViewMode: options?.viewMode === "list" ? "list" : "grid",
|
|
8923
|
+
});
|
|
8924
|
+
return { ...view, items, attributeName };
|
|
8885
8925
|
};
|
|
8886
8926
|
|
|
8887
8927
|
const AttachmentContainer = memo(({ type, elementConfig, renderElement }) => {
|
|
@@ -11486,6 +11526,9 @@ const toSchemaAttribute = (params) => {
|
|
|
11486
11526
|
multiline: description?.multiline,
|
|
11487
11527
|
colorPicker: description?.colorPicker,
|
|
11488
11528
|
style: description?.style,
|
|
11529
|
+
// Настройки загрузки файлов в колонку вложений: у источника их тоже нет.
|
|
11530
|
+
parentResourceId: description?.parentResourceId,
|
|
11531
|
+
fileExtensions: description?.fileExtensions,
|
|
11489
11532
|
};
|
|
11490
11533
|
};
|
|
11491
11534
|
/**
|
|
@@ -13776,6 +13819,8 @@ const AddButton = ({ multiple = true, accept, onSelectFiles, onSelectFromCatalog
|
|
|
13776
13819
|
value: AddAttachmentSource.Catalog,
|
|
13777
13820
|
icon: "folder_outline",
|
|
13778
13821
|
text: t("attachments.fromCatalog", { ns: "common", defaultValue: "Из каталога" }),
|
|
13822
|
+
// Диалог каталога выдаёт виджету приложение: не выдан — и выбирать нечем.
|
|
13823
|
+
disabled: !onSelectFromCatalog,
|
|
13779
13824
|
},
|
|
13780
13825
|
{
|
|
13781
13826
|
value: AddAttachmentSource.Link,
|
|
@@ -13783,7 +13828,7 @@ const AddButton = ({ multiple = true, accept, onSelectFiles, onSelectFromCatalog
|
|
|
13783
13828
|
text: t("attachments.fromLink", { ns: "common", defaultValue: "По ссылке" }),
|
|
13784
13829
|
disabled: !onSelectFromLink,
|
|
13785
13830
|
},
|
|
13786
|
-
], [t, onSelectFromLink]);
|
|
13831
|
+
], [t, onSelectFromCatalog, onSelectFromLink]);
|
|
13787
13832
|
const handleMenuSelect = useCallback(([{ value }]) => {
|
|
13788
13833
|
if (value === AddAttachmentSource.Pc) {
|
|
13789
13834
|
inputRef.current?.click();
|
|
@@ -15498,6 +15543,92 @@ const ElementSvg = memo(({ type, elementConfig, ...rest }) => {
|
|
|
15498
15543
|
return (jsx(SvgImage, { url: getSvgUrl({ elementConfig, layerInfo, attributes }), width: width, height: height, fontColor: fontColor }));
|
|
15499
15544
|
});
|
|
15500
15545
|
|
|
15546
|
+
/**
|
|
15547
|
+
* Вложения ячейки в поп-апе. Ширина своя, а не по ячейке: колонка таблицы бывает узкой,
|
|
15548
|
+
* а внутри стоит полный список вложений с плиткой и кнопкой добавления.
|
|
15549
|
+
*
|
|
15550
|
+
* Список взят у контейнера вложений карточки, а величины у поп-апа свои, с макета: имя файла
|
|
15551
|
+
* крупнее и ссылочного цвета, значок в строку имени, «Показать ещё» серое. Переопределены они
|
|
15552
|
+
* здесь, а не в самих компонентах, чтобы вложения в карточке объекта остались как были.
|
|
15553
|
+
*/
|
|
15554
|
+
const AttachmentsPopupBox = styled.div.withConfig({ displayName: "AttachmentsPopupBox", componentId: "sc-1dv1wz6" }) `
|
|
15555
|
+
display: flex;
|
|
15556
|
+
flex-direction: column;
|
|
15557
|
+
box-sizing: border-box;
|
|
15558
|
+
width: 19.5rem;
|
|
15559
|
+
padding: 1.25rem;
|
|
15560
|
+
|
|
15561
|
+
${AttachmentsLabel} {
|
|
15562
|
+
gap: 0 0.25rem;
|
|
15563
|
+
line-height: 0.875rem;
|
|
15564
|
+
}
|
|
15565
|
+
|
|
15566
|
+
${AttachmentsViewControls} {
|
|
15567
|
+
gap: 0 0.5rem;
|
|
15568
|
+
|
|
15569
|
+
${IconToggleButton}, ${Icon} {
|
|
15570
|
+
width: 0.875rem;
|
|
15571
|
+
height: 0.875rem;
|
|
15572
|
+
}
|
|
15573
|
+
|
|
15574
|
+
${Icon}:after {
|
|
15575
|
+
font-size: 0.875rem;
|
|
15576
|
+
}
|
|
15577
|
+
}
|
|
15578
|
+
|
|
15579
|
+
${ListItemMeta} {
|
|
15580
|
+
${ListIcon}, ${ImagePreviewContainer}, ${GridImagePreview} {
|
|
15581
|
+
width: 1rem;
|
|
15582
|
+
height: 1rem;
|
|
15583
|
+
background-size: contain;
|
|
15584
|
+
}
|
|
15585
|
+
}
|
|
15586
|
+
|
|
15587
|
+
${ListItemDescription} {
|
|
15588
|
+
gap: 0;
|
|
15589
|
+
}
|
|
15590
|
+
|
|
15591
|
+
${ListItemName} {
|
|
15592
|
+
font-size: 1rem;
|
|
15593
|
+
line-height: 1.125rem;
|
|
15594
|
+
color: ${({ theme }) => theme.palette.primary};
|
|
15595
|
+
}
|
|
15596
|
+
|
|
15597
|
+
${ListItemDate} {
|
|
15598
|
+
font-size: 0.75rem;
|
|
15599
|
+
line-height: 0.875rem;
|
|
15600
|
+
}
|
|
15601
|
+
|
|
15602
|
+
${ShowMoreButton$1} {
|
|
15603
|
+
gap: 0 0.25rem;
|
|
15604
|
+
margin-top: 0.5rem;
|
|
15605
|
+
line-height: 0.875rem;
|
|
15606
|
+
color: ${({ theme }) => theme.palette.textSecondary};
|
|
15607
|
+
|
|
15608
|
+
${Icon} {
|
|
15609
|
+
width: 0.875rem;
|
|
15610
|
+
height: 0.875rem;
|
|
15611
|
+
}
|
|
15612
|
+
|
|
15613
|
+
${Icon}:after {
|
|
15614
|
+
font-size: 0.875rem;
|
|
15615
|
+
color: ${({ theme }) => theme.palette.textSecondary};
|
|
15616
|
+
}
|
|
15617
|
+
}
|
|
15618
|
+
`;
|
|
15619
|
+
|
|
15620
|
+
/**
|
|
15621
|
+
* Полный список вложений колонки — тот же набор, что у контейнера вложений в карточке объекта:
|
|
15622
|
+
* шапка с подписью, счётчиком и переключателем вида, сам список, «Показать ещё» и добавление.
|
|
15623
|
+
*
|
|
15624
|
+
* Кнопка добавления и корзины у файлов появляются только на правку: на чтение поп-ап нужен
|
|
15625
|
+
* ровно затем, чтобы развернуть свёрнутый счётчик.
|
|
15626
|
+
*/
|
|
15627
|
+
const AttachmentsCellPopup = memo(({ alias, state }) => {
|
|
15628
|
+
const { items, visibleItems, editable, viewMode, setViewMode, hasMore, hiddenCount, onShowMore, accept, onPreview, onDelete, onUpload, onSelectFromCatalog, onOpenLinkDialog, } = state;
|
|
15629
|
+
return (jsxs(AttachmentsPopupBox, { children: [jsx(AttachmentsHeader, { alias: alias, count: items.length, viewMode: viewMode, onChangeViewMode: setViewMode }), jsx(AttachmentsContent, { children: viewMode === "grid" ? (jsx(AttachmentsGrid, { items: visibleItems, isEdit: editable, onPreview: onPreview, onDelete: onDelete })) : (jsx(AttachmentsList, { items: visibleItems, isEdit: editable, onPreview: onPreview, onDelete: onDelete })) }), hasMore && jsx(ShowMoreButton, { hiddenCount: hiddenCount, iconKind: "expand", onClick: onShowMore }), editable && (jsx(AddButton, { accept: accept, onSelectFiles: onUpload, onSelectFromCatalog: onSelectFromCatalog, onSelectFromLink: onOpenLinkDialog }))] }));
|
|
15630
|
+
});
|
|
15631
|
+
|
|
15501
15632
|
/**
|
|
15502
15633
|
* Насколько тело таблицы заехало под липкую шапку. Пишется на таблицу при прокрутке, читается
|
|
15503
15634
|
* стилем тела: ровно на эту величину тело и отсекается.
|
|
@@ -15523,6 +15654,18 @@ const MIN_COLUMN_WIDTH = 48;
|
|
|
15523
15654
|
* без валидной строки не собрать.
|
|
15524
15655
|
*/
|
|
15525
15656
|
const DEFAULT_CELL_COLOR = "#000000";
|
|
15657
|
+
/**
|
|
15658
|
+
* Сколько вложений ячейка показывает сама. Больше — все схлопываются в одну строку со значком
|
|
15659
|
+
* ссылки и счётчиком: колонка в таблице узкая, и списком там помещается ровно один файл.
|
|
15660
|
+
*/
|
|
15661
|
+
const ATTACHMENTS_INLINE_LIMIT = 1;
|
|
15662
|
+
/**
|
|
15663
|
+
* Сколько файлов видно в поп-апе вложений сразу, остальные прячутся за «Показать ещё N».
|
|
15664
|
+
* Величина с макета и опцией не выносится: поп-ап у колонки один на все таблицы.
|
|
15665
|
+
*/
|
|
15666
|
+
const ATTACHMENTS_SHOWN_ITEMS = 3;
|
|
15667
|
+
/** Вид списка, с которого поп-ап вложений открывается. */
|
|
15668
|
+
const ATTACHMENTS_VIEW_MODE = "list";
|
|
15526
15669
|
|
|
15527
15670
|
/**
|
|
15528
15671
|
* Собственный бокс таблицы. Без размеров в `options` представления узел ничего не меняет:
|
|
@@ -15749,10 +15892,42 @@ const CellField = styled.div.withConfig({ displayName: "CellField", componentId:
|
|
|
15749
15892
|
*/
|
|
15750
15893
|
const AttachmentsCellBox = styled.div.withConfig({ displayName: "AttachmentsCellBox", componentId: "sc-1ayq7sq" }) `
|
|
15751
15894
|
display: flex;
|
|
15752
|
-
|
|
15753
|
-
|
|
15754
|
-
gap: 0.25rem;
|
|
15895
|
+
align-items: center;
|
|
15896
|
+
gap: 0.375rem;
|
|
15755
15897
|
padding: 0.375rem 0.25rem;
|
|
15898
|
+
min-width: 0;
|
|
15899
|
+
line-height: 1.25rem;
|
|
15900
|
+
/* Пустая ячейка на чтении не делает по клику ничего — и на указатель ей меняться незачем. */
|
|
15901
|
+
cursor: ${({ $interactive }) => ($interactive ? "pointer" : "default")};
|
|
15902
|
+
`;
|
|
15903
|
+
/**
|
|
15904
|
+
* Значок файла в ячейке. Тот же, что в списке вложений, только с макетную величину строки
|
|
15905
|
+
* таблицы: в контейнере строка свободнее и значок там крупнее.
|
|
15906
|
+
*/
|
|
15907
|
+
const AttachmentsCellIcon = styled(ListIcon).withConfig({ displayName: "AttachmentsCellIcon", componentId: "sc-wf195o" }) `
|
|
15908
|
+
width: 1rem;
|
|
15909
|
+
height: 1rem;
|
|
15910
|
+
background-size: contain;
|
|
15911
|
+
`;
|
|
15912
|
+
/**
|
|
15913
|
+
* Подпись файла или счётчика свёрнутых. Ссылочная: по ней и кликают — одиночный файл открывает
|
|
15914
|
+
* галерею, счётчик разворачивает список.
|
|
15915
|
+
*/
|
|
15916
|
+
const AttachmentsCellLabel = styled.div.withConfig({ displayName: "AttachmentsCellLabel", componentId: "sc-11wbjsl" }) `
|
|
15917
|
+
color: ${({ theme }) => theme.palette.primary};
|
|
15918
|
+
|
|
15919
|
+
${cellWrapMixin};
|
|
15920
|
+
`;
|
|
15921
|
+
/** Значок ссылки у счётчика свёрнутых файлов — в цвет подписи. */
|
|
15922
|
+
const AttachmentsCellLinkIcon = styled(Icon).withConfig({ displayName: "AttachmentsCellLinkIcon", componentId: "sc-oxcx2o" }) `
|
|
15923
|
+
flex-shrink: 0;
|
|
15924
|
+
width: 1rem;
|
|
15925
|
+
height: 1rem;
|
|
15926
|
+
|
|
15927
|
+
&:after {
|
|
15928
|
+
font-size: 1rem;
|
|
15929
|
+
color: ${({ theme }) => theme.palette.primary};
|
|
15930
|
+
}
|
|
15756
15931
|
`;
|
|
15757
15932
|
/**
|
|
15758
15933
|
* Ячейка цвета: плашка или палитра слева, значение справа.
|
|
@@ -15760,7 +15935,7 @@ const AttachmentsCellBox = styled.div.withConfig({ displayName: "AttachmentsCell
|
|
|
15760
15935
|
* Отступы те же, что у текстовой ячейки: в одном ряду с обычными колонками значения обязаны
|
|
15761
15936
|
* стоять на одной линии.
|
|
15762
15937
|
*/
|
|
15763
|
-
const ColorCellBox = styled.div.withConfig({ displayName: "ColorCellBox", componentId: "sc-
|
|
15938
|
+
const ColorCellBox = styled.div.withConfig({ displayName: "ColorCellBox", componentId: "sc-1x8c5gd" }) `
|
|
15764
15939
|
display: flex;
|
|
15765
15940
|
align-items: center;
|
|
15766
15941
|
gap: 0.375rem;
|
|
@@ -15775,38 +15950,119 @@ const ColorCellBox = styled.div.withConfig({ displayName: "ColorCellBox", compon
|
|
|
15775
15950
|
* Плашка цвета. Повторяет маркер легенды графика: цвет всюду обозначается одинаково, где бы он
|
|
15776
15951
|
* ни показывался.
|
|
15777
15952
|
*/
|
|
15778
|
-
const ColorSwatch = styled.div.withConfig({ displayName: "ColorSwatch", componentId: "sc-
|
|
15953
|
+
const ColorSwatch = styled.div.withConfig({ displayName: "ColorSwatch", componentId: "sc-1h7m0yr" }) `
|
|
15779
15954
|
flex-shrink: 0;
|
|
15780
15955
|
width: 0.75rem;
|
|
15781
15956
|
height: 0.75rem;
|
|
15782
15957
|
background-color: ${({ $color }) => $color};
|
|
15783
15958
|
border-radius: ${({ theme: { borderRadius } }) => borderRadius.tiny};
|
|
15784
15959
|
`;
|
|
15785
|
-
const TableEmpty = styled.div.withConfig({ displayName: "TableEmpty", componentId: "sc-
|
|
15960
|
+
const TableEmpty = styled.div.withConfig({ displayName: "TableEmpty", componentId: "sc-10hkdmv" }) `
|
|
15786
15961
|
padding: 0.75rem 0.25rem;
|
|
15787
15962
|
color: ${({ theme }) => theme.palette.textSecondary};
|
|
15788
15963
|
`;
|
|
15789
15964
|
|
|
15790
15965
|
/**
|
|
15791
|
-
*
|
|
15966
|
+
* Добавление и удаление файлов в колонке вложений.
|
|
15967
|
+
*
|
|
15968
|
+
* Все три источника — диск, каталог ресурсов и ссылка — те же, что у контейнера вложений
|
|
15969
|
+
* в карточке объекта: файловое api берётся из глобального контекста, диалог каталога выдаёт
|
|
15970
|
+
* виджету приложение, а ссылка разбирается по адресу.
|
|
15971
|
+
*
|
|
15972
|
+
* Папку-приёмник загрузки задаёт сам атрибут: у колонки нет узла-элемента с опциями, зато
|
|
15973
|
+
* колонок вложений в таблице может быть несколько, и складывать их файлы в одно место незачем.
|
|
15974
|
+
*/
|
|
15975
|
+
const useAttachmentsCellEdit = ({ attribute, items, persist }) => {
|
|
15976
|
+
const { api } = useGlobalContext();
|
|
15977
|
+
const { selectAttachmentsFromCatalog } = useWidgetContext();
|
|
15978
|
+
const [isLinkDialogOpen, , setLinkDialogOpen] = useToggle(false);
|
|
15979
|
+
const [uploading, setUploading] = useState(false);
|
|
15980
|
+
const { parentResourceId, fileExtensions } = attribute;
|
|
15981
|
+
const onDelete = useCallback((link) => persist(items.filter(item => item.link !== link)), [items, persist]);
|
|
15982
|
+
const onUpload = useCallback(async (files) => {
|
|
15983
|
+
if (!api?.file?.upload || uploading) {
|
|
15984
|
+
return;
|
|
15985
|
+
}
|
|
15986
|
+
setUploading(true);
|
|
15987
|
+
try {
|
|
15988
|
+
const uploaded = await Promise.all(files.map(file => api.file.upload(file, true, parentResourceId || "", file.name)));
|
|
15989
|
+
persist([
|
|
15990
|
+
...items,
|
|
15991
|
+
...uploaded.map((response, index) => ({
|
|
15992
|
+
link: response.resourceId,
|
|
15993
|
+
name: response.name ?? files[index].name,
|
|
15994
|
+
mimeType: files[index].type,
|
|
15995
|
+
date: new Date().toISOString(),
|
|
15996
|
+
isExternal: false,
|
|
15997
|
+
})),
|
|
15998
|
+
]);
|
|
15999
|
+
}
|
|
16000
|
+
finally {
|
|
16001
|
+
setUploading(false);
|
|
16002
|
+
}
|
|
16003
|
+
}, [api, items, parentResourceId, persist, uploading]);
|
|
16004
|
+
const onAddFromCatalog = useCallback((resources) => persist([
|
|
16005
|
+
...items,
|
|
16006
|
+
...resources.map(({ resourceId, name, contentType }) => ({
|
|
16007
|
+
link: resourceId ?? "",
|
|
16008
|
+
name: name ?? "",
|
|
16009
|
+
mimeType: contentType ?? "",
|
|
16010
|
+
date: new Date().toISOString(),
|
|
16011
|
+
isExternal: false,
|
|
16012
|
+
})),
|
|
16013
|
+
]), [items, persist]);
|
|
16014
|
+
const onSelectFromCatalog = useMemo(() => (selectAttachmentsFromCatalog ? () => selectAttachmentsFromCatalog(onAddFromCatalog) : undefined), [onAddFromCatalog, selectAttachmentsFromCatalog]);
|
|
16015
|
+
const onOpenLinkDialog = useCallback(() => setLinkDialogOpen(true), [setLinkDialogOpen]);
|
|
16016
|
+
const onCloseLinkDialog = useCallback(() => setLinkDialogOpen(false), [setLinkDialogOpen]);
|
|
16017
|
+
const onAddByLink = useCallback((url) => persist([
|
|
16018
|
+
...items,
|
|
16019
|
+
{
|
|
16020
|
+
link: url,
|
|
16021
|
+
name: getFileNameFromUrl(url),
|
|
16022
|
+
mimeType: getMimeTypeFromUrl(url),
|
|
16023
|
+
date: new Date().toISOString(),
|
|
16024
|
+
isExternal: true,
|
|
16025
|
+
},
|
|
16026
|
+
]), [items, persist]);
|
|
16027
|
+
return {
|
|
16028
|
+
accept: fileExtensions,
|
|
16029
|
+
isLinkDialogOpen,
|
|
16030
|
+
onDelete,
|
|
16031
|
+
onUpload,
|
|
16032
|
+
onSelectFromCatalog,
|
|
16033
|
+
onOpenLinkDialog,
|
|
16034
|
+
onCloseLinkDialog,
|
|
16035
|
+
onAddByLink,
|
|
16036
|
+
};
|
|
16037
|
+
};
|
|
16038
|
+
|
|
16039
|
+
/**
|
|
16040
|
+
* Колонка вложений: разбор значения, свёрнутый вид ячейки и полный список в поп-апе.
|
|
15792
16041
|
*
|
|
15793
16042
|
* Значение атрибута — строка: файлы приезжают в ней списком JSON, поэтому и обратно в черновик
|
|
15794
16043
|
* кладём строку, а не массив — иначе тип ячейки менялся бы от самой правки.
|
|
15795
16044
|
*
|
|
15796
|
-
*
|
|
15797
|
-
*
|
|
16045
|
+
* Ячейка показывает один файл, а несколько схлопывает в счётчик, и весь список с добавлением
|
|
16046
|
+
* и удалением живёт в поп-апе — тот же набор, что у контейнера вложений в карточке объекта.
|
|
15798
16047
|
*/
|
|
15799
|
-
const useAttachmentsCell = ({ attribute, row, canEdit, onChange }) => {
|
|
16048
|
+
const useAttachmentsCell = ({ attribute, row, canEdit, onChange, }) => {
|
|
15800
16049
|
const [previewIndex, setPreviewIndex] = useState(null);
|
|
15801
|
-
const [
|
|
16050
|
+
const [isPopupOpen, , setPopupOpen] = useToggle(false);
|
|
15802
16051
|
const { attributeName, isEditable } = attribute;
|
|
15803
16052
|
const value = row.properties[attributeName];
|
|
15804
16053
|
const items = useMemo(() => parseAttachments(value), [value]);
|
|
16054
|
+
const view = useAttachmentsView({
|
|
16055
|
+
items,
|
|
16056
|
+
limit: ATTACHMENTS_SHOWN_ITEMS,
|
|
16057
|
+
initialViewMode: ATTACHMENTS_VIEW_MODE,
|
|
16058
|
+
});
|
|
16059
|
+
const { setShowMore } = view;
|
|
15805
16060
|
const previewImages = useAttachmentPreviewImages({ items, active: previewIndex !== null });
|
|
15806
16061
|
const downloadByIndex = useAttachmentDownload(items);
|
|
15807
16062
|
// Те же два условия, что и у обычной ячейки: режим таблицы и разрешение самого атрибута.
|
|
15808
16063
|
const editable = canEdit && isEditable;
|
|
15809
16064
|
const persist = useCallback((next) => onChange(row.key, attributeName, JSON.stringify(next)), [attributeName, onChange, row.key]);
|
|
16065
|
+
const edit = useAttachmentsCellEdit({ attribute, items, persist });
|
|
15810
16066
|
const onPreview = useCallback((link) => {
|
|
15811
16067
|
const index = items.findIndex(item => item.link === link);
|
|
15812
16068
|
if (index >= 0) {
|
|
@@ -15815,48 +16071,78 @@ const useAttachmentsCell = ({ attribute, row, canEdit, onChange }) => {
|
|
|
15815
16071
|
}, [items]);
|
|
15816
16072
|
const onClosePreview = useCallback(() => setPreviewIndex(null), []);
|
|
15817
16073
|
const onDownload = useCallback((_image, index) => downloadByIndex(index), [downloadByIndex]);
|
|
15818
|
-
const
|
|
15819
|
-
const
|
|
15820
|
-
|
|
15821
|
-
|
|
15822
|
-
|
|
15823
|
-
|
|
15824
|
-
|
|
15825
|
-
|
|
15826
|
-
|
|
15827
|
-
|
|
15828
|
-
|
|
15829
|
-
}
|
|
15830
|
-
|
|
16074
|
+
const onShowMore = useCallback(() => setShowMore(true), [setShowMore]);
|
|
16075
|
+
const onClosePopup = useCallback(() => setPopupOpen(false), [setPopupOpen]);
|
|
16076
|
+
/**
|
|
16077
|
+
* На правку поп-ап открывается всегда, даже у пустой ячейки: другого места, откуда добавить
|
|
16078
|
+
* первый файл, у колонки нет. На чтение единственный файл ведёт прямо в галерею, а свёрнутый
|
|
16079
|
+
* счётчик — в тот же поп-ап, только без кнопок.
|
|
16080
|
+
*/
|
|
16081
|
+
const onCellClick = useCallback(() => {
|
|
16082
|
+
if (!editable && items.length === ATTACHMENTS_INLINE_LIMIT) {
|
|
16083
|
+
onPreview(items[0].link);
|
|
16084
|
+
return;
|
|
16085
|
+
}
|
|
16086
|
+
if (editable || items.length) {
|
|
16087
|
+
setPopupOpen(true);
|
|
16088
|
+
}
|
|
16089
|
+
}, [editable, items, onPreview, setPopupOpen]);
|
|
15831
16090
|
return {
|
|
16091
|
+
...view,
|
|
16092
|
+
...edit,
|
|
15832
16093
|
items,
|
|
15833
16094
|
editable,
|
|
16095
|
+
onShowMore,
|
|
16096
|
+
isPopupOpen,
|
|
16097
|
+
onClosePopup,
|
|
16098
|
+
onCellClick,
|
|
15834
16099
|
previewIndex,
|
|
15835
16100
|
previewImages,
|
|
15836
|
-
isLinkDialogOpen,
|
|
15837
16101
|
onPreview,
|
|
15838
16102
|
onClosePreview,
|
|
15839
16103
|
onDownload,
|
|
15840
|
-
onDelete,
|
|
15841
|
-
onOpenLinkDialog,
|
|
15842
|
-
onCloseLinkDialog,
|
|
15843
|
-
onAddByLink,
|
|
15844
16104
|
};
|
|
15845
16105
|
};
|
|
15846
16106
|
|
|
15847
16107
|
/**
|
|
15848
|
-
* Колонка со
|
|
16108
|
+
* Колонка со вложениями.
|
|
15849
16109
|
*
|
|
15850
16110
|
* Тип у атрибута строковый, вложениями его делает `subType: "Attachments"` в схеме контейнера —
|
|
15851
16111
|
* поэтому ветка стоит раньше разбора типа и обычных редакторов ячейки.
|
|
16112
|
+
*
|
|
16113
|
+
* Сама ячейка показывает один файл, а несколько схлопывает в строку со значком ссылки
|
|
16114
|
+
* и счётчиком: в ширину колонки список файлов не помещается. Весь список живёт в поп-апе.
|
|
15852
16115
|
*/
|
|
15853
16116
|
const AttachmentsCell = memo(({ attribute, row, canEdit, onChange }) => {
|
|
15854
16117
|
const { t } = useGlobalContext();
|
|
15855
|
-
const
|
|
15856
|
-
|
|
16118
|
+
const state = useAttachmentsCell({ attribute, row, canEdit, onChange });
|
|
16119
|
+
const { items, editable, isPopupOpen, onClosePopup, onCellClick } = state;
|
|
16120
|
+
const [single] = items;
|
|
16121
|
+
const isCollapsed = items.length > ATTACHMENTS_INLINE_LIMIT;
|
|
16122
|
+
const fileType = useMemo(() => (single ? getFileType(single.mimeType, single.name) : undefined), [single]);
|
|
16123
|
+
const isImage = useMemo(() => !!fileType && IMAGE_FILE_TYPES.includes(fileType), [fileType]);
|
|
16124
|
+
// Удаление единственного файла — действие самой ячейки, поп-ап ради него открывать незачем.
|
|
16125
|
+
const handleDelete = useCallback((event) => {
|
|
16126
|
+
event.stopPropagation();
|
|
16127
|
+
state.onDelete(single.link);
|
|
16128
|
+
}, [single, state]);
|
|
16129
|
+
const renderCell = () => {
|
|
16130
|
+
if (isCollapsed) {
|
|
16131
|
+
return (jsxs(Fragment$1, { children: [jsx(AttachmentsCellLinkIcon, { kind: "link" }), jsx(AttachmentsCellLabel, { children: t("attachments.objectsCount", {
|
|
16132
|
+
ns: "common",
|
|
16133
|
+
total: items.length,
|
|
16134
|
+
defaultValue: "Объектов: {{total}}",
|
|
16135
|
+
}) })] }));
|
|
16136
|
+
}
|
|
16137
|
+
if (!single) {
|
|
16138
|
+
return jsx(CellPlaceholder, { children: "\u2014" });
|
|
16139
|
+
}
|
|
16140
|
+
return (jsxs(Fragment$1, { children: [isImage ? (jsx(FileImagePreview, { size: "1rem", isExternal: single.isExternal, link: single.link })) : (jsx(AttachmentsCellIcon, { fileType: fileType })), jsx(AttachmentsCellLabel, { title: single.name, children: single.name }), editable && jsx(IconButton, { kind: "delete", tabIndex: 0, onClick: handleDelete })] }));
|
|
16141
|
+
};
|
|
16142
|
+
return (jsxs(Fragment$1, { children: [jsx(Popup, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, isVisible: isPopupOpen, onRequestClose: onClosePopup, placement: "bottom-start", anchor: ref => (jsx(AttachmentsCellBox, { ref: ref, "$interactive": editable || !!items.length, onClick: onCellClick, children: renderCell() })), children: jsx(AttachmentsCellPopup, { alias: attribute.alias, state: state }) }), jsx(AttachmentLinkDialog, { isOpen: state.isLinkDialogOpen, onClose: state.onCloseLinkDialog, onSubmit: state.onAddByLink }), state.previewIndex !== null && (jsx(Preview, { images: state.previewImages, initialIndex: state.previewIndex, isOpen: true, onClose: state.onClosePreview, onDownload: state.onDownload, errorTitleText: t("attachments.resourceUnavailable", {
|
|
15857
16143
|
ns: "common",
|
|
15858
16144
|
defaultValue: "Ресурс недоступен",
|
|
15859
|
-
}) }, previewIndex))] }));
|
|
16145
|
+
}) }, state.previewIndex))] }));
|
|
15860
16146
|
});
|
|
15861
16147
|
|
|
15862
16148
|
/**
|
|
@@ -19628,5 +19914,5 @@ const DEFAULT_HEATMAP_STYLE = {
|
|
|
19628
19914
|
],
|
|
19629
19915
|
};
|
|
19630
19916
|
|
|
19631
|
-
export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddButtonRow, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BG_IMAGE_SLOT_ID, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINERS_GROUP_DEFAULTS, CONTAINER_BODY_ATTRIBUTE, CONTAINER_BODY_FILL_STYLE, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerBackground, ContainerChildren, ContainerLoading, ContainerRoot, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DASHBOARD_OVERLAY_Z_INDEX, DEFAULT_ATTRIBUTE_NAME, DEFAULT_BARCHART_RADIUS, DEFAULT_BASE_MAP, DEFAULT_BLUR, DEFAULT_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_RADIUS, DEFAULT_CIRCLE_STROKE_WIDTH, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_BASE, DEFAULT_FILL_EXTRUSION_HEIGHT, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_EXTRUSION_VERTICAL_GRADIENT, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_GRID_GAP, DEFAULT_HEATMAP_COLOR, DEFAULT_HEATMAP_INTENSITY, DEFAULT_HEATMAP_RADIUS, DEFAULT_HEATMAP_STYLE, DEFAULT_HEATMAP_WEIGHT, DEFAULT_ICON_ANCHOR, DEFAULT_ICON_OVERLAP, DEFAULT_ICON_PADDING, DEFAULT_ICON_ROTATE, DEFAULT_ICON_SIZE, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_STYLE, DEFAULT_LINE_WIDTH, DEFAULT_LNG, DEFAULT_OPACITY, DEFAULT_PAGES_CONFIG, DEFAULT_PIECHART_RADIUS, DEFAULT_SYMBOL_COLOR, DEFAULT_SYMBOL_HALO_COLOR, DEFAULT_SYMBOL_PLACEMENT, DEFAULT_SYMBOL_SPACING, DEFAULT_SYMBOL_STYLE, DEFAULT_TEXT_ANCHOR, DEFAULT_TEXT_JUSTIFY, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_TRANSFORM, DEFAULT_TRACK_FR, DEFAULT_TRANSLATE, DEFAULT_ZOOM, DRAG_THRESHOLD_PX, Dashboard, DashboardCheckbox, DashboardChip, DashboardContent, DashboardContext, DashboardDefaultHeader, DashboardHeader, DashboardLoading, DashboardPlaceholder, DashboardPlaceholderWrap, DashboardProvider, DashboardWrapper, DataSourceContainer, DataSourceError, DataSourceErrorContainer, DataSourceInnerContainer, DataSourceProgressContainer, DateFormat, DefaultAttributesContainer, DefaultHeaderContainer, DefaultHeaderWrapper, DividerContainer, EMPTY_DATA_SOURCE_LAYER_INFO, EXTENT_FILTER_NAME, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTable, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FR_PRECISION, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GEOMETRY_FILTER_NAME, GRID_AUTO_FILL_DEFAULTS, GRID_CELL_ATTR, GRID_CELL_ID_PREFIX, GRID_DRAGGING_ATTR, GRID_DRAG_SOURCE_ATTR, GRID_DROP_TARGET_ATTR, GRID_FILL_DEFAULTS, GRID_ROW_ID_PREFIX, GlobalContext, GlobalProvider, GridRowContainer, HANDLE_BLEED_PX, Header, HeaderContainer, HeaderFontColorMixin, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroupList, LayerIcon, LayerIconContainer, LayerListContainer, LayerTree, LayersContainer, LayersListWrapper, LinearProgressContainer, LogTerminal, LogoContainer, MAP_VIEW_FILTER_NAMES, MAX_CHART_WIDTH, MAX_TRACKS, MIN_TRACK_PX, MIN_TRACK_RATIO, Map$1 as Map, MapContext, MapProvider, NON_TRACK_SLOT_IDS, NO_CELL_DRAG_SELECTOR, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, PIE_CHART_TOOLTIP_STYLE, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROJECT_ALIAS_PROP, PROJECT_FILTER_NAME, PROJECT_NAME_PROP, PROJECT_PROPS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, QUERY_DESCRIPTION_CACHE_TTL, RESIZE_HANDLE_ATTR, ResizeHandle, RoundedBackgroundContainer, SAVE_HOOK_RESULT_DURATION, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, StructuredDataContainer, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TITLE_SLOT_IDS, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, VoteContainer, WidgetType, ZOOM_FILTER_NAME, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, buildGridTemplate, buildTrackTemplate, checkEqualOrIncludes, checkIsLoading, collectConfigIds, colorToHex, containsNodeId, createConfigLayer, createConfigPage, createGridCell, createGridIdFactory, createGridRow, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, findCellContext, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getAverageTrackSize, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDataSourceLayerInfo, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getImageUrl, getLayerClientStyle, getLayerInfo, getLayerInfoAttribute, getLayerInfoFromDataSources, getLayoutChildren, getMapViewDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProjectValue, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getTrackSize, getTrackSizeKey, getTrackSizes, getWrapperSizeStyle, hasContainerBgImage, hexToRgba, isCrossOriginUrl, isEmptyElementValue, isEmptyValue, isFeaturesFilterValue, isFillSize, isFrSize, isGridNode, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isRootOwningContainer, isTreeFilterValue, isVisibleContainer, mapNodeById, mergeAttributeConfigurations, metersPerPixel, noMarginMixin, numberOptions, parseFrValue, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, removeTracks, replaceNodesByIds, rgbToHex, roundFr, roundTotalSum, setLayoutChildren, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toConditionsArray, toCssSize, toFrSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentDownload, useAttachmentItems, useAttachmentPreviewImages, useAutoCompleteControl, useBeforeSave, useBgImageHost, useChartChange, useChartData, useContainerAttributes, useContainerRoot, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSourceLoading, useDataSources, useDebouncedCallback, useDiffPage, useEditGroupAttributes, useEqualTileWidth, useExpandableContainers, useExportPdf, useFeatureSaveHooks, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRemoteTask, useRenderElement, useResizeBox, useResizeDrag, useSavePrototypeBuilder, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useWrapperSize, useZoomToFeatures, useZoomToPoint, withTrackSize };
|
|
19917
|
+
export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddButtonRow, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BG_IMAGE_SLOT_ID, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINERS_GROUP_DEFAULTS, CONTAINER_BODY_ATTRIBUTE, CONTAINER_BODY_FILL_STYLE, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerBackground, ContainerChildren, ContainerLoading, ContainerRoot, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DASHBOARD_OVERLAY_Z_INDEX, DEFAULT_ATTRIBUTE_NAME, DEFAULT_BARCHART_RADIUS, DEFAULT_BASE_MAP, DEFAULT_BLUR, DEFAULT_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_RADIUS, DEFAULT_CIRCLE_STROKE_WIDTH, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_BASE, DEFAULT_FILL_EXTRUSION_HEIGHT, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_EXTRUSION_VERTICAL_GRADIENT, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_GRID_GAP, DEFAULT_HEATMAP_COLOR, DEFAULT_HEATMAP_INTENSITY, DEFAULT_HEATMAP_RADIUS, DEFAULT_HEATMAP_STYLE, DEFAULT_HEATMAP_WEIGHT, DEFAULT_ICON_ANCHOR, DEFAULT_ICON_OVERLAP, DEFAULT_ICON_PADDING, DEFAULT_ICON_ROTATE, DEFAULT_ICON_SIZE, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_STYLE, DEFAULT_LINE_WIDTH, DEFAULT_LNG, DEFAULT_OPACITY, DEFAULT_PAGES_CONFIG, DEFAULT_PIECHART_RADIUS, DEFAULT_SYMBOL_COLOR, DEFAULT_SYMBOL_HALO_COLOR, DEFAULT_SYMBOL_PLACEMENT, DEFAULT_SYMBOL_SPACING, DEFAULT_SYMBOL_STYLE, DEFAULT_TEXT_ANCHOR, DEFAULT_TEXT_JUSTIFY, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_TRANSFORM, DEFAULT_TRACK_FR, DEFAULT_TRANSLATE, DEFAULT_ZOOM, DRAG_THRESHOLD_PX, Dashboard, DashboardCheckbox, DashboardChip, DashboardContent, DashboardContext, DashboardDefaultHeader, DashboardHeader, DashboardLoading, DashboardPlaceholder, DashboardPlaceholderWrap, DashboardProvider, DashboardWrapper, DataSourceContainer, DataSourceError, DataSourceErrorContainer, DataSourceInnerContainer, DataSourceProgressContainer, DateFormat, DefaultAttributesContainer, DefaultHeaderContainer, DefaultHeaderWrapper, DividerContainer, EMPTY_DATA_SOURCE_LAYER_INFO, EXTENT_FILTER_NAME, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTable, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FR_PRECISION, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GEOMETRY_FILTER_NAME, GRID_AUTO_FILL_DEFAULTS, GRID_CELL_ATTR, GRID_CELL_ID_PREFIX, GRID_DRAGGING_ATTR, GRID_DRAG_SOURCE_ATTR, GRID_DROP_TARGET_ATTR, GRID_FILL_DEFAULTS, GRID_ROW_ID_PREFIX, GlobalContext, GlobalProvider, GridRowContainer, HANDLE_BLEED_PX, Header, HeaderContainer, HeaderFontColorMixin, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroupList, LayerIcon, LayerIconContainer, LayerListContainer, LayerTree, LayersContainer, LayersListWrapper, LinearProgressContainer, LogTerminal, LogoContainer, MAP_VIEW_FILTER_NAMES, MAX_CHART_WIDTH, MAX_TRACKS, MIN_TRACK_PX, MIN_TRACK_RATIO, Map$1 as Map, MapContext, MapProvider, NON_TRACK_SLOT_IDS, NO_CELL_DRAG_SELECTOR, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, PIE_CHART_TOOLTIP_STYLE, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROJECT_ALIAS_PROP, PROJECT_FILTER_NAME, PROJECT_NAME_PROP, PROJECT_PROPS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, QUERY_DESCRIPTION_CACHE_TTL, RESIZE_HANDLE_ATTR, ResizeHandle, RoundedBackgroundContainer, SAVE_HOOK_RESULT_DURATION, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, StructuredDataContainer, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TITLE_SLOT_IDS, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, VoteContainer, WidgetType, ZOOM_FILTER_NAME, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, buildGridTemplate, buildTrackTemplate, checkEqualOrIncludes, checkIsLoading, collectConfigIds, colorToHex, containsNodeId, createConfigLayer, createConfigPage, createGridCell, createGridIdFactory, createGridRow, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, findCellContext, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getAverageTrackSize, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDataSourceLayerInfo, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getImageUrl, getLayerClientStyle, getLayerInfo, getLayerInfoAttribute, getLayerInfoFromDataSources, getLayoutChildren, getMapViewDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProjectValue, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getShownItemsLimit, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getTrackSize, getTrackSizeKey, getTrackSizes, getWrapperSizeStyle, hasContainerBgImage, hexToRgba, isCrossOriginUrl, isEmptyElementValue, isEmptyValue, isFeaturesFilterValue, isFillSize, isFrSize, isGridNode, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isRootOwningContainer, isTreeFilterValue, isVisibleContainer, mapNodeById, mergeAttributeConfigurations, metersPerPixel, noMarginMixin, numberOptions, parseFrValue, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, removeTracks, replaceNodesByIds, rgbToHex, roundFr, roundTotalSum, setLayoutChildren, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toConditionsArray, toCssSize, toFrSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentDownload, useAttachmentItems, useAttachmentPreviewImages, useAttachmentsView, useAutoCompleteControl, useBeforeSave, useBgImageHost, useChartChange, useChartData, useContainerAttributes, useContainerRoot, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSourceLoading, useDataSources, useDebouncedCallback, useDiffPage, useEditGroupAttributes, useEqualTileWidth, useExpandableContainers, useExportPdf, useFeatureSaveHooks, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRemoteTask, useRenderElement, useResizeBox, useResizeDrag, useSavePrototypeBuilder, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useWrapperSize, useZoomToFeatures, useZoomToPoint, withTrackSize };
|
|
19632
19918
|
//# sourceMappingURL=react.esm.js.map
|